From c34e204a4ef68dfb994a918d68c7751521131eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 15 Feb 2007 23:40:43 +0000 Subject: [PATCH] updated mesa to 6.5.2 updated the mesa software addon to work again (maybe would need more work) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20137 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/opengl/GL/gl.h | 102 +- headers/os/opengl/GL/glext.h | 683 +- headers/os/opengl/GL/glu.h | 18 +- headers/os/opengl/GL/glut.h | 28 +- headers/private/opengl/GL/internal/glcore.h | 39 +- .../MesaSoftwareRenderer.cpp | 891 +- .../MesaSoftwareRenderer.h | 113 +- src/kits/opengl/GLDispatcher.h | 8 - .../glu/libnurbs/interface/bezierEval.cc | 6 +- .../glu/libnurbs/interface/glcurveval.cc | 5 +- .../glu/libnurbs/interface/glsurfeval.cc | 6 +- .../opengl/glu/libnurbs/interface/mystdio.h | 12 +- src/kits/opengl/glu/libnurbs/internals/arc.cc | 24 +- .../glu/libnurbs/internals/arcsorter.cc | 6 +- .../opengl/glu/libnurbs/internals/arctess.cc | 2 +- .../glu/libnurbs/internals/basiccrveval.cc | 24 +- .../glu/libnurbs/internals/basiccrveval.h | 5 +- .../glu/libnurbs/internals/basicsurfeval.cc | 44 +- .../glu/libnurbs/internals/basicsurfeval.h | 5 +- src/kits/opengl/glu/libnurbs/internals/bin.cc | 8 +- .../opengl/glu/libnurbs/internals/bufpool.h | 5 +- .../glu/libnurbs/internals/cachingeval.h | 5 +- src/kits/opengl/glu/libnurbs/internals/ccw.cc | 84 +- .../glu/libnurbs/internals/dataTransform.cc | 9 +- .../glu/libnurbs/internals/flistsorter.h | 5 +- .../glu/libnurbs/internals/intersect.cc | 8 +- .../glu/libnurbs/internals/knotvector.cc | 6 +- .../opengl/glu/libnurbs/internals/maplist.cc | 6 +- .../internals/monoTriangulationBackend.cc | 6 +- .../glu/libnurbs/internals/monotonizer.h | 46 +- .../glu/libnurbs/internals/nurbsinterfac.cc | 8 +- .../glu/libnurbs/internals/nurbstess.cc | 12 +- .../opengl/glu/libnurbs/internals/patch.cc | 6 +- .../opengl/glu/libnurbs/internals/quilt.cc | 12 +- .../opengl/glu/libnurbs/internals/slicer.cc | 19 +- .../opengl/glu/libnurbs/internals/sorter.cc | 10 +- .../opengl/glu/libnurbs/internals/sorter.h | 5 +- .../glu/libnurbs/internals/splitarcs.cc | 12 +- .../opengl/glu/libnurbs/internals/tobezier.cc | 6 +- .../opengl/glu/libnurbs/internals/trimline.cc | 9 +- .../opengl/glu/libnurbs/nurbtess/monoChain.cc | 6 +- .../libnurbs/nurbtess/monoTriangulation.cc | 14 +- .../opengl/glu/libnurbs/nurbtess/mystdio.h | 12 +- .../opengl/glu/libnurbs/nurbtess/polyDBG.cc | 2 + .../glu/libnurbs/nurbtess/sampleComp.cc | 6 +- .../glu/libnurbs/nurbtess/sampleCompRight.cc | 6 +- .../glu/libnurbs/nurbtess/sampleMonoPoly.cc | 10 +- src/kits/opengl/glu/libtess/dict.c | 9 +- src/kits/opengl/glu/libutil/error.c | 65 +- src/kits/opengl/glu/libutil/mipmap.c | 173 +- src/kits/opengl/glu/libutil/project.c | 125 +- src/kits/opengl/glu/libutil/quad.c | 6 +- src/kits/opengl/glut/glutCallback.cpp | 17 - src/kits/opengl/glut/glutWindow.h | 2 - src/kits/opengl/mesa/Jamfile | 68 +- src/kits/opengl/mesa/array_cache/ac_context.c | 4 +- src/kits/opengl/mesa/array_cache/ac_import.c | 100 +- .../opengl/mesa/drivers/common/driverfuncs.c | 60 +- src/kits/opengl/mesa/glapi/dispatch.h | 3843 ++ src/kits/opengl/mesa/glapi/glX_XML.py | 476 - src/kits/opengl/mesa/glapi/glX_doc.py | 278 - src/kits/opengl/mesa/glapi/glX_proto_send.py | 915 - src/kits/opengl/mesa/glapi/gl_API.xml | 9729 ----- src/kits/opengl/mesa/glapi/gl_SPARC_asm.py | 134 - src/kits/opengl/mesa/glapi/gl_XML.py | 561 - src/kits/opengl/mesa/glapi/gl_apitemp.py | 235 - src/kits/opengl/mesa/glapi/gl_offsets.py | 86 - src/kits/opengl/mesa/glapi/gl_procs.py | 179 - src/kits/opengl/mesa/glapi/gl_table.py | 98 - src/kits/opengl/mesa/glapi/gl_x86_asm.py | 210 - src/kits/opengl/mesa/glapi/glapi.c | 796 +- src/kits/opengl/mesa/glapi/glapi.h | 56 +- src/kits/opengl/mesa/glapi/glapioffsets.h | 1131 +- src/kits/opengl/mesa/glapi/glapitable.h | 762 +- src/kits/opengl/mesa/glapi/glapitemp.h | 5332 +-- src/kits/opengl/mesa/glapi/glprocs.h | 2975 +- src/kits/opengl/mesa/glapi/glthread.c | 37 +- src/kits/opengl/mesa/glapi/glthread.h | 64 +- src/kits/opengl/mesa/glapi/license.py | 47 - src/kits/opengl/mesa/glapi/mesadef.py | 223 - .../mesa/glapi/next_available_offset.sh | 39 - src/kits/opengl/mesa/main/KNOWN_BUGS | 21 - src/kits/opengl/mesa/main/accum.c | 57 +- src/kits/opengl/mesa/main/api_arrayelt.c | 1237 +- src/kits/opengl/mesa/main/api_arrayelt.h | 5 + src/kits/opengl/mesa/main/api_loopback.c | 473 +- src/kits/opengl/mesa/main/api_noop.c | 369 +- src/kits/opengl/mesa/main/api_noop.h | 125 +- src/kits/opengl/mesa/main/api_validate.c | 10 +- src/kits/opengl/mesa/main/arrayobj.c | 419 + src/kits/opengl/mesa/main/arrayobj.h | 70 + src/kits/opengl/mesa/main/attrib.c | 232 +- src/kits/opengl/mesa/main/bitset.h | 122 + src/kits/opengl/mesa/main/blend.c | 53 +- src/kits/opengl/mesa/main/blend.h | 9 +- src/kits/opengl/mesa/main/bufferobj.c | 382 +- src/kits/opengl/mesa/main/bufferobj.h | 5 + src/kits/opengl/mesa/main/buffers.c | 676 +- src/kits/opengl/mesa/main/buffers.h | 18 +- src/kits/opengl/mesa/main/clip.c | 9 +- src/kits/opengl/mesa/main/colortab.c | 325 +- src/kits/opengl/mesa/main/colortab.h | 14 +- src/kits/opengl/mesa/main/config.h | 82 +- src/kits/opengl/mesa/main/context.c | 999 +- src/kits/opengl/mesa/main/context.h | 155 +- src/kits/opengl/mesa/main/convolve.c | 35 +- src/kits/opengl/mesa/main/dd.h | 189 +- src/kits/opengl/mesa/main/debug.c | 24 +- src/kits/opengl/mesa/main/depth.c | 18 +- src/kits/opengl/mesa/main/depth.h | 10 +- src/kits/opengl/mesa/main/depthstencil.c | 661 + src/kits/opengl/mesa/main/depthstencil.h | 56 + src/kits/opengl/mesa/main/dispatch.c | 31 +- src/kits/opengl/mesa/main/dlist.c | 6620 ++-- src/kits/opengl/mesa/main/dlist.h | 31 +- src/kits/opengl/mesa/main/drawpix.c | 359 +- src/kits/opengl/mesa/main/enable.c | 171 +- src/kits/opengl/mesa/main/enums.c | 5792 ++- src/kits/opengl/mesa/main/enums.h | 6 +- src/kits/opengl/mesa/main/execmem.c | 133 + src/kits/opengl/mesa/main/extensions.c | 94 +- src/kits/opengl/mesa/main/extensions.h | 6 +- src/kits/opengl/mesa/main/fbobject.c | 1637 + src/kits/opengl/mesa/main/fbobject.h | 134 + src/kits/opengl/mesa/main/fog.c | 31 +- src/kits/opengl/mesa/main/framebuffer.c | 820 + src/kits/opengl/mesa/main/framebuffer.h | 76 + src/kits/opengl/mesa/main/get.c | 9117 ++--- src/kits/opengl/mesa/main/getstring.c | 287 + src/kits/opengl/mesa/main/glheader.h | 118 +- src/kits/opengl/mesa/main/hash.c | 288 +- src/kits/opengl/mesa/main/hash.h | 25 +- src/kits/opengl/mesa/main/hint.c | 13 + src/kits/opengl/mesa/main/histogram.c | 4 +- src/kits/opengl/mesa/main/image.c | 839 +- src/kits/opengl/mesa/main/image.h | 70 +- src/kits/opengl/mesa/main/imports.c | 256 +- src/kits/opengl/mesa/main/imports.h | 235 +- src/kits/opengl/mesa/main/light.c | 276 +- src/kits/opengl/mesa/main/light.h | 4 + src/kits/opengl/mesa/main/macros.h | 47 +- src/kits/opengl/mesa/main/matrix.c | 131 +- src/kits/opengl/mesa/main/mipmap.c | 1147 + src/kits/opengl/mesa/main/mipmap.h | 52 + src/kits/opengl/mesa/main/mm.c | 278 + src/kits/opengl/mesa/main/mm.h | 92 + src/kits/opengl/mesa/main/mtypes.h | 1302 +- src/kits/opengl/mesa/main/occlude.c | 405 +- src/kits/opengl/mesa/main/occlude.h | 19 +- src/kits/opengl/mesa/main/pixel.c | 853 +- src/kits/opengl/mesa/main/pixel.h | 41 +- src/kits/opengl/mesa/main/points.c | 86 +- src/kits/opengl/mesa/main/points.h | 7 +- src/kits/opengl/mesa/main/polygon.c | 3 +- src/kits/opengl/mesa/main/rastpos.c | 9 +- src/kits/opengl/mesa/main/rbadaptors.c | 577 + src/kits/opengl/mesa/main/rbadaptors.h | 40 + src/kits/opengl/mesa/main/renderbuffer.c | 2146 ++ src/kits/opengl/mesa/main/renderbuffer.h | 108 + src/kits/opengl/mesa/main/state.c | 1216 +- src/kits/opengl/mesa/main/state.h | 6 + src/kits/opengl/mesa/main/stencil.c | 381 +- src/kits/opengl/mesa/main/stencil.h | 20 +- src/kits/opengl/mesa/main/texcompress.c | 162 +- src/kits/opengl/mesa/main/texcompress.h | 25 +- src/kits/opengl/mesa/main/texcompress_fxt1.c | 269 +- src/kits/opengl/mesa/main/texcompress_s3tc.c | 247 +- src/kits/opengl/mesa/main/texenvprogram.c | 1281 + .../arbfragparse.h => main/texenvprogram.h} | 24 +- src/kits/opengl/mesa/main/texformat.c | 623 +- src/kits/opengl/mesa/main/texformat.h | 41 +- src/kits/opengl/mesa/main/texformat_tmp.h | 1240 +- src/kits/opengl/mesa/main/teximage.c | 1601 +- src/kits/opengl/mesa/main/teximage.h | 42 +- src/kits/opengl/mesa/main/texobj.c | 320 +- src/kits/opengl/mesa/main/texobj.h | 17 +- src/kits/opengl/mesa/main/texrender.c | 434 + src/kits/opengl/mesa/main/texrender.h | 15 + src/kits/opengl/mesa/main/texstate.c | 787 +- src/kits/opengl/mesa/main/texstate.h | 44 +- src/kits/opengl/mesa/main/texstore.c | 2939 +- src/kits/opengl/mesa/main/texstore.h | 122 +- src/kits/opengl/mesa/main/varray.c | 155 +- src/kits/opengl/mesa/main/version.h | 10 +- src/kits/opengl/mesa/main/vtxfmt.c | 161 +- src/kits/opengl/mesa/main/vtxfmt_tmp.h | 148 +- src/kits/opengl/mesa/math/m_debug_clip.c | 6 +- src/kits/opengl/mesa/math/m_debug_norm.c | 13 +- src/kits/opengl/mesa/math/m_debug_util.h | 48 +- src/kits/opengl/mesa/math/m_debug_xform.c | 16 +- src/kits/opengl/mesa/math/m_matrix.c | 159 +- src/kits/opengl/mesa/math/m_matrix.h | 90 +- src/kits/opengl/mesa/math/m_trans_tmp.h | 54 +- src/kits/opengl/mesa/math/m_translate.c | 205 +- src/kits/opengl/mesa/math/m_translate.h | 26 +- src/kits/opengl/mesa/math/m_xform.c | 10 +- src/kits/opengl/mesa/math/m_xform.h | 6 +- src/kits/opengl/mesa/ppc/glapi_ppc.S | 0 src/kits/opengl/mesa/shader/arbfragparse.c | 230 - src/kits/opengl/mesa/shader/arbprogparse.c | 2140 +- src/kits/opengl/mesa/shader/arbprogparse.h | 53 +- src/kits/opengl/mesa/shader/arbprogram.c | 472 +- src/kits/opengl/mesa/shader/arbprogram.h | 18 +- src/kits/opengl/mesa/shader/arbprogram.syn | 2786 -- src/kits/opengl/mesa/shader/arbvertparse.c | 224 - src/kits/opengl/mesa/shader/asmopcodes.reg | 78 - src/kits/opengl/mesa/shader/atifragshader.c | 510 +- src/kits/opengl/mesa/shader/atifragshader.h | 20 +- src/kits/opengl/mesa/shader/grammar.syn | 567 - .../opengl/mesa/shader/grammar/descrip.mms | 41 + .../mesa/shader/{ => grammar}/grammar.c | 76 +- .../mesa/shader/{ => grammar}/grammar.h | 10 +- .../opengl/mesa/shader/grammar/grammar_crt.c | 64 + .../opengl/mesa/shader/grammar/grammar_crt.h | 20 + .../mesa/shader/{ => grammar}/grammar_mesa.c | 12 +- .../mesa/shader/{ => grammar}/grammar_mesa.h | 0 .../mesa/shader/{ => grammar}/grammar_syn.h | 0 src/kits/opengl/mesa/shader/grammar/sources | 8 + src/kits/opengl/mesa/shader/nvfragparse.c | 434 +- src/kits/opengl/mesa/shader/nvfragparse.h | 4 +- src/kits/opengl/mesa/shader/nvfragprog.h | 166 - src/kits/opengl/mesa/shader/nvprogram.c | 125 +- src/kits/opengl/mesa/shader/nvvertexec.c | 464 +- src/kits/opengl/mesa/shader/nvvertexec.h | 34 +- src/kits/opengl/mesa/shader/nvvertparse.c | 392 +- src/kits/opengl/mesa/shader/nvvertparse.h | 6 +- src/kits/opengl/mesa/shader/nvvertprog.h | 110 - src/kits/opengl/mesa/shader/program.c | 1514 +- src/kits/opengl/mesa/shader/program.h | 156 +- .../opengl/mesa/shader/program_instruction.h | 360 + src/kits/opengl/mesa/shader/programopt.c | 305 + .../s_auxbuffer.h => shader/programopt.h} | 18 +- src/kits/opengl/mesa/shader/shaderobjects.c | 1137 +- src/kits/opengl/mesa/shader/shaderobjects.h | 202 +- .../opengl/mesa/shader/shaderobjects_3dlabs.c | 2144 ++ .../opengl/mesa/shader/shaderobjects_3dlabs.h | 51 + src/kits/opengl/mesa/shader/slang/descrip.mms | 65 + .../mesa/shader/slang/library/gc_to_bin.c | 82 + .../slang/library/slang_builtin_vec4_gc.h | 62 + .../slang/library/slang_common_builtin_gc.h | 647 + .../mesa/shader/slang/library/slang_core_gc.h | 545 + .../slang/library/slang_fragment_builtin_gc.h | 79 + .../slang/library/slang_pp_directives_syn.h | 239 + .../slang/library/slang_pp_expression_syn.h | 179 + .../slang/library/slang_pp_version_syn.h | 69 + .../{ => slang/library}/slang_shader_syn.h | 1515 +- .../slang/library/slang_vertex_builtin_gc.h | 78 + .../mesa/shader/slang/library/syn_to_c.c | 72 + .../opengl/mesa/shader/slang/slang_analyse.c | 100 + .../opengl/mesa/shader/slang/slang_analyse.h | 50 + .../opengl/mesa/shader/slang/slang_assemble.c | 1542 + .../opengl/mesa/shader/slang/slang_assemble.h | 278 + .../shader/slang/slang_assemble_assignment.c | 223 + .../shader/slang/slang_assemble_assignment.h | 45 + .../shader/slang/slang_assemble_conditional.c | 448 + .../shader/slang/slang_assemble_conditional.h | 51 + .../shader/slang/slang_assemble_constructor.c | 401 + .../shader/slang/slang_assemble_constructor.h | 57 + .../shader/slang/slang_assemble_typeinfo.c | 625 + .../shader/slang/slang_assemble_typeinfo.h | 152 + .../opengl/mesa/shader/slang/slang_compile.c | 2148 ++ .../opengl/mesa/shader/slang/slang_compile.h | 117 + .../shader/slang/slang_compile_function.c | 234 + .../shader/slang/slang_compile_function.h | 111 + .../shader/slang/slang_compile_operation.c | 115 + .../shader/slang/slang_compile_operation.h | 140 + .../mesa/shader/slang/slang_compile_struct.c | 169 + .../mesa/shader/slang/slang_compile_struct.h | 63 + .../shader/slang/slang_compile_variable.c | 408 + .../shader/slang/slang_compile_variable.h | 134 + .../opengl/mesa/shader/slang/slang_execute.c | 783 + .../opengl/mesa/shader/slang/slang_execute.h | 105 + .../mesa/shader/slang/slang_execute_x86.c | 754 + .../opengl/mesa/shader/slang/slang_export.c | 386 + .../opengl/mesa/shader/slang/slang_export.h | 183 + .../mesa/shader/slang/slang_library_noise.c | 501 + .../mesa/shader/slang/slang_library_noise.h | 42 + .../shader/slang/slang_library_texsample.c | 172 + .../shader/slang/slang_library_texsample.h | 44 + .../opengl/mesa/shader/slang/slang_link.c | 873 + .../opengl/mesa/shader/slang/slang_link.h | 353 + .../{arbvertparse.h => slang/slang_mesa.h} | 23 +- .../mesa/shader/slang/slang_preprocess.c | 1171 + .../mesa/shader/slang/slang_preprocess.h | 45 + .../opengl/mesa/shader/slang/slang_storage.c | 342 + .../opengl/mesa/shader/slang/slang_storage.h | 141 + .../opengl/mesa/shader/slang/slang_utility.c | 222 + .../opengl/mesa/shader/slang/slang_utility.h | 110 + src/kits/opengl/mesa/shader/slang/sources | 44 + .../opengl/mesa/shader/slang/traverse_wrap.h | 112 + .../mesa/shader/slang_common_builtin.gc | 836 - src/kits/opengl/mesa/shader/slang_core.gc | 1751 - .../mesa/shader/slang_fragment_builtin.gc | 366 - src/kits/opengl/mesa/shader/slang_shader.syn | 1499 - .../mesa/shader/slang_vertex_builtin.gc | 262 - src/kits/opengl/mesa/sparc/clip.S | 4 +- src/kits/opengl/mesa/sparc/glapi_sparc.S | 21111 +---------- src/kits/opengl/mesa/sparc/norm.S | 6 +- src/kits/opengl/mesa/sparc/sparc.c | 10 +- src/kits/opengl/mesa/sparc/sparc_matrix.h | 2 +- src/kits/opengl/mesa/sparc/xform.S | 4 +- src/kits/opengl/mesa/swrast/NOTES | 55 - src/kits/opengl/mesa/swrast/s_aaline.c | 4 +- src/kits/opengl/mesa/swrast/s_aalinetemp.h | 10 +- src/kits/opengl/mesa/swrast/s_aatriangle.c | 1 - src/kits/opengl/mesa/swrast/s_aatritemp.h | 22 +- src/kits/opengl/mesa/swrast/s_accum.c | 863 +- src/kits/opengl/mesa/swrast/s_accum.h | 11 +- src/kits/opengl/mesa/swrast/s_alpha.c | 270 +- src/kits/opengl/mesa/swrast/s_alpha.h | 2 +- src/kits/opengl/mesa/swrast/s_alphabuf.c | 332 - src/kits/opengl/mesa/swrast/s_alphabuf.h | 80 - src/kits/opengl/mesa/swrast/s_arbshader.c | 124 + src/kits/opengl/mesa/swrast/s_arbshader.h | 38 + src/kits/opengl/mesa/swrast/s_atifragshader.c | 271 +- src/kits/opengl/mesa/swrast/s_atifragshader.h | 2 +- src/kits/opengl/mesa/swrast/s_auxbuffer.c | 129 - src/kits/opengl/mesa/swrast/s_bitmap.c | 49 +- src/kits/opengl/mesa/swrast/s_blend.c | 1093 +- src/kits/opengl/mesa/swrast/s_blend.h | 11 +- src/kits/opengl/mesa/swrast/s_blit.c | 790 + src/kits/opengl/mesa/swrast/s_buffers.c | 460 +- src/kits/opengl/mesa/swrast/s_context.c | 279 +- src/kits/opengl/mesa/swrast/s_context.h | 162 +- src/kits/opengl/mesa/swrast/s_copypix.c | 717 +- src/kits/opengl/mesa/swrast/s_depth.c | 955 +- src/kits/opengl/mesa/swrast/s_depth.h | 26 +- src/kits/opengl/mesa/swrast/s_drawpix.c | 1054 +- src/kits/opengl/mesa/swrast/s_feedback.c | 13 +- src/kits/opengl/mesa/swrast/s_fog.c | 249 +- src/kits/opengl/mesa/swrast/s_fog.h | 4 +- src/kits/opengl/mesa/swrast/s_fragprog_to_c.c | 822 - src/kits/opengl/mesa/swrast/s_imaging.c | 64 +- src/kits/opengl/mesa/swrast/s_lines.c | 9 +- src/kits/opengl/mesa/swrast/s_linetemp.h | 13 +- src/kits/opengl/mesa/swrast/s_logic.c | 599 +- src/kits/opengl/mesa/swrast/s_logic.h | 13 +- src/kits/opengl/mesa/swrast/s_masking.c | 199 +- src/kits/opengl/mesa/swrast/s_masking.h | 30 +- src/kits/opengl/mesa/swrast/s_nvfragprog.c | 831 +- src/kits/opengl/mesa/swrast/s_nvfragprog.h | 2 +- src/kits/opengl/mesa/swrast/s_pixeltex.c | 111 - src/kits/opengl/mesa/swrast/s_pointtemp.h | 85 +- src/kits/opengl/mesa/swrast/s_readpix.c | 612 +- src/kits/opengl/mesa/swrast/s_span.c | 1416 +- src/kits/opengl/mesa/swrast/s_span.h | 44 +- src/kits/opengl/mesa/swrast/s_spantemp.h | 396 +- src/kits/opengl/mesa/swrast/s_stencil.c | 503 +- src/kits/opengl/mesa/swrast/s_stencil.h | 18 +- src/kits/opengl/mesa/swrast/s_tcc.c | 189 - src/kits/opengl/mesa/swrast/s_texcombine.c | 1170 + .../swrast/{s_pixeltex.h => s_texcombine.h} | 14 +- src/kits/opengl/mesa/swrast/s_texfilter.c | 2744 ++ .../swrast/{s_texture.h => s_texfilter.h} | 11 +- src/kits/opengl/mesa/swrast/s_texstore.c | 378 +- src/kits/opengl/mesa/swrast/s_texture.c | 3934 --- src/kits/opengl/mesa/swrast/s_triangle.c | 185 +- src/kits/opengl/mesa/swrast/s_tritemp.h | 196 +- src/kits/opengl/mesa/swrast/s_zoom.c | 563 +- src/kits/opengl/mesa/swrast/s_zoom.h | 38 +- src/kits/opengl/mesa/swrast/swrast.h | 252 +- src/kits/opengl/mesa/swrast_setup/NOTES | 65 - .../opengl/mesa/swrast_setup/ss_context.c | 86 +- .../opengl/mesa/swrast_setup/ss_context.h | 7 +- .../opengl/mesa/swrast_setup/ss_triangle.c | 2 +- src/kits/opengl/mesa/swrast_setup/ss_tritmp.h | 28 +- src/kits/opengl/mesa/tnl/NOTES | 102 - src/kits/opengl/mesa/tnl/t_array_api.c | 82 +- src/kits/opengl/mesa/tnl/t_array_import.c | 221 +- src/kits/opengl/mesa/tnl/t_context.c | 103 +- src/kits/opengl/mesa/tnl/t_context.h | 369 +- src/kits/opengl/mesa/tnl/t_pipeline.c | 184 +- src/kits/opengl/mesa/tnl/t_pipeline.h | 11 +- src/kits/opengl/mesa/tnl/t_save_api.c | 203 +- src/kits/opengl/mesa/tnl/t_save_api.h | 3 +- src/kits/opengl/mesa/tnl/t_save_loopback.c | 69 +- src/kits/opengl/mesa/tnl/t_save_playback.c | 32 +- src/kits/opengl/mesa/tnl/t_vb_arbprogram.c | 1539 + src/kits/opengl/mesa/tnl/t_vb_arbprogram.h | 189 + .../opengl/mesa/tnl/t_vb_arbprogram_sse.c | 1330 + src/kits/opengl/mesa/tnl/t_vb_arbshader.c | 301 + src/kits/opengl/mesa/tnl/t_vb_cliptmp.h | 123 +- src/kits/opengl/mesa/tnl/t_vb_cull.c | 39 +- src/kits/opengl/mesa/tnl/t_vb_fog.c | 61 +- src/kits/opengl/mesa/tnl/t_vb_light.c | 182 +- src/kits/opengl/mesa/tnl/t_vb_lighttmp.h | 40 +- src/kits/opengl/mesa/tnl/t_vb_normals.c | 163 +- src/kits/opengl/mesa/tnl/t_vb_points.c | 90 +- src/kits/opengl/mesa/tnl/t_vb_program.c | 167 +- src/kits/opengl/mesa/tnl/t_vb_render.c | 52 +- src/kits/opengl/mesa/tnl/t_vb_rendertmp.h | 13 +- src/kits/opengl/mesa/tnl/t_vb_texgen.c | 119 +- src/kits/opengl/mesa/tnl/t_vb_texmat.c | 59 +- src/kits/opengl/mesa/tnl/t_vb_vertex.c | 218 +- src/kits/opengl/mesa/tnl/t_vertex.c | 1357 +- src/kits/opengl/mesa/tnl/t_vertex.h | 67 +- src/kits/opengl/mesa/tnl/t_vertex_c.c | 259 - src/kits/opengl/mesa/tnl/t_vertex_codegen.c | 510 - src/kits/opengl/mesa/tnl/t_vertex_generic.c | 1119 + src/kits/opengl/mesa/tnl/t_vertex_sse.c | 670 + src/kits/opengl/mesa/tnl/t_vp_build.c | 1574 + src/kits/opengl/mesa/tnl/t_vp_build.h | 36 + src/kits/opengl/mesa/tnl/t_vtx_api.c | 299 +- src/kits/opengl/mesa/tnl/t_vtx_api.h | 4 - src/kits/opengl/mesa/tnl/t_vtx_eval.c | 54 +- src/kits/opengl/mesa/tnl/t_vtx_exec.c | 46 +- src/kits/opengl/mesa/tnl/t_vtx_generic.c | 179 +- src/kits/opengl/mesa/tnl/t_vtx_x86.c | 23 +- src/kits/opengl/mesa/tnl/t_vtx_x86_gcc.S | 4 + src/kits/opengl/mesa/tnl/tnl.h | 2 + .../opengl/mesa/tnl_dd/imm/t_dd_imm_capi.h | 48 +- src/kits/opengl/mesa/tnl_dd/t_dd_dmatmp.h | 27 +- src/kits/opengl/mesa/tnl_dd/t_dd_dmatmp2.h | 13 +- src/kits/opengl/mesa/tnl_dd/t_dd_triemit.h | 2 +- src/kits/opengl/mesa/tnl_dd/t_dd_tritmp.h | 71 +- src/kits/opengl/mesa/tnl_dd/t_dd_unfilled.h | 13 +- src/kits/opengl/mesa/x86-64/Makefile | 29 + src/kits/opengl/mesa/x86-64/glapi_x86-64.S | 29501 ++++++++++++++++ src/kits/opengl/mesa/x86-64/matypes.h | 162 + src/kits/opengl/mesa/x86-64/x86-64.c | 118 + src/kits/opengl/mesa/x86-64/x86-64.h | 32 + src/kits/opengl/mesa/x86-64/xform4.S | 462 + src/kits/opengl/mesa/x86/3dnow.c | 6 +- src/kits/opengl/mesa/x86/3dnow_normal.S | 6 +- src/kits/opengl/mesa/x86/3dnow_xform1.S | 6 +- src/kits/opengl/mesa/x86/3dnow_xform2.S | 6 +- src/kits/opengl/mesa/x86/3dnow_xform3.S | 6 +- src/kits/opengl/mesa/x86/3dnow_xform4.S | 6 +- src/kits/opengl/mesa/x86/Makefile | 10 +- src/kits/opengl/mesa/x86/assyntax.h | 12 +- src/kits/opengl/mesa/x86/common_x86.c | 150 +- src/kits/opengl/mesa/x86/common_x86_asm.S | 4 + src/kits/opengl/mesa/x86/common_x86_asm.h | 6 +- src/kits/opengl/mesa/x86/gen_matypes | Bin 18423 -> 0 bytes src/kits/opengl/mesa/x86/gen_matypes.c | 10 +- src/kits/opengl/mesa/x86/glapi_x86.S | 989 +- src/kits/opengl/mesa/x86/matypes.h | 60 +- src/kits/opengl/mesa/x86/mmx.h | 21 +- src/kits/opengl/mesa/x86/mmx_blend.S | 4 + src/kits/opengl/mesa/x86/read_rgba_span_x86.S | 15 +- src/kits/opengl/mesa/x86/rtasm/x86sse.c | 1096 + src/kits/opengl/mesa/x86/rtasm/x86sse.h | 246 + src/kits/opengl/mesa/x86/sse.c | 4 +- src/kits/opengl/mesa/x86/sse_normal.S | 6 +- src/kits/opengl/mesa/x86/sse_xform1.S | 6 +- src/kits/opengl/mesa/x86/sse_xform2.S | 6 +- src/kits/opengl/mesa/x86/sse_xform3.S | 6 +- src/kits/opengl/mesa/x86/sse_xform4.S | 6 +- src/kits/opengl/mesa/x86/x86.c | 6 +- src/kits/opengl/mesa/x86/x86_cliptest.S | 6 +- src/kits/opengl/mesa/x86/x86_xform2.S | 6 +- src/kits/opengl/mesa/x86/x86_xform3.S | 6 +- src/kits/opengl/mesa/x86/x86_xform4.S | 6 +- 453 files changed, 127025 insertions(+), 86437 deletions(-) create mode 100644 src/kits/opengl/mesa/glapi/dispatch.h delete mode 100644 src/kits/opengl/mesa/glapi/glX_XML.py delete mode 100644 src/kits/opengl/mesa/glapi/glX_doc.py delete mode 100644 src/kits/opengl/mesa/glapi/glX_proto_send.py delete mode 100644 src/kits/opengl/mesa/glapi/gl_API.xml delete mode 100644 src/kits/opengl/mesa/glapi/gl_SPARC_asm.py delete mode 100644 src/kits/opengl/mesa/glapi/gl_XML.py delete mode 100644 src/kits/opengl/mesa/glapi/gl_apitemp.py delete mode 100644 src/kits/opengl/mesa/glapi/gl_offsets.py delete mode 100644 src/kits/opengl/mesa/glapi/gl_procs.py delete mode 100644 src/kits/opengl/mesa/glapi/gl_table.py delete mode 100644 src/kits/opengl/mesa/glapi/gl_x86_asm.py delete mode 100644 src/kits/opengl/mesa/glapi/license.py delete mode 100644 src/kits/opengl/mesa/glapi/mesadef.py delete mode 100755 src/kits/opengl/mesa/glapi/next_available_offset.sh delete mode 100644 src/kits/opengl/mesa/main/KNOWN_BUGS create mode 100644 src/kits/opengl/mesa/main/arrayobj.c create mode 100644 src/kits/opengl/mesa/main/arrayobj.h create mode 100644 src/kits/opengl/mesa/main/bitset.h create mode 100644 src/kits/opengl/mesa/main/depthstencil.c create mode 100644 src/kits/opengl/mesa/main/depthstencil.h create mode 100644 src/kits/opengl/mesa/main/execmem.c create mode 100644 src/kits/opengl/mesa/main/fbobject.c create mode 100644 src/kits/opengl/mesa/main/fbobject.h create mode 100644 src/kits/opengl/mesa/main/framebuffer.c create mode 100644 src/kits/opengl/mesa/main/framebuffer.h create mode 100644 src/kits/opengl/mesa/main/getstring.c create mode 100644 src/kits/opengl/mesa/main/mipmap.c create mode 100644 src/kits/opengl/mesa/main/mipmap.h create mode 100644 src/kits/opengl/mesa/main/mm.c create mode 100644 src/kits/opengl/mesa/main/mm.h create mode 100644 src/kits/opengl/mesa/main/rbadaptors.c create mode 100644 src/kits/opengl/mesa/main/rbadaptors.h create mode 100644 src/kits/opengl/mesa/main/renderbuffer.c create mode 100644 src/kits/opengl/mesa/main/renderbuffer.h create mode 100644 src/kits/opengl/mesa/main/texenvprogram.c rename src/kits/opengl/mesa/{shader/arbfragparse.h => main/texenvprogram.h} (74%) create mode 100644 src/kits/opengl/mesa/main/texrender.c create mode 100644 src/kits/opengl/mesa/main/texrender.h delete mode 100644 src/kits/opengl/mesa/ppc/glapi_ppc.S delete mode 100644 src/kits/opengl/mesa/shader/arbfragparse.c delete mode 100644 src/kits/opengl/mesa/shader/arbprogram.syn delete mode 100644 src/kits/opengl/mesa/shader/arbvertparse.c delete mode 100644 src/kits/opengl/mesa/shader/asmopcodes.reg delete mode 100644 src/kits/opengl/mesa/shader/grammar.syn create mode 100644 src/kits/opengl/mesa/shader/grammar/descrip.mms rename src/kits/opengl/mesa/shader/{ => grammar}/grammar.c (97%) rename src/kits/opengl/mesa/shader/{ => grammar}/grammar.h (92%) create mode 100755 src/kits/opengl/mesa/shader/grammar/grammar_crt.c create mode 100755 src/kits/opengl/mesa/shader/grammar/grammar_crt.h rename src/kits/opengl/mesa/shader/{ => grammar}/grammar_mesa.c (86%) rename src/kits/opengl/mesa/shader/{ => grammar}/grammar_mesa.h (100%) rename src/kits/opengl/mesa/shader/{ => grammar}/grammar_syn.h (100%) create mode 100644 src/kits/opengl/mesa/shader/grammar/sources delete mode 100644 src/kits/opengl/mesa/shader/nvfragprog.h delete mode 100644 src/kits/opengl/mesa/shader/nvvertprog.h create mode 100644 src/kits/opengl/mesa/shader/program_instruction.h create mode 100644 src/kits/opengl/mesa/shader/programopt.c rename src/kits/opengl/mesa/{swrast/s_auxbuffer.h => shader/programopt.h} (78%) create mode 100644 src/kits/opengl/mesa/shader/shaderobjects_3dlabs.c create mode 100755 src/kits/opengl/mesa/shader/shaderobjects_3dlabs.h create mode 100644 src/kits/opengl/mesa/shader/slang/descrip.mms create mode 100755 src/kits/opengl/mesa/shader/slang/library/gc_to_bin.c create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_builtin_vec4_gc.h create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_common_builtin_gc.h create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_core_gc.h create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_fragment_builtin_gc.h create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_pp_directives_syn.h create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_pp_expression_syn.h create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_pp_version_syn.h rename src/kits/opengl/mesa/shader/{ => slang/library}/slang_shader_syn.h (92%) create mode 100644 src/kits/opengl/mesa/shader/slang/library/slang_vertex_builtin_gc.h create mode 100644 src/kits/opengl/mesa/shader/slang/library/syn_to_c.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_analyse.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_analyse.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_assignment.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_assignment.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_conditional.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_conditional.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_constructor.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_constructor.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_typeinfo.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_assemble_typeinfo.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_function.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_function.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_operation.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_operation.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_struct.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_struct.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_variable.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_compile_variable.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_execute.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_execute.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_execute_x86.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_export.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_export.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_library_noise.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_library_noise.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_library_texsample.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_library_texsample.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_link.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_link.h rename src/kits/opengl/mesa/shader/{arbvertparse.h => slang/slang_mesa.h} (79%) create mode 100644 src/kits/opengl/mesa/shader/slang/slang_preprocess.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_preprocess.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_storage.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_storage.h create mode 100644 src/kits/opengl/mesa/shader/slang/slang_utility.c create mode 100644 src/kits/opengl/mesa/shader/slang/slang_utility.h create mode 100644 src/kits/opengl/mesa/shader/slang/sources create mode 100644 src/kits/opengl/mesa/shader/slang/traverse_wrap.h delete mode 100755 src/kits/opengl/mesa/shader/slang_common_builtin.gc delete mode 100644 src/kits/opengl/mesa/shader/slang_core.gc delete mode 100755 src/kits/opengl/mesa/shader/slang_fragment_builtin.gc delete mode 100644 src/kits/opengl/mesa/shader/slang_shader.syn delete mode 100755 src/kits/opengl/mesa/shader/slang_vertex_builtin.gc delete mode 100644 src/kits/opengl/mesa/swrast/NOTES delete mode 100644 src/kits/opengl/mesa/swrast/s_alphabuf.c delete mode 100644 src/kits/opengl/mesa/swrast/s_alphabuf.h create mode 100644 src/kits/opengl/mesa/swrast/s_arbshader.c create mode 100644 src/kits/opengl/mesa/swrast/s_arbshader.h delete mode 100644 src/kits/opengl/mesa/swrast/s_auxbuffer.c create mode 100644 src/kits/opengl/mesa/swrast/s_blit.c delete mode 100644 src/kits/opengl/mesa/swrast/s_fragprog_to_c.c delete mode 100644 src/kits/opengl/mesa/swrast/s_pixeltex.c delete mode 100644 src/kits/opengl/mesa/swrast/s_tcc.c create mode 100644 src/kits/opengl/mesa/swrast/s_texcombine.c rename src/kits/opengl/mesa/swrast/{s_pixeltex.h => s_texcombine.h} (86%) create mode 100644 src/kits/opengl/mesa/swrast/s_texfilter.c rename src/kits/opengl/mesa/swrast/{s_texture.h => s_texfilter.h} (86%) delete mode 100644 src/kits/opengl/mesa/swrast/s_texture.c delete mode 100644 src/kits/opengl/mesa/swrast_setup/NOTES delete mode 100644 src/kits/opengl/mesa/tnl/NOTES create mode 100644 src/kits/opengl/mesa/tnl/t_vb_arbprogram.c create mode 100644 src/kits/opengl/mesa/tnl/t_vb_arbprogram.h create mode 100644 src/kits/opengl/mesa/tnl/t_vb_arbprogram_sse.c create mode 100644 src/kits/opengl/mesa/tnl/t_vb_arbshader.c delete mode 100644 src/kits/opengl/mesa/tnl/t_vertex_c.c delete mode 100644 src/kits/opengl/mesa/tnl/t_vertex_codegen.c create mode 100644 src/kits/opengl/mesa/tnl/t_vertex_generic.c create mode 100644 src/kits/opengl/mesa/tnl/t_vertex_sse.c create mode 100644 src/kits/opengl/mesa/tnl/t_vp_build.c create mode 100644 src/kits/opengl/mesa/tnl/t_vp_build.h create mode 100644 src/kits/opengl/mesa/x86-64/Makefile create mode 100644 src/kits/opengl/mesa/x86-64/glapi_x86-64.S create mode 100644 src/kits/opengl/mesa/x86-64/matypes.h create mode 100644 src/kits/opengl/mesa/x86-64/x86-64.c create mode 100644 src/kits/opengl/mesa/x86-64/x86-64.h create mode 100644 src/kits/opengl/mesa/x86-64/xform4.S delete mode 100755 src/kits/opengl/mesa/x86/gen_matypes create mode 100644 src/kits/opengl/mesa/x86/rtasm/x86sse.c create mode 100644 src/kits/opengl/mesa/x86/rtasm/x86sse.h diff --git a/headers/os/opengl/GL/gl.h b/headers/os/opengl/GL/gl.h index 3c9e06da99..78a00aeb8b 100644 --- a/headers/os/opengl/GL/gl.h +++ b/headers/os/opengl/GL/gl.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -39,7 +39,6 @@ #if !defined(__SCITECH_SNAP__) #if defined(__BEOS__) -#include #include /* to get some BeOS-isms */ #endif @@ -63,6 +62,9 @@ #elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ # define GLAPI extern # define GLAPIENTRY __stdcall +#elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303 +# define GLAPI __attribute__((visibility("default"))) +# define GLAPIENTRY #endif /* WIN32 && !CYGWIN */ #if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__) @@ -102,7 +104,7 @@ #define APIENTRY GLAPIENTRY #endif -/* "P" suffix for when function returns a pointer */ +/* "P" suffix to be used for a pointer to a function */ #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif @@ -439,16 +441,16 @@ typedef double GLclampd; /* double precision float in [0,1] */ #define GL_OR_INVERTED 0x150D /* Stencil */ -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_INDEX 0x1901 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 @@ -498,16 +500,16 @@ typedef double GLclampd; /* double precision float in [0,1] */ /* Implementation limits */ #define GL_MAX_LIST_NESTING 0x0B31 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B @@ -565,22 +567,22 @@ typedef double GLclampd; /* double precision float in [0,1] */ #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_COEFF 0x0A00 -#define GL_DOMAIN 0x0A02 #define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 /* Hints */ -#define GL_FOG_HINT 0x0C54 -#define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 /* Scissor box */ -#define GL_SCISSOR_TEST 0x0C11 #define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 /* Pixel Mode / Transfer */ #define GL_MAP_COLOR 0x0D10 @@ -685,8 +687,8 @@ typedef double GLclampd; /* double precision float in [0,1] */ /* Errors */ #define GL_NO_ERROR 0x0 -#define GL_INVALID_VALUE 0x0501 #define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 @@ -851,7 +853,7 @@ GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); GLAPI GLenum GLAPIENTRY glGetError( void ); -GLAPI const GLubyte GLAPIENTRYP glGetString( GLenum name ); +GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); GLAPI void GLAPIENTRY glFinish( void ); @@ -2150,35 +2152,24 @@ typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLsh -/* - * ???. GL_MESA_trace - * XXX obsolete - */ -#ifndef GL_MESA_trace -#define GL_MESA_trace 1 +#if GL_ARB_shader_objects -#define GL_TRACE_ALL_BITS_MESA 0xFFFF -#define GL_TRACE_OPERATIONS_BIT_MESA 0x0001 -#define GL_TRACE_PRIMITIVES_BIT_MESA 0x0002 -#define GL_TRACE_ARRAYS_BIT_MESA 0x0004 -#define GL_TRACE_TEXTURES_BIT_MESA 0x0008 -#define GL_TRACE_PIXELS_BIT_MESA 0x0010 -#define GL_TRACE_ERRORS_BIT_MESA 0x0020 -#define GL_TRACE_MASK_MESA 0x8755 -#define GL_TRACE_NAME_MESA 0x8756 +#ifndef GL_MESA_shader_debug +#define GL_MESA_shader_debug 1 -GLAPI void GLAPIENTRY glEnableTraceMESA( GLbitfield mask ); -GLAPI void GLAPIENTRY glDisableTraceMESA( GLbitfield mask ); -GLAPI void GLAPIENTRY glNewTraceMESA( GLbitfield mask, const GLubyte * traceName ); -GLAPI void GLAPIENTRY glEndTraceMESA( void ); -GLAPI void GLAPIENTRY glTraceAssertAttribMESA( GLbitfield attribMask ); -GLAPI void GLAPIENTRY glTraceCommentMESA( const GLubyte * comment ); -GLAPI void GLAPIENTRY glTraceTextureMESA( GLuint name, const GLubyte* comment ); -GLAPI void GLAPIENTRY glTraceListMESA( GLuint name, const GLubyte* comment ); -GLAPI void GLAPIENTRY glTracePointerMESA( GLvoid* pointer, const GLubyte* comment ); -GLAPI void GLAPIENTRY glTracePointerRangeMESA( const GLvoid* first, const GLvoid* last, const GLubyte* comment ); +#define GL_DEBUG_OBJECT_MESA 0x8759 +#define GL_DEBUG_PRINT_MESA 0x875A +#define GL_DEBUG_ASSERT_MESA 0x875B -#endif /* GL_MESA_trace */ +GLAPI GLhandleARB APIENTRY glCreateDebugObjectMESA (void); +GLAPI void APIENTRY glClearDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType); +GLAPI void APIENTRY glGetDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType, GLsizei maxLength, + GLsizei *length, GLcharARB *debugLog); +GLAPI GLsizei APIENTRY glGetDebugLogLengthMESA (GLhandleARB obj, GLenum logType, GLenum shaderType); + +#endif /* GL_MESA_shader_debug */ + +#endif /* GL_ARB_shader_objects */ /* @@ -2211,13 +2202,9 @@ GLAPI void GLAPIENTRY glTracePointerRangeMESA( const GLvoid* first, const GLvoid typedef void (*GLprogramcallbackMESA)(GLenum target, GLvoid *data); -extern void -glProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, - GLvoid *data); +GLAPI void GLAPIENTRY glProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, GLvoid *data); -extern void -glGetProgramRegisterfvMESA(GLenum target, GLsizei len, const GLubyte *name, - GLfloat *v); +GLAPI void GLAPIENTRY glGetProgramRegisterfvMESA(GLenum target, GLsizei len, const GLubyte *name, GLfloat *v); #endif /* GL_MESA_program_debug */ @@ -2233,16 +2220,6 @@ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLen #endif /* GL_ATI_blend_equation_separate */ -/* As soon as the official glext.h is updated to include this, it will be - * removed from here. - */ -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 - -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B - -#endif /* GL_OES_read_format */ /** ** NOTE!!!!! If you add new functions to this file, or update @@ -2251,6 +2228,7 @@ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLen **/ + /********************************************************************** * Begin system-specific stuff */ diff --git a/headers/os/opengl/GL/glext.h b/headers/os/opengl/GL/glext.h index e11736d642..8cc4502ac9 100644 --- a/headers/os/opengl/GL/glext.h +++ b/headers/os/opengl/GL/glext.h @@ -52,9 +52,9 @@ extern "C" { /*************************************************************/ /* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated 2004/7/26 */ -/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ -#define GL_GLEXT_VERSION 24 +/* glext.h last updated 2006/08/30 */ +/* Current version at http://www.opengl.org/registry/ */ +#define GL_GLEXT_VERSION 34 #ifndef GL_VERSION_1_2 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 @@ -372,6 +372,119 @@ extern "C" { #define GL_SRC2_ALPHA GL_SOURCE2_ALPHA #endif +#ifndef GL_VERSION_2_0 +#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#endif + +#ifndef GL_VERSION_2_1 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +#endif + #ifndef GL_ARB_multitexture #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 @@ -825,6 +938,48 @@ extern "C" { #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 #endif +#ifndef GL_ARB_color_buffer_float +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_HALF_FLOAT_ARB 0x140B +#endif + +#ifndef GL_ARB_texture_float +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif + #ifndef GL_EXT_abgr #define GL_ABGR_EXT 0x8000 #endif @@ -2793,6 +2948,11 @@ extern "C" { #ifndef GL_ATI_vertex_attrib_array_object #endif +#ifndef GL_OES_read_format +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif + #ifndef GL_EXT_depth_bounds_test #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 @@ -2846,10 +3006,131 @@ extern "C" { /* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ #endif +#ifndef GL_EXT_framebuffer_object +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#endif + +#ifndef GL_GREMEDY_string_marker +#endif + +#ifndef GL_EXT_packed_depth_stencil +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif + +#ifndef GL_EXT_stencil_clear_tag +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +#endif + +#ifndef GL_EXT_texture_sRGB +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif + +#ifndef GL_EXT_framebuffer_blit +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CAA +#endif + +#ifndef GL_EXT_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#endif + +#ifndef GL_MESAX_texture_stack +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#endif + +#ifndef GL_EXT_timer_query +#define GL_TIME_ELAPSED_EXT 0x88BF +#endif + +#ifndef GL_EXT_gpu_program_parameters +#endif + /*************************************************************/ #include +#ifndef GL_VERSION_2_0 +/* GL type for program/shader text */ +typedef char GLchar; /* native character */ +#endif + #ifndef GL_VERSION_1_5 /* GL types for handling large vertex buffer objects */ typedef ptrdiff_t GLintptr; @@ -2863,16 +3144,62 @@ typedef ptrdiff_t GLsizeiptrARB; #endif #ifndef GL_ARB_shader_objects -/* GL types for handling shader object handles and characters */ +/* GL types for handling shader object handles and program/shader text */ typedef char GLcharARB; /* native character */ typedef unsigned int GLhandleARB; /* shader object handle */ #endif +/* GL types for "half" precision (s10e5) float data in host memory */ +#ifndef GL_ARB_half_float_pixel +typedef unsigned short GLhalfARB; +#endif + #ifndef GL_NV_half_float -/* GL type for representing NVIDIA "half" floating point type in host memory */ typedef unsigned short GLhalfNV; #endif +#ifndef GLEXT_64_TYPES_DEFINED +/* This code block is duplicated in glext.h, so must be protected */ +#define GLEXT_64_TYPES_DEFINED +/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ +/* (as used in the GLX_OML_sync_control extension). */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(__sun__) +#include +#if defined(__STDC__) +#if defined(__arch64__) +typedef long int int64_t; +typedef unsigned long int uint64_t; +#else +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#endif /* __arch64__ */ +#endif /* __STDC__ */ +#elif defined( __VMS ) +#include +#elif defined(__SCO__) || defined(__USLC__) +#include +#elif defined(__UNIXOS2__) || defined(__SOL64__) +typedef long int int32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#elif defined(WIN32) && defined(_MSC_VER) +typedef long int int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#elif defined(WIN32) && defined(__GNUC__) +#include +#else +#include /* Fallback option */ +#endif +#endif + +#ifndef GL_EXT_timer_query +typedef int64_t GLint64EXT; +typedef uint64_t GLuint64EXT; +#endif + #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #ifdef GL_GLEXT_PROTOTYPES @@ -3193,6 +3520,216 @@ typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pn typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); #endif +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); +GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); +GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); +GLAPI void APIENTRY glAttachShader (GLuint, GLuint); +GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); +GLAPI void APIENTRY glCompileShader (GLuint); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum); +GLAPI void APIENTRY glDeleteProgram (GLuint); +GLAPI void APIENTRY glDeleteShader (GLuint); +GLAPI void APIENTRY glDetachShader (GLuint, GLuint); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); +GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); +GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgram (GLuint); +GLAPI GLboolean APIENTRY glIsShader (GLuint); +GLAPI void APIENTRY glLinkProgram (GLuint); +GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); +GLAPI void APIENTRY glUseProgram (GLuint); +GLAPI void APIENTRY glUniform1f (GLint, GLfloat); +GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform1i (GLint, GLint); +GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); +GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glValidateProgram (GLuint); +GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif + #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #ifdef GL_GLEXT_PROTOTYPES @@ -3752,6 +4289,26 @@ typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs) #define GL_ARB_texture_rectangle 1 #endif +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +#endif + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#endif + #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #endif @@ -3880,8 +4437,8 @@ typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum f typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); #endif -#ifndef GL_EXT_color_matrix -#define GL_EXT_color_matrix 1 +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 #endif #ifndef GL_SGI_color_table @@ -5741,12 +6298,12 @@ typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint); GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, GLuint *); GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); #endif @@ -5974,6 +6531,10 @@ typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); #endif +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#endif + #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #ifdef GL_GLEXT_PROTOTYPES @@ -6022,6 +6583,110 @@ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLen #define GL_NV_vertex_program3 1 #endif +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#endif + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); +#endif + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 +#endif + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei, GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +#endif + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 +#endif + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint, GLenum, GLint64EXT *); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint, GLenum, GLuint64EXT *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); +#endif + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif + #ifdef __cplusplus } diff --git a/headers/os/opengl/GL/glu.h b/headers/os/opengl/GL/glu.h index c7781327c9..c0bac75a8c 100644 --- a/headers/os/opengl/GL/glu.h +++ b/headers/os/opengl/GL/glu.h @@ -30,6 +30,10 @@ #ifndef __glu_h__ #define __glu_h__ +#if defined(USE_MGL_NAMESPACE) +#include "glu_mangle.h" +#endif + #include #ifndef GLAPIENTRY @@ -41,9 +45,12 @@ #endif #ifndef GLAPI -#define GLAPI _IMPEXP_GL +#define GLAPI #endif +#ifdef __cplusplus +extern "C" { +#endif /*************************************************************/ @@ -250,17 +257,16 @@ class GLUnurbs; class GLUquadric; class GLUtesselator; -extern "C" { #else typedef struct GLUnurbs GLUnurbs; typedef struct GLUquadric GLUquadric; typedef struct GLUtesselator GLUtesselator; #endif -typedef struct GLUnurbs GLUnurbsObj; -typedef struct GLUquadric GLUquadricObj; -typedef struct GLUtesselator GLUtesselatorObj; -typedef struct GLUtesselator GLUtriangulatorObj; +typedef GLUnurbs GLUnurbsObj; +typedef GLUquadric GLUquadricObj; +typedef GLUtesselator GLUtesselatorObj; +typedef GLUtesselator GLUtriangulatorObj; #define GLU_TESS_MAX_COORD 1.0e150 diff --git a/headers/os/opengl/GL/glut.h b/headers/os/opengl/GL/glut.h index c1b78aa4e5..23c740ee11 100644 --- a/headers/os/opengl/GL/glut.h +++ b/headers/os/opengl/GL/glut.h @@ -193,13 +193,11 @@ WGLAPI int GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *); #else /* _WIN32 not defined */ /* Define GLUTAPIENTRY and GLUTCALLBACK to nothing if we aren't on Win32. */ -# define GLUTAPIENTRY +# define GLUTAPIENTRY GLAPIENTRY # define GLUTAPIENTRYV -# define GLUT_APIENTRY_DEFINED # define GLUTCALLBACK # define GLUTAPI extern -/* Prototype exit for the non-Win32 case (see above). */ -/*extern void exit(int); this screws up gcc -ansi -pedantic! */ + #endif @@ -747,26 +745,4 @@ GLUTAPI int GLUTAPIENTRY glutGameModeGet(GLenum mode); } #endif -#if 0 -#ifdef GLUT_APIENTRY_DEFINED -# undef GLUT_APIENTRY_DEFINED -# undef APIENTRY -#endif - -#ifdef GLUT_WINGDIAPI_DEFINED -# undef GLUT_WINGDIAPI_DEFINED -# undef WINGDIAPI -#endif - -#ifdef GLUT_DEFINED___CDECL -# undef GLUT_DEFINED___CDECL -# undef __cdecl -#endif - -#ifdef GLUT_DEFINED__CRTIMP -# undef GLUT_DEFINED__CRTIMP -# undef _CRTIMP -#endif -#endif - #endif /* __glut_h__ */ diff --git a/headers/private/opengl/GL/internal/glcore.h b/headers/private/opengl/GL/internal/glcore.h index 48748d91e8..ca3cf5be57 100644 --- a/headers/private/opengl/GL/internal/glcore.h +++ b/headers/private/opengl/GL/internal/glcore.h @@ -1,4 +1,3 @@ -/* $XFree86: xc/lib/GL/include/GL/internal/glcore.h,v 1.7 2001/03/25 05:32:00 tsi Exp $ */ #ifndef __gl_core_h_ #define __gl_core_h_ @@ -37,9 +36,7 @@ ** */ -#ifndef XFree86LOADER #include -#endif #ifdef CAPI #undef CAPI @@ -64,12 +61,18 @@ typedef struct __GLinterfaceRec __GLinterface; ** and used by the "operating system". */ -/* -** Mode and limit information for a context. This information is -** kept around in the context so that values can be used during -** command execution, and for returning information about the -** context to the application. -*/ +/** + * Mode and limit information for a context. This information is + * kept around in the context so that values can be used during + * command execution, and for returning information about the + * context to the application. + * + * Instances of this structure are shared by the driver and the loader. To + * maintain binary compatability, new fields \b must be added only to the + * end of the structure. + * + * \sa _gl_context_modes_create + */ typedef struct __GLcontextModesRec { struct __GLcontextModesRec * next; @@ -137,6 +140,13 @@ typedef struct __GLcontextModesRec { GLint swapMethod; GLint screen; + + /* EXT_texture_from_pixmap */ + GLint bindToTextureRgb; + GLint bindToTextureRgba; + GLint bindToMipmapTexture; + GLint bindToTextureTargets; + GLint yInverted; } __GLcontextModes; /* Several fields of __GLcontextModes can take these as values. Since @@ -166,6 +176,17 @@ typedef struct __GLcontextModesRec { #define GLX_PIXMAP_BIT 0x00000002 #define GLX_PBUFFER_BIT 0x00000004 +#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 +#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 +#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 +#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 +#define GLX_Y_INVERTED_EXT 0x20D4 + +#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 +#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 +#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 + + /************************************************************************/ /* diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp index 63401ef3c6..bc2b858709 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp @@ -1,6 +1,10 @@ /* - * Copyright 2006, Haiku. All rights reserved. + * Copyright 2006-2007, Haiku. All rights reserved. * Distributed under the terms of the MIT License. + * + * Authors: + * Jérôme Duval, korli@users.berlios.de + * Philippe Houdoin, philippe.houdoin@free.fr */ /* * Mesa 3-D graphics library @@ -18,6 +22,9 @@ extern "C" { #include "drivers/common/driverfuncs.h" #include "main/colormac.h" #include "main/buffers.h" + #include "main/framebuffer.h" + #include "main/renderbuffer.h" + #include "main/state.h" #include "main/version.h" #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" @@ -77,6 +84,7 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView *view, ulong options, BGLDisp fVisual(NULL), fFrameBuffer(NULL) { + CALLED(); fClearColor[BE_RCOMP] = 0; fClearColor[BE_GCOMP] = 0; @@ -85,12 +93,12 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView *view, ulong options, BGLDisp fClearIndex = 0; - // We don't support single buffering (yet): double buffering forced. - options |= BGL_DOUBLE; + // We force single buffering for the time being + //options &= !BGL_DOUBLE; const GLboolean rgbFlag = ((options & BGL_INDEX) == 0); const GLboolean alphaFlag = ((options & BGL_ALPHA) == BGL_ALPHA); - const GLboolean dblFlag = ((options & BGL_DOUBLE) == BGL_DOUBLE); + const GLboolean dblFlag = false; //((options & BGL_DOUBLE) == BGL_DOUBLE); const GLboolean stereoFlag = false; const GLint depth = (options & BGL_DEPTH) ? 16 : 0; const GLint stencil = (options & BGL_STENCIL) ? 8 : 0; @@ -112,7 +120,6 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView *view, ulong options, BGLDisp functions.GetString = GetString; functions.UpdateState = UpdateState; - functions.GetBufferSize = GetBufferSize; functions.Clear = Clear; functions.ClearIndex = ClearIndex; functions.ClearColor = ClearColor; @@ -126,14 +133,8 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView *view, ulong options, BGLDisp return; } - _mesa_enable_sw_extensions(fContext); - _mesa_enable_1_3_extensions(fContext); - _mesa_enable_1_4_extensions(fContext); - _mesa_enable_1_5_extensions(fContext); - // create core framebuffer - fFrameBuffer = _mesa_create_framebuffer(fVisual, depth > 0 ? GL_TRUE : GL_FALSE, - stencil > 0 ? GL_TRUE: GL_FALSE, accum > 0 ? GL_TRUE : GL_FALSE, alphaFlag); + fFrameBuffer = _mesa_create_framebuffer(fVisual); /* Initialize the software rasterizer and helper modules. */ _swrast_CreateContext(fContext); @@ -142,19 +143,39 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView *view, ulong options, BGLDisp _swsetup_CreateContext(fContext); _swsetup_Wakeup(fContext); - MesaSoftwareRenderer * mr = (MesaSoftwareRenderer *) fContext->DriverCtx; - struct swrast_device_driver * swdd = _swrast_GetDeviceDriverReference( fContext ); - TNLcontext * tnl = TNL_CONTEXT(fContext); + fRenderBuffer = _mesa_new_renderbuffer(fContext, BUFFER_FRONT_LEFT); - assert(mr->fContext == fContext ); - assert(tnl); - assert(swdd); + fRenderBuffer->InternalFormat = GL_RGBA; + fRenderBuffer->_BaseFormat = GL_RGBA; + fRenderBuffer->DataType = GL_UNSIGNED_BYTE; + fRenderBuffer->Data = NULL; + fRenderBuffer->AllocStorage = RenderbufferStorage; + + fRenderBuffer->GetRow = ReadRGBASpan; + fRenderBuffer->GetValues = ReadRGBAPixels; + fRenderBuffer->PutRow = WriteRGBASpan; + fRenderBuffer->PutRowRGB = WriteRGBSpan; + fRenderBuffer->PutMonoRow = WriteMonoRGBASpan; + fRenderBuffer->PutValues = WriteMonoRGBAPixels; + + _mesa_add_renderbuffer(fFrameBuffer, BUFFER_FRONT_LEFT, fRenderBuffer); + + _mesa_add_soft_renderbuffers(fFrameBuffer, + GL_FALSE, + fVisual->haveDepthBuffer, + fVisual->haveStencilBuffer, + fVisual->haveAccumBuffer, + GL_FALSE, + GL_FALSE ); // Use default TCL pipeline - tnl->Driver.RunPipeline = _tnl_run_pipeline; + TNL_CONTEXT( fContext )->Driver.RunPipeline = _tnl_run_pipeline; + + _mesa_enable_sw_extensions(fContext); + _mesa_enable_1_3_extensions(fContext); + _mesa_enable_1_4_extensions(fContext); + _mesa_enable_1_5_extensions(fContext); - swdd->SetBuffer = this->SetBuffer; - // some stupid applications (Quake2) don't even think about calling LockGL() // before using glGetString and its glGet*() friends... // so make sure there is at least a valid context. @@ -166,6 +187,7 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView *view, ulong options, BGLDisp MesaSoftwareRenderer::~MesaSoftwareRenderer() { + CALLED(); _mesa_destroy_visual(fVisual); _mesa_destroy_framebuffer(fFrameBuffer); _mesa_destroy_context(fContext); @@ -176,18 +198,38 @@ MesaSoftwareRenderer::~MesaSoftwareRenderer() void MesaSoftwareRenderer::LockGL() -{ +{ + CALLED(); BGLRenderer::LockGL(); + + _mesa_make_current(fContext, fFrameBuffer, fFrameBuffer); + + BRect b = GLView()->Bounds(); + uint32 width = b.IntegerWidth() + 1; + uint32 height = b.IntegerHeight() + 1; + if (width != fWidth || height != fHeight || !fBitmap) { + // allocate new size of back buffer bitmap + if (fBitmap) + delete fBitmap; + BRect rect(0.0, 0.0, width - 1, height - 1); + fBitmap = new BBitmap(rect, B_RGBA32); + _mesa_resize_framebuffer(fContext, fFrameBuffer, width, height); + } + fWidth = width; + fHeight = height; + fBottom = (GLint) b.bottom; + fRenderBuffer->Data = fBitmap->Bits(); - UpdateState(fContext, 0); - _mesa_make_current(fContext, fFrameBuffer); + fBitmap->LockBits(); } void MesaSoftwareRenderer::UnlockGL() { - + CALLED(); + fBitmap->UnlockBits(); + _mesa_make_current(fContext, NULL, NULL); BGLRenderer::UnlockGL(); } @@ -195,10 +237,10 @@ MesaSoftwareRenderer::UnlockGL() void MesaSoftwareRenderer::SwapBuffers(bool VSync) { + CALLED(); _mesa_notifySwapBuffers(fContext); if (fBitmap) { - CALLED(); GLView()->LockLooper(); GLView()->DrawBitmap(fBitmap); GLView()->UnlockLooper(); @@ -389,26 +431,27 @@ MesaSoftwareRenderer::ClearColor(GLcontext *ctx, const GLfloat color[4]) void -MesaSoftwareRenderer::Clear(GLcontext *ctx, GLbitfield mask, - GLboolean all, GLint x, GLint y, - GLint width, GLint height) +MesaSoftwareRenderer::Clear(GLcontext *ctx, GLbitfield mask) { CALLED(); - if (mask & DD_FRONT_LEFT_BIT) - ClearFront(ctx, all, x, y, width, height); - if (mask & DD_BACK_LEFT_BIT) - ClearBack(ctx, all, x, y, width, height); +#if 0 + if (mask & BUFFER_BIT_FRONT_LEFT) + ClearFront(ctx); + if (mask & BUFFER_BIT_BACK_LEFT) + ClearBack(ctx); +#else + if (mask & BUFFER_BIT_FRONT_LEFT) + ClearBack(ctx); +#endif - mask &= ~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT); + mask &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT); if (mask) - _swrast_Clear( ctx, mask, all, x, y, width, height ); + _swrast_Clear( ctx, mask); } void -MesaSoftwareRenderer::ClearFront(GLcontext *ctx, - GLboolean all, GLint x, GLint y, - GLint width, GLint height) +MesaSoftwareRenderer::ClearFront(GLcontext *ctx) { CALLED(); @@ -424,6 +467,13 @@ MesaSoftwareRenderer::ClearFront(GLcontext *ctx, mr->fClearColor[BE_GCOMP], mr->fClearColor[BE_BCOMP], mr->fClearColor[BE_ACOMP]); + + int x = ctx->DrawBuffer->_Xmin; + int y = ctx->DrawBuffer->_Ymin; + int width = ctx->DrawBuffer->_Xmax - x; + int height = ctx->DrawBuffer->_Ymax - y; + GLboolean all = (width == ctx->DrawBuffer->Width && height == ctx->DrawBuffer->Height); + if (all) { BRect b = bglview->Bounds(); bglview->FillRect(b); @@ -452,9 +502,7 @@ MesaSoftwareRenderer::ClearFront(GLcontext *ctx, void -MesaSoftwareRenderer::ClearBack(GLcontext *ctx, - GLboolean all, GLint x, GLint y, - GLint width, GLint height) +MesaSoftwareRenderer::ClearBack(GLcontext *ctx) { CALLED(); @@ -467,6 +515,12 @@ MesaSoftwareRenderer::ClearBack(GLcontext *ctx, const GLuint *clearPixelPtr = (const GLuint *) mr->fClearColor; const GLuint clearPixel = B_LENDIAN_TO_HOST_INT32(*clearPixelPtr); + int x = ctx->DrawBuffer->_Xmin; + int y = ctx->DrawBuffer->_Ymin; + int width = ctx->DrawBuffer->_Xmax - x; + int height = ctx->DrawBuffer->_Ymax - y; + GLboolean all = (width == ctx->DrawBuffer->Width && height == ctx->DrawBuffer->Height); + if (all) { const int numPixels = mr->fWidth * mr->fHeight; if (clearPixel == 0) { @@ -492,91 +546,22 @@ MesaSoftwareRenderer::ClearBack(GLcontext *ctx, void MesaSoftwareRenderer::UpdateState( GLcontext *ctx, GLuint new_state ) { - struct swrast_device_driver * swdd = _swrast_GetDeviceDriverReference( ctx ); + if (!ctx) + return; + CALLED(); _swrast_InvalidateState( ctx, new_state ); _swsetup_InvalidateState( ctx, new_state ); _ac_InvalidateState( ctx, new_state ); _tnl_InvalidateState( ctx, new_state ); - - if (ctx->Color.DrawBuffer[0] == GL_FRONT) { - /* read/write front buffer */ - swdd->WriteRGBASpan = WriteRGBASpanFront; - swdd->WriteRGBSpan = WriteRGBSpanFront; - swdd->WriteRGBAPixels = WriteRGBAPixelsFront; - swdd->WriteMonoRGBASpan = WriteMonoRGBASpanFront; - swdd->WriteMonoRGBAPixels = WriteMonoRGBAPixelsFront; - swdd->WriteCI32Span = WriteCI32SpanFront; - swdd->WriteCI8Span = WriteCI8SpanFront; - swdd->WriteMonoCISpan = WriteMonoCISpanFront; - swdd->WriteCI32Pixels = WriteCI32PixelsFront; - swdd->WriteMonoCIPixels = WriteMonoCIPixelsFront; - swdd->ReadRGBASpan = ReadRGBASpanFront; - swdd->ReadRGBAPixels = ReadRGBAPixelsFront; - swdd->ReadCI32Span = ReadCI32SpanFront; - swdd->ReadCI32Pixels = ReadCI32PixelsFront; - } else { - /* read/write back buffer */ - swdd->WriteRGBASpan = WriteRGBASpanBack; - swdd->WriteRGBSpan = WriteRGBSpanBack; - swdd->WriteRGBAPixels = WriteRGBAPixelsBack; - swdd->WriteMonoRGBASpan = WriteMonoRGBASpanBack; - swdd->WriteMonoRGBAPixels = WriteMonoRGBAPixelsBack; - swdd->WriteCI32Span = WriteCI32SpanBack; - swdd->WriteCI8Span = WriteCI8SpanBack; - swdd->WriteMonoCISpan = WriteMonoCISpanBack; - swdd->WriteCI32Pixels = WriteCI32PixelsBack; - swdd->WriteMonoCIPixels = WriteMonoCIPixelsBack; - swdd->ReadRGBASpan = ReadRGBASpanBack; - swdd->ReadRGBAPixels = ReadRGBAPixelsBack; - swdd->ReadCI32Span = ReadCI32SpanBack; - swdd->ReadCI32Pixels = ReadCI32PixelsBack; - } } -void -MesaSoftwareRenderer::GetBufferSize(GLframebuffer * framebuffer, GLuint *width, - GLuint *height) +GLboolean +MesaSoftwareRenderer::RenderbufferStorage(GLcontext *ctx, struct gl_renderbuffer *render, + GLenum internalFormat, GLuint width, GLuint height ) { - GET_CURRENT_CONTEXT(ctx); - if (!ctx) - return; - - MesaSoftwareRenderer * mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BGLView *bglview = mr->GLView(); - assert(bglview); - - BRect b = bglview->Bounds(); - *width = (GLuint) b.IntegerWidth() + 1; // (b.right - b.left + 1); - *height = (GLuint) b.IntegerHeight() + 1; // (b.bottom - b.top + 1); - mr->fBottom = (GLint) b.bottom; - - if (ctx->Visual.doubleBufferMode) { - if (*width != mr->fWidth || *height != mr->fHeight) { - // allocate new size of back buffer bitmap - if (mr->fBitmap) - delete mr->fBitmap; - BRect rect(0.0, 0.0, *width - 1, *height - 1); - mr->fBitmap = new BBitmap(rect, B_RGBA32); - } - } else { - mr->fBitmap = NULL; - } - - mr->fWidth = *width; - mr->fHeight = *height; -} - - -void -MesaSoftwareRenderer::SetBuffer(GLcontext *ctx, GLframebuffer *buffer, - GLenum mode) -{ - /* TODO */ - (void) ctx; - (void) buffer; - (void) mode; + return GL_TRUE; } @@ -591,346 +576,224 @@ inline void Plot(BGLView *bglview, int x, int y) void -MesaSoftwareRenderer::WriteRGBASpanFront(const GLcontext *ctx, GLuint n, +MesaSoftwareRenderer::WriteRGBASpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - CONST GLubyte rgba[][4], + const void *values, const GLubyte mask[]) { - CALLED(); + //CALLED(); + CONST GLubyte (*rgba)[4] = (CONST GLubyte (*)[4])values; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BGLView *bglview = mr->GLView(); - assert(bglview); - int flippedY = mr->fBottom - y; - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { + + //printf("WriteRGBASpan 1 n %ld x %ld y %ld mask %ld rb %p %p\n", n, x ,y, mask, rb, rgba); + + /*if (rb->Name == BUFFER_FRONT_LEFT) { + BGLView *bglview = mr->GLView(); + assert(bglview); + int flippedY = mr->fBottom - y; + if (mask) { + for (GLuint i = 0; i < n; i++) { + if (mask[i]) { + bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2], rgba[i][3]); + Plot(bglview, x++, flippedY); + } + } + } else { + for (GLuint i = 0; i < n; i++) { bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2], rgba[i][3]); Plot(bglview, x++, flippedY); } } - } else { - for (GLuint i = 0; i < n; i++) { - bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2], rgba[i][3]); - Plot(bglview, x++, flippedY); - } - } + } else {*/ + BBitmap *bitmap = mr->fBitmap; + + assert(bitmap); + + int row = mr->fBottom - y; + uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; + uint32 * pixel = (uint32 *) ptr; + + if (mask) { + while(n--) { + if (*mask++) + *pixel = PACK_B_RGBA32(rgba[0]); + pixel++; + rgba++; + }; + } else { + while(n--) { + *pixel++ = PACK_B_RGBA32(rgba[0]); + rgba++; + }; + }; + //} } void -MesaSoftwareRenderer::WriteRGBSpanFront(const GLcontext *ctx, GLuint n, +MesaSoftwareRenderer::WriteRGBSpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - CONST GLubyte rgba[][3], + const void *values, const GLubyte mask[]) { CALLED(); + + //printf("WriteRGBSpan 1 n %ld x %ld y %ld mask %ld\n", n, x ,y, mask); + CONST GLubyte **rgba = (CONST GLubyte **)values; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BGLView *bglview = mr->GLView(); - assert(bglview); - int flippedY = mr->fBottom - y; - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { + + /*if (rb->Name == BUFFER_FRONT_LEFT) { + BGLView *bglview = mr->GLView(); + assert(bglview); + int flippedY = mr->fBottom - y; + + if (mask) { + for (GLuint i = 0; i < n; i++) { + if (mask[i]) { + bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); + Plot(bglview, x++, flippedY); + } + } + } else { + for (GLuint i = 0; i < n; i++) { bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); Plot(bglview, x++, flippedY); } } - } else { - for (GLuint i = 0; i < n; i++) { - bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); - Plot(bglview, x++, flippedY); - } - } + } else {*/ + BBitmap *bitmap = mr->fBitmap; + + assert(bitmap); + + int row = mr->fBottom - y; + uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; + uint32 * pixel = (uint32 *) ptr; + + if (mask) { + while(n--) { + if (*mask++) + *pixel = PACK_B_RGB32(rgba[0]); + pixel++; + rgba++; + }; + } else { + while(n--) { + *pixel++ = PACK_B_RGB32(rgba[0]); + rgba++; + }; + }; + //} } void -MesaSoftwareRenderer::WriteMonoRGBASpanFront(const GLcontext *ctx, GLuint n, +MesaSoftwareRenderer::WriteMonoRGBASpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLchan color[4], + const void *values, const GLubyte mask[]) { CALLED(); + const GLchan *color = (const GLchan *)values; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BGLView *bglview = mr->GLView(); - assert(bglview); - int flippedY = mr->fBottom - y; - bglview->SetHighColor(color[RCOMP], color[GCOMP], color[BCOMP]); - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { + + /*if (rb->Name == BUFFER_FRONT_LEFT) { + BGLView *bglview = mr->GLView(); + assert(bglview); + int flippedY = mr->fBottom - y; + bglview->SetHighColor(color[RCOMP], color[GCOMP], color[BCOMP]); + if (mask) { + for (GLuint i = 0; i < n; i++) { + if (mask[i]) { + Plot(bglview, x++, flippedY); + } + } + } else { + for (GLuint i = 0; i < n; i++) { Plot(bglview, x++, flippedY); } } - } else { - for (GLuint i = 0; i < n; i++) { - Plot(bglview, x++, flippedY); - } - } + } else {*/ + BBitmap *bitmap = mr->fBitmap; + + assert(bitmap); + + int row = mr->fBottom - y; + uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; + uint32 * pixel = (uint32 *) ptr; + uint32 pixel_color = PACK_B_RGBA32(color); + + if (mask) { + while(n--) { + if (*mask++) + *pixel = pixel_color; + pixel++; + }; + } else { + while(n--) { + *pixel++ = pixel_color; + }; + }; + //} } void -MesaSoftwareRenderer::WriteRGBAPixelsFront(const GLcontext *ctx, +MesaSoftwareRenderer::WriteRGBAPixels(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - CONST GLubyte rgba[][4], + const void *values, const GLubyte mask[] ) { CALLED(); + CONST GLubyte **rgba = (CONST GLubyte **)values; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BGLView *bglview = mr->GLView(); - assert(bglview); - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { + + /*if (rb->Name == BUFFER_FRONT_LEFT) { + BGLView *bglview = mr->GLView(); + assert(bglview); + if (mask) { + for (GLuint i = 0; i < n; i++) { + if (mask[i]) { + bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); + Plot(bglview, x[i], mr->fBottom - y[i]); + } + } + } else { + for (GLuint i = 0; i < n; i++) { bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); Plot(bglview, x[i], mr->fBottom - y[i]); } } - } else { - for (GLuint i = 0; i < n; i++) { - bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); - Plot(bglview, x[i], mr->fBottom - y[i]); - } - } -} + } else {*/ + BBitmap *bitmap = mr->fBitmap; - -void -MesaSoftwareRenderer::WriteMonoRGBAPixelsFront(const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - const GLchan color[4], - const GLubyte mask[]) -{ - CALLED(); - MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BGLView *bglview = mr->GLView(); - assert(bglview); - // plot points using current color - bglview->SetHighColor(color[RCOMP], color[GCOMP], color[BCOMP]); - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { - Plot(bglview, x[i], mr->fBottom - y[i]); - } - } - } else { - for (GLuint i = 0; i < n; i++) { - Plot(bglview, x[i], mr->fBottom - y[i]); - } - } -} - - -void -MesaSoftwareRenderer::WriteCI32SpanFront( const GLcontext *ctx, GLuint n, GLint x, GLint y, - const GLuint index[], const GLubyte mask[] ) -{ - printf("WriteCI32SpanFront() not implemented yet!\n"); - // TODO -} - -void -MesaSoftwareRenderer::WriteCI8SpanFront( const GLcontext *ctx, GLuint n, GLint x, GLint y, - const GLubyte index[], const GLubyte mask[] ) -{ - printf("WriteCI8SpanFront() not implemented yet!\n"); - // TODO -} - -void -MesaSoftwareRenderer::WriteMonoCISpanFront( const GLcontext *ctx, GLuint n, - GLint x, GLint y, - GLuint colorIndex, const GLubyte mask[] ) -{ - printf("WriteMonoCISpanFront() not implemented yet!\n"); - // TODO -} - - -void -MesaSoftwareRenderer::WriteCI32PixelsFront( const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - const GLuint index[], const GLubyte mask[] ) -{ - printf("WriteCI32PixelsFront() not implemented yet!\n"); - // TODO -} - -void -MesaSoftwareRenderer::WriteMonoCIPixelsFront( const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - GLuint colorIndex, const GLubyte mask[] ) -{ - printf("WriteMonoCIPixelsFront() not implemented yet!\n"); - // TODO -} - - -void -MesaSoftwareRenderer::ReadCI32SpanFront( const GLcontext *ctx, - GLuint n, GLint x, GLint y, GLuint index[] ) -{ - printf("ReadCI32SpanFront() not implemented yet!\n"); - // TODO -} - - -void -MesaSoftwareRenderer::ReadRGBASpanFront( const GLcontext *ctx, GLuint n, - GLint x, GLint y, GLubyte rgba[][4] ) -{ - printf("ReadRGBASpanFront() not implemented yet!\n"); - // TODO -} - - -void -MesaSoftwareRenderer::ReadCI32PixelsFront( const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - GLuint indx[], const GLubyte mask[] ) -{ - printf("ReadCI32PixelsFront() not implemented yet!\n"); - // TODO -} - - -void -MesaSoftwareRenderer::ReadRGBAPixelsFront( const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4], const GLubyte mask[] ) -{ - printf("ReadRGBAPixelsFront() not implemented yet!\n"); - // TODO -} - - - - -void -MesaSoftwareRenderer::WriteRGBASpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - CONST GLubyte rgba[][4], - const GLubyte mask[]) -{ - //CALLED(); - MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BBitmap *bitmap = mr->fBitmap; - - assert(bitmap); - - int row = mr->fBottom - y; - uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; - uint32 * pixel = (uint32 *) ptr; - - if (mask) { - while(n--) { - if (*mask++) - *pixel = PACK_B_RGBA32(rgba[0]); - pixel++; - rgba++; - }; - } else { - while(n--) { - *pixel++ = PACK_B_RGBA32(rgba[0]); - rgba++; - }; - }; - } - - -void -MesaSoftwareRenderer::WriteRGBSpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - CONST GLubyte rgb[][3], - const GLubyte mask[]) -{ - CALLED(); - MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BBitmap *bitmap = mr->fBitmap; - - assert(bitmap); - - int row = mr->fBottom - y; - uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; - uint32 * pixel = (uint32 *) ptr; - - if (mask) { - while(n--) { - if (*mask++) - *pixel = PACK_B_RGB32(rgb[0]); - pixel++; - rgb++; - }; - } else { - while(n--) { - *pixel++ = PACK_B_RGB32(rgb[0]); - rgb++; - }; - }; -} - - - - -void -MesaSoftwareRenderer::WriteMonoRGBASpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - const GLchan color[4], const GLubyte mask[]) -{ - CALLED(); - MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BBitmap *bitmap = mr->fBitmap; - - assert(bitmap); - - int row = mr->fBottom - y; - uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; - uint32 * pixel = (uint32 *) ptr; - uint32 pixel_color = PACK_B_RGBA32(color); - - if (mask) { - while(n--) { - if (*mask++) - *pixel = pixel_color; - pixel++; - }; - } else { - while(n--) { - *pixel++ = pixel_color; - }; - }; -} - - -void -MesaSoftwareRenderer::WriteRGBAPixelsBack(const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - CONST GLubyte rgba[][4], - const GLubyte mask[] ) -{ - //CALLED(); - MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BBitmap *bitmap = mr->fBitmap; - - assert(bitmap); + assert(bitmap); #if 0 - while(n--) { - if (*mask++) { - int row = md->m_bottom - *y; - uint8 * pixel = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + *x * 4; - *((uint32 *) pixel) = PACK_B_RGBA32(rgba[0]); + while(n--) { + if (*mask++) { + int row = md->m_bottom - *y; + uint8 * pixel = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + *x * 4; + *((uint32 *) pixel) = PACK_B_RGBA32(rgba[0]); + }; + x++; + y++; + rgba++; }; - x++; - y++; - rgba++; - }; #else - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { + if (mask) { + for (GLuint i = 0; i < n; i++) { + if (mask[i]) { + GLubyte *pixel = (GLubyte *) bitmap->Bits() + + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; + pixel[BE_RCOMP] = rgba[i][RCOMP]; + pixel[BE_GCOMP] = rgba[i][GCOMP]; + pixel[BE_BCOMP] = rgba[i][BCOMP]; + pixel[BE_ACOMP] = rgba[i][ACOMP]; + } + } + } else { + for (GLuint i = 0; i < n; i++) { GLubyte *pixel = (GLubyte *) bitmap->Bits() + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; pixel[BE_RCOMP] = rgba[i][RCOMP]; @@ -939,125 +802,135 @@ MesaSoftwareRenderer::WriteRGBAPixelsBack(const GLcontext *ctx, pixel[BE_ACOMP] = rgba[i][ACOMP]; } } - } else { - for (GLuint i = 0; i < n; i++) { - GLubyte *pixel = (GLubyte *) bitmap->Bits() - + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; - pixel[BE_RCOMP] = rgba[i][RCOMP]; - pixel[BE_GCOMP] = rgba[i][GCOMP]; - pixel[BE_BCOMP] = rgba[i][BCOMP]; - pixel[BE_ACOMP] = rgba[i][ACOMP]; - } - } #endif + //} } void -MesaSoftwareRenderer::WriteMonoRGBAPixelsBack(const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - const GLchan color[4], - const GLubyte mask[]) +MesaSoftwareRenderer::WriteMonoRGBAPixels(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, + const GLint x[], const GLint y[], + const void *values, + const GLubyte mask[]) { - CALLED(); + //CALLED(); + const GLchan *color = (const GLchan *)values; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; - BBitmap *bitmap = mr->fBitmap; - assert(bitmap); + /*if (rb->Name == BUFFER_FRONT_LEFT) { + BGLView *bglview = mr->GLView(); + assert(bglview); + // plot points using current color + bglview->SetHighColor(color[RCOMP], color[GCOMP], color[BCOMP]); + if (mask) { + for (GLuint i = 0; i < n; i++) { + if (mask[i]) { + Plot(bglview, x[i], mr->fBottom - y[i]); + } + } + } else { + for (GLuint i = 0; i < n; i++) { + Plot(bglview, x[i], mr->fBottom - y[i]); + } + } + } else {*/ + BBitmap *bitmap = mr->fBitmap; - uint32 pixel_color = PACK_B_RGBA32(color); + assert(bitmap); + + uint32 pixel_color = PACK_B_RGBA32(color); #if 0 - while(n--) { - if (*mask++) { - int row = md->m_bottom - *y; - uint8 * pixel = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + *x * 4; - - *((uint32 *) pixel) = pixel_color; + while(n--) { + if (*mask++) { + int row = md->m_bottom - *y; + uint8 * pixel = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + *x * 4; + + *((uint32 *) pixel) = pixel_color; + }; + x++; + y++; }; - x++; - y++; - }; #else - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { + if (mask) { + for (GLuint i = 0; i < n; i++) { + if (mask[i]) { + GLubyte * ptr = (GLubyte *) bitmap->Bits() + + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; + *((uint32 *) ptr) = pixel_color; + } + } + } else { + for (GLuint i = 0; i < n; i++) { GLubyte * ptr = (GLubyte *) bitmap->Bits() + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; *((uint32 *) ptr) = pixel_color; } } - } else { - for (GLuint i = 0; i < n; i++) { - GLubyte * ptr = (GLubyte *) bitmap->Bits() - + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; - *((uint32 *) ptr) = pixel_color; - } - } #endif + //} } void -MesaSoftwareRenderer::WriteCI32SpanBack( const GLcontext *ctx, GLuint n, - GLint x, GLint y, - const GLuint index[], const GLubyte mask[] ) +MesaSoftwareRenderer::WriteCI32Span( const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, + const GLuint index[], const GLubyte mask[] ) { - printf("WriteCI32SpanBack() not implemented yet!\n"); + printf("WriteCI32Span() not implemented yet!\n"); // TODO } void -MesaSoftwareRenderer::WriteCI8SpanBack( const GLcontext *ctx, GLuint n, - GLint x, GLint y, - const GLubyte index[], const GLubyte mask[] ) +MesaSoftwareRenderer::WriteCI8Span( const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, + const GLubyte index[], const GLubyte mask[] ) { - printf("WriteCI8SpanBack() not implemented yet!\n"); + printf("WriteCI8Span() not implemented yet!\n"); + // TODO +} + +void +MesaSoftwareRenderer::WriteMonoCISpan( const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, + GLint x, GLint y, + GLuint colorIndex, const GLubyte mask[] ) +{ + printf("WriteMonoCISpan() not implemented yet!\n"); + // TODO +} + + +void +MesaSoftwareRenderer::WriteCI32Pixels( const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, + const GLint x[], const GLint y[], + const GLuint index[], const GLubyte mask[] ) +{ + printf("WriteCI32Pixels() not implemented yet!\n"); + // TODO +} + +void +MesaSoftwareRenderer::WriteMonoCIPixels( const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, + const GLint x[], const GLint y[], + GLuint colorIndex, const GLubyte mask[] ) +{ + printf("WriteMonoCIPixels() not implemented yet!\n"); + // TODO +} + + +void +MesaSoftwareRenderer::ReadCI32Span( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, GLuint index[] ) +{ + printf("ReadCI32Span() not implemented yet!\n"); // TODO } -void -MesaSoftwareRenderer::WriteMonoCISpanBack( const GLcontext *ctx, GLuint n, - GLint x, GLint y, - GLuint colorIndex, const GLubyte mask[] ) -{ - printf("WriteMonoCISpanBack() not implemented yet!\n"); - // TODO -} - void -MesaSoftwareRenderer::WriteCI32PixelsBack( const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - const GLuint index[], const GLubyte mask[] ) +MesaSoftwareRenderer::ReadRGBASpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, + GLint x, GLint y, void *values ) { - printf("WriteCI32PixelsBack() not implemented yet!\n"); - // TODO -} - -void -MesaSoftwareRenderer::WriteMonoCIPixelsBack( const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - GLuint colorIndex, const GLubyte mask[] ) -{ - printf("WriteMonoCIPixelsBack() not implemented yet!\n"); - // TODO -} - - -void -MesaSoftwareRenderer::ReadCI32SpanBack( const GLcontext *ctx, - GLuint n, GLint x, GLint y, GLuint index[] ) -{ - printf("ReadCI32SpanBack() not implemented yet!\n"); - // TODO -} - - -void -MesaSoftwareRenderer::ReadRGBASpanBack( const GLcontext *ctx, GLuint n, - GLint x, GLint y, GLubyte rgba[][4] ) -{ - CALLED(); + //CALLED(); + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; const BBitmap *bitmap = mr->fBitmap; assert(bitmap); @@ -1076,45 +949,33 @@ MesaSoftwareRenderer::ReadRGBASpanBack( const GLcontext *ctx, GLuint n, void -MesaSoftwareRenderer::ReadCI32PixelsBack( const GLcontext *ctx, +MesaSoftwareRenderer::ReadCI32Pixels( const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], GLuint indx[], const GLubyte mask[] ) { - printf("ReadCI32PixelsBack() not implemented yet!\n"); + printf("ReadCI32Pixels() not implemented yet!\n"); // TODO } void -MesaSoftwareRenderer::ReadRGBAPixelsBack( const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4], const GLubyte mask[] ) +MesaSoftwareRenderer::ReadRGBAPixels(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, const GLint x[], const GLint y[], + void *values) { CALLED(); + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; const BBitmap *bitmap = mr->fBitmap; assert(bitmap); - if (mask) { - for (GLuint i = 0; i < n; i++) { - if (mask[i]) { - GLubyte *pixel = (GLubyte *) bitmap->Bits() - + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; - rgba[i][RCOMP] = pixel[BE_RCOMP]; - rgba[i][GCOMP] = pixel[BE_GCOMP]; - rgba[i][BCOMP] = pixel[BE_BCOMP]; - rgba[i][ACOMP] = pixel[BE_ACOMP]; - }; - }; - } else { - for (GLuint i = 0; i < n; i++) { - GLubyte *pixel = (GLubyte *) bitmap->Bits() - + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; - rgba[i][RCOMP] = pixel[BE_RCOMP]; - rgba[i][GCOMP] = pixel[BE_GCOMP]; - rgba[i][BCOMP] = pixel[BE_BCOMP]; - rgba[i][ACOMP] = pixel[BE_ACOMP]; - }; + for (GLuint i = 0; i < n; i++) { + GLubyte *pixel = (GLubyte *) bitmap->Bits() + + ((mr->fBottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; + rgba[i][RCOMP] = pixel[BE_RCOMP]; + rgba[i][GCOMP] = pixel[BE_GCOMP]; + rgba[i][BCOMP] = pixel[BE_BCOMP]; + rgba[i][ACOMP] = pixel[BE_ACOMP]; }; } diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h index 80b0845bf8..ea56a2912d 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h @@ -1,6 +1,10 @@ /* - * Copyright 2006, Haiku. All rights reserved. + * Copyright 2006-2007, Haiku. All rights reserved. * Distributed under the terms of the MIT License. + * + * Authors: + * Jérôme Duval, korli@users.berlios.de + * Philippe Houdoin, philippe.houdoin@free.fr */ /* * Mesa 3-D graphics library @@ -38,120 +42,69 @@ private: static const GLubyte * GetString(GLcontext *ctx, GLenum name); static void Viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h); static void UpdateState(GLcontext *ctx, GLuint new_state); - static void GetBufferSize(GLframebuffer * framebuffer, GLuint *width, - GLuint *height); - static void SetBuffer(GLcontext *ctx, GLframebuffer *colorBuffer, - GLenum mode); - static void ClearFront(GLcontext *ctx, GLboolean all, GLint x, GLint y, - GLint width, GLint height); - static void ClearBack(GLcontext *ctx, GLboolean all, GLint x, GLint y, - GLint width, GLint height); + static void ClearFront(GLcontext *ctx); + static void ClearBack(GLcontext *ctx); static void ClearIndex(GLcontext *ctx, GLuint index); static void ClearColor(GLcontext *ctx, const GLfloat color[4]); - static void Clear(GLcontext *ctx, GLbitfield mask, - GLboolean all, GLint x, GLint y, - GLint width, GLint height); + static void Clear(GLcontext *ctx, GLbitfield mask); + static GLboolean RenderbufferStorage(GLcontext *ctx, struct gl_renderbuffer *render, + GLenum internalFormat, GLuint width, GLuint height ); - // Front-buffer functions - static void WriteRGBASpanFront(const GLcontext *ctx, GLuint n, + // Buffer functions + static void WriteRGBASpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - CONST GLubyte rgba[][4], + const void *values, const GLubyte mask[]); - static void WriteRGBSpanFront(const GLcontext *ctx, GLuint n, + static void WriteRGBSpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - CONST GLubyte rgba[][3], + const void *values, const GLubyte mask[]); - static void WriteMonoRGBASpanFront(const GLcontext *ctx, GLuint n, + static void WriteMonoRGBASpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLchan color[4], + const void *values, const GLubyte mask[]); - static void WriteRGBAPixelsFront(const GLcontext *ctx, GLuint n, + static void WriteRGBAPixels(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - CONST GLubyte rgba[][4], + const void *values, const GLubyte mask[]); - static void WriteMonoRGBAPixelsFront(const GLcontext *ctx, GLuint n, + static void WriteMonoRGBAPixels(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - const GLchan color[4], + const void *values, const GLubyte mask[]); - static void WriteCI32SpanFront(const GLcontext *ctx, GLuint n, + static void WriteCI32Span(const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, const GLuint index[], const GLubyte mask[]); - static void WriteCI8SpanFront(const GLcontext *ctx, GLuint n, + static void WriteCI8Span(const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, const GLubyte index[], const GLubyte mask[]); - static void WriteMonoCISpanFront(const GLcontext *ctx, GLuint n, + static void WriteMonoCISpan(const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, GLuint colorIndex, const GLubyte mask[]); - static void WriteCI32PixelsFront(const GLcontext *ctx, + static void WriteCI32Pixels(const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], const GLuint index[], const GLubyte mask[]); - static void WriteMonoCIPixelsFront(const GLcontext *ctx, GLuint n, + static void WriteMonoCIPixels(const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], GLuint colorIndex, const GLubyte mask[]); - static void ReadCI32SpanFront(const GLcontext *ctx, + static void ReadCI32Span(const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, GLuint index[]); - static void ReadRGBASpanFront(const GLcontext *ctx, GLuint n, + static void ReadRGBASpan(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - GLubyte rgba[][4]); - static void ReadCI32PixelsFront(const GLcontext *ctx, + void *values); + static void ReadCI32Pixels(const GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], GLuint indx[], const GLubyte mask[]); - static void ReadRGBAPixelsFront(const GLcontext *ctx, + static void ReadRGBAPixels(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4], const GLubyte mask[]); + void *values); - // Back buffer functions - static void WriteRGBASpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - CONST GLubyte rgba[][4], - const GLubyte mask[]); - static void WriteRGBSpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - CONST GLubyte rgba[][3], - const GLubyte mask[]); - static void WriteMonoRGBASpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - const GLchan color[4], - const GLubyte mask[]); - static void WriteRGBAPixelsBack(const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - CONST GLubyte rgba[][4], - const GLubyte mask[]); - static void WriteMonoRGBAPixelsBack(const GLcontext *ctx, GLuint n, - const GLint x[], const GLint y[], - const GLchan color[4], - const GLubyte mask[]); - static void WriteCI32SpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - const GLuint index[], const GLubyte mask[]); - static void WriteCI8SpanBack(const GLcontext *ctx, GLuint n, GLint x, GLint y, - const GLubyte index[], const GLubyte mask[]); - static void WriteMonoCISpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, GLuint colorIndex, - const GLubyte mask[]); - static void WriteCI32PixelsBack(const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - const GLuint index[], const GLubyte mask[]); - static void WriteMonoCIPixelsBack(const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - GLuint colorIndex, const GLubyte mask[]); - static void ReadCI32SpanBack(const GLcontext *ctx, - GLuint n, GLint x, GLint y, GLuint index[]); - static void ReadRGBASpanBack(const GLcontext *ctx, GLuint n, - GLint x, GLint y, - GLubyte rgba[][4]); - static void ReadCI32PixelsBack(const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - GLuint indx[], const GLubyte mask[]); - static void ReadRGBAPixelsBack(const GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4], const GLubyte mask[]); BBitmap *fBitmap; GLcontext *fContext; GLvisual *fVisual; GLframebuffer *fFrameBuffer; + struct gl_renderbuffer *fRenderBuffer; GLchan fClearColor[4]; // buffer clear color GLuint fClearIndex; // buffer clear color index diff --git a/src/kits/opengl/GLDispatcher.h b/src/kits/opengl/GLDispatcher.h index 80422d1e9c..c97ba2270d 100644 --- a/src/kits/opengl/GLDispatcher.h +++ b/src/kits/opengl/GLDispatcher.h @@ -19,8 +19,6 @@ class BGLDispatcher BGLDispatcher(); ~BGLDispatcher(); - const char * Version(); - void SetCurrentContext(void * context); void * CurrentContext(); @@ -36,12 +34,6 @@ class BGLDispatcher }; // Inlines methods -inline const char * BGLDispatcher::Version() -{ - return _glapi_get_version(); -} - - inline void BGLDispatcher::SetCurrentContext(void * context) { _glapi_set_context(context); diff --git a/src/kits/opengl/glu/libnurbs/interface/bezierEval.cc b/src/kits/opengl/glu/libnurbs/interface/bezierEval.cc index 47baf13120..b414f535f9 100644 --- a/src/kits/opengl/glu/libnurbs/interface/bezierEval.cc +++ b/src/kits/opengl/glu/libnurbs/interface/bezierEval.cc @@ -57,7 +57,9 @@ static void normalize(float vec[3]); static void crossProduct(float x[3], float y[3], float ret[3]); +#if 0 // UNUSED static void bezierCurveEvalfast(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[]); +#endif static float binomialCoefficients[8][8] = { {1,0,0,0,0,0,0,0}, @@ -91,7 +93,7 @@ void bezierCurveEval(float u0, float u1, int order, float *ctlpoints, int stride } - +#if 0 // UNUSED /*order = degree +1 >=1. */ void bezierCurveEvalfast(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[]) @@ -115,7 +117,7 @@ void bezierCurveEvalfast(float u0, float u1, int order, float *ctlpoints, int st for(j=0; j=1. diff --git a/src/kits/opengl/glu/libnurbs/interface/glcurveval.cc b/src/kits/opengl/glu/libnurbs/interface/glcurveval.cc index ca28237162..ed6a063525 100644 --- a/src/kits/opengl/glu/libnurbs/interface/glcurveval.cc +++ b/src/kits/opengl/glu/libnurbs/interface/glcurveval.cc @@ -35,8 +35,8 @@ /* * glcurveval.c++ * - * $Date: 2004/05/12 15:29:36 $ $Revision: 1.6 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/interface/glcurveval.cc,v 1.6 2004/05/12 15:29:36 brianp Exp $ + * $Date: 2006/03/29 18:46:46 $ $Revision: 1.7 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/interface/glcurveval.cc,v 1.7 2006/03/29 18:46:46 brianp Exp $ */ /* Polynomial Evaluator Interface */ @@ -74,6 +74,7 @@ OpenGLCurveEvaluator::OpenGLCurveEvaluator(void) em_normal.uprime = -1.0; em_color.uprime = -1.0; em_texcoord.uprime = -1.0; + output_triangles = 0; // don't output triangles by default } OpenGLCurveEvaluator::~OpenGLCurveEvaluator(void) diff --git a/src/kits/opengl/glu/libnurbs/interface/glsurfeval.cc b/src/kits/opengl/glu/libnurbs/interface/glsurfeval.cc index cb2cf8ee0b..a36b304508 100644 --- a/src/kits/opengl/glu/libnurbs/interface/glsurfeval.cc +++ b/src/kits/opengl/glu/libnurbs/interface/glsurfeval.cc @@ -779,8 +779,8 @@ OpenGLSurfaceEvaluator::bgnmap2f(long) else auto_normal_flag = 0; */ + glPushAttrib((GLbitfield) GL_EVAL_BIT); - //NEWCALLBACK: no need to worry about gl states when gling clalback } else { @@ -842,12 +842,12 @@ OpenGLSurfaceEvaluator::endmap2f(void) bezierPatchMeshListDelete(global_bpm); global_bpm = NULL; #endif - + glPopAttrib(); } else { #ifndef USE_LOD -glPopAttrib(); + glPopAttrib(); #endif #ifdef STATISTICS diff --git a/src/kits/opengl/glu/libnurbs/interface/mystdio.h b/src/kits/opengl/glu/libnurbs/interface/mystdio.h index 34ad1f8034..b150f95e3e 100644 --- a/src/kits/opengl/glu/libnurbs/interface/mystdio.h +++ b/src/kits/opengl/glu/libnurbs/interface/mystdio.h @@ -35,28 +35,28 @@ /* * mystdio.h * - * $Date: 2001/03/19 17:52:02 $ $Revision: 1.3 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/interface/mystdio.h,v 1.3 2001/03/19 17:52:02 pesco Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.4 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/interface/mystdio.h,v 1.4 2006/03/14 15:08:52 brianp Exp $ */ #ifndef __glumystdio_h_ #define __glumystdio_h_ #ifdef STANDALONE -inline void dprintf( char *, ... ) { } +inline void _glu_dprintf( char *, ... ) { } #endif #ifdef LIBRARYBUILD #ifndef NDEBUG #include -#define dprintf printf +#define _glu_dprintf printf #else -inline void dprintf( char *, ... ) { } +inline void _glu_dprintf( char *, ... ) { } #endif #endif #ifdef GLBUILD -inline void dprintf( char *, ... ) { } +inline void _glu_dprintf( char *, ... ) { } #endif #ifndef NULL diff --git a/src/kits/opengl/glu/libnurbs/internals/arc.cc b/src/kits/opengl/glu/libnurbs/internals/arc.cc index f795e00cd7..b85139de93 100644 --- a/src/kits/opengl/glu/libnurbs/internals/arc.cc +++ b/src/kits/opengl/glu/libnurbs/internals/arc.cc @@ -156,9 +156,9 @@ void Arc::show() { #ifndef NDEBUG - dprintf( "\tPWLARC NP: %d FL: 1\n", pwlArc->npts ); + _glu_dprintf( "\tPWLARC NP: %d FL: 1\n", pwlArc->npts ); for( int i = 0; i < pwlArc->npts; i++ ) { - dprintf( "\t\tVERTEX %f %f\n", pwlArc->pts[i].param[0], + _glu_dprintf( "\t\tVERTEX %f %f\n", pwlArc->pts[i].param[0], pwlArc->pts[i].param[1] ); } #endif @@ -175,14 +175,14 @@ Arc::print( void ) Arc_ptr jarc = this; #ifndef NDEBUG - dprintf( "BGNTRIM\n" ); + _glu_dprintf( "BGNTRIM\n" ); #endif do { jarc->show( ); jarc = jarc->next; } while (jarc != this); #ifndef NDEBUG - dprintf("ENDTRIM\n" ); + _glu_dprintf("ENDTRIM\n" ); #endif } @@ -203,8 +203,8 @@ Arc::isDisconnected( void ) if( ((p0[0] - p1[0]) > ZERO) || ((p1[0] - p0[0]) > ZERO) || ((p0[1] - p1[1]) > ZERO) || ((p1[1] - p0[1]) > ZERO) ) { #ifndef NDEBUG - dprintf( "x coord = %f %f %f\n", p0[0], p1[0], p0[0] - p1[0] ); - dprintf( "y coord = %f %f %f\n", p0[1], p1[1], p0[1] - p1[1] ); + _glu_dprintf( "x coord = %f %f %f\n", p0[0], p1[0], p0[0] - p1[0] ); + _glu_dprintf( "y coord = %f %f %f\n", p0[1], p1[1], p0[1] - p1[1] ); #endif return 1; } else { @@ -244,7 +244,7 @@ Arc::check( void ) if (jarc->prev == 0 || jarc->next == 0) { #ifndef NDEBUG - dprintf( "checkjarc:null next/prev pointer\n"); + _glu_dprintf( "checkjarc:null next/prev pointer\n"); jarc->print( ); #endif return 0; @@ -252,7 +252,7 @@ Arc::check( void ) if (jarc->next->prev != jarc) { #ifndef NDEBUG - dprintf( "checkjarc: pointer linkage screwed up\n"); + _glu_dprintf( "checkjarc: pointer linkage screwed up\n"); jarc->print( ); #endif return 0; @@ -271,7 +271,7 @@ Arc::check( void ) if( jarc->prev->pwlArc ) { if( jarc->tail()[1] != jarc->prev->rhead()[1] ) { #ifndef NDEBUG - dprintf( "checkjarc: geometric linkage screwed up 1\n"); + _glu_dprintf( "checkjarc: geometric linkage screwed up 1\n"); jarc->prev->show(); jarc->show(); #endif @@ -280,7 +280,7 @@ Arc::check( void ) if( jarc->tail()[0] != jarc->prev->rhead()[0] ) { #ifndef NDEBUG - dprintf( "checkjarc: geometric linkage screwed up 2\n"); + _glu_dprintf( "checkjarc: geometric linkage screwed up 2\n"); jarc->prev->show(); jarc->show(); #endif @@ -290,7 +290,7 @@ Arc::check( void ) if( jarc->next->pwlArc ) { if( jarc->next->tail()[0] != jarc->rhead()[0] ) { #ifndef NDEBUG - dprintf( "checkjarc: geometric linkage screwed up 3\n"); + _glu_dprintf( "checkjarc: geometric linkage screwed up 3\n"); jarc->show(); jarc->next->show(); #endif @@ -298,7 +298,7 @@ Arc::check( void ) } if( jarc->next->tail()[1] != jarc->rhead()[1] ) { #ifndef NDEBUG - dprintf( "checkjarc: geometric linkage screwed up 4\n"); + _glu_dprintf( "checkjarc: geometric linkage screwed up 4\n"); jarc->show(); jarc->next->show(); #endif diff --git a/src/kits/opengl/glu/libnurbs/internals/arcsorter.cc b/src/kits/opengl/glu/libnurbs/internals/arcsorter.cc index d0b72c2ad1..4bd83cad65 100644 --- a/src/kits/opengl/glu/libnurbs/internals/arcsorter.cc +++ b/src/kits/opengl/glu/libnurbs/internals/arcsorter.cc @@ -35,8 +35,8 @@ /* * arcsorter.c++ * - * $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/arcsorter.cc,v 1.1 2001/03/17 00:25:40 brianp Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/arcsorter.cc,v 1.2 2006/03/14 15:08:52 brianp Exp $ */ #ifndef __gluarcsorter_c_ @@ -54,7 +54,7 @@ ArcSorter::ArcSorter(Subdivider &s) : Sorter( sizeof( Arc ** ) ), subdivider(s) int ArcSorter::qscmp( char *, char * ) { - dprintf( "ArcSorter::qscmp: pure virtual called\n" ); + _glu_dprintf( "ArcSorter::qscmp: pure virtual called\n" ); return 0; } diff --git a/src/kits/opengl/glu/libnurbs/internals/arctess.cc b/src/kits/opengl/glu/libnurbs/internals/arctess.cc index e633626de0..29e7cf4c00 100644 --- a/src/kits/opengl/glu/libnurbs/internals/arctess.cc +++ b/src/kits/opengl/glu/libnurbs/internals/arctess.cc @@ -335,7 +335,7 @@ ArcTessellator::tessellateNonlinear( Arc *arc, REAL geo_stepsize, REAL arc_steps REAL min_u, min_v, max_u,max_v; min_u = max_u = bezierArc->cpts[0]; min_v = max_v = bezierArc->cpts[1]; - for(i=1, j=2; iorder; i++, j+= bezierArc->stride) + for(i=1, j=bezierArc->stride; iorder; i++, j+= bezierArc->stride) { if(bezierArc->cpts[j] < min_u) min_u = bezierArc->cpts[j]; diff --git a/src/kits/opengl/glu/libnurbs/internals/basiccrveval.cc b/src/kits/opengl/glu/libnurbs/internals/basiccrveval.cc index c7e4282360..cc473e4c2a 100644 --- a/src/kits/opengl/glu/libnurbs/internals/basiccrveval.cc +++ b/src/kits/opengl/glu/libnurbs/internals/basiccrveval.cc @@ -45,7 +45,7 @@ void BasicCurveEvaluator::domain1f( REAL, REAL ) { #ifndef NDEBUG - dprintf( "domain1f\n" ); + _glu_dprintf( "domain1f\n" ); #endif } @@ -53,7 +53,7 @@ void BasicCurveEvaluator::range1f( long , REAL *, REAL * ) { #ifndef NDEBUG - dprintf( "range1f\n" ); + _glu_dprintf( "range1f\n" ); #endif } @@ -61,7 +61,7 @@ void BasicCurveEvaluator::enable( long ) { #ifndef NDEBUG - dprintf( "enable\n" ); + _glu_dprintf( "enable\n" ); #endif } @@ -69,7 +69,7 @@ void BasicCurveEvaluator::disable( long ) { #ifndef NDEBUG - dprintf( "disable\n" ); + _glu_dprintf( "disable\n" ); #endif } @@ -77,7 +77,7 @@ void BasicCurveEvaluator::bgnmap1f( long ) { #ifndef NDEBUG - dprintf( "bgnmap1f\n" ); + _glu_dprintf( "bgnmap1f\n" ); #endif } @@ -85,7 +85,7 @@ void BasicCurveEvaluator::map1f( long, REAL, REAL, long, long, REAL * ) { #ifndef NDEBUG - dprintf( "map1f\n" ); + _glu_dprintf( "map1f\n" ); #endif } @@ -93,7 +93,7 @@ void BasicCurveEvaluator::mapgrid1f( long, REAL, REAL ) { #ifndef NDEBUG - dprintf( "mapgrid1f\n" ); + _glu_dprintf( "mapgrid1f\n" ); #endif } @@ -101,7 +101,7 @@ void BasicCurveEvaluator::mapmesh1f( long, long, long ) { #ifndef NDEBUG - dprintf( "mapmesh1f\n" ); + _glu_dprintf( "mapmesh1f\n" ); #endif } @@ -109,7 +109,7 @@ void BasicCurveEvaluator::evalcoord1f( long, REAL ) { #ifndef NDEBUG - dprintf( "evalcoord1f\n" ); + _glu_dprintf( "evalcoord1f\n" ); #endif } @@ -117,7 +117,7 @@ void BasicCurveEvaluator::endmap1f( void ) { #ifndef NDEBUG - dprintf( "endmap1f\n" ); + _glu_dprintf( "endmap1f\n" ); #endif } @@ -125,7 +125,7 @@ void BasicCurveEvaluator::bgnline( void ) { #ifndef NDEBUG - dprintf( "bgnline\n" ); + _glu_dprintf( "bgnline\n" ); #endif } @@ -133,6 +133,6 @@ void BasicCurveEvaluator::endline( void ) { #ifndef NDEBUG - dprintf( "endline\n" ); + _glu_dprintf( "endline\n" ); #endif } diff --git a/src/kits/opengl/glu/libnurbs/internals/basiccrveval.h b/src/kits/opengl/glu/libnurbs/internals/basiccrveval.h index 23a3ae9fdf..223c7662cb 100644 --- a/src/kits/opengl/glu/libnurbs/internals/basiccrveval.h +++ b/src/kits/opengl/glu/libnurbs/internals/basiccrveval.h @@ -35,8 +35,8 @@ /* * basiccurveeval.h * - * $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/basiccrveval.h,v 1.1 2001/03/17 00:25:40 brianp Exp $ + * $Date: 2006/03/29 18:54:00 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/basiccrveval.h,v 1.2 2006/03/29 18:54:00 brianp Exp $ */ #ifndef __glubasiccrveval_h_ @@ -48,6 +48,7 @@ class BasicCurveEvaluator : public CachingEvaluator { public: + virtual ~BasicCurveEvaluator() { /* silence warning*/ } virtual void domain1f( REAL, REAL ); virtual void range1f( long, REAL *, REAL * ); diff --git a/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.cc b/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.cc index ff212bf0b4..fad5dd0ada 100644 --- a/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.cc +++ b/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.cc @@ -49,7 +49,7 @@ void BasicSurfaceEvaluator::domain2f( REAL, REAL, REAL, REAL ) { #ifndef NDEBUG - dprintf( "domain2f\n" ); + _glu_dprintf( "domain2f\n" ); #endif } @@ -57,7 +57,7 @@ void BasicSurfaceEvaluator::polymode( long ) { #ifndef NDEBUG - dprintf( "polymode\n" ); + _glu_dprintf( "polymode\n" ); #endif } @@ -65,7 +65,7 @@ void BasicSurfaceEvaluator::range2f( long type, REAL *from, REAL *to ) { #ifndef NDEBUG - dprintf( "range2f type %ld, from (%g,%g), to (%g,%g)\n", + _glu_dprintf( "range2f type %ld, from (%g,%g), to (%g,%g)\n", type, from[0], from[1], to[0], to[1] ); #endif } @@ -74,7 +74,7 @@ void BasicSurfaceEvaluator::enable( long ) { #ifndef NDEBUG - dprintf( "enable\n" ); + _glu_dprintf( "enable\n" ); #endif } @@ -82,7 +82,7 @@ void BasicSurfaceEvaluator::disable( long ) { #ifndef NDEBUG - dprintf( "disable\n" ); + _glu_dprintf( "disable\n" ); #endif } @@ -90,7 +90,7 @@ void BasicSurfaceEvaluator::bgnmap2f( long ) { #ifndef NDEBUG - dprintf( "bgnmap2f\n" ); + _glu_dprintf( "bgnmap2f\n" ); #endif } @@ -98,7 +98,7 @@ void BasicSurfaceEvaluator::endmap2f( void ) { #ifndef NDEBUG - dprintf( "endmap2f\n" ); + _glu_dprintf( "endmap2f\n" ); #endif } @@ -108,7 +108,7 @@ BasicSurfaceEvaluator::map2f( long, REAL, REAL, long, long, REAL * ) { #ifndef NDEBUG - dprintf( "map2f\n" ); + _glu_dprintf( "map2f\n" ); #endif } @@ -116,7 +116,7 @@ void BasicSurfaceEvaluator::mapgrid2f( long, REAL, REAL, long, REAL, REAL ) { #ifndef NDEBUG - dprintf( "mapgrid2f\n" ); + _glu_dprintf( "mapgrid2f\n" ); #endif } @@ -124,7 +124,7 @@ void BasicSurfaceEvaluator::mapmesh2f( long, long, long, long, long ) { #ifndef NDEBUG - dprintf( "mapmesh2f\n" ); + _glu_dprintf( "mapmesh2f\n" ); #endif } @@ -132,7 +132,7 @@ void BasicSurfaceEvaluator::evalcoord2f( long, REAL, REAL ) { #ifndef NDEBUG - dprintf( "evalcoord2f\n" ); + _glu_dprintf( "evalcoord2f\n" ); #endif } @@ -140,7 +140,7 @@ void BasicSurfaceEvaluator::evalpoint2i( long, long ) { #ifndef NDEBUG - dprintf( "evalpoint2i\n" ); + _glu_dprintf( "evalpoint2i\n" ); #endif } @@ -148,7 +148,7 @@ void BasicSurfaceEvaluator::bgnline( void ) { #ifndef NDEBUG - dprintf( "bgnline\n" ); + _glu_dprintf( "bgnline\n" ); #endif } @@ -156,7 +156,7 @@ void BasicSurfaceEvaluator::endline( void ) { #ifndef NDEBUG - dprintf( "endline\n" ); + _glu_dprintf( "endline\n" ); #endif } @@ -164,7 +164,7 @@ void BasicSurfaceEvaluator::bgnclosedline( void ) { #ifndef NDEBUG - dprintf( "bgnclosedline\n" ); + _glu_dprintf( "bgnclosedline\n" ); #endif } @@ -172,7 +172,7 @@ void BasicSurfaceEvaluator::endclosedline( void ) { #ifndef NDEBUG - dprintf( "endclosedline\n" ); + _glu_dprintf( "endclosedline\n" ); #endif } @@ -180,7 +180,7 @@ void BasicSurfaceEvaluator::bgntfan( void ) { #ifndef NDEBUG - dprintf( "bgntfan\n" ); + _glu_dprintf( "bgntfan\n" ); #endif } @@ -194,7 +194,7 @@ void BasicSurfaceEvaluator::bgntmesh( void ) { #ifndef NDEBUG - dprintf( "bgntmesh\n" ); + _glu_dprintf( "bgntmesh\n" ); #endif } @@ -202,7 +202,7 @@ void BasicSurfaceEvaluator::swaptmesh( void ) { #ifndef NDEBUG - dprintf( "swaptmesh\n" ); + _glu_dprintf( "swaptmesh\n" ); #endif } @@ -210,7 +210,7 @@ void BasicSurfaceEvaluator::endtmesh( void ) { #ifndef NDEBUG - dprintf( "endtmesh\n" ); + _glu_dprintf( "endtmesh\n" ); #endif } @@ -218,7 +218,7 @@ void BasicSurfaceEvaluator::bgnqstrip( void ) { #ifndef NDEBUG - dprintf( "bgnqstrip\n" ); + _glu_dprintf( "bgnqstrip\n" ); #endif } @@ -226,7 +226,7 @@ void BasicSurfaceEvaluator::endqstrip( void ) { #ifndef NDEBUG - dprintf( "endqstrip\n" ); + _glu_dprintf( "endqstrip\n" ); #endif } diff --git a/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.h b/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.h index e47b46daae..c472a04a35 100644 --- a/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.h +++ b/src/kits/opengl/glu/libnurbs/internals/basicsurfeval.h @@ -35,8 +35,8 @@ /* * basicsurfeval.h * - * $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/basicsurfeval.h,v 1.1 2001/03/17 00:25:40 brianp Exp $ + * $Date: 2006/03/29 18:54:00 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/basicsurfeval.h,v 1.2 2006/03/29 18:54:00 brianp Exp $ */ #ifndef __glubasicsurfeval_h_ @@ -48,6 +48,7 @@ class BasicSurfaceEvaluator : public CachingEvaluator { public: + virtual ~BasicSurfaceEvaluator() { /* silence warning*/ } virtual void range2f( long, REAL *, REAL * ); virtual void domain2f( REAL, REAL, REAL, REAL ); diff --git a/src/kits/opengl/glu/libnurbs/internals/bin.cc b/src/kits/opengl/glu/libnurbs/internals/bin.cc index 6fa296e1cb..dbb6074a7b 100644 --- a/src/kits/opengl/glu/libnurbs/internals/bin.cc +++ b/src/kits/opengl/glu/libnurbs/internals/bin.cc @@ -35,8 +35,8 @@ /* * bin.c++ * - * $Date: 2004/05/12 15:29:36 $ $Revision: 1.2 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/bin.cc,v 1.2 2004/05/12 15:29:36 brianp Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.3 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/bin.cc,v 1.3 2006/03/14 15:08:52 brianp Exp $ */ #include "glimports.h" @@ -123,7 +123,7 @@ void Bin::show( char *name ) { #ifndef NDEBUG - dprintf( "%s\n", name ); + _glu_dprintf( "%s\n", name ); for( Arc_ptr jarc = firstarc(); jarc; jarc = nextarc() ) jarc->show( ); #endif @@ -160,7 +160,7 @@ Bin::listBezier( void ) REAL t1 = pts[0].param[1]; REAL s2 = pts[1].param[0]; REAL t2 = pts[1].param[1]; - dprintf( "arc (%g,%g) (%g,%g)\n", s1, t1, s2, t2 ); + _glu_dprintf( "arc (%g,%g) (%g,%g)\n", s1, t1, s2, t2 ); #endif } } diff --git a/src/kits/opengl/glu/libnurbs/internals/bufpool.h b/src/kits/opengl/glu/libnurbs/internals/bufpool.h index 3090374c21..dfac70bc52 100644 --- a/src/kits/opengl/glu/libnurbs/internals/bufpool.h +++ b/src/kits/opengl/glu/libnurbs/internals/bufpool.h @@ -35,8 +35,8 @@ /* * bufpool.h * - * $Date: 2001/03/22 11:38:36 $ $Revision: 1.2 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/bufpool.h,v 1.2 2001/03/22 11:38:36 joukj Exp $ + * $Date: 2006/03/29 18:46:46 $ $Revision: 1.3 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/bufpool.h,v 1.3 2006/03/29 18:46:46 brianp Exp $ */ #ifndef __glubufpool_h_ @@ -128,6 +128,7 @@ public: inline void * operator new( size_t s) { return ::new char[s]; } inline void operator delete( void * ) { assert( 0 ); } + inline void operator delete( void *, Pool & ) { assert( 0 ); } inline void deleteMe( Pool & ); }; diff --git a/src/kits/opengl/glu/libnurbs/internals/cachingeval.h b/src/kits/opengl/glu/libnurbs/internals/cachingeval.h index a4f489e931..893452abec 100644 --- a/src/kits/opengl/glu/libnurbs/internals/cachingeval.h +++ b/src/kits/opengl/glu/libnurbs/internals/cachingeval.h @@ -35,8 +35,8 @@ /* * cachingeval.h * - * $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/cachingeval.h,v 1.1 2001/03/17 00:25:40 brianp Exp $ + * $Date: 2006/03/29 18:54:00 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/cachingeval.h,v 1.2 2006/03/29 18:54:00 brianp Exp $ */ #ifndef __glucachingval_h_ @@ -44,6 +44,7 @@ class CachingEvaluator { public: + virtual ~CachingEvaluator() { /* silence warning*/ } enum ServiceMode { play, record, playAndRecord }; virtual int canRecord( void ); virtual int canPlayAndRecord( void ); diff --git a/src/kits/opengl/glu/libnurbs/internals/ccw.cc b/src/kits/opengl/glu/libnurbs/internals/ccw.cc index b7a77b65b1..d1e54d9334 100644 --- a/src/kits/opengl/glu/libnurbs/internals/ccw.cc +++ b/src/kits/opengl/glu/libnurbs/internals/ccw.cc @@ -35,8 +35,8 @@ /* * ccw.c++ * - * $Date: 2002/11/01 23:35:07 $ $Revision: 1.2 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/ccw.cc,v 1.2 2002/11/01 23:35:07 brianp Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.3 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/ccw.cc,v 1.3 2006/03/14 15:08:52 brianp Exp $ */ #include "glimports.h" @@ -70,7 +70,7 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 assert( v2 != v2last ); #ifndef NDEBUG - dprintf( "arc_ccw_turn, p = %d\n", 0 ); + _glu_dprintf( "arc_ccw_turn, p = %d\n", 0 ); #endif // the arcs lie on the line (0 == v1->param[0]) @@ -88,7 +88,7 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 while( 1 ) { if( v1next->param[0] < v2next->param[0] ) { #ifndef NDEBUG - dprintf( "case a\n" ); + _glu_dprintf( "case a\n" ); #endif assert( v1->param[0] <= v1next->param[0] ); assert( v2->param[0] <= v1next->param[0] ); @@ -101,12 +101,12 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 return sgn; } else { #ifdef DEBUG - dprintf( "decr\n" ); + _glu_dprintf( "decr\n" ); #endif v1 = v1next--; if( v1 == v1last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -117,7 +117,7 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 } } else if( v1next->param[0] > v2next->param[0] ) { #ifndef NDEBUG - dprintf( "case b\n" ); + _glu_dprintf( "case b\n" ); #endif assert( v1->param[0] <= v2next->param[0] ); assert( v2->param[0] <= v2next->param[0] ); @@ -130,12 +130,12 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 return sgn; } else { #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif v2 = v2next++; if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -146,7 +146,7 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 } } else { #ifndef NDEBUG - dprintf( "case ab\n" ); + _glu_dprintf( "case ab\n" ); #endif if( v1next->param[1] < v2next->param[1] ) return 0; @@ -154,12 +154,12 @@ Subdivider::ccwTurn_sr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 return 1; else { #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif v2 = v2next++; if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -183,7 +183,7 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 assert( v2 != v2last ); #ifndef NDEBUG - dprintf( "arc_ccw_turn, p = %d\n", 0 ); + _glu_dprintf( "arc_ccw_turn, p = %d\n", 0 ); #endif // the arcs lie on the line (0 == v1->param[0]) @@ -201,7 +201,7 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 while( 1 ) { if( v1next->param[0] > v2next->param[0] ) { #ifndef NDEBUG - dprintf( "case c\n" ); + _glu_dprintf( "case c\n" ); #endif assert( v1->param[0] >= v1next->param[0] ); assert( v2->param[0] >= v1next->param[0] ); @@ -215,11 +215,11 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 else { v1 = v1next--; #ifdef DEBUG - dprintf( "decr\n" ); + _glu_dprintf( "decr\n" ); #endif if( v1 == v1last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -230,7 +230,7 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 } } else if( v1next->param[0] < v2next->param[0] ) { #ifndef NDEBUG - dprintf( "case d\n" ); + _glu_dprintf( "case d\n" ); #endif assert( v1->param[0] >= v2next->param[0] ); assert( v2->param[0] >= v2next->param[0] ); @@ -244,11 +244,11 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 else { v2 = v2next++; #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -259,7 +259,7 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 } } else { #ifdef DEBUG - dprintf( "case cd\n" ); + _glu_dprintf( "case cd\n" ); #endif if( v1next->param[1] < v2next->param[1] ) return 1; @@ -268,11 +268,11 @@ Subdivider::ccwTurn_sl( Arc_ptr j1, Arc_ptr j2 ) // dir = 0 else { v2 = v2next++; #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -296,7 +296,7 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 assert( v2 != v2last ); #ifndef NDEBUG - dprintf( "arc_ccw_turn, p = %d\n", 1 ); + _glu_dprintf( "arc_ccw_turn, p = %d\n", 1 ); #endif // the arcs lie on the line (1 == v1->param[1]) @@ -314,7 +314,7 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 while( 1 ) { if( v1next->param[1] < v2next->param[1] ) { #ifndef NDEBUG - dprintf( "case a\n" ); + _glu_dprintf( "case a\n" ); #endif assert( v1->param[1] <= v1next->param[1] ); assert( v2->param[1] <= v1next->param[1] ); @@ -327,12 +327,12 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 return sgn; } else { #ifdef DEBUG - dprintf( "decr\n" ); + _glu_dprintf( "decr\n" ); #endif v1 = v1next--; if( v1 == v1last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -343,7 +343,7 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 } } else if( v1next->param[1] > v2next->param[1] ) { #ifndef NDEBUG - dprintf( "case b\n" ); + _glu_dprintf( "case b\n" ); #endif assert( v1->param[1] <= v2next->param[1] ); assert( v2->param[1] <= v2next->param[1] ); @@ -356,12 +356,12 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 return sgn; } else { #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif v2 = v2next++; if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -372,7 +372,7 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 } } else { #ifdef DEBUG - dprintf( "case ab\n" ); + _glu_dprintf( "case ab\n" ); #endif if( v1next->param[0] < v2next->param[0] ) return 1; @@ -380,12 +380,12 @@ Subdivider::ccwTurn_tr( Arc_ptr j1, Arc_ptr j2 ) // dir = 1 return 0; else { #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif v2 = v2next++; if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -409,7 +409,7 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) assert( v2 != v2last ); #ifndef NDEBUG - dprintf( "arc_ccw_turn, p = %d\n", 1 ); + _glu_dprintf( "arc_ccw_turn, p = %d\n", 1 ); #endif // the arcs lie on the line (1 == v1->param[1]) @@ -427,7 +427,7 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) while( 1 ) { if( v1next->param[1] > v2next->param[1] ) { #ifndef NDEBUG - dprintf( "case c\n" ); + _glu_dprintf( "case c\n" ); #endif assert( v1->param[1] >= v1next->param[1] ); assert( v2->param[1] >= v1next->param[1] ); @@ -441,11 +441,11 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) else { v1 = v1next--; #ifdef DEBUG - dprintf( "decr\n" ); + _glu_dprintf( "decr\n" ); #endif if( v1 == v1last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -456,7 +456,7 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) } } else if( v1next->param[1] < v2next->param[1] ) { #ifndef NDEBUG - dprintf( "case d\n" ); + _glu_dprintf( "case d\n" ); assert( v1->param[1] >= v2next->param[1] ); assert( v2->param[1] >= v2next->param[1] ); #endif @@ -470,11 +470,11 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) else { v2 = v2next++; #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } @@ -485,7 +485,7 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) } } else { #ifdef DEBUG - dprintf( "case cd\n" ); + _glu_dprintf( "case cd\n" ); #endif if( v1next->param[0] < v2next->param[0] ) return 0; @@ -494,11 +494,11 @@ Subdivider::ccwTurn_tl( Arc_ptr j1, Arc_ptr j2 ) else { v2 = v2next++; #ifdef DEBUG - dprintf( "incr\n" ); + _glu_dprintf( "incr\n" ); #endif if( v2 == v2last ) { #ifdef DEBUG - dprintf( "no good results\n" ); + _glu_dprintf( "no good results\n" ); #endif return 0; // ill-conditioned, guess answer } diff --git a/src/kits/opengl/glu/libnurbs/internals/dataTransform.cc b/src/kits/opengl/glu/libnurbs/internals/dataTransform.cc index 58a6c27334..b5ca033506 100644 --- a/src/kits/opengl/glu/libnurbs/internals/dataTransform.cc +++ b/src/kits/opengl/glu/libnurbs/internals/dataTransform.cc @@ -31,10 +31,10 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $ +** $Date: 2005/10/28 13:09:23 $ $Revision: 1.2 $ */ /* -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/dataTransform.cc,v 1.1 2001/03/17 00:25:40 brianp Exp $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/dataTransform.cc,v 1.2 2005/10/28 13:09:23 brianp Exp $ */ #include @@ -47,6 +47,7 @@ extern directedLine* arcLoopToDLineLoop(Arc_ptr loop); +#if 0 // UNUSED static directedLine* copy_loop(Arc_ptr loop, Real2* vertArray, int& index, directedLine dline_buf[], sampledLine sline_buf[], int& index_dline) { directedLine *ret; @@ -95,7 +96,9 @@ static directedLine* copy_loop(Arc_ptr loop, Real2* vertArray, int& index, direc } return ret; } +#endif +#if 0 // UNUSED static int num_edges(Bin& bin) { int sum=0; @@ -103,6 +106,8 @@ static int num_edges(Bin& bin) sum += jarc->pwlArc->npts-1; return sum; } +#endif + /* directedLine* bin_to_DLineLoops(Bin& bin) { diff --git a/src/kits/opengl/glu/libnurbs/internals/flistsorter.h b/src/kits/opengl/glu/libnurbs/internals/flistsorter.h index beec36da56..1eb358a37c 100644 --- a/src/kits/opengl/glu/libnurbs/internals/flistsorter.h +++ b/src/kits/opengl/glu/libnurbs/internals/flistsorter.h @@ -35,8 +35,8 @@ /* * flistsorter.h * - * $Date: 2001/03/17 00:25:41 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/flistsorter.h,v 1.1 2001/03/17 00:25:41 brianp Exp $ + * $Date: 2006/03/29 18:54:00 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/flistsorter.h,v 1.2 2006/03/29 18:54:00 brianp Exp $ */ #ifndef __gluflistsorter_h_ @@ -48,6 +48,7 @@ class FlistSorter : public Sorter { public: FlistSorter(void); + virtual ~FlistSorter() { /* silence warning*/ } void qsort( REAL *a, int n ); protected: diff --git a/src/kits/opengl/glu/libnurbs/internals/intersect.cc b/src/kits/opengl/glu/libnurbs/internals/intersect.cc index aced4a447c..43e80046b0 100644 --- a/src/kits/opengl/glu/libnurbs/internals/intersect.cc +++ b/src/kits/opengl/glu/libnurbs/internals/intersect.cc @@ -35,8 +35,8 @@ /* * intersect.c++ * - * $Date: 2004/05/12 15:29:36 $ $Revision: 1.2 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/intersect.cc,v 1.2 2004/05/12 15:29:36 brianp Exp $ + * $Date: 2005/10/28 13:09:23 $ $Revision: 1.3 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/intersect.cc,v 1.3 2005/10/28 13:09:23 brianp Exp $ */ #include "glimports.h" @@ -53,7 +53,9 @@ enum i_result { INTERSECT_VERTEX, INTERSECT_EDGE }; /* local functions */ +#ifndef NDEBUG // for asserts only static int arc_classify( Arc_ptr, int, REAL ); +#endif static enum i_result pwlarc_intersect( PwlArc *, int, REAL, int, int[3] ); @@ -400,6 +402,7 @@ pwlarc_intersect( *---------------------------------------------------------------------------- */ +#ifndef NDEBUG // for asserts only static int arc_classify( Arc_ptr jarc, int param, REAL value ) { @@ -438,6 +441,7 @@ arc_classify( Arc_ptr jarc, int param, REAL value ) } } } +#endif void Subdivider::classify_tailonleft_s( Bin& bin, Bin& in, Bin& out, REAL val ) diff --git a/src/kits/opengl/glu/libnurbs/internals/knotvector.cc b/src/kits/opengl/glu/libnurbs/internals/knotvector.cc index 50556f622d..610046674c 100644 --- a/src/kits/opengl/glu/libnurbs/internals/knotvector.cc +++ b/src/kits/opengl/glu/libnurbs/internals/knotvector.cc @@ -129,11 +129,11 @@ int Knotvector::validate( void ) void Knotvector::show( char *msg ) { #ifndef NDEBUG - dprintf( "%s\n", msg ); - dprintf( "order = %ld, count = %ld\n", order, knotcount ); + _glu_dprintf( "%s\n", msg ); + _glu_dprintf( "order = %ld, count = %ld\n", order, knotcount ); for( int i=0; iisrational == israt && m->ncoords == ncoords ) ); +#endif add( type, israt, ncoords ); } diff --git a/src/kits/opengl/glu/libnurbs/internals/monoTriangulationBackend.cc b/src/kits/opengl/glu/libnurbs/internals/monoTriangulationBackend.cc index df4bda09b5..3c744e6502 100644 --- a/src/kits/opengl/glu/libnurbs/internals/monoTriangulationBackend.cc +++ b/src/kits/opengl/glu/libnurbs/internals/monoTriangulationBackend.cc @@ -31,10 +31,10 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2004/05/12 15:29:36 $ $Revision: 1.2 $ +** $Date: 2005/10/28 13:09:23 $ $Revision: 1.3 $ */ /* -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/monoTriangulationBackend.cc,v 1.2 2004/05/12 15:29:36 brianp Exp $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/monoTriangulationBackend.cc,v 1.3 2005/10/28 13:09:23 brianp Exp $ */ #include "monoTriangulation.h" @@ -86,7 +86,7 @@ void reflexChain::processNewVertex(Real v[2], Backend* backend) { Int i,j,k; Int isReflex; - TrimVertex trimVert; + /*TrimVertex trimVert;*/ /*if there are at most one vertex in the queue, then simply insert */ if(index_queue <=1){ diff --git a/src/kits/opengl/glu/libnurbs/internals/monotonizer.h b/src/kits/opengl/glu/libnurbs/internals/monotonizer.h index f26c50e16f..8e29538fdb 100644 --- a/src/kits/opengl/glu/libnurbs/internals/monotonizer.h +++ b/src/kits/opengl/glu/libnurbs/internals/monotonizer.h @@ -1,19 +1,41 @@ -/************************************************************************** - * * - * Copyright (C) 1999, Silicon Graphics, Inc. * - * * - * These coded instructions, statements, and computer programs contain * - * unpublished proprietary information of Silicon Graphics, Inc., and * - * are protected by Federal copyright law. They may not be disclosed * - * to third parties or copied or duplicated in any form, in whole or * - * in part, without the prior written consent of Silicon Graphics, Inc. * - * * - **************************************************************************/ +/* +** License Applicability. Except to the extent portions of this file are +** made subject to an alternative license as permitted in the SGI Free +** Software License B, Version 1.1 (the "License"), the contents of this +** file are subject only to the provisions of the License. You may not use +** this file except in compliance with the License. You may obtain a copy +** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 +** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: +** +** http://oss.sgi.com/projects/FreeB +** +** Note that, as provided in the License, the Software is distributed on an +** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS +** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND +** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A +** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. +** +** Original Code. The Original Code is: OpenGL Sample Implementation, +** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, +** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. +** Copyright in any portions created by third parties is as indicated +** elsewhere herein. All Rights Reserved. +** +** Additional Notice Provisions: The application programming interfaces +** established by SGI in conjunction with the Original Code are The +** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released +** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version +** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X +** Window System(R) (Version 1.3), released October 19, 1998. This software +** was created using the OpenGL(R) version 1.2.1 Sample Implementation +** published by SGI, but has not been independently verified as being +** compliant with the OpenGL(R) version 1.2.1 Specification. +*/ /* * monotonizer.h * - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/monotonizer.h,v 1.1 2001/03/17 00:25:41 brianp Exp $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/monotonizer.h,v 1.2 2006/04/03 22:23:52 ajax Exp $ */ #ifndef __glumonotonizer_h_ diff --git a/src/kits/opengl/glu/libnurbs/internals/nurbsinterfac.cc b/src/kits/opengl/glu/libnurbs/internals/nurbsinterfac.cc index 1a68ca51d9..520bd419ea 100644 --- a/src/kits/opengl/glu/libnurbs/internals/nurbsinterfac.cc +++ b/src/kits/opengl/glu/libnurbs/internals/nurbsinterfac.cc @@ -232,7 +232,7 @@ NurbsTessellator::pwlcurve( long count, INREAL array[], long byte_stride, long t } if( i != count ) { do_nurbserror( 37 ); - dprintf( "point %d (%f,%f)\n", i, x, y ); + _glu_dprintf( "point %d (%f,%f)\n", i, x, y ); isDataValid = 0; return; } @@ -247,7 +247,7 @@ NurbsTessellator::pwlcurve( long count, INREAL array[], long byte_stride, long t } if( i != count ) { do_nurbserror( 37 ); - dprintf( "point %d (%f,%f)\n", i, x, y ); + _glu_dprintf( "point %d (%f,%f)\n", i, x, y ); isDataValid = 0; return; } @@ -460,7 +460,7 @@ NurbsTessellator::setnurbsproperty( long type, long purpose, INREAL *mat ) mapdesc->setBboxsize( mat ); } else { #ifndef NDEBUG - dprintf( "ERRORRORRORR!!!\n"); + _glu_dprintf( "ERRORRORRORR!!!\n"); #endif } } @@ -488,7 +488,7 @@ NurbsTessellator::setnurbsproperty( long type, long purpose, INREAL *mat, mapdesc->setBmat( mat, rstride, cstride ); } else { #ifndef NDEBUG - dprintf( "ERRORRORRORR!!!\n"); + _glu_dprintf( "ERRORRORRORR!!!\n"); #endif } } diff --git a/src/kits/opengl/glu/libnurbs/internals/nurbstess.cc b/src/kits/opengl/glu/libnurbs/internals/nurbstess.cc index 678f067b6f..bbf875506a 100644 --- a/src/kits/opengl/glu/libnurbs/internals/nurbstess.cc +++ b/src/kits/opengl/glu/libnurbs/internals/nurbstess.cc @@ -35,8 +35,8 @@ /* * nurbstess.c++ * - * $Date: 2001/03/17 00:25:41 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/nurbstess.cc,v 1.1 2001/03/17 00:25:41 brianp Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/nurbstess.cc,v 1.2 2006/03/14 15:08:52 brianp Exp $ */ #include "glimports.h" @@ -79,7 +79,7 @@ void NurbsTessellator::makeobj( int ) { #ifndef NDEBUG - dprintf( "makeobj\n" ); + _glu_dprintf( "makeobj\n" ); #endif } @@ -87,7 +87,7 @@ void NurbsTessellator::closeobj( void ) { #ifndef NDEBUG - dprintf( "closeobj\n" ); + _glu_dprintf( "closeobj\n" ); #endif } @@ -95,7 +95,7 @@ void NurbsTessellator::bgnrender( void ) { #ifndef NDEBUG - dprintf( "bgnrender\n" ); + _glu_dprintf( "bgnrender\n" ); #endif } @@ -103,7 +103,7 @@ void NurbsTessellator::endrender( void ) { #ifndef NDEBUG - dprintf( "endrender\n" ); + _glu_dprintf( "endrender\n" ); #endif } diff --git a/src/kits/opengl/glu/libnurbs/internals/patch.cc b/src/kits/opengl/glu/libnurbs/internals/patch.cc index 664819cae7..e3b542d870 100644 --- a/src/kits/opengl/glu/libnurbs/internals/patch.cc +++ b/src/kits/opengl/glu/libnurbs/internals/patch.cc @@ -35,8 +35,8 @@ /* * patch.c++ * - * $Date: 2002/11/01 23:35:07 $ $Revision: 1.3 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/patch.cc,v 1.3 2002/11/01 23:35:07 brianp Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.4 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/patch.cc,v 1.4 2006/03/14 15:08:52 brianp Exp $ */ #include @@ -439,7 +439,7 @@ Patch::getstepsize( void ) } #ifdef DEBUG - dprintf( "sidesteps %g %g %g %g, stepsize %g %g\n", + _glu_dprintf( "sidesteps %g %g %g %g, stepsize %g %g\n", pspec[0].sidestep[0], pspec[0].sidestep[1], pspec[1].sidestep[0], pspec[1].sidestep[1], pspec[0].stepsize, pspec[1].stepsize ); diff --git a/src/kits/opengl/glu/libnurbs/internals/quilt.cc b/src/kits/opengl/glu/libnurbs/internals/quilt.cc index 0e13eeb72d..810c9ade72 100644 --- a/src/kits/opengl/glu/libnurbs/internals/quilt.cc +++ b/src/kits/opengl/glu/libnurbs/internals/quilt.cc @@ -35,8 +35,8 @@ /* * quilt.c++ * - * $Date: 2002/11/01 23:35:07 $ $Revision: 1.2 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/quilt.cc,v 1.2 2002/11/01 23:35:07 brianp Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.3 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/quilt.cc,v 1.3 2006/03/14 15:08:52 brianp Exp $ */ #include "glimports.h" @@ -91,12 +91,12 @@ Quilt::show( void ) for( int i=0; i!= qspec[0].order * qspec[0].width; i++ ) { for( int j = 0; j!= qspec[1].order * qspec[1].width; j++ ) { for( int k=0; k < nc; k++ ) - dprintf( "%g ", ps[i*qspec[0].stride + j*qspec[1].stride + k] ); - dprintf( "\n" ); + _glu_dprintf( "%g ", ps[i*qspec[0].stride + j*qspec[1].stride + k] ); + _glu_dprintf( "\n" ); } - dprintf( "\n" ); + _glu_dprintf( "\n" ); } - dprintf( "\n" ); + _glu_dprintf( "\n" ); #endif } diff --git a/src/kits/opengl/glu/libnurbs/internals/slicer.cc b/src/kits/opengl/glu/libnurbs/internals/slicer.cc index c1b74bbf85..9e2b8f5499 100644 --- a/src/kits/opengl/glu/libnurbs/internals/slicer.cc +++ b/src/kits/opengl/glu/libnurbs/internals/slicer.cc @@ -35,8 +35,8 @@ /* * slicer.c++ * - * $Date: 2002/11/01 23:35:07 $ $Revision: 1.4 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/slicer.cc,v 1.4 2002/11/01 23:35:07 brianp Exp $ + * $Date: 2005/10/28 13:09:23 $ $Revision: 1.5 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/slicer.cc,v 1.5 2005/10/28 13:09:23 brianp Exp $ */ #include @@ -84,6 +84,7 @@ Int num_quads = 0; #define ZERO 0.00001 /*determing whether a loop is a rectngle or not*/ #define equalRect(a,b) ((glu_abs(a-b) <= ZERO)? 1:0) //only used in tessellating a rectangle +#if 0 // UNUSED static Int is_Convex(Arc_ptr loop) { if(area(loop->tail(), loop->head(), loop->next->head()) <0 ) @@ -95,9 +96,11 @@ static Int is_Convex(Arc_ptr loop) } return 1; } +#endif /******triangulate a monotone polygon**************/ #include "monoTriangulation.h" +#if 0 // UNUSED static int is_U_monotone(Arc_ptr loop) { int n_changes=0; @@ -126,6 +129,7 @@ static int is_U_monotone(Arc_ptr loop) else return 0; } +#endif inline int compInY(REAL a[2], REAL b[2]) { @@ -259,6 +263,7 @@ if(loop->next->tail()[1] == loop->next->head()[1]) //a line with the same u for opt +#ifdef USE_OPTTT static void evalLineNOGE_BU(TrimVertex *verts, int n, Backend& backend) { int i; @@ -266,8 +271,10 @@ static void evalLineNOGE_BU(TrimVertex *verts, int n, Backend& backend) for(i=0; itail()[0] < (jarc1)->head()[0] ) ) { #ifndef NDEBUG - dprintf( "s difference %f\n", (jarc1)->tail()[0] - (jarc1)->head()[0] ); + _glu_dprintf( "s difference %f\n", (jarc1)->tail()[0] - (jarc1)->head()[0] ); #endif ::mylongjmp( jumpbuffer, 28 ); } if( ! ( jarc2->tail()[0] > (jarc2)->head()[0] ) ) { #ifndef NDEBUG - dprintf( "s difference %f\n", (jarc2)->tail()[0] - (jarc2)->head()[0] ); + _glu_dprintf( "s difference %f\n", (jarc2)->tail()[0] - (jarc2)->head()[0] ); #endif ::mylongjmp( jumpbuffer, 28 ); } @@ -232,14 +232,14 @@ Subdivider::check_t( Arc_ptr jarc1, Arc_ptr jarc2 ) undersampling */ if( ! ( jarc1->tail()[1] < (jarc1)->head()[1] ) ) { #ifndef NDEBUG - dprintf( "t difference %f\n", jarc1->tail()[1] - (jarc1)->head()[1] ); + _glu_dprintf( "t difference %f\n", jarc1->tail()[1] - (jarc1)->head()[1] ); #endif ::mylongjmp( jumpbuffer, 28 ); } if( ! ( jarc2->tail()[1] > (jarc2)->head()[1] ) ) { #ifndef NDEBUG - dprintf( "t difference %f\n", jarc2->tail()[1] - (jarc2)->head()[1] ); + _glu_dprintf( "t difference %f\n", jarc2->tail()[1] - (jarc2)->head()[1] ); #endif ::mylongjmp( jumpbuffer, 28 ); } diff --git a/src/kits/opengl/glu/libnurbs/internals/tobezier.cc b/src/kits/opengl/glu/libnurbs/internals/tobezier.cc index 6b4229da55..737116adf5 100644 --- a/src/kits/opengl/glu/libnurbs/internals/tobezier.cc +++ b/src/kits/opengl/glu/libnurbs/internals/tobezier.cc @@ -35,8 +35,8 @@ /* * tobezier.c++ * - * $Date: 2001/03/17 00:25:41 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/tobezier.cc,v 1.1 2001/03/17 00:25:41 brianp Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/tobezier.cc,v 1.2 2006/03/14 15:08:52 brianp Exp $ */ #include "glimports.h" @@ -360,7 +360,7 @@ Knotspec::showpts( REAL *outpt ) next->showpts( outpt ); } else { for( REAL *lpt=outpt+prewidth; outpt != lpt; outpt += poststride ) - dprintf( "show %g %g %g\n", outpt[0], outpt[1], outpt[2] ); + _glu_dprintf( "show %g %g %g\n", outpt[0], outpt[1], outpt[2] ); } } diff --git a/src/kits/opengl/glu/libnurbs/internals/trimline.cc b/src/kits/opengl/glu/libnurbs/internals/trimline.cc index a8a9adefc8..b81c8ece17 100644 --- a/src/kits/opengl/glu/libnurbs/internals/trimline.cc +++ b/src/kits/opengl/glu/libnurbs/internals/trimline.cc @@ -35,8 +35,8 @@ /* * trimline.c++ * - * $Date: 2001/03/17 00:25:41 $ $Revision: 1.1 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/trimline.cc,v 1.1 2001/03/17 00:25:41 brianp Exp $ + * $Date: 2005/10/28 13:09:23 $ $Revision: 1.2 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/internals/trimline.cc,v 1.2 2005/10/28 13:09:23 brianp Exp $ */ #include "glimports.h" @@ -162,10 +162,11 @@ Trimline::getNextPts( Arc_ptr botarc ) { reset(); swap(); append( tinterp ); +#ifndef NDEBUG PwlArc *lastpwl = botarc->prev->pwlArc; TrimVertex *lastpt1 = &lastpwl->pts[lastpwl->npts-1]; +#endif TrimVertex *lastpt2 = botarc->pwlArc->pts; - register TrimVertex *p = jarcl.getnextpt(); for( append( p ); p != lastpt2; append( p ) ) { assert( p != lastpt1 ); @@ -180,7 +181,9 @@ Trimline::getPrevPts( Arc_ptr botarc ) PwlArc *lastpwl = botarc->prev->pwlArc; TrimVertex *lastpt1 = &lastpwl->pts[lastpwl->npts-1]; +#ifndef NDEBUG TrimVertex *lastpt2 = botarc->pwlArc->pts; +#endif register TrimVertex *q = jarcl.getprevpt(); for( append( q ); q != lastpt1; append( q ) ) { diff --git a/src/kits/opengl/glu/libnurbs/nurbtess/monoChain.cc b/src/kits/opengl/glu/libnurbs/nurbtess/monoChain.cc index 918d58d537..6422bbc54d 100644 --- a/src/kits/opengl/glu/libnurbs/nurbtess/monoChain.cc +++ b/src/kits/opengl/glu/libnurbs/nurbtess/monoChain.cc @@ -31,10 +31,10 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2004/05/12 15:29:36 $ $Revision: 1.2 $ +** $Date: 2005/10/28 13:09:23 $ $Revision: 1.3 $ */ /* -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/monoChain.cc,v 1.2 2004/05/12 15:29:36 brianp Exp $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/monoChain.cc,v 1.3 2005/10/28 13:09:23 brianp Exp $ */ #include "gluos.h" @@ -61,6 +61,7 @@ extern Int isCusp(directedLine *v); extern Int deleteRepeatDiagonals(Int num_diagonals, directedLine** diagonal_vertices, directedLine** new_vertices); //for debug purpose only +#if 0 // UNUSED static void drawDiagonals(Int num_diagonals, directedLine** diagonal_vertices) { Int i; @@ -72,6 +73,7 @@ static void drawDiagonals(Int num_diagonals, directedLine** diagonal_vertices) glEnd(); } } +#endif /*given (x_1, y_1) and (x_2, y_2), and y *return x such that (x,y) is on the line diff --git a/src/kits/opengl/glu/libnurbs/nurbtess/monoTriangulation.cc b/src/kits/opengl/glu/libnurbs/nurbtess/monoTriangulation.cc index 519fbed887..616c2d0944 100644 --- a/src/kits/opengl/glu/libnurbs/nurbtess/monoTriangulation.cc +++ b/src/kits/opengl/glu/libnurbs/nurbtess/monoTriangulation.cc @@ -31,10 +31,10 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2004/05/12 15:29:36 $ $Revision: 1.3 $ +** $Date: 2006/03/29 18:46:46 $ $Revision: 1.5 $ */ /* -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/monoTriangulation.cc,v 1.3 2004/05/12 15:29:36 brianp Exp $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/monoTriangulation.cc,v 1.5 2006/03/29 18:46:46 brianp Exp $ */ #include @@ -619,8 +619,10 @@ void monoTriangulationFun(directedLine* monoPolygon, Int (*compFun)(Real*, Real* dec_chain.appendVertex(tempV->getVertex(i)); } - monoTriangulationRecFun(topV->head(), botV->head(), &inc_chain, 0, &dec_chain, 0, compFun, pStream); - + if (!(0 == inc_chain.getNumElements() && 0 == dec_chain.getNumElements())) { + monoTriangulationRecFun(topV->head(), botV->head(), &inc_chain, 0, + &dec_chain, 0, compFun, pStream); + } } void monoTriangulation(directedLine* monoPolygon, primStream* pStream) @@ -1037,8 +1039,8 @@ void monoTriangulationRec(directedLine* inc_chain, Int inc_index, primStream* pStream) { Int i; - directedLine *temp, *oldtemp; - Int tempIndex, oldtempIndex; + directedLine *temp, *oldtemp = NULL; + Int tempIndex, oldtempIndex = 0; assert(inc_chain != NULL && dec_chain != NULL); diff --git a/src/kits/opengl/glu/libnurbs/nurbtess/mystdio.h b/src/kits/opengl/glu/libnurbs/nurbtess/mystdio.h index 7ec520e8bf..5c5ef06cd7 100644 --- a/src/kits/opengl/glu/libnurbs/nurbtess/mystdio.h +++ b/src/kits/opengl/glu/libnurbs/nurbtess/mystdio.h @@ -35,28 +35,28 @@ /* * mystdio.h * - * $Date: 2001/03/19 17:52:03 $ $Revision: 1.3 $ - * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/mystdio.h,v 1.3 2001/03/19 17:52:03 pesco Exp $ + * $Date: 2006/03/14 15:08:52 $ $Revision: 1.4 $ + * $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/mystdio.h,v 1.4 2006/03/14 15:08:52 brianp Exp $ */ #ifndef __glumystdio_h_ #define __glumystdio_h_ #ifdef STANDALONE -inline void dprintf( char *, ... ) { } +inline void _glu_dprintf( char *, ... ) { } #endif #ifdef LIBRARYBUILD #ifndef NDEBUG #include -#define dprintf printf +#define _glu_dprintf printf #else -inline void dprintf( char *, ... ) { } +inline void _glu_dprintf( char *, ... ) { } #endif #endif #ifdef GLBUILD -inline void dprintf( char *, ... ) { } +inline void _glu_dprintf( char *, ... ) { } #endif #ifndef NULL diff --git a/src/kits/opengl/glu/libnurbs/nurbtess/polyDBG.cc b/src/kits/opengl/glu/libnurbs/nurbtess/polyDBG.cc index 291ade8216..4d04df73f6 100644 --- a/src/kits/opengl/glu/libnurbs/nurbtess/polyDBG.cc +++ b/src/kits/opengl/glu/libnurbs/nurbtess/polyDBG.cc @@ -621,6 +621,7 @@ directedLine* DBG_cutIntersectionPoly(directedLine *polygon, int& cutOccur) //given a polygon, cut the edges off and finally obtain a //a polygon without intersections. The cut-off edges are //dealloated. The new polygon is returned. +#if 0 // UNUSED static directedLine* DBG_cutIntersectionPoly_notwork(directedLine *polygon) { directedLine *crt;//current polygon @@ -673,6 +674,7 @@ static directedLine* DBG_cutIntersectionPoly_notwork(directedLine *polygon) find = 0; //go to next loop } } +#endif directedLine* DBG_cutIntersectionAllPoly(directedLine* list) { diff --git a/src/kits/opengl/glu/libnurbs/nurbtess/sampleComp.cc b/src/kits/opengl/glu/libnurbs/nurbtess/sampleComp.cc index 5a9e68b4c6..62af19466a 100644 --- a/src/kits/opengl/glu/libnurbs/nurbtess/sampleComp.cc +++ b/src/kits/opengl/glu/libnurbs/nurbtess/sampleComp.cc @@ -31,10 +31,10 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2001/03/17 00:25:41 $ $Revision: 1.1 $ +** $Date: 2005/10/28 13:09:23 $ $Revision: 1.2 $ */ /* -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/sampleComp.cc,v 1.1 2001/03/17 00:25:41 brianp Exp $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/sampleComp.cc,v 1.2 2005/10/28 13:09:23 brianp Exp $ */ #include @@ -159,7 +159,7 @@ void sampleCompLeft(Real* topVertex, Real* botVertex, */ Int midIndex1; Int midIndex2; - Int gridMidIndex1, gridMidIndex2; + Int gridMidIndex1 = 0, gridMidIndex2 = 0; //midIndex1: array[i] <= v, array[i-1] > v //midIndex2: array[i] >= v, array[i+1] < v // v(gridMidIndex1) >= v(midindex1) > v(gridMidIndex1+1) diff --git a/src/kits/opengl/glu/libnurbs/nurbtess/sampleCompRight.cc b/src/kits/opengl/glu/libnurbs/nurbtess/sampleCompRight.cc index 9c46439cd9..3afc67d9d8 100644 --- a/src/kits/opengl/glu/libnurbs/nurbtess/sampleCompRight.cc +++ b/src/kits/opengl/glu/libnurbs/nurbtess/sampleCompRight.cc @@ -31,10 +31,10 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2001/03/22 11:41:40 $ $Revision: 1.2 $ +** $Date: 2006/08/30 19:02:45 $ $Revision: 1.4 $ */ /* -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/sampleCompRight.cc,v 1.2 2001/03/22 11:41:40 joukj Exp $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/sampleCompRight.cc,v 1.4 2006/08/30 19:02:45 brianp Exp $ */ #include @@ -72,7 +72,7 @@ void sampleCompRight(Real* topVertex, Real* botVertex, */ Int midIndex1; Int midIndex2; - Int gridMidIndex1, gridMidIndex2; + Int gridMidIndex1 = 0, gridMidIndex2 = 0; //midIndex1: array[i] <= v, array[i+1] > v //midIndex2: array[i] >= v, array[i+1] < v midIndex1 = rightChain->findIndexBelowGen(rightGridChain->get_v_value(gridIndex1), diff --git a/src/kits/opengl/glu/libnurbs/nurbtess/sampleMonoPoly.cc b/src/kits/opengl/glu/libnurbs/nurbtess/sampleMonoPoly.cc index 25271fc76d..c3ab61f20a 100644 --- a/src/kits/opengl/glu/libnurbs/nurbtess/sampleMonoPoly.cc +++ b/src/kits/opengl/glu/libnurbs/nurbtess/sampleMonoPoly.cc @@ -31,10 +31,10 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2004/05/12 15:29:36 $ $Revision: 1.4 $ +** $Date: 2005/10/28 13:09:23 $ $Revision: 1.5 $ */ /* -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/sampleMonoPoly.cc,v 1.4 2004/05/12 15:29:36 brianp Exp $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libnurbs/nurbtess/sampleMonoPoly.cc,v 1.5 2005/10/28 13:09:23 brianp Exp $ */ #include "gluos.h" @@ -976,7 +976,7 @@ void findNeck(vertexArray *leftChain, Int botLeftIndex, void findLeftGridIndices(directedLine* topEdge, Int firstGridIndex, Int lastGridIndex, gridWrap* grid, Int* ret_indices, Int* ret_innerIndices) { - Int i,k,isHoriz; + Int i,k,isHoriz = 0; Int n_ulines = grid->get_n_ulines(); Real uMin = grid->get_u_min(); Real uMax = grid->get_u_max(); @@ -984,7 +984,7 @@ void findLeftGridIndices(directedLine* topEdge, Int firstGridIndex, Int lastGrid Real vMin = grid->get_v_min(); Real vMax = grid->get_v_max(); */ - Real slop, uinterc; + Real slop = 0.0, uinterc; #ifdef SHORTEN_GRID_LINE //uintercBuf stores all the interction u value for each grid line @@ -1102,7 +1102,7 @@ void findRightGridIndices(directedLine* topEdge, Int firstGridIndex, Int lastGri Real vMin = grid->get_v_min(); Real vMax = grid->get_v_max(); */ - Real slop, uinterc; + Real slop = 0.0, uinterc; #ifdef SHORTEN_GRID_LINE //uintercBuf stores all the interction u value for each grid line diff --git a/src/kits/opengl/glu/libtess/dict.c b/src/kits/opengl/glu/libtess/dict.c index 72167752bb..ec924c22ba 100644 --- a/src/kits/opengl/glu/libtess/dict.c +++ b/src/kits/opengl/glu/libtess/dict.c @@ -35,8 +35,8 @@ /* ** Author: Eric Veach, July 1994. ** -** $Date: 2001/03/17 00:25:41 $ $Revision: 1.1 $ -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libtess/dict.c,v 1.1 2001/03/17 00:25:41 brianp Exp $ +** $Date: 2006/04/19 14:42:01 $ $Revision: 1.3 $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libtess/dict.c,v 1.3 2006/04/19 14:42:01 brianp Exp $ */ #include @@ -67,9 +67,10 @@ Dict *dictNewDict( void *frame, /* really __gl_dictListDeleteDict */ void dictDeleteDict( Dict *dict ) { - DictNode *node; + DictNode *node, *next; - for( node = dict->head.next; node != &dict->head; node = node->next ) { + for( node = dict->head.next; node != &dict->head; node = next ) { + next = node->next; memFree( node ); } memFree( dict ); diff --git a/src/kits/opengl/glu/libutil/error.c b/src/kits/opengl/glu/libutil/error.c index f00d9f8edd..0a24f79699 100644 --- a/src/kits/opengl/glu/libutil/error.c +++ b/src/kits/opengl/glu/libutil/error.c @@ -31,8 +31,8 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2001/03/17 00:25:41 $ $Revision: 1.1 $ -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libutil/error.c,v 1.1 2001/03/17 00:25:41 brianp Exp $ +** $Date: 2006/06/20 15:30:26 $ $Revision: 1.3 $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libutil/error.c,v 1.3 2006/06/20 15:30:26 brianp Exp $ */ #include "gluos.h" @@ -41,47 +41,50 @@ #include #include -static const char *glErrorStrings[GL_OUT_OF_MEMORY - GL_INVALID_ENUM + 1] = { - "invalid enumerant", - "invalid value", - "invalid operation", - "stack overflow", - "stack underflow", - "out of memory", + +struct token_string +{ + GLuint Token; + const char *String; }; -static const char *gluErrorStrings[GLU_INVALID_OPERATION - GLU_INVALID_ENUM + 1] = { - "invalid enumerant", - "invalid value", - "out of memory", - "", /* never used but need placeholder */ - "invalid operation", +static const struct token_string Errors[] = { + { GL_NO_ERROR, "no error" }, + { GL_INVALID_ENUM, "invalid enumerant" }, + { GL_INVALID_VALUE, "invalid value" }, + { GL_INVALID_OPERATION, "invalid operation" }, + { GL_STACK_OVERFLOW, "stack overflow" }, + { GL_STACK_UNDERFLOW, "stack underflow" }, + { GL_OUT_OF_MEMORY, "out of memory" }, + { GL_TABLE_TOO_LARGE, "table too large" }, +#ifdef GL_EXT_framebuffer_object + { GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "invalid framebuffer operation" }, +#endif + /* GLU */ + { GLU_INVALID_ENUM, "invalid enumerant" }, + { GLU_INVALID_VALUE, "invalid value" }, + { GLU_OUT_OF_MEMORY, "out of memory" }, + { GLU_INCOMPATIBLE_GL_VERSION, "incompatible gl version" }, + { GLU_INVALID_OPERATION, "invalid operation" }, + { ~0, NULL } /* end of list indicator */ }; -#define NERRORS (sizeof(errorStrings)/sizeof(errorStrings[0])) + const GLubyte* GLAPIENTRY gluErrorString(GLenum errorCode) { - if (errorCode == 0) { - return (const unsigned char *) "no error"; - } - if ((errorCode >= GL_INVALID_ENUM) && (errorCode <= GL_OUT_OF_MEMORY)) { - return (const unsigned char *) glErrorStrings[errorCode - GL_INVALID_ENUM]; - } - if (errorCode == GL_TABLE_TOO_LARGE) { - return (const unsigned char *) "table too large"; - } - if ((errorCode >= GLU_INVALID_ENUM) && (errorCode <= GLU_INVALID_OPERATION)) { - return (const unsigned char *) gluErrorStrings[errorCode - GLU_INVALID_ENUM]; + int i; + for (i = 0; Errors[i].String; i++) { + if (Errors[i].Token == errorCode) + return (const GLubyte *) Errors[i].String; } if ((errorCode >= GLU_NURBS_ERROR1) && (errorCode <= GLU_NURBS_ERROR37)) { - return (const unsigned char *) __gluNURBSErrorString(errorCode - (GLU_NURBS_ERROR1 - 1)); + return (const GLubyte *) __gluNURBSErrorString(errorCode - (GLU_NURBS_ERROR1 - 1)); } if ((errorCode >= GLU_TESS_ERROR1) && (errorCode <= GLU_TESS_ERROR8)) { - return (const unsigned char *) __gluTessErrorString(errorCode - (GLU_TESS_ERROR1 - 1)); + return (const GLubyte *) __gluTessErrorString(errorCode - (GLU_TESS_ERROR1 - 1)); } - - return 0; + return (const GLubyte *) 0; } diff --git a/src/kits/opengl/glu/libutil/mipmap.c b/src/kits/opengl/glu/libutil/mipmap.c index 0122a2aff6..44f519a4e2 100644 --- a/src/kits/opengl/glu/libutil/mipmap.c +++ b/src/kits/opengl/glu/libutil/mipmap.c @@ -377,6 +377,7 @@ static void halveImage_ubyte(GLint components, GLuint width, GLuint height, { int i, j, k; int newwidth, newheight; + int padBytes; GLubyte *s; const char *t; @@ -390,6 +391,7 @@ static void halveImage_ubyte(GLint components, GLuint width, GLuint height, newwidth = width / 2; newheight = height / 2; + padBytes = ysize - (width*group_size); s = dataout; t = (const char *)datain; @@ -405,6 +407,7 @@ static void halveImage_ubyte(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } } @@ -476,6 +479,7 @@ static void halveImage_byte(GLint components, GLuint width, GLuint height, { int i, j, k; int newwidth, newheight; + int padBytes; GLbyte *s; const char *t; @@ -489,6 +493,7 @@ static void halveImage_byte(GLint components, GLuint width, GLuint height, newwidth = width / 2; newheight = height / 2; + padBytes = ysize - (width*group_size); s = dataout; t = (const char *)datain; @@ -504,6 +509,7 @@ static void halveImage_byte(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } } @@ -573,6 +579,7 @@ static void halveImage_ushort(GLint components, GLuint width, GLuint height, { int i, j, k; int newwidth, newheight; + int padBytes; GLushort *s; const char *t; @@ -586,6 +593,7 @@ static void halveImage_ushort(GLint components, GLuint width, GLuint height, newwidth = width / 2; newheight = height / 2; + padBytes = ysize - (width*group_size); s = dataout; t = (const char *)datain; @@ -602,6 +610,7 @@ static void halveImage_ushort(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } else @@ -616,6 +625,7 @@ static void halveImage_ushort(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } } @@ -708,6 +718,7 @@ static void halveImage_short(GLint components, GLuint width, GLuint height, { int i, j, k; int newwidth, newheight; + int padBytes; GLshort *s; const char *t; @@ -721,6 +732,7 @@ static void halveImage_short(GLint components, GLuint width, GLuint height, newwidth = width / 2; newheight = height / 2; + padBytes = ysize - (width*group_size); s = dataout; t = (const char *)datain; @@ -737,6 +749,7 @@ static void halveImage_short(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } else @@ -758,6 +771,7 @@ static void halveImage_short(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } } @@ -850,6 +864,7 @@ static void halveImage_uint(GLint components, GLuint width, GLuint height, { int i, j, k; int newwidth, newheight; + int padBytes; GLuint *s; const char *t; @@ -863,6 +878,7 @@ static void halveImage_uint(GLint components, GLuint width, GLuint height, newwidth = width / 2; newheight = height / 2; + padBytes = ysize - (width*group_size); s = dataout; t = (const char *)datain; @@ -881,6 +897,7 @@ static void halveImage_uint(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } else @@ -899,6 +916,7 @@ static void halveImage_uint(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } } @@ -990,6 +1008,7 @@ static void halveImage_int(GLint components, GLuint width, GLuint height, { int i, j, k; int newwidth, newheight; + int padBytes; GLint *s; const char *t; @@ -1003,6 +1022,7 @@ static void halveImage_int(GLint components, GLuint width, GLuint height, newwidth = width / 2; newheight = height / 2; + padBytes = ysize - (width*group_size); s = dataout; t = (const char *)datain; @@ -1019,6 +1039,7 @@ static void halveImage_int(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } else @@ -1041,6 +1062,7 @@ static void halveImage_int(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } } @@ -1134,6 +1156,7 @@ static void halveImage_float(GLint components, GLuint width, GLuint height, { int i, j, k; int newwidth, newheight; + int padBytes; GLfloat *s; const char *t; @@ -1147,6 +1170,7 @@ static void halveImage_float(GLint components, GLuint width, GLuint height, newwidth = width / 2; newheight = height / 2; + padBytes = ysize - (width*group_size); s = dataout; t = (const char *)datain; @@ -1163,26 +1187,28 @@ static void halveImage_float(GLint components, GLuint width, GLuint height, } t += group_size; } + t += padBytes; t += ysize; } else for (i = 0; i < newheight; i++) { for (j = 0; j < newwidth; j++) { for (k = 0; k < components; k++) { - GLuint b; - b = __GLU_SWAP_4_BYTES(t); - s[0] = *(GLfloat*)&b; - b = __GLU_SWAP_4_BYTES(t+group_size); - s[0] += *(GLfloat*)&b; - b = __GLU_SWAP_4_BYTES(t+ysize); - s[0] += *(GLfloat*)&b; - b = __GLU_SWAP_4_BYTES(t+ysize+group_size); - s[0] += *(GLfloat*)&b; + union { GLuint b; GLfloat f; } swapbuf; + swapbuf.b = __GLU_SWAP_4_BYTES(t); + s[0] = swapbuf.f; + swapbuf.b = __GLU_SWAP_4_BYTES(t+group_size); + s[0] += swapbuf.f; + swapbuf.b = __GLU_SWAP_4_BYTES(t+ysize); + s[0] += swapbuf.f; + swapbuf.b = __GLU_SWAP_4_BYTES(t+ysize+group_size); + s[0] += swapbuf.f; s[0] /= 4; s++; t += element_size; } t += group_size; } + t += padBytes; t += ysize; } } @@ -1409,6 +1435,9 @@ static void scale_internal_ubyte(GLint components, GLint widthin, highy_float = convy_float; for (i = 0; i < heightout; i++) { + /* Clamp here to be sure we don't read beyond input buffer. */ + if (highy_int >= heightin) + highy_int = heightin - 1; lowx_int = 0; lowx_float = 0; highx_int = convx_int; @@ -1450,7 +1479,7 @@ static void scale_internal_ubyte(GLint components, GLint widthin, totals[k] += (GLubyte)(*(temp_index)) * percent; } - /* calculate the value for pixels in the last row */ + /* calculate the value for pixels in the last row */ y_percent = highy_float; percent = y_percent * (1-lowx_float); temp = (const char *)datain + xindex + highy_int * ysize; @@ -1623,6 +1652,9 @@ static void scale_internal_byte(GLint components, GLint widthin, highy_float = convy_float; for (i = 0; i < heightout; i++) { + /* Clamp here to be sure we don't read beyond input buffer. */ + if (highy_int >= heightin) + highy_int = heightin - 1; lowx_int = 0; lowx_float = 0; highx_int = convx_int; @@ -1838,6 +1870,9 @@ static void scale_internal_ushort(GLint components, GLint widthin, highy_float = convy_float; for (i = 0; i < heightout; i++) { + /* Clamp here to be sure we don't read beyond input buffer. */ + if (highy_int >= heightin) + highy_int = heightin - 1; lowx_int = 0; lowx_float = 0; highx_int = convx_int; @@ -2117,6 +2152,9 @@ static void scale_internal_short(GLint components, GLint widthin, highy_float = convy_float; for (i = 0; i < heightout; i++) { + /* Clamp here to be sure we don't read beyond input buffer. */ + if (highy_int >= heightin) + highy_int = heightin - 1; lowx_int = 0; lowx_float = 0; highx_int = convx_int; @@ -2406,6 +2444,9 @@ static void scale_internal_uint(GLint components, GLint widthin, highy_float = convy_float; for (i = 0; i < heightout; i++) { + /* Clamp here to be sure we don't read beyond input buffer. */ + if (highy_int >= heightin) + highy_int = heightin - 1; lowx_int = 0; lowx_float = 0; highx_int = convx_int; @@ -2692,6 +2733,9 @@ static void scale_internal_int(GLint components, GLint widthin, highy_float = convy_float; for (i = 0; i < heightout; i++) { + /* Clamp here to be sure we don't read beyond input buffer. */ + if (highy_int >= heightin) + highy_int = heightin - 1; lowx_int = 0; lowx_float = 0; highx_int = convx_int; @@ -2962,7 +3006,7 @@ static void scale_internal_float(GLint components, GLint widthin, int l, m; const char *left, *right; - GLuint swapbuf; /* unsigned buffer */ + union { GLuint b; GLfloat f; } swapbuf; if (widthin == widthout*2 && heightin == heightout*2) { halveImage_float(components, widthin, heightin, @@ -2985,6 +3029,9 @@ static void scale_internal_float(GLint components, GLint widthin, highy_float = convy_float; for (i = 0; i < heightout; i++) { + /* Clamp here to be sure we don't read beyond input buffer. */ + if (highy_int >= heightin) + highy_int = heightin - 1; lowx_int = 0; lowx_float = 0; highx_int = convx_int; @@ -3008,8 +3055,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3020,8 +3067,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * y_percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * y_percent; } else { totals[k] += *(const GLfloat*)temp_index * y_percent; } @@ -3033,8 +3080,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3047,8 +3094,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3058,8 +3105,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * y_percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * y_percent; } else { totals[k] += *(const GLfloat*)temp_index * y_percent; } @@ -3070,8 +3117,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3084,10 +3131,10 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0; k < components; k++, left += element_size, right += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(left); - totals[k] += *(const GLfloat*)&swapbuf * (1-lowx_float); - swapbuf = __GLU_SWAP_4_BYTES(right); - totals[k] += *(const GLfloat*)&swapbuf * highx_float; + swapbuf.b = __GLU_SWAP_4_BYTES(left); + totals[k] += swapbuf.f * (1-lowx_float); + swapbuf.b = __GLU_SWAP_4_BYTES(right); + totals[k] += swapbuf.f * highx_float; } else { totals[k] += *(const GLfloat*)left * (1-lowx_float) + *(const GLfloat*)right * highx_float; @@ -3101,8 +3148,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3112,8 +3159,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * x_percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * x_percent; } else { totals[k] += *(const GLfloat*)temp_index * x_percent; } @@ -3124,8 +3171,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3138,8 +3185,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3149,8 +3196,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * y_percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * y_percent; } else { totals[k] += *(const GLfloat*)temp_index * y_percent; } @@ -3161,8 +3208,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3173,8 +3220,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf * percent; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f * percent; } else { totals[k] += *(const GLfloat*)temp_index * percent; } @@ -3190,8 +3237,8 @@ static void scale_internal_float(GLint components, GLint widthin, for (k = 0, temp_index = temp; k < components; k++, temp_index += element_size) { if (myswap_bytes) { - swapbuf = __GLU_SWAP_4_BYTES(temp_index); - totals[k] += *(const GLfloat*)&swapbuf; + swapbuf.b = __GLU_SWAP_4_BYTES(temp_index); + totals[k] += swapbuf.f; } else { totals[k] += *(const GLfloat*)temp_index; } @@ -3824,10 +3871,12 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat, if (width == newwidth && height == newheight) { /* Use usersImage for level userLevel */ if (baseLevel <= level && level <= maxLevel) { + glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length); glTexImage2D(target, level, internalFormat, width, height, 0, format, type, usersImage); } + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); if(levels == 0) { /* we're done. clean up and return */ glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment); glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows); @@ -6569,16 +6618,16 @@ static void halve1DimagePackedPixel(int components, * Contributed by Gerk Huisma . */ -typedef GLAPI void (GLAPIENTRY *TexImage3Dproc)( GLenum target, GLint level, +typedef void (GLAPIENTRY *TexImage3Dproc)( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); -static TexImage3Dproc pTexImage3D; +static TexImage3Dproc pTexImage3D = 0; -#ifndef WIN32 +#ifndef _WIN32 # include # include #else @@ -6593,7 +6642,7 @@ static void gluTexImage3D( GLenum target, GLint level, const GLvoid *pixels ) { if (!pTexImage3D) { -#ifdef WIN32 +#ifdef _WIN32 pTexImage3D = (TexImage3Dproc) wglGetProcAddress("glTexImage3D"); if (!pTexImage3D) pTexImage3D = (TexImage3Dproc) wglGetProcAddress("glTexImage3DEXT"); @@ -7376,19 +7425,17 @@ static void closestFit3D(GLenum target, GLint width, GLint height, GLint depth, GLint depthAtLevelOne= (depthPowerOf2 > 1) ? depthPowerOf2 >> 1 : depthPowerOf2; - GLenum proxyTarget; + GLenum proxyTarget = GL_PROXY_TEXTURE_3D; assert(widthAtLevelOne > 0); assert(heightAtLevelOne > 0); assert(depthAtLevelOne > 0); /* does width x height x depth at level 1 & all their mipmaps fit? */ - if (target == GL_TEXTURE_3D || target == GL_PROXY_TEXTURE_3D) { - proxyTarget = GL_PROXY_TEXTURE_3D; - gluTexImage3D(proxyTarget, 1, /* must be non-zero */ - internalFormat, - widthAtLevelOne,heightAtLevelOne,depthAtLevelOne, - 0,format,type,NULL); - } + assert(target == GL_TEXTURE_3D || target == GL_PROXY_TEXTURE_3D); + gluTexImage3D(proxyTarget, 1, /* must be non-zero */ + internalFormat, + widthAtLevelOne,heightAtLevelOne,depthAtLevelOne, + 0,format,type,NULL); glGetTexLevelParameteriv(proxyTarget, 1,GL_TEXTURE_WIDTH,&proxyWidth); /* does it fit??? */ if (proxyWidth == 0) { /* nope, so try again with these sizes */ @@ -8624,7 +8671,8 @@ static void halveImageSlice(int components, int halfHeight= height / 2; int halfDepth= depth / 2; const char *src= (const char *)dataIn; - int padBytes= rowSizeInBytes - (width * groupSizeInBytes); + int rowPadBytes= rowSizeInBytes - (width * groupSizeInBytes); + int imagePadBytes= imageSizeInBytes - (width*height*groupSizeInBytes); int outIndex= 0; assert((width == 1 || height == 1) && depth >= 2); @@ -8708,7 +8756,7 @@ static void halveImageSlice(int components, /* skip over to next horizontal square of 4 */ src+= groupSizeInBytes; } /* for jj */ - src+= padBytes; + src+= rowPadBytes; src+= rowSizeInBytes; } /* for ii */ @@ -8753,11 +8801,12 @@ static void halveImageSlice(int components, src+= elementSizeInBytes; } /* for cc */ - src+= padBytes; + src+= rowPadBytes; /* skip over to next vertical square of 4 */ src+= rowSizeInBytes; } /* for jj */ + src+= imagePadBytes; src+= imageSizeInBytes; } /* for ii */ @@ -8797,7 +8846,8 @@ static void halveImage3D(int components, int halfHeight= height / 2; int halfDepth= depth / 2; const char *src= (const char *) dataIn; - int padBytes= rowSizeInBytes - (width*groupSizeInBytes); + int rowPadBytes= rowSizeInBytes - (width*groupSizeInBytes); + int imagePadBytes= imageSizeInBytes - (width*height*groupSizeInBytes); int outIndex= 0; for (dd= 0; dd < halfDepth; dd++) { @@ -8853,7 +8903,7 @@ static void halveImage3D(int components, src+= groupSizeInBytes; } /* for jj */ /* skip past pad bytes, if any, to get to next row */ - src+= padBytes; + src+= rowPadBytes; /* src is at beginning of a row here, but it's the second row of * the square block of 4 pixels that we just worked on so we @@ -8868,6 +8918,9 @@ static void halveImage3D(int components, src+= rowSizeInBytes; } /* for ii */ + /* skip past pad bytes, if any, to get to next image */ + src+= imagePadBytes; + src+= imageSizeInBytes; } /* for dd */ diff --git a/src/kits/opengl/glu/libutil/project.c b/src/kits/opengl/glu/libutil/project.c index 80d92235af..ef1ef14fb6 100644 --- a/src/kits/opengl/glu/libutil/project.c +++ b/src/kits/opengl/glu/libutil/project.c @@ -31,8 +31,8 @@ ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. ** -** $Date: 2002/11/01 23:45:31 $ $Revision: 1.5 $ -** $Header: /cvs/mesa/Mesa/src/glu/sgi/libutil/project.c,v 1.5 2002/11/01 23:45:31 brianp Exp $ +** $Date: 2006/05/01 16:01:17 $ $Revision: 1.6 $ +** $Header: /cvs/mesa/Mesa/src/glu/sgi/libutil/project.c,v 1.6 2006/05/01 16:01:17 brianp Exp $ */ #include "gluos.h" @@ -169,70 +169,73 @@ static void __gluMultMatrixVecd(const GLdouble matrix[16], const GLdouble in[4], /* ** inverse = invert(src) +** New, faster implementation by Shan Hao Bo, April 2006. */ static int __gluInvertMatrixd(const GLdouble src[16], GLdouble inverse[16]) { - int i, j, k, swap; - double t; - GLdouble temp[4][4]; - - for (i=0; i<4; i++) { - for (j=0; j<4; j++) { - temp[i][j] = src[i*4+j]; - } - } - __gluMakeIdentityd(inverse); - - for (i = 0; i < 4; i++) { - /* - ** Look for largest element in column - */ - swap = i; - for (j = i + 1; j < 4; j++) { - if (fabs(temp[j][i]) > fabs(temp[i][i])) { - swap = j; - } - } - - if (swap != i) { - /* - ** Swap rows. - */ - for (k = 0; k < 4; k++) { - t = temp[i][k]; - temp[i][k] = temp[swap][k]; - temp[swap][k] = t; - - t = inverse[i*4+k]; - inverse[i*4+k] = inverse[swap*4+k]; - inverse[swap*4+k] = t; - } - } - - if (temp[i][i] == 0) { - /* - ** No non-zero pivot. The matrix is singular, which shouldn't - ** happen. This means the user gave us a bad matrix. - */ - return GL_FALSE; - } - - t = temp[i][i]; - for (k = 0; k < 4; k++) { - temp[i][k] /= t; - inverse[i*4+k] /= t; - } - for (j = 0; j < 4; j++) { - if (j != i) { - t = temp[j][i]; - for (k = 0; k < 4; k++) { - temp[j][k] -= temp[i][k]*t; - inverse[j*4+k] -= inverse[i*4+k]*t; + int i, j, k; + double t; + GLdouble temp[4][4]; + + for (i=0; i<4; i++) { + for (j=0; j<4; j++) { + temp[i][j] = src[i*4+j]; } - } } - } - return GL_TRUE; + __gluMakeIdentityd(inverse); + + for (i = 0; i < 4; i++) { + if (temp[i][i] == 0.0f) { + /* + ** Look for non-zero element in column + */ + for (j = i + 1; j < 4; j++) { + if (temp[j][i] != 0.0f) { + break; + } + } + + if (j != 4) { + /* + ** Swap rows. + */ + for (k = 0; k < 4; k++) { + t = temp[i][k]; + temp[i][k] = temp[j][k]; + temp[j][k] = t; + + t = inverse[i*4+k]; + inverse[i*4+k] = inverse[j*4+k]; + inverse[j*4+k] = t; + } + } + else { + /* + ** No non-zero pivot. The matrix is singular, +which shouldn't + ** happen. This means the user gave us a bad +matrix. + */ + return GL_FALSE; + } + } + + t = 1.0f / temp[i][i]; + for (k = 0; k < 4; k++) { + temp[i][k] *= t; + inverse[i*4+k] *= t; + } + for (j = 0; j < 4; j++) { + if (j != i) { + t = temp[j][i]; + for (k = 0; k < 4; k++) { + temp[j][k] -= temp[i][k]*t; + inverse[j*4+k] -= inverse[i*4+k]*t; + } + } + } + } + return GL_TRUE; } static void __gluMultMatricesd(const GLdouble a[16], const GLdouble b[16], diff --git a/src/kits/opengl/glu/libutil/quad.c b/src/kits/opengl/glu/libutil/quad.c index 8d9bcdda64..e604539c82 100644 --- a/src/kits/opengl/glu/libutil/quad.c +++ b/src/kits/opengl/glu/libutil/quad.c @@ -444,7 +444,7 @@ gluPartialDisk(GLUquadric *qobj, GLdouble innerRadius, GLfloat sintemp, costemp; GLfloat deltaRadius; GLfloat radiusLow, radiusHigh; - GLfloat texLow, texHigh; + GLfloat texLow = 0.0, texHigh = 0.0; GLfloat angleOffset; GLint slices2; GLint finish; @@ -713,8 +713,8 @@ gluSphere(GLUquadric *qobj, GLdouble radius, GLint slices, GLint stacks) GLfloat cosCache3b[CACHE_SIZE]; GLfloat angle; GLfloat zLow, zHigh; - GLfloat sintemp1, sintemp2, sintemp3, sintemp4; - GLfloat costemp1, costemp2, costemp3, costemp4; + GLfloat sintemp1, sintemp2, sintemp3 = 0.0, sintemp4 = 0.0; + GLfloat costemp1, costemp2 = 0.0, costemp3 = 0.0, costemp4 = 0.0; GLboolean needCache2, needCache3; GLint start, finish; diff --git a/src/kits/opengl/glut/glutCallback.cpp b/src/kits/opengl/glut/glutCallback.cpp index be56d4637b..cf3daaaf36 100644 --- a/src/kits/opengl/glut/glutCallback.cpp +++ b/src/kits/opengl/glut/glutCallback.cpp @@ -37,24 +37,12 @@ glutKeyboardFunc(GLUTkeyboardCB keyboardFunc) gState.currentWindow->keyboard = keyboardFunc; } -void APIENTRY -glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc) -{ - gState.currentWindow->keyboardUp = keyboardUpFunc; -} - void APIENTRY glutSpecialFunc(GLUTspecialCB specialFunc) { gState.currentWindow->special = specialFunc; } -void APIENTRY -glutSpecialUpFunc(GLUTspecialCB specialUpFunc) -{ - gState.currentWindow->specialUp = specialUpFunc; -} - void APIENTRY glutMouseFunc(GLUTmouseCB mouseFunc) { @@ -147,11 +135,6 @@ glutOverlayDisplayFunc(GLUTdisplayCB displayFunc) { } -void APIENTRY -glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval) -{ -} - void APIENTRY glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc) { diff --git a/src/kits/opengl/glut/glutWindow.h b/src/kits/opengl/glut/glutWindow.h index 5374e651fe..d3ac186269 100644 --- a/src/kits/opengl/glut/glutWindow.h +++ b/src/kits/opengl/glut/glutWindow.h @@ -63,10 +63,8 @@ public: GLUTpassiveCB passive; /* passive motion (x,y) */ GLUTentryCB entry; /* window entry/exit (state) */ GLUTkeyboardCB keyboard; /* keyboard (ASCII,x,y) */ - GLUTkeyboardCB keyboardUp; /* keyboard up (ASCII,x,y) */ GLUTvisibilityCB visibility; /* visibility */ GLUTspecialCB special; /* special key */ - GLUTspecialCB specialUp; /* special key up */ GLUTwindowStatusCB windowStatus; /* window status */ bool anyevents; // were any events received? diff --git a/src/kits/opengl/mesa/Jamfile b/src/kits/opengl/mesa/Jamfile index 8f67a32749..2c157395a1 100644 --- a/src/kits/opengl/mesa/Jamfile +++ b/src/kits/opengl/mesa/Jamfile @@ -17,6 +17,8 @@ UseHeaders [ FDirName $(SUBDIR) glapi ] ; UseHeaders [ FDirName $(SUBDIR) math ] ; UseHeaders [ FDirName $(SUBDIR) tnl ] ; UseHeaders [ FDirName $(SUBDIR) shader ] ; +UseHeaders [ FDirName $(SUBDIR) shader grammar ] ; +UseHeaders [ FDirName $(SUBDIR) shader slang ] ; UseHeaders [ FDirName $(SUBDIR) swrast ] ; UseHeaders [ FDirName $(SUBDIR) swrast_setup ] ; @@ -26,6 +28,8 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) glapi ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) main ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) math ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) shader ] ; +SEARCH_SOURCE += [ FDirName $(SUBDIR) shader grammar ] ; +SEARCH_SOURCE += [ FDirName $(SUBDIR) shader slang ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) swrast ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) swrast_setup ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) tnl ] ; @@ -78,9 +82,18 @@ if $(TARGET_ARCH) = x86 { sse_normal.S read_rgba_span_x86.S + t_vertex_sse.c + t_vb_arbprogram_sse.c + t_vtx_x86.c t_vtx_x86_gcc.S + + slang_execute_x86.c + + x86sse.c ; +SEARCH_SOURCE += [ FDirName $(SUBDIR) x86 rtasm ] ; + } else if $(TARGET_ARCH) = ppc { arch_sources = @@ -110,6 +123,7 @@ StaticLibrary libmesa.a : api_noop.c api_validate.c accum.c + arrayobj.c attrib.c blend.c bufferobj.c @@ -120,16 +134,21 @@ StaticLibrary libmesa.a : convolve.c debug.c depth.c + depthstencil.c dlist.c drawpix.c driverfuncs.c enable.c enums.c eval.c + execmem.c extensions.c + fbobject.c feedback.c fog.c + framebuffer.c get.c + getstring.c hash.c hint.c histogram.c @@ -138,19 +157,23 @@ StaticLibrary libmesa.a : light.c lines.c matrix.c + mipmap.c occlude.c pixel.c points.c polygon.c rastpos.c + renderbuffer.c state.c stencil.c texcompress.c texcompress_s3tc.c texcompress_fxt1.c + texenvprogram.c texformat.c teximage.c texobj.c + texrender.c texstate.c texstore.c varray.c @@ -178,6 +201,8 @@ StaticLibrary libmesa.a : t_save_api.c t_save_loopback.c t_save_playback.c + t_vb_arbprogram.c + t_vb_arbshader.c t_vb_cull.c t_vb_fog.c t_vb_light.c @@ -188,26 +213,24 @@ StaticLibrary libmesa.a : t_vb_texgen.c t_vb_texmat.c t_vb_vertex.c + t_vp_build.c t_vertex.c - t_vertex_c.c - t_vertex_codegen.c + t_vertex_generic.c t_vtx_api.c t_vtx_generic.c - t_vtx_x86.c t_vtx_eval.c t_vtx_exec.c # swrast - s_fragprog_to_c.c s_aaline.c s_aatriangle.c s_accum.c s_alpha.c - s_alphabuf.c + s_arbshader.c s_atifragshader.c - s_auxbuffer.c s_bitmap.c s_blend.c + s_blit.c s_buffers.c s_copypix.c s_context.c @@ -220,13 +243,12 @@ StaticLibrary libmesa.a : s_logic.c s_masking.c s_nvfragprog.c - s_pixeltex.c s_points.c s_readpix.c s_span.c s_stencil.c - s_tcc.c - s_texture.c + s_texcombine.c + s_texfilter.c s_texstore.c s_triangle.c s_zoom.c @@ -236,18 +258,40 @@ StaticLibrary libmesa.a : ss_triangle.c # shader - arbfragparse.c arbprogparse.c arbprogram.c - arbvertparse.c atifragshader.c - grammar_mesa.c nvfragparse.c nvprogram.c nvvertexec.c nvvertparse.c program.c shaderobjects.c + shaderobjects_3dlabs.c + + # shader/grammar + grammar_mesa.c + + # shader/slang + slang_analyse.c + slang_assemble.c + slang_assemble_assignment.c + slang_assemble_conditional.c + slang_assemble_constructor.c + slang_assemble_typeinfo.c + slang_compile.c + slang_compile_function.c + slang_compile_operation.c + slang_compile_struct.c + slang_compile_variable.c + slang_execute.c + slang_export.c + slang_library_noise.c + slang_library_texsample.c + slang_link.c + slang_preprocess.c + slang_storage.c + slang_utility.c $(arch_sources) diff --git a/src/kits/opengl/mesa/array_cache/ac_context.c b/src/kits/opengl/mesa/array_cache/ac_context.c index ebf3a3dc47..5d5ad5e363 100644 --- a/src/kits/opengl/mesa/array_cache/ac_context.c +++ b/src/kits/opengl/mesa/array_cache/ac_context.c @@ -96,7 +96,7 @@ static void _ac_fallbacks_init( GLcontext *ctx ) cl->Type = GL_FLOAT; cl->Stride = 0; cl->StrideB = 0; - cl->Ptr = (GLubyte *) &ctx->Current.Index; + cl->Ptr = (GLubyte *) &ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX]; cl->Enabled = 1; cl->Flags = CA_CLIENT_DATA; /* hack */ #if FEATURE_ARB_vertex_buffer_object @@ -292,7 +292,7 @@ static void _ac_raw_init( GLcontext *ctx ) ac->Raw.Index = ac->Fallback.Index; ac->Raw.Normal = ac->Fallback.Normal; ac->Raw.SecondaryColor = ac->Fallback.SecondaryColor; - ac->Raw.Vertex = ctx->Array.Vertex; + ac->Raw.Vertex = ctx->Array.ArrayObj->Vertex; ac->IsCached.Color = GL_FALSE; ac->IsCached.EdgeFlag = GL_FALSE; diff --git a/src/kits/opengl/mesa/array_cache/ac_import.c b/src/kits/opengl/mesa/array_cache/ac_import.c index 0c66084f91..119e58bf24 100644 --- a/src/kits/opengl/mesa/array_cache/ac_import.c +++ b/src/kits/opengl/mesa/array_cache/ac_import.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -50,8 +50,8 @@ reset_texcoord( GLcontext *ctx, GLuint unit ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.TexCoord[unit].Enabled) { - ac->Raw.TexCoord[unit] = ctx->Array.TexCoord[unit]; + if (ctx->Array.ArrayObj->TexCoord[unit].Enabled) { + ac->Raw.TexCoord[unit] = ctx->Array.ArrayObj->TexCoord[unit]; STRIDE_ARRAY(ac->Raw.TexCoord[unit], ac->start); } else { @@ -73,9 +73,9 @@ static void reset_vertex( GLcontext *ctx ) { ACcontext *ac = AC_CONTEXT(ctx); - ASSERT(ctx->Array.Vertex.Enabled - || (ctx->VertexProgram._Enabled && ctx->Array.VertexAttrib[0].Enabled)); - ac->Raw.Vertex = ctx->Array.Vertex; + ASSERT(ctx->Array.ArrayObj->Vertex.Enabled + || (ctx->VertexProgram._Enabled && ctx->Array.ArrayObj->VertexAttrib[0].Enabled)); + ac->Raw.Vertex = ctx->Array.ArrayObj->Vertex; STRIDE_ARRAY(ac->Raw.Vertex, ac->start); ac->IsCached.Vertex = GL_FALSE; ac->NewArrayState &= ~_NEW_ARRAY_VERTEX; @@ -87,8 +87,8 @@ reset_normal( GLcontext *ctx ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.Normal.Enabled) { - ac->Raw.Normal = ctx->Array.Normal; + if (ctx->Array.ArrayObj->Normal.Enabled) { + ac->Raw.Normal = ctx->Array.ArrayObj->Normal; STRIDE_ARRAY(ac->Raw.Normal, ac->start); } else { @@ -105,8 +105,8 @@ reset_color( GLcontext *ctx ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.Color.Enabled) { - ac->Raw.Color = ctx->Array.Color; + if (ctx->Array.ArrayObj->Color.Enabled) { + ac->Raw.Color = ctx->Array.ArrayObj->Color; STRIDE_ARRAY(ac->Raw.Color, ac->start); } else @@ -122,8 +122,8 @@ reset_secondarycolor( GLcontext *ctx ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.SecondaryColor.Enabled) { - ac->Raw.SecondaryColor = ctx->Array.SecondaryColor; + if (ctx->Array.ArrayObj->SecondaryColor.Enabled) { + ac->Raw.SecondaryColor = ctx->Array.ArrayObj->SecondaryColor; STRIDE_ARRAY(ac->Raw.SecondaryColor, ac->start); } else @@ -139,8 +139,8 @@ reset_index( GLcontext *ctx ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.Index.Enabled) { - ac->Raw.Index = ctx->Array.Index; + if (ctx->Array.ArrayObj->Index.Enabled) { + ac->Raw.Index = ctx->Array.ArrayObj->Index; STRIDE_ARRAY(ac->Raw.Index, ac->start); } else @@ -156,8 +156,8 @@ reset_fogcoord( GLcontext *ctx ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.FogCoord.Enabled) { - ac->Raw.FogCoord = ctx->Array.FogCoord; + if (ctx->Array.ArrayObj->FogCoord.Enabled) { + ac->Raw.FogCoord = ctx->Array.ArrayObj->FogCoord; STRIDE_ARRAY(ac->Raw.FogCoord, ac->start); } else @@ -173,8 +173,8 @@ reset_edgeflag( GLcontext *ctx ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.EdgeFlag.Enabled) { - ac->Raw.EdgeFlag = ctx->Array.EdgeFlag; + if (ctx->Array.ArrayObj->EdgeFlag.Enabled) { + ac->Raw.EdgeFlag = ctx->Array.ArrayObj->EdgeFlag; STRIDE_ARRAY(ac->Raw.EdgeFlag, ac->start); } else @@ -185,13 +185,16 @@ reset_edgeflag( GLcontext *ctx ) } +/** + * \param index the generic vertex array number. + */ static void reset_attrib( GLcontext *ctx, GLuint index ) { ACcontext *ac = AC_CONTEXT(ctx); - if (ctx->Array.VertexAttrib[index].Enabled) { - ac->Raw.Attrib[index] = ctx->Array.VertexAttrib[index]; + if (ctx->Array.ArrayObj->VertexAttrib[index].Enabled) { + ac->Raw.Attrib[index] = ctx->Array.ArrayObj->VertexAttrib[index]; STRIDE_ARRAY(ac->Raw.Attrib[index], ac->start); } else @@ -218,7 +221,7 @@ import( const GLcontext *ctx, switch (destType) { case GL_FLOAT: - _math_trans_4fc( (GLfloat (*)[4]) to->Ptr, + _math_trans_4fn( (GLfloat (*)[4]) to->Ptr, from->Ptr, from->StrideB, from->Type, @@ -340,7 +343,7 @@ import_normal( GLcontext *ctx, GLenum type, GLuint stride ) ASSERT(type == GL_FLOAT); ASSERT(stride == 3*sizeof(GLfloat) || stride == 0); - _math_trans_3f( (GLfloat (*)[3]) to->Ptr, + _math_trans_3fn((GLfloat (*)[3]) to->Ptr, from->Ptr, from->StrideB, from->Type, @@ -453,6 +456,9 @@ import_edgeflag( GLcontext *ctx, GLenum type, GLuint stride ) ac->IsCached.EdgeFlag = GL_TRUE; } +/** + * \param index the generic vertex array number + */ static void import_attrib( GLcontext *ctx, GLuint index, GLenum type, GLuint stride ) { @@ -469,13 +475,24 @@ import_attrib( GLcontext *ctx, GLuint index, GLenum type, GLuint stride ) ASSERT(stride == 4*sizeof(GLfloat) || stride == 0); ASSERT(ac->count - ac->start < ctx->Const.MaxArrayLockSize); - _math_trans_4f( (GLfloat (*)[4]) to->Ptr, - from->Ptr, - from->StrideB, - from->Type, - from->Size, - 0, - ac->count - ac->start); + if (from->Normalized) { + _math_trans_4fn( (GLfloat (*)[4]) to->Ptr, + from->Ptr, + from->StrideB, + from->Type, + from->Size, + 0, + ac->count - ac->start); + } + else { + _math_trans_4f( (GLfloat (*)[4]) to->Ptr, + from->Ptr, + from->StrideB, + from->Type, + from->Size, + 0, + ac->count - ac->start); + } to->Size = from->Size; to->StrideB = 4 * sizeof(GLfloat); @@ -501,7 +518,7 @@ _ac_import_texcoord( GLcontext *ctx, { ACcontext *ac = AC_CONTEXT(ctx); - ASSERT(unit < ctx->Const.MaxTextureCoordUnits); + ASSERT(unit < MAX_TEXTURE_COORD_UNITS); /* Can we keep the existing version? */ @@ -511,7 +528,7 @@ _ac_import_texcoord( GLcontext *ctx, /* Is the request impossible? */ if (reqsize != 0 && ac->Raw.TexCoord[unit].Size > (GLint) reqsize) - return 0; + return NULL; /* Do we need to pull in a copy of the client data: */ @@ -548,7 +565,7 @@ _ac_import_vertex( GLcontext *ctx, /* Is the request impossible? */ if (reqsize != 0 && ac->Raw.Vertex.Size > (GLint) reqsize) - return 0; + return NULL; /* Do we need to pull in a copy of the client data: */ @@ -616,7 +633,7 @@ _ac_import_color( GLcontext *ctx, /* Is the request impossible? */ if (reqsize != 0 && ac->Raw.Color.Size > (GLint) reqsize) { - return 0; + return NULL; } /* Do we need to pull in a copy of the client data: @@ -687,7 +704,7 @@ _ac_import_secondarycolor( GLcontext *ctx, /* Is the request impossible? */ if (reqsize != 0 && ac->Raw.SecondaryColor.Size > (GLint) reqsize) - return 0; + return NULL; /* Do we need to pull in a copy of the client data: */ @@ -768,7 +785,10 @@ _ac_import_edgeflag( GLcontext *ctx, } } -/* GL_NV_vertex_program */ +/** + * For GL_ARB/NV_vertex_program + * \param index index of the vertex array, starting at zero. + */ struct gl_client_array * _ac_import_attrib( GLcontext *ctx, GLuint index, @@ -831,7 +851,7 @@ _ac_import_range( GLcontext *ctx, GLuint start, GLuint count ) * the whole locked range always be dealt with, otherwise hard to * maintain cached data in the face of clipping. */ - ac->NewArrayState |= ~ctx->Array._Enabled; + ac->NewArrayState |= ~ctx->Array.ArrayObj->_Enabled; ac->start = ctx->Array.LockFirst; ac->count = ctx->Array.LockCount; ASSERT(ac->start == start); /* hmm? */ @@ -866,10 +886,10 @@ _ac_import_elements( GLcontext *ctx, switch (new_type) { case GL_UNSIGNED_BYTE: ASSERT(0); - return 0; + return NULL; case GL_UNSIGNED_SHORT: ASSERT(0); - return 0; + return NULL; case GL_UNSIGNED_INT: { GLuint *out = (GLuint *)ac->Elts; GLuint i; @@ -898,5 +918,5 @@ _ac_import_elements( GLcontext *ctx, break; } - return 0; + return NULL; } diff --git a/src/kits/opengl/mesa/drivers/common/driverfuncs.c b/src/kits/opengl/mesa/drivers/common/driverfuncs.c index a51f6505f3..1e44904b93 100644 --- a/src/kits/opengl/mesa/drivers/common/driverfuncs.c +++ b/src/kits/opengl/mesa/drivers/common/driverfuncs.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -27,15 +27,26 @@ #include "imports.h" #include "buffers.h" #include "context.h" +#include "framebuffer.h" +#include "occlude.h" #include "program.h" +#include "renderbuffer.h" #include "texcompress.h" #include "texformat.h" #include "teximage.h" #include "texobj.h" #include "texstore.h" +#if FEATURE_ARB_vertex_buffer_object #include "bufferobj.h" +#endif +#if FEATURE_EXT_framebuffer_object +#include "fbobject.h" +#include "texrender.h" +#endif +#include "arrayobj.h" #include "driverfuncs.h" +#include "tnl/tnl.h" #include "swrast/swrast.h" @@ -57,7 +68,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->GetString = NULL; /* REQUIRED! */ driver->UpdateState = NULL; /* REQUIRED! */ driver->GetBufferSize = NULL; /* REQUIRED! */ - driver->ResizeBuffers = _swrast_alloc_buffers; + driver->ResizeBuffers = _mesa_resize_framebuffer; driver->Error = NULL; driver->Finish = NULL; @@ -79,6 +90,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->TexSubImage1D = _mesa_store_texsubimage1d; driver->TexSubImage2D = _mesa_store_texsubimage2d; driver->TexSubImage3D = _mesa_store_texsubimage3d; + driver->GetTexImage = _mesa_get_teximage; driver->CopyTexImage1D = _swrast_copy_teximage1d; driver->CopyTexImage2D = _swrast_copy_teximage2d; driver->CopyTexSubImage1D = _swrast_copy_texsubimage1d; @@ -91,11 +103,14 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->CompressedTexSubImage1D = _mesa_store_compressed_texsubimage1d; driver->CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d; driver->CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d; + driver->GetCompressedTexImage = _mesa_get_compressed_teximage; driver->CompressedTextureSize = _mesa_compressed_texture_size; driver->BindTexture = NULL; driver->NewTextureObject = _mesa_new_texture_object; driver->DeleteTexture = _mesa_delete_texture_object; driver->NewTextureImage = _mesa_new_texture_image; + driver->FreeTexImageData = _mesa_free_texture_image_data; + driver->TextureMemCpy = _mesa_memcpy; driver->IsTextureResident = NULL; driver->PrioritizeTexture = NULL; driver->ActiveTexture = NULL; @@ -111,6 +126,9 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->BindProgram = NULL; driver->NewProgram = _mesa_new_program; driver->DeleteProgram = _mesa_delete_program; +#if FEATURE_MESA_program_debug + driver->GetFragmentProgramRegister = _swrast_get_program_register; +#endif /* FEATURE_MESA_program_debug */ /* simple state commands */ driver->AlphaFunc = NULL; @@ -125,7 +143,8 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->ColorMask = NULL; driver->ColorMaterial = NULL; driver->CullFace = NULL; - driver->DrawBuffer = _swrast_DrawBuffer; + driver->DrawBuffer = NULL; + driver->DrawBuffers = NULL; driver->FrontFace = NULL; driver->DepthFunc = NULL; driver->DepthMask = NULL; @@ -148,10 +167,9 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->RenderMode = NULL; driver->Scissor = NULL; driver->ShadeModel = NULL; - driver->StencilFunc = NULL; - driver->StencilMask = NULL; - driver->StencilOp = NULL; - driver->ActiveStencilFace = NULL; + driver->StencilFuncSeparate = NULL; + driver->StencilOpSeparate = NULL; + driver->StencilMaskSeparate = NULL; driver->TexGen = NULL; driver->TexEnv = NULL; driver->TexParameter = NULL; @@ -186,9 +204,31 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->BufferSubData = _mesa_buffer_subdata; driver->GetBufferSubData = _mesa_buffer_get_subdata; driver->MapBuffer = _mesa_buffer_map; - driver->UnmapBuffer = NULL; + driver->UnmapBuffer = _mesa_buffer_unmap; #endif +#if FEATURE_EXT_framebuffer_object + driver->NewFramebuffer = _mesa_new_framebuffer; + driver->NewRenderbuffer = _mesa_new_soft_renderbuffer; + driver->RenderTexture = _mesa_render_texture; + driver->FinishRenderTexture = _mesa_finish_render_texture; + driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer; +#endif + +#if FEATURE_EXT_framebuffer_blit + driver->BlitFramebuffer = _swrast_BlitFramebuffer; +#endif + + /* query objects */ + driver->NewQueryObject = _mesa_new_query_object; + driver->BeginQuery = NULL; + driver->EndQuery = NULL; + + /* APPLE_vertex_array_object */ + driver->NewArrayObject = _mesa_new_array_object; + driver->DeleteArrayObject = _mesa_delete_array_object; + driver->BindArrayObject = NULL; + /* T&L stuff */ driver->NeedValidate = GL_FALSE; driver->ValidateTnlModule = NULL; @@ -197,11 +237,11 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->NeedFlush = 0; driver->SaveNeedFlush = 0; + driver->ProgramStringNotify = _tnl_program_string; driver->FlushVertices = NULL; driver->SaveFlushVertices = NULL; driver->NotifySaveBegin = NULL; driver->LightingSpaceChange = NULL; - driver->MakeCurrent = NULL; /* display list */ driver->NewList = NULL; diff --git a/src/kits/opengl/mesa/glapi/dispatch.h b/src/kits/opengl/mesa/glapi/dispatch.h new file mode 100644 index 0000000000..a128164323 --- /dev/null +++ b/src/kits/opengl/mesa/glapi/dispatch.h @@ -0,0 +1,3843 @@ +/* DO NOT EDIT - This file generated automatically by gl_table.py (from Mesa) script */ + +/* + * (C) Copyright IBM Corporation 2005 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * IBM, + * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#if !defined( _DISPATCH_H_ ) +# define _DISPATCH_H_ + +/** + * \file dispatch.h + * Macros for handling GL dispatch tables. + * + * For each known GL function, there are 3 macros in this file. The first + * macro is named CALL_FuncName and is used to call that GL function using + * the specified dispatch table. The other 2 macros, called GET_FuncName + * can SET_FuncName, are used to get and set the dispatch pointer for the + * named function in the specified dispatch table. + */ + +#define CALL_by_offset(disp, cast, offset, parameters) \ + (*(cast (GET_by_offset(disp, offset)))) parameters +#define GET_by_offset(disp, offset) \ + (offset >= 0) ? (((_glapi_proc *)(disp))[offset]) : NULL +#define SET_by_offset(disp, offset, fn) \ + do { \ + if ( (offset) < 0 ) { \ + /* fprintf( stderr, "[%s:%u] SET_by_offset(%p, %d, %s)!\n", */ \ + /* __func__, __LINE__, disp, offset, # fn); */ \ + /* abort(); */ \ + } \ + else { \ + ( (_glapi_proc *) (disp) )[offset] = (_glapi_proc) fn; \ + } \ + } while(0) + +#define CALL_NewList(disp, parameters) (*((disp)->NewList)) parameters +#define GET_NewList(disp) ((disp)->NewList) +#define SET_NewList(disp, fn) ((disp)->NewList = fn) +#define CALL_EndList(disp, parameters) (*((disp)->EndList)) parameters +#define GET_EndList(disp) ((disp)->EndList) +#define SET_EndList(disp, fn) ((disp)->EndList = fn) +#define CALL_CallList(disp, parameters) (*((disp)->CallList)) parameters +#define GET_CallList(disp) ((disp)->CallList) +#define SET_CallList(disp, fn) ((disp)->CallList = fn) +#define CALL_CallLists(disp, parameters) (*((disp)->CallLists)) parameters +#define GET_CallLists(disp) ((disp)->CallLists) +#define SET_CallLists(disp, fn) ((disp)->CallLists = fn) +#define CALL_DeleteLists(disp, parameters) (*((disp)->DeleteLists)) parameters +#define GET_DeleteLists(disp) ((disp)->DeleteLists) +#define SET_DeleteLists(disp, fn) ((disp)->DeleteLists = fn) +#define CALL_GenLists(disp, parameters) (*((disp)->GenLists)) parameters +#define GET_GenLists(disp) ((disp)->GenLists) +#define SET_GenLists(disp, fn) ((disp)->GenLists = fn) +#define CALL_ListBase(disp, parameters) (*((disp)->ListBase)) parameters +#define GET_ListBase(disp) ((disp)->ListBase) +#define SET_ListBase(disp, fn) ((disp)->ListBase = fn) +#define CALL_Begin(disp, parameters) (*((disp)->Begin)) parameters +#define GET_Begin(disp) ((disp)->Begin) +#define SET_Begin(disp, fn) ((disp)->Begin = fn) +#define CALL_Bitmap(disp, parameters) (*((disp)->Bitmap)) parameters +#define GET_Bitmap(disp) ((disp)->Bitmap) +#define SET_Bitmap(disp, fn) ((disp)->Bitmap = fn) +#define CALL_Color3b(disp, parameters) (*((disp)->Color3b)) parameters +#define GET_Color3b(disp) ((disp)->Color3b) +#define SET_Color3b(disp, fn) ((disp)->Color3b = fn) +#define CALL_Color3bv(disp, parameters) (*((disp)->Color3bv)) parameters +#define GET_Color3bv(disp) ((disp)->Color3bv) +#define SET_Color3bv(disp, fn) ((disp)->Color3bv = fn) +#define CALL_Color3d(disp, parameters) (*((disp)->Color3d)) parameters +#define GET_Color3d(disp) ((disp)->Color3d) +#define SET_Color3d(disp, fn) ((disp)->Color3d = fn) +#define CALL_Color3dv(disp, parameters) (*((disp)->Color3dv)) parameters +#define GET_Color3dv(disp) ((disp)->Color3dv) +#define SET_Color3dv(disp, fn) ((disp)->Color3dv = fn) +#define CALL_Color3f(disp, parameters) (*((disp)->Color3f)) parameters +#define GET_Color3f(disp) ((disp)->Color3f) +#define SET_Color3f(disp, fn) ((disp)->Color3f = fn) +#define CALL_Color3fv(disp, parameters) (*((disp)->Color3fv)) parameters +#define GET_Color3fv(disp) ((disp)->Color3fv) +#define SET_Color3fv(disp, fn) ((disp)->Color3fv = fn) +#define CALL_Color3i(disp, parameters) (*((disp)->Color3i)) parameters +#define GET_Color3i(disp) ((disp)->Color3i) +#define SET_Color3i(disp, fn) ((disp)->Color3i = fn) +#define CALL_Color3iv(disp, parameters) (*((disp)->Color3iv)) parameters +#define GET_Color3iv(disp) ((disp)->Color3iv) +#define SET_Color3iv(disp, fn) ((disp)->Color3iv = fn) +#define CALL_Color3s(disp, parameters) (*((disp)->Color3s)) parameters +#define GET_Color3s(disp) ((disp)->Color3s) +#define SET_Color3s(disp, fn) ((disp)->Color3s = fn) +#define CALL_Color3sv(disp, parameters) (*((disp)->Color3sv)) parameters +#define GET_Color3sv(disp) ((disp)->Color3sv) +#define SET_Color3sv(disp, fn) ((disp)->Color3sv = fn) +#define CALL_Color3ub(disp, parameters) (*((disp)->Color3ub)) parameters +#define GET_Color3ub(disp) ((disp)->Color3ub) +#define SET_Color3ub(disp, fn) ((disp)->Color3ub = fn) +#define CALL_Color3ubv(disp, parameters) (*((disp)->Color3ubv)) parameters +#define GET_Color3ubv(disp) ((disp)->Color3ubv) +#define SET_Color3ubv(disp, fn) ((disp)->Color3ubv = fn) +#define CALL_Color3ui(disp, parameters) (*((disp)->Color3ui)) parameters +#define GET_Color3ui(disp) ((disp)->Color3ui) +#define SET_Color3ui(disp, fn) ((disp)->Color3ui = fn) +#define CALL_Color3uiv(disp, parameters) (*((disp)->Color3uiv)) parameters +#define GET_Color3uiv(disp) ((disp)->Color3uiv) +#define SET_Color3uiv(disp, fn) ((disp)->Color3uiv = fn) +#define CALL_Color3us(disp, parameters) (*((disp)->Color3us)) parameters +#define GET_Color3us(disp) ((disp)->Color3us) +#define SET_Color3us(disp, fn) ((disp)->Color3us = fn) +#define CALL_Color3usv(disp, parameters) (*((disp)->Color3usv)) parameters +#define GET_Color3usv(disp) ((disp)->Color3usv) +#define SET_Color3usv(disp, fn) ((disp)->Color3usv = fn) +#define CALL_Color4b(disp, parameters) (*((disp)->Color4b)) parameters +#define GET_Color4b(disp) ((disp)->Color4b) +#define SET_Color4b(disp, fn) ((disp)->Color4b = fn) +#define CALL_Color4bv(disp, parameters) (*((disp)->Color4bv)) parameters +#define GET_Color4bv(disp) ((disp)->Color4bv) +#define SET_Color4bv(disp, fn) ((disp)->Color4bv = fn) +#define CALL_Color4d(disp, parameters) (*((disp)->Color4d)) parameters +#define GET_Color4d(disp) ((disp)->Color4d) +#define SET_Color4d(disp, fn) ((disp)->Color4d = fn) +#define CALL_Color4dv(disp, parameters) (*((disp)->Color4dv)) parameters +#define GET_Color4dv(disp) ((disp)->Color4dv) +#define SET_Color4dv(disp, fn) ((disp)->Color4dv = fn) +#define CALL_Color4f(disp, parameters) (*((disp)->Color4f)) parameters +#define GET_Color4f(disp) ((disp)->Color4f) +#define SET_Color4f(disp, fn) ((disp)->Color4f = fn) +#define CALL_Color4fv(disp, parameters) (*((disp)->Color4fv)) parameters +#define GET_Color4fv(disp) ((disp)->Color4fv) +#define SET_Color4fv(disp, fn) ((disp)->Color4fv = fn) +#define CALL_Color4i(disp, parameters) (*((disp)->Color4i)) parameters +#define GET_Color4i(disp) ((disp)->Color4i) +#define SET_Color4i(disp, fn) ((disp)->Color4i = fn) +#define CALL_Color4iv(disp, parameters) (*((disp)->Color4iv)) parameters +#define GET_Color4iv(disp) ((disp)->Color4iv) +#define SET_Color4iv(disp, fn) ((disp)->Color4iv = fn) +#define CALL_Color4s(disp, parameters) (*((disp)->Color4s)) parameters +#define GET_Color4s(disp) ((disp)->Color4s) +#define SET_Color4s(disp, fn) ((disp)->Color4s = fn) +#define CALL_Color4sv(disp, parameters) (*((disp)->Color4sv)) parameters +#define GET_Color4sv(disp) ((disp)->Color4sv) +#define SET_Color4sv(disp, fn) ((disp)->Color4sv = fn) +#define CALL_Color4ub(disp, parameters) (*((disp)->Color4ub)) parameters +#define GET_Color4ub(disp) ((disp)->Color4ub) +#define SET_Color4ub(disp, fn) ((disp)->Color4ub = fn) +#define CALL_Color4ubv(disp, parameters) (*((disp)->Color4ubv)) parameters +#define GET_Color4ubv(disp) ((disp)->Color4ubv) +#define SET_Color4ubv(disp, fn) ((disp)->Color4ubv = fn) +#define CALL_Color4ui(disp, parameters) (*((disp)->Color4ui)) parameters +#define GET_Color4ui(disp) ((disp)->Color4ui) +#define SET_Color4ui(disp, fn) ((disp)->Color4ui = fn) +#define CALL_Color4uiv(disp, parameters) (*((disp)->Color4uiv)) parameters +#define GET_Color4uiv(disp) ((disp)->Color4uiv) +#define SET_Color4uiv(disp, fn) ((disp)->Color4uiv = fn) +#define CALL_Color4us(disp, parameters) (*((disp)->Color4us)) parameters +#define GET_Color4us(disp) ((disp)->Color4us) +#define SET_Color4us(disp, fn) ((disp)->Color4us = fn) +#define CALL_Color4usv(disp, parameters) (*((disp)->Color4usv)) parameters +#define GET_Color4usv(disp) ((disp)->Color4usv) +#define SET_Color4usv(disp, fn) ((disp)->Color4usv = fn) +#define CALL_EdgeFlag(disp, parameters) (*((disp)->EdgeFlag)) parameters +#define GET_EdgeFlag(disp) ((disp)->EdgeFlag) +#define SET_EdgeFlag(disp, fn) ((disp)->EdgeFlag = fn) +#define CALL_EdgeFlagv(disp, parameters) (*((disp)->EdgeFlagv)) parameters +#define GET_EdgeFlagv(disp) ((disp)->EdgeFlagv) +#define SET_EdgeFlagv(disp, fn) ((disp)->EdgeFlagv = fn) +#define CALL_End(disp, parameters) (*((disp)->End)) parameters +#define GET_End(disp) ((disp)->End) +#define SET_End(disp, fn) ((disp)->End = fn) +#define CALL_Indexd(disp, parameters) (*((disp)->Indexd)) parameters +#define GET_Indexd(disp) ((disp)->Indexd) +#define SET_Indexd(disp, fn) ((disp)->Indexd = fn) +#define CALL_Indexdv(disp, parameters) (*((disp)->Indexdv)) parameters +#define GET_Indexdv(disp) ((disp)->Indexdv) +#define SET_Indexdv(disp, fn) ((disp)->Indexdv = fn) +#define CALL_Indexf(disp, parameters) (*((disp)->Indexf)) parameters +#define GET_Indexf(disp) ((disp)->Indexf) +#define SET_Indexf(disp, fn) ((disp)->Indexf = fn) +#define CALL_Indexfv(disp, parameters) (*((disp)->Indexfv)) parameters +#define GET_Indexfv(disp) ((disp)->Indexfv) +#define SET_Indexfv(disp, fn) ((disp)->Indexfv = fn) +#define CALL_Indexi(disp, parameters) (*((disp)->Indexi)) parameters +#define GET_Indexi(disp) ((disp)->Indexi) +#define SET_Indexi(disp, fn) ((disp)->Indexi = fn) +#define CALL_Indexiv(disp, parameters) (*((disp)->Indexiv)) parameters +#define GET_Indexiv(disp) ((disp)->Indexiv) +#define SET_Indexiv(disp, fn) ((disp)->Indexiv = fn) +#define CALL_Indexs(disp, parameters) (*((disp)->Indexs)) parameters +#define GET_Indexs(disp) ((disp)->Indexs) +#define SET_Indexs(disp, fn) ((disp)->Indexs = fn) +#define CALL_Indexsv(disp, parameters) (*((disp)->Indexsv)) parameters +#define GET_Indexsv(disp) ((disp)->Indexsv) +#define SET_Indexsv(disp, fn) ((disp)->Indexsv = fn) +#define CALL_Normal3b(disp, parameters) (*((disp)->Normal3b)) parameters +#define GET_Normal3b(disp) ((disp)->Normal3b) +#define SET_Normal3b(disp, fn) ((disp)->Normal3b = fn) +#define CALL_Normal3bv(disp, parameters) (*((disp)->Normal3bv)) parameters +#define GET_Normal3bv(disp) ((disp)->Normal3bv) +#define SET_Normal3bv(disp, fn) ((disp)->Normal3bv = fn) +#define CALL_Normal3d(disp, parameters) (*((disp)->Normal3d)) parameters +#define GET_Normal3d(disp) ((disp)->Normal3d) +#define SET_Normal3d(disp, fn) ((disp)->Normal3d = fn) +#define CALL_Normal3dv(disp, parameters) (*((disp)->Normal3dv)) parameters +#define GET_Normal3dv(disp) ((disp)->Normal3dv) +#define SET_Normal3dv(disp, fn) ((disp)->Normal3dv = fn) +#define CALL_Normal3f(disp, parameters) (*((disp)->Normal3f)) parameters +#define GET_Normal3f(disp) ((disp)->Normal3f) +#define SET_Normal3f(disp, fn) ((disp)->Normal3f = fn) +#define CALL_Normal3fv(disp, parameters) (*((disp)->Normal3fv)) parameters +#define GET_Normal3fv(disp) ((disp)->Normal3fv) +#define SET_Normal3fv(disp, fn) ((disp)->Normal3fv = fn) +#define CALL_Normal3i(disp, parameters) (*((disp)->Normal3i)) parameters +#define GET_Normal3i(disp) ((disp)->Normal3i) +#define SET_Normal3i(disp, fn) ((disp)->Normal3i = fn) +#define CALL_Normal3iv(disp, parameters) (*((disp)->Normal3iv)) parameters +#define GET_Normal3iv(disp) ((disp)->Normal3iv) +#define SET_Normal3iv(disp, fn) ((disp)->Normal3iv = fn) +#define CALL_Normal3s(disp, parameters) (*((disp)->Normal3s)) parameters +#define GET_Normal3s(disp) ((disp)->Normal3s) +#define SET_Normal3s(disp, fn) ((disp)->Normal3s = fn) +#define CALL_Normal3sv(disp, parameters) (*((disp)->Normal3sv)) parameters +#define GET_Normal3sv(disp) ((disp)->Normal3sv) +#define SET_Normal3sv(disp, fn) ((disp)->Normal3sv = fn) +#define CALL_RasterPos2d(disp, parameters) (*((disp)->RasterPos2d)) parameters +#define GET_RasterPos2d(disp) ((disp)->RasterPos2d) +#define SET_RasterPos2d(disp, fn) ((disp)->RasterPos2d = fn) +#define CALL_RasterPos2dv(disp, parameters) (*((disp)->RasterPos2dv)) parameters +#define GET_RasterPos2dv(disp) ((disp)->RasterPos2dv) +#define SET_RasterPos2dv(disp, fn) ((disp)->RasterPos2dv = fn) +#define CALL_RasterPos2f(disp, parameters) (*((disp)->RasterPos2f)) parameters +#define GET_RasterPos2f(disp) ((disp)->RasterPos2f) +#define SET_RasterPos2f(disp, fn) ((disp)->RasterPos2f = fn) +#define CALL_RasterPos2fv(disp, parameters) (*((disp)->RasterPos2fv)) parameters +#define GET_RasterPos2fv(disp) ((disp)->RasterPos2fv) +#define SET_RasterPos2fv(disp, fn) ((disp)->RasterPos2fv = fn) +#define CALL_RasterPos2i(disp, parameters) (*((disp)->RasterPos2i)) parameters +#define GET_RasterPos2i(disp) ((disp)->RasterPos2i) +#define SET_RasterPos2i(disp, fn) ((disp)->RasterPos2i = fn) +#define CALL_RasterPos2iv(disp, parameters) (*((disp)->RasterPos2iv)) parameters +#define GET_RasterPos2iv(disp) ((disp)->RasterPos2iv) +#define SET_RasterPos2iv(disp, fn) ((disp)->RasterPos2iv = fn) +#define CALL_RasterPos2s(disp, parameters) (*((disp)->RasterPos2s)) parameters +#define GET_RasterPos2s(disp) ((disp)->RasterPos2s) +#define SET_RasterPos2s(disp, fn) ((disp)->RasterPos2s = fn) +#define CALL_RasterPos2sv(disp, parameters) (*((disp)->RasterPos2sv)) parameters +#define GET_RasterPos2sv(disp) ((disp)->RasterPos2sv) +#define SET_RasterPos2sv(disp, fn) ((disp)->RasterPos2sv = fn) +#define CALL_RasterPos3d(disp, parameters) (*((disp)->RasterPos3d)) parameters +#define GET_RasterPos3d(disp) ((disp)->RasterPos3d) +#define SET_RasterPos3d(disp, fn) ((disp)->RasterPos3d = fn) +#define CALL_RasterPos3dv(disp, parameters) (*((disp)->RasterPos3dv)) parameters +#define GET_RasterPos3dv(disp) ((disp)->RasterPos3dv) +#define SET_RasterPos3dv(disp, fn) ((disp)->RasterPos3dv = fn) +#define CALL_RasterPos3f(disp, parameters) (*((disp)->RasterPos3f)) parameters +#define GET_RasterPos3f(disp) ((disp)->RasterPos3f) +#define SET_RasterPos3f(disp, fn) ((disp)->RasterPos3f = fn) +#define CALL_RasterPos3fv(disp, parameters) (*((disp)->RasterPos3fv)) parameters +#define GET_RasterPos3fv(disp) ((disp)->RasterPos3fv) +#define SET_RasterPos3fv(disp, fn) ((disp)->RasterPos3fv = fn) +#define CALL_RasterPos3i(disp, parameters) (*((disp)->RasterPos3i)) parameters +#define GET_RasterPos3i(disp) ((disp)->RasterPos3i) +#define SET_RasterPos3i(disp, fn) ((disp)->RasterPos3i = fn) +#define CALL_RasterPos3iv(disp, parameters) (*((disp)->RasterPos3iv)) parameters +#define GET_RasterPos3iv(disp) ((disp)->RasterPos3iv) +#define SET_RasterPos3iv(disp, fn) ((disp)->RasterPos3iv = fn) +#define CALL_RasterPos3s(disp, parameters) (*((disp)->RasterPos3s)) parameters +#define GET_RasterPos3s(disp) ((disp)->RasterPos3s) +#define SET_RasterPos3s(disp, fn) ((disp)->RasterPos3s = fn) +#define CALL_RasterPos3sv(disp, parameters) (*((disp)->RasterPos3sv)) parameters +#define GET_RasterPos3sv(disp) ((disp)->RasterPos3sv) +#define SET_RasterPos3sv(disp, fn) ((disp)->RasterPos3sv = fn) +#define CALL_RasterPos4d(disp, parameters) (*((disp)->RasterPos4d)) parameters +#define GET_RasterPos4d(disp) ((disp)->RasterPos4d) +#define SET_RasterPos4d(disp, fn) ((disp)->RasterPos4d = fn) +#define CALL_RasterPos4dv(disp, parameters) (*((disp)->RasterPos4dv)) parameters +#define GET_RasterPos4dv(disp) ((disp)->RasterPos4dv) +#define SET_RasterPos4dv(disp, fn) ((disp)->RasterPos4dv = fn) +#define CALL_RasterPos4f(disp, parameters) (*((disp)->RasterPos4f)) parameters +#define GET_RasterPos4f(disp) ((disp)->RasterPos4f) +#define SET_RasterPos4f(disp, fn) ((disp)->RasterPos4f = fn) +#define CALL_RasterPos4fv(disp, parameters) (*((disp)->RasterPos4fv)) parameters +#define GET_RasterPos4fv(disp) ((disp)->RasterPos4fv) +#define SET_RasterPos4fv(disp, fn) ((disp)->RasterPos4fv = fn) +#define CALL_RasterPos4i(disp, parameters) (*((disp)->RasterPos4i)) parameters +#define GET_RasterPos4i(disp) ((disp)->RasterPos4i) +#define SET_RasterPos4i(disp, fn) ((disp)->RasterPos4i = fn) +#define CALL_RasterPos4iv(disp, parameters) (*((disp)->RasterPos4iv)) parameters +#define GET_RasterPos4iv(disp) ((disp)->RasterPos4iv) +#define SET_RasterPos4iv(disp, fn) ((disp)->RasterPos4iv = fn) +#define CALL_RasterPos4s(disp, parameters) (*((disp)->RasterPos4s)) parameters +#define GET_RasterPos4s(disp) ((disp)->RasterPos4s) +#define SET_RasterPos4s(disp, fn) ((disp)->RasterPos4s = fn) +#define CALL_RasterPos4sv(disp, parameters) (*((disp)->RasterPos4sv)) parameters +#define GET_RasterPos4sv(disp) ((disp)->RasterPos4sv) +#define SET_RasterPos4sv(disp, fn) ((disp)->RasterPos4sv = fn) +#define CALL_Rectd(disp, parameters) (*((disp)->Rectd)) parameters +#define GET_Rectd(disp) ((disp)->Rectd) +#define SET_Rectd(disp, fn) ((disp)->Rectd = fn) +#define CALL_Rectdv(disp, parameters) (*((disp)->Rectdv)) parameters +#define GET_Rectdv(disp) ((disp)->Rectdv) +#define SET_Rectdv(disp, fn) ((disp)->Rectdv = fn) +#define CALL_Rectf(disp, parameters) (*((disp)->Rectf)) parameters +#define GET_Rectf(disp) ((disp)->Rectf) +#define SET_Rectf(disp, fn) ((disp)->Rectf = fn) +#define CALL_Rectfv(disp, parameters) (*((disp)->Rectfv)) parameters +#define GET_Rectfv(disp) ((disp)->Rectfv) +#define SET_Rectfv(disp, fn) ((disp)->Rectfv = fn) +#define CALL_Recti(disp, parameters) (*((disp)->Recti)) parameters +#define GET_Recti(disp) ((disp)->Recti) +#define SET_Recti(disp, fn) ((disp)->Recti = fn) +#define CALL_Rectiv(disp, parameters) (*((disp)->Rectiv)) parameters +#define GET_Rectiv(disp) ((disp)->Rectiv) +#define SET_Rectiv(disp, fn) ((disp)->Rectiv = fn) +#define CALL_Rects(disp, parameters) (*((disp)->Rects)) parameters +#define GET_Rects(disp) ((disp)->Rects) +#define SET_Rects(disp, fn) ((disp)->Rects = fn) +#define CALL_Rectsv(disp, parameters) (*((disp)->Rectsv)) parameters +#define GET_Rectsv(disp) ((disp)->Rectsv) +#define SET_Rectsv(disp, fn) ((disp)->Rectsv = fn) +#define CALL_TexCoord1d(disp, parameters) (*((disp)->TexCoord1d)) parameters +#define GET_TexCoord1d(disp) ((disp)->TexCoord1d) +#define SET_TexCoord1d(disp, fn) ((disp)->TexCoord1d = fn) +#define CALL_TexCoord1dv(disp, parameters) (*((disp)->TexCoord1dv)) parameters +#define GET_TexCoord1dv(disp) ((disp)->TexCoord1dv) +#define SET_TexCoord1dv(disp, fn) ((disp)->TexCoord1dv = fn) +#define CALL_TexCoord1f(disp, parameters) (*((disp)->TexCoord1f)) parameters +#define GET_TexCoord1f(disp) ((disp)->TexCoord1f) +#define SET_TexCoord1f(disp, fn) ((disp)->TexCoord1f = fn) +#define CALL_TexCoord1fv(disp, parameters) (*((disp)->TexCoord1fv)) parameters +#define GET_TexCoord1fv(disp) ((disp)->TexCoord1fv) +#define SET_TexCoord1fv(disp, fn) ((disp)->TexCoord1fv = fn) +#define CALL_TexCoord1i(disp, parameters) (*((disp)->TexCoord1i)) parameters +#define GET_TexCoord1i(disp) ((disp)->TexCoord1i) +#define SET_TexCoord1i(disp, fn) ((disp)->TexCoord1i = fn) +#define CALL_TexCoord1iv(disp, parameters) (*((disp)->TexCoord1iv)) parameters +#define GET_TexCoord1iv(disp) ((disp)->TexCoord1iv) +#define SET_TexCoord1iv(disp, fn) ((disp)->TexCoord1iv = fn) +#define CALL_TexCoord1s(disp, parameters) (*((disp)->TexCoord1s)) parameters +#define GET_TexCoord1s(disp) ((disp)->TexCoord1s) +#define SET_TexCoord1s(disp, fn) ((disp)->TexCoord1s = fn) +#define CALL_TexCoord1sv(disp, parameters) (*((disp)->TexCoord1sv)) parameters +#define GET_TexCoord1sv(disp) ((disp)->TexCoord1sv) +#define SET_TexCoord1sv(disp, fn) ((disp)->TexCoord1sv = fn) +#define CALL_TexCoord2d(disp, parameters) (*((disp)->TexCoord2d)) parameters +#define GET_TexCoord2d(disp) ((disp)->TexCoord2d) +#define SET_TexCoord2d(disp, fn) ((disp)->TexCoord2d = fn) +#define CALL_TexCoord2dv(disp, parameters) (*((disp)->TexCoord2dv)) parameters +#define GET_TexCoord2dv(disp) ((disp)->TexCoord2dv) +#define SET_TexCoord2dv(disp, fn) ((disp)->TexCoord2dv = fn) +#define CALL_TexCoord2f(disp, parameters) (*((disp)->TexCoord2f)) parameters +#define GET_TexCoord2f(disp) ((disp)->TexCoord2f) +#define SET_TexCoord2f(disp, fn) ((disp)->TexCoord2f = fn) +#define CALL_TexCoord2fv(disp, parameters) (*((disp)->TexCoord2fv)) parameters +#define GET_TexCoord2fv(disp) ((disp)->TexCoord2fv) +#define SET_TexCoord2fv(disp, fn) ((disp)->TexCoord2fv = fn) +#define CALL_TexCoord2i(disp, parameters) (*((disp)->TexCoord2i)) parameters +#define GET_TexCoord2i(disp) ((disp)->TexCoord2i) +#define SET_TexCoord2i(disp, fn) ((disp)->TexCoord2i = fn) +#define CALL_TexCoord2iv(disp, parameters) (*((disp)->TexCoord2iv)) parameters +#define GET_TexCoord2iv(disp) ((disp)->TexCoord2iv) +#define SET_TexCoord2iv(disp, fn) ((disp)->TexCoord2iv = fn) +#define CALL_TexCoord2s(disp, parameters) (*((disp)->TexCoord2s)) parameters +#define GET_TexCoord2s(disp) ((disp)->TexCoord2s) +#define SET_TexCoord2s(disp, fn) ((disp)->TexCoord2s = fn) +#define CALL_TexCoord2sv(disp, parameters) (*((disp)->TexCoord2sv)) parameters +#define GET_TexCoord2sv(disp) ((disp)->TexCoord2sv) +#define SET_TexCoord2sv(disp, fn) ((disp)->TexCoord2sv = fn) +#define CALL_TexCoord3d(disp, parameters) (*((disp)->TexCoord3d)) parameters +#define GET_TexCoord3d(disp) ((disp)->TexCoord3d) +#define SET_TexCoord3d(disp, fn) ((disp)->TexCoord3d = fn) +#define CALL_TexCoord3dv(disp, parameters) (*((disp)->TexCoord3dv)) parameters +#define GET_TexCoord3dv(disp) ((disp)->TexCoord3dv) +#define SET_TexCoord3dv(disp, fn) ((disp)->TexCoord3dv = fn) +#define CALL_TexCoord3f(disp, parameters) (*((disp)->TexCoord3f)) parameters +#define GET_TexCoord3f(disp) ((disp)->TexCoord3f) +#define SET_TexCoord3f(disp, fn) ((disp)->TexCoord3f = fn) +#define CALL_TexCoord3fv(disp, parameters) (*((disp)->TexCoord3fv)) parameters +#define GET_TexCoord3fv(disp) ((disp)->TexCoord3fv) +#define SET_TexCoord3fv(disp, fn) ((disp)->TexCoord3fv = fn) +#define CALL_TexCoord3i(disp, parameters) (*((disp)->TexCoord3i)) parameters +#define GET_TexCoord3i(disp) ((disp)->TexCoord3i) +#define SET_TexCoord3i(disp, fn) ((disp)->TexCoord3i = fn) +#define CALL_TexCoord3iv(disp, parameters) (*((disp)->TexCoord3iv)) parameters +#define GET_TexCoord3iv(disp) ((disp)->TexCoord3iv) +#define SET_TexCoord3iv(disp, fn) ((disp)->TexCoord3iv = fn) +#define CALL_TexCoord3s(disp, parameters) (*((disp)->TexCoord3s)) parameters +#define GET_TexCoord3s(disp) ((disp)->TexCoord3s) +#define SET_TexCoord3s(disp, fn) ((disp)->TexCoord3s = fn) +#define CALL_TexCoord3sv(disp, parameters) (*((disp)->TexCoord3sv)) parameters +#define GET_TexCoord3sv(disp) ((disp)->TexCoord3sv) +#define SET_TexCoord3sv(disp, fn) ((disp)->TexCoord3sv = fn) +#define CALL_TexCoord4d(disp, parameters) (*((disp)->TexCoord4d)) parameters +#define GET_TexCoord4d(disp) ((disp)->TexCoord4d) +#define SET_TexCoord4d(disp, fn) ((disp)->TexCoord4d = fn) +#define CALL_TexCoord4dv(disp, parameters) (*((disp)->TexCoord4dv)) parameters +#define GET_TexCoord4dv(disp) ((disp)->TexCoord4dv) +#define SET_TexCoord4dv(disp, fn) ((disp)->TexCoord4dv = fn) +#define CALL_TexCoord4f(disp, parameters) (*((disp)->TexCoord4f)) parameters +#define GET_TexCoord4f(disp) ((disp)->TexCoord4f) +#define SET_TexCoord4f(disp, fn) ((disp)->TexCoord4f = fn) +#define CALL_TexCoord4fv(disp, parameters) (*((disp)->TexCoord4fv)) parameters +#define GET_TexCoord4fv(disp) ((disp)->TexCoord4fv) +#define SET_TexCoord4fv(disp, fn) ((disp)->TexCoord4fv = fn) +#define CALL_TexCoord4i(disp, parameters) (*((disp)->TexCoord4i)) parameters +#define GET_TexCoord4i(disp) ((disp)->TexCoord4i) +#define SET_TexCoord4i(disp, fn) ((disp)->TexCoord4i = fn) +#define CALL_TexCoord4iv(disp, parameters) (*((disp)->TexCoord4iv)) parameters +#define GET_TexCoord4iv(disp) ((disp)->TexCoord4iv) +#define SET_TexCoord4iv(disp, fn) ((disp)->TexCoord4iv = fn) +#define CALL_TexCoord4s(disp, parameters) (*((disp)->TexCoord4s)) parameters +#define GET_TexCoord4s(disp) ((disp)->TexCoord4s) +#define SET_TexCoord4s(disp, fn) ((disp)->TexCoord4s = fn) +#define CALL_TexCoord4sv(disp, parameters) (*((disp)->TexCoord4sv)) parameters +#define GET_TexCoord4sv(disp) ((disp)->TexCoord4sv) +#define SET_TexCoord4sv(disp, fn) ((disp)->TexCoord4sv = fn) +#define CALL_Vertex2d(disp, parameters) (*((disp)->Vertex2d)) parameters +#define GET_Vertex2d(disp) ((disp)->Vertex2d) +#define SET_Vertex2d(disp, fn) ((disp)->Vertex2d = fn) +#define CALL_Vertex2dv(disp, parameters) (*((disp)->Vertex2dv)) parameters +#define GET_Vertex2dv(disp) ((disp)->Vertex2dv) +#define SET_Vertex2dv(disp, fn) ((disp)->Vertex2dv = fn) +#define CALL_Vertex2f(disp, parameters) (*((disp)->Vertex2f)) parameters +#define GET_Vertex2f(disp) ((disp)->Vertex2f) +#define SET_Vertex2f(disp, fn) ((disp)->Vertex2f = fn) +#define CALL_Vertex2fv(disp, parameters) (*((disp)->Vertex2fv)) parameters +#define GET_Vertex2fv(disp) ((disp)->Vertex2fv) +#define SET_Vertex2fv(disp, fn) ((disp)->Vertex2fv = fn) +#define CALL_Vertex2i(disp, parameters) (*((disp)->Vertex2i)) parameters +#define GET_Vertex2i(disp) ((disp)->Vertex2i) +#define SET_Vertex2i(disp, fn) ((disp)->Vertex2i = fn) +#define CALL_Vertex2iv(disp, parameters) (*((disp)->Vertex2iv)) parameters +#define GET_Vertex2iv(disp) ((disp)->Vertex2iv) +#define SET_Vertex2iv(disp, fn) ((disp)->Vertex2iv = fn) +#define CALL_Vertex2s(disp, parameters) (*((disp)->Vertex2s)) parameters +#define GET_Vertex2s(disp) ((disp)->Vertex2s) +#define SET_Vertex2s(disp, fn) ((disp)->Vertex2s = fn) +#define CALL_Vertex2sv(disp, parameters) (*((disp)->Vertex2sv)) parameters +#define GET_Vertex2sv(disp) ((disp)->Vertex2sv) +#define SET_Vertex2sv(disp, fn) ((disp)->Vertex2sv = fn) +#define CALL_Vertex3d(disp, parameters) (*((disp)->Vertex3d)) parameters +#define GET_Vertex3d(disp) ((disp)->Vertex3d) +#define SET_Vertex3d(disp, fn) ((disp)->Vertex3d = fn) +#define CALL_Vertex3dv(disp, parameters) (*((disp)->Vertex3dv)) parameters +#define GET_Vertex3dv(disp) ((disp)->Vertex3dv) +#define SET_Vertex3dv(disp, fn) ((disp)->Vertex3dv = fn) +#define CALL_Vertex3f(disp, parameters) (*((disp)->Vertex3f)) parameters +#define GET_Vertex3f(disp) ((disp)->Vertex3f) +#define SET_Vertex3f(disp, fn) ((disp)->Vertex3f = fn) +#define CALL_Vertex3fv(disp, parameters) (*((disp)->Vertex3fv)) parameters +#define GET_Vertex3fv(disp) ((disp)->Vertex3fv) +#define SET_Vertex3fv(disp, fn) ((disp)->Vertex3fv = fn) +#define CALL_Vertex3i(disp, parameters) (*((disp)->Vertex3i)) parameters +#define GET_Vertex3i(disp) ((disp)->Vertex3i) +#define SET_Vertex3i(disp, fn) ((disp)->Vertex3i = fn) +#define CALL_Vertex3iv(disp, parameters) (*((disp)->Vertex3iv)) parameters +#define GET_Vertex3iv(disp) ((disp)->Vertex3iv) +#define SET_Vertex3iv(disp, fn) ((disp)->Vertex3iv = fn) +#define CALL_Vertex3s(disp, parameters) (*((disp)->Vertex3s)) parameters +#define GET_Vertex3s(disp) ((disp)->Vertex3s) +#define SET_Vertex3s(disp, fn) ((disp)->Vertex3s = fn) +#define CALL_Vertex3sv(disp, parameters) (*((disp)->Vertex3sv)) parameters +#define GET_Vertex3sv(disp) ((disp)->Vertex3sv) +#define SET_Vertex3sv(disp, fn) ((disp)->Vertex3sv = fn) +#define CALL_Vertex4d(disp, parameters) (*((disp)->Vertex4d)) parameters +#define GET_Vertex4d(disp) ((disp)->Vertex4d) +#define SET_Vertex4d(disp, fn) ((disp)->Vertex4d = fn) +#define CALL_Vertex4dv(disp, parameters) (*((disp)->Vertex4dv)) parameters +#define GET_Vertex4dv(disp) ((disp)->Vertex4dv) +#define SET_Vertex4dv(disp, fn) ((disp)->Vertex4dv = fn) +#define CALL_Vertex4f(disp, parameters) (*((disp)->Vertex4f)) parameters +#define GET_Vertex4f(disp) ((disp)->Vertex4f) +#define SET_Vertex4f(disp, fn) ((disp)->Vertex4f = fn) +#define CALL_Vertex4fv(disp, parameters) (*((disp)->Vertex4fv)) parameters +#define GET_Vertex4fv(disp) ((disp)->Vertex4fv) +#define SET_Vertex4fv(disp, fn) ((disp)->Vertex4fv = fn) +#define CALL_Vertex4i(disp, parameters) (*((disp)->Vertex4i)) parameters +#define GET_Vertex4i(disp) ((disp)->Vertex4i) +#define SET_Vertex4i(disp, fn) ((disp)->Vertex4i = fn) +#define CALL_Vertex4iv(disp, parameters) (*((disp)->Vertex4iv)) parameters +#define GET_Vertex4iv(disp) ((disp)->Vertex4iv) +#define SET_Vertex4iv(disp, fn) ((disp)->Vertex4iv = fn) +#define CALL_Vertex4s(disp, parameters) (*((disp)->Vertex4s)) parameters +#define GET_Vertex4s(disp) ((disp)->Vertex4s) +#define SET_Vertex4s(disp, fn) ((disp)->Vertex4s = fn) +#define CALL_Vertex4sv(disp, parameters) (*((disp)->Vertex4sv)) parameters +#define GET_Vertex4sv(disp) ((disp)->Vertex4sv) +#define SET_Vertex4sv(disp, fn) ((disp)->Vertex4sv = fn) +#define CALL_ClipPlane(disp, parameters) (*((disp)->ClipPlane)) parameters +#define GET_ClipPlane(disp) ((disp)->ClipPlane) +#define SET_ClipPlane(disp, fn) ((disp)->ClipPlane = fn) +#define CALL_ColorMaterial(disp, parameters) (*((disp)->ColorMaterial)) parameters +#define GET_ColorMaterial(disp) ((disp)->ColorMaterial) +#define SET_ColorMaterial(disp, fn) ((disp)->ColorMaterial = fn) +#define CALL_CullFace(disp, parameters) (*((disp)->CullFace)) parameters +#define GET_CullFace(disp) ((disp)->CullFace) +#define SET_CullFace(disp, fn) ((disp)->CullFace = fn) +#define CALL_Fogf(disp, parameters) (*((disp)->Fogf)) parameters +#define GET_Fogf(disp) ((disp)->Fogf) +#define SET_Fogf(disp, fn) ((disp)->Fogf = fn) +#define CALL_Fogfv(disp, parameters) (*((disp)->Fogfv)) parameters +#define GET_Fogfv(disp) ((disp)->Fogfv) +#define SET_Fogfv(disp, fn) ((disp)->Fogfv = fn) +#define CALL_Fogi(disp, parameters) (*((disp)->Fogi)) parameters +#define GET_Fogi(disp) ((disp)->Fogi) +#define SET_Fogi(disp, fn) ((disp)->Fogi = fn) +#define CALL_Fogiv(disp, parameters) (*((disp)->Fogiv)) parameters +#define GET_Fogiv(disp) ((disp)->Fogiv) +#define SET_Fogiv(disp, fn) ((disp)->Fogiv = fn) +#define CALL_FrontFace(disp, parameters) (*((disp)->FrontFace)) parameters +#define GET_FrontFace(disp) ((disp)->FrontFace) +#define SET_FrontFace(disp, fn) ((disp)->FrontFace = fn) +#define CALL_Hint(disp, parameters) (*((disp)->Hint)) parameters +#define GET_Hint(disp) ((disp)->Hint) +#define SET_Hint(disp, fn) ((disp)->Hint = fn) +#define CALL_Lightf(disp, parameters) (*((disp)->Lightf)) parameters +#define GET_Lightf(disp) ((disp)->Lightf) +#define SET_Lightf(disp, fn) ((disp)->Lightf = fn) +#define CALL_Lightfv(disp, parameters) (*((disp)->Lightfv)) parameters +#define GET_Lightfv(disp) ((disp)->Lightfv) +#define SET_Lightfv(disp, fn) ((disp)->Lightfv = fn) +#define CALL_Lighti(disp, parameters) (*((disp)->Lighti)) parameters +#define GET_Lighti(disp) ((disp)->Lighti) +#define SET_Lighti(disp, fn) ((disp)->Lighti = fn) +#define CALL_Lightiv(disp, parameters) (*((disp)->Lightiv)) parameters +#define GET_Lightiv(disp) ((disp)->Lightiv) +#define SET_Lightiv(disp, fn) ((disp)->Lightiv = fn) +#define CALL_LightModelf(disp, parameters) (*((disp)->LightModelf)) parameters +#define GET_LightModelf(disp) ((disp)->LightModelf) +#define SET_LightModelf(disp, fn) ((disp)->LightModelf = fn) +#define CALL_LightModelfv(disp, parameters) (*((disp)->LightModelfv)) parameters +#define GET_LightModelfv(disp) ((disp)->LightModelfv) +#define SET_LightModelfv(disp, fn) ((disp)->LightModelfv = fn) +#define CALL_LightModeli(disp, parameters) (*((disp)->LightModeli)) parameters +#define GET_LightModeli(disp) ((disp)->LightModeli) +#define SET_LightModeli(disp, fn) ((disp)->LightModeli = fn) +#define CALL_LightModeliv(disp, parameters) (*((disp)->LightModeliv)) parameters +#define GET_LightModeliv(disp) ((disp)->LightModeliv) +#define SET_LightModeliv(disp, fn) ((disp)->LightModeliv = fn) +#define CALL_LineStipple(disp, parameters) (*((disp)->LineStipple)) parameters +#define GET_LineStipple(disp) ((disp)->LineStipple) +#define SET_LineStipple(disp, fn) ((disp)->LineStipple = fn) +#define CALL_LineWidth(disp, parameters) (*((disp)->LineWidth)) parameters +#define GET_LineWidth(disp) ((disp)->LineWidth) +#define SET_LineWidth(disp, fn) ((disp)->LineWidth = fn) +#define CALL_Materialf(disp, parameters) (*((disp)->Materialf)) parameters +#define GET_Materialf(disp) ((disp)->Materialf) +#define SET_Materialf(disp, fn) ((disp)->Materialf = fn) +#define CALL_Materialfv(disp, parameters) (*((disp)->Materialfv)) parameters +#define GET_Materialfv(disp) ((disp)->Materialfv) +#define SET_Materialfv(disp, fn) ((disp)->Materialfv = fn) +#define CALL_Materiali(disp, parameters) (*((disp)->Materiali)) parameters +#define GET_Materiali(disp) ((disp)->Materiali) +#define SET_Materiali(disp, fn) ((disp)->Materiali = fn) +#define CALL_Materialiv(disp, parameters) (*((disp)->Materialiv)) parameters +#define GET_Materialiv(disp) ((disp)->Materialiv) +#define SET_Materialiv(disp, fn) ((disp)->Materialiv = fn) +#define CALL_PointSize(disp, parameters) (*((disp)->PointSize)) parameters +#define GET_PointSize(disp) ((disp)->PointSize) +#define SET_PointSize(disp, fn) ((disp)->PointSize = fn) +#define CALL_PolygonMode(disp, parameters) (*((disp)->PolygonMode)) parameters +#define GET_PolygonMode(disp) ((disp)->PolygonMode) +#define SET_PolygonMode(disp, fn) ((disp)->PolygonMode = fn) +#define CALL_PolygonStipple(disp, parameters) (*((disp)->PolygonStipple)) parameters +#define GET_PolygonStipple(disp) ((disp)->PolygonStipple) +#define SET_PolygonStipple(disp, fn) ((disp)->PolygonStipple = fn) +#define CALL_Scissor(disp, parameters) (*((disp)->Scissor)) parameters +#define GET_Scissor(disp) ((disp)->Scissor) +#define SET_Scissor(disp, fn) ((disp)->Scissor = fn) +#define CALL_ShadeModel(disp, parameters) (*((disp)->ShadeModel)) parameters +#define GET_ShadeModel(disp) ((disp)->ShadeModel) +#define SET_ShadeModel(disp, fn) ((disp)->ShadeModel = fn) +#define CALL_TexParameterf(disp, parameters) (*((disp)->TexParameterf)) parameters +#define GET_TexParameterf(disp) ((disp)->TexParameterf) +#define SET_TexParameterf(disp, fn) ((disp)->TexParameterf = fn) +#define CALL_TexParameterfv(disp, parameters) (*((disp)->TexParameterfv)) parameters +#define GET_TexParameterfv(disp) ((disp)->TexParameterfv) +#define SET_TexParameterfv(disp, fn) ((disp)->TexParameterfv = fn) +#define CALL_TexParameteri(disp, parameters) (*((disp)->TexParameteri)) parameters +#define GET_TexParameteri(disp) ((disp)->TexParameteri) +#define SET_TexParameteri(disp, fn) ((disp)->TexParameteri = fn) +#define CALL_TexParameteriv(disp, parameters) (*((disp)->TexParameteriv)) parameters +#define GET_TexParameteriv(disp) ((disp)->TexParameteriv) +#define SET_TexParameteriv(disp, fn) ((disp)->TexParameteriv = fn) +#define CALL_TexImage1D(disp, parameters) (*((disp)->TexImage1D)) parameters +#define GET_TexImage1D(disp) ((disp)->TexImage1D) +#define SET_TexImage1D(disp, fn) ((disp)->TexImage1D = fn) +#define CALL_TexImage2D(disp, parameters) (*((disp)->TexImage2D)) parameters +#define GET_TexImage2D(disp) ((disp)->TexImage2D) +#define SET_TexImage2D(disp, fn) ((disp)->TexImage2D = fn) +#define CALL_TexEnvf(disp, parameters) (*((disp)->TexEnvf)) parameters +#define GET_TexEnvf(disp) ((disp)->TexEnvf) +#define SET_TexEnvf(disp, fn) ((disp)->TexEnvf = fn) +#define CALL_TexEnvfv(disp, parameters) (*((disp)->TexEnvfv)) parameters +#define GET_TexEnvfv(disp) ((disp)->TexEnvfv) +#define SET_TexEnvfv(disp, fn) ((disp)->TexEnvfv = fn) +#define CALL_TexEnvi(disp, parameters) (*((disp)->TexEnvi)) parameters +#define GET_TexEnvi(disp) ((disp)->TexEnvi) +#define SET_TexEnvi(disp, fn) ((disp)->TexEnvi = fn) +#define CALL_TexEnviv(disp, parameters) (*((disp)->TexEnviv)) parameters +#define GET_TexEnviv(disp) ((disp)->TexEnviv) +#define SET_TexEnviv(disp, fn) ((disp)->TexEnviv = fn) +#define CALL_TexGend(disp, parameters) (*((disp)->TexGend)) parameters +#define GET_TexGend(disp) ((disp)->TexGend) +#define SET_TexGend(disp, fn) ((disp)->TexGend = fn) +#define CALL_TexGendv(disp, parameters) (*((disp)->TexGendv)) parameters +#define GET_TexGendv(disp) ((disp)->TexGendv) +#define SET_TexGendv(disp, fn) ((disp)->TexGendv = fn) +#define CALL_TexGenf(disp, parameters) (*((disp)->TexGenf)) parameters +#define GET_TexGenf(disp) ((disp)->TexGenf) +#define SET_TexGenf(disp, fn) ((disp)->TexGenf = fn) +#define CALL_TexGenfv(disp, parameters) (*((disp)->TexGenfv)) parameters +#define GET_TexGenfv(disp) ((disp)->TexGenfv) +#define SET_TexGenfv(disp, fn) ((disp)->TexGenfv = fn) +#define CALL_TexGeni(disp, parameters) (*((disp)->TexGeni)) parameters +#define GET_TexGeni(disp) ((disp)->TexGeni) +#define SET_TexGeni(disp, fn) ((disp)->TexGeni = fn) +#define CALL_TexGeniv(disp, parameters) (*((disp)->TexGeniv)) parameters +#define GET_TexGeniv(disp) ((disp)->TexGeniv) +#define SET_TexGeniv(disp, fn) ((disp)->TexGeniv = fn) +#define CALL_FeedbackBuffer(disp, parameters) (*((disp)->FeedbackBuffer)) parameters +#define GET_FeedbackBuffer(disp) ((disp)->FeedbackBuffer) +#define SET_FeedbackBuffer(disp, fn) ((disp)->FeedbackBuffer = fn) +#define CALL_SelectBuffer(disp, parameters) (*((disp)->SelectBuffer)) parameters +#define GET_SelectBuffer(disp) ((disp)->SelectBuffer) +#define SET_SelectBuffer(disp, fn) ((disp)->SelectBuffer = fn) +#define CALL_RenderMode(disp, parameters) (*((disp)->RenderMode)) parameters +#define GET_RenderMode(disp) ((disp)->RenderMode) +#define SET_RenderMode(disp, fn) ((disp)->RenderMode = fn) +#define CALL_InitNames(disp, parameters) (*((disp)->InitNames)) parameters +#define GET_InitNames(disp) ((disp)->InitNames) +#define SET_InitNames(disp, fn) ((disp)->InitNames = fn) +#define CALL_LoadName(disp, parameters) (*((disp)->LoadName)) parameters +#define GET_LoadName(disp) ((disp)->LoadName) +#define SET_LoadName(disp, fn) ((disp)->LoadName = fn) +#define CALL_PassThrough(disp, parameters) (*((disp)->PassThrough)) parameters +#define GET_PassThrough(disp) ((disp)->PassThrough) +#define SET_PassThrough(disp, fn) ((disp)->PassThrough = fn) +#define CALL_PopName(disp, parameters) (*((disp)->PopName)) parameters +#define GET_PopName(disp) ((disp)->PopName) +#define SET_PopName(disp, fn) ((disp)->PopName = fn) +#define CALL_PushName(disp, parameters) (*((disp)->PushName)) parameters +#define GET_PushName(disp) ((disp)->PushName) +#define SET_PushName(disp, fn) ((disp)->PushName = fn) +#define CALL_DrawBuffer(disp, parameters) (*((disp)->DrawBuffer)) parameters +#define GET_DrawBuffer(disp) ((disp)->DrawBuffer) +#define SET_DrawBuffer(disp, fn) ((disp)->DrawBuffer = fn) +#define CALL_Clear(disp, parameters) (*((disp)->Clear)) parameters +#define GET_Clear(disp) ((disp)->Clear) +#define SET_Clear(disp, fn) ((disp)->Clear = fn) +#define CALL_ClearAccum(disp, parameters) (*((disp)->ClearAccum)) parameters +#define GET_ClearAccum(disp) ((disp)->ClearAccum) +#define SET_ClearAccum(disp, fn) ((disp)->ClearAccum = fn) +#define CALL_ClearIndex(disp, parameters) (*((disp)->ClearIndex)) parameters +#define GET_ClearIndex(disp) ((disp)->ClearIndex) +#define SET_ClearIndex(disp, fn) ((disp)->ClearIndex = fn) +#define CALL_ClearColor(disp, parameters) (*((disp)->ClearColor)) parameters +#define GET_ClearColor(disp) ((disp)->ClearColor) +#define SET_ClearColor(disp, fn) ((disp)->ClearColor = fn) +#define CALL_ClearStencil(disp, parameters) (*((disp)->ClearStencil)) parameters +#define GET_ClearStencil(disp) ((disp)->ClearStencil) +#define SET_ClearStencil(disp, fn) ((disp)->ClearStencil = fn) +#define CALL_ClearDepth(disp, parameters) (*((disp)->ClearDepth)) parameters +#define GET_ClearDepth(disp) ((disp)->ClearDepth) +#define SET_ClearDepth(disp, fn) ((disp)->ClearDepth = fn) +#define CALL_StencilMask(disp, parameters) (*((disp)->StencilMask)) parameters +#define GET_StencilMask(disp) ((disp)->StencilMask) +#define SET_StencilMask(disp, fn) ((disp)->StencilMask = fn) +#define CALL_ColorMask(disp, parameters) (*((disp)->ColorMask)) parameters +#define GET_ColorMask(disp) ((disp)->ColorMask) +#define SET_ColorMask(disp, fn) ((disp)->ColorMask = fn) +#define CALL_DepthMask(disp, parameters) (*((disp)->DepthMask)) parameters +#define GET_DepthMask(disp) ((disp)->DepthMask) +#define SET_DepthMask(disp, fn) ((disp)->DepthMask = fn) +#define CALL_IndexMask(disp, parameters) (*((disp)->IndexMask)) parameters +#define GET_IndexMask(disp) ((disp)->IndexMask) +#define SET_IndexMask(disp, fn) ((disp)->IndexMask = fn) +#define CALL_Accum(disp, parameters) (*((disp)->Accum)) parameters +#define GET_Accum(disp) ((disp)->Accum) +#define SET_Accum(disp, fn) ((disp)->Accum = fn) +#define CALL_Disable(disp, parameters) (*((disp)->Disable)) parameters +#define GET_Disable(disp) ((disp)->Disable) +#define SET_Disable(disp, fn) ((disp)->Disable = fn) +#define CALL_Enable(disp, parameters) (*((disp)->Enable)) parameters +#define GET_Enable(disp) ((disp)->Enable) +#define SET_Enable(disp, fn) ((disp)->Enable = fn) +#define CALL_Finish(disp, parameters) (*((disp)->Finish)) parameters +#define GET_Finish(disp) ((disp)->Finish) +#define SET_Finish(disp, fn) ((disp)->Finish = fn) +#define CALL_Flush(disp, parameters) (*((disp)->Flush)) parameters +#define GET_Flush(disp) ((disp)->Flush) +#define SET_Flush(disp, fn) ((disp)->Flush = fn) +#define CALL_PopAttrib(disp, parameters) (*((disp)->PopAttrib)) parameters +#define GET_PopAttrib(disp) ((disp)->PopAttrib) +#define SET_PopAttrib(disp, fn) ((disp)->PopAttrib = fn) +#define CALL_PushAttrib(disp, parameters) (*((disp)->PushAttrib)) parameters +#define GET_PushAttrib(disp) ((disp)->PushAttrib) +#define SET_PushAttrib(disp, fn) ((disp)->PushAttrib = fn) +#define CALL_Map1d(disp, parameters) (*((disp)->Map1d)) parameters +#define GET_Map1d(disp) ((disp)->Map1d) +#define SET_Map1d(disp, fn) ((disp)->Map1d = fn) +#define CALL_Map1f(disp, parameters) (*((disp)->Map1f)) parameters +#define GET_Map1f(disp) ((disp)->Map1f) +#define SET_Map1f(disp, fn) ((disp)->Map1f = fn) +#define CALL_Map2d(disp, parameters) (*((disp)->Map2d)) parameters +#define GET_Map2d(disp) ((disp)->Map2d) +#define SET_Map2d(disp, fn) ((disp)->Map2d = fn) +#define CALL_Map2f(disp, parameters) (*((disp)->Map2f)) parameters +#define GET_Map2f(disp) ((disp)->Map2f) +#define SET_Map2f(disp, fn) ((disp)->Map2f = fn) +#define CALL_MapGrid1d(disp, parameters) (*((disp)->MapGrid1d)) parameters +#define GET_MapGrid1d(disp) ((disp)->MapGrid1d) +#define SET_MapGrid1d(disp, fn) ((disp)->MapGrid1d = fn) +#define CALL_MapGrid1f(disp, parameters) (*((disp)->MapGrid1f)) parameters +#define GET_MapGrid1f(disp) ((disp)->MapGrid1f) +#define SET_MapGrid1f(disp, fn) ((disp)->MapGrid1f = fn) +#define CALL_MapGrid2d(disp, parameters) (*((disp)->MapGrid2d)) parameters +#define GET_MapGrid2d(disp) ((disp)->MapGrid2d) +#define SET_MapGrid2d(disp, fn) ((disp)->MapGrid2d = fn) +#define CALL_MapGrid2f(disp, parameters) (*((disp)->MapGrid2f)) parameters +#define GET_MapGrid2f(disp) ((disp)->MapGrid2f) +#define SET_MapGrid2f(disp, fn) ((disp)->MapGrid2f = fn) +#define CALL_EvalCoord1d(disp, parameters) (*((disp)->EvalCoord1d)) parameters +#define GET_EvalCoord1d(disp) ((disp)->EvalCoord1d) +#define SET_EvalCoord1d(disp, fn) ((disp)->EvalCoord1d = fn) +#define CALL_EvalCoord1dv(disp, parameters) (*((disp)->EvalCoord1dv)) parameters +#define GET_EvalCoord1dv(disp) ((disp)->EvalCoord1dv) +#define SET_EvalCoord1dv(disp, fn) ((disp)->EvalCoord1dv = fn) +#define CALL_EvalCoord1f(disp, parameters) (*((disp)->EvalCoord1f)) parameters +#define GET_EvalCoord1f(disp) ((disp)->EvalCoord1f) +#define SET_EvalCoord1f(disp, fn) ((disp)->EvalCoord1f = fn) +#define CALL_EvalCoord1fv(disp, parameters) (*((disp)->EvalCoord1fv)) parameters +#define GET_EvalCoord1fv(disp) ((disp)->EvalCoord1fv) +#define SET_EvalCoord1fv(disp, fn) ((disp)->EvalCoord1fv = fn) +#define CALL_EvalCoord2d(disp, parameters) (*((disp)->EvalCoord2d)) parameters +#define GET_EvalCoord2d(disp) ((disp)->EvalCoord2d) +#define SET_EvalCoord2d(disp, fn) ((disp)->EvalCoord2d = fn) +#define CALL_EvalCoord2dv(disp, parameters) (*((disp)->EvalCoord2dv)) parameters +#define GET_EvalCoord2dv(disp) ((disp)->EvalCoord2dv) +#define SET_EvalCoord2dv(disp, fn) ((disp)->EvalCoord2dv = fn) +#define CALL_EvalCoord2f(disp, parameters) (*((disp)->EvalCoord2f)) parameters +#define GET_EvalCoord2f(disp) ((disp)->EvalCoord2f) +#define SET_EvalCoord2f(disp, fn) ((disp)->EvalCoord2f = fn) +#define CALL_EvalCoord2fv(disp, parameters) (*((disp)->EvalCoord2fv)) parameters +#define GET_EvalCoord2fv(disp) ((disp)->EvalCoord2fv) +#define SET_EvalCoord2fv(disp, fn) ((disp)->EvalCoord2fv = fn) +#define CALL_EvalMesh1(disp, parameters) (*((disp)->EvalMesh1)) parameters +#define GET_EvalMesh1(disp) ((disp)->EvalMesh1) +#define SET_EvalMesh1(disp, fn) ((disp)->EvalMesh1 = fn) +#define CALL_EvalPoint1(disp, parameters) (*((disp)->EvalPoint1)) parameters +#define GET_EvalPoint1(disp) ((disp)->EvalPoint1) +#define SET_EvalPoint1(disp, fn) ((disp)->EvalPoint1 = fn) +#define CALL_EvalMesh2(disp, parameters) (*((disp)->EvalMesh2)) parameters +#define GET_EvalMesh2(disp) ((disp)->EvalMesh2) +#define SET_EvalMesh2(disp, fn) ((disp)->EvalMesh2 = fn) +#define CALL_EvalPoint2(disp, parameters) (*((disp)->EvalPoint2)) parameters +#define GET_EvalPoint2(disp) ((disp)->EvalPoint2) +#define SET_EvalPoint2(disp, fn) ((disp)->EvalPoint2 = fn) +#define CALL_AlphaFunc(disp, parameters) (*((disp)->AlphaFunc)) parameters +#define GET_AlphaFunc(disp) ((disp)->AlphaFunc) +#define SET_AlphaFunc(disp, fn) ((disp)->AlphaFunc = fn) +#define CALL_BlendFunc(disp, parameters) (*((disp)->BlendFunc)) parameters +#define GET_BlendFunc(disp) ((disp)->BlendFunc) +#define SET_BlendFunc(disp, fn) ((disp)->BlendFunc = fn) +#define CALL_LogicOp(disp, parameters) (*((disp)->LogicOp)) parameters +#define GET_LogicOp(disp) ((disp)->LogicOp) +#define SET_LogicOp(disp, fn) ((disp)->LogicOp = fn) +#define CALL_StencilFunc(disp, parameters) (*((disp)->StencilFunc)) parameters +#define GET_StencilFunc(disp) ((disp)->StencilFunc) +#define SET_StencilFunc(disp, fn) ((disp)->StencilFunc = fn) +#define CALL_StencilOp(disp, parameters) (*((disp)->StencilOp)) parameters +#define GET_StencilOp(disp) ((disp)->StencilOp) +#define SET_StencilOp(disp, fn) ((disp)->StencilOp = fn) +#define CALL_DepthFunc(disp, parameters) (*((disp)->DepthFunc)) parameters +#define GET_DepthFunc(disp) ((disp)->DepthFunc) +#define SET_DepthFunc(disp, fn) ((disp)->DepthFunc = fn) +#define CALL_PixelZoom(disp, parameters) (*((disp)->PixelZoom)) parameters +#define GET_PixelZoom(disp) ((disp)->PixelZoom) +#define SET_PixelZoom(disp, fn) ((disp)->PixelZoom = fn) +#define CALL_PixelTransferf(disp, parameters) (*((disp)->PixelTransferf)) parameters +#define GET_PixelTransferf(disp) ((disp)->PixelTransferf) +#define SET_PixelTransferf(disp, fn) ((disp)->PixelTransferf = fn) +#define CALL_PixelTransferi(disp, parameters) (*((disp)->PixelTransferi)) parameters +#define GET_PixelTransferi(disp) ((disp)->PixelTransferi) +#define SET_PixelTransferi(disp, fn) ((disp)->PixelTransferi = fn) +#define CALL_PixelStoref(disp, parameters) (*((disp)->PixelStoref)) parameters +#define GET_PixelStoref(disp) ((disp)->PixelStoref) +#define SET_PixelStoref(disp, fn) ((disp)->PixelStoref = fn) +#define CALL_PixelStorei(disp, parameters) (*((disp)->PixelStorei)) parameters +#define GET_PixelStorei(disp) ((disp)->PixelStorei) +#define SET_PixelStorei(disp, fn) ((disp)->PixelStorei = fn) +#define CALL_PixelMapfv(disp, parameters) (*((disp)->PixelMapfv)) parameters +#define GET_PixelMapfv(disp) ((disp)->PixelMapfv) +#define SET_PixelMapfv(disp, fn) ((disp)->PixelMapfv = fn) +#define CALL_PixelMapuiv(disp, parameters) (*((disp)->PixelMapuiv)) parameters +#define GET_PixelMapuiv(disp) ((disp)->PixelMapuiv) +#define SET_PixelMapuiv(disp, fn) ((disp)->PixelMapuiv = fn) +#define CALL_PixelMapusv(disp, parameters) (*((disp)->PixelMapusv)) parameters +#define GET_PixelMapusv(disp) ((disp)->PixelMapusv) +#define SET_PixelMapusv(disp, fn) ((disp)->PixelMapusv = fn) +#define CALL_ReadBuffer(disp, parameters) (*((disp)->ReadBuffer)) parameters +#define GET_ReadBuffer(disp) ((disp)->ReadBuffer) +#define SET_ReadBuffer(disp, fn) ((disp)->ReadBuffer = fn) +#define CALL_CopyPixels(disp, parameters) (*((disp)->CopyPixels)) parameters +#define GET_CopyPixels(disp) ((disp)->CopyPixels) +#define SET_CopyPixels(disp, fn) ((disp)->CopyPixels = fn) +#define CALL_ReadPixels(disp, parameters) (*((disp)->ReadPixels)) parameters +#define GET_ReadPixels(disp) ((disp)->ReadPixels) +#define SET_ReadPixels(disp, fn) ((disp)->ReadPixels = fn) +#define CALL_DrawPixels(disp, parameters) (*((disp)->DrawPixels)) parameters +#define GET_DrawPixels(disp) ((disp)->DrawPixels) +#define SET_DrawPixels(disp, fn) ((disp)->DrawPixels = fn) +#define CALL_GetBooleanv(disp, parameters) (*((disp)->GetBooleanv)) parameters +#define GET_GetBooleanv(disp) ((disp)->GetBooleanv) +#define SET_GetBooleanv(disp, fn) ((disp)->GetBooleanv = fn) +#define CALL_GetClipPlane(disp, parameters) (*((disp)->GetClipPlane)) parameters +#define GET_GetClipPlane(disp) ((disp)->GetClipPlane) +#define SET_GetClipPlane(disp, fn) ((disp)->GetClipPlane = fn) +#define CALL_GetDoublev(disp, parameters) (*((disp)->GetDoublev)) parameters +#define GET_GetDoublev(disp) ((disp)->GetDoublev) +#define SET_GetDoublev(disp, fn) ((disp)->GetDoublev = fn) +#define CALL_GetError(disp, parameters) (*((disp)->GetError)) parameters +#define GET_GetError(disp) ((disp)->GetError) +#define SET_GetError(disp, fn) ((disp)->GetError = fn) +#define CALL_GetFloatv(disp, parameters) (*((disp)->GetFloatv)) parameters +#define GET_GetFloatv(disp) ((disp)->GetFloatv) +#define SET_GetFloatv(disp, fn) ((disp)->GetFloatv = fn) +#define CALL_GetIntegerv(disp, parameters) (*((disp)->GetIntegerv)) parameters +#define GET_GetIntegerv(disp) ((disp)->GetIntegerv) +#define SET_GetIntegerv(disp, fn) ((disp)->GetIntegerv = fn) +#define CALL_GetLightfv(disp, parameters) (*((disp)->GetLightfv)) parameters +#define GET_GetLightfv(disp) ((disp)->GetLightfv) +#define SET_GetLightfv(disp, fn) ((disp)->GetLightfv = fn) +#define CALL_GetLightiv(disp, parameters) (*((disp)->GetLightiv)) parameters +#define GET_GetLightiv(disp) ((disp)->GetLightiv) +#define SET_GetLightiv(disp, fn) ((disp)->GetLightiv = fn) +#define CALL_GetMapdv(disp, parameters) (*((disp)->GetMapdv)) parameters +#define GET_GetMapdv(disp) ((disp)->GetMapdv) +#define SET_GetMapdv(disp, fn) ((disp)->GetMapdv = fn) +#define CALL_GetMapfv(disp, parameters) (*((disp)->GetMapfv)) parameters +#define GET_GetMapfv(disp) ((disp)->GetMapfv) +#define SET_GetMapfv(disp, fn) ((disp)->GetMapfv = fn) +#define CALL_GetMapiv(disp, parameters) (*((disp)->GetMapiv)) parameters +#define GET_GetMapiv(disp) ((disp)->GetMapiv) +#define SET_GetMapiv(disp, fn) ((disp)->GetMapiv = fn) +#define CALL_GetMaterialfv(disp, parameters) (*((disp)->GetMaterialfv)) parameters +#define GET_GetMaterialfv(disp) ((disp)->GetMaterialfv) +#define SET_GetMaterialfv(disp, fn) ((disp)->GetMaterialfv = fn) +#define CALL_GetMaterialiv(disp, parameters) (*((disp)->GetMaterialiv)) parameters +#define GET_GetMaterialiv(disp) ((disp)->GetMaterialiv) +#define SET_GetMaterialiv(disp, fn) ((disp)->GetMaterialiv = fn) +#define CALL_GetPixelMapfv(disp, parameters) (*((disp)->GetPixelMapfv)) parameters +#define GET_GetPixelMapfv(disp) ((disp)->GetPixelMapfv) +#define SET_GetPixelMapfv(disp, fn) ((disp)->GetPixelMapfv = fn) +#define CALL_GetPixelMapuiv(disp, parameters) (*((disp)->GetPixelMapuiv)) parameters +#define GET_GetPixelMapuiv(disp) ((disp)->GetPixelMapuiv) +#define SET_GetPixelMapuiv(disp, fn) ((disp)->GetPixelMapuiv = fn) +#define CALL_GetPixelMapusv(disp, parameters) (*((disp)->GetPixelMapusv)) parameters +#define GET_GetPixelMapusv(disp) ((disp)->GetPixelMapusv) +#define SET_GetPixelMapusv(disp, fn) ((disp)->GetPixelMapusv = fn) +#define CALL_GetPolygonStipple(disp, parameters) (*((disp)->GetPolygonStipple)) parameters +#define GET_GetPolygonStipple(disp) ((disp)->GetPolygonStipple) +#define SET_GetPolygonStipple(disp, fn) ((disp)->GetPolygonStipple = fn) +#define CALL_GetString(disp, parameters) (*((disp)->GetString)) parameters +#define GET_GetString(disp) ((disp)->GetString) +#define SET_GetString(disp, fn) ((disp)->GetString = fn) +#define CALL_GetTexEnvfv(disp, parameters) (*((disp)->GetTexEnvfv)) parameters +#define GET_GetTexEnvfv(disp) ((disp)->GetTexEnvfv) +#define SET_GetTexEnvfv(disp, fn) ((disp)->GetTexEnvfv = fn) +#define CALL_GetTexEnviv(disp, parameters) (*((disp)->GetTexEnviv)) parameters +#define GET_GetTexEnviv(disp) ((disp)->GetTexEnviv) +#define SET_GetTexEnviv(disp, fn) ((disp)->GetTexEnviv = fn) +#define CALL_GetTexGendv(disp, parameters) (*((disp)->GetTexGendv)) parameters +#define GET_GetTexGendv(disp) ((disp)->GetTexGendv) +#define SET_GetTexGendv(disp, fn) ((disp)->GetTexGendv = fn) +#define CALL_GetTexGenfv(disp, parameters) (*((disp)->GetTexGenfv)) parameters +#define GET_GetTexGenfv(disp) ((disp)->GetTexGenfv) +#define SET_GetTexGenfv(disp, fn) ((disp)->GetTexGenfv = fn) +#define CALL_GetTexGeniv(disp, parameters) (*((disp)->GetTexGeniv)) parameters +#define GET_GetTexGeniv(disp) ((disp)->GetTexGeniv) +#define SET_GetTexGeniv(disp, fn) ((disp)->GetTexGeniv = fn) +#define CALL_GetTexImage(disp, parameters) (*((disp)->GetTexImage)) parameters +#define GET_GetTexImage(disp) ((disp)->GetTexImage) +#define SET_GetTexImage(disp, fn) ((disp)->GetTexImage = fn) +#define CALL_GetTexParameterfv(disp, parameters) (*((disp)->GetTexParameterfv)) parameters +#define GET_GetTexParameterfv(disp) ((disp)->GetTexParameterfv) +#define SET_GetTexParameterfv(disp, fn) ((disp)->GetTexParameterfv = fn) +#define CALL_GetTexParameteriv(disp, parameters) (*((disp)->GetTexParameteriv)) parameters +#define GET_GetTexParameteriv(disp) ((disp)->GetTexParameteriv) +#define SET_GetTexParameteriv(disp, fn) ((disp)->GetTexParameteriv = fn) +#define CALL_GetTexLevelParameterfv(disp, parameters) (*((disp)->GetTexLevelParameterfv)) parameters +#define GET_GetTexLevelParameterfv(disp) ((disp)->GetTexLevelParameterfv) +#define SET_GetTexLevelParameterfv(disp, fn) ((disp)->GetTexLevelParameterfv = fn) +#define CALL_GetTexLevelParameteriv(disp, parameters) (*((disp)->GetTexLevelParameteriv)) parameters +#define GET_GetTexLevelParameteriv(disp) ((disp)->GetTexLevelParameteriv) +#define SET_GetTexLevelParameteriv(disp, fn) ((disp)->GetTexLevelParameteriv = fn) +#define CALL_IsEnabled(disp, parameters) (*((disp)->IsEnabled)) parameters +#define GET_IsEnabled(disp) ((disp)->IsEnabled) +#define SET_IsEnabled(disp, fn) ((disp)->IsEnabled = fn) +#define CALL_IsList(disp, parameters) (*((disp)->IsList)) parameters +#define GET_IsList(disp) ((disp)->IsList) +#define SET_IsList(disp, fn) ((disp)->IsList = fn) +#define CALL_DepthRange(disp, parameters) (*((disp)->DepthRange)) parameters +#define GET_DepthRange(disp) ((disp)->DepthRange) +#define SET_DepthRange(disp, fn) ((disp)->DepthRange = fn) +#define CALL_Frustum(disp, parameters) (*((disp)->Frustum)) parameters +#define GET_Frustum(disp) ((disp)->Frustum) +#define SET_Frustum(disp, fn) ((disp)->Frustum = fn) +#define CALL_LoadIdentity(disp, parameters) (*((disp)->LoadIdentity)) parameters +#define GET_LoadIdentity(disp) ((disp)->LoadIdentity) +#define SET_LoadIdentity(disp, fn) ((disp)->LoadIdentity = fn) +#define CALL_LoadMatrixf(disp, parameters) (*((disp)->LoadMatrixf)) parameters +#define GET_LoadMatrixf(disp) ((disp)->LoadMatrixf) +#define SET_LoadMatrixf(disp, fn) ((disp)->LoadMatrixf = fn) +#define CALL_LoadMatrixd(disp, parameters) (*((disp)->LoadMatrixd)) parameters +#define GET_LoadMatrixd(disp) ((disp)->LoadMatrixd) +#define SET_LoadMatrixd(disp, fn) ((disp)->LoadMatrixd = fn) +#define CALL_MatrixMode(disp, parameters) (*((disp)->MatrixMode)) parameters +#define GET_MatrixMode(disp) ((disp)->MatrixMode) +#define SET_MatrixMode(disp, fn) ((disp)->MatrixMode = fn) +#define CALL_MultMatrixf(disp, parameters) (*((disp)->MultMatrixf)) parameters +#define GET_MultMatrixf(disp) ((disp)->MultMatrixf) +#define SET_MultMatrixf(disp, fn) ((disp)->MultMatrixf = fn) +#define CALL_MultMatrixd(disp, parameters) (*((disp)->MultMatrixd)) parameters +#define GET_MultMatrixd(disp) ((disp)->MultMatrixd) +#define SET_MultMatrixd(disp, fn) ((disp)->MultMatrixd = fn) +#define CALL_Ortho(disp, parameters) (*((disp)->Ortho)) parameters +#define GET_Ortho(disp) ((disp)->Ortho) +#define SET_Ortho(disp, fn) ((disp)->Ortho = fn) +#define CALL_PopMatrix(disp, parameters) (*((disp)->PopMatrix)) parameters +#define GET_PopMatrix(disp) ((disp)->PopMatrix) +#define SET_PopMatrix(disp, fn) ((disp)->PopMatrix = fn) +#define CALL_PushMatrix(disp, parameters) (*((disp)->PushMatrix)) parameters +#define GET_PushMatrix(disp) ((disp)->PushMatrix) +#define SET_PushMatrix(disp, fn) ((disp)->PushMatrix = fn) +#define CALL_Rotated(disp, parameters) (*((disp)->Rotated)) parameters +#define GET_Rotated(disp) ((disp)->Rotated) +#define SET_Rotated(disp, fn) ((disp)->Rotated = fn) +#define CALL_Rotatef(disp, parameters) (*((disp)->Rotatef)) parameters +#define GET_Rotatef(disp) ((disp)->Rotatef) +#define SET_Rotatef(disp, fn) ((disp)->Rotatef = fn) +#define CALL_Scaled(disp, parameters) (*((disp)->Scaled)) parameters +#define GET_Scaled(disp) ((disp)->Scaled) +#define SET_Scaled(disp, fn) ((disp)->Scaled = fn) +#define CALL_Scalef(disp, parameters) (*((disp)->Scalef)) parameters +#define GET_Scalef(disp) ((disp)->Scalef) +#define SET_Scalef(disp, fn) ((disp)->Scalef = fn) +#define CALL_Translated(disp, parameters) (*((disp)->Translated)) parameters +#define GET_Translated(disp) ((disp)->Translated) +#define SET_Translated(disp, fn) ((disp)->Translated = fn) +#define CALL_Translatef(disp, parameters) (*((disp)->Translatef)) parameters +#define GET_Translatef(disp) ((disp)->Translatef) +#define SET_Translatef(disp, fn) ((disp)->Translatef = fn) +#define CALL_Viewport(disp, parameters) (*((disp)->Viewport)) parameters +#define GET_Viewport(disp) ((disp)->Viewport) +#define SET_Viewport(disp, fn) ((disp)->Viewport = fn) +#define CALL_ArrayElement(disp, parameters) (*((disp)->ArrayElement)) parameters +#define GET_ArrayElement(disp) ((disp)->ArrayElement) +#define SET_ArrayElement(disp, fn) ((disp)->ArrayElement = fn) +#define CALL_BindTexture(disp, parameters) (*((disp)->BindTexture)) parameters +#define GET_BindTexture(disp) ((disp)->BindTexture) +#define SET_BindTexture(disp, fn) ((disp)->BindTexture = fn) +#define CALL_ColorPointer(disp, parameters) (*((disp)->ColorPointer)) parameters +#define GET_ColorPointer(disp) ((disp)->ColorPointer) +#define SET_ColorPointer(disp, fn) ((disp)->ColorPointer = fn) +#define CALL_DisableClientState(disp, parameters) (*((disp)->DisableClientState)) parameters +#define GET_DisableClientState(disp) ((disp)->DisableClientState) +#define SET_DisableClientState(disp, fn) ((disp)->DisableClientState = fn) +#define CALL_DrawArrays(disp, parameters) (*((disp)->DrawArrays)) parameters +#define GET_DrawArrays(disp) ((disp)->DrawArrays) +#define SET_DrawArrays(disp, fn) ((disp)->DrawArrays = fn) +#define CALL_DrawElements(disp, parameters) (*((disp)->DrawElements)) parameters +#define GET_DrawElements(disp) ((disp)->DrawElements) +#define SET_DrawElements(disp, fn) ((disp)->DrawElements = fn) +#define CALL_EdgeFlagPointer(disp, parameters) (*((disp)->EdgeFlagPointer)) parameters +#define GET_EdgeFlagPointer(disp) ((disp)->EdgeFlagPointer) +#define SET_EdgeFlagPointer(disp, fn) ((disp)->EdgeFlagPointer = fn) +#define CALL_EnableClientState(disp, parameters) (*((disp)->EnableClientState)) parameters +#define GET_EnableClientState(disp) ((disp)->EnableClientState) +#define SET_EnableClientState(disp, fn) ((disp)->EnableClientState = fn) +#define CALL_IndexPointer(disp, parameters) (*((disp)->IndexPointer)) parameters +#define GET_IndexPointer(disp) ((disp)->IndexPointer) +#define SET_IndexPointer(disp, fn) ((disp)->IndexPointer = fn) +#define CALL_Indexub(disp, parameters) (*((disp)->Indexub)) parameters +#define GET_Indexub(disp) ((disp)->Indexub) +#define SET_Indexub(disp, fn) ((disp)->Indexub = fn) +#define CALL_Indexubv(disp, parameters) (*((disp)->Indexubv)) parameters +#define GET_Indexubv(disp) ((disp)->Indexubv) +#define SET_Indexubv(disp, fn) ((disp)->Indexubv = fn) +#define CALL_InterleavedArrays(disp, parameters) (*((disp)->InterleavedArrays)) parameters +#define GET_InterleavedArrays(disp) ((disp)->InterleavedArrays) +#define SET_InterleavedArrays(disp, fn) ((disp)->InterleavedArrays = fn) +#define CALL_NormalPointer(disp, parameters) (*((disp)->NormalPointer)) parameters +#define GET_NormalPointer(disp) ((disp)->NormalPointer) +#define SET_NormalPointer(disp, fn) ((disp)->NormalPointer = fn) +#define CALL_PolygonOffset(disp, parameters) (*((disp)->PolygonOffset)) parameters +#define GET_PolygonOffset(disp) ((disp)->PolygonOffset) +#define SET_PolygonOffset(disp, fn) ((disp)->PolygonOffset = fn) +#define CALL_TexCoordPointer(disp, parameters) (*((disp)->TexCoordPointer)) parameters +#define GET_TexCoordPointer(disp) ((disp)->TexCoordPointer) +#define SET_TexCoordPointer(disp, fn) ((disp)->TexCoordPointer = fn) +#define CALL_VertexPointer(disp, parameters) (*((disp)->VertexPointer)) parameters +#define GET_VertexPointer(disp) ((disp)->VertexPointer) +#define SET_VertexPointer(disp, fn) ((disp)->VertexPointer = fn) +#define CALL_AreTexturesResident(disp, parameters) (*((disp)->AreTexturesResident)) parameters +#define GET_AreTexturesResident(disp) ((disp)->AreTexturesResident) +#define SET_AreTexturesResident(disp, fn) ((disp)->AreTexturesResident = fn) +#define CALL_CopyTexImage1D(disp, parameters) (*((disp)->CopyTexImage1D)) parameters +#define GET_CopyTexImage1D(disp) ((disp)->CopyTexImage1D) +#define SET_CopyTexImage1D(disp, fn) ((disp)->CopyTexImage1D = fn) +#define CALL_CopyTexImage2D(disp, parameters) (*((disp)->CopyTexImage2D)) parameters +#define GET_CopyTexImage2D(disp) ((disp)->CopyTexImage2D) +#define SET_CopyTexImage2D(disp, fn) ((disp)->CopyTexImage2D = fn) +#define CALL_CopyTexSubImage1D(disp, parameters) (*((disp)->CopyTexSubImage1D)) parameters +#define GET_CopyTexSubImage1D(disp) ((disp)->CopyTexSubImage1D) +#define SET_CopyTexSubImage1D(disp, fn) ((disp)->CopyTexSubImage1D = fn) +#define CALL_CopyTexSubImage2D(disp, parameters) (*((disp)->CopyTexSubImage2D)) parameters +#define GET_CopyTexSubImage2D(disp) ((disp)->CopyTexSubImage2D) +#define SET_CopyTexSubImage2D(disp, fn) ((disp)->CopyTexSubImage2D = fn) +#define CALL_DeleteTextures(disp, parameters) (*((disp)->DeleteTextures)) parameters +#define GET_DeleteTextures(disp) ((disp)->DeleteTextures) +#define SET_DeleteTextures(disp, fn) ((disp)->DeleteTextures = fn) +#define CALL_GenTextures(disp, parameters) (*((disp)->GenTextures)) parameters +#define GET_GenTextures(disp) ((disp)->GenTextures) +#define SET_GenTextures(disp, fn) ((disp)->GenTextures = fn) +#define CALL_GetPointerv(disp, parameters) (*((disp)->GetPointerv)) parameters +#define GET_GetPointerv(disp) ((disp)->GetPointerv) +#define SET_GetPointerv(disp, fn) ((disp)->GetPointerv = fn) +#define CALL_IsTexture(disp, parameters) (*((disp)->IsTexture)) parameters +#define GET_IsTexture(disp) ((disp)->IsTexture) +#define SET_IsTexture(disp, fn) ((disp)->IsTexture = fn) +#define CALL_PrioritizeTextures(disp, parameters) (*((disp)->PrioritizeTextures)) parameters +#define GET_PrioritizeTextures(disp) ((disp)->PrioritizeTextures) +#define SET_PrioritizeTextures(disp, fn) ((disp)->PrioritizeTextures = fn) +#define CALL_TexSubImage1D(disp, parameters) (*((disp)->TexSubImage1D)) parameters +#define GET_TexSubImage1D(disp) ((disp)->TexSubImage1D) +#define SET_TexSubImage1D(disp, fn) ((disp)->TexSubImage1D = fn) +#define CALL_TexSubImage2D(disp, parameters) (*((disp)->TexSubImage2D)) parameters +#define GET_TexSubImage2D(disp) ((disp)->TexSubImage2D) +#define SET_TexSubImage2D(disp, fn) ((disp)->TexSubImage2D = fn) +#define CALL_PopClientAttrib(disp, parameters) (*((disp)->PopClientAttrib)) parameters +#define GET_PopClientAttrib(disp) ((disp)->PopClientAttrib) +#define SET_PopClientAttrib(disp, fn) ((disp)->PopClientAttrib = fn) +#define CALL_PushClientAttrib(disp, parameters) (*((disp)->PushClientAttrib)) parameters +#define GET_PushClientAttrib(disp) ((disp)->PushClientAttrib) +#define SET_PushClientAttrib(disp, fn) ((disp)->PushClientAttrib = fn) +#define CALL_BlendColor(disp, parameters) (*((disp)->BlendColor)) parameters +#define GET_BlendColor(disp) ((disp)->BlendColor) +#define SET_BlendColor(disp, fn) ((disp)->BlendColor = fn) +#define CALL_BlendEquation(disp, parameters) (*((disp)->BlendEquation)) parameters +#define GET_BlendEquation(disp) ((disp)->BlendEquation) +#define SET_BlendEquation(disp, fn) ((disp)->BlendEquation = fn) +#define CALL_DrawRangeElements(disp, parameters) (*((disp)->DrawRangeElements)) parameters +#define GET_DrawRangeElements(disp) ((disp)->DrawRangeElements) +#define SET_DrawRangeElements(disp, fn) ((disp)->DrawRangeElements = fn) +#define CALL_ColorTable(disp, parameters) (*((disp)->ColorTable)) parameters +#define GET_ColorTable(disp) ((disp)->ColorTable) +#define SET_ColorTable(disp, fn) ((disp)->ColorTable = fn) +#define CALL_ColorTableParameterfv(disp, parameters) (*((disp)->ColorTableParameterfv)) parameters +#define GET_ColorTableParameterfv(disp) ((disp)->ColorTableParameterfv) +#define SET_ColorTableParameterfv(disp, fn) ((disp)->ColorTableParameterfv = fn) +#define CALL_ColorTableParameteriv(disp, parameters) (*((disp)->ColorTableParameteriv)) parameters +#define GET_ColorTableParameteriv(disp) ((disp)->ColorTableParameteriv) +#define SET_ColorTableParameteriv(disp, fn) ((disp)->ColorTableParameteriv = fn) +#define CALL_CopyColorTable(disp, parameters) (*((disp)->CopyColorTable)) parameters +#define GET_CopyColorTable(disp) ((disp)->CopyColorTable) +#define SET_CopyColorTable(disp, fn) ((disp)->CopyColorTable = fn) +#define CALL_GetColorTable(disp, parameters) (*((disp)->GetColorTable)) parameters +#define GET_GetColorTable(disp) ((disp)->GetColorTable) +#define SET_GetColorTable(disp, fn) ((disp)->GetColorTable = fn) +#define CALL_GetColorTableParameterfv(disp, parameters) (*((disp)->GetColorTableParameterfv)) parameters +#define GET_GetColorTableParameterfv(disp) ((disp)->GetColorTableParameterfv) +#define SET_GetColorTableParameterfv(disp, fn) ((disp)->GetColorTableParameterfv = fn) +#define CALL_GetColorTableParameteriv(disp, parameters) (*((disp)->GetColorTableParameteriv)) parameters +#define GET_GetColorTableParameteriv(disp) ((disp)->GetColorTableParameteriv) +#define SET_GetColorTableParameteriv(disp, fn) ((disp)->GetColorTableParameteriv = fn) +#define CALL_ColorSubTable(disp, parameters) (*((disp)->ColorSubTable)) parameters +#define GET_ColorSubTable(disp) ((disp)->ColorSubTable) +#define SET_ColorSubTable(disp, fn) ((disp)->ColorSubTable = fn) +#define CALL_CopyColorSubTable(disp, parameters) (*((disp)->CopyColorSubTable)) parameters +#define GET_CopyColorSubTable(disp) ((disp)->CopyColorSubTable) +#define SET_CopyColorSubTable(disp, fn) ((disp)->CopyColorSubTable = fn) +#define CALL_ConvolutionFilter1D(disp, parameters) (*((disp)->ConvolutionFilter1D)) parameters +#define GET_ConvolutionFilter1D(disp) ((disp)->ConvolutionFilter1D) +#define SET_ConvolutionFilter1D(disp, fn) ((disp)->ConvolutionFilter1D = fn) +#define CALL_ConvolutionFilter2D(disp, parameters) (*((disp)->ConvolutionFilter2D)) parameters +#define GET_ConvolutionFilter2D(disp) ((disp)->ConvolutionFilter2D) +#define SET_ConvolutionFilter2D(disp, fn) ((disp)->ConvolutionFilter2D = fn) +#define CALL_ConvolutionParameterf(disp, parameters) (*((disp)->ConvolutionParameterf)) parameters +#define GET_ConvolutionParameterf(disp) ((disp)->ConvolutionParameterf) +#define SET_ConvolutionParameterf(disp, fn) ((disp)->ConvolutionParameterf = fn) +#define CALL_ConvolutionParameterfv(disp, parameters) (*((disp)->ConvolutionParameterfv)) parameters +#define GET_ConvolutionParameterfv(disp) ((disp)->ConvolutionParameterfv) +#define SET_ConvolutionParameterfv(disp, fn) ((disp)->ConvolutionParameterfv = fn) +#define CALL_ConvolutionParameteri(disp, parameters) (*((disp)->ConvolutionParameteri)) parameters +#define GET_ConvolutionParameteri(disp) ((disp)->ConvolutionParameteri) +#define SET_ConvolutionParameteri(disp, fn) ((disp)->ConvolutionParameteri = fn) +#define CALL_ConvolutionParameteriv(disp, parameters) (*((disp)->ConvolutionParameteriv)) parameters +#define GET_ConvolutionParameteriv(disp) ((disp)->ConvolutionParameteriv) +#define SET_ConvolutionParameteriv(disp, fn) ((disp)->ConvolutionParameteriv = fn) +#define CALL_CopyConvolutionFilter1D(disp, parameters) (*((disp)->CopyConvolutionFilter1D)) parameters +#define GET_CopyConvolutionFilter1D(disp) ((disp)->CopyConvolutionFilter1D) +#define SET_CopyConvolutionFilter1D(disp, fn) ((disp)->CopyConvolutionFilter1D = fn) +#define CALL_CopyConvolutionFilter2D(disp, parameters) (*((disp)->CopyConvolutionFilter2D)) parameters +#define GET_CopyConvolutionFilter2D(disp) ((disp)->CopyConvolutionFilter2D) +#define SET_CopyConvolutionFilter2D(disp, fn) ((disp)->CopyConvolutionFilter2D = fn) +#define CALL_GetConvolutionFilter(disp, parameters) (*((disp)->GetConvolutionFilter)) parameters +#define GET_GetConvolutionFilter(disp) ((disp)->GetConvolutionFilter) +#define SET_GetConvolutionFilter(disp, fn) ((disp)->GetConvolutionFilter = fn) +#define CALL_GetConvolutionParameterfv(disp, parameters) (*((disp)->GetConvolutionParameterfv)) parameters +#define GET_GetConvolutionParameterfv(disp) ((disp)->GetConvolutionParameterfv) +#define SET_GetConvolutionParameterfv(disp, fn) ((disp)->GetConvolutionParameterfv = fn) +#define CALL_GetConvolutionParameteriv(disp, parameters) (*((disp)->GetConvolutionParameteriv)) parameters +#define GET_GetConvolutionParameteriv(disp) ((disp)->GetConvolutionParameteriv) +#define SET_GetConvolutionParameteriv(disp, fn) ((disp)->GetConvolutionParameteriv = fn) +#define CALL_GetSeparableFilter(disp, parameters) (*((disp)->GetSeparableFilter)) parameters +#define GET_GetSeparableFilter(disp) ((disp)->GetSeparableFilter) +#define SET_GetSeparableFilter(disp, fn) ((disp)->GetSeparableFilter = fn) +#define CALL_SeparableFilter2D(disp, parameters) (*((disp)->SeparableFilter2D)) parameters +#define GET_SeparableFilter2D(disp) ((disp)->SeparableFilter2D) +#define SET_SeparableFilter2D(disp, fn) ((disp)->SeparableFilter2D = fn) +#define CALL_GetHistogram(disp, parameters) (*((disp)->GetHistogram)) parameters +#define GET_GetHistogram(disp) ((disp)->GetHistogram) +#define SET_GetHistogram(disp, fn) ((disp)->GetHistogram = fn) +#define CALL_GetHistogramParameterfv(disp, parameters) (*((disp)->GetHistogramParameterfv)) parameters +#define GET_GetHistogramParameterfv(disp) ((disp)->GetHistogramParameterfv) +#define SET_GetHistogramParameterfv(disp, fn) ((disp)->GetHistogramParameterfv = fn) +#define CALL_GetHistogramParameteriv(disp, parameters) (*((disp)->GetHistogramParameteriv)) parameters +#define GET_GetHistogramParameteriv(disp) ((disp)->GetHistogramParameteriv) +#define SET_GetHistogramParameteriv(disp, fn) ((disp)->GetHistogramParameteriv = fn) +#define CALL_GetMinmax(disp, parameters) (*((disp)->GetMinmax)) parameters +#define GET_GetMinmax(disp) ((disp)->GetMinmax) +#define SET_GetMinmax(disp, fn) ((disp)->GetMinmax = fn) +#define CALL_GetMinmaxParameterfv(disp, parameters) (*((disp)->GetMinmaxParameterfv)) parameters +#define GET_GetMinmaxParameterfv(disp) ((disp)->GetMinmaxParameterfv) +#define SET_GetMinmaxParameterfv(disp, fn) ((disp)->GetMinmaxParameterfv = fn) +#define CALL_GetMinmaxParameteriv(disp, parameters) (*((disp)->GetMinmaxParameteriv)) parameters +#define GET_GetMinmaxParameteriv(disp) ((disp)->GetMinmaxParameteriv) +#define SET_GetMinmaxParameteriv(disp, fn) ((disp)->GetMinmaxParameteriv = fn) +#define CALL_Histogram(disp, parameters) (*((disp)->Histogram)) parameters +#define GET_Histogram(disp) ((disp)->Histogram) +#define SET_Histogram(disp, fn) ((disp)->Histogram = fn) +#define CALL_Minmax(disp, parameters) (*((disp)->Minmax)) parameters +#define GET_Minmax(disp) ((disp)->Minmax) +#define SET_Minmax(disp, fn) ((disp)->Minmax = fn) +#define CALL_ResetHistogram(disp, parameters) (*((disp)->ResetHistogram)) parameters +#define GET_ResetHistogram(disp) ((disp)->ResetHistogram) +#define SET_ResetHistogram(disp, fn) ((disp)->ResetHistogram = fn) +#define CALL_ResetMinmax(disp, parameters) (*((disp)->ResetMinmax)) parameters +#define GET_ResetMinmax(disp) ((disp)->ResetMinmax) +#define SET_ResetMinmax(disp, fn) ((disp)->ResetMinmax = fn) +#define CALL_TexImage3D(disp, parameters) (*((disp)->TexImage3D)) parameters +#define GET_TexImage3D(disp) ((disp)->TexImage3D) +#define SET_TexImage3D(disp, fn) ((disp)->TexImage3D = fn) +#define CALL_TexSubImage3D(disp, parameters) (*((disp)->TexSubImage3D)) parameters +#define GET_TexSubImage3D(disp) ((disp)->TexSubImage3D) +#define SET_TexSubImage3D(disp, fn) ((disp)->TexSubImage3D = fn) +#define CALL_CopyTexSubImage3D(disp, parameters) (*((disp)->CopyTexSubImage3D)) parameters +#define GET_CopyTexSubImage3D(disp) ((disp)->CopyTexSubImage3D) +#define SET_CopyTexSubImage3D(disp, fn) ((disp)->CopyTexSubImage3D = fn) +#define CALL_ActiveTextureARB(disp, parameters) (*((disp)->ActiveTextureARB)) parameters +#define GET_ActiveTextureARB(disp) ((disp)->ActiveTextureARB) +#define SET_ActiveTextureARB(disp, fn) ((disp)->ActiveTextureARB = fn) +#define CALL_ClientActiveTextureARB(disp, parameters) (*((disp)->ClientActiveTextureARB)) parameters +#define GET_ClientActiveTextureARB(disp) ((disp)->ClientActiveTextureARB) +#define SET_ClientActiveTextureARB(disp, fn) ((disp)->ClientActiveTextureARB = fn) +#define CALL_MultiTexCoord1dARB(disp, parameters) (*((disp)->MultiTexCoord1dARB)) parameters +#define GET_MultiTexCoord1dARB(disp) ((disp)->MultiTexCoord1dARB) +#define SET_MultiTexCoord1dARB(disp, fn) ((disp)->MultiTexCoord1dARB = fn) +#define CALL_MultiTexCoord1dvARB(disp, parameters) (*((disp)->MultiTexCoord1dvARB)) parameters +#define GET_MultiTexCoord1dvARB(disp) ((disp)->MultiTexCoord1dvARB) +#define SET_MultiTexCoord1dvARB(disp, fn) ((disp)->MultiTexCoord1dvARB = fn) +#define CALL_MultiTexCoord1fARB(disp, parameters) (*((disp)->MultiTexCoord1fARB)) parameters +#define GET_MultiTexCoord1fARB(disp) ((disp)->MultiTexCoord1fARB) +#define SET_MultiTexCoord1fARB(disp, fn) ((disp)->MultiTexCoord1fARB = fn) +#define CALL_MultiTexCoord1fvARB(disp, parameters) (*((disp)->MultiTexCoord1fvARB)) parameters +#define GET_MultiTexCoord1fvARB(disp) ((disp)->MultiTexCoord1fvARB) +#define SET_MultiTexCoord1fvARB(disp, fn) ((disp)->MultiTexCoord1fvARB = fn) +#define CALL_MultiTexCoord1iARB(disp, parameters) (*((disp)->MultiTexCoord1iARB)) parameters +#define GET_MultiTexCoord1iARB(disp) ((disp)->MultiTexCoord1iARB) +#define SET_MultiTexCoord1iARB(disp, fn) ((disp)->MultiTexCoord1iARB = fn) +#define CALL_MultiTexCoord1ivARB(disp, parameters) (*((disp)->MultiTexCoord1ivARB)) parameters +#define GET_MultiTexCoord1ivARB(disp) ((disp)->MultiTexCoord1ivARB) +#define SET_MultiTexCoord1ivARB(disp, fn) ((disp)->MultiTexCoord1ivARB = fn) +#define CALL_MultiTexCoord1sARB(disp, parameters) (*((disp)->MultiTexCoord1sARB)) parameters +#define GET_MultiTexCoord1sARB(disp) ((disp)->MultiTexCoord1sARB) +#define SET_MultiTexCoord1sARB(disp, fn) ((disp)->MultiTexCoord1sARB = fn) +#define CALL_MultiTexCoord1svARB(disp, parameters) (*((disp)->MultiTexCoord1svARB)) parameters +#define GET_MultiTexCoord1svARB(disp) ((disp)->MultiTexCoord1svARB) +#define SET_MultiTexCoord1svARB(disp, fn) ((disp)->MultiTexCoord1svARB = fn) +#define CALL_MultiTexCoord2dARB(disp, parameters) (*((disp)->MultiTexCoord2dARB)) parameters +#define GET_MultiTexCoord2dARB(disp) ((disp)->MultiTexCoord2dARB) +#define SET_MultiTexCoord2dARB(disp, fn) ((disp)->MultiTexCoord2dARB = fn) +#define CALL_MultiTexCoord2dvARB(disp, parameters) (*((disp)->MultiTexCoord2dvARB)) parameters +#define GET_MultiTexCoord2dvARB(disp) ((disp)->MultiTexCoord2dvARB) +#define SET_MultiTexCoord2dvARB(disp, fn) ((disp)->MultiTexCoord2dvARB = fn) +#define CALL_MultiTexCoord2fARB(disp, parameters) (*((disp)->MultiTexCoord2fARB)) parameters +#define GET_MultiTexCoord2fARB(disp) ((disp)->MultiTexCoord2fARB) +#define SET_MultiTexCoord2fARB(disp, fn) ((disp)->MultiTexCoord2fARB = fn) +#define CALL_MultiTexCoord2fvARB(disp, parameters) (*((disp)->MultiTexCoord2fvARB)) parameters +#define GET_MultiTexCoord2fvARB(disp) ((disp)->MultiTexCoord2fvARB) +#define SET_MultiTexCoord2fvARB(disp, fn) ((disp)->MultiTexCoord2fvARB = fn) +#define CALL_MultiTexCoord2iARB(disp, parameters) (*((disp)->MultiTexCoord2iARB)) parameters +#define GET_MultiTexCoord2iARB(disp) ((disp)->MultiTexCoord2iARB) +#define SET_MultiTexCoord2iARB(disp, fn) ((disp)->MultiTexCoord2iARB = fn) +#define CALL_MultiTexCoord2ivARB(disp, parameters) (*((disp)->MultiTexCoord2ivARB)) parameters +#define GET_MultiTexCoord2ivARB(disp) ((disp)->MultiTexCoord2ivARB) +#define SET_MultiTexCoord2ivARB(disp, fn) ((disp)->MultiTexCoord2ivARB = fn) +#define CALL_MultiTexCoord2sARB(disp, parameters) (*((disp)->MultiTexCoord2sARB)) parameters +#define GET_MultiTexCoord2sARB(disp) ((disp)->MultiTexCoord2sARB) +#define SET_MultiTexCoord2sARB(disp, fn) ((disp)->MultiTexCoord2sARB = fn) +#define CALL_MultiTexCoord2svARB(disp, parameters) (*((disp)->MultiTexCoord2svARB)) parameters +#define GET_MultiTexCoord2svARB(disp) ((disp)->MultiTexCoord2svARB) +#define SET_MultiTexCoord2svARB(disp, fn) ((disp)->MultiTexCoord2svARB = fn) +#define CALL_MultiTexCoord3dARB(disp, parameters) (*((disp)->MultiTexCoord3dARB)) parameters +#define GET_MultiTexCoord3dARB(disp) ((disp)->MultiTexCoord3dARB) +#define SET_MultiTexCoord3dARB(disp, fn) ((disp)->MultiTexCoord3dARB = fn) +#define CALL_MultiTexCoord3dvARB(disp, parameters) (*((disp)->MultiTexCoord3dvARB)) parameters +#define GET_MultiTexCoord3dvARB(disp) ((disp)->MultiTexCoord3dvARB) +#define SET_MultiTexCoord3dvARB(disp, fn) ((disp)->MultiTexCoord3dvARB = fn) +#define CALL_MultiTexCoord3fARB(disp, parameters) (*((disp)->MultiTexCoord3fARB)) parameters +#define GET_MultiTexCoord3fARB(disp) ((disp)->MultiTexCoord3fARB) +#define SET_MultiTexCoord3fARB(disp, fn) ((disp)->MultiTexCoord3fARB = fn) +#define CALL_MultiTexCoord3fvARB(disp, parameters) (*((disp)->MultiTexCoord3fvARB)) parameters +#define GET_MultiTexCoord3fvARB(disp) ((disp)->MultiTexCoord3fvARB) +#define SET_MultiTexCoord3fvARB(disp, fn) ((disp)->MultiTexCoord3fvARB = fn) +#define CALL_MultiTexCoord3iARB(disp, parameters) (*((disp)->MultiTexCoord3iARB)) parameters +#define GET_MultiTexCoord3iARB(disp) ((disp)->MultiTexCoord3iARB) +#define SET_MultiTexCoord3iARB(disp, fn) ((disp)->MultiTexCoord3iARB = fn) +#define CALL_MultiTexCoord3ivARB(disp, parameters) (*((disp)->MultiTexCoord3ivARB)) parameters +#define GET_MultiTexCoord3ivARB(disp) ((disp)->MultiTexCoord3ivARB) +#define SET_MultiTexCoord3ivARB(disp, fn) ((disp)->MultiTexCoord3ivARB = fn) +#define CALL_MultiTexCoord3sARB(disp, parameters) (*((disp)->MultiTexCoord3sARB)) parameters +#define GET_MultiTexCoord3sARB(disp) ((disp)->MultiTexCoord3sARB) +#define SET_MultiTexCoord3sARB(disp, fn) ((disp)->MultiTexCoord3sARB = fn) +#define CALL_MultiTexCoord3svARB(disp, parameters) (*((disp)->MultiTexCoord3svARB)) parameters +#define GET_MultiTexCoord3svARB(disp) ((disp)->MultiTexCoord3svARB) +#define SET_MultiTexCoord3svARB(disp, fn) ((disp)->MultiTexCoord3svARB = fn) +#define CALL_MultiTexCoord4dARB(disp, parameters) (*((disp)->MultiTexCoord4dARB)) parameters +#define GET_MultiTexCoord4dARB(disp) ((disp)->MultiTexCoord4dARB) +#define SET_MultiTexCoord4dARB(disp, fn) ((disp)->MultiTexCoord4dARB = fn) +#define CALL_MultiTexCoord4dvARB(disp, parameters) (*((disp)->MultiTexCoord4dvARB)) parameters +#define GET_MultiTexCoord4dvARB(disp) ((disp)->MultiTexCoord4dvARB) +#define SET_MultiTexCoord4dvARB(disp, fn) ((disp)->MultiTexCoord4dvARB = fn) +#define CALL_MultiTexCoord4fARB(disp, parameters) (*((disp)->MultiTexCoord4fARB)) parameters +#define GET_MultiTexCoord4fARB(disp) ((disp)->MultiTexCoord4fARB) +#define SET_MultiTexCoord4fARB(disp, fn) ((disp)->MultiTexCoord4fARB = fn) +#define CALL_MultiTexCoord4fvARB(disp, parameters) (*((disp)->MultiTexCoord4fvARB)) parameters +#define GET_MultiTexCoord4fvARB(disp) ((disp)->MultiTexCoord4fvARB) +#define SET_MultiTexCoord4fvARB(disp, fn) ((disp)->MultiTexCoord4fvARB = fn) +#define CALL_MultiTexCoord4iARB(disp, parameters) (*((disp)->MultiTexCoord4iARB)) parameters +#define GET_MultiTexCoord4iARB(disp) ((disp)->MultiTexCoord4iARB) +#define SET_MultiTexCoord4iARB(disp, fn) ((disp)->MultiTexCoord4iARB = fn) +#define CALL_MultiTexCoord4ivARB(disp, parameters) (*((disp)->MultiTexCoord4ivARB)) parameters +#define GET_MultiTexCoord4ivARB(disp) ((disp)->MultiTexCoord4ivARB) +#define SET_MultiTexCoord4ivARB(disp, fn) ((disp)->MultiTexCoord4ivARB = fn) +#define CALL_MultiTexCoord4sARB(disp, parameters) (*((disp)->MultiTexCoord4sARB)) parameters +#define GET_MultiTexCoord4sARB(disp) ((disp)->MultiTexCoord4sARB) +#define SET_MultiTexCoord4sARB(disp, fn) ((disp)->MultiTexCoord4sARB = fn) +#define CALL_MultiTexCoord4svARB(disp, parameters) (*((disp)->MultiTexCoord4svARB)) parameters +#define GET_MultiTexCoord4svARB(disp) ((disp)->MultiTexCoord4svARB) +#define SET_MultiTexCoord4svARB(disp, fn) ((disp)->MultiTexCoord4svARB = fn) + +#if !defined(IN_DRI_DRIVER) + +#define CALL_AttachShader(disp, parameters) (*((disp)->AttachShader)) parameters +#define GET_AttachShader(disp) ((disp)->AttachShader) +#define SET_AttachShader(disp, fn) ((disp)->AttachShader = fn) +#define CALL_CreateProgram(disp, parameters) (*((disp)->CreateProgram)) parameters +#define GET_CreateProgram(disp) ((disp)->CreateProgram) +#define SET_CreateProgram(disp, fn) ((disp)->CreateProgram = fn) +#define CALL_CreateShader(disp, parameters) (*((disp)->CreateShader)) parameters +#define GET_CreateShader(disp) ((disp)->CreateShader) +#define SET_CreateShader(disp, fn) ((disp)->CreateShader = fn) +#define CALL_DeleteProgram(disp, parameters) (*((disp)->DeleteProgram)) parameters +#define GET_DeleteProgram(disp) ((disp)->DeleteProgram) +#define SET_DeleteProgram(disp, fn) ((disp)->DeleteProgram = fn) +#define CALL_DeleteShader(disp, parameters) (*((disp)->DeleteShader)) parameters +#define GET_DeleteShader(disp) ((disp)->DeleteShader) +#define SET_DeleteShader(disp, fn) ((disp)->DeleteShader = fn) +#define CALL_DetachShader(disp, parameters) (*((disp)->DetachShader)) parameters +#define GET_DetachShader(disp) ((disp)->DetachShader) +#define SET_DetachShader(disp, fn) ((disp)->DetachShader = fn) +#define CALL_GetAttachedShaders(disp, parameters) (*((disp)->GetAttachedShaders)) parameters +#define GET_GetAttachedShaders(disp) ((disp)->GetAttachedShaders) +#define SET_GetAttachedShaders(disp, fn) ((disp)->GetAttachedShaders = fn) +#define CALL_GetProgramInfoLog(disp, parameters) (*((disp)->GetProgramInfoLog)) parameters +#define GET_GetProgramInfoLog(disp) ((disp)->GetProgramInfoLog) +#define SET_GetProgramInfoLog(disp, fn) ((disp)->GetProgramInfoLog = fn) +#define CALL_GetProgramiv(disp, parameters) (*((disp)->GetProgramiv)) parameters +#define GET_GetProgramiv(disp) ((disp)->GetProgramiv) +#define SET_GetProgramiv(disp, fn) ((disp)->GetProgramiv = fn) +#define CALL_GetShaderInfoLog(disp, parameters) (*((disp)->GetShaderInfoLog)) parameters +#define GET_GetShaderInfoLog(disp) ((disp)->GetShaderInfoLog) +#define SET_GetShaderInfoLog(disp, fn) ((disp)->GetShaderInfoLog = fn) +#define CALL_GetShaderiv(disp, parameters) (*((disp)->GetShaderiv)) parameters +#define GET_GetShaderiv(disp) ((disp)->GetShaderiv) +#define SET_GetShaderiv(disp, fn) ((disp)->GetShaderiv = fn) +#define CALL_IsProgram(disp, parameters) (*((disp)->IsProgram)) parameters +#define GET_IsProgram(disp) ((disp)->IsProgram) +#define SET_IsProgram(disp, fn) ((disp)->IsProgram = fn) +#define CALL_IsShader(disp, parameters) (*((disp)->IsShader)) parameters +#define GET_IsShader(disp) ((disp)->IsShader) +#define SET_IsShader(disp, fn) ((disp)->IsShader = fn) +#define CALL_StencilFuncSeparate(disp, parameters) (*((disp)->StencilFuncSeparate)) parameters +#define GET_StencilFuncSeparate(disp) ((disp)->StencilFuncSeparate) +#define SET_StencilFuncSeparate(disp, fn) ((disp)->StencilFuncSeparate = fn) +#define CALL_StencilMaskSeparate(disp, parameters) (*((disp)->StencilMaskSeparate)) parameters +#define GET_StencilMaskSeparate(disp) ((disp)->StencilMaskSeparate) +#define SET_StencilMaskSeparate(disp, fn) ((disp)->StencilMaskSeparate = fn) +#define CALL_StencilOpSeparate(disp, parameters) (*((disp)->StencilOpSeparate)) parameters +#define GET_StencilOpSeparate(disp) ((disp)->StencilOpSeparate) +#define SET_StencilOpSeparate(disp, fn) ((disp)->StencilOpSeparate = fn) +#define CALL_UniformMatrix2x3fv(disp, parameters) (*((disp)->UniformMatrix2x3fv)) parameters +#define GET_UniformMatrix2x3fv(disp) ((disp)->UniformMatrix2x3fv) +#define SET_UniformMatrix2x3fv(disp, fn) ((disp)->UniformMatrix2x3fv = fn) +#define CALL_UniformMatrix2x4fv(disp, parameters) (*((disp)->UniformMatrix2x4fv)) parameters +#define GET_UniformMatrix2x4fv(disp) ((disp)->UniformMatrix2x4fv) +#define SET_UniformMatrix2x4fv(disp, fn) ((disp)->UniformMatrix2x4fv = fn) +#define CALL_UniformMatrix3x2fv(disp, parameters) (*((disp)->UniformMatrix3x2fv)) parameters +#define GET_UniformMatrix3x2fv(disp) ((disp)->UniformMatrix3x2fv) +#define SET_UniformMatrix3x2fv(disp, fn) ((disp)->UniformMatrix3x2fv = fn) +#define CALL_UniformMatrix3x4fv(disp, parameters) (*((disp)->UniformMatrix3x4fv)) parameters +#define GET_UniformMatrix3x4fv(disp) ((disp)->UniformMatrix3x4fv) +#define SET_UniformMatrix3x4fv(disp, fn) ((disp)->UniformMatrix3x4fv = fn) +#define CALL_UniformMatrix4x2fv(disp, parameters) (*((disp)->UniformMatrix4x2fv)) parameters +#define GET_UniformMatrix4x2fv(disp) ((disp)->UniformMatrix4x2fv) +#define SET_UniformMatrix4x2fv(disp, fn) ((disp)->UniformMatrix4x2fv = fn) +#define CALL_UniformMatrix4x3fv(disp, parameters) (*((disp)->UniformMatrix4x3fv)) parameters +#define GET_UniformMatrix4x3fv(disp) ((disp)->UniformMatrix4x3fv) +#define SET_UniformMatrix4x3fv(disp, fn) ((disp)->UniformMatrix4x3fv = fn) +#define CALL_LoadTransposeMatrixdARB(disp, parameters) (*((disp)->LoadTransposeMatrixdARB)) parameters +#define GET_LoadTransposeMatrixdARB(disp) ((disp)->LoadTransposeMatrixdARB) +#define SET_LoadTransposeMatrixdARB(disp, fn) ((disp)->LoadTransposeMatrixdARB = fn) +#define CALL_LoadTransposeMatrixfARB(disp, parameters) (*((disp)->LoadTransposeMatrixfARB)) parameters +#define GET_LoadTransposeMatrixfARB(disp) ((disp)->LoadTransposeMatrixfARB) +#define SET_LoadTransposeMatrixfARB(disp, fn) ((disp)->LoadTransposeMatrixfARB = fn) +#define CALL_MultTransposeMatrixdARB(disp, parameters) (*((disp)->MultTransposeMatrixdARB)) parameters +#define GET_MultTransposeMatrixdARB(disp) ((disp)->MultTransposeMatrixdARB) +#define SET_MultTransposeMatrixdARB(disp, fn) ((disp)->MultTransposeMatrixdARB = fn) +#define CALL_MultTransposeMatrixfARB(disp, parameters) (*((disp)->MultTransposeMatrixfARB)) parameters +#define GET_MultTransposeMatrixfARB(disp) ((disp)->MultTransposeMatrixfARB) +#define SET_MultTransposeMatrixfARB(disp, fn) ((disp)->MultTransposeMatrixfARB = fn) +#define CALL_SampleCoverageARB(disp, parameters) (*((disp)->SampleCoverageARB)) parameters +#define GET_SampleCoverageARB(disp) ((disp)->SampleCoverageARB) +#define SET_SampleCoverageARB(disp, fn) ((disp)->SampleCoverageARB = fn) +#define CALL_CompressedTexImage1DARB(disp, parameters) (*((disp)->CompressedTexImage1DARB)) parameters +#define GET_CompressedTexImage1DARB(disp) ((disp)->CompressedTexImage1DARB) +#define SET_CompressedTexImage1DARB(disp, fn) ((disp)->CompressedTexImage1DARB = fn) +#define CALL_CompressedTexImage2DARB(disp, parameters) (*((disp)->CompressedTexImage2DARB)) parameters +#define GET_CompressedTexImage2DARB(disp) ((disp)->CompressedTexImage2DARB) +#define SET_CompressedTexImage2DARB(disp, fn) ((disp)->CompressedTexImage2DARB = fn) +#define CALL_CompressedTexImage3DARB(disp, parameters) (*((disp)->CompressedTexImage3DARB)) parameters +#define GET_CompressedTexImage3DARB(disp) ((disp)->CompressedTexImage3DARB) +#define SET_CompressedTexImage3DARB(disp, fn) ((disp)->CompressedTexImage3DARB = fn) +#define CALL_CompressedTexSubImage1DARB(disp, parameters) (*((disp)->CompressedTexSubImage1DARB)) parameters +#define GET_CompressedTexSubImage1DARB(disp) ((disp)->CompressedTexSubImage1DARB) +#define SET_CompressedTexSubImage1DARB(disp, fn) ((disp)->CompressedTexSubImage1DARB = fn) +#define CALL_CompressedTexSubImage2DARB(disp, parameters) (*((disp)->CompressedTexSubImage2DARB)) parameters +#define GET_CompressedTexSubImage2DARB(disp) ((disp)->CompressedTexSubImage2DARB) +#define SET_CompressedTexSubImage2DARB(disp, fn) ((disp)->CompressedTexSubImage2DARB = fn) +#define CALL_CompressedTexSubImage3DARB(disp, parameters) (*((disp)->CompressedTexSubImage3DARB)) parameters +#define GET_CompressedTexSubImage3DARB(disp) ((disp)->CompressedTexSubImage3DARB) +#define SET_CompressedTexSubImage3DARB(disp, fn) ((disp)->CompressedTexSubImage3DARB = fn) +#define CALL_GetCompressedTexImageARB(disp, parameters) (*((disp)->GetCompressedTexImageARB)) parameters +#define GET_GetCompressedTexImageARB(disp) ((disp)->GetCompressedTexImageARB) +#define SET_GetCompressedTexImageARB(disp, fn) ((disp)->GetCompressedTexImageARB = fn) +#define CALL_DisableVertexAttribArrayARB(disp, parameters) (*((disp)->DisableVertexAttribArrayARB)) parameters +#define GET_DisableVertexAttribArrayARB(disp) ((disp)->DisableVertexAttribArrayARB) +#define SET_DisableVertexAttribArrayARB(disp, fn) ((disp)->DisableVertexAttribArrayARB = fn) +#define CALL_EnableVertexAttribArrayARB(disp, parameters) (*((disp)->EnableVertexAttribArrayARB)) parameters +#define GET_EnableVertexAttribArrayARB(disp) ((disp)->EnableVertexAttribArrayARB) +#define SET_EnableVertexAttribArrayARB(disp, fn) ((disp)->EnableVertexAttribArrayARB = fn) +#define CALL_GetProgramEnvParameterdvARB(disp, parameters) (*((disp)->GetProgramEnvParameterdvARB)) parameters +#define GET_GetProgramEnvParameterdvARB(disp) ((disp)->GetProgramEnvParameterdvARB) +#define SET_GetProgramEnvParameterdvARB(disp, fn) ((disp)->GetProgramEnvParameterdvARB = fn) +#define CALL_GetProgramEnvParameterfvARB(disp, parameters) (*((disp)->GetProgramEnvParameterfvARB)) parameters +#define GET_GetProgramEnvParameterfvARB(disp) ((disp)->GetProgramEnvParameterfvARB) +#define SET_GetProgramEnvParameterfvARB(disp, fn) ((disp)->GetProgramEnvParameterfvARB = fn) +#define CALL_GetProgramLocalParameterdvARB(disp, parameters) (*((disp)->GetProgramLocalParameterdvARB)) parameters +#define GET_GetProgramLocalParameterdvARB(disp) ((disp)->GetProgramLocalParameterdvARB) +#define SET_GetProgramLocalParameterdvARB(disp, fn) ((disp)->GetProgramLocalParameterdvARB = fn) +#define CALL_GetProgramLocalParameterfvARB(disp, parameters) (*((disp)->GetProgramLocalParameterfvARB)) parameters +#define GET_GetProgramLocalParameterfvARB(disp) ((disp)->GetProgramLocalParameterfvARB) +#define SET_GetProgramLocalParameterfvARB(disp, fn) ((disp)->GetProgramLocalParameterfvARB = fn) +#define CALL_GetProgramStringARB(disp, parameters) (*((disp)->GetProgramStringARB)) parameters +#define GET_GetProgramStringARB(disp) ((disp)->GetProgramStringARB) +#define SET_GetProgramStringARB(disp, fn) ((disp)->GetProgramStringARB = fn) +#define CALL_GetProgramivARB(disp, parameters) (*((disp)->GetProgramivARB)) parameters +#define GET_GetProgramivARB(disp) ((disp)->GetProgramivARB) +#define SET_GetProgramivARB(disp, fn) ((disp)->GetProgramivARB = fn) +#define CALL_GetVertexAttribdvARB(disp, parameters) (*((disp)->GetVertexAttribdvARB)) parameters +#define GET_GetVertexAttribdvARB(disp) ((disp)->GetVertexAttribdvARB) +#define SET_GetVertexAttribdvARB(disp, fn) ((disp)->GetVertexAttribdvARB = fn) +#define CALL_GetVertexAttribfvARB(disp, parameters) (*((disp)->GetVertexAttribfvARB)) parameters +#define GET_GetVertexAttribfvARB(disp) ((disp)->GetVertexAttribfvARB) +#define SET_GetVertexAttribfvARB(disp, fn) ((disp)->GetVertexAttribfvARB = fn) +#define CALL_GetVertexAttribivARB(disp, parameters) (*((disp)->GetVertexAttribivARB)) parameters +#define GET_GetVertexAttribivARB(disp) ((disp)->GetVertexAttribivARB) +#define SET_GetVertexAttribivARB(disp, fn) ((disp)->GetVertexAttribivARB = fn) +#define CALL_ProgramEnvParameter4dARB(disp, parameters) (*((disp)->ProgramEnvParameter4dARB)) parameters +#define GET_ProgramEnvParameter4dARB(disp) ((disp)->ProgramEnvParameter4dARB) +#define SET_ProgramEnvParameter4dARB(disp, fn) ((disp)->ProgramEnvParameter4dARB = fn) +#define CALL_ProgramEnvParameter4dvARB(disp, parameters) (*((disp)->ProgramEnvParameter4dvARB)) parameters +#define GET_ProgramEnvParameter4dvARB(disp) ((disp)->ProgramEnvParameter4dvARB) +#define SET_ProgramEnvParameter4dvARB(disp, fn) ((disp)->ProgramEnvParameter4dvARB = fn) +#define CALL_ProgramEnvParameter4fARB(disp, parameters) (*((disp)->ProgramEnvParameter4fARB)) parameters +#define GET_ProgramEnvParameter4fARB(disp) ((disp)->ProgramEnvParameter4fARB) +#define SET_ProgramEnvParameter4fARB(disp, fn) ((disp)->ProgramEnvParameter4fARB = fn) +#define CALL_ProgramEnvParameter4fvARB(disp, parameters) (*((disp)->ProgramEnvParameter4fvARB)) parameters +#define GET_ProgramEnvParameter4fvARB(disp) ((disp)->ProgramEnvParameter4fvARB) +#define SET_ProgramEnvParameter4fvARB(disp, fn) ((disp)->ProgramEnvParameter4fvARB = fn) +#define CALL_ProgramLocalParameter4dARB(disp, parameters) (*((disp)->ProgramLocalParameter4dARB)) parameters +#define GET_ProgramLocalParameter4dARB(disp) ((disp)->ProgramLocalParameter4dARB) +#define SET_ProgramLocalParameter4dARB(disp, fn) ((disp)->ProgramLocalParameter4dARB = fn) +#define CALL_ProgramLocalParameter4dvARB(disp, parameters) (*((disp)->ProgramLocalParameter4dvARB)) parameters +#define GET_ProgramLocalParameter4dvARB(disp) ((disp)->ProgramLocalParameter4dvARB) +#define SET_ProgramLocalParameter4dvARB(disp, fn) ((disp)->ProgramLocalParameter4dvARB = fn) +#define CALL_ProgramLocalParameter4fARB(disp, parameters) (*((disp)->ProgramLocalParameter4fARB)) parameters +#define GET_ProgramLocalParameter4fARB(disp) ((disp)->ProgramLocalParameter4fARB) +#define SET_ProgramLocalParameter4fARB(disp, fn) ((disp)->ProgramLocalParameter4fARB = fn) +#define CALL_ProgramLocalParameter4fvARB(disp, parameters) (*((disp)->ProgramLocalParameter4fvARB)) parameters +#define GET_ProgramLocalParameter4fvARB(disp) ((disp)->ProgramLocalParameter4fvARB) +#define SET_ProgramLocalParameter4fvARB(disp, fn) ((disp)->ProgramLocalParameter4fvARB = fn) +#define CALL_ProgramStringARB(disp, parameters) (*((disp)->ProgramStringARB)) parameters +#define GET_ProgramStringARB(disp) ((disp)->ProgramStringARB) +#define SET_ProgramStringARB(disp, fn) ((disp)->ProgramStringARB = fn) +#define CALL_VertexAttrib1dARB(disp, parameters) (*((disp)->VertexAttrib1dARB)) parameters +#define GET_VertexAttrib1dARB(disp) ((disp)->VertexAttrib1dARB) +#define SET_VertexAttrib1dARB(disp, fn) ((disp)->VertexAttrib1dARB = fn) +#define CALL_VertexAttrib1dvARB(disp, parameters) (*((disp)->VertexAttrib1dvARB)) parameters +#define GET_VertexAttrib1dvARB(disp) ((disp)->VertexAttrib1dvARB) +#define SET_VertexAttrib1dvARB(disp, fn) ((disp)->VertexAttrib1dvARB = fn) +#define CALL_VertexAttrib1fARB(disp, parameters) (*((disp)->VertexAttrib1fARB)) parameters +#define GET_VertexAttrib1fARB(disp) ((disp)->VertexAttrib1fARB) +#define SET_VertexAttrib1fARB(disp, fn) ((disp)->VertexAttrib1fARB = fn) +#define CALL_VertexAttrib1fvARB(disp, parameters) (*((disp)->VertexAttrib1fvARB)) parameters +#define GET_VertexAttrib1fvARB(disp) ((disp)->VertexAttrib1fvARB) +#define SET_VertexAttrib1fvARB(disp, fn) ((disp)->VertexAttrib1fvARB = fn) +#define CALL_VertexAttrib1sARB(disp, parameters) (*((disp)->VertexAttrib1sARB)) parameters +#define GET_VertexAttrib1sARB(disp) ((disp)->VertexAttrib1sARB) +#define SET_VertexAttrib1sARB(disp, fn) ((disp)->VertexAttrib1sARB = fn) +#define CALL_VertexAttrib1svARB(disp, parameters) (*((disp)->VertexAttrib1svARB)) parameters +#define GET_VertexAttrib1svARB(disp) ((disp)->VertexAttrib1svARB) +#define SET_VertexAttrib1svARB(disp, fn) ((disp)->VertexAttrib1svARB = fn) +#define CALL_VertexAttrib2dARB(disp, parameters) (*((disp)->VertexAttrib2dARB)) parameters +#define GET_VertexAttrib2dARB(disp) ((disp)->VertexAttrib2dARB) +#define SET_VertexAttrib2dARB(disp, fn) ((disp)->VertexAttrib2dARB = fn) +#define CALL_VertexAttrib2dvARB(disp, parameters) (*((disp)->VertexAttrib2dvARB)) parameters +#define GET_VertexAttrib2dvARB(disp) ((disp)->VertexAttrib2dvARB) +#define SET_VertexAttrib2dvARB(disp, fn) ((disp)->VertexAttrib2dvARB = fn) +#define CALL_VertexAttrib2fARB(disp, parameters) (*((disp)->VertexAttrib2fARB)) parameters +#define GET_VertexAttrib2fARB(disp) ((disp)->VertexAttrib2fARB) +#define SET_VertexAttrib2fARB(disp, fn) ((disp)->VertexAttrib2fARB = fn) +#define CALL_VertexAttrib2fvARB(disp, parameters) (*((disp)->VertexAttrib2fvARB)) parameters +#define GET_VertexAttrib2fvARB(disp) ((disp)->VertexAttrib2fvARB) +#define SET_VertexAttrib2fvARB(disp, fn) ((disp)->VertexAttrib2fvARB = fn) +#define CALL_VertexAttrib2sARB(disp, parameters) (*((disp)->VertexAttrib2sARB)) parameters +#define GET_VertexAttrib2sARB(disp) ((disp)->VertexAttrib2sARB) +#define SET_VertexAttrib2sARB(disp, fn) ((disp)->VertexAttrib2sARB = fn) +#define CALL_VertexAttrib2svARB(disp, parameters) (*((disp)->VertexAttrib2svARB)) parameters +#define GET_VertexAttrib2svARB(disp) ((disp)->VertexAttrib2svARB) +#define SET_VertexAttrib2svARB(disp, fn) ((disp)->VertexAttrib2svARB = fn) +#define CALL_VertexAttrib3dARB(disp, parameters) (*((disp)->VertexAttrib3dARB)) parameters +#define GET_VertexAttrib3dARB(disp) ((disp)->VertexAttrib3dARB) +#define SET_VertexAttrib3dARB(disp, fn) ((disp)->VertexAttrib3dARB = fn) +#define CALL_VertexAttrib3dvARB(disp, parameters) (*((disp)->VertexAttrib3dvARB)) parameters +#define GET_VertexAttrib3dvARB(disp) ((disp)->VertexAttrib3dvARB) +#define SET_VertexAttrib3dvARB(disp, fn) ((disp)->VertexAttrib3dvARB = fn) +#define CALL_VertexAttrib3fARB(disp, parameters) (*((disp)->VertexAttrib3fARB)) parameters +#define GET_VertexAttrib3fARB(disp) ((disp)->VertexAttrib3fARB) +#define SET_VertexAttrib3fARB(disp, fn) ((disp)->VertexAttrib3fARB = fn) +#define CALL_VertexAttrib3fvARB(disp, parameters) (*((disp)->VertexAttrib3fvARB)) parameters +#define GET_VertexAttrib3fvARB(disp) ((disp)->VertexAttrib3fvARB) +#define SET_VertexAttrib3fvARB(disp, fn) ((disp)->VertexAttrib3fvARB = fn) +#define CALL_VertexAttrib3sARB(disp, parameters) (*((disp)->VertexAttrib3sARB)) parameters +#define GET_VertexAttrib3sARB(disp) ((disp)->VertexAttrib3sARB) +#define SET_VertexAttrib3sARB(disp, fn) ((disp)->VertexAttrib3sARB = fn) +#define CALL_VertexAttrib3svARB(disp, parameters) (*((disp)->VertexAttrib3svARB)) parameters +#define GET_VertexAttrib3svARB(disp) ((disp)->VertexAttrib3svARB) +#define SET_VertexAttrib3svARB(disp, fn) ((disp)->VertexAttrib3svARB = fn) +#define CALL_VertexAttrib4NbvARB(disp, parameters) (*((disp)->VertexAttrib4NbvARB)) parameters +#define GET_VertexAttrib4NbvARB(disp) ((disp)->VertexAttrib4NbvARB) +#define SET_VertexAttrib4NbvARB(disp, fn) ((disp)->VertexAttrib4NbvARB = fn) +#define CALL_VertexAttrib4NivARB(disp, parameters) (*((disp)->VertexAttrib4NivARB)) parameters +#define GET_VertexAttrib4NivARB(disp) ((disp)->VertexAttrib4NivARB) +#define SET_VertexAttrib4NivARB(disp, fn) ((disp)->VertexAttrib4NivARB = fn) +#define CALL_VertexAttrib4NsvARB(disp, parameters) (*((disp)->VertexAttrib4NsvARB)) parameters +#define GET_VertexAttrib4NsvARB(disp) ((disp)->VertexAttrib4NsvARB) +#define SET_VertexAttrib4NsvARB(disp, fn) ((disp)->VertexAttrib4NsvARB = fn) +#define CALL_VertexAttrib4NubARB(disp, parameters) (*((disp)->VertexAttrib4NubARB)) parameters +#define GET_VertexAttrib4NubARB(disp) ((disp)->VertexAttrib4NubARB) +#define SET_VertexAttrib4NubARB(disp, fn) ((disp)->VertexAttrib4NubARB = fn) +#define CALL_VertexAttrib4NubvARB(disp, parameters) (*((disp)->VertexAttrib4NubvARB)) parameters +#define GET_VertexAttrib4NubvARB(disp) ((disp)->VertexAttrib4NubvARB) +#define SET_VertexAttrib4NubvARB(disp, fn) ((disp)->VertexAttrib4NubvARB = fn) +#define CALL_VertexAttrib4NuivARB(disp, parameters) (*((disp)->VertexAttrib4NuivARB)) parameters +#define GET_VertexAttrib4NuivARB(disp) ((disp)->VertexAttrib4NuivARB) +#define SET_VertexAttrib4NuivARB(disp, fn) ((disp)->VertexAttrib4NuivARB = fn) +#define CALL_VertexAttrib4NusvARB(disp, parameters) (*((disp)->VertexAttrib4NusvARB)) parameters +#define GET_VertexAttrib4NusvARB(disp) ((disp)->VertexAttrib4NusvARB) +#define SET_VertexAttrib4NusvARB(disp, fn) ((disp)->VertexAttrib4NusvARB = fn) +#define CALL_VertexAttrib4bvARB(disp, parameters) (*((disp)->VertexAttrib4bvARB)) parameters +#define GET_VertexAttrib4bvARB(disp) ((disp)->VertexAttrib4bvARB) +#define SET_VertexAttrib4bvARB(disp, fn) ((disp)->VertexAttrib4bvARB = fn) +#define CALL_VertexAttrib4dARB(disp, parameters) (*((disp)->VertexAttrib4dARB)) parameters +#define GET_VertexAttrib4dARB(disp) ((disp)->VertexAttrib4dARB) +#define SET_VertexAttrib4dARB(disp, fn) ((disp)->VertexAttrib4dARB = fn) +#define CALL_VertexAttrib4dvARB(disp, parameters) (*((disp)->VertexAttrib4dvARB)) parameters +#define GET_VertexAttrib4dvARB(disp) ((disp)->VertexAttrib4dvARB) +#define SET_VertexAttrib4dvARB(disp, fn) ((disp)->VertexAttrib4dvARB = fn) +#define CALL_VertexAttrib4fARB(disp, parameters) (*((disp)->VertexAttrib4fARB)) parameters +#define GET_VertexAttrib4fARB(disp) ((disp)->VertexAttrib4fARB) +#define SET_VertexAttrib4fARB(disp, fn) ((disp)->VertexAttrib4fARB = fn) +#define CALL_VertexAttrib4fvARB(disp, parameters) (*((disp)->VertexAttrib4fvARB)) parameters +#define GET_VertexAttrib4fvARB(disp) ((disp)->VertexAttrib4fvARB) +#define SET_VertexAttrib4fvARB(disp, fn) ((disp)->VertexAttrib4fvARB = fn) +#define CALL_VertexAttrib4ivARB(disp, parameters) (*((disp)->VertexAttrib4ivARB)) parameters +#define GET_VertexAttrib4ivARB(disp) ((disp)->VertexAttrib4ivARB) +#define SET_VertexAttrib4ivARB(disp, fn) ((disp)->VertexAttrib4ivARB = fn) +#define CALL_VertexAttrib4sARB(disp, parameters) (*((disp)->VertexAttrib4sARB)) parameters +#define GET_VertexAttrib4sARB(disp) ((disp)->VertexAttrib4sARB) +#define SET_VertexAttrib4sARB(disp, fn) ((disp)->VertexAttrib4sARB = fn) +#define CALL_VertexAttrib4svARB(disp, parameters) (*((disp)->VertexAttrib4svARB)) parameters +#define GET_VertexAttrib4svARB(disp) ((disp)->VertexAttrib4svARB) +#define SET_VertexAttrib4svARB(disp, fn) ((disp)->VertexAttrib4svARB = fn) +#define CALL_VertexAttrib4ubvARB(disp, parameters) (*((disp)->VertexAttrib4ubvARB)) parameters +#define GET_VertexAttrib4ubvARB(disp) ((disp)->VertexAttrib4ubvARB) +#define SET_VertexAttrib4ubvARB(disp, fn) ((disp)->VertexAttrib4ubvARB = fn) +#define CALL_VertexAttrib4uivARB(disp, parameters) (*((disp)->VertexAttrib4uivARB)) parameters +#define GET_VertexAttrib4uivARB(disp) ((disp)->VertexAttrib4uivARB) +#define SET_VertexAttrib4uivARB(disp, fn) ((disp)->VertexAttrib4uivARB = fn) +#define CALL_VertexAttrib4usvARB(disp, parameters) (*((disp)->VertexAttrib4usvARB)) parameters +#define GET_VertexAttrib4usvARB(disp) ((disp)->VertexAttrib4usvARB) +#define SET_VertexAttrib4usvARB(disp, fn) ((disp)->VertexAttrib4usvARB = fn) +#define CALL_VertexAttribPointerARB(disp, parameters) (*((disp)->VertexAttribPointerARB)) parameters +#define GET_VertexAttribPointerARB(disp) ((disp)->VertexAttribPointerARB) +#define SET_VertexAttribPointerARB(disp, fn) ((disp)->VertexAttribPointerARB = fn) +#define CALL_BindBufferARB(disp, parameters) (*((disp)->BindBufferARB)) parameters +#define GET_BindBufferARB(disp) ((disp)->BindBufferARB) +#define SET_BindBufferARB(disp, fn) ((disp)->BindBufferARB = fn) +#define CALL_BufferDataARB(disp, parameters) (*((disp)->BufferDataARB)) parameters +#define GET_BufferDataARB(disp) ((disp)->BufferDataARB) +#define SET_BufferDataARB(disp, fn) ((disp)->BufferDataARB = fn) +#define CALL_BufferSubDataARB(disp, parameters) (*((disp)->BufferSubDataARB)) parameters +#define GET_BufferSubDataARB(disp) ((disp)->BufferSubDataARB) +#define SET_BufferSubDataARB(disp, fn) ((disp)->BufferSubDataARB = fn) +#define CALL_DeleteBuffersARB(disp, parameters) (*((disp)->DeleteBuffersARB)) parameters +#define GET_DeleteBuffersARB(disp) ((disp)->DeleteBuffersARB) +#define SET_DeleteBuffersARB(disp, fn) ((disp)->DeleteBuffersARB = fn) +#define CALL_GenBuffersARB(disp, parameters) (*((disp)->GenBuffersARB)) parameters +#define GET_GenBuffersARB(disp) ((disp)->GenBuffersARB) +#define SET_GenBuffersARB(disp, fn) ((disp)->GenBuffersARB = fn) +#define CALL_GetBufferParameterivARB(disp, parameters) (*((disp)->GetBufferParameterivARB)) parameters +#define GET_GetBufferParameterivARB(disp) ((disp)->GetBufferParameterivARB) +#define SET_GetBufferParameterivARB(disp, fn) ((disp)->GetBufferParameterivARB = fn) +#define CALL_GetBufferPointervARB(disp, parameters) (*((disp)->GetBufferPointervARB)) parameters +#define GET_GetBufferPointervARB(disp) ((disp)->GetBufferPointervARB) +#define SET_GetBufferPointervARB(disp, fn) ((disp)->GetBufferPointervARB = fn) +#define CALL_GetBufferSubDataARB(disp, parameters) (*((disp)->GetBufferSubDataARB)) parameters +#define GET_GetBufferSubDataARB(disp) ((disp)->GetBufferSubDataARB) +#define SET_GetBufferSubDataARB(disp, fn) ((disp)->GetBufferSubDataARB = fn) +#define CALL_IsBufferARB(disp, parameters) (*((disp)->IsBufferARB)) parameters +#define GET_IsBufferARB(disp) ((disp)->IsBufferARB) +#define SET_IsBufferARB(disp, fn) ((disp)->IsBufferARB = fn) +#define CALL_MapBufferARB(disp, parameters) (*((disp)->MapBufferARB)) parameters +#define GET_MapBufferARB(disp) ((disp)->MapBufferARB) +#define SET_MapBufferARB(disp, fn) ((disp)->MapBufferARB = fn) +#define CALL_UnmapBufferARB(disp, parameters) (*((disp)->UnmapBufferARB)) parameters +#define GET_UnmapBufferARB(disp) ((disp)->UnmapBufferARB) +#define SET_UnmapBufferARB(disp, fn) ((disp)->UnmapBufferARB = fn) +#define CALL_BeginQueryARB(disp, parameters) (*((disp)->BeginQueryARB)) parameters +#define GET_BeginQueryARB(disp) ((disp)->BeginQueryARB) +#define SET_BeginQueryARB(disp, fn) ((disp)->BeginQueryARB = fn) +#define CALL_DeleteQueriesARB(disp, parameters) (*((disp)->DeleteQueriesARB)) parameters +#define GET_DeleteQueriesARB(disp) ((disp)->DeleteQueriesARB) +#define SET_DeleteQueriesARB(disp, fn) ((disp)->DeleteQueriesARB = fn) +#define CALL_EndQueryARB(disp, parameters) (*((disp)->EndQueryARB)) parameters +#define GET_EndQueryARB(disp) ((disp)->EndQueryARB) +#define SET_EndQueryARB(disp, fn) ((disp)->EndQueryARB = fn) +#define CALL_GenQueriesARB(disp, parameters) (*((disp)->GenQueriesARB)) parameters +#define GET_GenQueriesARB(disp) ((disp)->GenQueriesARB) +#define SET_GenQueriesARB(disp, fn) ((disp)->GenQueriesARB = fn) +#define CALL_GetQueryObjectivARB(disp, parameters) (*((disp)->GetQueryObjectivARB)) parameters +#define GET_GetQueryObjectivARB(disp) ((disp)->GetQueryObjectivARB) +#define SET_GetQueryObjectivARB(disp, fn) ((disp)->GetQueryObjectivARB = fn) +#define CALL_GetQueryObjectuivARB(disp, parameters) (*((disp)->GetQueryObjectuivARB)) parameters +#define GET_GetQueryObjectuivARB(disp) ((disp)->GetQueryObjectuivARB) +#define SET_GetQueryObjectuivARB(disp, fn) ((disp)->GetQueryObjectuivARB = fn) +#define CALL_GetQueryivARB(disp, parameters) (*((disp)->GetQueryivARB)) parameters +#define GET_GetQueryivARB(disp) ((disp)->GetQueryivARB) +#define SET_GetQueryivARB(disp, fn) ((disp)->GetQueryivARB = fn) +#define CALL_IsQueryARB(disp, parameters) (*((disp)->IsQueryARB)) parameters +#define GET_IsQueryARB(disp) ((disp)->IsQueryARB) +#define SET_IsQueryARB(disp, fn) ((disp)->IsQueryARB = fn) +#define CALL_AttachObjectARB(disp, parameters) (*((disp)->AttachObjectARB)) parameters +#define GET_AttachObjectARB(disp) ((disp)->AttachObjectARB) +#define SET_AttachObjectARB(disp, fn) ((disp)->AttachObjectARB = fn) +#define CALL_CompileShaderARB(disp, parameters) (*((disp)->CompileShaderARB)) parameters +#define GET_CompileShaderARB(disp) ((disp)->CompileShaderARB) +#define SET_CompileShaderARB(disp, fn) ((disp)->CompileShaderARB = fn) +#define CALL_CreateProgramObjectARB(disp, parameters) (*((disp)->CreateProgramObjectARB)) parameters +#define GET_CreateProgramObjectARB(disp) ((disp)->CreateProgramObjectARB) +#define SET_CreateProgramObjectARB(disp, fn) ((disp)->CreateProgramObjectARB = fn) +#define CALL_CreateShaderObjectARB(disp, parameters) (*((disp)->CreateShaderObjectARB)) parameters +#define GET_CreateShaderObjectARB(disp) ((disp)->CreateShaderObjectARB) +#define SET_CreateShaderObjectARB(disp, fn) ((disp)->CreateShaderObjectARB = fn) +#define CALL_DeleteObjectARB(disp, parameters) (*((disp)->DeleteObjectARB)) parameters +#define GET_DeleteObjectARB(disp) ((disp)->DeleteObjectARB) +#define SET_DeleteObjectARB(disp, fn) ((disp)->DeleteObjectARB = fn) +#define CALL_DetachObjectARB(disp, parameters) (*((disp)->DetachObjectARB)) parameters +#define GET_DetachObjectARB(disp) ((disp)->DetachObjectARB) +#define SET_DetachObjectARB(disp, fn) ((disp)->DetachObjectARB = fn) +#define CALL_GetActiveUniformARB(disp, parameters) (*((disp)->GetActiveUniformARB)) parameters +#define GET_GetActiveUniformARB(disp) ((disp)->GetActiveUniformARB) +#define SET_GetActiveUniformARB(disp, fn) ((disp)->GetActiveUniformARB = fn) +#define CALL_GetAttachedObjectsARB(disp, parameters) (*((disp)->GetAttachedObjectsARB)) parameters +#define GET_GetAttachedObjectsARB(disp) ((disp)->GetAttachedObjectsARB) +#define SET_GetAttachedObjectsARB(disp, fn) ((disp)->GetAttachedObjectsARB = fn) +#define CALL_GetHandleARB(disp, parameters) (*((disp)->GetHandleARB)) parameters +#define GET_GetHandleARB(disp) ((disp)->GetHandleARB) +#define SET_GetHandleARB(disp, fn) ((disp)->GetHandleARB = fn) +#define CALL_GetInfoLogARB(disp, parameters) (*((disp)->GetInfoLogARB)) parameters +#define GET_GetInfoLogARB(disp) ((disp)->GetInfoLogARB) +#define SET_GetInfoLogARB(disp, fn) ((disp)->GetInfoLogARB = fn) +#define CALL_GetObjectParameterfvARB(disp, parameters) (*((disp)->GetObjectParameterfvARB)) parameters +#define GET_GetObjectParameterfvARB(disp) ((disp)->GetObjectParameterfvARB) +#define SET_GetObjectParameterfvARB(disp, fn) ((disp)->GetObjectParameterfvARB = fn) +#define CALL_GetObjectParameterivARB(disp, parameters) (*((disp)->GetObjectParameterivARB)) parameters +#define GET_GetObjectParameterivARB(disp) ((disp)->GetObjectParameterivARB) +#define SET_GetObjectParameterivARB(disp, fn) ((disp)->GetObjectParameterivARB = fn) +#define CALL_GetShaderSourceARB(disp, parameters) (*((disp)->GetShaderSourceARB)) parameters +#define GET_GetShaderSourceARB(disp) ((disp)->GetShaderSourceARB) +#define SET_GetShaderSourceARB(disp, fn) ((disp)->GetShaderSourceARB = fn) +#define CALL_GetUniformLocationARB(disp, parameters) (*((disp)->GetUniformLocationARB)) parameters +#define GET_GetUniformLocationARB(disp) ((disp)->GetUniformLocationARB) +#define SET_GetUniformLocationARB(disp, fn) ((disp)->GetUniformLocationARB = fn) +#define CALL_GetUniformfvARB(disp, parameters) (*((disp)->GetUniformfvARB)) parameters +#define GET_GetUniformfvARB(disp) ((disp)->GetUniformfvARB) +#define SET_GetUniformfvARB(disp, fn) ((disp)->GetUniformfvARB = fn) +#define CALL_GetUniformivARB(disp, parameters) (*((disp)->GetUniformivARB)) parameters +#define GET_GetUniformivARB(disp) ((disp)->GetUniformivARB) +#define SET_GetUniformivARB(disp, fn) ((disp)->GetUniformivARB = fn) +#define CALL_LinkProgramARB(disp, parameters) (*((disp)->LinkProgramARB)) parameters +#define GET_LinkProgramARB(disp) ((disp)->LinkProgramARB) +#define SET_LinkProgramARB(disp, fn) ((disp)->LinkProgramARB = fn) +#define CALL_ShaderSourceARB(disp, parameters) (*((disp)->ShaderSourceARB)) parameters +#define GET_ShaderSourceARB(disp) ((disp)->ShaderSourceARB) +#define SET_ShaderSourceARB(disp, fn) ((disp)->ShaderSourceARB = fn) +#define CALL_Uniform1fARB(disp, parameters) (*((disp)->Uniform1fARB)) parameters +#define GET_Uniform1fARB(disp) ((disp)->Uniform1fARB) +#define SET_Uniform1fARB(disp, fn) ((disp)->Uniform1fARB = fn) +#define CALL_Uniform1fvARB(disp, parameters) (*((disp)->Uniform1fvARB)) parameters +#define GET_Uniform1fvARB(disp) ((disp)->Uniform1fvARB) +#define SET_Uniform1fvARB(disp, fn) ((disp)->Uniform1fvARB = fn) +#define CALL_Uniform1iARB(disp, parameters) (*((disp)->Uniform1iARB)) parameters +#define GET_Uniform1iARB(disp) ((disp)->Uniform1iARB) +#define SET_Uniform1iARB(disp, fn) ((disp)->Uniform1iARB = fn) +#define CALL_Uniform1ivARB(disp, parameters) (*((disp)->Uniform1ivARB)) parameters +#define GET_Uniform1ivARB(disp) ((disp)->Uniform1ivARB) +#define SET_Uniform1ivARB(disp, fn) ((disp)->Uniform1ivARB = fn) +#define CALL_Uniform2fARB(disp, parameters) (*((disp)->Uniform2fARB)) parameters +#define GET_Uniform2fARB(disp) ((disp)->Uniform2fARB) +#define SET_Uniform2fARB(disp, fn) ((disp)->Uniform2fARB = fn) +#define CALL_Uniform2fvARB(disp, parameters) (*((disp)->Uniform2fvARB)) parameters +#define GET_Uniform2fvARB(disp) ((disp)->Uniform2fvARB) +#define SET_Uniform2fvARB(disp, fn) ((disp)->Uniform2fvARB = fn) +#define CALL_Uniform2iARB(disp, parameters) (*((disp)->Uniform2iARB)) parameters +#define GET_Uniform2iARB(disp) ((disp)->Uniform2iARB) +#define SET_Uniform2iARB(disp, fn) ((disp)->Uniform2iARB = fn) +#define CALL_Uniform2ivARB(disp, parameters) (*((disp)->Uniform2ivARB)) parameters +#define GET_Uniform2ivARB(disp) ((disp)->Uniform2ivARB) +#define SET_Uniform2ivARB(disp, fn) ((disp)->Uniform2ivARB = fn) +#define CALL_Uniform3fARB(disp, parameters) (*((disp)->Uniform3fARB)) parameters +#define GET_Uniform3fARB(disp) ((disp)->Uniform3fARB) +#define SET_Uniform3fARB(disp, fn) ((disp)->Uniform3fARB = fn) +#define CALL_Uniform3fvARB(disp, parameters) (*((disp)->Uniform3fvARB)) parameters +#define GET_Uniform3fvARB(disp) ((disp)->Uniform3fvARB) +#define SET_Uniform3fvARB(disp, fn) ((disp)->Uniform3fvARB = fn) +#define CALL_Uniform3iARB(disp, parameters) (*((disp)->Uniform3iARB)) parameters +#define GET_Uniform3iARB(disp) ((disp)->Uniform3iARB) +#define SET_Uniform3iARB(disp, fn) ((disp)->Uniform3iARB = fn) +#define CALL_Uniform3ivARB(disp, parameters) (*((disp)->Uniform3ivARB)) parameters +#define GET_Uniform3ivARB(disp) ((disp)->Uniform3ivARB) +#define SET_Uniform3ivARB(disp, fn) ((disp)->Uniform3ivARB = fn) +#define CALL_Uniform4fARB(disp, parameters) (*((disp)->Uniform4fARB)) parameters +#define GET_Uniform4fARB(disp) ((disp)->Uniform4fARB) +#define SET_Uniform4fARB(disp, fn) ((disp)->Uniform4fARB = fn) +#define CALL_Uniform4fvARB(disp, parameters) (*((disp)->Uniform4fvARB)) parameters +#define GET_Uniform4fvARB(disp) ((disp)->Uniform4fvARB) +#define SET_Uniform4fvARB(disp, fn) ((disp)->Uniform4fvARB = fn) +#define CALL_Uniform4iARB(disp, parameters) (*((disp)->Uniform4iARB)) parameters +#define GET_Uniform4iARB(disp) ((disp)->Uniform4iARB) +#define SET_Uniform4iARB(disp, fn) ((disp)->Uniform4iARB = fn) +#define CALL_Uniform4ivARB(disp, parameters) (*((disp)->Uniform4ivARB)) parameters +#define GET_Uniform4ivARB(disp) ((disp)->Uniform4ivARB) +#define SET_Uniform4ivARB(disp, fn) ((disp)->Uniform4ivARB = fn) +#define CALL_UniformMatrix2fvARB(disp, parameters) (*((disp)->UniformMatrix2fvARB)) parameters +#define GET_UniformMatrix2fvARB(disp) ((disp)->UniformMatrix2fvARB) +#define SET_UniformMatrix2fvARB(disp, fn) ((disp)->UniformMatrix2fvARB = fn) +#define CALL_UniformMatrix3fvARB(disp, parameters) (*((disp)->UniformMatrix3fvARB)) parameters +#define GET_UniformMatrix3fvARB(disp) ((disp)->UniformMatrix3fvARB) +#define SET_UniformMatrix3fvARB(disp, fn) ((disp)->UniformMatrix3fvARB = fn) +#define CALL_UniformMatrix4fvARB(disp, parameters) (*((disp)->UniformMatrix4fvARB)) parameters +#define GET_UniformMatrix4fvARB(disp) ((disp)->UniformMatrix4fvARB) +#define SET_UniformMatrix4fvARB(disp, fn) ((disp)->UniformMatrix4fvARB = fn) +#define CALL_UseProgramObjectARB(disp, parameters) (*((disp)->UseProgramObjectARB)) parameters +#define GET_UseProgramObjectARB(disp) ((disp)->UseProgramObjectARB) +#define SET_UseProgramObjectARB(disp, fn) ((disp)->UseProgramObjectARB = fn) +#define CALL_ValidateProgramARB(disp, parameters) (*((disp)->ValidateProgramARB)) parameters +#define GET_ValidateProgramARB(disp) ((disp)->ValidateProgramARB) +#define SET_ValidateProgramARB(disp, fn) ((disp)->ValidateProgramARB = fn) +#define CALL_BindAttribLocationARB(disp, parameters) (*((disp)->BindAttribLocationARB)) parameters +#define GET_BindAttribLocationARB(disp) ((disp)->BindAttribLocationARB) +#define SET_BindAttribLocationARB(disp, fn) ((disp)->BindAttribLocationARB = fn) +#define CALL_GetActiveAttribARB(disp, parameters) (*((disp)->GetActiveAttribARB)) parameters +#define GET_GetActiveAttribARB(disp) ((disp)->GetActiveAttribARB) +#define SET_GetActiveAttribARB(disp, fn) ((disp)->GetActiveAttribARB = fn) +#define CALL_GetAttribLocationARB(disp, parameters) (*((disp)->GetAttribLocationARB)) parameters +#define GET_GetAttribLocationARB(disp) ((disp)->GetAttribLocationARB) +#define SET_GetAttribLocationARB(disp, fn) ((disp)->GetAttribLocationARB = fn) +#define CALL_DrawBuffersARB(disp, parameters) (*((disp)->DrawBuffersARB)) parameters +#define GET_DrawBuffersARB(disp) ((disp)->DrawBuffersARB) +#define SET_DrawBuffersARB(disp, fn) ((disp)->DrawBuffersARB = fn) +#define CALL_PolygonOffsetEXT(disp, parameters) (*((disp)->PolygonOffsetEXT)) parameters +#define GET_PolygonOffsetEXT(disp) ((disp)->PolygonOffsetEXT) +#define SET_PolygonOffsetEXT(disp, fn) ((disp)->PolygonOffsetEXT = fn) +#define CALL_GetPixelTexGenParameterfvSGIS(disp, parameters) (*((disp)->GetPixelTexGenParameterfvSGIS)) parameters +#define GET_GetPixelTexGenParameterfvSGIS(disp) ((disp)->GetPixelTexGenParameterfvSGIS) +#define SET_GetPixelTexGenParameterfvSGIS(disp, fn) ((disp)->GetPixelTexGenParameterfvSGIS = fn) +#define CALL_GetPixelTexGenParameterivSGIS(disp, parameters) (*((disp)->GetPixelTexGenParameterivSGIS)) parameters +#define GET_GetPixelTexGenParameterivSGIS(disp) ((disp)->GetPixelTexGenParameterivSGIS) +#define SET_GetPixelTexGenParameterivSGIS(disp, fn) ((disp)->GetPixelTexGenParameterivSGIS = fn) +#define CALL_PixelTexGenParameterfSGIS(disp, parameters) (*((disp)->PixelTexGenParameterfSGIS)) parameters +#define GET_PixelTexGenParameterfSGIS(disp) ((disp)->PixelTexGenParameterfSGIS) +#define SET_PixelTexGenParameterfSGIS(disp, fn) ((disp)->PixelTexGenParameterfSGIS = fn) +#define CALL_PixelTexGenParameterfvSGIS(disp, parameters) (*((disp)->PixelTexGenParameterfvSGIS)) parameters +#define GET_PixelTexGenParameterfvSGIS(disp) ((disp)->PixelTexGenParameterfvSGIS) +#define SET_PixelTexGenParameterfvSGIS(disp, fn) ((disp)->PixelTexGenParameterfvSGIS = fn) +#define CALL_PixelTexGenParameteriSGIS(disp, parameters) (*((disp)->PixelTexGenParameteriSGIS)) parameters +#define GET_PixelTexGenParameteriSGIS(disp) ((disp)->PixelTexGenParameteriSGIS) +#define SET_PixelTexGenParameteriSGIS(disp, fn) ((disp)->PixelTexGenParameteriSGIS = fn) +#define CALL_PixelTexGenParameterivSGIS(disp, parameters) (*((disp)->PixelTexGenParameterivSGIS)) parameters +#define GET_PixelTexGenParameterivSGIS(disp) ((disp)->PixelTexGenParameterivSGIS) +#define SET_PixelTexGenParameterivSGIS(disp, fn) ((disp)->PixelTexGenParameterivSGIS = fn) +#define CALL_SampleMaskSGIS(disp, parameters) (*((disp)->SampleMaskSGIS)) parameters +#define GET_SampleMaskSGIS(disp) ((disp)->SampleMaskSGIS) +#define SET_SampleMaskSGIS(disp, fn) ((disp)->SampleMaskSGIS = fn) +#define CALL_SamplePatternSGIS(disp, parameters) (*((disp)->SamplePatternSGIS)) parameters +#define GET_SamplePatternSGIS(disp) ((disp)->SamplePatternSGIS) +#define SET_SamplePatternSGIS(disp, fn) ((disp)->SamplePatternSGIS = fn) +#define CALL_ColorPointerEXT(disp, parameters) (*((disp)->ColorPointerEXT)) parameters +#define GET_ColorPointerEXT(disp) ((disp)->ColorPointerEXT) +#define SET_ColorPointerEXT(disp, fn) ((disp)->ColorPointerEXT = fn) +#define CALL_EdgeFlagPointerEXT(disp, parameters) (*((disp)->EdgeFlagPointerEXT)) parameters +#define GET_EdgeFlagPointerEXT(disp) ((disp)->EdgeFlagPointerEXT) +#define SET_EdgeFlagPointerEXT(disp, fn) ((disp)->EdgeFlagPointerEXT = fn) +#define CALL_IndexPointerEXT(disp, parameters) (*((disp)->IndexPointerEXT)) parameters +#define GET_IndexPointerEXT(disp) ((disp)->IndexPointerEXT) +#define SET_IndexPointerEXT(disp, fn) ((disp)->IndexPointerEXT = fn) +#define CALL_NormalPointerEXT(disp, parameters) (*((disp)->NormalPointerEXT)) parameters +#define GET_NormalPointerEXT(disp) ((disp)->NormalPointerEXT) +#define SET_NormalPointerEXT(disp, fn) ((disp)->NormalPointerEXT = fn) +#define CALL_TexCoordPointerEXT(disp, parameters) (*((disp)->TexCoordPointerEXT)) parameters +#define GET_TexCoordPointerEXT(disp) ((disp)->TexCoordPointerEXT) +#define SET_TexCoordPointerEXT(disp, fn) ((disp)->TexCoordPointerEXT = fn) +#define CALL_VertexPointerEXT(disp, parameters) (*((disp)->VertexPointerEXT)) parameters +#define GET_VertexPointerEXT(disp) ((disp)->VertexPointerEXT) +#define SET_VertexPointerEXT(disp, fn) ((disp)->VertexPointerEXT = fn) +#define CALL_PointParameterfEXT(disp, parameters) (*((disp)->PointParameterfEXT)) parameters +#define GET_PointParameterfEXT(disp) ((disp)->PointParameterfEXT) +#define SET_PointParameterfEXT(disp, fn) ((disp)->PointParameterfEXT = fn) +#define CALL_PointParameterfvEXT(disp, parameters) (*((disp)->PointParameterfvEXT)) parameters +#define GET_PointParameterfvEXT(disp) ((disp)->PointParameterfvEXT) +#define SET_PointParameterfvEXT(disp, fn) ((disp)->PointParameterfvEXT = fn) +#define CALL_LockArraysEXT(disp, parameters) (*((disp)->LockArraysEXT)) parameters +#define GET_LockArraysEXT(disp) ((disp)->LockArraysEXT) +#define SET_LockArraysEXT(disp, fn) ((disp)->LockArraysEXT = fn) +#define CALL_UnlockArraysEXT(disp, parameters) (*((disp)->UnlockArraysEXT)) parameters +#define GET_UnlockArraysEXT(disp) ((disp)->UnlockArraysEXT) +#define SET_UnlockArraysEXT(disp, fn) ((disp)->UnlockArraysEXT = fn) +#define CALL_CullParameterdvEXT(disp, parameters) (*((disp)->CullParameterdvEXT)) parameters +#define GET_CullParameterdvEXT(disp) ((disp)->CullParameterdvEXT) +#define SET_CullParameterdvEXT(disp, fn) ((disp)->CullParameterdvEXT = fn) +#define CALL_CullParameterfvEXT(disp, parameters) (*((disp)->CullParameterfvEXT)) parameters +#define GET_CullParameterfvEXT(disp) ((disp)->CullParameterfvEXT) +#define SET_CullParameterfvEXT(disp, fn) ((disp)->CullParameterfvEXT = fn) +#define CALL_SecondaryColor3bEXT(disp, parameters) (*((disp)->SecondaryColor3bEXT)) parameters +#define GET_SecondaryColor3bEXT(disp) ((disp)->SecondaryColor3bEXT) +#define SET_SecondaryColor3bEXT(disp, fn) ((disp)->SecondaryColor3bEXT = fn) +#define CALL_SecondaryColor3bvEXT(disp, parameters) (*((disp)->SecondaryColor3bvEXT)) parameters +#define GET_SecondaryColor3bvEXT(disp) ((disp)->SecondaryColor3bvEXT) +#define SET_SecondaryColor3bvEXT(disp, fn) ((disp)->SecondaryColor3bvEXT = fn) +#define CALL_SecondaryColor3dEXT(disp, parameters) (*((disp)->SecondaryColor3dEXT)) parameters +#define GET_SecondaryColor3dEXT(disp) ((disp)->SecondaryColor3dEXT) +#define SET_SecondaryColor3dEXT(disp, fn) ((disp)->SecondaryColor3dEXT = fn) +#define CALL_SecondaryColor3dvEXT(disp, parameters) (*((disp)->SecondaryColor3dvEXT)) parameters +#define GET_SecondaryColor3dvEXT(disp) ((disp)->SecondaryColor3dvEXT) +#define SET_SecondaryColor3dvEXT(disp, fn) ((disp)->SecondaryColor3dvEXT = fn) +#define CALL_SecondaryColor3fEXT(disp, parameters) (*((disp)->SecondaryColor3fEXT)) parameters +#define GET_SecondaryColor3fEXT(disp) ((disp)->SecondaryColor3fEXT) +#define SET_SecondaryColor3fEXT(disp, fn) ((disp)->SecondaryColor3fEXT = fn) +#define CALL_SecondaryColor3fvEXT(disp, parameters) (*((disp)->SecondaryColor3fvEXT)) parameters +#define GET_SecondaryColor3fvEXT(disp) ((disp)->SecondaryColor3fvEXT) +#define SET_SecondaryColor3fvEXT(disp, fn) ((disp)->SecondaryColor3fvEXT = fn) +#define CALL_SecondaryColor3iEXT(disp, parameters) (*((disp)->SecondaryColor3iEXT)) parameters +#define GET_SecondaryColor3iEXT(disp) ((disp)->SecondaryColor3iEXT) +#define SET_SecondaryColor3iEXT(disp, fn) ((disp)->SecondaryColor3iEXT = fn) +#define CALL_SecondaryColor3ivEXT(disp, parameters) (*((disp)->SecondaryColor3ivEXT)) parameters +#define GET_SecondaryColor3ivEXT(disp) ((disp)->SecondaryColor3ivEXT) +#define SET_SecondaryColor3ivEXT(disp, fn) ((disp)->SecondaryColor3ivEXT = fn) +#define CALL_SecondaryColor3sEXT(disp, parameters) (*((disp)->SecondaryColor3sEXT)) parameters +#define GET_SecondaryColor3sEXT(disp) ((disp)->SecondaryColor3sEXT) +#define SET_SecondaryColor3sEXT(disp, fn) ((disp)->SecondaryColor3sEXT = fn) +#define CALL_SecondaryColor3svEXT(disp, parameters) (*((disp)->SecondaryColor3svEXT)) parameters +#define GET_SecondaryColor3svEXT(disp) ((disp)->SecondaryColor3svEXT) +#define SET_SecondaryColor3svEXT(disp, fn) ((disp)->SecondaryColor3svEXT = fn) +#define CALL_SecondaryColor3ubEXT(disp, parameters) (*((disp)->SecondaryColor3ubEXT)) parameters +#define GET_SecondaryColor3ubEXT(disp) ((disp)->SecondaryColor3ubEXT) +#define SET_SecondaryColor3ubEXT(disp, fn) ((disp)->SecondaryColor3ubEXT = fn) +#define CALL_SecondaryColor3ubvEXT(disp, parameters) (*((disp)->SecondaryColor3ubvEXT)) parameters +#define GET_SecondaryColor3ubvEXT(disp) ((disp)->SecondaryColor3ubvEXT) +#define SET_SecondaryColor3ubvEXT(disp, fn) ((disp)->SecondaryColor3ubvEXT = fn) +#define CALL_SecondaryColor3uiEXT(disp, parameters) (*((disp)->SecondaryColor3uiEXT)) parameters +#define GET_SecondaryColor3uiEXT(disp) ((disp)->SecondaryColor3uiEXT) +#define SET_SecondaryColor3uiEXT(disp, fn) ((disp)->SecondaryColor3uiEXT = fn) +#define CALL_SecondaryColor3uivEXT(disp, parameters) (*((disp)->SecondaryColor3uivEXT)) parameters +#define GET_SecondaryColor3uivEXT(disp) ((disp)->SecondaryColor3uivEXT) +#define SET_SecondaryColor3uivEXT(disp, fn) ((disp)->SecondaryColor3uivEXT = fn) +#define CALL_SecondaryColor3usEXT(disp, parameters) (*((disp)->SecondaryColor3usEXT)) parameters +#define GET_SecondaryColor3usEXT(disp) ((disp)->SecondaryColor3usEXT) +#define SET_SecondaryColor3usEXT(disp, fn) ((disp)->SecondaryColor3usEXT = fn) +#define CALL_SecondaryColor3usvEXT(disp, parameters) (*((disp)->SecondaryColor3usvEXT)) parameters +#define GET_SecondaryColor3usvEXT(disp) ((disp)->SecondaryColor3usvEXT) +#define SET_SecondaryColor3usvEXT(disp, fn) ((disp)->SecondaryColor3usvEXT = fn) +#define CALL_SecondaryColorPointerEXT(disp, parameters) (*((disp)->SecondaryColorPointerEXT)) parameters +#define GET_SecondaryColorPointerEXT(disp) ((disp)->SecondaryColorPointerEXT) +#define SET_SecondaryColorPointerEXT(disp, fn) ((disp)->SecondaryColorPointerEXT = fn) +#define CALL_MultiDrawArraysEXT(disp, parameters) (*((disp)->MultiDrawArraysEXT)) parameters +#define GET_MultiDrawArraysEXT(disp) ((disp)->MultiDrawArraysEXT) +#define SET_MultiDrawArraysEXT(disp, fn) ((disp)->MultiDrawArraysEXT = fn) +#define CALL_MultiDrawElementsEXT(disp, parameters) (*((disp)->MultiDrawElementsEXT)) parameters +#define GET_MultiDrawElementsEXT(disp) ((disp)->MultiDrawElementsEXT) +#define SET_MultiDrawElementsEXT(disp, fn) ((disp)->MultiDrawElementsEXT = fn) +#define CALL_FogCoordPointerEXT(disp, parameters) (*((disp)->FogCoordPointerEXT)) parameters +#define GET_FogCoordPointerEXT(disp) ((disp)->FogCoordPointerEXT) +#define SET_FogCoordPointerEXT(disp, fn) ((disp)->FogCoordPointerEXT = fn) +#define CALL_FogCoorddEXT(disp, parameters) (*((disp)->FogCoorddEXT)) parameters +#define GET_FogCoorddEXT(disp) ((disp)->FogCoorddEXT) +#define SET_FogCoorddEXT(disp, fn) ((disp)->FogCoorddEXT = fn) +#define CALL_FogCoorddvEXT(disp, parameters) (*((disp)->FogCoorddvEXT)) parameters +#define GET_FogCoorddvEXT(disp) ((disp)->FogCoorddvEXT) +#define SET_FogCoorddvEXT(disp, fn) ((disp)->FogCoorddvEXT = fn) +#define CALL_FogCoordfEXT(disp, parameters) (*((disp)->FogCoordfEXT)) parameters +#define GET_FogCoordfEXT(disp) ((disp)->FogCoordfEXT) +#define SET_FogCoordfEXT(disp, fn) ((disp)->FogCoordfEXT = fn) +#define CALL_FogCoordfvEXT(disp, parameters) (*((disp)->FogCoordfvEXT)) parameters +#define GET_FogCoordfvEXT(disp) ((disp)->FogCoordfvEXT) +#define SET_FogCoordfvEXT(disp, fn) ((disp)->FogCoordfvEXT = fn) +#define CALL_PixelTexGenSGIX(disp, parameters) (*((disp)->PixelTexGenSGIX)) parameters +#define GET_PixelTexGenSGIX(disp) ((disp)->PixelTexGenSGIX) +#define SET_PixelTexGenSGIX(disp, fn) ((disp)->PixelTexGenSGIX = fn) +#define CALL_BlendFuncSeparateEXT(disp, parameters) (*((disp)->BlendFuncSeparateEXT)) parameters +#define GET_BlendFuncSeparateEXT(disp) ((disp)->BlendFuncSeparateEXT) +#define SET_BlendFuncSeparateEXT(disp, fn) ((disp)->BlendFuncSeparateEXT = fn) +#define CALL_FlushVertexArrayRangeNV(disp, parameters) (*((disp)->FlushVertexArrayRangeNV)) parameters +#define GET_FlushVertexArrayRangeNV(disp) ((disp)->FlushVertexArrayRangeNV) +#define SET_FlushVertexArrayRangeNV(disp, fn) ((disp)->FlushVertexArrayRangeNV = fn) +#define CALL_VertexArrayRangeNV(disp, parameters) (*((disp)->VertexArrayRangeNV)) parameters +#define GET_VertexArrayRangeNV(disp) ((disp)->VertexArrayRangeNV) +#define SET_VertexArrayRangeNV(disp, fn) ((disp)->VertexArrayRangeNV = fn) +#define CALL_CombinerInputNV(disp, parameters) (*((disp)->CombinerInputNV)) parameters +#define GET_CombinerInputNV(disp) ((disp)->CombinerInputNV) +#define SET_CombinerInputNV(disp, fn) ((disp)->CombinerInputNV = fn) +#define CALL_CombinerOutputNV(disp, parameters) (*((disp)->CombinerOutputNV)) parameters +#define GET_CombinerOutputNV(disp) ((disp)->CombinerOutputNV) +#define SET_CombinerOutputNV(disp, fn) ((disp)->CombinerOutputNV = fn) +#define CALL_CombinerParameterfNV(disp, parameters) (*((disp)->CombinerParameterfNV)) parameters +#define GET_CombinerParameterfNV(disp) ((disp)->CombinerParameterfNV) +#define SET_CombinerParameterfNV(disp, fn) ((disp)->CombinerParameterfNV = fn) +#define CALL_CombinerParameterfvNV(disp, parameters) (*((disp)->CombinerParameterfvNV)) parameters +#define GET_CombinerParameterfvNV(disp) ((disp)->CombinerParameterfvNV) +#define SET_CombinerParameterfvNV(disp, fn) ((disp)->CombinerParameterfvNV = fn) +#define CALL_CombinerParameteriNV(disp, parameters) (*((disp)->CombinerParameteriNV)) parameters +#define GET_CombinerParameteriNV(disp) ((disp)->CombinerParameteriNV) +#define SET_CombinerParameteriNV(disp, fn) ((disp)->CombinerParameteriNV = fn) +#define CALL_CombinerParameterivNV(disp, parameters) (*((disp)->CombinerParameterivNV)) parameters +#define GET_CombinerParameterivNV(disp) ((disp)->CombinerParameterivNV) +#define SET_CombinerParameterivNV(disp, fn) ((disp)->CombinerParameterivNV = fn) +#define CALL_FinalCombinerInputNV(disp, parameters) (*((disp)->FinalCombinerInputNV)) parameters +#define GET_FinalCombinerInputNV(disp) ((disp)->FinalCombinerInputNV) +#define SET_FinalCombinerInputNV(disp, fn) ((disp)->FinalCombinerInputNV = fn) +#define CALL_GetCombinerInputParameterfvNV(disp, parameters) (*((disp)->GetCombinerInputParameterfvNV)) parameters +#define GET_GetCombinerInputParameterfvNV(disp) ((disp)->GetCombinerInputParameterfvNV) +#define SET_GetCombinerInputParameterfvNV(disp, fn) ((disp)->GetCombinerInputParameterfvNV = fn) +#define CALL_GetCombinerInputParameterivNV(disp, parameters) (*((disp)->GetCombinerInputParameterivNV)) parameters +#define GET_GetCombinerInputParameterivNV(disp) ((disp)->GetCombinerInputParameterivNV) +#define SET_GetCombinerInputParameterivNV(disp, fn) ((disp)->GetCombinerInputParameterivNV = fn) +#define CALL_GetCombinerOutputParameterfvNV(disp, parameters) (*((disp)->GetCombinerOutputParameterfvNV)) parameters +#define GET_GetCombinerOutputParameterfvNV(disp) ((disp)->GetCombinerOutputParameterfvNV) +#define SET_GetCombinerOutputParameterfvNV(disp, fn) ((disp)->GetCombinerOutputParameterfvNV = fn) +#define CALL_GetCombinerOutputParameterivNV(disp, parameters) (*((disp)->GetCombinerOutputParameterivNV)) parameters +#define GET_GetCombinerOutputParameterivNV(disp) ((disp)->GetCombinerOutputParameterivNV) +#define SET_GetCombinerOutputParameterivNV(disp, fn) ((disp)->GetCombinerOutputParameterivNV = fn) +#define CALL_GetFinalCombinerInputParameterfvNV(disp, parameters) (*((disp)->GetFinalCombinerInputParameterfvNV)) parameters +#define GET_GetFinalCombinerInputParameterfvNV(disp) ((disp)->GetFinalCombinerInputParameterfvNV) +#define SET_GetFinalCombinerInputParameterfvNV(disp, fn) ((disp)->GetFinalCombinerInputParameterfvNV = fn) +#define CALL_GetFinalCombinerInputParameterivNV(disp, parameters) (*((disp)->GetFinalCombinerInputParameterivNV)) parameters +#define GET_GetFinalCombinerInputParameterivNV(disp) ((disp)->GetFinalCombinerInputParameterivNV) +#define SET_GetFinalCombinerInputParameterivNV(disp, fn) ((disp)->GetFinalCombinerInputParameterivNV = fn) +#define CALL_ResizeBuffersMESA(disp, parameters) (*((disp)->ResizeBuffersMESA)) parameters +#define GET_ResizeBuffersMESA(disp) ((disp)->ResizeBuffersMESA) +#define SET_ResizeBuffersMESA(disp, fn) ((disp)->ResizeBuffersMESA = fn) +#define CALL_WindowPos2dMESA(disp, parameters) (*((disp)->WindowPos2dMESA)) parameters +#define GET_WindowPos2dMESA(disp) ((disp)->WindowPos2dMESA) +#define SET_WindowPos2dMESA(disp, fn) ((disp)->WindowPos2dMESA = fn) +#define CALL_WindowPos2dvMESA(disp, parameters) (*((disp)->WindowPos2dvMESA)) parameters +#define GET_WindowPos2dvMESA(disp) ((disp)->WindowPos2dvMESA) +#define SET_WindowPos2dvMESA(disp, fn) ((disp)->WindowPos2dvMESA = fn) +#define CALL_WindowPos2fMESA(disp, parameters) (*((disp)->WindowPos2fMESA)) parameters +#define GET_WindowPos2fMESA(disp) ((disp)->WindowPos2fMESA) +#define SET_WindowPos2fMESA(disp, fn) ((disp)->WindowPos2fMESA = fn) +#define CALL_WindowPos2fvMESA(disp, parameters) (*((disp)->WindowPos2fvMESA)) parameters +#define GET_WindowPos2fvMESA(disp) ((disp)->WindowPos2fvMESA) +#define SET_WindowPos2fvMESA(disp, fn) ((disp)->WindowPos2fvMESA = fn) +#define CALL_WindowPos2iMESA(disp, parameters) (*((disp)->WindowPos2iMESA)) parameters +#define GET_WindowPos2iMESA(disp) ((disp)->WindowPos2iMESA) +#define SET_WindowPos2iMESA(disp, fn) ((disp)->WindowPos2iMESA = fn) +#define CALL_WindowPos2ivMESA(disp, parameters) (*((disp)->WindowPos2ivMESA)) parameters +#define GET_WindowPos2ivMESA(disp) ((disp)->WindowPos2ivMESA) +#define SET_WindowPos2ivMESA(disp, fn) ((disp)->WindowPos2ivMESA = fn) +#define CALL_WindowPos2sMESA(disp, parameters) (*((disp)->WindowPos2sMESA)) parameters +#define GET_WindowPos2sMESA(disp) ((disp)->WindowPos2sMESA) +#define SET_WindowPos2sMESA(disp, fn) ((disp)->WindowPos2sMESA = fn) +#define CALL_WindowPos2svMESA(disp, parameters) (*((disp)->WindowPos2svMESA)) parameters +#define GET_WindowPos2svMESA(disp) ((disp)->WindowPos2svMESA) +#define SET_WindowPos2svMESA(disp, fn) ((disp)->WindowPos2svMESA = fn) +#define CALL_WindowPos3dMESA(disp, parameters) (*((disp)->WindowPos3dMESA)) parameters +#define GET_WindowPos3dMESA(disp) ((disp)->WindowPos3dMESA) +#define SET_WindowPos3dMESA(disp, fn) ((disp)->WindowPos3dMESA = fn) +#define CALL_WindowPos3dvMESA(disp, parameters) (*((disp)->WindowPos3dvMESA)) parameters +#define GET_WindowPos3dvMESA(disp) ((disp)->WindowPos3dvMESA) +#define SET_WindowPos3dvMESA(disp, fn) ((disp)->WindowPos3dvMESA = fn) +#define CALL_WindowPos3fMESA(disp, parameters) (*((disp)->WindowPos3fMESA)) parameters +#define GET_WindowPos3fMESA(disp) ((disp)->WindowPos3fMESA) +#define SET_WindowPos3fMESA(disp, fn) ((disp)->WindowPos3fMESA = fn) +#define CALL_WindowPos3fvMESA(disp, parameters) (*((disp)->WindowPos3fvMESA)) parameters +#define GET_WindowPos3fvMESA(disp) ((disp)->WindowPos3fvMESA) +#define SET_WindowPos3fvMESA(disp, fn) ((disp)->WindowPos3fvMESA = fn) +#define CALL_WindowPos3iMESA(disp, parameters) (*((disp)->WindowPos3iMESA)) parameters +#define GET_WindowPos3iMESA(disp) ((disp)->WindowPos3iMESA) +#define SET_WindowPos3iMESA(disp, fn) ((disp)->WindowPos3iMESA = fn) +#define CALL_WindowPos3ivMESA(disp, parameters) (*((disp)->WindowPos3ivMESA)) parameters +#define GET_WindowPos3ivMESA(disp) ((disp)->WindowPos3ivMESA) +#define SET_WindowPos3ivMESA(disp, fn) ((disp)->WindowPos3ivMESA = fn) +#define CALL_WindowPos3sMESA(disp, parameters) (*((disp)->WindowPos3sMESA)) parameters +#define GET_WindowPos3sMESA(disp) ((disp)->WindowPos3sMESA) +#define SET_WindowPos3sMESA(disp, fn) ((disp)->WindowPos3sMESA = fn) +#define CALL_WindowPos3svMESA(disp, parameters) (*((disp)->WindowPos3svMESA)) parameters +#define GET_WindowPos3svMESA(disp) ((disp)->WindowPos3svMESA) +#define SET_WindowPos3svMESA(disp, fn) ((disp)->WindowPos3svMESA = fn) +#define CALL_WindowPos4dMESA(disp, parameters) (*((disp)->WindowPos4dMESA)) parameters +#define GET_WindowPos4dMESA(disp) ((disp)->WindowPos4dMESA) +#define SET_WindowPos4dMESA(disp, fn) ((disp)->WindowPos4dMESA = fn) +#define CALL_WindowPos4dvMESA(disp, parameters) (*((disp)->WindowPos4dvMESA)) parameters +#define GET_WindowPos4dvMESA(disp) ((disp)->WindowPos4dvMESA) +#define SET_WindowPos4dvMESA(disp, fn) ((disp)->WindowPos4dvMESA = fn) +#define CALL_WindowPos4fMESA(disp, parameters) (*((disp)->WindowPos4fMESA)) parameters +#define GET_WindowPos4fMESA(disp) ((disp)->WindowPos4fMESA) +#define SET_WindowPos4fMESA(disp, fn) ((disp)->WindowPos4fMESA = fn) +#define CALL_WindowPos4fvMESA(disp, parameters) (*((disp)->WindowPos4fvMESA)) parameters +#define GET_WindowPos4fvMESA(disp) ((disp)->WindowPos4fvMESA) +#define SET_WindowPos4fvMESA(disp, fn) ((disp)->WindowPos4fvMESA = fn) +#define CALL_WindowPos4iMESA(disp, parameters) (*((disp)->WindowPos4iMESA)) parameters +#define GET_WindowPos4iMESA(disp) ((disp)->WindowPos4iMESA) +#define SET_WindowPos4iMESA(disp, fn) ((disp)->WindowPos4iMESA = fn) +#define CALL_WindowPos4ivMESA(disp, parameters) (*((disp)->WindowPos4ivMESA)) parameters +#define GET_WindowPos4ivMESA(disp) ((disp)->WindowPos4ivMESA) +#define SET_WindowPos4ivMESA(disp, fn) ((disp)->WindowPos4ivMESA = fn) +#define CALL_WindowPos4sMESA(disp, parameters) (*((disp)->WindowPos4sMESA)) parameters +#define GET_WindowPos4sMESA(disp) ((disp)->WindowPos4sMESA) +#define SET_WindowPos4sMESA(disp, fn) ((disp)->WindowPos4sMESA = fn) +#define CALL_WindowPos4svMESA(disp, parameters) (*((disp)->WindowPos4svMESA)) parameters +#define GET_WindowPos4svMESA(disp) ((disp)->WindowPos4svMESA) +#define SET_WindowPos4svMESA(disp, fn) ((disp)->WindowPos4svMESA = fn) +#define CALL_MultiModeDrawArraysIBM(disp, parameters) (*((disp)->MultiModeDrawArraysIBM)) parameters +#define GET_MultiModeDrawArraysIBM(disp) ((disp)->MultiModeDrawArraysIBM) +#define SET_MultiModeDrawArraysIBM(disp, fn) ((disp)->MultiModeDrawArraysIBM = fn) +#define CALL_MultiModeDrawElementsIBM(disp, parameters) (*((disp)->MultiModeDrawElementsIBM)) parameters +#define GET_MultiModeDrawElementsIBM(disp) ((disp)->MultiModeDrawElementsIBM) +#define SET_MultiModeDrawElementsIBM(disp, fn) ((disp)->MultiModeDrawElementsIBM = fn) +#define CALL_DeleteFencesNV(disp, parameters) (*((disp)->DeleteFencesNV)) parameters +#define GET_DeleteFencesNV(disp) ((disp)->DeleteFencesNV) +#define SET_DeleteFencesNV(disp, fn) ((disp)->DeleteFencesNV = fn) +#define CALL_FinishFenceNV(disp, parameters) (*((disp)->FinishFenceNV)) parameters +#define GET_FinishFenceNV(disp) ((disp)->FinishFenceNV) +#define SET_FinishFenceNV(disp, fn) ((disp)->FinishFenceNV = fn) +#define CALL_GenFencesNV(disp, parameters) (*((disp)->GenFencesNV)) parameters +#define GET_GenFencesNV(disp) ((disp)->GenFencesNV) +#define SET_GenFencesNV(disp, fn) ((disp)->GenFencesNV = fn) +#define CALL_GetFenceivNV(disp, parameters) (*((disp)->GetFenceivNV)) parameters +#define GET_GetFenceivNV(disp) ((disp)->GetFenceivNV) +#define SET_GetFenceivNV(disp, fn) ((disp)->GetFenceivNV = fn) +#define CALL_IsFenceNV(disp, parameters) (*((disp)->IsFenceNV)) parameters +#define GET_IsFenceNV(disp) ((disp)->IsFenceNV) +#define SET_IsFenceNV(disp, fn) ((disp)->IsFenceNV = fn) +#define CALL_SetFenceNV(disp, parameters) (*((disp)->SetFenceNV)) parameters +#define GET_SetFenceNV(disp) ((disp)->SetFenceNV) +#define SET_SetFenceNV(disp, fn) ((disp)->SetFenceNV = fn) +#define CALL_TestFenceNV(disp, parameters) (*((disp)->TestFenceNV)) parameters +#define GET_TestFenceNV(disp) ((disp)->TestFenceNV) +#define SET_TestFenceNV(disp, fn) ((disp)->TestFenceNV = fn) +#define CALL_AreProgramsResidentNV(disp, parameters) (*((disp)->AreProgramsResidentNV)) parameters +#define GET_AreProgramsResidentNV(disp) ((disp)->AreProgramsResidentNV) +#define SET_AreProgramsResidentNV(disp, fn) ((disp)->AreProgramsResidentNV = fn) +#define CALL_BindProgramNV(disp, parameters) (*((disp)->BindProgramNV)) parameters +#define GET_BindProgramNV(disp) ((disp)->BindProgramNV) +#define SET_BindProgramNV(disp, fn) ((disp)->BindProgramNV = fn) +#define CALL_DeleteProgramsNV(disp, parameters) (*((disp)->DeleteProgramsNV)) parameters +#define GET_DeleteProgramsNV(disp) ((disp)->DeleteProgramsNV) +#define SET_DeleteProgramsNV(disp, fn) ((disp)->DeleteProgramsNV = fn) +#define CALL_ExecuteProgramNV(disp, parameters) (*((disp)->ExecuteProgramNV)) parameters +#define GET_ExecuteProgramNV(disp) ((disp)->ExecuteProgramNV) +#define SET_ExecuteProgramNV(disp, fn) ((disp)->ExecuteProgramNV = fn) +#define CALL_GenProgramsNV(disp, parameters) (*((disp)->GenProgramsNV)) parameters +#define GET_GenProgramsNV(disp) ((disp)->GenProgramsNV) +#define SET_GenProgramsNV(disp, fn) ((disp)->GenProgramsNV = fn) +#define CALL_GetProgramParameterdvNV(disp, parameters) (*((disp)->GetProgramParameterdvNV)) parameters +#define GET_GetProgramParameterdvNV(disp) ((disp)->GetProgramParameterdvNV) +#define SET_GetProgramParameterdvNV(disp, fn) ((disp)->GetProgramParameterdvNV = fn) +#define CALL_GetProgramParameterfvNV(disp, parameters) (*((disp)->GetProgramParameterfvNV)) parameters +#define GET_GetProgramParameterfvNV(disp) ((disp)->GetProgramParameterfvNV) +#define SET_GetProgramParameterfvNV(disp, fn) ((disp)->GetProgramParameterfvNV = fn) +#define CALL_GetProgramStringNV(disp, parameters) (*((disp)->GetProgramStringNV)) parameters +#define GET_GetProgramStringNV(disp) ((disp)->GetProgramStringNV) +#define SET_GetProgramStringNV(disp, fn) ((disp)->GetProgramStringNV = fn) +#define CALL_GetProgramivNV(disp, parameters) (*((disp)->GetProgramivNV)) parameters +#define GET_GetProgramivNV(disp) ((disp)->GetProgramivNV) +#define SET_GetProgramivNV(disp, fn) ((disp)->GetProgramivNV = fn) +#define CALL_GetTrackMatrixivNV(disp, parameters) (*((disp)->GetTrackMatrixivNV)) parameters +#define GET_GetTrackMatrixivNV(disp) ((disp)->GetTrackMatrixivNV) +#define SET_GetTrackMatrixivNV(disp, fn) ((disp)->GetTrackMatrixivNV = fn) +#define CALL_GetVertexAttribPointervNV(disp, parameters) (*((disp)->GetVertexAttribPointervNV)) parameters +#define GET_GetVertexAttribPointervNV(disp) ((disp)->GetVertexAttribPointervNV) +#define SET_GetVertexAttribPointervNV(disp, fn) ((disp)->GetVertexAttribPointervNV = fn) +#define CALL_GetVertexAttribdvNV(disp, parameters) (*((disp)->GetVertexAttribdvNV)) parameters +#define GET_GetVertexAttribdvNV(disp) ((disp)->GetVertexAttribdvNV) +#define SET_GetVertexAttribdvNV(disp, fn) ((disp)->GetVertexAttribdvNV = fn) +#define CALL_GetVertexAttribfvNV(disp, parameters) (*((disp)->GetVertexAttribfvNV)) parameters +#define GET_GetVertexAttribfvNV(disp) ((disp)->GetVertexAttribfvNV) +#define SET_GetVertexAttribfvNV(disp, fn) ((disp)->GetVertexAttribfvNV = fn) +#define CALL_GetVertexAttribivNV(disp, parameters) (*((disp)->GetVertexAttribivNV)) parameters +#define GET_GetVertexAttribivNV(disp) ((disp)->GetVertexAttribivNV) +#define SET_GetVertexAttribivNV(disp, fn) ((disp)->GetVertexAttribivNV = fn) +#define CALL_IsProgramNV(disp, parameters) (*((disp)->IsProgramNV)) parameters +#define GET_IsProgramNV(disp) ((disp)->IsProgramNV) +#define SET_IsProgramNV(disp, fn) ((disp)->IsProgramNV = fn) +#define CALL_LoadProgramNV(disp, parameters) (*((disp)->LoadProgramNV)) parameters +#define GET_LoadProgramNV(disp) ((disp)->LoadProgramNV) +#define SET_LoadProgramNV(disp, fn) ((disp)->LoadProgramNV = fn) +#define CALL_ProgramParameter4dNV(disp, parameters) (*((disp)->ProgramParameter4dNV)) parameters +#define GET_ProgramParameter4dNV(disp) ((disp)->ProgramParameter4dNV) +#define SET_ProgramParameter4dNV(disp, fn) ((disp)->ProgramParameter4dNV = fn) +#define CALL_ProgramParameter4dvNV(disp, parameters) (*((disp)->ProgramParameter4dvNV)) parameters +#define GET_ProgramParameter4dvNV(disp) ((disp)->ProgramParameter4dvNV) +#define SET_ProgramParameter4dvNV(disp, fn) ((disp)->ProgramParameter4dvNV = fn) +#define CALL_ProgramParameter4fNV(disp, parameters) (*((disp)->ProgramParameter4fNV)) parameters +#define GET_ProgramParameter4fNV(disp) ((disp)->ProgramParameter4fNV) +#define SET_ProgramParameter4fNV(disp, fn) ((disp)->ProgramParameter4fNV = fn) +#define CALL_ProgramParameter4fvNV(disp, parameters) (*((disp)->ProgramParameter4fvNV)) parameters +#define GET_ProgramParameter4fvNV(disp) ((disp)->ProgramParameter4fvNV) +#define SET_ProgramParameter4fvNV(disp, fn) ((disp)->ProgramParameter4fvNV = fn) +#define CALL_ProgramParameters4dvNV(disp, parameters) (*((disp)->ProgramParameters4dvNV)) parameters +#define GET_ProgramParameters4dvNV(disp) ((disp)->ProgramParameters4dvNV) +#define SET_ProgramParameters4dvNV(disp, fn) ((disp)->ProgramParameters4dvNV = fn) +#define CALL_ProgramParameters4fvNV(disp, parameters) (*((disp)->ProgramParameters4fvNV)) parameters +#define GET_ProgramParameters4fvNV(disp) ((disp)->ProgramParameters4fvNV) +#define SET_ProgramParameters4fvNV(disp, fn) ((disp)->ProgramParameters4fvNV = fn) +#define CALL_RequestResidentProgramsNV(disp, parameters) (*((disp)->RequestResidentProgramsNV)) parameters +#define GET_RequestResidentProgramsNV(disp) ((disp)->RequestResidentProgramsNV) +#define SET_RequestResidentProgramsNV(disp, fn) ((disp)->RequestResidentProgramsNV = fn) +#define CALL_TrackMatrixNV(disp, parameters) (*((disp)->TrackMatrixNV)) parameters +#define GET_TrackMatrixNV(disp) ((disp)->TrackMatrixNV) +#define SET_TrackMatrixNV(disp, fn) ((disp)->TrackMatrixNV = fn) +#define CALL_VertexAttrib1dNV(disp, parameters) (*((disp)->VertexAttrib1dNV)) parameters +#define GET_VertexAttrib1dNV(disp) ((disp)->VertexAttrib1dNV) +#define SET_VertexAttrib1dNV(disp, fn) ((disp)->VertexAttrib1dNV = fn) +#define CALL_VertexAttrib1dvNV(disp, parameters) (*((disp)->VertexAttrib1dvNV)) parameters +#define GET_VertexAttrib1dvNV(disp) ((disp)->VertexAttrib1dvNV) +#define SET_VertexAttrib1dvNV(disp, fn) ((disp)->VertexAttrib1dvNV = fn) +#define CALL_VertexAttrib1fNV(disp, parameters) (*((disp)->VertexAttrib1fNV)) parameters +#define GET_VertexAttrib1fNV(disp) ((disp)->VertexAttrib1fNV) +#define SET_VertexAttrib1fNV(disp, fn) ((disp)->VertexAttrib1fNV = fn) +#define CALL_VertexAttrib1fvNV(disp, parameters) (*((disp)->VertexAttrib1fvNV)) parameters +#define GET_VertexAttrib1fvNV(disp) ((disp)->VertexAttrib1fvNV) +#define SET_VertexAttrib1fvNV(disp, fn) ((disp)->VertexAttrib1fvNV = fn) +#define CALL_VertexAttrib1sNV(disp, parameters) (*((disp)->VertexAttrib1sNV)) parameters +#define GET_VertexAttrib1sNV(disp) ((disp)->VertexAttrib1sNV) +#define SET_VertexAttrib1sNV(disp, fn) ((disp)->VertexAttrib1sNV = fn) +#define CALL_VertexAttrib1svNV(disp, parameters) (*((disp)->VertexAttrib1svNV)) parameters +#define GET_VertexAttrib1svNV(disp) ((disp)->VertexAttrib1svNV) +#define SET_VertexAttrib1svNV(disp, fn) ((disp)->VertexAttrib1svNV = fn) +#define CALL_VertexAttrib2dNV(disp, parameters) (*((disp)->VertexAttrib2dNV)) parameters +#define GET_VertexAttrib2dNV(disp) ((disp)->VertexAttrib2dNV) +#define SET_VertexAttrib2dNV(disp, fn) ((disp)->VertexAttrib2dNV = fn) +#define CALL_VertexAttrib2dvNV(disp, parameters) (*((disp)->VertexAttrib2dvNV)) parameters +#define GET_VertexAttrib2dvNV(disp) ((disp)->VertexAttrib2dvNV) +#define SET_VertexAttrib2dvNV(disp, fn) ((disp)->VertexAttrib2dvNV = fn) +#define CALL_VertexAttrib2fNV(disp, parameters) (*((disp)->VertexAttrib2fNV)) parameters +#define GET_VertexAttrib2fNV(disp) ((disp)->VertexAttrib2fNV) +#define SET_VertexAttrib2fNV(disp, fn) ((disp)->VertexAttrib2fNV = fn) +#define CALL_VertexAttrib2fvNV(disp, parameters) (*((disp)->VertexAttrib2fvNV)) parameters +#define GET_VertexAttrib2fvNV(disp) ((disp)->VertexAttrib2fvNV) +#define SET_VertexAttrib2fvNV(disp, fn) ((disp)->VertexAttrib2fvNV = fn) +#define CALL_VertexAttrib2sNV(disp, parameters) (*((disp)->VertexAttrib2sNV)) parameters +#define GET_VertexAttrib2sNV(disp) ((disp)->VertexAttrib2sNV) +#define SET_VertexAttrib2sNV(disp, fn) ((disp)->VertexAttrib2sNV = fn) +#define CALL_VertexAttrib2svNV(disp, parameters) (*((disp)->VertexAttrib2svNV)) parameters +#define GET_VertexAttrib2svNV(disp) ((disp)->VertexAttrib2svNV) +#define SET_VertexAttrib2svNV(disp, fn) ((disp)->VertexAttrib2svNV = fn) +#define CALL_VertexAttrib3dNV(disp, parameters) (*((disp)->VertexAttrib3dNV)) parameters +#define GET_VertexAttrib3dNV(disp) ((disp)->VertexAttrib3dNV) +#define SET_VertexAttrib3dNV(disp, fn) ((disp)->VertexAttrib3dNV = fn) +#define CALL_VertexAttrib3dvNV(disp, parameters) (*((disp)->VertexAttrib3dvNV)) parameters +#define GET_VertexAttrib3dvNV(disp) ((disp)->VertexAttrib3dvNV) +#define SET_VertexAttrib3dvNV(disp, fn) ((disp)->VertexAttrib3dvNV = fn) +#define CALL_VertexAttrib3fNV(disp, parameters) (*((disp)->VertexAttrib3fNV)) parameters +#define GET_VertexAttrib3fNV(disp) ((disp)->VertexAttrib3fNV) +#define SET_VertexAttrib3fNV(disp, fn) ((disp)->VertexAttrib3fNV = fn) +#define CALL_VertexAttrib3fvNV(disp, parameters) (*((disp)->VertexAttrib3fvNV)) parameters +#define GET_VertexAttrib3fvNV(disp) ((disp)->VertexAttrib3fvNV) +#define SET_VertexAttrib3fvNV(disp, fn) ((disp)->VertexAttrib3fvNV = fn) +#define CALL_VertexAttrib3sNV(disp, parameters) (*((disp)->VertexAttrib3sNV)) parameters +#define GET_VertexAttrib3sNV(disp) ((disp)->VertexAttrib3sNV) +#define SET_VertexAttrib3sNV(disp, fn) ((disp)->VertexAttrib3sNV = fn) +#define CALL_VertexAttrib3svNV(disp, parameters) (*((disp)->VertexAttrib3svNV)) parameters +#define GET_VertexAttrib3svNV(disp) ((disp)->VertexAttrib3svNV) +#define SET_VertexAttrib3svNV(disp, fn) ((disp)->VertexAttrib3svNV = fn) +#define CALL_VertexAttrib4dNV(disp, parameters) (*((disp)->VertexAttrib4dNV)) parameters +#define GET_VertexAttrib4dNV(disp) ((disp)->VertexAttrib4dNV) +#define SET_VertexAttrib4dNV(disp, fn) ((disp)->VertexAttrib4dNV = fn) +#define CALL_VertexAttrib4dvNV(disp, parameters) (*((disp)->VertexAttrib4dvNV)) parameters +#define GET_VertexAttrib4dvNV(disp) ((disp)->VertexAttrib4dvNV) +#define SET_VertexAttrib4dvNV(disp, fn) ((disp)->VertexAttrib4dvNV = fn) +#define CALL_VertexAttrib4fNV(disp, parameters) (*((disp)->VertexAttrib4fNV)) parameters +#define GET_VertexAttrib4fNV(disp) ((disp)->VertexAttrib4fNV) +#define SET_VertexAttrib4fNV(disp, fn) ((disp)->VertexAttrib4fNV = fn) +#define CALL_VertexAttrib4fvNV(disp, parameters) (*((disp)->VertexAttrib4fvNV)) parameters +#define GET_VertexAttrib4fvNV(disp) ((disp)->VertexAttrib4fvNV) +#define SET_VertexAttrib4fvNV(disp, fn) ((disp)->VertexAttrib4fvNV = fn) +#define CALL_VertexAttrib4sNV(disp, parameters) (*((disp)->VertexAttrib4sNV)) parameters +#define GET_VertexAttrib4sNV(disp) ((disp)->VertexAttrib4sNV) +#define SET_VertexAttrib4sNV(disp, fn) ((disp)->VertexAttrib4sNV = fn) +#define CALL_VertexAttrib4svNV(disp, parameters) (*((disp)->VertexAttrib4svNV)) parameters +#define GET_VertexAttrib4svNV(disp) ((disp)->VertexAttrib4svNV) +#define SET_VertexAttrib4svNV(disp, fn) ((disp)->VertexAttrib4svNV = fn) +#define CALL_VertexAttrib4ubNV(disp, parameters) (*((disp)->VertexAttrib4ubNV)) parameters +#define GET_VertexAttrib4ubNV(disp) ((disp)->VertexAttrib4ubNV) +#define SET_VertexAttrib4ubNV(disp, fn) ((disp)->VertexAttrib4ubNV = fn) +#define CALL_VertexAttrib4ubvNV(disp, parameters) (*((disp)->VertexAttrib4ubvNV)) parameters +#define GET_VertexAttrib4ubvNV(disp) ((disp)->VertexAttrib4ubvNV) +#define SET_VertexAttrib4ubvNV(disp, fn) ((disp)->VertexAttrib4ubvNV = fn) +#define CALL_VertexAttribPointerNV(disp, parameters) (*((disp)->VertexAttribPointerNV)) parameters +#define GET_VertexAttribPointerNV(disp) ((disp)->VertexAttribPointerNV) +#define SET_VertexAttribPointerNV(disp, fn) ((disp)->VertexAttribPointerNV = fn) +#define CALL_VertexAttribs1dvNV(disp, parameters) (*((disp)->VertexAttribs1dvNV)) parameters +#define GET_VertexAttribs1dvNV(disp) ((disp)->VertexAttribs1dvNV) +#define SET_VertexAttribs1dvNV(disp, fn) ((disp)->VertexAttribs1dvNV = fn) +#define CALL_VertexAttribs1fvNV(disp, parameters) (*((disp)->VertexAttribs1fvNV)) parameters +#define GET_VertexAttribs1fvNV(disp) ((disp)->VertexAttribs1fvNV) +#define SET_VertexAttribs1fvNV(disp, fn) ((disp)->VertexAttribs1fvNV = fn) +#define CALL_VertexAttribs1svNV(disp, parameters) (*((disp)->VertexAttribs1svNV)) parameters +#define GET_VertexAttribs1svNV(disp) ((disp)->VertexAttribs1svNV) +#define SET_VertexAttribs1svNV(disp, fn) ((disp)->VertexAttribs1svNV = fn) +#define CALL_VertexAttribs2dvNV(disp, parameters) (*((disp)->VertexAttribs2dvNV)) parameters +#define GET_VertexAttribs2dvNV(disp) ((disp)->VertexAttribs2dvNV) +#define SET_VertexAttribs2dvNV(disp, fn) ((disp)->VertexAttribs2dvNV = fn) +#define CALL_VertexAttribs2fvNV(disp, parameters) (*((disp)->VertexAttribs2fvNV)) parameters +#define GET_VertexAttribs2fvNV(disp) ((disp)->VertexAttribs2fvNV) +#define SET_VertexAttribs2fvNV(disp, fn) ((disp)->VertexAttribs2fvNV = fn) +#define CALL_VertexAttribs2svNV(disp, parameters) (*((disp)->VertexAttribs2svNV)) parameters +#define GET_VertexAttribs2svNV(disp) ((disp)->VertexAttribs2svNV) +#define SET_VertexAttribs2svNV(disp, fn) ((disp)->VertexAttribs2svNV = fn) +#define CALL_VertexAttribs3dvNV(disp, parameters) (*((disp)->VertexAttribs3dvNV)) parameters +#define GET_VertexAttribs3dvNV(disp) ((disp)->VertexAttribs3dvNV) +#define SET_VertexAttribs3dvNV(disp, fn) ((disp)->VertexAttribs3dvNV = fn) +#define CALL_VertexAttribs3fvNV(disp, parameters) (*((disp)->VertexAttribs3fvNV)) parameters +#define GET_VertexAttribs3fvNV(disp) ((disp)->VertexAttribs3fvNV) +#define SET_VertexAttribs3fvNV(disp, fn) ((disp)->VertexAttribs3fvNV = fn) +#define CALL_VertexAttribs3svNV(disp, parameters) (*((disp)->VertexAttribs3svNV)) parameters +#define GET_VertexAttribs3svNV(disp) ((disp)->VertexAttribs3svNV) +#define SET_VertexAttribs3svNV(disp, fn) ((disp)->VertexAttribs3svNV = fn) +#define CALL_VertexAttribs4dvNV(disp, parameters) (*((disp)->VertexAttribs4dvNV)) parameters +#define GET_VertexAttribs4dvNV(disp) ((disp)->VertexAttribs4dvNV) +#define SET_VertexAttribs4dvNV(disp, fn) ((disp)->VertexAttribs4dvNV = fn) +#define CALL_VertexAttribs4fvNV(disp, parameters) (*((disp)->VertexAttribs4fvNV)) parameters +#define GET_VertexAttribs4fvNV(disp) ((disp)->VertexAttribs4fvNV) +#define SET_VertexAttribs4fvNV(disp, fn) ((disp)->VertexAttribs4fvNV = fn) +#define CALL_VertexAttribs4svNV(disp, parameters) (*((disp)->VertexAttribs4svNV)) parameters +#define GET_VertexAttribs4svNV(disp) ((disp)->VertexAttribs4svNV) +#define SET_VertexAttribs4svNV(disp, fn) ((disp)->VertexAttribs4svNV = fn) +#define CALL_VertexAttribs4ubvNV(disp, parameters) (*((disp)->VertexAttribs4ubvNV)) parameters +#define GET_VertexAttribs4ubvNV(disp) ((disp)->VertexAttribs4ubvNV) +#define SET_VertexAttribs4ubvNV(disp, fn) ((disp)->VertexAttribs4ubvNV = fn) +#define CALL_AlphaFragmentOp1ATI(disp, parameters) (*((disp)->AlphaFragmentOp1ATI)) parameters +#define GET_AlphaFragmentOp1ATI(disp) ((disp)->AlphaFragmentOp1ATI) +#define SET_AlphaFragmentOp1ATI(disp, fn) ((disp)->AlphaFragmentOp1ATI = fn) +#define CALL_AlphaFragmentOp2ATI(disp, parameters) (*((disp)->AlphaFragmentOp2ATI)) parameters +#define GET_AlphaFragmentOp2ATI(disp) ((disp)->AlphaFragmentOp2ATI) +#define SET_AlphaFragmentOp2ATI(disp, fn) ((disp)->AlphaFragmentOp2ATI = fn) +#define CALL_AlphaFragmentOp3ATI(disp, parameters) (*((disp)->AlphaFragmentOp3ATI)) parameters +#define GET_AlphaFragmentOp3ATI(disp) ((disp)->AlphaFragmentOp3ATI) +#define SET_AlphaFragmentOp3ATI(disp, fn) ((disp)->AlphaFragmentOp3ATI = fn) +#define CALL_BeginFragmentShaderATI(disp, parameters) (*((disp)->BeginFragmentShaderATI)) parameters +#define GET_BeginFragmentShaderATI(disp) ((disp)->BeginFragmentShaderATI) +#define SET_BeginFragmentShaderATI(disp, fn) ((disp)->BeginFragmentShaderATI = fn) +#define CALL_BindFragmentShaderATI(disp, parameters) (*((disp)->BindFragmentShaderATI)) parameters +#define GET_BindFragmentShaderATI(disp) ((disp)->BindFragmentShaderATI) +#define SET_BindFragmentShaderATI(disp, fn) ((disp)->BindFragmentShaderATI = fn) +#define CALL_ColorFragmentOp1ATI(disp, parameters) (*((disp)->ColorFragmentOp1ATI)) parameters +#define GET_ColorFragmentOp1ATI(disp) ((disp)->ColorFragmentOp1ATI) +#define SET_ColorFragmentOp1ATI(disp, fn) ((disp)->ColorFragmentOp1ATI = fn) +#define CALL_ColorFragmentOp2ATI(disp, parameters) (*((disp)->ColorFragmentOp2ATI)) parameters +#define GET_ColorFragmentOp2ATI(disp) ((disp)->ColorFragmentOp2ATI) +#define SET_ColorFragmentOp2ATI(disp, fn) ((disp)->ColorFragmentOp2ATI = fn) +#define CALL_ColorFragmentOp3ATI(disp, parameters) (*((disp)->ColorFragmentOp3ATI)) parameters +#define GET_ColorFragmentOp3ATI(disp) ((disp)->ColorFragmentOp3ATI) +#define SET_ColorFragmentOp3ATI(disp, fn) ((disp)->ColorFragmentOp3ATI = fn) +#define CALL_DeleteFragmentShaderATI(disp, parameters) (*((disp)->DeleteFragmentShaderATI)) parameters +#define GET_DeleteFragmentShaderATI(disp) ((disp)->DeleteFragmentShaderATI) +#define SET_DeleteFragmentShaderATI(disp, fn) ((disp)->DeleteFragmentShaderATI = fn) +#define CALL_EndFragmentShaderATI(disp, parameters) (*((disp)->EndFragmentShaderATI)) parameters +#define GET_EndFragmentShaderATI(disp) ((disp)->EndFragmentShaderATI) +#define SET_EndFragmentShaderATI(disp, fn) ((disp)->EndFragmentShaderATI = fn) +#define CALL_GenFragmentShadersATI(disp, parameters) (*((disp)->GenFragmentShadersATI)) parameters +#define GET_GenFragmentShadersATI(disp) ((disp)->GenFragmentShadersATI) +#define SET_GenFragmentShadersATI(disp, fn) ((disp)->GenFragmentShadersATI = fn) +#define CALL_PassTexCoordATI(disp, parameters) (*((disp)->PassTexCoordATI)) parameters +#define GET_PassTexCoordATI(disp) ((disp)->PassTexCoordATI) +#define SET_PassTexCoordATI(disp, fn) ((disp)->PassTexCoordATI = fn) +#define CALL_SampleMapATI(disp, parameters) (*((disp)->SampleMapATI)) parameters +#define GET_SampleMapATI(disp) ((disp)->SampleMapATI) +#define SET_SampleMapATI(disp, fn) ((disp)->SampleMapATI = fn) +#define CALL_SetFragmentShaderConstantATI(disp, parameters) (*((disp)->SetFragmentShaderConstantATI)) parameters +#define GET_SetFragmentShaderConstantATI(disp) ((disp)->SetFragmentShaderConstantATI) +#define SET_SetFragmentShaderConstantATI(disp, fn) ((disp)->SetFragmentShaderConstantATI = fn) +#define CALL_PointParameteriNV(disp, parameters) (*((disp)->PointParameteriNV)) parameters +#define GET_PointParameteriNV(disp) ((disp)->PointParameteriNV) +#define SET_PointParameteriNV(disp, fn) ((disp)->PointParameteriNV = fn) +#define CALL_PointParameterivNV(disp, parameters) (*((disp)->PointParameterivNV)) parameters +#define GET_PointParameterivNV(disp) ((disp)->PointParameterivNV) +#define SET_PointParameterivNV(disp, fn) ((disp)->PointParameterivNV = fn) +#define CALL_ActiveStencilFaceEXT(disp, parameters) (*((disp)->ActiveStencilFaceEXT)) parameters +#define GET_ActiveStencilFaceEXT(disp) ((disp)->ActiveStencilFaceEXT) +#define SET_ActiveStencilFaceEXT(disp, fn) ((disp)->ActiveStencilFaceEXT = fn) +#define CALL_BindVertexArrayAPPLE(disp, parameters) (*((disp)->BindVertexArrayAPPLE)) parameters +#define GET_BindVertexArrayAPPLE(disp) ((disp)->BindVertexArrayAPPLE) +#define SET_BindVertexArrayAPPLE(disp, fn) ((disp)->BindVertexArrayAPPLE = fn) +#define CALL_DeleteVertexArraysAPPLE(disp, parameters) (*((disp)->DeleteVertexArraysAPPLE)) parameters +#define GET_DeleteVertexArraysAPPLE(disp) ((disp)->DeleteVertexArraysAPPLE) +#define SET_DeleteVertexArraysAPPLE(disp, fn) ((disp)->DeleteVertexArraysAPPLE = fn) +#define CALL_GenVertexArraysAPPLE(disp, parameters) (*((disp)->GenVertexArraysAPPLE)) parameters +#define GET_GenVertexArraysAPPLE(disp) ((disp)->GenVertexArraysAPPLE) +#define SET_GenVertexArraysAPPLE(disp, fn) ((disp)->GenVertexArraysAPPLE = fn) +#define CALL_IsVertexArrayAPPLE(disp, parameters) (*((disp)->IsVertexArrayAPPLE)) parameters +#define GET_IsVertexArrayAPPLE(disp) ((disp)->IsVertexArrayAPPLE) +#define SET_IsVertexArrayAPPLE(disp, fn) ((disp)->IsVertexArrayAPPLE = fn) +#define CALL_GetProgramNamedParameterdvNV(disp, parameters) (*((disp)->GetProgramNamedParameterdvNV)) parameters +#define GET_GetProgramNamedParameterdvNV(disp) ((disp)->GetProgramNamedParameterdvNV) +#define SET_GetProgramNamedParameterdvNV(disp, fn) ((disp)->GetProgramNamedParameterdvNV = fn) +#define CALL_GetProgramNamedParameterfvNV(disp, parameters) (*((disp)->GetProgramNamedParameterfvNV)) parameters +#define GET_GetProgramNamedParameterfvNV(disp) ((disp)->GetProgramNamedParameterfvNV) +#define SET_GetProgramNamedParameterfvNV(disp, fn) ((disp)->GetProgramNamedParameterfvNV = fn) +#define CALL_ProgramNamedParameter4dNV(disp, parameters) (*((disp)->ProgramNamedParameter4dNV)) parameters +#define GET_ProgramNamedParameter4dNV(disp) ((disp)->ProgramNamedParameter4dNV) +#define SET_ProgramNamedParameter4dNV(disp, fn) ((disp)->ProgramNamedParameter4dNV = fn) +#define CALL_ProgramNamedParameter4dvNV(disp, parameters) (*((disp)->ProgramNamedParameter4dvNV)) parameters +#define GET_ProgramNamedParameter4dvNV(disp) ((disp)->ProgramNamedParameter4dvNV) +#define SET_ProgramNamedParameter4dvNV(disp, fn) ((disp)->ProgramNamedParameter4dvNV = fn) +#define CALL_ProgramNamedParameter4fNV(disp, parameters) (*((disp)->ProgramNamedParameter4fNV)) parameters +#define GET_ProgramNamedParameter4fNV(disp) ((disp)->ProgramNamedParameter4fNV) +#define SET_ProgramNamedParameter4fNV(disp, fn) ((disp)->ProgramNamedParameter4fNV = fn) +#define CALL_ProgramNamedParameter4fvNV(disp, parameters) (*((disp)->ProgramNamedParameter4fvNV)) parameters +#define GET_ProgramNamedParameter4fvNV(disp) ((disp)->ProgramNamedParameter4fvNV) +#define SET_ProgramNamedParameter4fvNV(disp, fn) ((disp)->ProgramNamedParameter4fvNV = fn) +#define CALL_DepthBoundsEXT(disp, parameters) (*((disp)->DepthBoundsEXT)) parameters +#define GET_DepthBoundsEXT(disp) ((disp)->DepthBoundsEXT) +#define SET_DepthBoundsEXT(disp, fn) ((disp)->DepthBoundsEXT = fn) +#define CALL_BlendEquationSeparateEXT(disp, parameters) (*((disp)->BlendEquationSeparateEXT)) parameters +#define GET_BlendEquationSeparateEXT(disp) ((disp)->BlendEquationSeparateEXT) +#define SET_BlendEquationSeparateEXT(disp, fn) ((disp)->BlendEquationSeparateEXT = fn) +#define CALL_BindFramebufferEXT(disp, parameters) (*((disp)->BindFramebufferEXT)) parameters +#define GET_BindFramebufferEXT(disp) ((disp)->BindFramebufferEXT) +#define SET_BindFramebufferEXT(disp, fn) ((disp)->BindFramebufferEXT = fn) +#define CALL_BindRenderbufferEXT(disp, parameters) (*((disp)->BindRenderbufferEXT)) parameters +#define GET_BindRenderbufferEXT(disp) ((disp)->BindRenderbufferEXT) +#define SET_BindRenderbufferEXT(disp, fn) ((disp)->BindRenderbufferEXT = fn) +#define CALL_CheckFramebufferStatusEXT(disp, parameters) (*((disp)->CheckFramebufferStatusEXT)) parameters +#define GET_CheckFramebufferStatusEXT(disp) ((disp)->CheckFramebufferStatusEXT) +#define SET_CheckFramebufferStatusEXT(disp, fn) ((disp)->CheckFramebufferStatusEXT = fn) +#define CALL_DeleteFramebuffersEXT(disp, parameters) (*((disp)->DeleteFramebuffersEXT)) parameters +#define GET_DeleteFramebuffersEXT(disp) ((disp)->DeleteFramebuffersEXT) +#define SET_DeleteFramebuffersEXT(disp, fn) ((disp)->DeleteFramebuffersEXT = fn) +#define CALL_DeleteRenderbuffersEXT(disp, parameters) (*((disp)->DeleteRenderbuffersEXT)) parameters +#define GET_DeleteRenderbuffersEXT(disp) ((disp)->DeleteRenderbuffersEXT) +#define SET_DeleteRenderbuffersEXT(disp, fn) ((disp)->DeleteRenderbuffersEXT = fn) +#define CALL_FramebufferRenderbufferEXT(disp, parameters) (*((disp)->FramebufferRenderbufferEXT)) parameters +#define GET_FramebufferRenderbufferEXT(disp) ((disp)->FramebufferRenderbufferEXT) +#define SET_FramebufferRenderbufferEXT(disp, fn) ((disp)->FramebufferRenderbufferEXT = fn) +#define CALL_FramebufferTexture1DEXT(disp, parameters) (*((disp)->FramebufferTexture1DEXT)) parameters +#define GET_FramebufferTexture1DEXT(disp) ((disp)->FramebufferTexture1DEXT) +#define SET_FramebufferTexture1DEXT(disp, fn) ((disp)->FramebufferTexture1DEXT = fn) +#define CALL_FramebufferTexture2DEXT(disp, parameters) (*((disp)->FramebufferTexture2DEXT)) parameters +#define GET_FramebufferTexture2DEXT(disp) ((disp)->FramebufferTexture2DEXT) +#define SET_FramebufferTexture2DEXT(disp, fn) ((disp)->FramebufferTexture2DEXT = fn) +#define CALL_FramebufferTexture3DEXT(disp, parameters) (*((disp)->FramebufferTexture3DEXT)) parameters +#define GET_FramebufferTexture3DEXT(disp) ((disp)->FramebufferTexture3DEXT) +#define SET_FramebufferTexture3DEXT(disp, fn) ((disp)->FramebufferTexture3DEXT = fn) +#define CALL_GenFramebuffersEXT(disp, parameters) (*((disp)->GenFramebuffersEXT)) parameters +#define GET_GenFramebuffersEXT(disp) ((disp)->GenFramebuffersEXT) +#define SET_GenFramebuffersEXT(disp, fn) ((disp)->GenFramebuffersEXT = fn) +#define CALL_GenRenderbuffersEXT(disp, parameters) (*((disp)->GenRenderbuffersEXT)) parameters +#define GET_GenRenderbuffersEXT(disp) ((disp)->GenRenderbuffersEXT) +#define SET_GenRenderbuffersEXT(disp, fn) ((disp)->GenRenderbuffersEXT = fn) +#define CALL_GenerateMipmapEXT(disp, parameters) (*((disp)->GenerateMipmapEXT)) parameters +#define GET_GenerateMipmapEXT(disp) ((disp)->GenerateMipmapEXT) +#define SET_GenerateMipmapEXT(disp, fn) ((disp)->GenerateMipmapEXT = fn) +#define CALL_GetFramebufferAttachmentParameterivEXT(disp, parameters) (*((disp)->GetFramebufferAttachmentParameterivEXT)) parameters +#define GET_GetFramebufferAttachmentParameterivEXT(disp) ((disp)->GetFramebufferAttachmentParameterivEXT) +#define SET_GetFramebufferAttachmentParameterivEXT(disp, fn) ((disp)->GetFramebufferAttachmentParameterivEXT = fn) +#define CALL_GetRenderbufferParameterivEXT(disp, parameters) (*((disp)->GetRenderbufferParameterivEXT)) parameters +#define GET_GetRenderbufferParameterivEXT(disp) ((disp)->GetRenderbufferParameterivEXT) +#define SET_GetRenderbufferParameterivEXT(disp, fn) ((disp)->GetRenderbufferParameterivEXT = fn) +#define CALL_IsFramebufferEXT(disp, parameters) (*((disp)->IsFramebufferEXT)) parameters +#define GET_IsFramebufferEXT(disp) ((disp)->IsFramebufferEXT) +#define SET_IsFramebufferEXT(disp, fn) ((disp)->IsFramebufferEXT = fn) +#define CALL_IsRenderbufferEXT(disp, parameters) (*((disp)->IsRenderbufferEXT)) parameters +#define GET_IsRenderbufferEXT(disp) ((disp)->IsRenderbufferEXT) +#define SET_IsRenderbufferEXT(disp, fn) ((disp)->IsRenderbufferEXT = fn) +#define CALL_RenderbufferStorageEXT(disp, parameters) (*((disp)->RenderbufferStorageEXT)) parameters +#define GET_RenderbufferStorageEXT(disp) ((disp)->RenderbufferStorageEXT) +#define SET_RenderbufferStorageEXT(disp, fn) ((disp)->RenderbufferStorageEXT = fn) +#define CALL_BlitFramebufferEXT(disp, parameters) (*((disp)->BlitFramebufferEXT)) parameters +#define GET_BlitFramebufferEXT(disp) ((disp)->BlitFramebufferEXT) +#define SET_BlitFramebufferEXT(disp, fn) ((disp)->BlitFramebufferEXT = fn) +#define CALL_ProgramEnvParameters4fvEXT(disp, parameters) (*((disp)->ProgramEnvParameters4fvEXT)) parameters +#define GET_ProgramEnvParameters4fvEXT(disp) ((disp)->ProgramEnvParameters4fvEXT) +#define SET_ProgramEnvParameters4fvEXT(disp, fn) ((disp)->ProgramEnvParameters4fvEXT = fn) +#define CALL_ProgramLocalParameters4fvEXT(disp, parameters) (*((disp)->ProgramLocalParameters4fvEXT)) parameters +#define GET_ProgramLocalParameters4fvEXT(disp) ((disp)->ProgramLocalParameters4fvEXT) +#define SET_ProgramLocalParameters4fvEXT(disp, fn) ((disp)->ProgramLocalParameters4fvEXT = fn) +#define CALL_GetQueryObjecti64vEXT(disp, parameters) (*((disp)->GetQueryObjecti64vEXT)) parameters +#define GET_GetQueryObjecti64vEXT(disp) ((disp)->GetQueryObjecti64vEXT) +#define SET_GetQueryObjecti64vEXT(disp, fn) ((disp)->GetQueryObjecti64vEXT = fn) +#define CALL_GetQueryObjectui64vEXT(disp, parameters) (*((disp)->GetQueryObjectui64vEXT)) parameters +#define GET_GetQueryObjectui64vEXT(disp) ((disp)->GetQueryObjectui64vEXT) +#define SET_GetQueryObjectui64vEXT(disp, fn) ((disp)->GetQueryObjectui64vEXT = fn) + +#else + +#define driDispatchRemapTable_size 364 +extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; + +#define AttachShader_remap_index 0 +#define CreateProgram_remap_index 1 +#define CreateShader_remap_index 2 +#define DeleteProgram_remap_index 3 +#define DeleteShader_remap_index 4 +#define DetachShader_remap_index 5 +#define GetAttachedShaders_remap_index 6 +#define GetProgramInfoLog_remap_index 7 +#define GetProgramiv_remap_index 8 +#define GetShaderInfoLog_remap_index 9 +#define GetShaderiv_remap_index 10 +#define IsProgram_remap_index 11 +#define IsShader_remap_index 12 +#define StencilFuncSeparate_remap_index 13 +#define StencilMaskSeparate_remap_index 14 +#define StencilOpSeparate_remap_index 15 +#define UniformMatrix2x3fv_remap_index 16 +#define UniformMatrix2x4fv_remap_index 17 +#define UniformMatrix3x2fv_remap_index 18 +#define UniformMatrix3x4fv_remap_index 19 +#define UniformMatrix4x2fv_remap_index 20 +#define UniformMatrix4x3fv_remap_index 21 +#define LoadTransposeMatrixdARB_remap_index 22 +#define LoadTransposeMatrixfARB_remap_index 23 +#define MultTransposeMatrixdARB_remap_index 24 +#define MultTransposeMatrixfARB_remap_index 25 +#define SampleCoverageARB_remap_index 26 +#define CompressedTexImage1DARB_remap_index 27 +#define CompressedTexImage2DARB_remap_index 28 +#define CompressedTexImage3DARB_remap_index 29 +#define CompressedTexSubImage1DARB_remap_index 30 +#define CompressedTexSubImage2DARB_remap_index 31 +#define CompressedTexSubImage3DARB_remap_index 32 +#define GetCompressedTexImageARB_remap_index 33 +#define DisableVertexAttribArrayARB_remap_index 34 +#define EnableVertexAttribArrayARB_remap_index 35 +#define GetProgramEnvParameterdvARB_remap_index 36 +#define GetProgramEnvParameterfvARB_remap_index 37 +#define GetProgramLocalParameterdvARB_remap_index 38 +#define GetProgramLocalParameterfvARB_remap_index 39 +#define GetProgramStringARB_remap_index 40 +#define GetProgramivARB_remap_index 41 +#define GetVertexAttribdvARB_remap_index 42 +#define GetVertexAttribfvARB_remap_index 43 +#define GetVertexAttribivARB_remap_index 44 +#define ProgramEnvParameter4dARB_remap_index 45 +#define ProgramEnvParameter4dvARB_remap_index 46 +#define ProgramEnvParameter4fARB_remap_index 47 +#define ProgramEnvParameter4fvARB_remap_index 48 +#define ProgramLocalParameter4dARB_remap_index 49 +#define ProgramLocalParameter4dvARB_remap_index 50 +#define ProgramLocalParameter4fARB_remap_index 51 +#define ProgramLocalParameter4fvARB_remap_index 52 +#define ProgramStringARB_remap_index 53 +#define VertexAttrib1dARB_remap_index 54 +#define VertexAttrib1dvARB_remap_index 55 +#define VertexAttrib1fARB_remap_index 56 +#define VertexAttrib1fvARB_remap_index 57 +#define VertexAttrib1sARB_remap_index 58 +#define VertexAttrib1svARB_remap_index 59 +#define VertexAttrib2dARB_remap_index 60 +#define VertexAttrib2dvARB_remap_index 61 +#define VertexAttrib2fARB_remap_index 62 +#define VertexAttrib2fvARB_remap_index 63 +#define VertexAttrib2sARB_remap_index 64 +#define VertexAttrib2svARB_remap_index 65 +#define VertexAttrib3dARB_remap_index 66 +#define VertexAttrib3dvARB_remap_index 67 +#define VertexAttrib3fARB_remap_index 68 +#define VertexAttrib3fvARB_remap_index 69 +#define VertexAttrib3sARB_remap_index 70 +#define VertexAttrib3svARB_remap_index 71 +#define VertexAttrib4NbvARB_remap_index 72 +#define VertexAttrib4NivARB_remap_index 73 +#define VertexAttrib4NsvARB_remap_index 74 +#define VertexAttrib4NubARB_remap_index 75 +#define VertexAttrib4NubvARB_remap_index 76 +#define VertexAttrib4NuivARB_remap_index 77 +#define VertexAttrib4NusvARB_remap_index 78 +#define VertexAttrib4bvARB_remap_index 79 +#define VertexAttrib4dARB_remap_index 80 +#define VertexAttrib4dvARB_remap_index 81 +#define VertexAttrib4fARB_remap_index 82 +#define VertexAttrib4fvARB_remap_index 83 +#define VertexAttrib4ivARB_remap_index 84 +#define VertexAttrib4sARB_remap_index 85 +#define VertexAttrib4svARB_remap_index 86 +#define VertexAttrib4ubvARB_remap_index 87 +#define VertexAttrib4uivARB_remap_index 88 +#define VertexAttrib4usvARB_remap_index 89 +#define VertexAttribPointerARB_remap_index 90 +#define BindBufferARB_remap_index 91 +#define BufferDataARB_remap_index 92 +#define BufferSubDataARB_remap_index 93 +#define DeleteBuffersARB_remap_index 94 +#define GenBuffersARB_remap_index 95 +#define GetBufferParameterivARB_remap_index 96 +#define GetBufferPointervARB_remap_index 97 +#define GetBufferSubDataARB_remap_index 98 +#define IsBufferARB_remap_index 99 +#define MapBufferARB_remap_index 100 +#define UnmapBufferARB_remap_index 101 +#define BeginQueryARB_remap_index 102 +#define DeleteQueriesARB_remap_index 103 +#define EndQueryARB_remap_index 104 +#define GenQueriesARB_remap_index 105 +#define GetQueryObjectivARB_remap_index 106 +#define GetQueryObjectuivARB_remap_index 107 +#define GetQueryivARB_remap_index 108 +#define IsQueryARB_remap_index 109 +#define AttachObjectARB_remap_index 110 +#define CompileShaderARB_remap_index 111 +#define CreateProgramObjectARB_remap_index 112 +#define CreateShaderObjectARB_remap_index 113 +#define DeleteObjectARB_remap_index 114 +#define DetachObjectARB_remap_index 115 +#define GetActiveUniformARB_remap_index 116 +#define GetAttachedObjectsARB_remap_index 117 +#define GetHandleARB_remap_index 118 +#define GetInfoLogARB_remap_index 119 +#define GetObjectParameterfvARB_remap_index 120 +#define GetObjectParameterivARB_remap_index 121 +#define GetShaderSourceARB_remap_index 122 +#define GetUniformLocationARB_remap_index 123 +#define GetUniformfvARB_remap_index 124 +#define GetUniformivARB_remap_index 125 +#define LinkProgramARB_remap_index 126 +#define ShaderSourceARB_remap_index 127 +#define Uniform1fARB_remap_index 128 +#define Uniform1fvARB_remap_index 129 +#define Uniform1iARB_remap_index 130 +#define Uniform1ivARB_remap_index 131 +#define Uniform2fARB_remap_index 132 +#define Uniform2fvARB_remap_index 133 +#define Uniform2iARB_remap_index 134 +#define Uniform2ivARB_remap_index 135 +#define Uniform3fARB_remap_index 136 +#define Uniform3fvARB_remap_index 137 +#define Uniform3iARB_remap_index 138 +#define Uniform3ivARB_remap_index 139 +#define Uniform4fARB_remap_index 140 +#define Uniform4fvARB_remap_index 141 +#define Uniform4iARB_remap_index 142 +#define Uniform4ivARB_remap_index 143 +#define UniformMatrix2fvARB_remap_index 144 +#define UniformMatrix3fvARB_remap_index 145 +#define UniformMatrix4fvARB_remap_index 146 +#define UseProgramObjectARB_remap_index 147 +#define ValidateProgramARB_remap_index 148 +#define BindAttribLocationARB_remap_index 149 +#define GetActiveAttribARB_remap_index 150 +#define GetAttribLocationARB_remap_index 151 +#define DrawBuffersARB_remap_index 152 +#define PolygonOffsetEXT_remap_index 153 +#define GetPixelTexGenParameterfvSGIS_remap_index 154 +#define GetPixelTexGenParameterivSGIS_remap_index 155 +#define PixelTexGenParameterfSGIS_remap_index 156 +#define PixelTexGenParameterfvSGIS_remap_index 157 +#define PixelTexGenParameteriSGIS_remap_index 158 +#define PixelTexGenParameterivSGIS_remap_index 159 +#define SampleMaskSGIS_remap_index 160 +#define SamplePatternSGIS_remap_index 161 +#define ColorPointerEXT_remap_index 162 +#define EdgeFlagPointerEXT_remap_index 163 +#define IndexPointerEXT_remap_index 164 +#define NormalPointerEXT_remap_index 165 +#define TexCoordPointerEXT_remap_index 166 +#define VertexPointerEXT_remap_index 167 +#define PointParameterfEXT_remap_index 168 +#define PointParameterfvEXT_remap_index 169 +#define LockArraysEXT_remap_index 170 +#define UnlockArraysEXT_remap_index 171 +#define CullParameterdvEXT_remap_index 172 +#define CullParameterfvEXT_remap_index 173 +#define SecondaryColor3bEXT_remap_index 174 +#define SecondaryColor3bvEXT_remap_index 175 +#define SecondaryColor3dEXT_remap_index 176 +#define SecondaryColor3dvEXT_remap_index 177 +#define SecondaryColor3fEXT_remap_index 178 +#define SecondaryColor3fvEXT_remap_index 179 +#define SecondaryColor3iEXT_remap_index 180 +#define SecondaryColor3ivEXT_remap_index 181 +#define SecondaryColor3sEXT_remap_index 182 +#define SecondaryColor3svEXT_remap_index 183 +#define SecondaryColor3ubEXT_remap_index 184 +#define SecondaryColor3ubvEXT_remap_index 185 +#define SecondaryColor3uiEXT_remap_index 186 +#define SecondaryColor3uivEXT_remap_index 187 +#define SecondaryColor3usEXT_remap_index 188 +#define SecondaryColor3usvEXT_remap_index 189 +#define SecondaryColorPointerEXT_remap_index 190 +#define MultiDrawArraysEXT_remap_index 191 +#define MultiDrawElementsEXT_remap_index 192 +#define FogCoordPointerEXT_remap_index 193 +#define FogCoorddEXT_remap_index 194 +#define FogCoorddvEXT_remap_index 195 +#define FogCoordfEXT_remap_index 196 +#define FogCoordfvEXT_remap_index 197 +#define PixelTexGenSGIX_remap_index 198 +#define BlendFuncSeparateEXT_remap_index 199 +#define FlushVertexArrayRangeNV_remap_index 200 +#define VertexArrayRangeNV_remap_index 201 +#define CombinerInputNV_remap_index 202 +#define CombinerOutputNV_remap_index 203 +#define CombinerParameterfNV_remap_index 204 +#define CombinerParameterfvNV_remap_index 205 +#define CombinerParameteriNV_remap_index 206 +#define CombinerParameterivNV_remap_index 207 +#define FinalCombinerInputNV_remap_index 208 +#define GetCombinerInputParameterfvNV_remap_index 209 +#define GetCombinerInputParameterivNV_remap_index 210 +#define GetCombinerOutputParameterfvNV_remap_index 211 +#define GetCombinerOutputParameterivNV_remap_index 212 +#define GetFinalCombinerInputParameterfvNV_remap_index 213 +#define GetFinalCombinerInputParameterivNV_remap_index 214 +#define ResizeBuffersMESA_remap_index 215 +#define WindowPos2dMESA_remap_index 216 +#define WindowPos2dvMESA_remap_index 217 +#define WindowPos2fMESA_remap_index 218 +#define WindowPos2fvMESA_remap_index 219 +#define WindowPos2iMESA_remap_index 220 +#define WindowPos2ivMESA_remap_index 221 +#define WindowPos2sMESA_remap_index 222 +#define WindowPos2svMESA_remap_index 223 +#define WindowPos3dMESA_remap_index 224 +#define WindowPos3dvMESA_remap_index 225 +#define WindowPos3fMESA_remap_index 226 +#define WindowPos3fvMESA_remap_index 227 +#define WindowPos3iMESA_remap_index 228 +#define WindowPos3ivMESA_remap_index 229 +#define WindowPos3sMESA_remap_index 230 +#define WindowPos3svMESA_remap_index 231 +#define WindowPos4dMESA_remap_index 232 +#define WindowPos4dvMESA_remap_index 233 +#define WindowPos4fMESA_remap_index 234 +#define WindowPos4fvMESA_remap_index 235 +#define WindowPos4iMESA_remap_index 236 +#define WindowPos4ivMESA_remap_index 237 +#define WindowPos4sMESA_remap_index 238 +#define WindowPos4svMESA_remap_index 239 +#define MultiModeDrawArraysIBM_remap_index 240 +#define MultiModeDrawElementsIBM_remap_index 241 +#define DeleteFencesNV_remap_index 242 +#define FinishFenceNV_remap_index 243 +#define GenFencesNV_remap_index 244 +#define GetFenceivNV_remap_index 245 +#define IsFenceNV_remap_index 246 +#define SetFenceNV_remap_index 247 +#define TestFenceNV_remap_index 248 +#define AreProgramsResidentNV_remap_index 249 +#define BindProgramNV_remap_index 250 +#define DeleteProgramsNV_remap_index 251 +#define ExecuteProgramNV_remap_index 252 +#define GenProgramsNV_remap_index 253 +#define GetProgramParameterdvNV_remap_index 254 +#define GetProgramParameterfvNV_remap_index 255 +#define GetProgramStringNV_remap_index 256 +#define GetProgramivNV_remap_index 257 +#define GetTrackMatrixivNV_remap_index 258 +#define GetVertexAttribPointervNV_remap_index 259 +#define GetVertexAttribdvNV_remap_index 260 +#define GetVertexAttribfvNV_remap_index 261 +#define GetVertexAttribivNV_remap_index 262 +#define IsProgramNV_remap_index 263 +#define LoadProgramNV_remap_index 264 +#define ProgramParameter4dNV_remap_index 265 +#define ProgramParameter4dvNV_remap_index 266 +#define ProgramParameter4fNV_remap_index 267 +#define ProgramParameter4fvNV_remap_index 268 +#define ProgramParameters4dvNV_remap_index 269 +#define ProgramParameters4fvNV_remap_index 270 +#define RequestResidentProgramsNV_remap_index 271 +#define TrackMatrixNV_remap_index 272 +#define VertexAttrib1dNV_remap_index 273 +#define VertexAttrib1dvNV_remap_index 274 +#define VertexAttrib1fNV_remap_index 275 +#define VertexAttrib1fvNV_remap_index 276 +#define VertexAttrib1sNV_remap_index 277 +#define VertexAttrib1svNV_remap_index 278 +#define VertexAttrib2dNV_remap_index 279 +#define VertexAttrib2dvNV_remap_index 280 +#define VertexAttrib2fNV_remap_index 281 +#define VertexAttrib2fvNV_remap_index 282 +#define VertexAttrib2sNV_remap_index 283 +#define VertexAttrib2svNV_remap_index 284 +#define VertexAttrib3dNV_remap_index 285 +#define VertexAttrib3dvNV_remap_index 286 +#define VertexAttrib3fNV_remap_index 287 +#define VertexAttrib3fvNV_remap_index 288 +#define VertexAttrib3sNV_remap_index 289 +#define VertexAttrib3svNV_remap_index 290 +#define VertexAttrib4dNV_remap_index 291 +#define VertexAttrib4dvNV_remap_index 292 +#define VertexAttrib4fNV_remap_index 293 +#define VertexAttrib4fvNV_remap_index 294 +#define VertexAttrib4sNV_remap_index 295 +#define VertexAttrib4svNV_remap_index 296 +#define VertexAttrib4ubNV_remap_index 297 +#define VertexAttrib4ubvNV_remap_index 298 +#define VertexAttribPointerNV_remap_index 299 +#define VertexAttribs1dvNV_remap_index 300 +#define VertexAttribs1fvNV_remap_index 301 +#define VertexAttribs1svNV_remap_index 302 +#define VertexAttribs2dvNV_remap_index 303 +#define VertexAttribs2fvNV_remap_index 304 +#define VertexAttribs2svNV_remap_index 305 +#define VertexAttribs3dvNV_remap_index 306 +#define VertexAttribs3fvNV_remap_index 307 +#define VertexAttribs3svNV_remap_index 308 +#define VertexAttribs4dvNV_remap_index 309 +#define VertexAttribs4fvNV_remap_index 310 +#define VertexAttribs4svNV_remap_index 311 +#define VertexAttribs4ubvNV_remap_index 312 +#define AlphaFragmentOp1ATI_remap_index 313 +#define AlphaFragmentOp2ATI_remap_index 314 +#define AlphaFragmentOp3ATI_remap_index 315 +#define BeginFragmentShaderATI_remap_index 316 +#define BindFragmentShaderATI_remap_index 317 +#define ColorFragmentOp1ATI_remap_index 318 +#define ColorFragmentOp2ATI_remap_index 319 +#define ColorFragmentOp3ATI_remap_index 320 +#define DeleteFragmentShaderATI_remap_index 321 +#define EndFragmentShaderATI_remap_index 322 +#define GenFragmentShadersATI_remap_index 323 +#define PassTexCoordATI_remap_index 324 +#define SampleMapATI_remap_index 325 +#define SetFragmentShaderConstantATI_remap_index 326 +#define PointParameteriNV_remap_index 327 +#define PointParameterivNV_remap_index 328 +#define ActiveStencilFaceEXT_remap_index 329 +#define BindVertexArrayAPPLE_remap_index 330 +#define DeleteVertexArraysAPPLE_remap_index 331 +#define GenVertexArraysAPPLE_remap_index 332 +#define IsVertexArrayAPPLE_remap_index 333 +#define GetProgramNamedParameterdvNV_remap_index 334 +#define GetProgramNamedParameterfvNV_remap_index 335 +#define ProgramNamedParameter4dNV_remap_index 336 +#define ProgramNamedParameter4dvNV_remap_index 337 +#define ProgramNamedParameter4fNV_remap_index 338 +#define ProgramNamedParameter4fvNV_remap_index 339 +#define DepthBoundsEXT_remap_index 340 +#define BlendEquationSeparateEXT_remap_index 341 +#define BindFramebufferEXT_remap_index 342 +#define BindRenderbufferEXT_remap_index 343 +#define CheckFramebufferStatusEXT_remap_index 344 +#define DeleteFramebuffersEXT_remap_index 345 +#define DeleteRenderbuffersEXT_remap_index 346 +#define FramebufferRenderbufferEXT_remap_index 347 +#define FramebufferTexture1DEXT_remap_index 348 +#define FramebufferTexture2DEXT_remap_index 349 +#define FramebufferTexture3DEXT_remap_index 350 +#define GenFramebuffersEXT_remap_index 351 +#define GenRenderbuffersEXT_remap_index 352 +#define GenerateMipmapEXT_remap_index 353 +#define GetFramebufferAttachmentParameterivEXT_remap_index 354 +#define GetRenderbufferParameterivEXT_remap_index 355 +#define IsFramebufferEXT_remap_index 356 +#define IsRenderbufferEXT_remap_index 357 +#define RenderbufferStorageEXT_remap_index 358 +#define BlitFramebufferEXT_remap_index 359 +#define ProgramEnvParameters4fvEXT_remap_index 360 +#define ProgramLocalParameters4fvEXT_remap_index 361 +#define GetQueryObjecti64vEXT_remap_index 362 +#define GetQueryObjectui64vEXT_remap_index 363 + +#define CALL_AttachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), driDispatchRemapTable[AttachShader_remap_index], parameters) +#define GET_AttachShader(disp) GET_by_offset(disp, driDispatchRemapTable[AttachShader_remap_index]) +#define SET_AttachShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AttachShader_remap_index], fn) +#define CALL_CreateProgram(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(void)), driDispatchRemapTable[CreateProgram_remap_index], parameters) +#define GET_CreateProgram(disp) GET_by_offset(disp, driDispatchRemapTable[CreateProgram_remap_index]) +#define SET_CreateProgram(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateProgram_remap_index], fn) +#define CALL_CreateShader(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[CreateShader_remap_index], parameters) +#define GET_CreateShader(disp) GET_by_offset(disp, driDispatchRemapTable[CreateShader_remap_index]) +#define SET_CreateShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateShader_remap_index], fn) +#define CALL_DeleteProgram(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DeleteProgram_remap_index], parameters) +#define GET_DeleteProgram(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteProgram_remap_index]) +#define SET_DeleteProgram(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteProgram_remap_index], fn) +#define CALL_DeleteShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DeleteShader_remap_index], parameters) +#define GET_DeleteShader(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteShader_remap_index]) +#define SET_DeleteShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteShader_remap_index], fn) +#define CALL_DetachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), driDispatchRemapTable[DetachShader_remap_index], parameters) +#define GET_DetachShader(disp) GET_by_offset(disp, driDispatchRemapTable[DetachShader_remap_index]) +#define SET_DetachShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DetachShader_remap_index], fn) +#define CALL_GetAttachedShaders(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLuint *)), driDispatchRemapTable[GetAttachedShaders_remap_index], parameters) +#define GET_GetAttachedShaders(disp) GET_by_offset(disp, driDispatchRemapTable[GetAttachedShaders_remap_index]) +#define SET_GetAttachedShaders(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetAttachedShaders_remap_index], fn) +#define CALL_GetProgramInfoLog(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLchar *)), driDispatchRemapTable[GetProgramInfoLog_remap_index], parameters) +#define GET_GetProgramInfoLog(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramInfoLog_remap_index]) +#define SET_GetProgramInfoLog(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramInfoLog_remap_index], fn) +#define CALL_GetProgramiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetProgramiv_remap_index], parameters) +#define GET_GetProgramiv(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramiv_remap_index]) +#define SET_GetProgramiv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramiv_remap_index], fn) +#define CALL_GetShaderInfoLog(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, GLsizei *, GLchar *)), driDispatchRemapTable[GetShaderInfoLog_remap_index], parameters) +#define GET_GetShaderInfoLog(disp) GET_by_offset(disp, driDispatchRemapTable[GetShaderInfoLog_remap_index]) +#define SET_GetShaderInfoLog(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetShaderInfoLog_remap_index], fn) +#define CALL_GetShaderiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetShaderiv_remap_index], parameters) +#define GET_GetShaderiv(disp) GET_by_offset(disp, driDispatchRemapTable[GetShaderiv_remap_index]) +#define SET_GetShaderiv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetShaderiv_remap_index], fn) +#define CALL_IsProgram(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsProgram_remap_index], parameters) +#define GET_IsProgram(disp) GET_by_offset(disp, driDispatchRemapTable[IsProgram_remap_index]) +#define SET_IsProgram(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsProgram_remap_index], fn) +#define CALL_IsShader(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsShader_remap_index], parameters) +#define GET_IsShader(disp) GET_by_offset(disp, driDispatchRemapTable[IsShader_remap_index]) +#define SET_IsShader(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsShader_remap_index], fn) +#define CALL_StencilFuncSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint, GLuint)), driDispatchRemapTable[StencilFuncSeparate_remap_index], parameters) +#define GET_StencilFuncSeparate(disp) GET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparate_remap_index]) +#define SET_StencilFuncSeparate(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilFuncSeparate_remap_index], fn) +#define CALL_StencilMaskSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[StencilMaskSeparate_remap_index], parameters) +#define GET_StencilMaskSeparate(disp) GET_by_offset(disp, driDispatchRemapTable[StencilMaskSeparate_remap_index]) +#define SET_StencilMaskSeparate(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilMaskSeparate_remap_index], fn) +#define CALL_StencilOpSeparate(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[StencilOpSeparate_remap_index], parameters) +#define GET_StencilOpSeparate(disp) GET_by_offset(disp, driDispatchRemapTable[StencilOpSeparate_remap_index]) +#define SET_StencilOpSeparate(disp, fn) SET_by_offset(disp, driDispatchRemapTable[StencilOpSeparate_remap_index], fn) +#define CALL_UniformMatrix2x3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix2x3fv_remap_index], parameters) +#define GET_UniformMatrix2x3fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x3fv_remap_index]) +#define SET_UniformMatrix2x3fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x3fv_remap_index], fn) +#define CALL_UniformMatrix2x4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix2x4fv_remap_index], parameters) +#define GET_UniformMatrix2x4fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x4fv_remap_index]) +#define SET_UniformMatrix2x4fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix2x4fv_remap_index], fn) +#define CALL_UniformMatrix3x2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix3x2fv_remap_index], parameters) +#define GET_UniformMatrix3x2fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x2fv_remap_index]) +#define SET_UniformMatrix3x2fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x2fv_remap_index], fn) +#define CALL_UniformMatrix3x4fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix3x4fv_remap_index], parameters) +#define GET_UniformMatrix3x4fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x4fv_remap_index]) +#define SET_UniformMatrix3x4fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix3x4fv_remap_index], fn) +#define CALL_UniformMatrix4x2fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix4x2fv_remap_index], parameters) +#define GET_UniformMatrix4x2fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x2fv_remap_index]) +#define SET_UniformMatrix4x2fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x2fv_remap_index], fn) +#define CALL_UniformMatrix4x3fv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix4x3fv_remap_index], parameters) +#define GET_UniformMatrix4x3fv(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x3fv_remap_index]) +#define SET_UniformMatrix4x3fv(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix4x3fv_remap_index], fn) +#define CALL_LoadTransposeMatrixdARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index], parameters) +#define GET_LoadTransposeMatrixdARB(disp) GET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index]) +#define SET_LoadTransposeMatrixdARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index], fn) +#define CALL_LoadTransposeMatrixfARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index], parameters) +#define GET_LoadTransposeMatrixfARB(disp) GET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index]) +#define SET_LoadTransposeMatrixfARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index], fn) +#define CALL_MultTransposeMatrixdARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[MultTransposeMatrixdARB_remap_index], parameters) +#define GET_MultTransposeMatrixdARB(disp) GET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixdARB_remap_index]) +#define SET_MultTransposeMatrixdARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixdARB_remap_index], fn) +#define CALL_MultTransposeMatrixfARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[MultTransposeMatrixfARB_remap_index], parameters) +#define GET_MultTransposeMatrixfARB(disp) GET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixfARB_remap_index]) +#define SET_MultTransposeMatrixfARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultTransposeMatrixfARB_remap_index], fn) +#define CALL_SampleCoverageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLboolean)), driDispatchRemapTable[SampleCoverageARB_remap_index], parameters) +#define GET_SampleCoverageARB(disp) GET_by_offset(disp, driDispatchRemapTable[SampleCoverageARB_remap_index]) +#define SET_SampleCoverageARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SampleCoverageARB_remap_index], fn) +#define CALL_CompressedTexImage1DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexImage1DARB_remap_index], parameters) +#define GET_CompressedTexImage1DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexImage1DARB_remap_index]) +#define SET_CompressedTexImage1DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexImage1DARB_remap_index], fn) +#define CALL_CompressedTexImage2DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexImage2DARB_remap_index], parameters) +#define GET_CompressedTexImage2DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexImage2DARB_remap_index]) +#define SET_CompressedTexImage2DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexImage2DARB_remap_index], fn) +#define CALL_CompressedTexImage3DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexImage3DARB_remap_index], parameters) +#define GET_CompressedTexImage3DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexImage3DARB_remap_index]) +#define SET_CompressedTexImage3DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexImage3DARB_remap_index], fn) +#define CALL_CompressedTexSubImage1DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index], parameters) +#define GET_CompressedTexSubImage1DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index]) +#define SET_CompressedTexSubImage1DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index], fn) +#define CALL_CompressedTexSubImage2DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index], parameters) +#define GET_CompressedTexSubImage2DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index]) +#define SET_CompressedTexSubImage2DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index], fn) +#define CALL_CompressedTexSubImage3DARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index], parameters) +#define GET_CompressedTexSubImage3DARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index]) +#define SET_CompressedTexSubImage3DARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index], fn) +#define CALL_GetCompressedTexImageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLvoid *)), driDispatchRemapTable[GetCompressedTexImageARB_remap_index], parameters) +#define GET_GetCompressedTexImageARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetCompressedTexImageARB_remap_index]) +#define SET_GetCompressedTexImageARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCompressedTexImageARB_remap_index], fn) +#define CALL_DisableVertexAttribArrayARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index], parameters) +#define GET_DisableVertexAttribArrayARB(disp) GET_by_offset(disp, driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index]) +#define SET_DisableVertexAttribArrayARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index], fn) +#define CALL_EnableVertexAttribArrayARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index], parameters) +#define GET_EnableVertexAttribArrayARB(disp) GET_by_offset(disp, driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index]) +#define SET_EnableVertexAttribArrayARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index], fn) +#define CALL_GetProgramEnvParameterdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble *)), driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index], parameters) +#define GET_GetProgramEnvParameterdvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index]) +#define SET_GetProgramEnvParameterdvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index], fn) +#define CALL_GetProgramEnvParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat *)), driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index], parameters) +#define GET_GetProgramEnvParameterfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index]) +#define SET_GetProgramEnvParameterfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index], fn) +#define CALL_GetProgramLocalParameterdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble *)), driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index], parameters) +#define GET_GetProgramLocalParameterdvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index]) +#define SET_GetProgramLocalParameterdvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index], fn) +#define CALL_GetProgramLocalParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat *)), driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index], parameters) +#define GET_GetProgramLocalParameterfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index]) +#define SET_GetProgramLocalParameterfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index], fn) +#define CALL_GetProgramStringARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid *)), driDispatchRemapTable[GetProgramStringARB_remap_index], parameters) +#define GET_GetProgramStringARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramStringARB_remap_index]) +#define SET_GetProgramStringARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramStringARB_remap_index], fn) +#define CALL_GetProgramivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetProgramivARB_remap_index], parameters) +#define GET_GetProgramivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramivARB_remap_index]) +#define SET_GetProgramivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramivARB_remap_index], fn) +#define CALL_GetVertexAttribdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLdouble *)), driDispatchRemapTable[GetVertexAttribdvARB_remap_index], parameters) +#define GET_GetVertexAttribdvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvARB_remap_index]) +#define SET_GetVertexAttribdvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvARB_remap_index], fn) +#define CALL_GetVertexAttribfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat *)), driDispatchRemapTable[GetVertexAttribfvARB_remap_index], parameters) +#define GET_GetVertexAttribfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvARB_remap_index]) +#define SET_GetVertexAttribfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvARB_remap_index], fn) +#define CALL_GetVertexAttribivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetVertexAttribivARB_remap_index], parameters) +#define GET_GetVertexAttribivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivARB_remap_index]) +#define SET_GetVertexAttribivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivARB_remap_index], fn) +#define CALL_ProgramEnvParameter4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index], parameters) +#define GET_ProgramEnvParameter4dARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index]) +#define SET_ProgramEnvParameter4dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index], fn) +#define CALL_ProgramEnvParameter4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLdouble *)), driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index], parameters) +#define GET_ProgramEnvParameter4dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index]) +#define SET_ProgramEnvParameter4dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index], fn) +#define CALL_ProgramEnvParameter4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index], parameters) +#define GET_ProgramEnvParameter4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index]) +#define SET_ProgramEnvParameter4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index], fn) +#define CALL_ProgramEnvParameter4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index], parameters) +#define GET_ProgramEnvParameter4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index]) +#define SET_ProgramEnvParameter4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index], fn) +#define CALL_ProgramLocalParameter4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index], parameters) +#define GET_ProgramLocalParameter4dARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index]) +#define SET_ProgramLocalParameter4dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index], fn) +#define CALL_ProgramLocalParameter4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLdouble *)), driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index], parameters) +#define GET_ProgramLocalParameter4dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index]) +#define SET_ProgramLocalParameter4dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index], fn) +#define CALL_ProgramLocalParameter4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index], parameters) +#define GET_ProgramLocalParameter4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index]) +#define SET_ProgramLocalParameter4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index], fn) +#define CALL_ProgramLocalParameter4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index], parameters) +#define GET_ProgramLocalParameter4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index]) +#define SET_ProgramLocalParameter4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index], fn) +#define CALL_ProgramStringARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[ProgramStringARB_remap_index], parameters) +#define GET_ProgramStringARB(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramStringARB_remap_index]) +#define SET_ProgramStringARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramStringARB_remap_index], fn) +#define CALL_VertexAttrib1dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble)), driDispatchRemapTable[VertexAttrib1dARB_remap_index], parameters) +#define GET_VertexAttrib1dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dARB_remap_index]) +#define SET_VertexAttrib1dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dARB_remap_index], fn) +#define CALL_VertexAttrib1dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib1dvARB_remap_index], parameters) +#define GET_VertexAttrib1dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvARB_remap_index]) +#define SET_VertexAttrib1dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvARB_remap_index], fn) +#define CALL_VertexAttrib1fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat)), driDispatchRemapTable[VertexAttrib1fARB_remap_index], parameters) +#define GET_VertexAttrib1fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fARB_remap_index]) +#define SET_VertexAttrib1fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fARB_remap_index], fn) +#define CALL_VertexAttrib1fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib1fvARB_remap_index], parameters) +#define GET_VertexAttrib1fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvARB_remap_index]) +#define SET_VertexAttrib1fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvARB_remap_index], fn) +#define CALL_VertexAttrib1sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort)), driDispatchRemapTable[VertexAttrib1sARB_remap_index], parameters) +#define GET_VertexAttrib1sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sARB_remap_index]) +#define SET_VertexAttrib1sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sARB_remap_index], fn) +#define CALL_VertexAttrib1svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib1svARB_remap_index], parameters) +#define GET_VertexAttrib1svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svARB_remap_index]) +#define SET_VertexAttrib1svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svARB_remap_index], fn) +#define CALL_VertexAttrib2dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib2dARB_remap_index], parameters) +#define GET_VertexAttrib2dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dARB_remap_index]) +#define SET_VertexAttrib2dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dARB_remap_index], fn) +#define CALL_VertexAttrib2dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib2dvARB_remap_index], parameters) +#define GET_VertexAttrib2dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvARB_remap_index]) +#define SET_VertexAttrib2dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvARB_remap_index], fn) +#define CALL_VertexAttrib2fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib2fARB_remap_index], parameters) +#define GET_VertexAttrib2fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fARB_remap_index]) +#define SET_VertexAttrib2fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fARB_remap_index], fn) +#define CALL_VertexAttrib2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib2fvARB_remap_index], parameters) +#define GET_VertexAttrib2fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvARB_remap_index]) +#define SET_VertexAttrib2fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvARB_remap_index], fn) +#define CALL_VertexAttrib2sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib2sARB_remap_index], parameters) +#define GET_VertexAttrib2sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sARB_remap_index]) +#define SET_VertexAttrib2sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sARB_remap_index], fn) +#define CALL_VertexAttrib2svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib2svARB_remap_index], parameters) +#define GET_VertexAttrib2svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svARB_remap_index]) +#define SET_VertexAttrib2svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svARB_remap_index], fn) +#define CALL_VertexAttrib3dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib3dARB_remap_index], parameters) +#define GET_VertexAttrib3dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dARB_remap_index]) +#define SET_VertexAttrib3dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dARB_remap_index], fn) +#define CALL_VertexAttrib3dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib3dvARB_remap_index], parameters) +#define GET_VertexAttrib3dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvARB_remap_index]) +#define SET_VertexAttrib3dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvARB_remap_index], fn) +#define CALL_VertexAttrib3fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib3fARB_remap_index], parameters) +#define GET_VertexAttrib3fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fARB_remap_index]) +#define SET_VertexAttrib3fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fARB_remap_index], fn) +#define CALL_VertexAttrib3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib3fvARB_remap_index], parameters) +#define GET_VertexAttrib3fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvARB_remap_index]) +#define SET_VertexAttrib3fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvARB_remap_index], fn) +#define CALL_VertexAttrib3sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib3sARB_remap_index], parameters) +#define GET_VertexAttrib3sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sARB_remap_index]) +#define SET_VertexAttrib3sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sARB_remap_index], fn) +#define CALL_VertexAttrib3svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib3svARB_remap_index], parameters) +#define GET_VertexAttrib3svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svARB_remap_index]) +#define SET_VertexAttrib3svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svARB_remap_index], fn) +#define CALL_VertexAttrib4NbvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLbyte *)), driDispatchRemapTable[VertexAttrib4NbvARB_remap_index], parameters) +#define GET_VertexAttrib4NbvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NbvARB_remap_index]) +#define SET_VertexAttrib4NbvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NbvARB_remap_index], fn) +#define CALL_VertexAttrib4NivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), driDispatchRemapTable[VertexAttrib4NivARB_remap_index], parameters) +#define GET_VertexAttrib4NivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NivARB_remap_index]) +#define SET_VertexAttrib4NivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NivARB_remap_index], fn) +#define CALL_VertexAttrib4NsvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib4NsvARB_remap_index], parameters) +#define GET_VertexAttrib4NsvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NsvARB_remap_index]) +#define SET_VertexAttrib4NsvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NsvARB_remap_index], fn) +#define CALL_VertexAttrib4NubARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte)), driDispatchRemapTable[VertexAttrib4NubARB_remap_index], parameters) +#define GET_VertexAttrib4NubARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubARB_remap_index]) +#define SET_VertexAttrib4NubARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubARB_remap_index], fn) +#define CALL_VertexAttrib4NubvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), driDispatchRemapTable[VertexAttrib4NubvARB_remap_index], parameters) +#define GET_VertexAttrib4NubvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubvARB_remap_index]) +#define SET_VertexAttrib4NubvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NubvARB_remap_index], fn) +#define CALL_VertexAttrib4NuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), driDispatchRemapTable[VertexAttrib4NuivARB_remap_index], parameters) +#define GET_VertexAttrib4NuivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NuivARB_remap_index]) +#define SET_VertexAttrib4NuivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NuivARB_remap_index], fn) +#define CALL_VertexAttrib4NusvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLushort *)), driDispatchRemapTable[VertexAttrib4NusvARB_remap_index], parameters) +#define GET_VertexAttrib4NusvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NusvARB_remap_index]) +#define SET_VertexAttrib4NusvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4NusvARB_remap_index], fn) +#define CALL_VertexAttrib4bvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLbyte *)), driDispatchRemapTable[VertexAttrib4bvARB_remap_index], parameters) +#define GET_VertexAttrib4bvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4bvARB_remap_index]) +#define SET_VertexAttrib4bvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4bvARB_remap_index], fn) +#define CALL_VertexAttrib4dARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib4dARB_remap_index], parameters) +#define GET_VertexAttrib4dARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dARB_remap_index]) +#define SET_VertexAttrib4dARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dARB_remap_index], fn) +#define CALL_VertexAttrib4dvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib4dvARB_remap_index], parameters) +#define GET_VertexAttrib4dvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvARB_remap_index]) +#define SET_VertexAttrib4dvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvARB_remap_index], fn) +#define CALL_VertexAttrib4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib4fARB_remap_index], parameters) +#define GET_VertexAttrib4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fARB_remap_index]) +#define SET_VertexAttrib4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fARB_remap_index], fn) +#define CALL_VertexAttrib4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib4fvARB_remap_index], parameters) +#define GET_VertexAttrib4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvARB_remap_index]) +#define SET_VertexAttrib4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvARB_remap_index], fn) +#define CALL_VertexAttrib4ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLint *)), driDispatchRemapTable[VertexAttrib4ivARB_remap_index], parameters) +#define GET_VertexAttrib4ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ivARB_remap_index]) +#define SET_VertexAttrib4ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ivARB_remap_index], fn) +#define CALL_VertexAttrib4sARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib4sARB_remap_index], parameters) +#define GET_VertexAttrib4sARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sARB_remap_index]) +#define SET_VertexAttrib4sARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sARB_remap_index], fn) +#define CALL_VertexAttrib4svARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib4svARB_remap_index], parameters) +#define GET_VertexAttrib4svARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svARB_remap_index]) +#define SET_VertexAttrib4svARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svARB_remap_index], fn) +#define CALL_VertexAttrib4ubvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), driDispatchRemapTable[VertexAttrib4ubvARB_remap_index], parameters) +#define GET_VertexAttrib4ubvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvARB_remap_index]) +#define SET_VertexAttrib4ubvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvARB_remap_index], fn) +#define CALL_VertexAttrib4uivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLuint *)), driDispatchRemapTable[VertexAttrib4uivARB_remap_index], parameters) +#define GET_VertexAttrib4uivARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4uivARB_remap_index]) +#define SET_VertexAttrib4uivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4uivARB_remap_index], fn) +#define CALL_VertexAttrib4usvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLushort *)), driDispatchRemapTable[VertexAttrib4usvARB_remap_index], parameters) +#define GET_VertexAttrib4usvARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4usvARB_remap_index]) +#define SET_VertexAttrib4usvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4usvARB_remap_index], fn) +#define CALL_VertexAttribPointerARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *)), driDispatchRemapTable[VertexAttribPointerARB_remap_index], parameters) +#define GET_VertexAttribPointerARB(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerARB_remap_index]) +#define SET_VertexAttribPointerARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerARB_remap_index], fn) +#define CALL_BindBufferARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindBufferARB_remap_index], parameters) +#define GET_BindBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[BindBufferARB_remap_index]) +#define SET_BindBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindBufferARB_remap_index], fn) +#define CALL_BufferDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizeiptrARB, const GLvoid *, GLenum)), driDispatchRemapTable[BufferDataARB_remap_index], parameters) +#define GET_BufferDataARB(disp) GET_by_offset(disp, driDispatchRemapTable[BufferDataARB_remap_index]) +#define SET_BufferDataARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BufferDataARB_remap_index], fn) +#define CALL_BufferSubDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *)), driDispatchRemapTable[BufferSubDataARB_remap_index], parameters) +#define GET_BufferSubDataARB(disp) GET_by_offset(disp, driDispatchRemapTable[BufferSubDataARB_remap_index]) +#define SET_BufferSubDataARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BufferSubDataARB_remap_index], fn) +#define CALL_DeleteBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteBuffersARB_remap_index], parameters) +#define GET_DeleteBuffersARB(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteBuffersARB_remap_index]) +#define SET_DeleteBuffersARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteBuffersARB_remap_index], fn) +#define CALL_GenBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenBuffersARB_remap_index], parameters) +#define GET_GenBuffersARB(disp) GET_by_offset(disp, driDispatchRemapTable[GenBuffersARB_remap_index]) +#define SET_GenBuffersARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenBuffersARB_remap_index], fn) +#define CALL_GetBufferParameterivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetBufferParameterivARB_remap_index], parameters) +#define GET_GetBufferParameterivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetBufferParameterivARB_remap_index]) +#define SET_GetBufferParameterivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetBufferParameterivARB_remap_index], fn) +#define CALL_GetBufferPointervARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLvoid **)), driDispatchRemapTable[GetBufferPointervARB_remap_index], parameters) +#define GET_GetBufferPointervARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetBufferPointervARB_remap_index]) +#define SET_GetBufferPointervARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetBufferPointervARB_remap_index], fn) +#define CALL_GetBufferSubDataARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *)), driDispatchRemapTable[GetBufferSubDataARB_remap_index], parameters) +#define GET_GetBufferSubDataARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetBufferSubDataARB_remap_index]) +#define SET_GetBufferSubDataARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetBufferSubDataARB_remap_index], fn) +#define CALL_IsBufferARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsBufferARB_remap_index], parameters) +#define GET_IsBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[IsBufferARB_remap_index]) +#define SET_IsBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsBufferARB_remap_index], fn) +#define CALL_MapBufferARB(disp, parameters) CALL_by_offset(disp, (GLvoid * (GLAPIENTRYP)(GLenum, GLenum)), driDispatchRemapTable[MapBufferARB_remap_index], parameters) +#define GET_MapBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[MapBufferARB_remap_index]) +#define SET_MapBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MapBufferARB_remap_index], fn) +#define CALL_UnmapBufferARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[UnmapBufferARB_remap_index], parameters) +#define GET_UnmapBufferARB(disp) GET_by_offset(disp, driDispatchRemapTable[UnmapBufferARB_remap_index]) +#define SET_UnmapBufferARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UnmapBufferARB_remap_index], fn) +#define CALL_BeginQueryARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BeginQueryARB_remap_index], parameters) +#define GET_BeginQueryARB(disp) GET_by_offset(disp, driDispatchRemapTable[BeginQueryARB_remap_index]) +#define SET_BeginQueryARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BeginQueryARB_remap_index], fn) +#define CALL_DeleteQueriesARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteQueriesARB_remap_index], parameters) +#define GET_DeleteQueriesARB(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteQueriesARB_remap_index]) +#define SET_DeleteQueriesARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteQueriesARB_remap_index], fn) +#define CALL_EndQueryARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[EndQueryARB_remap_index], parameters) +#define GET_EndQueryARB(disp) GET_by_offset(disp, driDispatchRemapTable[EndQueryARB_remap_index]) +#define SET_EndQueryARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EndQueryARB_remap_index], fn) +#define CALL_GenQueriesARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenQueriesARB_remap_index], parameters) +#define GET_GenQueriesARB(disp) GET_by_offset(disp, driDispatchRemapTable[GenQueriesARB_remap_index]) +#define SET_GenQueriesARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenQueriesARB_remap_index], fn) +#define CALL_GetQueryObjectivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetQueryObjectivARB_remap_index], parameters) +#define GET_GetQueryObjectivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjectivARB_remap_index]) +#define SET_GetQueryObjectivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjectivARB_remap_index], fn) +#define CALL_GetQueryObjectuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint *)), driDispatchRemapTable[GetQueryObjectuivARB_remap_index], parameters) +#define GET_GetQueryObjectuivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjectuivARB_remap_index]) +#define SET_GetQueryObjectuivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjectuivARB_remap_index], fn) +#define CALL_GetQueryivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetQueryivARB_remap_index], parameters) +#define GET_GetQueryivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryivARB_remap_index]) +#define SET_GetQueryivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryivARB_remap_index], fn) +#define CALL_IsQueryARB(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsQueryARB_remap_index], parameters) +#define GET_IsQueryARB(disp) GET_by_offset(disp, driDispatchRemapTable[IsQueryARB_remap_index]) +#define SET_IsQueryARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsQueryARB_remap_index], fn) +#define CALL_AttachObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLhandleARB)), driDispatchRemapTable[AttachObjectARB_remap_index], parameters) +#define GET_AttachObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[AttachObjectARB_remap_index]) +#define SET_AttachObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AttachObjectARB_remap_index], fn) +#define CALL_CompileShaderARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[CompileShaderARB_remap_index], parameters) +#define GET_CompileShaderARB(disp) GET_by_offset(disp, driDispatchRemapTable[CompileShaderARB_remap_index]) +#define SET_CompileShaderARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CompileShaderARB_remap_index], fn) +#define CALL_CreateProgramObjectARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(void)), driDispatchRemapTable[CreateProgramObjectARB_remap_index], parameters) +#define GET_CreateProgramObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[CreateProgramObjectARB_remap_index]) +#define SET_CreateProgramObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateProgramObjectARB_remap_index], fn) +#define CALL_CreateShaderObjectARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[CreateShaderObjectARB_remap_index], parameters) +#define GET_CreateShaderObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[CreateShaderObjectARB_remap_index]) +#define SET_CreateShaderObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CreateShaderObjectARB_remap_index], fn) +#define CALL_DeleteObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[DeleteObjectARB_remap_index], parameters) +#define GET_DeleteObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteObjectARB_remap_index]) +#define SET_DeleteObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteObjectARB_remap_index], fn) +#define CALL_DetachObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLhandleARB)), driDispatchRemapTable[DetachObjectARB_remap_index], parameters) +#define GET_DetachObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[DetachObjectARB_remap_index]) +#define SET_DetachObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DetachObjectARB_remap_index], fn) +#define CALL_GetActiveUniformARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *)), driDispatchRemapTable[GetActiveUniformARB_remap_index], parameters) +#define GET_GetActiveUniformARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetActiveUniformARB_remap_index]) +#define SET_GetActiveUniformARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetActiveUniformARB_remap_index], fn) +#define CALL_GetAttachedObjectsARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *)), driDispatchRemapTable[GetAttachedObjectsARB_remap_index], parameters) +#define GET_GetAttachedObjectsARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetAttachedObjectsARB_remap_index]) +#define SET_GetAttachedObjectsARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetAttachedObjectsARB_remap_index], fn) +#define CALL_GetHandleARB(disp, parameters) CALL_by_offset(disp, (GLhandleARB (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[GetHandleARB_remap_index], parameters) +#define GET_GetHandleARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetHandleARB_remap_index]) +#define SET_GetHandleARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetHandleARB_remap_index], fn) +#define CALL_GetInfoLogARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *)), driDispatchRemapTable[GetInfoLogARB_remap_index], parameters) +#define GET_GetInfoLogARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetInfoLogARB_remap_index]) +#define SET_GetInfoLogARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetInfoLogARB_remap_index], fn) +#define CALL_GetObjectParameterfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLenum, GLfloat *)), driDispatchRemapTable[GetObjectParameterfvARB_remap_index], parameters) +#define GET_GetObjectParameterfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetObjectParameterfvARB_remap_index]) +#define SET_GetObjectParameterfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetObjectParameterfvARB_remap_index], fn) +#define CALL_GetObjectParameterivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLenum, GLint *)), driDispatchRemapTable[GetObjectParameterivARB_remap_index], parameters) +#define GET_GetObjectParameterivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivARB_remap_index]) +#define SET_GetObjectParameterivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetObjectParameterivARB_remap_index], fn) +#define CALL_GetShaderSourceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *)), driDispatchRemapTable[GetShaderSourceARB_remap_index], parameters) +#define GET_GetShaderSourceARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetShaderSourceARB_remap_index]) +#define SET_GetShaderSourceARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetShaderSourceARB_remap_index], fn) +#define CALL_GetUniformLocationARB(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLhandleARB, const GLcharARB *)), driDispatchRemapTable[GetUniformLocationARB_remap_index], parameters) +#define GET_GetUniformLocationARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetUniformLocationARB_remap_index]) +#define SET_GetUniformLocationARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetUniformLocationARB_remap_index], fn) +#define CALL_GetUniformfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLfloat *)), driDispatchRemapTable[GetUniformfvARB_remap_index], parameters) +#define GET_GetUniformfvARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetUniformfvARB_remap_index]) +#define SET_GetUniformfvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetUniformfvARB_remap_index], fn) +#define CALL_GetUniformivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLint *)), driDispatchRemapTable[GetUniformivARB_remap_index], parameters) +#define GET_GetUniformivARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetUniformivARB_remap_index]) +#define SET_GetUniformivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetUniformivARB_remap_index], fn) +#define CALL_LinkProgramARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[LinkProgramARB_remap_index], parameters) +#define GET_LinkProgramARB(disp) GET_by_offset(disp, driDispatchRemapTable[LinkProgramARB_remap_index]) +#define SET_LinkProgramARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LinkProgramARB_remap_index], fn) +#define CALL_ShaderSourceARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLsizei, const GLcharARB **, const GLint *)), driDispatchRemapTable[ShaderSourceARB_remap_index], parameters) +#define GET_ShaderSourceARB(disp) GET_by_offset(disp, driDispatchRemapTable[ShaderSourceARB_remap_index]) +#define SET_ShaderSourceARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ShaderSourceARB_remap_index], fn) +#define CALL_Uniform1fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat)), driDispatchRemapTable[Uniform1fARB_remap_index], parameters) +#define GET_Uniform1fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1fARB_remap_index]) +#define SET_Uniform1fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1fARB_remap_index], fn) +#define CALL_Uniform1fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform1fvARB_remap_index], parameters) +#define GET_Uniform1fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1fvARB_remap_index]) +#define SET_Uniform1fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1fvARB_remap_index], fn) +#define CALL_Uniform1iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), driDispatchRemapTable[Uniform1iARB_remap_index], parameters) +#define GET_Uniform1iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1iARB_remap_index]) +#define SET_Uniform1iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1iARB_remap_index], fn) +#define CALL_Uniform1ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform1ivARB_remap_index], parameters) +#define GET_Uniform1ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform1ivARB_remap_index]) +#define SET_Uniform1ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform1ivARB_remap_index], fn) +#define CALL_Uniform2fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat)), driDispatchRemapTable[Uniform2fARB_remap_index], parameters) +#define GET_Uniform2fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2fARB_remap_index]) +#define SET_Uniform2fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2fARB_remap_index], fn) +#define CALL_Uniform2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform2fvARB_remap_index], parameters) +#define GET_Uniform2fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2fvARB_remap_index]) +#define SET_Uniform2fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2fvARB_remap_index], fn) +#define CALL_Uniform2iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), driDispatchRemapTable[Uniform2iARB_remap_index], parameters) +#define GET_Uniform2iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2iARB_remap_index]) +#define SET_Uniform2iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2iARB_remap_index], fn) +#define CALL_Uniform2ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform2ivARB_remap_index], parameters) +#define GET_Uniform2ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform2ivARB_remap_index]) +#define SET_Uniform2ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform2ivARB_remap_index], fn) +#define CALL_Uniform3fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[Uniform3fARB_remap_index], parameters) +#define GET_Uniform3fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3fARB_remap_index]) +#define SET_Uniform3fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3fARB_remap_index], fn) +#define CALL_Uniform3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform3fvARB_remap_index], parameters) +#define GET_Uniform3fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3fvARB_remap_index]) +#define SET_Uniform3fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3fvARB_remap_index], fn) +#define CALL_Uniform3iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), driDispatchRemapTable[Uniform3iARB_remap_index], parameters) +#define GET_Uniform3iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3iARB_remap_index]) +#define SET_Uniform3iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3iARB_remap_index], fn) +#define CALL_Uniform3ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform3ivARB_remap_index], parameters) +#define GET_Uniform3ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform3ivARB_remap_index]) +#define SET_Uniform3ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform3ivARB_remap_index], fn) +#define CALL_Uniform4fARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[Uniform4fARB_remap_index], parameters) +#define GET_Uniform4fARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4fARB_remap_index]) +#define SET_Uniform4fARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4fARB_remap_index], fn) +#define CALL_Uniform4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLfloat *)), driDispatchRemapTable[Uniform4fvARB_remap_index], parameters) +#define GET_Uniform4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4fvARB_remap_index]) +#define SET_Uniform4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4fvARB_remap_index], fn) +#define CALL_Uniform4iARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint, GLint)), driDispatchRemapTable[Uniform4iARB_remap_index], parameters) +#define GET_Uniform4iARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4iARB_remap_index]) +#define SET_Uniform4iARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4iARB_remap_index], fn) +#define CALL_Uniform4ivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, const GLint *)), driDispatchRemapTable[Uniform4ivARB_remap_index], parameters) +#define GET_Uniform4ivARB(disp) GET_by_offset(disp, driDispatchRemapTable[Uniform4ivARB_remap_index]) +#define SET_Uniform4ivARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[Uniform4ivARB_remap_index], fn) +#define CALL_UniformMatrix2fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix2fvARB_remap_index], parameters) +#define GET_UniformMatrix2fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix2fvARB_remap_index]) +#define SET_UniformMatrix2fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix2fvARB_remap_index], fn) +#define CALL_UniformMatrix3fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix3fvARB_remap_index], parameters) +#define GET_UniformMatrix3fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix3fvARB_remap_index]) +#define SET_UniformMatrix3fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix3fvARB_remap_index], fn) +#define CALL_UniformMatrix4fvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei, GLboolean, const GLfloat *)), driDispatchRemapTable[UniformMatrix4fvARB_remap_index], parameters) +#define GET_UniformMatrix4fvARB(disp) GET_by_offset(disp, driDispatchRemapTable[UniformMatrix4fvARB_remap_index]) +#define SET_UniformMatrix4fvARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UniformMatrix4fvARB_remap_index], fn) +#define CALL_UseProgramObjectARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[UseProgramObjectARB_remap_index], parameters) +#define GET_UseProgramObjectARB(disp) GET_by_offset(disp, driDispatchRemapTable[UseProgramObjectARB_remap_index]) +#define SET_UseProgramObjectARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UseProgramObjectARB_remap_index], fn) +#define CALL_ValidateProgramARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB)), driDispatchRemapTable[ValidateProgramARB_remap_index], parameters) +#define GET_ValidateProgramARB(disp) GET_by_offset(disp, driDispatchRemapTable[ValidateProgramARB_remap_index]) +#define SET_ValidateProgramARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ValidateProgramARB_remap_index], fn) +#define CALL_BindAttribLocationARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, const GLcharARB *)), driDispatchRemapTable[BindAttribLocationARB_remap_index], parameters) +#define GET_BindAttribLocationARB(disp) GET_by_offset(disp, driDispatchRemapTable[BindAttribLocationARB_remap_index]) +#define SET_BindAttribLocationARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindAttribLocationARB_remap_index], fn) +#define CALL_GetActiveAttribARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *)), driDispatchRemapTable[GetActiveAttribARB_remap_index], parameters) +#define GET_GetActiveAttribARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetActiveAttribARB_remap_index]) +#define SET_GetActiveAttribARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetActiveAttribARB_remap_index], fn) +#define CALL_GetAttribLocationARB(disp, parameters) CALL_by_offset(disp, (GLint (GLAPIENTRYP)(GLhandleARB, const GLcharARB *)), driDispatchRemapTable[GetAttribLocationARB_remap_index], parameters) +#define GET_GetAttribLocationARB(disp) GET_by_offset(disp, driDispatchRemapTable[GetAttribLocationARB_remap_index]) +#define SET_GetAttribLocationARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetAttribLocationARB_remap_index], fn) +#define CALL_DrawBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLenum *)), driDispatchRemapTable[DrawBuffersARB_remap_index], parameters) +#define GET_DrawBuffersARB(disp) GET_by_offset(disp, driDispatchRemapTable[DrawBuffersARB_remap_index]) +#define SET_DrawBuffersARB(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DrawBuffersARB_remap_index], fn) +#define CALL_PolygonOffsetEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), driDispatchRemapTable[PolygonOffsetEXT_remap_index], parameters) +#define GET_PolygonOffsetEXT(disp) GET_by_offset(disp, driDispatchRemapTable[PolygonOffsetEXT_remap_index]) +#define SET_PolygonOffsetEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PolygonOffsetEXT_remap_index], fn) +#define CALL_GetPixelTexGenParameterfvSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index], parameters) +#define GET_GetPixelTexGenParameterfvSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index]) +#define SET_GetPixelTexGenParameterfvSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index], fn) +#define CALL_GetPixelTexGenParameterivSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *)), driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index], parameters) +#define GET_GetPixelTexGenParameterivSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index]) +#define SET_GetPixelTexGenParameterivSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index], fn) +#define CALL_PixelTexGenParameterfSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index], parameters) +#define GET_PixelTexGenParameterfSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index]) +#define SET_PixelTexGenParameterfSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index], fn) +#define CALL_PixelTexGenParameterfvSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index], parameters) +#define GET_PixelTexGenParameterfvSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index]) +#define SET_PixelTexGenParameterfvSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index], fn) +#define CALL_PixelTexGenParameteriSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index], parameters) +#define GET_PixelTexGenParameteriSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index]) +#define SET_PixelTexGenParameteriSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index], fn) +#define CALL_PixelTexGenParameterivSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index], parameters) +#define GET_PixelTexGenParameterivSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index]) +#define SET_PixelTexGenParameterivSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index], fn) +#define CALL_SampleMaskSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampf, GLboolean)), driDispatchRemapTable[SampleMaskSGIS_remap_index], parameters) +#define GET_SampleMaskSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[SampleMaskSGIS_remap_index]) +#define SET_SampleMaskSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SampleMaskSGIS_remap_index], fn) +#define CALL_SamplePatternSGIS(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[SamplePatternSGIS_remap_index], parameters) +#define GET_SamplePatternSGIS(disp) GET_by_offset(disp, driDispatchRemapTable[SamplePatternSGIS_remap_index]) +#define SET_SamplePatternSGIS(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SamplePatternSGIS_remap_index], fn) +#define CALL_ColorPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[ColorPointerEXT_remap_index], parameters) +#define GET_ColorPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ColorPointerEXT_remap_index]) +#define SET_ColorPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorPointerEXT_remap_index], fn) +#define CALL_EdgeFlagPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLsizei, const GLboolean *)), driDispatchRemapTable[EdgeFlagPointerEXT_remap_index], parameters) +#define GET_EdgeFlagPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[EdgeFlagPointerEXT_remap_index]) +#define SET_EdgeFlagPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EdgeFlagPointerEXT_remap_index], fn) +#define CALL_IndexPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[IndexPointerEXT_remap_index], parameters) +#define GET_IndexPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[IndexPointerEXT_remap_index]) +#define SET_IndexPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IndexPointerEXT_remap_index], fn) +#define CALL_NormalPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[NormalPointerEXT_remap_index], parameters) +#define GET_NormalPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[NormalPointerEXT_remap_index]) +#define SET_NormalPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[NormalPointerEXT_remap_index], fn) +#define CALL_TexCoordPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[TexCoordPointerEXT_remap_index], parameters) +#define GET_TexCoordPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[TexCoordPointerEXT_remap_index]) +#define SET_TexCoordPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TexCoordPointerEXT_remap_index], fn) +#define CALL_VertexPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, GLsizei, const GLvoid *)), driDispatchRemapTable[VertexPointerEXT_remap_index], parameters) +#define GET_VertexPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[VertexPointerEXT_remap_index]) +#define SET_VertexPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexPointerEXT_remap_index], fn) +#define CALL_PointParameterfEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), driDispatchRemapTable[PointParameterfEXT_remap_index], parameters) +#define GET_PointParameterfEXT(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameterfEXT_remap_index]) +#define SET_PointParameterfEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameterfEXT_remap_index], fn) +#define CALL_PointParameterfvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[PointParameterfvEXT_remap_index], parameters) +#define GET_PointParameterfvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameterfvEXT_remap_index]) +#define SET_PointParameterfvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameterfvEXT_remap_index], fn) +#define CALL_LockArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLsizei)), driDispatchRemapTable[LockArraysEXT_remap_index], parameters) +#define GET_LockArraysEXT(disp) GET_by_offset(disp, driDispatchRemapTable[LockArraysEXT_remap_index]) +#define SET_LockArraysEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LockArraysEXT_remap_index], fn) +#define CALL_UnlockArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[UnlockArraysEXT_remap_index], parameters) +#define GET_UnlockArraysEXT(disp) GET_by_offset(disp, driDispatchRemapTable[UnlockArraysEXT_remap_index]) +#define SET_UnlockArraysEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[UnlockArraysEXT_remap_index], fn) +#define CALL_CullParameterdvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLdouble *)), driDispatchRemapTable[CullParameterdvEXT_remap_index], parameters) +#define GET_CullParameterdvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[CullParameterdvEXT_remap_index]) +#define SET_CullParameterdvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CullParameterdvEXT_remap_index], fn) +#define CALL_CullParameterfvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), driDispatchRemapTable[CullParameterfvEXT_remap_index], parameters) +#define GET_CullParameterfvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[CullParameterfvEXT_remap_index]) +#define SET_CullParameterfvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CullParameterfvEXT_remap_index], fn) +#define CALL_SecondaryColor3bEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLbyte, GLbyte, GLbyte)), driDispatchRemapTable[SecondaryColor3bEXT_remap_index], parameters) +#define GET_SecondaryColor3bEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bEXT_remap_index]) +#define SET_SecondaryColor3bEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bEXT_remap_index], fn) +#define CALL_SecondaryColor3bvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLbyte *)), driDispatchRemapTable[SecondaryColor3bvEXT_remap_index], parameters) +#define GET_SecondaryColor3bvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bvEXT_remap_index]) +#define SET_SecondaryColor3bvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3bvEXT_remap_index], fn) +#define CALL_SecondaryColor3dEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[SecondaryColor3dEXT_remap_index], parameters) +#define GET_SecondaryColor3dEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dEXT_remap_index]) +#define SET_SecondaryColor3dEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dEXT_remap_index], fn) +#define CALL_SecondaryColor3dvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[SecondaryColor3dvEXT_remap_index], parameters) +#define GET_SecondaryColor3dvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dvEXT_remap_index]) +#define SET_SecondaryColor3dvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3dvEXT_remap_index], fn) +#define CALL_SecondaryColor3fEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[SecondaryColor3fEXT_remap_index], parameters) +#define GET_SecondaryColor3fEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fEXT_remap_index]) +#define SET_SecondaryColor3fEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fEXT_remap_index], fn) +#define CALL_SecondaryColor3fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[SecondaryColor3fvEXT_remap_index], parameters) +#define GET_SecondaryColor3fvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fvEXT_remap_index]) +#define SET_SecondaryColor3fvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3fvEXT_remap_index], fn) +#define CALL_SecondaryColor3iEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), driDispatchRemapTable[SecondaryColor3iEXT_remap_index], parameters) +#define GET_SecondaryColor3iEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3iEXT_remap_index]) +#define SET_SecondaryColor3iEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3iEXT_remap_index], fn) +#define CALL_SecondaryColor3ivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[SecondaryColor3ivEXT_remap_index], parameters) +#define GET_SecondaryColor3ivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ivEXT_remap_index]) +#define SET_SecondaryColor3ivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ivEXT_remap_index], fn) +#define CALL_SecondaryColor3sEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), driDispatchRemapTable[SecondaryColor3sEXT_remap_index], parameters) +#define GET_SecondaryColor3sEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3sEXT_remap_index]) +#define SET_SecondaryColor3sEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3sEXT_remap_index], fn) +#define CALL_SecondaryColor3svEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[SecondaryColor3svEXT_remap_index], parameters) +#define GET_SecondaryColor3svEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3svEXT_remap_index]) +#define SET_SecondaryColor3svEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3svEXT_remap_index], fn) +#define CALL_SecondaryColor3ubEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLubyte, GLubyte, GLubyte)), driDispatchRemapTable[SecondaryColor3ubEXT_remap_index], parameters) +#define GET_SecondaryColor3ubEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubEXT_remap_index]) +#define SET_SecondaryColor3ubEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubEXT_remap_index], fn) +#define CALL_SecondaryColor3ubvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLubyte *)), driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index], parameters) +#define GET_SecondaryColor3ubvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index]) +#define SET_SecondaryColor3ubvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index], fn) +#define CALL_SecondaryColor3uiEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLuint)), driDispatchRemapTable[SecondaryColor3uiEXT_remap_index], parameters) +#define GET_SecondaryColor3uiEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uiEXT_remap_index]) +#define SET_SecondaryColor3uiEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uiEXT_remap_index], fn) +#define CALL_SecondaryColor3uivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLuint *)), driDispatchRemapTable[SecondaryColor3uivEXT_remap_index], parameters) +#define GET_SecondaryColor3uivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uivEXT_remap_index]) +#define SET_SecondaryColor3uivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3uivEXT_remap_index], fn) +#define CALL_SecondaryColor3usEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLushort, GLushort, GLushort)), driDispatchRemapTable[SecondaryColor3usEXT_remap_index], parameters) +#define GET_SecondaryColor3usEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usEXT_remap_index]) +#define SET_SecondaryColor3usEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usEXT_remap_index], fn) +#define CALL_SecondaryColor3usvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLushort *)), driDispatchRemapTable[SecondaryColor3usvEXT_remap_index], parameters) +#define GET_SecondaryColor3usvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usvEXT_remap_index]) +#define SET_SecondaryColor3usvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColor3usvEXT_remap_index], fn) +#define CALL_SecondaryColorPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[SecondaryColorPointerEXT_remap_index], parameters) +#define GET_SecondaryColorPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[SecondaryColorPointerEXT_remap_index]) +#define SET_SecondaryColorPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SecondaryColorPointerEXT_remap_index], fn) +#define CALL_MultiDrawArraysEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *, GLsizei *, GLsizei)), driDispatchRemapTable[MultiDrawArraysEXT_remap_index], parameters) +#define GET_MultiDrawArraysEXT(disp) GET_by_offset(disp, driDispatchRemapTable[MultiDrawArraysEXT_remap_index]) +#define SET_MultiDrawArraysEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiDrawArraysEXT_remap_index], fn) +#define CALL_MultiDrawElementsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei)), driDispatchRemapTable[MultiDrawElementsEXT_remap_index], parameters) +#define GET_MultiDrawElementsEXT(disp) GET_by_offset(disp, driDispatchRemapTable[MultiDrawElementsEXT_remap_index]) +#define SET_MultiDrawElementsEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiDrawElementsEXT_remap_index], fn) +#define CALL_FogCoordPointerEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[FogCoordPointerEXT_remap_index], parameters) +#define GET_FogCoordPointerEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoordPointerEXT_remap_index]) +#define SET_FogCoordPointerEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoordPointerEXT_remap_index], fn) +#define CALL_FogCoorddEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble)), driDispatchRemapTable[FogCoorddEXT_remap_index], parameters) +#define GET_FogCoorddEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoorddEXT_remap_index]) +#define SET_FogCoorddEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoorddEXT_remap_index], fn) +#define CALL_FogCoorddvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[FogCoorddvEXT_remap_index], parameters) +#define GET_FogCoorddvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoorddvEXT_remap_index]) +#define SET_FogCoorddvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoorddvEXT_remap_index], fn) +#define CALL_FogCoordfEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat)), driDispatchRemapTable[FogCoordfEXT_remap_index], parameters) +#define GET_FogCoordfEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoordfEXT_remap_index]) +#define SET_FogCoordfEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoordfEXT_remap_index], fn) +#define CALL_FogCoordfvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[FogCoordfvEXT_remap_index], parameters) +#define GET_FogCoordfvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FogCoordfvEXT_remap_index]) +#define SET_FogCoordfvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FogCoordfvEXT_remap_index], fn) +#define CALL_PixelTexGenSGIX(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[PixelTexGenSGIX_remap_index], parameters) +#define GET_PixelTexGenSGIX(disp) GET_by_offset(disp, driDispatchRemapTable[PixelTexGenSGIX_remap_index]) +#define SET_PixelTexGenSGIX(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PixelTexGenSGIX_remap_index], fn) +#define CALL_BlendFuncSeparateEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[BlendFuncSeparateEXT_remap_index], parameters) +#define GET_BlendFuncSeparateEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BlendFuncSeparateEXT_remap_index]) +#define SET_BlendFuncSeparateEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BlendFuncSeparateEXT_remap_index], fn) +#define CALL_FlushVertexArrayRangeNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index], parameters) +#define GET_FlushVertexArrayRangeNV(disp) GET_by_offset(disp, driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index]) +#define SET_FlushVertexArrayRangeNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index], fn) +#define CALL_VertexArrayRangeNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLvoid *)), driDispatchRemapTable[VertexArrayRangeNV_remap_index], parameters) +#define GET_VertexArrayRangeNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexArrayRangeNV_remap_index]) +#define SET_VertexArrayRangeNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexArrayRangeNV_remap_index], fn) +#define CALL_CombinerInputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[CombinerInputNV_remap_index], parameters) +#define GET_CombinerInputNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerInputNV_remap_index]) +#define SET_CombinerInputNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerInputNV_remap_index], fn) +#define CALL_CombinerOutputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean)), driDispatchRemapTable[CombinerOutputNV_remap_index], parameters) +#define GET_CombinerOutputNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerOutputNV_remap_index]) +#define SET_CombinerOutputNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerOutputNV_remap_index], fn) +#define CALL_CombinerParameterfNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat)), driDispatchRemapTable[CombinerParameterfNV_remap_index], parameters) +#define GET_CombinerParameterfNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameterfNV_remap_index]) +#define SET_CombinerParameterfNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameterfNV_remap_index], fn) +#define CALL_CombinerParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[CombinerParameterfvNV_remap_index], parameters) +#define GET_CombinerParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameterfvNV_remap_index]) +#define SET_CombinerParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameterfvNV_remap_index], fn) +#define CALL_CombinerParameteriNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), driDispatchRemapTable[CombinerParameteriNV_remap_index], parameters) +#define GET_CombinerParameteriNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameteriNV_remap_index]) +#define SET_CombinerParameteriNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameteriNV_remap_index], fn) +#define CALL_CombinerParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[CombinerParameterivNV_remap_index], parameters) +#define GET_CombinerParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[CombinerParameterivNV_remap_index]) +#define SET_CombinerParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CombinerParameterivNV_remap_index], fn) +#define CALL_FinalCombinerInputNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum)), driDispatchRemapTable[FinalCombinerInputNV_remap_index], parameters) +#define GET_FinalCombinerInputNV(disp) GET_by_offset(disp, driDispatchRemapTable[FinalCombinerInputNV_remap_index]) +#define SET_FinalCombinerInputNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FinalCombinerInputNV_remap_index], fn) +#define CALL_GetCombinerInputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLfloat *)), driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index], parameters) +#define GET_GetCombinerInputParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index]) +#define SET_GetCombinerInputParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index], fn) +#define CALL_GetCombinerInputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLenum, GLint *)), driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index], parameters) +#define GET_GetCombinerInputParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index]) +#define SET_GetCombinerInputParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index], fn) +#define CALL_GetCombinerOutputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLfloat *)), driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index], parameters) +#define GET_GetCombinerOutputParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index]) +#define SET_GetCombinerOutputParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index], fn) +#define CALL_GetCombinerOutputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLint *)), driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index], parameters) +#define GET_GetCombinerOutputParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index]) +#define SET_GetCombinerOutputParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index], fn) +#define CALL_GetFinalCombinerInputParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLfloat *)), driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index], parameters) +#define GET_GetFinalCombinerInputParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index]) +#define SET_GetFinalCombinerInputParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index], fn) +#define CALL_GetFinalCombinerInputParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index], parameters) +#define GET_GetFinalCombinerInputParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index]) +#define SET_GetFinalCombinerInputParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index], fn) +#define CALL_ResizeBuffersMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[ResizeBuffersMESA_remap_index], parameters) +#define GET_ResizeBuffersMESA(disp) GET_by_offset(disp, driDispatchRemapTable[ResizeBuffersMESA_remap_index]) +#define SET_ResizeBuffersMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ResizeBuffersMESA_remap_index], fn) +#define CALL_WindowPos2dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble)), driDispatchRemapTable[WindowPos2dMESA_remap_index], parameters) +#define GET_WindowPos2dMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2dMESA_remap_index]) +#define SET_WindowPos2dMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2dMESA_remap_index], fn) +#define CALL_WindowPos2dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[WindowPos2dvMESA_remap_index], parameters) +#define GET_WindowPos2dvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2dvMESA_remap_index]) +#define SET_WindowPos2dvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2dvMESA_remap_index], fn) +#define CALL_WindowPos2fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), driDispatchRemapTable[WindowPos2fMESA_remap_index], parameters) +#define GET_WindowPos2fMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2fMESA_remap_index]) +#define SET_WindowPos2fMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2fMESA_remap_index], fn) +#define CALL_WindowPos2fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[WindowPos2fvMESA_remap_index], parameters) +#define GET_WindowPos2fvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2fvMESA_remap_index]) +#define SET_WindowPos2fvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2fvMESA_remap_index], fn) +#define CALL_WindowPos2iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint)), driDispatchRemapTable[WindowPos2iMESA_remap_index], parameters) +#define GET_WindowPos2iMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2iMESA_remap_index]) +#define SET_WindowPos2iMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2iMESA_remap_index], fn) +#define CALL_WindowPos2ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[WindowPos2ivMESA_remap_index], parameters) +#define GET_WindowPos2ivMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2ivMESA_remap_index]) +#define SET_WindowPos2ivMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2ivMESA_remap_index], fn) +#define CALL_WindowPos2sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort)), driDispatchRemapTable[WindowPos2sMESA_remap_index], parameters) +#define GET_WindowPos2sMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2sMESA_remap_index]) +#define SET_WindowPos2sMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2sMESA_remap_index], fn) +#define CALL_WindowPos2svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[WindowPos2svMESA_remap_index], parameters) +#define GET_WindowPos2svMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos2svMESA_remap_index]) +#define SET_WindowPos2svMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos2svMESA_remap_index], fn) +#define CALL_WindowPos3dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[WindowPos3dMESA_remap_index], parameters) +#define GET_WindowPos3dMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3dMESA_remap_index]) +#define SET_WindowPos3dMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3dMESA_remap_index], fn) +#define CALL_WindowPos3dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[WindowPos3dvMESA_remap_index], parameters) +#define GET_WindowPos3dvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3dvMESA_remap_index]) +#define SET_WindowPos3dvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3dvMESA_remap_index], fn) +#define CALL_WindowPos3fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[WindowPos3fMESA_remap_index], parameters) +#define GET_WindowPos3fMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3fMESA_remap_index]) +#define SET_WindowPos3fMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3fMESA_remap_index], fn) +#define CALL_WindowPos3fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[WindowPos3fvMESA_remap_index], parameters) +#define GET_WindowPos3fvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3fvMESA_remap_index]) +#define SET_WindowPos3fvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3fvMESA_remap_index], fn) +#define CALL_WindowPos3iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint)), driDispatchRemapTable[WindowPos3iMESA_remap_index], parameters) +#define GET_WindowPos3iMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3iMESA_remap_index]) +#define SET_WindowPos3iMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3iMESA_remap_index], fn) +#define CALL_WindowPos3ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[WindowPos3ivMESA_remap_index], parameters) +#define GET_WindowPos3ivMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3ivMESA_remap_index]) +#define SET_WindowPos3ivMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3ivMESA_remap_index], fn) +#define CALL_WindowPos3sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort)), driDispatchRemapTable[WindowPos3sMESA_remap_index], parameters) +#define GET_WindowPos3sMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3sMESA_remap_index]) +#define SET_WindowPos3sMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3sMESA_remap_index], fn) +#define CALL_WindowPos3svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[WindowPos3svMESA_remap_index], parameters) +#define GET_WindowPos3svMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos3svMESA_remap_index]) +#define SET_WindowPos3svMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos3svMESA_remap_index], fn) +#define CALL_WindowPos4dMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[WindowPos4dMESA_remap_index], parameters) +#define GET_WindowPos4dMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4dMESA_remap_index]) +#define SET_WindowPos4dMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4dMESA_remap_index], fn) +#define CALL_WindowPos4dvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLdouble *)), driDispatchRemapTable[WindowPos4dvMESA_remap_index], parameters) +#define GET_WindowPos4dvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4dvMESA_remap_index]) +#define SET_WindowPos4dvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4dvMESA_remap_index], fn) +#define CALL_WindowPos4fMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[WindowPos4fMESA_remap_index], parameters) +#define GET_WindowPos4fMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4fMESA_remap_index]) +#define SET_WindowPos4fMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4fMESA_remap_index], fn) +#define CALL_WindowPos4fvMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLfloat *)), driDispatchRemapTable[WindowPos4fvMESA_remap_index], parameters) +#define GET_WindowPos4fvMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4fvMESA_remap_index]) +#define SET_WindowPos4fvMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4fvMESA_remap_index], fn) +#define CALL_WindowPos4iMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint)), driDispatchRemapTable[WindowPos4iMESA_remap_index], parameters) +#define GET_WindowPos4iMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4iMESA_remap_index]) +#define SET_WindowPos4iMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4iMESA_remap_index], fn) +#define CALL_WindowPos4ivMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLint *)), driDispatchRemapTable[WindowPos4ivMESA_remap_index], parameters) +#define GET_WindowPos4ivMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4ivMESA_remap_index]) +#define SET_WindowPos4ivMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4ivMESA_remap_index], fn) +#define CALL_WindowPos4sMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLshort, GLshort, GLshort, GLshort)), driDispatchRemapTable[WindowPos4sMESA_remap_index], parameters) +#define GET_WindowPos4sMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4sMESA_remap_index]) +#define SET_WindowPos4sMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4sMESA_remap_index], fn) +#define CALL_WindowPos4svMESA(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLshort *)), driDispatchRemapTable[WindowPos4svMESA_remap_index], parameters) +#define GET_WindowPos4svMESA(disp) GET_by_offset(disp, driDispatchRemapTable[WindowPos4svMESA_remap_index]) +#define SET_WindowPos4svMESA(disp, fn) SET_by_offset(disp, driDispatchRemapTable[WindowPos4svMESA_remap_index], fn) +#define CALL_MultiModeDrawArraysIBM(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint)), driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index], parameters) +#define GET_MultiModeDrawArraysIBM(disp) GET_by_offset(disp, driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index]) +#define SET_MultiModeDrawArraysIBM(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index], fn) +#define CALL_MultiModeDrawElementsIBM(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(const GLenum *, const GLsizei *, GLenum, const GLvoid * const *, GLsizei, GLint)), driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index], parameters) +#define GET_MultiModeDrawElementsIBM(disp) GET_by_offset(disp, driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index]) +#define SET_MultiModeDrawElementsIBM(disp, fn) SET_by_offset(disp, driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index], fn) +#define CALL_DeleteFencesNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteFencesNV_remap_index], parameters) +#define GET_DeleteFencesNV(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteFencesNV_remap_index]) +#define SET_DeleteFencesNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteFencesNV_remap_index], fn) +#define CALL_FinishFenceNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[FinishFenceNV_remap_index], parameters) +#define GET_FinishFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[FinishFenceNV_remap_index]) +#define SET_FinishFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FinishFenceNV_remap_index], fn) +#define CALL_GenFencesNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenFencesNV_remap_index], parameters) +#define GET_GenFencesNV(disp) GET_by_offset(disp, driDispatchRemapTable[GenFencesNV_remap_index]) +#define SET_GenFencesNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenFencesNV_remap_index], fn) +#define CALL_GetFenceivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetFenceivNV_remap_index], parameters) +#define GET_GetFenceivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetFenceivNV_remap_index]) +#define SET_GetFenceivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFenceivNV_remap_index], fn) +#define CALL_IsFenceNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsFenceNV_remap_index], parameters) +#define GET_IsFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[IsFenceNV_remap_index]) +#define SET_IsFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsFenceNV_remap_index], fn) +#define CALL_SetFenceNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum)), driDispatchRemapTable[SetFenceNV_remap_index], parameters) +#define GET_SetFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[SetFenceNV_remap_index]) +#define SET_SetFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SetFenceNV_remap_index], fn) +#define CALL_TestFenceNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[TestFenceNV_remap_index], parameters) +#define GET_TestFenceNV(disp) GET_by_offset(disp, driDispatchRemapTable[TestFenceNV_remap_index]) +#define SET_TestFenceNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TestFenceNV_remap_index], fn) +#define CALL_AreProgramsResidentNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLsizei, const GLuint *, GLboolean *)), driDispatchRemapTable[AreProgramsResidentNV_remap_index], parameters) +#define GET_AreProgramsResidentNV(disp) GET_by_offset(disp, driDispatchRemapTable[AreProgramsResidentNV_remap_index]) +#define SET_AreProgramsResidentNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AreProgramsResidentNV_remap_index], fn) +#define CALL_BindProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindProgramNV_remap_index], parameters) +#define GET_BindProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[BindProgramNV_remap_index]) +#define SET_BindProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindProgramNV_remap_index], fn) +#define CALL_DeleteProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteProgramsNV_remap_index], parameters) +#define GET_DeleteProgramsNV(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteProgramsNV_remap_index]) +#define SET_DeleteProgramsNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteProgramsNV_remap_index], fn) +#define CALL_ExecuteProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), driDispatchRemapTable[ExecuteProgramNV_remap_index], parameters) +#define GET_ExecuteProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[ExecuteProgramNV_remap_index]) +#define SET_ExecuteProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ExecuteProgramNV_remap_index], fn) +#define CALL_GenProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenProgramsNV_remap_index], parameters) +#define GET_GenProgramsNV(disp) GET_by_offset(disp, driDispatchRemapTable[GenProgramsNV_remap_index]) +#define SET_GenProgramsNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenProgramsNV_remap_index], fn) +#define CALL_GetProgramParameterdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLdouble *)), driDispatchRemapTable[GetProgramParameterdvNV_remap_index], parameters) +#define GET_GetProgramParameterdvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramParameterdvNV_remap_index]) +#define SET_GetProgramParameterdvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramParameterdvNV_remap_index], fn) +#define CALL_GetProgramParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLfloat *)), driDispatchRemapTable[GetProgramParameterfvNV_remap_index], parameters) +#define GET_GetProgramParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramParameterfvNV_remap_index]) +#define SET_GetProgramParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramParameterfvNV_remap_index], fn) +#define CALL_GetProgramStringNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLubyte *)), driDispatchRemapTable[GetProgramStringNV_remap_index], parameters) +#define GET_GetProgramStringNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramStringNV_remap_index]) +#define SET_GetProgramStringNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramStringNV_remap_index], fn) +#define CALL_GetProgramivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetProgramivNV_remap_index], parameters) +#define GET_GetProgramivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramivNV_remap_index]) +#define SET_GetProgramivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramivNV_remap_index], fn) +#define CALL_GetTrackMatrixivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLint *)), driDispatchRemapTable[GetTrackMatrixivNV_remap_index], parameters) +#define GET_GetTrackMatrixivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetTrackMatrixivNV_remap_index]) +#define SET_GetTrackMatrixivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTrackMatrixivNV_remap_index], fn) +#define CALL_GetVertexAttribPointervNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLvoid **)), driDispatchRemapTable[GetVertexAttribPointervNV_remap_index], parameters) +#define GET_GetVertexAttribPointervNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribPointervNV_remap_index]) +#define SET_GetVertexAttribPointervNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribPointervNV_remap_index], fn) +#define CALL_GetVertexAttribdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLdouble *)), driDispatchRemapTable[GetVertexAttribdvNV_remap_index], parameters) +#define GET_GetVertexAttribdvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvNV_remap_index]) +#define SET_GetVertexAttribdvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribdvNV_remap_index], fn) +#define CALL_GetVertexAttribfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat *)), driDispatchRemapTable[GetVertexAttribfvNV_remap_index], parameters) +#define GET_GetVertexAttribfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvNV_remap_index]) +#define SET_GetVertexAttribfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribfvNV_remap_index], fn) +#define CALL_GetVertexAttribivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), driDispatchRemapTable[GetVertexAttribivNV_remap_index], parameters) +#define GET_GetVertexAttribivNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivNV_remap_index]) +#define SET_GetVertexAttribivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetVertexAttribivNV_remap_index], fn) +#define CALL_IsProgramNV(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsProgramNV_remap_index], parameters) +#define GET_IsProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[IsProgramNV_remap_index]) +#define SET_IsProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsProgramNV_remap_index], fn) +#define CALL_LoadProgramNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLubyte *)), driDispatchRemapTable[LoadProgramNV_remap_index], parameters) +#define GET_LoadProgramNV(disp) GET_by_offset(disp, driDispatchRemapTable[LoadProgramNV_remap_index]) +#define SET_LoadProgramNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[LoadProgramNV_remap_index], fn) +#define CALL_ProgramParameter4dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[ProgramParameter4dNV_remap_index], parameters) +#define GET_ProgramParameter4dNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameter4dNV_remap_index]) +#define SET_ProgramParameter4dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameter4dNV_remap_index], fn) +#define CALL_ProgramParameter4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLdouble *)), driDispatchRemapTable[ProgramParameter4dvNV_remap_index], parameters) +#define GET_ProgramParameter4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameter4dvNV_remap_index]) +#define SET_ProgramParameter4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameter4dvNV_remap_index], fn) +#define CALL_ProgramParameter4fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[ProgramParameter4fNV_remap_index], parameters) +#define GET_ProgramParameter4fNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameter4fNV_remap_index]) +#define SET_ProgramParameter4fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameter4fNV_remap_index], fn) +#define CALL_ProgramParameter4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, const GLfloat *)), driDispatchRemapTable[ProgramParameter4fvNV_remap_index], parameters) +#define GET_ProgramParameter4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameter4fvNV_remap_index]) +#define SET_ProgramParameter4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameter4fvNV_remap_index], fn) +#define CALL_ProgramParameters4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, const GLdouble *)), driDispatchRemapTable[ProgramParameters4dvNV_remap_index], parameters) +#define GET_ProgramParameters4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameters4dvNV_remap_index]) +#define SET_ProgramParameters4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameters4dvNV_remap_index], fn) +#define CALL_ProgramParameters4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, const GLfloat *)), driDispatchRemapTable[ProgramParameters4fvNV_remap_index], parameters) +#define GET_ProgramParameters4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramParameters4fvNV_remap_index]) +#define SET_ProgramParameters4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramParameters4fvNV_remap_index], fn) +#define CALL_RequestResidentProgramsNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[RequestResidentProgramsNV_remap_index], parameters) +#define GET_RequestResidentProgramsNV(disp) GET_by_offset(disp, driDispatchRemapTable[RequestResidentProgramsNV_remap_index]) +#define SET_RequestResidentProgramsNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[RequestResidentProgramsNV_remap_index], fn) +#define CALL_TrackMatrixNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLenum, GLenum)), driDispatchRemapTable[TrackMatrixNV_remap_index], parameters) +#define GET_TrackMatrixNV(disp) GET_by_offset(disp, driDispatchRemapTable[TrackMatrixNV_remap_index]) +#define SET_TrackMatrixNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TrackMatrixNV_remap_index], fn) +#define CALL_VertexAttrib1dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble)), driDispatchRemapTable[VertexAttrib1dNV_remap_index], parameters) +#define GET_VertexAttrib1dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dNV_remap_index]) +#define SET_VertexAttrib1dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dNV_remap_index], fn) +#define CALL_VertexAttrib1dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib1dvNV_remap_index], parameters) +#define GET_VertexAttrib1dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvNV_remap_index]) +#define SET_VertexAttrib1dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1dvNV_remap_index], fn) +#define CALL_VertexAttrib1fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat)), driDispatchRemapTable[VertexAttrib1fNV_remap_index], parameters) +#define GET_VertexAttrib1fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fNV_remap_index]) +#define SET_VertexAttrib1fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fNV_remap_index], fn) +#define CALL_VertexAttrib1fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib1fvNV_remap_index], parameters) +#define GET_VertexAttrib1fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvNV_remap_index]) +#define SET_VertexAttrib1fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1fvNV_remap_index], fn) +#define CALL_VertexAttrib1sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort)), driDispatchRemapTable[VertexAttrib1sNV_remap_index], parameters) +#define GET_VertexAttrib1sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sNV_remap_index]) +#define SET_VertexAttrib1sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1sNV_remap_index], fn) +#define CALL_VertexAttrib1svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib1svNV_remap_index], parameters) +#define GET_VertexAttrib1svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svNV_remap_index]) +#define SET_VertexAttrib1svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib1svNV_remap_index], fn) +#define CALL_VertexAttrib2dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib2dNV_remap_index], parameters) +#define GET_VertexAttrib2dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dNV_remap_index]) +#define SET_VertexAttrib2dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dNV_remap_index], fn) +#define CALL_VertexAttrib2dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib2dvNV_remap_index], parameters) +#define GET_VertexAttrib2dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvNV_remap_index]) +#define SET_VertexAttrib2dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2dvNV_remap_index], fn) +#define CALL_VertexAttrib2fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib2fNV_remap_index], parameters) +#define GET_VertexAttrib2fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fNV_remap_index]) +#define SET_VertexAttrib2fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fNV_remap_index], fn) +#define CALL_VertexAttrib2fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib2fvNV_remap_index], parameters) +#define GET_VertexAttrib2fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvNV_remap_index]) +#define SET_VertexAttrib2fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2fvNV_remap_index], fn) +#define CALL_VertexAttrib2sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib2sNV_remap_index], parameters) +#define GET_VertexAttrib2sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sNV_remap_index]) +#define SET_VertexAttrib2sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2sNV_remap_index], fn) +#define CALL_VertexAttrib2svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib2svNV_remap_index], parameters) +#define GET_VertexAttrib2svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svNV_remap_index]) +#define SET_VertexAttrib2svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib2svNV_remap_index], fn) +#define CALL_VertexAttrib3dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib3dNV_remap_index], parameters) +#define GET_VertexAttrib3dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dNV_remap_index]) +#define SET_VertexAttrib3dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dNV_remap_index], fn) +#define CALL_VertexAttrib3dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib3dvNV_remap_index], parameters) +#define GET_VertexAttrib3dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvNV_remap_index]) +#define SET_VertexAttrib3dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3dvNV_remap_index], fn) +#define CALL_VertexAttrib3fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib3fNV_remap_index], parameters) +#define GET_VertexAttrib3fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fNV_remap_index]) +#define SET_VertexAttrib3fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fNV_remap_index], fn) +#define CALL_VertexAttrib3fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib3fvNV_remap_index], parameters) +#define GET_VertexAttrib3fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvNV_remap_index]) +#define SET_VertexAttrib3fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3fvNV_remap_index], fn) +#define CALL_VertexAttrib3sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib3sNV_remap_index], parameters) +#define GET_VertexAttrib3sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sNV_remap_index]) +#define SET_VertexAttrib3sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3sNV_remap_index], fn) +#define CALL_VertexAttrib3svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib3svNV_remap_index], parameters) +#define GET_VertexAttrib3svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svNV_remap_index]) +#define SET_VertexAttrib3svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib3svNV_remap_index], fn) +#define CALL_VertexAttrib4dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[VertexAttrib4dNV_remap_index], parameters) +#define GET_VertexAttrib4dNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dNV_remap_index]) +#define SET_VertexAttrib4dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dNV_remap_index], fn) +#define CALL_VertexAttrib4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLdouble *)), driDispatchRemapTable[VertexAttrib4dvNV_remap_index], parameters) +#define GET_VertexAttrib4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvNV_remap_index]) +#define SET_VertexAttrib4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4dvNV_remap_index], fn) +#define CALL_VertexAttrib4fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[VertexAttrib4fNV_remap_index], parameters) +#define GET_VertexAttrib4fNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fNV_remap_index]) +#define SET_VertexAttrib4fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fNV_remap_index], fn) +#define CALL_VertexAttrib4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[VertexAttrib4fvNV_remap_index], parameters) +#define GET_VertexAttrib4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvNV_remap_index]) +#define SET_VertexAttrib4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4fvNV_remap_index], fn) +#define CALL_VertexAttrib4sNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLshort, GLshort, GLshort, GLshort)), driDispatchRemapTable[VertexAttrib4sNV_remap_index], parameters) +#define GET_VertexAttrib4sNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sNV_remap_index]) +#define SET_VertexAttrib4sNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4sNV_remap_index], fn) +#define CALL_VertexAttrib4svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLshort *)), driDispatchRemapTable[VertexAttrib4svNV_remap_index], parameters) +#define GET_VertexAttrib4svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svNV_remap_index]) +#define SET_VertexAttrib4svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4svNV_remap_index], fn) +#define CALL_VertexAttrib4ubNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte)), driDispatchRemapTable[VertexAttrib4ubNV_remap_index], parameters) +#define GET_VertexAttrib4ubNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubNV_remap_index]) +#define SET_VertexAttrib4ubNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubNV_remap_index], fn) +#define CALL_VertexAttrib4ubvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLubyte *)), driDispatchRemapTable[VertexAttrib4ubvNV_remap_index], parameters) +#define GET_VertexAttrib4ubvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvNV_remap_index]) +#define SET_VertexAttrib4ubvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttrib4ubvNV_remap_index], fn) +#define CALL_VertexAttribPointerNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLint, GLenum, GLsizei, const GLvoid *)), driDispatchRemapTable[VertexAttribPointerNV_remap_index], parameters) +#define GET_VertexAttribPointerNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerNV_remap_index]) +#define SET_VertexAttribPointerNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribPointerNV_remap_index], fn) +#define CALL_VertexAttribs1dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs1dvNV_remap_index], parameters) +#define GET_VertexAttribs1dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs1dvNV_remap_index]) +#define SET_VertexAttribs1dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs1dvNV_remap_index], fn) +#define CALL_VertexAttribs1fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs1fvNV_remap_index], parameters) +#define GET_VertexAttribs1fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs1fvNV_remap_index]) +#define SET_VertexAttribs1fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs1fvNV_remap_index], fn) +#define CALL_VertexAttribs1svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs1svNV_remap_index], parameters) +#define GET_VertexAttribs1svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs1svNV_remap_index]) +#define SET_VertexAttribs1svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs1svNV_remap_index], fn) +#define CALL_VertexAttribs2dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs2dvNV_remap_index], parameters) +#define GET_VertexAttribs2dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs2dvNV_remap_index]) +#define SET_VertexAttribs2dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs2dvNV_remap_index], fn) +#define CALL_VertexAttribs2fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs2fvNV_remap_index], parameters) +#define GET_VertexAttribs2fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs2fvNV_remap_index]) +#define SET_VertexAttribs2fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs2fvNV_remap_index], fn) +#define CALL_VertexAttribs2svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs2svNV_remap_index], parameters) +#define GET_VertexAttribs2svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs2svNV_remap_index]) +#define SET_VertexAttribs2svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs2svNV_remap_index], fn) +#define CALL_VertexAttribs3dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs3dvNV_remap_index], parameters) +#define GET_VertexAttribs3dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs3dvNV_remap_index]) +#define SET_VertexAttribs3dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs3dvNV_remap_index], fn) +#define CALL_VertexAttribs3fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs3fvNV_remap_index], parameters) +#define GET_VertexAttribs3fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs3fvNV_remap_index]) +#define SET_VertexAttribs3fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs3fvNV_remap_index], fn) +#define CALL_VertexAttribs3svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs3svNV_remap_index], parameters) +#define GET_VertexAttribs3svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs3svNV_remap_index]) +#define SET_VertexAttribs3svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs3svNV_remap_index], fn) +#define CALL_VertexAttribs4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLdouble *)), driDispatchRemapTable[VertexAttribs4dvNV_remap_index], parameters) +#define GET_VertexAttribs4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4dvNV_remap_index]) +#define SET_VertexAttribs4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4dvNV_remap_index], fn) +#define CALL_VertexAttribs4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[VertexAttribs4fvNV_remap_index], parameters) +#define GET_VertexAttribs4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4fvNV_remap_index]) +#define SET_VertexAttribs4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4fvNV_remap_index], fn) +#define CALL_VertexAttribs4svNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLshort *)), driDispatchRemapTable[VertexAttribs4svNV_remap_index], parameters) +#define GET_VertexAttribs4svNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4svNV_remap_index]) +#define SET_VertexAttribs4svNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4svNV_remap_index], fn) +#define CALL_VertexAttribs4ubvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *)), driDispatchRemapTable[VertexAttribs4ubvNV_remap_index], parameters) +#define GET_VertexAttribs4ubvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4ubvNV_remap_index]) +#define SET_VertexAttribs4ubvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4ubvNV_remap_index], fn) +#define CALL_AlphaFragmentOp1ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index], parameters) +#define GET_AlphaFragmentOp1ATI(disp) GET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index]) +#define SET_AlphaFragmentOp1ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index], fn) +#define CALL_AlphaFragmentOp2ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index], parameters) +#define GET_AlphaFragmentOp2ATI(disp) GET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index]) +#define SET_AlphaFragmentOp2ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index], fn) +#define CALL_AlphaFragmentOp3ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index], parameters) +#define GET_AlphaFragmentOp3ATI(disp) GET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index]) +#define SET_AlphaFragmentOp3ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index], fn) +#define CALL_BeginFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[BeginFragmentShaderATI_remap_index], parameters) +#define GET_BeginFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[BeginFragmentShaderATI_remap_index]) +#define SET_BeginFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BeginFragmentShaderATI_remap_index], fn) +#define CALL_BindFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[BindFragmentShaderATI_remap_index], parameters) +#define GET_BindFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[BindFragmentShaderATI_remap_index]) +#define SET_BindFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindFragmentShaderATI_remap_index], fn) +#define CALL_ColorFragmentOp1ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[ColorFragmentOp1ATI_remap_index], parameters) +#define GET_ColorFragmentOp1ATI(disp) GET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp1ATI_remap_index]) +#define SET_ColorFragmentOp1ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp1ATI_remap_index], fn) +#define CALL_ColorFragmentOp2ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[ColorFragmentOp2ATI_remap_index], parameters) +#define GET_ColorFragmentOp2ATI(disp) GET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp2ATI_remap_index]) +#define SET_ColorFragmentOp2ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp2ATI_remap_index], fn) +#define CALL_ColorFragmentOp3ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[ColorFragmentOp3ATI_remap_index], parameters) +#define GET_ColorFragmentOp3ATI(disp) GET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp3ATI_remap_index]) +#define SET_ColorFragmentOp3ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ColorFragmentOp3ATI_remap_index], fn) +#define CALL_DeleteFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[DeleteFragmentShaderATI_remap_index], parameters) +#define GET_DeleteFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteFragmentShaderATI_remap_index]) +#define SET_DeleteFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteFragmentShaderATI_remap_index], fn) +#define CALL_EndFragmentShaderATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(void)), driDispatchRemapTable[EndFragmentShaderATI_remap_index], parameters) +#define GET_EndFragmentShaderATI(disp) GET_by_offset(disp, driDispatchRemapTable[EndFragmentShaderATI_remap_index]) +#define SET_EndFragmentShaderATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[EndFragmentShaderATI_remap_index], fn) +#define CALL_GenFragmentShadersATI(disp, parameters) CALL_by_offset(disp, (GLuint (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[GenFragmentShadersATI_remap_index], parameters) +#define GET_GenFragmentShadersATI(disp) GET_by_offset(disp, driDispatchRemapTable[GenFragmentShadersATI_remap_index]) +#define SET_GenFragmentShadersATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenFragmentShadersATI_remap_index], fn) +#define CALL_PassTexCoordATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLenum)), driDispatchRemapTable[PassTexCoordATI_remap_index], parameters) +#define GET_PassTexCoordATI(disp) GET_by_offset(disp, driDispatchRemapTable[PassTexCoordATI_remap_index]) +#define SET_PassTexCoordATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PassTexCoordATI_remap_index], fn) +#define CALL_SampleMapATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint, GLenum)), driDispatchRemapTable[SampleMapATI_remap_index], parameters) +#define GET_SampleMapATI(disp) GET_by_offset(disp, driDispatchRemapTable[SampleMapATI_remap_index]) +#define SET_SampleMapATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SampleMapATI_remap_index], fn) +#define CALL_SetFragmentShaderConstantATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, const GLfloat *)), driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index], parameters) +#define GET_SetFragmentShaderConstantATI(disp) GET_by_offset(disp, driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index]) +#define SET_SetFragmentShaderConstantATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index], fn) +#define CALL_PointParameteriNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint)), driDispatchRemapTable[PointParameteriNV_remap_index], parameters) +#define GET_PointParameteriNV(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameteriNV_remap_index]) +#define SET_PointParameteriNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameteriNV_remap_index], fn) +#define CALL_PointParameterivNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[PointParameterivNV_remap_index], parameters) +#define GET_PointParameterivNV(disp) GET_by_offset(disp, driDispatchRemapTable[PointParameterivNV_remap_index]) +#define SET_PointParameterivNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[PointParameterivNV_remap_index], fn) +#define CALL_ActiveStencilFaceEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[ActiveStencilFaceEXT_remap_index], parameters) +#define GET_ActiveStencilFaceEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ActiveStencilFaceEXT_remap_index]) +#define SET_ActiveStencilFaceEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ActiveStencilFaceEXT_remap_index], fn) +#define CALL_BindVertexArrayAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[BindVertexArrayAPPLE_remap_index], parameters) +#define GET_BindVertexArrayAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[BindVertexArrayAPPLE_remap_index]) +#define SET_BindVertexArrayAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindVertexArrayAPPLE_remap_index], fn) +#define CALL_DeleteVertexArraysAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index], parameters) +#define GET_DeleteVertexArraysAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index]) +#define SET_DeleteVertexArraysAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index], fn) +#define CALL_GenVertexArraysAPPLE(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenVertexArraysAPPLE_remap_index], parameters) +#define GET_GenVertexArraysAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[GenVertexArraysAPPLE_remap_index]) +#define SET_GenVertexArraysAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenVertexArraysAPPLE_remap_index], fn) +#define CALL_IsVertexArrayAPPLE(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsVertexArrayAPPLE_remap_index], parameters) +#define GET_IsVertexArrayAPPLE(disp) GET_by_offset(disp, driDispatchRemapTable[IsVertexArrayAPPLE_remap_index]) +#define SET_IsVertexArrayAPPLE(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsVertexArrayAPPLE_remap_index], fn) +#define CALL_GetProgramNamedParameterdvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLdouble *)), driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index], parameters) +#define GET_GetProgramNamedParameterdvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index]) +#define SET_GetProgramNamedParameterdvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index], fn) +#define CALL_GetProgramNamedParameterfvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLfloat *)), driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index], parameters) +#define GET_GetProgramNamedParameterfvNV(disp) GET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index]) +#define SET_GetProgramNamedParameterfvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index], fn) +#define CALL_ProgramNamedParameter4dNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble)), driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index], parameters) +#define GET_ProgramNamedParameter4dNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index]) +#define SET_ProgramNamedParameter4dNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index], fn) +#define CALL_ProgramNamedParameter4dvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, const GLdouble *)), driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index], parameters) +#define GET_ProgramNamedParameter4dvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index]) +#define SET_ProgramNamedParameter4dvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index], fn) +#define CALL_ProgramNamedParameter4fNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat)), driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index], parameters) +#define GET_ProgramNamedParameter4fNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index]) +#define SET_ProgramNamedParameter4fNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index], fn) +#define CALL_ProgramNamedParameter4fvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *, const GLfloat *)), driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index], parameters) +#define GET_ProgramNamedParameter4fvNV(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index]) +#define SET_ProgramNamedParameter4fvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index], fn) +#define CALL_DepthBoundsEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLclampd, GLclampd)), driDispatchRemapTable[DepthBoundsEXT_remap_index], parameters) +#define GET_DepthBoundsEXT(disp) GET_by_offset(disp, driDispatchRemapTable[DepthBoundsEXT_remap_index]) +#define SET_DepthBoundsEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DepthBoundsEXT_remap_index], fn) +#define CALL_BlendEquationSeparateEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), driDispatchRemapTable[BlendEquationSeparateEXT_remap_index], parameters) +#define GET_BlendEquationSeparateEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BlendEquationSeparateEXT_remap_index]) +#define SET_BlendEquationSeparateEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BlendEquationSeparateEXT_remap_index], fn) +#define CALL_BindFramebufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindFramebufferEXT_remap_index], parameters) +#define GET_BindFramebufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BindFramebufferEXT_remap_index]) +#define SET_BindFramebufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindFramebufferEXT_remap_index], fn) +#define CALL_BindRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), driDispatchRemapTable[BindRenderbufferEXT_remap_index], parameters) +#define GET_BindRenderbufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BindRenderbufferEXT_remap_index]) +#define SET_BindRenderbufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BindRenderbufferEXT_remap_index], fn) +#define CALL_CheckFramebufferStatusEXT(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index], parameters) +#define GET_CheckFramebufferStatusEXT(disp) GET_by_offset(disp, driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index]) +#define SET_CheckFramebufferStatusEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index], fn) +#define CALL_DeleteFramebuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteFramebuffersEXT_remap_index], parameters) +#define GET_DeleteFramebuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteFramebuffersEXT_remap_index]) +#define SET_DeleteFramebuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteFramebuffersEXT_remap_index], fn) +#define CALL_DeleteRenderbuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index], parameters) +#define GET_DeleteRenderbuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index]) +#define SET_DeleteRenderbuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index], fn) +#define CALL_FramebufferRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint)), driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index], parameters) +#define GET_FramebufferRenderbufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index]) +#define SET_FramebufferRenderbufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index], fn) +#define CALL_FramebufferTexture1DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint)), driDispatchRemapTable[FramebufferTexture1DEXT_remap_index], parameters) +#define GET_FramebufferTexture1DEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTexture1DEXT_remap_index]) +#define SET_FramebufferTexture1DEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTexture1DEXT_remap_index], fn) +#define CALL_FramebufferTexture2DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint)), driDispatchRemapTable[FramebufferTexture2DEXT_remap_index], parameters) +#define GET_FramebufferTexture2DEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTexture2DEXT_remap_index]) +#define SET_FramebufferTexture2DEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTexture2DEXT_remap_index], fn) +#define CALL_FramebufferTexture3DEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLuint, GLint, GLint)), driDispatchRemapTable[FramebufferTexture3DEXT_remap_index], parameters) +#define GET_FramebufferTexture3DEXT(disp) GET_by_offset(disp, driDispatchRemapTable[FramebufferTexture3DEXT_remap_index]) +#define SET_FramebufferTexture3DEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[FramebufferTexture3DEXT_remap_index], fn) +#define CALL_GenFramebuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenFramebuffersEXT_remap_index], parameters) +#define GET_GenFramebuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GenFramebuffersEXT_remap_index]) +#define SET_GenFramebuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenFramebuffersEXT_remap_index], fn) +#define CALL_GenRenderbuffersEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), driDispatchRemapTable[GenRenderbuffersEXT_remap_index], parameters) +#define GET_GenRenderbuffersEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GenRenderbuffersEXT_remap_index]) +#define SET_GenRenderbuffersEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenRenderbuffersEXT_remap_index], fn) +#define CALL_GenerateMipmapEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum)), driDispatchRemapTable[GenerateMipmapEXT_remap_index], parameters) +#define GET_GenerateMipmapEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GenerateMipmapEXT_remap_index]) +#define SET_GenerateMipmapEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GenerateMipmapEXT_remap_index], fn) +#define CALL_GetFramebufferAttachmentParameterivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLint *)), driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index], parameters) +#define GET_GetFramebufferAttachmentParameterivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index]) +#define SET_GetFramebufferAttachmentParameterivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index], fn) +#define CALL_GetRenderbufferParameterivEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLint *)), driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index], parameters) +#define GET_GetRenderbufferParameterivEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index]) +#define SET_GetRenderbufferParameterivEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index], fn) +#define CALL_IsFramebufferEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsFramebufferEXT_remap_index], parameters) +#define GET_IsFramebufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[IsFramebufferEXT_remap_index]) +#define SET_IsFramebufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsFramebufferEXT_remap_index], fn) +#define CALL_IsRenderbufferEXT(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), driDispatchRemapTable[IsRenderbufferEXT_remap_index], parameters) +#define GET_IsRenderbufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[IsRenderbufferEXT_remap_index]) +#define SET_IsRenderbufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[IsRenderbufferEXT_remap_index], fn) +#define CALL_RenderbufferStorageEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLsizei)), driDispatchRemapTable[RenderbufferStorageEXT_remap_index], parameters) +#define GET_RenderbufferStorageEXT(disp) GET_by_offset(disp, driDispatchRemapTable[RenderbufferStorageEXT_remap_index]) +#define SET_RenderbufferStorageEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[RenderbufferStorageEXT_remap_index], fn) +#define CALL_BlitFramebufferEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum)), driDispatchRemapTable[BlitFramebufferEXT_remap_index], parameters) +#define GET_BlitFramebufferEXT(disp) GET_by_offset(disp, driDispatchRemapTable[BlitFramebufferEXT_remap_index]) +#define SET_BlitFramebufferEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[BlitFramebufferEXT_remap_index], fn) +#define CALL_ProgramEnvParameters4fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index], parameters) +#define GET_ProgramEnvParameters4fvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index]) +#define SET_ProgramEnvParameters4fvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index], fn) +#define CALL_ProgramLocalParameters4fvEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLsizei, const GLfloat *)), driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index], parameters) +#define GET_ProgramLocalParameters4fvEXT(disp) GET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index]) +#define SET_ProgramLocalParameters4fvEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index], fn) +#define CALL_GetQueryObjecti64vEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint64EXT *)), driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index], parameters) +#define GET_GetQueryObjecti64vEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index]) +#define SET_GetQueryObjecti64vEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index], fn) +#define CALL_GetQueryObjectui64vEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint64EXT *)), driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index], parameters) +#define GET_GetQueryObjectui64vEXT(disp) GET_by_offset(disp, driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index]) +#define SET_GetQueryObjectui64vEXT(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index], fn) + +#endif /* !defined(IN_DRI_DRIVER) */ + +#endif /* !defined( _DISPATCH_H_ ) */ diff --git a/src/kits/opengl/mesa/glapi/glX_XML.py b/src/kits/opengl/mesa/glapi/glX_XML.py deleted file mode 100644 index 4a4caddd23..0000000000 --- a/src/kits/opengl/mesa/glapi/glX_XML.py +++ /dev/null @@ -1,476 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import license -import sys, getopt - - -def printPure(): - print """# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define PURE __attribute__((pure)) -# else -# define PURE -# endif""" - -def printFastcall(): - print """# if defined(__i386__) && defined(__GNUC__) -# define FASTCALL __attribute__((fastcall)) -# else -# define FASTCALL -# endif""" - -def printVisibility(S, s): - print """# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) -# define %s __attribute__((visibility("%s"))) -# else -# define %s -# endif""" % (S, s, S) - -def printNoinline(): - print """# if defined(__GNUC__) -# define NOINLINE __attribute__((noinline)) -# else -# define NOINLINE -# endif""" - - -class glXItemFactory(gl_XML.glItemFactory): - """Factory to create GLX protocol oriented objects derived from glItem.""" - - def create(self, context, name, attrs): - if name == "function": - return glXFunction(context, name, attrs) - elif name == "enum": - return glXEnum(context, name, attrs) - elif name == "param": - return glXParameter(context, name, attrs) - else: - return gl_XML.glItemFactory.create(self, context, name, attrs) - -class glXEnumFunction: - def __init__(self, name): - self.name = name - - # "enums" is a set of lists. The element in the set is the - # value of the enum. The list is the list of names for that - # value. For example, [0x8126] = {"POINT_SIZE_MIN", - # "POINT_SIZE_MIN_ARB", "POINT_SIZE_MIN_EXT", - # "POINT_SIZE_MIN_SGIS"}. - - self.enums = {} - - # "count" is indexed by count values. Each element of count - # is a list of index to "enums" that have that number of - # associated data elements. For example, [4] = - # {GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, - # GL_AMBIENT_AND_DIFFUSE} (the enum names are used here, - # but the actual hexadecimal values would be in the array). - - self.count = {} - - - def append(self, count, value, name): - if self.enums.has_key( value ): - self.enums[value].append(name) - else: - if not self.count.has_key(count): - self.count[count] = [] - - self.enums[value] = [] - self.enums[value].append(name) - self.count[count].append(value) - - - def signature( self ): - sig = "" - for i in self.count: - for e in self.count[i]: - sig += "%04x,%u," % (e, i) - - return sig; - - - def PrintUsingTable(self): - """Emit the body of the __gl*_size function using a pair - of look-up tables and a mask. The mask is calculated such - that (e & mask) is unique for all the valid values of e for - this function. The result of (e & mask) is used as an index - into the first look-up table. If it matches e, then the - same entry of the second table is returned. Otherwise zero - is returned. - - It seems like this should cause better code to be generated. - However, on x86 at least, the resulting .o file is about 20% - larger then the switch-statment version. I am leaving this - code in because the results may be different on other - platforms (e.g., PowerPC or x86-64).""" - - return 0 - count = 0 - for a in self.enums: - count += 1 - - # Determine if there is some mask M, such that M = (2^N) - 1, - # that will generate unique values for all of the enums. - - mask = 0 - for i in [1, 2, 3, 4, 5, 6, 7, 8]: - mask = (1 << i) - 1 - - fail = 0; - for a in self.enums: - for b in self.enums: - if a != b: - if (a & mask) == (b & mask): - fail = 1; - - if not fail: - break; - else: - mask = 0 - - if (mask != 0) and (mask < (2 * count)): - masked_enums = {} - masked_count = {} - - for i in range(0, mask + 1): - masked_enums[i] = "0"; - masked_count[i] = 0; - - for c in self.count: - for e in self.count[c]: - i = e & mask - masked_enums[i] = '0x%04x /* %s */' % (e, self.enums[e][0]) - masked_count[i] = c - - - print ' static const GLushort a[%u] = {' % (mask + 1) - for e in masked_enums: - print ' %s, ' % (masked_enums[e]) - print ' };' - - print ' static const GLubyte b[%u] = {' % (mask + 1) - for c in masked_count: - print ' %u, ' % (masked_count[c]) - print ' };' - - print ' const unsigned idx = (e & 0x%02xU);' % (mask) - print '' - print ' return (e == a[idx]) ? (GLint) b[idx] : 0;' - return 1; - else: - return 0; - - def PrintUsingSwitch(self): - """Emit the body of the __gl*_size function using a - switch-statement.""" - - print ' switch( e ) {' - - for c in self.count: - for e in self.count[c]: - first = 1 - - # There may be multiple enums with the same - # value. This happens has extensions are - # promoted from vendor-specific or EXT to - # ARB and to the core. Emit the first one as - # a case label, and emit the others as - # commented-out case labels. - - for j in self.enums[e]: - if first: - print ' case %s:' % (j) - first = 0 - else: - print '/* case %s:*/' % (j) - - print ' return %u;' % (c) - - print ' default: return 0;' - print ' }' - - - def Print(self, name): - print 'INTERNAL PURE FASTCALL GLint' - print '__gl%s_size( GLenum e )' % (name) - print '{' - - if not self.PrintUsingTable(): - self.PrintUsingSwitch() - - print '}' - print '' - - - -class glXEnum(gl_XML.glEnum): - def __init__(self, context, name, attrs): - gl_XML.glEnum.__init__(self, context, name, attrs) - self.glx_functions = [] - - def startElement(self, name, attrs): - if name == "size": - n = attrs.get('name', None) - if not self.context.glx_enum_functions.has_key( n ): - f = glXEnumFunction( n ) - self.context.glx_enum_functions[ f.name ] = f - - temp = attrs.get('count', None) - try: - c = int(temp) - except Exception,e: - raise RuntimeError('Invalid count value "%s" for enum "%s" in function "%s" when an integer was expected.' % (temp, self.name, n)) - - self.context.glx_enum_functions[ n ].append( c, self.value, self.name ) - else: - gl_XML.glEnum.startElement(self, context, name, attrs) - return - - -class glXParameter(gl_XML.glParameter): - def __init__(self, context, name, attrs): - self.order = 1; - gl_XML.glParameter.__init__(self, context, name, attrs); - - -class glXFunction(gl_XML.glFunction): - glx_rop = 0 - glx_sop = 0 - glx_vendorpriv = 0 - - # If this is set to true, it means that GLdouble parameters should be - # written to the GLX protocol packet in the order they appear in the - # prototype. This is different from the "classic" ordering. In the - # classic ordering GLdoubles are written to the protocol packet first, - # followed by non-doubles. NV_vertex_program was the first extension - # to break with this tradition. - - glx_doubles_in_order = 0 - - vectorequiv = None - handcode = 0 - ignore = 0 - can_be_large = 0 - - def __init__(self, context, name, attrs): - self.vectorequiv = attrs.get('vectorequiv', None) - self.count_parameters = None - self.counter = None - self.output = None - self.can_be_large = 0 - self.reply_always_array = 0 - - gl_XML.glFunction.__init__(self, context, name, attrs) - return - - def startElement(self, name, attrs): - """Process elements within a function that are specific to GLX.""" - - if name == "glx": - self.glx_rop = int(attrs.get('rop', "0")) - self.glx_sop = int(attrs.get('sop', "0")) - self.glx_vendorpriv = int(attrs.get('vendorpriv', "0")) - - if attrs.get('handcode', "false") == "true": - self.handcode = 1 - else: - self.handcode = 0 - - if attrs.get('ignore', "false") == "true": - self.ignore = 1 - else: - self.ignore = 0 - - if attrs.get('large', "false") == "true": - self.can_be_large = 1 - else: - self.can_be_large = 0 - - if attrs.get('doubles_in_order', "false") == "true": - self.glx_doubles_in_order = 1 - else: - self.glx_doubles_in_order = 0 - - if attrs.get('always_array', "false") == "true": - self.reply_always_array = 1 - else: - self.reply_always_array = 0 - - else: - gl_XML.glFunction.startElement(self, name, attrs) - - - def append(self, tag_name, p): - gl_XML.glFunction.append(self, tag_name, p) - - if p.is_variable_length_array(): - p.order = 2; - elif not self.glx_doubles_in_order and p.p_type.size == 8: - p.order = 0; - - if p.p_count_parameters != None: - self.count_parameters = p.p_count_parameters - - if p.is_counter: - self.counter = p.name - - if p.is_output: - self.output = p - - return - - def variable_length_parameter(self): - for param in self.fn_parameters: - if param.is_variable_length_array(): - return param - - return None - - - def command_payload_length(self): - size = 0 - size_string = "" - for p in self: - if p.is_output: continue - temp = p.size_string() - try: - s = int(temp) - size += s - except Exception,e: - size_string = size_string + " + __GLX_PAD(%s)" % (temp) - - return [size, size_string] - - def command_length(self): - [size, size_string] = self.command_payload_length() - - if self.glx_rop != 0: - size += 4 - - size = ((size + 3) & ~3) - return "%u%s" % (size, size_string) - - - def opcode_real_value(self): - if self.glx_vendorpriv != 0: - if self.needs_reply(): - return 17 - else: - return 16 - else: - return self.opcode_value() - - def opcode_value(self): - if self.glx_rop != 0: - return self.glx_rop - elif self.glx_sop != 0: - return self.glx_sop - elif self.glx_vendorpriv != 0: - return self.glx_vendorpriv - else: - return -1 - - def opcode_rop_basename(self): - if self.vectorequiv == None: - return self.name - else: - return self.vectorequiv - - def opcode_name(self): - if self.glx_rop != 0: - return "X_GLrop_%s" % (self.opcode_rop_basename()) - elif self.glx_sop != 0: - return "X_GLsop_%s" % (self.name) - elif self.glx_vendorpriv != 0: - return "X_GLvop_%s" % (self.name) - else: - return "ERROR" - - def opcode_real_name(self): - if self.glx_vendorpriv != 0: - if self.needs_reply(): - return "X_GLXVendorPrivateWithReply" - else: - return "X_GLXVendorPrivate" - else: - return self.opcode_name() - - - def return_string(self): - if self.fn_return_type != 'void': - return "return retval;" - else: - return "return;" - - - def needs_reply(self): - return self.fn_return_type != 'void' or self.output != None - - -class GlxProto(gl_XML.FilterGLAPISpecBase): - name = "glX_proto_send.py (from Mesa)" - - def __init__(self): - gl_XML.FilterGLAPISpecBase.__init__(self) - self.factory = glXItemFactory() - self.glx_enum_functions = {} - - - def endElement(self, name): - if name == 'O - glx_program was the fir.odeWdeWdeWde TO - g nmentr glx_progrWpeturn None - - - d%O - glxeWdeWdGLrop_%s" % ( prray = 0 - -_sop ! e_n): - for pize getmEo1ry() - self.glx_enum_funct,Lmand_pay = 0pnt(self, n,!= 0: - sew_pay = 0pnt(self, n,!= 0: - sew_pabX,!= 0: - sew_pabX,!= 0: - sew_pabX)' lf) -)e != 'void'Pin "re%glx p.order = 0; - - if p.p_count_parame self.output = pder =pder =.p_count_parame self.output = 0;cNA = 0 - - return [size, si2169 -#!/usr/bin/ retu g (C) Copyright IBM Corporize_st0: - g All Rights Reserved s g Permispe !=selcode - - -grmane4 - -free off.ga_fu, \ No newline at end of file diff --git a/src/kits/opengl/mesa/glapi/glX_doc.py b/src/kits/opengl/mesa/glapi/glX_doc.py deleted file mode 100644 index 3755dbe586..0000000000 --- a/src/kits/opengl/mesa/glapi/glX_doc.py +++ /dev/null @@ -1,278 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004, 2005 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import glX_XML -import license -import sys, getopt - - -class glXDocItemFactory(glX_XML.glXItemFactory): - """Factory to create GLX protocol documentation oriented objects derived from glItem.""" - - def create(self, context, name, attrs): - if name == "param": - return glXDocParameter(context, name, attrs) - else: - return glX_XML.glXItemFactory.create(self, context, name, attrs) - -class glXDocParameter(gl_XML.glParameter): - def __init__(self, context, name, attrs): - self.order = 1; - gl_XML.glParameter.__init__(self, context, name, attrs); - - - def packet_type(self): - """Get the type string for the packet header - - GLX protocol documentation uses type names like CARD32, - FLOAT64, LISTofCARD8, and ENUM. This function converts the - type of the parameter to one of these names.""" - - list_of = "" - if self.is_array(): - list_of = "LISTof" - - if self.p_type.glx_name == "": - type_name = "CARD8" - else: - type_name = self.p_type.glx_name - - return "%s%s" % (list_of, type_name) - - def packet_size(self): - p = None - s = self.size() - if s == 0: - a_prod = "n" - b_prod = self.p_type.size - - if self.p_count_parameters == None and self.counter != None: - a_prod = self.counter - elif (self.p_count_parameters != None and self.counter == None) or (self.is_output): - pass - elif self.p_count_parameters != None and self.counter != None: - b_prod = self.counter - else: - raise RuntimeError("Parameter '%s' to function '%s' has size 0." % (self.name, self.context.name)) - - ss = "%s*%s" % (a_prod, b_prod) - - return [ss, p] - else: - if s % 4 != 0: - p = "p" - - return [str(s), p] - -class PrintGlxProtoText(glX_XML.GlxProto): - def __init__(self): - glX_XML.GlxProto.__init__(self) - self.factory = glXDocItemFactory() - self.last_category = "" - self.license = "" - - def printHeader(self): - return - - def body_size(self, f): - # At some point, refactor this function and - # glXFunction::command_payload_length. - - size = 0; - size_str = "" - pad_str = "" - plus = "" - for p in f.parameterIterator(1, 2): - [s, pad] = p.packet_size() - try: - size += int(s) - except Exception,e: - size_str += "%s%s" % (plus, s) - plus = "+" - - if pad != None: - pad_str = pad - - return [size, size_str, pad_str] - - def print_render_header(self, f): - [size, size_str, pad_str] = self.body_size(f) - size += 4; - - if size_str == "": - s = "%u" % ((size + 3) & ~3) - elif pad_str != "": - s = "%u+%s+%s" % (size, size_str, pad_str) - else: - s = "%u+%s" % (size, size_str) - - print ' 2 %-15s rendering command length' % (s) - print ' 2 %-4u rendering command opcode' % (f.glx_rop) - return - - - def print_single_header(self, f): - [size, size_str, pad_str] = self.body_size(f) - size = ((size + 3) / 4) + 2; - - if f.glx_vendorpriv != 0: - size += 1 - - print ' 1 CARD8 opcode (X assigned)' - print ' 1 %-4u GLX opcode (%s)' % (f.opcode_real_value(), f.opcode_real_name()) - - if size_str == "": - s = "%u" % (size) - elif pad_str != "": - s = "%u+((%s+%s)/4)" % (size, size_str, pad_str) - else: - s = "%u+((%s)/4)" % (size, size_str) - - print ' 2 %-15s request length' % (s) - - if f.glx_vendorpriv != 0: - print ' 4 %-4u vendor specific opcode' % (f.opcode_value()) - - print ' 4 GLX_CONTEXT_TAG context tag' - - return - - def print_reply(self, f): - print ' =>' - print ' 1 1 reply' - print ' 1 unused' - print ' 2 CARD16 sequence number' - - if f.output == None: - print ' 4 0 reply length' - elif f.reply_always_array: - print ' 4 m reply length' - else: - print ' 4 m reply length, m = (n == 1 ? 0 : n)' - - - unused = 24 - if f.fn_return_type != 'void': - print ' 4 %-15s return value' % (f.fn_return_type) - unused -= 4 - elif f.output != None: - print ' 4 unused' - unused -= 4 - - if f.output != None: - print ' 4 CARD32 n' - unused -= 4 - - if f.output != None: - if not f.reply_always_array: - print '' - print ' if (n = 1) this follows:' - print '' - print ' 4 CARD32 %s' % (f.output.name) - print ' %-2u unused' % (unused - 4) - print '' - print ' otherwise this follows:' - print '' - - print ' %-2u unused' % (unused) - p = f.output - [s, pad] = p.packet_size() - print ' %-8s %-15s %s' % (s, p.packet_type(), p.name) - if pad != None: - try: - bytes = int(s) - bytes = 4 - (bytes & 3) - print ' %-8u %-15s unused' % (bytes, "") - except Exception,e: - print ' %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s) - else: - print ' %-2u unused' % (unused) - - - def print_body(self, f): - for p in f.parameterIterator(1, 2): - [s, pad] = p.packet_size() - print ' %-8s %-15s %s' % (s, p.packet_type(), p.name) - if pad != None: - try: - bytes = int(s) - bytes = 4 - (bytes & 3) - print ' %-8u %-15s unused' % (bytes, "") - except Exception,e: - print ' %-8s %-15s unused, %s=pad(%s)' % (pad, "", pad, s) - - def printFunction(self, f): - # At some point this should be expanded to support pixel - # functions, but I'm not going to lose any sleep over it now. - - if f.fn_offset < 0 or f.handcode or f.ignore or f.vectorequiv or f.image: - return - - print ' %s' % (f.name) - - if f.glx_rop != 0: - self.print_render_header(f) - else: - self.print_single_header(f) - - self.print_body(f) - - if f.needs_reply(): - self.print_reply(f) - - print '' - return - - -if __name__ == '__main__': - file_name = "gl_API.xml" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:") - except Exception,e: - show_usage() - - for (arg,val) in args: - if arg == "-f": - file_name = val - - dh = PrintGlxProtoText() - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() diff --git a/src/kits/opengl/mesa/glapi/glX_proto_send.py b/src/kits/opengl/mesa/glapi/glX_proto_send.py deleted file mode 100644 index e7cda2f779..0000000000 --- a/src/kits/opengl/mesa/glapi/glX_proto_send.py +++ /dev/null @@ -1,915 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004, 2005 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import glX_XML -import license -import sys, getopt, copy - -def hash_pixel_function(func): - """Generate a 'unique' key for a pixel function. The key is based on - the parameters written in the command packet. This includes any - padding that might be added for the original function and the 'NULL - image' flag.""" - - [dim, junk, junk, junk, junk] = func.dimensions() - - d = (dim + 1) & ~1 - h = "%uD%uD_" % (d - 1, d) - - for p in func.parameterIterator(1, 1): - h = "%s%u" % (h, p.size()) - - if func.pad_after(p): - h += "4" - - if func.image.img_null_flag: - h += "_NF" - - n = func.name.replace("%uD" % (dim), "") - n = "__glx_%s_%uD%uD" % (n, d - 1, d) - return [h, n] - - -class glXPixelFunctionUtility(glX_XML.glXFunction): - """Dummy class used to generate pixel "utility" functions that are - shared by multiple dimension image functions. For example, these - objects are used to generate shared functions used to send GLX - protocol for TexImage1D and TexImage2D, TexSubImage1D and - TexSubImage2D, etc.""" - - def __init__(self, func, name): - # The parameters to the utility function are the same as the - # parameters to the real function except for the added "pad" - # parameters. - - self.name = name - self.image = copy.copy(func.image) - self.fn_parameters = [] - for p in gl_XML.glFunction.parameterIterator(func): - self.fn_parameters.append(p) - - pad_name = func.pad_after(p) - if pad_name: - pad = copy.copy(p) - pad.name = pad_name - self.fn_parameters.append(pad) - - - if self.image.height == None: - self.image.height = "height" - - if self.image.img_yoff == None: - self.image.img_yoff = "yoffset" - - if func.image.depth: - if self.image.extent == None: - self.image.extent = "extent" - - if self.image.img_woff == None: - self.image.img_woff = "woffset" - - - self.set_return_type( func.fn_return_type ) - self.glx_rop = ~0 - self.can_be_large = func.can_be_large - self.count_parameters = func.count_parameters - self.counter = func.counter - return - - -class PrintGlxProtoStubs(glX_XML.GlxProto): - def __init__(self): - glX_XML.GlxProto.__init__(self) - self.last_category = "" - self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2004, 2005", "IBM") - self.generic_sizes = [3, 4, 6, 8, 12, 16, 24, 32] - self.pixel_stubs = {} - return - - def printRealHeader(self): - print '' - print '#include ' - print '#include "indirect.h"' - print '#include "glxclient.h"' - print '#include "indirect_size.h"' - print '#include ' - print '' - print '#define __GLX_PAD(n) (((n) + 3) & ~3)' - print '' - glX_XML.printFastcall() - glX_XML.printNoinline() - print '' - print '#if !defined __GNUC__ || __GNUC__ < 3' - print '# define __builtin_expect(x, y) x' - print '#endif' - print '' - print '/* If the size and opcode values are known at compile-time, this will, on' - print ' * x86 at least, emit them with a single instruction.' - print ' */' - print '#define emit_header(dest, op, size) \\' - print ' do { union { short s[2]; int i; } temp; \\' - print ' temp.s[0] = (size); temp.s[1] = (op); \\' - print ' *((int *)(dest)) = temp.i; } while(0)' - print '' - print """static NOINLINE CARD32 -read_reply( Display *dpy, size_t size, void * dest, GLboolean reply_is_always_array ) -{ - xGLXSingleReply reply; - - (void) _XReply(dpy, (xReply *) & reply, 0, False); - if (size != 0) { - if ((reply.length > 0) || reply_is_always_array) { - const GLint bytes = (reply_is_always_array) - ? (4 * reply.length) : (reply.size * size); - const GLint extra = 4 - (bytes & 3); - - _XRead(dpy, dest, bytes); - if ( extra < 4 ) { - _XEatData(dpy, extra); - } - } - else { - (void) memcpy( dest, &(reply.pad3), size); - } - } - - return reply.retval; -} - -#define X_GLXSingle 0 - -static NOINLINE FASTCALL GLubyte * -setup_single_request( __GLXcontext * gc, GLint sop, GLint cmdlen ) -{ - xGLXSingleReq * req; - Display * const dpy = gc->currentDpy; - - (void) __glXFlushRenderBuffer(gc, gc->pc); - LockDisplay(dpy); - GetReqExtra(GLXSingle, cmdlen, req); - req->reqType = gc->majorOpcode; - req->contextTag = gc->currentContextTag; - req->glxCode = sop; - return (GLubyte *)(req) + sz_xGLXSingleReq; -} - -static NOINLINE FASTCALL GLubyte * -setup_vendor_request( __GLXcontext * gc, GLint code, GLint vop, GLint cmdlen ) -{ - xGLXVendorPrivateReq * req; - Display * const dpy = gc->currentDpy; - - (void) __glXFlushRenderBuffer(gc, gc->pc); - LockDisplay(dpy); - GetReqExtra(GLXVendorPrivate, cmdlen, req); - req->reqType = gc->majorOpcode; - req->glxCode = code; - req->vendorCode = vop; - req->contextTag = gc->currentContextTag; - return (GLubyte *)(req) + sz_xGLXVendorPrivateReq; -} - -const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; - -#define zero (__glXDefaultPixelStore+0) -#define one (__glXDefaultPixelStore+8) -#define default_pixel_store_1D (__glXDefaultPixelStore+4) -#define default_pixel_store_1D_size 20 -#define default_pixel_store_2D (__glXDefaultPixelStore+4) -#define default_pixel_store_2D_size 20 -#define default_pixel_store_3D (__glXDefaultPixelStore+0) -#define default_pixel_store_3D_size 36 -#define default_pixel_store_4D (__glXDefaultPixelStore+0) -#define default_pixel_store_4D_size 36 -""" - - for size in self.generic_sizes: - self.print_generic_function(size) - return - - def printFunction(self, f): - if f.fn_offset < 0 or f.handcode or f.ignore: return - - if f.glx_rop != 0 or f.vectorequiv != None: - if f.image: - self.printPixelFunction(f) - else: - self.printRenderFunction(f) - elif f.glx_sop != 0 or f.glx_vendorpriv != 0: - self.printSingleFunction(f) - else: - print "/* Missing GLX protocol for %s. */" % (f.name) - - def print_generic_function(self, n): - size = (n + 3) & ~3 - print """static FASTCALL NOINLINE void -generic_%u_byte( GLint rop, const void * ptr ) -{ - __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = %u; - - emit_header(gc->pc, rop, cmdlen); - (void) memcpy((void *)(gc->pc + 4), ptr, %u); - gc->pc += cmdlen; - if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } -} -""" % (n, size + 4, size) - - - def common_emit_one_arg(self, p, offset, pc, indent, adjust): - t = p.p_type - if p.is_array(): - src_ptr = p.name - else: - src_ptr = "&" + p.name - - print '%s (void) memcpy((void *)(%s + %u), (void *)(%s), %s);' \ - % (indent, pc, offset + adjust, src_ptr, p.size_string() ) - - def common_emit_args(self, f, pc, indent, adjust, skip_vla): - offset = 0 - - if skip_vla: - r = 1 - else: - r = 2 - - for p in f.parameterIterator(1, r): - self.common_emit_one_arg(p, offset, pc, indent, adjust) - offset += p.size() - - return offset - - - def pixel_emit_args(self, f, pc, indent, adjust, dim, large): - """Emit the arguments for a pixel function. This differs from - common_emit_args in that pixel functions may require padding - be inserted (i.e., for the missing width field for - TexImage1D), and they may also require a 'NULL image' flag - be inserted before the image data.""" - - offset = 0 - for p in f.parameterIterator(1, 1): - self.common_emit_one_arg(p, offset, pc, indent, adjust) - offset += p.size() - - if f.pad_after(p): - print '%s (void) memcpy((void *)(%s + %u), zero, 4);' % (indent, pc, offset + adjust) - offset += 4 - - if f.image.img_null_flag: - if large: - print '%s (void) memcpy((void *)(%s + %u), zero, 4);' % (indent, pc, offset + adjust) - else: - print '%s (void) memcpy((void *)(%s + %u), (void *)((%s == NULL) ? one : zero), 4);' % (indent, pc, offset + adjust, f.image.name) - - offset += 4 - - return offset - - - def large_emit_begin(self, indent, f, op_name = None): - if not op_name: - op_name = f.opcode_real_name() - - print '%s const GLint op = %s;' % (indent, op_name) - print '%s const GLuint cmdlenLarge = cmdlen + 4;' % (indent) - print '%s GLubyte * const pc = __glXFlushRenderBuffer(gc, gc->pc);' % (indent) - print '%s (void) memcpy((void *)(pc + 0), (void *)(&cmdlenLarge), 4);' % (indent) - print '%s (void) memcpy((void *)(pc + 4), (void *)(&op), 4);' % (indent) - return - - - def common_func_print_just_header(self, f): - print '#define %s %d' % (f.opcode_name(), f.opcode_value()) - - print '%s' % (f.fn_return_type) - print '__indirect_gl%s(%s)' % (f.name, f.get_parameter_string()) - print '{' - - - def common_func_print_just_start(self, f): - print ' __GLXcontext * const gc = __glXGetCurrentContext();' - - # The only reason that single and vendor private commands need - # a variable called 'dpy' is becuase they use the SyncHandle - # macro. For whatever brain-dead reason, that macro is hard- - # coded to use a variable called 'dpy' instead of taking a - # parameter. - - if not f.glx_rop: - print ' Display * const dpy = gc->currentDpy;' - skip_condition = "dpy != NULL" - elif f.can_be_large: - skip_condition = "gc->currentDpy != NULL" - else: - skip_condition = None - - - if f.fn_return_type != 'void': - print ' %s retval = (%s) 0;' % (f.fn_return_type, f.fn_return_type) - - if f.count_parameters != None: - print ' const GLuint compsize = __gl%s_size(%s);' % (f.name, f.count_parameters) - elif f.image: - [dim, w, h, d, junk] = f.dimensions() - - compsize = '__glImageSize(%s, %s, %s, %s, %s, %s)' % (w, h, d, f.image.img_format, f.image.img_type, f.image.img_target) - if not f.image.img_send_null: - compsize = '(%s != NULL) ? %s : 0' % (f.image.name, compsize) - - print ' const GLuint compsize = %s;' % (compsize) - - - print ' const GLuint cmdlen = %s;' % (f.command_length()) - - if f.counter: - if skip_condition: - skip_condition = "(%s >= 0) && (%s)" % (f.counter, skip_condition) - else: - skip_condition = "%s >= 0" % (f.counter) - - - if skip_condition: - print ' if (__builtin_expect(%s, 1)) {' % (skip_condition) - return 1 - else: - return 0 - - - def common_func_print_header(self, f): - self.common_func_print_just_header(f) - return self.common_func_print_just_start(f) - - - - def printSingleFunction(self, f): - self.common_func_print_header(f) - - if f.fn_parameters != []: - pc_decl = "GLubyte const * pc =" - else: - pc_decl = "(void)" - - if f.glx_vendorpriv != 0: - print ' %s setup_vendor_request(gc, %s, %s, cmdlen);' % (pc_decl, f.opcode_real_name(), f.opcode_name()) - else: - print ' %s setup_single_request(gc, %s, cmdlen);' % (pc_decl, f.opcode_name()) - - self.common_emit_args(f, "pc", " ", 0, 0) - - if f.needs_reply(): - if f.output != None: - output_size = f.output.p_type.size - output_str = f.output.name - else: - output_size = 0 - output_str = "NULL" - - if f.fn_return_type != 'void': - return_str = " retval = (%s)" % (f.fn_return_type) - else: - return_str = " (void)" - - if f.reply_always_array: - aa = "GL_TRUE" - else: - aa = "GL_FALSE" - - print " %s read_reply(dpy, %s, %s, %s);" % (return_str, output_size, output_str, aa) - - print ' UnlockDisplay(dpy); SyncHandle();' - print ' }' - print ' %s' % f.return_string() - print '}' - print '' - return - - - def printPixelFunction(self, f): - """This function could use some major refactoring. :(""" - - # There is a code-space optimization that we can do here. - # Functions that are marked img_pad_dimensions have a version - # with an odd number of dimensions and an even number of - # dimensions. TexSubImage1D and TexSubImage2D are examples. - # We can emit a single function that does both, and have the - # real functions call the utility function with the correct - # parameters. - # - # The only quirk to this is that utility funcitons will be - # generated for 3D and 4D functions, but 4D (e.g., - # GL_SGIS_texture4D) isn't typically supported. This is - # probably not an issue. However, it would be possible to - # look at the total set of functions and determine if there - # is another function that would actually use the utility - # function. If not, then fallback to the normal way of - # generating code. - - if f.image.img_pad_dimensions: - # Determine the hash key and the name for the utility - # function that is used to implement the real - # function. - - [h, n] = hash_pixel_function(f) - - - # If the utility function is not yet known, generate - # it. - - if not self.pixel_stubs.has_key(h): - self.pixel_stubs[h] = n - pixel_func = glXPixelFunctionUtility(f, n) - - print 'static void' - print '%s( unsigned opcode, unsigned dim, %s )' % (n, pixel_func.get_parameter_string()) - print '{' - - if self.common_func_print_just_start(pixel_func): - indent = " " - trailer = " }" - else: - indent = "" - trailer = None - - - if pixel_func.can_be_large: - print '%s if (cmdlen <= gc->maxSmallRenderCommandSize) {' % (indent) - print '%s if ( (gc->pc + cmdlen) > gc->bufEnd ) {' % (indent) - print '%s (void) __glXFlushRenderBuffer(gc, gc->pc);' % (indent) - print '%s }' % (indent) - indent += " " - - [dim, width, height, depth, extent] = pixel_func.dimensions() - - if dim < 3: - adjust = 20 + 4 - else: - adjust = 36 + 4 - - - print '%s emit_header(gc->pc, opcode, cmdlen);' % (indent) - - offset = self.pixel_emit_args(pixel_func, "gc->pc", indent, adjust, dim, 0) - - [s, junk] = pixel_func.command_payload_length() - - pixHeaderPtr = "gc->pc + 4" - pcPtr = "gc->pc + %u" % (s + 4) - - if pixel_func.image.img_send_null: - condition = '(compsize > 0) && (%s != NULL)' % (pixel_func.image.name) - else: - condition = 'compsize > 0' - - print '%s if (%s) {' % (indent, condition) - print '%s (*gc->fillImage)(gc, dim, %s, %s, %s, %s, %s, %s, %s, %s);' % (indent, width, height, depth, pixel_func.image.img_format, pixel_func.image.img_type, pixel_func.image.name, pcPtr, pixHeaderPtr) - print '%s }' % (indent) - print '%s else {' % (indent) - print '%s (void) memcpy( %s, default_pixel_store_%uD, default_pixel_store_%uD_size );' % (indent, pixHeaderPtr, dim, dim) - print '%s }' % (indent) - - print '%s gc->pc += cmdlen;' % (indent) - print '%s if (gc->pc > gc->limit) { (void) __glXFlushRenderBuffer(gc, gc->pc); }' % (indent) - - if f.can_be_large: - adjust += 4 - - print '%s}' % (indent) - print '%selse {' % (indent) - - self.large_emit_begin(indent, pixel_func, "opcode") - offset = self.pixel_emit_args(pixel_func, "pc", indent, adjust, dim, 1) - - pixHeaderPtr = "pc + 8" - pcPtr = "pc + %u" % (s + 8) - - print '%s __glXSendLargeImage(gc, compsize, dim, %s, %s, %s, %s, %s, %s, %s, %s);' % (indent, width, height, depth, f.image.img_format, f.image.img_type, f.image.name, pcPtr, pixHeaderPtr) - - print '%s}' % (indent) - - if trailer: print trailer - print '}' - print '' - - - - # Generate the real function as a call to the - # utility function. - - self.common_func_print_just_header(f) - - [dim, junk, junk, junk, junk] = f.dimensions() - - p_string = "" - for p in gl_XML.glFunction.parameterIterator(f): - p_string += ", " + p.name - - if f.pad_after(p): - p_string += ", 1" - - print ' %s(%s, %u%s );' % (n, f.opcode_name(), dim, p_string) - print '}' - print '' - return - - - if self.common_func_print_header(f): - indent = " " - trailer = " }" - else: - indent = "" - trailer = None - - - if f.can_be_large: - print '%s if (cmdlen <= gc->maxSmallRenderCommandSize) {' % (indent) - print '%s if ( (gc->pc + cmdlen) > gc->bufEnd ) {' % (indent) - print '%s (void) __glXFlushRenderBuffer(gc, gc->pc);' % (indent) - print '%s }' % (indent) - indent += " " - - [dim, width, height, depth, extent] = f.dimensions() - - if dim < 3: - adjust = 20 + 4 - else: - adjust = 36 + 4 - - - print '%s emit_header(gc->pc, %s, cmdlen);' % (indent, f.opcode_real_name()) - - offset = self.pixel_emit_args(f, "gc->pc", indent, adjust, dim, 0) - - [s, junk] = f.command_payload_length() - - pixHeaderPtr = "gc->pc + 4" - pcPtr = "gc->pc + %u" % (s + 4) - - if f.image.img_send_null: - condition = '(compsize > 0) && (%s != NULL)' % (f.image.name) - else: - condition = 'compsize > 0' - - print '%s if (%s) {' % (indent, condition) - print '%s (*gc->fillImage)(gc, %u, %s, %s, %s, %s, %s, %s, %s, %s);' % (indent, dim, width, height, depth, f.image.img_format, f.image.img_type, f.image.name, pcPtr, pixHeaderPtr) - print '%s }' % (indent) - print '%s else {' % (indent) - print '%s (void) memcpy( %s, default_pixel_store_%uD, default_pixel_store_%uD_size );' % (indent, pixHeaderPtr, dim, dim) - print '%s }' % (indent) - - print '%s gc->pc += cmdlen;' % (indent) - print '%s if (gc->pc > gc->limit) { (void) __glXFlushRenderBuffer(gc, gc->pc); }' % (indent) - - if f.can_be_large: - adjust += 4 - - print '%s}' % (indent) - print '%selse {' % (indent) - - self.large_emit_begin(indent, f) - offset = self.pixel_emit_args(f, "pc", indent, adjust, dim, 1) - - pixHeaderPtr = "pc + 8" - pcPtr = "pc + %u" % (s + 8) - - print '%s __glXSendLargeImage(gc, compsize, %u, %s, %s, %s, %s, %s, %s, %s, %s);' % (indent, dim, width, height, depth, f.image.img_format, f.image.img_type, f.image.name, pcPtr, pixHeaderPtr) - - print '%s}' % (indent) - - if trailer: print trailer - print '}' - print '' - return - - - def printRenderFunction(self, f): - # There is a class of GL functions that take a single pointer - # as a parameter. This pointer points to a fixed-size chunk - # of data, and the protocol for this functions is very - # regular. Since they are so regular and there are so many - # of them, special case them with generic functions. On - # x86, this saves about 26KB in the libGL.so binary. - - if f.variable_length_parameter() == None and len(f.fn_parameters) == 1: - p = f.fn_parameters[0] - if p.is_pointer: - [cmdlen, size_string] = f.command_payload_length() - if cmdlen in self.generic_sizes: - self.common_func_print_just_header(f) - print ' generic_%u_byte( %s, %s );' % (cmdlen, f.opcode_real_name(), p.name) - print '}' - print '' - return - - if self.common_func_print_header(f): - indent = " " - trailer = " }" - else: - indent = "" - trailer = None - - if f.can_be_large: - print '%s if (cmdlen <= gc->maxSmallRenderCommandSize) {' % (indent) - print '%s if ( (gc->pc + cmdlen) > gc->bufEnd ) {' % (indent) - print '%s (void) __glXFlushRenderBuffer(gc, gc->pc);' % (indent) - print '%s }' % (indent) - indent += " " - - print '%s emit_header(gc->pc, %s, cmdlen);' % (indent, f.opcode_real_name()) - - self.common_emit_args(f, "gc->pc", indent, 4, 0) - print '%s gc->pc += cmdlen;' % (indent) - print '%s if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }' % (indent) - - if f.can_be_large: - print '%s}' % (indent) - print '%selse {' % (indent) - - self.large_emit_begin(indent, f) - offset = self.common_emit_args(f, "pc", indent, 8, 1) - - p = f.variable_length_parameter() - print '%s __glXSendLargeCommand(gc, pc, %u, %s, %s);' % (indent, offset + 8, p.name, p.size_string()) - print '%s}' % (indent) - - if trailer: print trailer - print '}' - print '' - return - - -class PrintGlxProtoInit_c(glX_XML.GlxProto): - def __init__(self): - glX_XML.GlxProto.__init__(self) - self.last_category = "" - self.license = license.bsd_license_template % ( \ -"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. -(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM") - - - def printRealHeader(self): - print """/** - * \\file indirect_init.c - * Initialize indirect rendering dispatch table. - * - * \\author Kevin E. Martin - * \\author Brian Paul - * \\author Ian Romanick - */ - -#include "indirect_init.h" -#include "indirect.h" -#include "glapi.h" - - -/** - * No-op function used to initialize functions that have no GLX protocol - * support. - */ -static int NoOp(void) -{ - return 0; -} - -/** - * Create and initialize a new GL dispatch table. The table is initialized - * with GLX indirect rendering protocol functions. - */ -__GLapi * __glXNewIndirectAPI( void ) -{ - __GLapi *glAPI; - GLuint entries; - - entries = _glapi_get_dispatch_table_size(); - glAPI = (__GLapi *) Xmalloc(entries * sizeof(void *)); - - /* first, set all entries to point to no-op functions */ - { - int i; - void **dispatch = (void **) glAPI; - for (i = 0; i < entries; i++) { - dispatch[i] = (void *) NoOp; - } - } - - /* now, initialize the entries we understand */""" - - def printRealFooter(self): - print """ - return glAPI; -} -""" - - def printFunction(self, f): - if f.fn_offset < 0 or f.ignore: return - - if f.category != self.last_category: - self.last_category = f.category - print '' - print ' /* %s */' % (self.last_category) - print '' - - print ' glAPI->%s = __indirect_gl%s;' % (f.name, f.name) - - -class PrintGlxProtoInit_h(glX_XML.GlxProto): - def __init__(self): - glX_XML.GlxProto.__init__(self) - self.last_category = "" - self.license = license.bsd_license_template % ( \ -"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. -(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM") - - - def printRealHeader(self): - print """ -/** - * \\file - * Prototypes for indirect rendering functions. - * - * \\author Kevin E. Martin - * \\author Ian Romanick - */ - -#if !defined( _INDIRECT_H_ ) -# define _INDIRECT_H_ - -""" - glX_XML.printVisibility( "HIDDEN", "hidden" ) - - - def printRealFooter(self): - print "# undef HIDDEN" - print "#endif /* !defined( _INDIRECT_H_ ) */" - - def printFunction(self, f): - if f.fn_offset < 0 or f.ignore: return - print 'extern HIDDEN %s __indirect_gl%s(%s);' % (f.fn_return_type, f.name, f.get_parameter_string()) - - -class PrintGlxSizeStubs(glX_XML.GlxProto): - def __init__(self): - glX_XML.GlxProto.__init__(self) - self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2004", "IBM") - self.aliases = [] - self.glx_enum_sigs = {} - - def printRealHeader(self): - print '' - print '#include ' - print '#include "indirect_size.h"' - - print '' - glX_XML.printPure() - print '' - glX_XML.printFastcall() - print '' - glX_XML.printVisibility( "INTERNAL", "internal" ) - print '' - print '' - print '#ifdef HAVE_ALIAS' - print '# define ALIAS2(from,to) \\' - print ' INTERNAL PURE FASTCALL GLint __gl ## from ## _size( GLenum e ) \\' - print ' __attribute__ ((alias( # to )));' - print '# define ALIAS(from,to) ALIAS2( from, __gl ## to ## _size )' - print '#else' - print '# define ALIAS(from,to) \\' - print ' INTERNAL PURE FASTCALL GLint __gl ## from ## _size( GLenum e ) \\' - print ' { return __gl ## to ## _size( e ); }' - print '#endif' - print '' - print '' - - def printRealFooter(self): - for a in self.aliases: - print a - - def printFunction(self, f): - if self.glx_enum_functions.has_key(f.name): - ef = self.glx_enum_functions[f.name] - - sig = ef.signature(); - if self.glx_enum_sigs.has_key(sig): - n = self.glx_enum_sigs[sig]; - a = 'ALIAS( %s, %s )' % (f.name, n) - self.aliases.append(a) - else: - ef.Print( f.name ) - self.glx_enum_sigs[sig] = f.name; - - - -class PrintGlxSizeStubs_h(glX_XML.GlxProto): - def __init__(self): - glX_XML.GlxProto.__init__(self) - self.license = license.bsd_license_template % ( "(C) Copyright IBM Corporation 2004", "IBM") - self.aliases = [] - self.glx_enum_sigs = {} - - def printRealHeader(self): - print """ -/** - * \\file - * Prototypes for functions used to determine the number of data elements in - * various GLX protocol messages. - * - * \\author Ian Romanick - */ - -#if !defined( _GLXSIZE_H_ ) -# define _GLXSIZE_H_ - -""" - glX_XML.printPure(); - print '' - glX_XML.printFastcall(); - print '' - glX_XML.printVisibility( "INTERNAL", "internal" ); - print '' - - def printRealFooter(self): - print '' - print "# undef INTERNAL" - print "# undef PURE" - print "# undef FASTCALL" - print "#endif /* !defined( _GLXSIZE_H_ ) */" - - - def printFunction(self, f): - if self.glx_enum_functions.has_key(f.name): - ef = self.glx_enum_functions[f.name] - print 'extern INTERNAL PURE FASTCALL GLint __gl%s_size(GLenum);' % (f.name) - - -def show_usage(): - print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0] - sys.exit(1) - - -if __name__ == '__main__': - file_name = "gl_API.xml" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:m:") - except Exception,e: - show_usage() - - mode = "proto" - for (arg,val) in args: - if arg == "-f": - file_name = val - elif arg == "-m": - mode = val - - if mode == "proto": - dh = PrintGlxProtoStubs() - elif mode == "init_c": - dh = PrintGlxProtoInit_c() - elif mode == "init_h": - dh = PrintGlxProtoInit_h() - elif mode == "size_c": - dh = PrintGlxSizeStubs() - elif mode == "size_h": - dh = PrintGlxSizeStubs_h() - else: - show_usage() - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() diff --git a/src/kits/opengl/mesa/glapi/gl_API.xml b/src/kits/opengl/mesa/glapi/gl_API.xml deleted file mode 100644 index 662f20afb9..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_API.xml +++ /dev/null @@ -1,9729 +0,0 @@ - - - - - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/kits/opengl/mesa/glapi/gl_SPARC_asm.py b/src/kits/opengl/mesa/glapi/gl_SPARC_asm.py deleted file mode 100644 index c4afc4e52a..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_SPARC_asm.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import license -import sys, getopt - -class PrintGenericStubs(gl_XML.FilterGLAPISpecBase): - name = "gl_SPARC_asm.py (from Mesa)" - - def __init__(self): - gl_XML.FilterGLAPISpecBase.__init__(self) - self.license = license.bsd_license_template % ( \ -"""Copyright (C) 1999-2003 Brian Paul All Rights Reserved. -(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") - - - def printRealHeader(self): - print '#include "glapioffsets.h"' - print '' - print '#define GLOBL_FN(x) .globl x ; .type x,#function' - print '' - print '#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))' - print '# define GL_STUB(fn,off)\t\t\t\t\\' - print 'GLOBL_FN(fn) ; fn:\t\t\t\t\t\\' - print '\tsethi\t%hi(0x00000000), %g4 ;\t\t\t\\' - print '\tsethi\t%hi(0x00000000), %g1 ;\t\t\t\\' - print '\tor\t%g4, %lo(0x00000000), %g4 ;\t\t\\' - print '\tor\t%g1, %lo(0x00000000), %g1 ;\t\t\\' - print '\tsllx\t%g4, 32, %g4 ;\t\t\t\t\\' - print '\tldx\t[%g1 + %g4], %g1 ;\t\t\t\\' - print '\tsethi\t%hi(8 * off), %g4 ;\t\t\t\\' - print '\tor\t%g4, %lo(8 * off), %g4 ;\t\t\\' - print '\tldx\t[%g1 + %g4], %g5 ;\t\t\t\\' - print '\tjmpl\t%g5, %g0 ;\t\t\t\t\\' - print '\tnop' - print '#else' - print '# define GL_STUB(fn,off)\t\t\t\t\\' - print 'GLOBL_FN(fn) ; fn:\t\t\t\t\t\\' - print '\tsethi\t%hi(0x00000000), %g1 ;\t\t\t\\' - print '\tld\t[%g1 + %lo(0x00000000)], %g1 ;\t\t\\' - print '\tld\t[%g1 + (4 * off)], %g5 ;\t\t\\' - print '\tjmpl\t%g5, %g0 ;\t\t\t\t\\' - print '\tnop' - print '#endif' - print '' - print '.text' - print '.align 32' - print 'GLOBL_FN(__glapi_sparc_icache_flush)' - print '__glapi_sparc_icache_flush: /* %o0 = insn_addr */' - print '\tflush\t%o0' - print '\tretl' - print '\tnop' - print '' - print '.data' - print '.align 64' - print '' - print 'GLOBL_FN(_mesa_sparc_glapi_begin)' - print '_mesa_sparc_glapi_begin:' - print '' - return - - def printRealFooter(self): - print '' - print 'GLOBL_FN(_mesa_sparc_glapi_end)' - print '_mesa_sparc_glapi_end:' - return - - def printFunction(self, f): - print '\tGL_STUB(gl%s, _gloffset_%s)' % (f.name, f.real_name) - return - -def show_usage(): - print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0] - sys.exit(1) - -if __name__ == '__main__': - file_name = "gl_API.xml" - mode = "generic" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "m:f:") - except Exception,e: - show_usage() - - for (arg,val) in args: - if arg == '-m': - mode = val - elif arg == "-f": - file_name = val - - if mode == "generic": - dh = PrintGenericStubs() - else: - print "ERROR: Invalid mode \"%s\" specified." % mode - show_usage() - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() diff --git a/src/kits/opengl/mesa/glapi/gl_XML.py b/src/kits/opengl/mesa/glapi/gl_XML.py deleted file mode 100644 index 538756ea0c..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_XML.py +++ /dev/null @@ -1,561 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004, 2005 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import re - -class glItem: - """Generic class on which all other API entity types are based.""" - - def __init__(self, tag_name, name, context): - self.name = name - self.category = context.get_category_define() - self.context = context - self.tag_name = tag_name - - context.append(tag_name, self) - return - - def startElement(self, name, attrs): - """Generic startElement handler. - - The startElement handler is called for all elements except - the one that starts the object. For a foo element, the - XML "" would cause the startElement handler - to be called once, but the endElement handler would be called - twice.""" - return - - def endElement(self, name): - """Generic endElement handler. - - Generic endElement handler. Returns 1 if the tag containing - the object is complete. Otherwise 0 is returned. All - derived class endElement handlers should call this method. If - the name of the ending tag is the same as the tag that - started this object, the object is assumed to be complete. - - This fails if a tag can contain another tag with the same - name. The XML "" would fail. The - object would end before the bar tag was processed. - - The endElement handler is called for every end element - associated with an object, even the element that started the - object. See the description of startElement an example.""" - - if name == self.tag_name: - return 1 - else: - return 0 - - def get_category_define(self): - return self.category - - -class glEnum( glItem ): - """Subclass of glItem for representing GL enumerants. - - This class is not complete, and is not really used yet.""" - - def __init__(self, context, name, attrs): - self.value = int(attrs.get('value', "0x0000"), 0) - self.functions = {} - - enum_name = "GL_" + attrs.get('name', None) - glItem.__init__(self, name, enum_name, context) - - def startElement(self, name, attrs): - if name == "size": - name = attrs.get('name', None) - count = int(attrs.get('count', "0"), 0) - self.functions[name] = count - - return - - -class glType( glItem ): - """Subclass of glItem for representing GL types.""" - - def __init__(self, context, name, attrs): - self.size = int(attrs.get('size', "0")) - self.glx_name = attrs.get('glx_name', "") - - type_name = "GL" + attrs.get('name', None) - glItem.__init__(self, name, type_name, context) - - -class glParameter( glItem ): - """Parameter of a glFunction.""" - p_type = None - p_type_string = "" - p_count = 0 - p_count_parameters = None - counter = None - is_output = 0 - is_counter = 0 - is_pointer = 0 - - def __init__(self, context, name, attrs): - p_name = attrs.get('name', None) - self.p_type_string = attrs.get('type', None) - self.p_count_parameters = attrs.get('variable_param', None) - - self.p_type = context.context.find_type(self.p_type_string) - if self.p_type == None: - raise RuntimeError("Unknown type '%s' in function '%s'." % (self.p_type_string, context.name)) - - - # The count tag can be either a numeric string or the name of - # a variable. If it is the name of a variable, the int(c) - # statement will throw an exception, and the except block will - # take over. - - c = attrs.get('count', "0") - try: - self.p_count = int(c) - self.counter = None - except Exception,e: - self.p_count = 0 - self.counter = c - - if attrs.get('counter', "false") == "true": - self.is_counter = 1 - else: - self.is_counter = 0 - - if attrs.get('output', "false") == "true": - self.is_output = 1 - else: - self.is_output = 0 - - - # Pixel data has special parameters. - - self.width = attrs.get('img_width', None) - self.height = attrs.get('img_height', None) - self.depth = attrs.get('img_depth', None) - self.extent = attrs.get('img_extent', None) - - self.img_xoff = attrs.get('img_xoff', None) - self.img_yoff = attrs.get('img_yoff', None) - self.img_zoff = attrs.get('img_zoff', None) - self.img_woff = attrs.get('img_woff', None) - - self.img_format = attrs.get('img_format', None) - self.img_type = attrs.get('img_type', None) - self.img_target = attrs.get('img_target', None) - - pad = attrs.get('img_pad_dimensions', "false") - if pad == "true": - self.img_pad_dimensions = 1 - else: - self.img_pad_dimensions = 0 - - - null_flag = attrs.get('img_null_flag', "false") - if null_flag == "true": - self.img_null_flag = 1 - else: - self.img_null_flag = 0 - - send_null = attrs.get('img_send_null', "false") - if send_null == "true": - self.img_send_null = 1 - else: - self.img_send_null = 0 - - - - if self.p_count > 0 or self.counter or self.p_count_parameters: - has_count = 1 - else: - has_count = 0 - - - # If there is a * anywhere in the parameter's type, then it - # is a pointer. - - if re.compile("[*]").search(self.p_type_string): - # We could do some other validation here. For - # example, an output parameter should not be const, - # but every non-output parameter should. - - self.is_pointer = 1; - else: - # If a parameter is not a pointer, then there cannot - # be an associated count (either fixed size or - # variable) and the parameter cannot be an output. - - if has_count or self.is_output: - raise RuntimeError("Non-pointer type has count or is output.") - self.is_pointer = 0; - - glItem.__init__(self, name, p_name, context) - return - - - def is_variable_length_array(self): - """Determine if a parameter is a variable length array. - - A parameter is considered to be a variable length array if - its size depends on the value of another parameter that is - an enumerant. The params parameter to glTexEnviv is an - example of a variable length array parameter. Arrays whose - size depends on a count variable, such as the lists parameter - to glCallLists, are not variable length arrays in this - sense.""" - - return self.p_count_parameters or self.counter or self.width - - - def is_array(self): - return self.is_pointer - - - def count_string(self): - """Return a string representing the number of items - - Returns a string representing the number of items in a - parameter. For scalar types this will always be "1". For - vector types, it will depend on whether or not it is a - fixed length vector (like the parameter of glVertex3fv), - a counted length (like the vector parameter of - glDeleteTextures), or a general variable length vector.""" - - if self.is_array(): - if self.p_count_parameters != None: - return "compsize" - elif self.counter != None: - return self.counter - else: - return str(self.p_count) - else: - return "1" - - - def size(self): - if self.p_count_parameters or self.counter or self.width or self.is_output: - return 0 - elif self.p_count == 0: - return self.p_type.size - else: - return self.p_type.size * self.p_count - - def size_string(self): - s = self.size() - if s == 0: - a_prod = "compsize" - b_prod = self.p_type.size - - if self.p_count_parameters == None and self.counter != None: - a_prod = self.counter - elif self.p_count_parameters != None and self.counter == None: - pass - elif self.p_count_parameters != None and self.counter != None: - b_prod = self.counter - elif self.width: - return "compsize" - else: - raise RuntimeError("Parameter '%s' to function '%s' has size 0." % (self.name, self.context.name)) - - return "(%s * %s)" % (a_prod, b_prod) - else: - return str(s) - - -class glParameterIterator: - """Class to iterate over a list of glParameters. - - Objects of this class are returned by the parameterIterator method of - the glFunction class. They are used to iterate over the list of - parameters to the function.""" - - def __init__(self, data): - self.data = data - self.index = 0 - - def __iter__(self): - return self - - def next(self): - if self.index == len( self.data ): - raise StopIteration - i = self.index - self.index += 1 - return self.data[i] - - -class glFunction( glItem ): - real_name = "" - fn_alias = None - fn_offset = -1 - fn_return_type = "void" - fn_parameters = [] - - def __init__(self, context, name, attrs): - self.fn_alias = attrs.get('alias', None) - self.fn_parameters = [] - self.image = None - - temp = attrs.get('offset', None) - if temp == None or temp == "?": - self.fn_offset = -1 - else: - self.fn_offset = int(temp) - - fn_name = attrs.get('name', None) - if self.fn_alias != None: - self.real_name = self.fn_alias - else: - self.real_name = fn_name - - glItem.__init__(self, name, fn_name, context) - return - - - def parameterIterator(self): - return glParameterIterator(self.fn_parameters) - - - def startElement(self, name, attrs): - if name == "param": - try: - self.context.factory.create(self, name, attrs) - except RuntimeError: - print "Error with parameter '%s' in function '%s'." \ - % (attrs.get('name','(unknown)'), self.name) - raise - elif name == "return": - self.set_return_type(attrs.get('type', None)) - - - def append(self, tag_name, p): - if tag_name != "param": - raise RuntimeError("Trying to append '%s' to parameter list of function '%s'." % (tag_name, self.name)) - - if p.width: - self.image = p - - self.fn_parameters.append(p) - - - def set_return_type(self, t): - self.fn_return_type = t - - - def get_parameter_string(self): - arg_string = "" - comma = "" - for p in glFunction.parameterIterator(self): - arg_string = arg_string + comma + p.p_type_string + " " + p.name - comma = ", " - - if arg_string == "": - arg_string = "void" - - return arg_string - - -class glItemFactory: - """Factory to create objects derived from glItem.""" - - def create(self, context, name, attrs): - if name == "function": - return glFunction(context, name, attrs) - elif name == "type": - return glType(context, name, attrs) - elif name == "enum": - return glEnum(context, name, attrs) - elif name == "param": - return glParameter(context, name, attrs) - else: - return None - - -class FilterGLAPISpecBase(saxutils.XMLFilterBase): - name = "a" - license = "The license for this file is unspecified." - functions = {} - next_alias = -2 - types = {} - xref = {} - current_object = None - factory = None - current_category = "" - - def __init__(self): - saxutils.XMLFilterBase.__init__(self) - self.functions = {} - self.types = {} - self.xref = {} - self.factory = glItemFactory() - - - def find_type(self,type_name): - for t in self.types: - if re.compile(t).search(type_name): - return self.types[t] - print "Unable to find base type matching \"%s\"." % (type_name) - return None - - - def find_function(self,function_name): - index = self.xref[function_name] - return self.functions[index] - - - def printFunctions(self): - keys = self.functions.keys() - keys.sort() - prevk = -1 - for k in keys: - if k < 0: continue - - if self.functions[k].fn_alias == None: - if k != prevk + 1: - #print 'Missing offset %d' % (prevk) - pass - prevk = int(k) - self.printFunction(self.functions[k]) - - keys.reverse() - for k in keys: - if self.functions[k].fn_alias != None: - self.printFunction(self.functions[k]) - - return - - - def printHeader(self): - """Print the header associated with all files and call the printRealHeader method.""" - - print '/* DO NOT EDIT - This file generated automatically by %s script */' \ - % (self.name) - print '' - print '/*' - print ' * ' + self.license.replace('\n', '\n * ') - print ' */' - print '' - self.printRealHeader(); - return - - - def printFooter(self): - """Print the header associated with all files and call the printRealFooter method.""" - - self.printFunctions() - self.printRealFooter() - - - def get_category_define(self): - """Convert the category name to the #define that would be found in glext.h""" - - if re.compile("[1-9][0-9]*[.][0-9]+").match(self.current_category): - s = self.current_category - return "GL_VERSION_" + s.replace(".", "_") - else: - return self.current_category - - - def append(self, object_type, obj): - if object_type == "function": - # If the function is not an alias and has a negative - # offset, then we do not need to track it. These are - # functions that don't have an assigned offset - - if obj.fn_offset >= 0 or obj.fn_alias != None: - if obj.fn_offset >= 0: - index = obj.fn_offset - else: - index = self.next_alias - self.next_alias -= 1 - - self.functions[index] = obj - self.xref[obj.name] = index - elif object_type == "type": - self.types[obj.name] = obj - - return - - - def startElement(self, name, attrs): - """Start a new element in the XML stream. - - Starts a new element. There are three types of elements that - are specially handled by this function. When a "category" - element is encountered, the name of the category is saved. - If an element is encountered and no API object is - in-progress, a new object is created using the API factory. - Any future elements, until that API object is closed, are - passed to the current objects startElement method. - - This paradigm was chosen becuase it allows subclasses of the - basic API types (i.e., glFunction, glEnum, etc.) to handle - additional XML data, GLX protocol information, that the base - classes do not know about.""" - - if self.current_object != None: - self.current_object.startElement(name, attrs) - elif name == "category": - self.current_category = attrs.get('name', "") - else: - self.current_object = self.factory.create(self, name, attrs) - return - - - def endElement(self, name): - if self.current_object != None: - if self.current_object.endElement(name): - self.current_object = None - return - - - def printFunction(self,offset): - """Print a single function. - - In the base class, this function is empty. All derived - classes should over-ride this function.""" - return - - - def printRealHeader(self): - """Print the "real" header for the created file. - - In the base class, this function is empty. All derived - classes should over-ride this function.""" - return - - - def printRealFooter(self): - """Print the "real" footer for the created file. - - In the base class, this function is empty. All derived - classes should over-ride this function.""" - return diff --git a/src/kits/opengl/mesa/glapi/gl_apitemp.py b/src/kits/opengl/mesa/glapi/gl_apitemp.py deleted file mode 100644 index 533cc65bec..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_apitemp.py +++ /dev/null @@ -1,235 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import license -import sys, getopt - -class PrintGlOffsets(gl_XML.FilterGLAPISpecBase): - name = "gl_apitemp.py (from Mesa)" - - def __init__(self): - gl_XML.FilterGLAPISpecBase.__init__(self) - self.license = license.bsd_license_template % ( \ -"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. -(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") - - def printFunction(self, f): - p_string = "" - o_string = "" - t_string = "" - comma = "" - - for p in f.parameterIterator(): - cast = "" - - if p.is_pointer: - t = "%p" - cast = "(const void *) " - elif p.p_type_string == 'GLenum': - t = "0x%x" - elif p.p_type_string in ['GLfloat', 'GLdouble', 'GLclampf', 'GLclampd']: - t = "%f" - else: - t = "%d" - - t_string = t_string + comma + t - p_string = p_string + comma + p.name - o_string = o_string + comma + cast + p.name - comma = ", " - - - if f.fn_return_type != 'void': - dispatch = "RETURN_DISPATCH" - else: - dispatch = "DISPATCH" - - print 'KEYWORD1 %s KEYWORD2 NAME(%s)(%s)' \ - % (f.fn_return_type, f.name, f.get_parameter_string()) - print '{' - if p_string == "": - print ' %s(%s, (), (F, "gl%s();\\n"));' \ - % (dispatch, f.real_name, f.name) - else: - print ' %s(%s, (%s), (F, "gl%s(%s);\\n", %s));' \ - % (dispatch, f.real_name, p_string, f.name, t_string, o_string) - print '}' - print '' - return - - def printRealHeader(self): - print """ -/* - * This file is a template which generates the OpenGL API entry point - * functions. It should be included by a .c file which first defines - * the following macros: - * KEYWORD1 - usually nothing, but might be __declspec(dllexport) on Win32 - * KEYWORD2 - usually nothing, but might be __stdcall on Win32 - * NAME(n) - builds the final function name (usually add "gl" prefix) - * DISPATCH(func, args, msg) - code to do dispatch of named function. - * msg is a printf-style debug message. - * RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value - * - * Here is an example which generates the usual OpenGL functions: - * #define KEYWORD1 - * #define KEYWORD2 - * #define NAME(func) gl##func - * #define DISPATCH(func, args, msg) \\ - * struct _glapi_table *dispatch = CurrentDispatch; \\ - * (*dispatch->func) args - * #define RETURN DISPATCH(func, args, msg) \\ - * struct _glapi_table *dispatch = CurrentDispatch; \\ - * return (*dispatch->func) args - * - */ - - -#if defined( NAME ) -#ifndef KEYWORD1 -#define KEYWORD1 -#endif - -#ifndef KEYWORD2 -#define KEYWORD2 -#endif - -#ifndef DISPATCH -#error DISPATCH must be defined -#endif - -#ifndef RETURN_DISPATCH -#error RETURN_DISPATCH must be defined -#endif - -""" - return - - - - def printInitDispatch(self): - print """ -#endif /* defined( NAME ) */ - -/* - * This is how a dispatch table can be initialized with all the functions - * we generated above. - */ -#ifdef DISPATCH_TABLE_NAME - -#ifndef TABLE_ENTRY -#error TABLE_ENTRY must be defined -#endif - -static _glapi_proc DISPATCH_TABLE_NAME[] = {""" - keys = self.functions.keys() - keys.sort() - for k in keys: - if k < 0: continue - - print ' TABLE_ENTRY(%s),' % (self.functions[k].name) - - print ' /* A whole bunch of no-op functions. These might be called' - print ' * when someone tries to call a dynamically-registered' - print ' * extension function without a current rendering context.' - print ' */' - for i in range(1, 100): - print ' TABLE_ENTRY(Unused),' - - print '};' - print '#endif /* DISPATCH_TABLE_NAME */' - print '' - return - - def printAliasedTable(self): - print """ -/* - * This is just used to silence compiler warnings. - * We list the functions which are not otherwise used. - */ -#ifdef UNUSED_TABLE_NAME -static _glapi_proc UNUSED_TABLE_NAME[] = {""" - - keys = self.functions.keys() - keys.sort() - keys.reverse(); - for k in keys: - f = self.functions[k] - if f.fn_offset < 0: - print ' TABLE_ENTRY(%s),' % (f.name) - - print '};' - print '#endif /*UNUSED_TABLE_NAME*/' - print '' - return - - def printRealFooter(self): - self.printInitDispatch() - self.printAliasedTable() - print""" -#undef KEYWORD1 -#undef KEYWORD2 -#undef NAME -#undef DISPATCH -#undef RETURN_DISPATCH -#undef DISPATCH_TABLE_NAME -#undef UNUSED_TABLE_NAME -#undef TABLE_ENTRY -""" - return - -def show_usage(): - print "Usage: %s [-f input_file_name]" % sys.argv[0] - sys.exit(1) - -if __name__ == '__main__': - file_name = "gl_API.xml" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:") - except Exception,e: - show_usage() - - for (arg,val) in args: - if arg == "-f": - file_name = val - - dh = PrintGlOffsets() - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() - diff --git a/src/kits/opengl/mesa/glapi/gl_offsets.py b/src/kits/opengl/mesa/glapi/gl_offsets.py deleted file mode 100644 index 3ff27e7d2a..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_offsets.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import license -import sys, getopt - -class PrintGlOffsets(gl_XML.FilterGLAPISpecBase): - name = "gl_offsets.py (from Mesa)" - - def __init__(self): - gl_XML.FilterGLAPISpecBase.__init__(self) - self.license = license.bsd_license_template % ( \ -"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. -(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") - - def printFunction(self, f): - if f.fn_offset < 0: return - print '#define _gloffset_%s %d' % (f.name, f.fn_offset) - - def printRealHeader(self): - print '#ifndef _GLAPI_OFFSETS_H_' - print '#define _GLAPI_OFFSETS_H_' - print '' - return - - def printRealFooter(self): - print '' - print '#endif' - return - -def show_usage(): - print "Usage: %s [-f input_file_name]" % sys.argv[0] - sys.exit(1) - -if __name__ == '__main__': - file_name = "gl_API.xml" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:") - except Exception,e: - show_usage() - - for (arg,val) in args: - if arg == "-f": - file_name = val - - dh = PrintGlOffsets() - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() diff --git a/src/kits/opengl/mesa/glapi/gl_procs.py b/src/kits/opengl/mesa/glapi/gl_procs.py deleted file mode 100644 index f9ce8e2da1..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_procs.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import license -import gl_XML -import sys, getopt - -class PrintGlProcs(gl_XML.FilterGLAPISpecBase): - name = "gl_procs.py (from Mesa)" - - def __init__(self, long_strings): - self.long_strings = long_strings - gl_XML.FilterGLAPISpecBase.__init__(self) - self.license = license.bsd_license_template % ( \ -"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. -(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") - - - def printRealHeader(self): - print '/* This file is only included by glapi.c and is used for' - print ' * the GetProcAddress() function' - print ' */' - print '' - print 'typedef struct {' - print ' GLint Name_offset;' - print '#ifdef NEED_FUNCTION_POINTER' - print ' _glapi_proc Address;' - print '#endif' - print ' GLuint Offset;' - print '} glprocs_table_t;' - print '' - print '#ifdef NEED_FUNCTION_POINTER' - print '# define NAME_FUNC_OFFSET(n,f,o) { n , (_glapi_proc) f , o }' - print '#else' - print '# define NAME_FUNC_OFFSET(n,f,o) { n , o }' - print '#endif' - print '' - return - - def printRealFooter(self): - print '' - print '#undef NAME_FUNC_OFFSET' - return - - def printFunctionString(self, f): - if self.long_strings: - print ' "gl%s\\0"' % (f.name) - else: - print " 'g','l',", - for c in f.name: - print "'%s'," % (c), - - print "'\\0'," - - def printFunctionOffset(self, f, offset_of_name): - print ' NAME_FUNC_OFFSET( % 5u, gl%s, _gloffset_%s ),' % (offset_of_name, f.name, f.real_name) - - - def printFunctions(self): - print '' - if self.long_strings: - print 'static const char gl_string_table[] =' - else: - print 'static const char gl_string_table[] = {' - - keys = self.functions.keys() - keys.sort() - for k in keys: - if k < 0: continue - self.printFunctionString(self.functions[k]) - - keys.reverse() - for k in keys: - if k >= -1: continue - self.printFunctionString(self.functions[k]) - - if self.long_strings: - print ' ;' - else: - print '};' - - print '' - print 'static const glprocs_table_t static_functions[] = {' - - keys = self.functions.keys() - keys.sort() - base_offset = 0 - for k in keys: - if k < 0: continue - self.printFunctionOffset(self.functions[k], base_offset) - - # The length of the function's name, plus 2 for "gl", - # plus 1 for the NUL. - - base_offset += len(self.functions[k].name) + 3 - - keys.reverse() - for k in keys: - if k >= -1: continue - self.printFunctionOffset(self.functions[k], base_offset) - - # The length of the function's name, plus 2 for "gl", - # plus 1 for the NUL. - - base_offset += len(self.functions[k].name) + 3 - - print ' NAME_FUNC_OFFSET( -1, NULL, 0 )' - print '};' - return - - -def show_usage(): - print "Usage: %s [-f input_file_name] [-m mode]" % sys.argv[0] - print "mode can be one of:" - print " long - Create code for compilers that can handle very " - print " long string constants. (default)" - print " short - Create code for compilers that can only handle " - print " ANSI C89 string constants." - sys.exit(1) - -if __name__ == '__main__': - file_name = "gl_API.xml" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:m:") - except Exception,e: - show_usage() - - long_string = 1 - for (arg,val) in args: - if arg == "-f": - file_name = val - elif arg == "-m": - if val == "short": - long_string = 0 - elif val == "long": - long_string = 1 - else: - show_usage() - - dh = PrintGlProcs( long_string ) - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() diff --git a/src/kits/opengl/mesa/glapi/gl_table.py b/src/kits/opengl/mesa/glapi/gl_table.py deleted file mode 100644 index d59d3de42a..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_table.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import license -import sys, getopt - -class PrintGlTable(gl_XML.FilterGLAPISpecBase): - file_name = "gl_gen_table.xml (from Mesa)" - - def __init__(self): - gl_XML.FilterGLAPISpecBase.__init__(self) - self.license = license.bsd_license_template % ( \ -"""Copyright (C) 1999-2003 Brian Paul All Rights Reserved. -(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") - - - def printFunction(self, f): - if f.fn_offset < 0: return - - arg_string = f.get_parameter_string() - print ' %s (GLAPIENTRYP %s)(%s); /* %d */' % \ - (f.fn_return_type, f.name, arg_string, f.fn_offset) - - def printRealHeader(self): - print '#ifndef _GLAPI_TABLE_H_' - print '#define _GLAPI_TABLE_H_' - print '' - print '#ifndef GLAPIENTRYP' - print '#define GLAPIENTRYP' - print '#endif' - print '' - print 'struct _glapi_table' - print '{' - return - - def printRealFooter(self): - print '};' - print '' - print '#endif' - return - - -def show_usage(): - print "Usage: %s [-f input_file_name]" % sys.argv[0] - sys.exit(1) - -if __name__ == '__main__': - file_name = "gl_API.xml" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:") - except Exception,e: - show_usage() - - for (arg,val) in args: - if arg == "-f": - file_name = val - - dh = PrintGlTable() - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() diff --git a/src/kits/opengl/mesa/glapi/gl_x86_asm.py b/src/kits/opengl/mesa/glapi/gl_x86_asm.py deleted file mode 100644 index 9c299933a9..0000000000 --- a/src/kits/opengl/mesa/glapi/gl_x86_asm.py +++ /dev/null @@ -1,210 +0,0 @@ -#!/usr/bin/python2 - -# (C) Copyright IBM Corporation 2004, 2005 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -from xml.sax import saxutils -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces - -import gl_XML -import license -import sys, getopt - -class PrintGenericStubs(gl_XML.FilterGLAPISpecBase): - name = "gl_x86_asm.py (from Mesa)" - - def __init__(self): - gl_XML.FilterGLAPISpecBase.__init__(self) - self.license = license.bsd_license_template % ( \ -"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. -(C) Copyright IBM Corporation 2004, 2005""", "BRIAN PAUL, IBM") - - - def get_stack_size(self, f): - size = 0 - for p in f.parameterIterator(): - t = p.p_type - - if p.is_array() or t.size != 8: - size += 4 - else: - size += 8 - - return size - - def printRealHeader(self): - print '#include "assyntax.h"' - print '#include "glapioffsets.h"' - print '' - print "/* If we build with gcc's -fvisibility=hidden flag, we'll need to change" - print "* the symbol visibility mode to 'default'." - print '*/' - print '#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303' - print '#pragma GCC visibility push(default)' - print '#endif' - print '' - print '#ifndef __WIN32__' - print '' - print '#if defined(STDCALL_API)' - print '# if defined(USE_MGL_NAMESPACE)' - print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n2))' - print '# else' - print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))' - print '# endif' - print '#else' - print '# if defined(USE_MGL_NAMESPACE)' - print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))' - print '# else' - print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))' - print '# endif' - print '#endif' - print '' - print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))' - print '' - print '#if defined(GNU_ASSEMBLER) && !defined(__DJGPP__) && !defined(__MINGW32__)' - print '#define GLOBL_FN(x) GLOBL x ; .type x, function' - print '#else' - print '#define GLOBL_FN(x) GLOBL x' - print '#endif' - print '' - print '#if defined(PTHREADS) || defined(XTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)' - print '# define THREADS' - print '#endif' - print '' - print '#if defined(PTHREADS)' - print '# define GL_STUB(fn,off,fn_alt)\t\t\t\\' - print 'ALIGNTEXT16;\t\t\t\t\t\t\\' - print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\' - print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\' - print '\tMOV_L(CONTENT(GLNAME(_glapi_DispatchTSD)), EAX) ;\t\\' - print '\tTEST_L(EAX, EAX) ;\t\t\t\t\\' - print '\tJE(1f) ;\t\t\t\t\t\\' - print '\tJMP(GL_OFFSET(off)) ;\t\t\t\t\\' - print '1:\tCALL(_x86_get_dispatch) ;\t\t\t\\' - print '\tJMP(GL_OFFSET(off))' - print '#elif defined(THREADS)' - print '# define GL_STUB(fn,off,fn_alt)\t\t\t\\' - print 'ALIGNTEXT16;\t\t\t\t\t\t\\' - print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\' - print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\' - print '\tMOV_L(CONTENT(GLNAME(_glapi_DispatchTSD)), EAX) ;\t\\' - print '\tTEST_L(EAX, EAX) ;\t\t\t\t\\' - print '\tJE(1f) ;\t\t\t\t\t\\' - print '\tJMP(GL_OFFSET(off)) ;\t\t\t\t\\' - print '1:\tCALL(_glapi_get_dispatch) ;\t\t\t\\' - print '\tJMP(GL_OFFSET(off))' - print '#else /* Non-threaded version. */' - print '# define GL_STUB(fn,off,fn_alt)\t\t\t\\' - print 'ALIGNTEXT16;\t\t\t\t\t\t\\' - print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\' - print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\' - print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\' - print '\tJMP(GL_OFFSET(off))' - print '#endif' - print '' - print '#ifdef HAVE_ALIAS' - print '# define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\' - print '\t.globl\tGL_PREFIX(fn, fn_alt) ;\t\t\t\\' - print '\t.set\tGL_PREFIX(fn, fn_alt), GL_PREFIX(alias, alias_alt)' - print '#else' - print '# define GL_STUB_ALIAS(fn,off,fn_alt,alias,alias_alt)\t\\' - print ' GL_STUB(fn, off, fn_alt)' - print '#endif' - print '' - print 'SEG_TEXT' - print '' - print '#ifdef PTHREADS' - print 'EXTERN GLNAME(_glapi_Dispatch)' - print 'EXTERN GLNAME(_gl_DispatchTSD)' - print 'EXTERN GLNAME(pthread_getspecific)' - print '' - print 'ALIGNTEXT16' - print 'GLNAME(_x86_get_dispatch):' - print '\tSUB_L(CONST(24), ESP)' - print '\tPUSH_L(GLNAME(_gl_DispatchTSD))' - print '\tCALL(GLNAME(pthread_getspecific))' - print '\tADD_L(CONST(28), ESP)' - print '\tRET' - print '#elif defined(THREADS)' - print 'EXTERN GLNAME(_glapi_get_dispatch)' - print '#endif' - print '' - print '\t\tALIGNTEXT16 ; GLOBL GLNAME(gl_dispatch_functions_start)' - print 'GLNAME(gl_dispatch_functions_start):' - print '' - return - - def printRealFooter(self): - print '' - print '#endif /* __WIN32__ */' - return - - def printFunction(self, f): - stack = self.get_stack_size(f) - - alt = "%s@%u" % (f.name, stack) - if f.fn_alias == None: - print '\tGL_STUB(%s, _gloffset_%s, %s)' % (f.name, f.real_name, alt) - else: - alias_alt = "%s@%u" % (f.real_name, stack) - print '\tGL_STUB_ALIAS(%s, _gloffset_%s, %s, %s, %s)' % \ - (f.name, f.real_name, alt, f.real_name, alias_alt) - return - -def show_usage(): - print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0] - sys.exit(1) - -if __name__ == '__main__': - file_name = "gl_API.xml" - mode = "generic" - - try: - (args, trail) = getopt.getopt(sys.argv[1:], "m:f:") - except Exception,e: - show_usage() - - for (arg,val) in args: - if arg == '-m': - mode = val - elif arg == "-f": - file_name = val - - if mode == "generic": - dh = PrintGenericStubs() - else: - print "ERROR: Invalid mode \"%s\" specified." % mode - show_usage() - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(dh) - - f = open(file_name) - - dh.printHeader() - parser.parse(f) - dh.printFooter() diff --git a/src/kits/opengl/mesa/glapi/glapi.c b/src/kits/opengl/mesa/glapi/glapi.c index 1823d1bb36..d1ccc5fba6 100644 --- a/src/kits/opengl/mesa/glapi/glapi.c +++ b/src/kits/opengl/mesa/glapi/glapi.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -54,13 +54,18 @@ #include "glapi.h" #include "glapioffsets.h" #include "glapitable.h" -#include "glthread.h" /***** BEGIN NO-OP DISPATCH *****/ static GLboolean WarnFlag = GL_FALSE; static _glapi_warning_func warning_func; +#if defined(PTHREADS) || defined(GLX_USE_TLS) +static void init_glapi_relocs(void); +#endif + +static _glapi_proc generate_entrypoint(GLuint functionOffset); +static void fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset); /* * Enable/disable printing of warning messages. @@ -94,6 +99,7 @@ warn(void) #define KEYWORD1 static +#define KEYWORD1_ALT static #define KEYWORD2 GLAPIENTRY #define NAME(func) NoOp##func @@ -129,75 +135,74 @@ static GLint NoOpUnused(void) -/***** BEGIN THREAD-SAFE DISPATCH *****/ +/** + * \name Current dispatch and current context control variables + * + * Depending on whether or not multithreading is support, and the type of + * support available, several variables are used to store the current context + * pointer and the current dispatch table pointer. In the non-threaded case, + * the variables \c _glapi_Dispatch and \c _glapi_Context are used for this + * purpose. + * + * In the "normal" threaded case, the variables \c _glapi_Dispatch and + * \c _glapi_Context will be \c NULL if an application is detected as being + * multithreaded. Single-threaded applications will use \c _glapi_Dispatch + * and \c _glapi_Context just like the case without any threading support. + * When \c _glapi_Dispatch and \c _glapi_Context are \c NULL, the thread state + * data \c _gl_DispatchTSD and \c ContextTSD are used. Drivers and the + * static dispatch functions access these variables via \c _glapi_get_dispatch + * and \c _glapi_get_context. + * + * There is a race condition in setting \c _glapi_Dispatch to \c NULL. It is + * possible for the original thread to be setting it at the same instant a new + * thread, perhaps running on a different processor, is clearing it. Because + * of that, \c ThreadSafe, which can only ever be changed to \c GL_TRUE, is + * used to determine whether or not the application is multithreaded. + * + * In the TLS case, the variables \c _glapi_Dispatch and \c _glapi_Context are + * hardcoded to \c NULL. Instead the TLS variables \c _glapi_tls_Dispatch and + * \c _glapi_tls_Context are used. Having \c _glapi_Dispatch and + * \c _glapi_Context be hardcoded to \c NULL maintains binary compatability + * between TLS enabled loaders and non-TLS DRI drivers. + */ +/*@{*/ +#if defined(GLX_USE_TLS) + +PUBLIC __thread struct _glapi_table * _glapi_tls_Dispatch + __attribute__((tls_model("initial-exec"))) + = (struct _glapi_table *) __glapi_noop_table; + +PUBLIC __thread void * _glapi_tls_Context + __attribute__((tls_model("initial-exec"))); + +PUBLIC const struct _glapi_table *_glapi_Dispatch = NULL; +PUBLIC const void *_glapi_Context = NULL; + +#else #if defined(THREADS) -/** - * \name Multi-threaded control support variables - * - * If thread-safety is supported, there are two potential mechanisms that can - * be used. The old-style mechanism would set \c _glapi_Dispatch to a special - * thread-safe dispatch table. These dispatch routines would call - * \c _glapi_get_dispatch to get the actual dispatch pointer. In this - * setup \c _glapi_Dispatch could never be \c NULL. This dual layered - * dispatch setup performed great for single-threaded apps, but didn't - * perform well for multithreaded apps. - * - * In the new mechansim, there are two variables. The first is - * \c _glapi_DispatchTSD. In the single-threaded case, this variable points - * to the dispatch table. In the multi-threaded case, this variable is - * \c NULL, and thread-specific variable \c _gl_DispatchTSD points to the - * actual dispatch table. \c _glapi_DispatchTSD is used to signal to the - * static dispatch functions to call \c _glapi_get_dispatch to get the real - * dispatch table. - * - * There is a race condition in setting \c _glapi_DispatchTSD to \c NULL. - * It is possible for the original thread to be setting it at the same instant - * a new thread, perhaps running on a different processor, is clearing it. - * Because of that, \c ThreadSafe, which can only ever be changed to - * \c GL_TRUE, is used to determine whether or not the application is - * multithreaded. - */ -/*@{*/ static GLboolean ThreadSafe = GL_FALSE; /**< In thread-safe mode? */ _glthread_TSD _gl_DispatchTSD; /**< Per-thread dispatch pointer */ -static _glthread_TSD RealDispatchTSD; /**< only when using override */ static _glthread_TSD ContextTSD; /**< Per-thread context pointer */ -/*@}*/ - -#define DISPATCH_TABLE_NAME __glapi_threadsafe_table -#define UNUSED_TABLE_NAME __unused_threadsafe_functions - -#define TABLE_ENTRY(name) (_glapi_proc) gl##name - -static GLint glUnused(void) +#if defined(WIN32_THREADS) +void FreeTSD(_glthread_TSD *p); +void FreeAllTSD(void) { - return 0; + FreeTSD(&_gl_DispatchTSD); + FreeTSD(&ContextTSD); } +#endif /* defined(WIN32_THREADS) */ -#include "glapitemp.h" +#endif /* defined(THREADS) */ -#endif - -/***** END THREAD-SAFE DISPATCH *****/ - - - -PUBLIC struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table; -#if defined( THREADS ) -PUBLIC struct _glapi_table *_glapi_DispatchTSD = (struct _glapi_table *) __glapi_noop_table; -#endif -PUBLIC struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) __glapi_noop_table; - - -/* Used when thread safety disabled */ +PUBLIC struct _glapi_table *_glapi_Dispatch = + (struct _glapi_table *) __glapi_noop_table; PUBLIC void *_glapi_Context = NULL; - -static GLboolean DispatchOverride = GL_FALSE; - +#endif /* defined(GLX_USE_TLS) */ +/*@}*/ /** @@ -221,10 +226,10 @@ str_dup(const char *str) * We should call this periodically from a function such as glXMakeCurrent * in order to test if multiple threads are being used. */ -PUBLIC void +void _glapi_check_multithread(void) { -#if defined(THREADS) +#if defined(THREADS) && !defined(GLX_USE_TLS) if (!ThreadSafe) { static unsigned long knownID; static GLboolean firstCall = GL_TRUE; @@ -255,8 +260,9 @@ PUBLIC void _glapi_set_context(void *context) { (void) __unused_noop_functions; /* silence a warning */ -#if defined(THREADS) - (void) __unused_threadsafe_functions; /* silence a warning */ +#if defined(GLX_USE_TLS) + _glapi_tls_Context = context; +#elif defined(THREADS) _glthread_SetTSD(&ContextTSD, context); _glapi_Context = (ThreadSafe) ? NULL : context; #else @@ -274,7 +280,9 @@ _glapi_set_context(void *context) PUBLIC void * _glapi_get_context(void) { -#if defined(THREADS) +#if defined(GLX_USE_TLS) + return _glapi_tls_Context; +#elif defined(THREADS) if (ThreadSafe) { return _glthread_GetTSD(&ContextTSD); } @@ -290,10 +298,17 @@ _glapi_get_context(void) /** * Set the global or per-thread dispatch table pointer. + * If the dispatch parameter is NULL we'll plug in the no-op dispatch + * table (__glapi_noop_table). */ PUBLIC void _glapi_set_dispatch(struct _glapi_table *dispatch) { +#if defined(PTHREADS) || defined(GLX_USE_TLS) + static pthread_once_t once_control = PTHREAD_ONCE_INIT; + pthread_once( & once_control, init_glapi_relocs ); +#endif + if (!dispatch) { /* use the no-op functions */ dispatch = (struct _glapi_table *) __glapi_noop_table; @@ -304,33 +319,13 @@ _glapi_set_dispatch(struct _glapi_table *dispatch) } #endif -#if defined(THREADS) - if (DispatchOverride) { - _glthread_SetTSD(&RealDispatchTSD, (void *) dispatch); - if (ThreadSafe) - _glapi_RealDispatch = (struct _glapi_table*) __glapi_threadsafe_table; - else - _glapi_RealDispatch = dispatch; - } - else { - /* normal operation */ - _glthread_SetTSD(&_gl_DispatchTSD, (void *) dispatch); - if (ThreadSafe) { - _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table; - _glapi_DispatchTSD = NULL; - } - else { - _glapi_Dispatch = dispatch; - _glapi_DispatchTSD = dispatch; - } - } +#if defined(GLX_USE_TLS) + _glapi_tls_Dispatch = dispatch; +#elif defined(THREADS) + _glthread_SetTSD(&_gl_DispatchTSD, (void *) dispatch); + _glapi_Dispatch = (ThreadSafe) ? NULL : dispatch; #else /*THREADS*/ - if (DispatchOverride) { - _glapi_RealDispatch = dispatch; - } - else { - _glapi_Dispatch = dispatch; - } + _glapi_Dispatch = dispatch; #endif /*THREADS*/ } @@ -342,118 +337,38 @@ _glapi_set_dispatch(struct _glapi_table *dispatch) PUBLIC struct _glapi_table * _glapi_get_dispatch(void) { -#if defined(THREADS) - if (ThreadSafe) { - if (DispatchOverride) { - return (struct _glapi_table *) _glthread_GetTSD(&RealDispatchTSD); - } - else { - return (struct _glapi_table *) _glthread_GetTSD(&_gl_DispatchTSD); - } - } - else { - if (DispatchOverride) { - assert(_glapi_RealDispatch); - return _glapi_RealDispatch; - } - else { - assert(_glapi_DispatchTSD); - return _glapi_DispatchTSD; - } - } + struct _glapi_table * api; +#if defined(GLX_USE_TLS) + api = _glapi_tls_Dispatch; +#elif defined(THREADS) + api = (ThreadSafe) + ? (struct _glapi_table *) _glthread_GetTSD(&_gl_DispatchTSD) + : _glapi_Dispatch; #else - return _glapi_Dispatch; + api = _glapi_Dispatch; #endif + return api; } -/* - * Notes on dispatch overrride: - * - * Dispatch override allows an external agent to hook into the GL dispatch - * mechanism before execution goes into the core rendering library. For - * example, a trace mechanism would insert itself as an overrider, print - * logging info for each GL function, then dispatch to the real GL function. - * - * libGLS (GL Stream library) is another agent that might use override. - * - * We don't allow more than one layer of overriding at this time. - * In the future we may allow nested/layered override. In that case - * _glapi_begin_dispatch_override() will return an override layer, - * _glapi_end_dispatch_override(layer) will remove an override layer - * and _glapi_get_override_dispatch(layer) will return the dispatch - * table for a given override layer. layer = 0 will be the "real" - * dispatch table. - */ -/* - * Return: dispatch override layer number. - */ -PUBLIC int -_glapi_begin_dispatch_override(struct _glapi_table *override) -{ - struct _glapi_table *real = _glapi_get_dispatch(); +/*** + *** The rest of this file is pretty much concerned with GetProcAddress + *** functionality. + ***/ - assert(!DispatchOverride); /* can't nest at this time */ - DispatchOverride = GL_TRUE; - - _glapi_set_dispatch(real); - -#if defined(THREADS) - _glthread_SetTSD(&_gl_DispatchTSD, (void *) override); - if ( ThreadSafe ) { - _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table; - _glapi_DispatchTSD = NULL; - } - else { - _glapi_Dispatch = override; - _glapi_DispatchTSD = override; - } -#else - _glapi_Dispatch = override; +#if defined(USE_X64_64_ASM) && defined(GLX_USE_TLS) +# define DISPATCH_FUNCTION_SIZE 16 +#elif defined(USE_X86_ASM) +# if defined(THREADS) && !defined(GLX_USE_TLS) +# define DISPATCH_FUNCTION_SIZE 32 +# else +# define DISPATCH_FUNCTION_SIZE 16 +# endif #endif - return 1; -} - -PUBLIC void -_glapi_end_dispatch_override(int layer) -{ - struct _glapi_table *real = _glapi_get_dispatch(); - (void) layer; - DispatchOverride = GL_FALSE; - _glapi_set_dispatch(real); - /* the rest of this isn't needed, just play it safe */ -#if defined(THREADS) - _glthread_SetTSD(&RealDispatchTSD, NULL); -#endif - _glapi_RealDispatch = NULL; -} - - -PUBLIC struct _glapi_table * -_glapi_get_override_dispatch(int layer) -{ - if (layer == 0) { - return _glapi_get_dispatch(); - } - else { - if (DispatchOverride) { -#if defined(THREADS) - return (struct _glapi_table *) _glthread_GetTSD(&_gl_DispatchTSD); -#else - return _glapi_Dispatch; -#endif - } - else { - return NULL; - } - } -} - - -#if !defined( USE_X86_ASM ) -#define NEED_FUNCTION_POINTER +#if !defined(DISPATCH_FUNCTION_SIZE) && !defined(XFree86Server) && !defined(XGLServer) +# define NEED_FUNCTION_POINTER #endif /* The code in this file is auto-generated with Python */ @@ -468,13 +383,10 @@ static const glprocs_table_t * find_entry( const char * n ) { GLuint i; - for (i = 0; static_functions[i].Name_offset >= 0; i++) { - const char * test_name; - - test_name = gl_string_table + static_functions[i].Name_offset; - if (strcmp(test_name, n) == 0) { - return & static_functions[i]; + const char *testName = gl_string_table + static_functions[i].Name_offset; + if (strcmp(testName, n) == 0) { + return &static_functions[i]; } } return NULL; @@ -489,58 +401,55 @@ static GLint get_static_proc_offset(const char *funcName) { const glprocs_table_t * const f = find_entry( funcName ); - - if ( f != NULL ) { + if (f) { return f->Offset; } return -1; } +#if !defined(XFree86Server) && !defined(XGLServer) #ifdef USE_X86_ASM -extern const GLubyte gl_dispatch_functions_start[]; -# if defined(THREADS) -# define X86_DISPATCH_FUNCTION_SIZE 32 -# else -# define X86_DISPATCH_FUNCTION_SIZE 16 -# endif +#if defined( GLX_USE_TLS ) +extern GLubyte gl_dispatch_functions_start[]; +extern GLubyte gl_dispatch_functions_end[]; +#else +extern const GLubyte gl_dispatch_functions_start[]; +#endif + +#endif /* USE_X86_ASM */ /** - * Return dispatch function address the named static (built-in) function. + * Return dispatch function address for the named static (built-in) function. * Return NULL if function not found. */ -static const _glapi_proc +static _glapi_proc get_static_proc_address(const char *funcName) { const glprocs_table_t * const f = find_entry( funcName ); - - if ( f != NULL ) { + if (f) { +#if defined(DISPATCH_FUNCTION_SIZE) && defined(GLX_INDIRECT_RENDERING) + return (f->Address == NULL) + ? (_glapi_proc) (gl_dispatch_functions_start + + (DISPATCH_FUNCTION_SIZE * f->Offset)) + : f->Address; +#elif defined(DISPATCH_FUNCTION_SIZE) return (_glapi_proc) (gl_dispatch_functions_start - + (X86_DISPATCH_FUNCTION_SIZE * f->Offset)); + + (DISPATCH_FUNCTION_SIZE * f->Offset)); +#else + return f->Address; +#endif } else { return NULL; } } -#else +#endif /* !defined(XFree86Server) && !defined(XGLServer) */ -/** - * Return pointer to the named static (built-in) function. - * \return NULL if function not found. - */ -static const _glapi_proc -get_static_proc_address(const char *funcName) -{ - const glprocs_table_t * const f = find_entry( funcName ); - return ( f != NULL ) ? f->Address : NULL; -} - -#endif /* USE_X86_ASM */ - /** * Return the name of the function at the given offset in the dispatch @@ -550,7 +459,6 @@ static const char * get_static_proc_name( GLuint offset ) { GLuint i; - for (i = 0; static_functions[i].Name_offset >= 0; i++) { if (static_functions[i].Offset == offset) { return gl_string_table + static_functions[i].Name_offset; @@ -580,14 +488,52 @@ get_static_proc_name( GLuint offset ) #define DISPATCH_TABLE_SIZE (sizeof(struct _glapi_table) / sizeof(void *) + MAX_EXTENSION_FUNCS) -struct name_address_offset { - const char *Name; - _glapi_proc Address; - GLuint Offset; +/** + * Track information about a function added to the GL API. + */ +struct _glapi_function { + /** + * Name of the function. + */ + const char * name; + + + /** + * Text string that describes the types of the parameters passed to the + * named function. Parameter types are converted to characters using the + * following rules: + * - 'i' for \c GLint, \c GLuint, and \c GLenum + * - 'p' for any pointer type + * - 'f' for \c GLfloat and \c GLclampf + * - 'd' for \c GLdouble and \c GLclampd + */ + const char * parameter_signature; + + + /** + * Offset in the dispatch table where the pointer to the real function is + * located. If the driver has not requested that the named function be + * added to the dispatch table, this will have the value ~0. + */ + unsigned dispatch_offset; + + + /** + * Pointer to the dispatch stub for the named function. + * + * \todo + * The semantic of this field should be changed slightly. Currently, it + * is always expected to be non-\c NULL. However, it would be better to + * only allocate the entry-point stub when the application requests the + * function via \c glXGetProcAddress. This would save memory for all the + * functions that the driver exports but that the application never wants + * to call. + */ + _glapi_proc dispatch_stub; }; -static struct name_address_offset ExtEntryTable[MAX_EXTENSION_FUNCS]; +static struct _glapi_function ExtEntryTable[MAX_EXTENSION_FUNCS]; static GLuint NumExtEntryPoints = 0; #ifdef USE_SPARC_ASM @@ -603,49 +549,24 @@ static _glapi_proc generate_entrypoint(GLuint functionOffset) { #if defined(USE_X86_ASM) - /* - * This x86 code contributed by Josh Vanderhoof. - * - * 0: a1 10 32 54 76 movl __glapi_Dispatch,%eax - * 00 01 02 03 04 - * 5: 85 c0 testl %eax,%eax - * 05 06 - * 7: 74 06 je f - * 07 08 - * 9: ff a0 10 32 54 76 jmp *0x76543210(%eax) - * 09 0a 0b 0c 0d 0e - * f: e8 fc ff ff ff call __glapi_get_dispatch - * 0f 10 11 12 13 - * 14: ff a0 10 32 54 76 jmp *0x76543210(%eax) - * 14 15 16 17 18 19 + /* 32 is chosen as something of a magic offset. For x86, the dispatch + * at offset 32 is the first one where the offset in the + * "jmp OFFSET*4(%eax)" can't be encoded in a single byte. */ - static const unsigned char insn_template[] = { - 0xa1, 0x00, 0x00, 0x00, 0x00, - 0x85, 0xc0, - 0x74, 0x06, - 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, - 0xe8, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00 - }; - unsigned char *code = (unsigned char *) malloc(sizeof(insn_template)); - unsigned int next_insn; - if (code) { - memcpy(code, insn_template, sizeof(insn_template)); + const GLubyte * const template_func = gl_dispatch_functions_start + + (DISPATCH_FUNCTION_SIZE * 32); + GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE); -#if defined( THREADS ) - *(unsigned int *)(code + 0x01) = (unsigned int)&_glapi_DispatchTSD; -#else - *(unsigned int *)(code + 0x01) = (unsigned int)&_glapi_Dispatch; -#endif - *(unsigned int *)(code + 0x0b) = (unsigned int)functionOffset * 4; - next_insn = (unsigned int)(code + 0x14); - *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn; - *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4; + + if ( code != NULL ) { + (void) memcpy(code, template_func, DISPATCH_FUNCTION_SIZE); + fill_in_entrypoint_offset( (_glapi_proc) code, functionOffset ); } + return (_glapi_proc) code; #elif defined(USE_SPARC_ASM) -#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__))) +#ifdef __arch64__ static const unsigned int insn_template[] = { 0x05000000, /* sethi %uhi(_glapi_Dispatch), %g2 */ 0x03000000, /* sethi %hi(_glapi_Dispatch), %g1 */ @@ -667,13 +588,13 @@ generate_entrypoint(GLuint functionOffset) 0x81c0c000, /* jmpl %g3, %g0 */ 0x01000000 /* nop */ }; -#endif +#endif /* __arch64__ */ unsigned int *code = (unsigned int *) malloc(sizeof(insn_template)); unsigned long glapi_addr = (unsigned long) &_glapi_Dispatch; if (code) { memcpy(code, insn_template, sizeof(insn_template)); -#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__))) +#ifdef __arch64__ code[0] |= (glapi_addr >> (32 + 10)); code[1] |= ((glapi_addr & 0xffffffff) >> 10); __glapi_sparc_icache_flush(&code[0]); @@ -689,7 +610,7 @@ generate_entrypoint(GLuint functionOffset) __glapi_sparc_icache_flush(&code[0]); code[2] |= (functionOffset * 4); __glapi_sparc_icache_flush(&code[2]); -#endif +#endif /* __arch64__ */ } return (_glapi_proc) code; #else @@ -707,26 +628,34 @@ static void fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset) { #if defined(USE_X86_ASM) + GLubyte * const code = (GLubyte *) entrypoint; - unsigned char *code = (unsigned char *) entrypoint; - *(unsigned int *)(code + 0x0b) = offset * 4; - *(unsigned int *)(code + 0x16) = offset * 4; +#if DISPATCH_FUNCTION_SIZE == 32 + *((unsigned int *)(code + 11)) = 4 * offset; + *((unsigned int *)(code + 22)) = 4 * offset; +#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS ) + *((unsigned int *)(code + 8)) = 4 * offset; +#elif DISPATCH_FUNCTION_SIZE == 16 + *((unsigned int *)(code + 7)) = 4 * offset; +#else +# error Invalid DISPATCH_FUNCTION_SIZE! +#endif #elif defined(USE_SPARC_ASM) /* XXX this hasn't been tested! */ unsigned int *code = (unsigned int *) entrypoint; -#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__))) +#ifdef __arch64__ code[6] = 0x05000000; /* sethi %hi(8 * glapioffset), %g2 */ code[7] = 0x8410a000; /* or %g2, %lo(8 * glapioffset), %g2 */ code[6] |= ((offset * 8) >> 10); code[7] |= ((offset * 8) & ((1 << 10) - 1)); __glapi_sparc_icache_flush(&code[6]); -#else /* __sparc_v9__ && !linux */ +#else /* __arch64__ */ code[2] = 0xc6006000; /* ld [%g1 + %lo(4*glapioffset)], %g3 */ code[2] |= (offset * 4); __glapi_sparc_icache_flush(&code[2]); -#endif /* __sparc_v9__ && !linux */ +#endif /* __arch64__ */ #else @@ -739,76 +668,180 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset) /** - * Add a new extension function entrypoint. - * Return: GL_TRUE = success or GL_FALSE = failure + * Generate new entrypoint + * + * Use a temporary dispatch offset of ~0 (i.e. -1). Later, when the driver + * calls \c _glapi_add_dispatch we'll put in the proper offset. If that + * never happens, and the user calls this function, he'll segfault. That's + * what you get when you try calling a GL function that doesn't really exist. + * + * \param funcName Name of the function to create an entry-point for. + * + * \sa _glapi_add_entrypoint */ -PUBLIC GLboolean -_glapi_add_entrypoint(const char *funcName, GLuint offset) + +static struct _glapi_function * +add_function_name( const char * funcName ) { - /* trivial rejection test */ -#ifdef MANGLE - if (!funcName || funcName[0] != 'm' || funcName[1] != 'g' || funcName[2] != 'l') - return GL_FALSE; -#else - if (!funcName || funcName[0] != 'g' || funcName[1] != 'l') - return GL_FALSE; -#endif + struct _glapi_function * entry = NULL; + + if (NumExtEntryPoints < MAX_EXTENSION_FUNCS) { + _glapi_proc entrypoint = generate_entrypoint(~0); + if (entrypoint != NULL) { + entry = & ExtEntryTable[NumExtEntryPoints]; - /* first check if the named function is already statically present */ - { - GLint index = get_static_proc_offset(funcName); - if (index >= 0) { - return (GLboolean) ((GLuint) index == offset); /* bad offset! */ + ExtEntryTable[NumExtEntryPoints].name = str_dup(funcName); + ExtEntryTable[NumExtEntryPoints].parameter_signature = NULL; + ExtEntryTable[NumExtEntryPoints].dispatch_offset = ~0; + ExtEntryTable[NumExtEntryPoints].dispatch_stub = entrypoint; + NumExtEntryPoints++; } } - /* See if this function has already been dynamically added */ - { - GLuint i; - for (i = 0; i < NumExtEntryPoints; i++) { - if (strcmp(ExtEntryTable[i].Name, funcName) == 0) { - /* function already registered */ - if (ExtEntryTable[i].Offset == offset) { - return GL_TRUE; /* offsets match */ - } - else if (ExtEntryTable[i].Offset == (GLuint) ~0 - && offset < DISPATCH_TABLE_SIZE) { - /* need to patch-up the dispatch code */ - if (offset != (GLuint) ~0) { - fill_in_entrypoint_offset(ExtEntryTable[i].Address, offset); - ExtEntryTable[i].Offset = offset; - } - return GL_TRUE; - } - else { - return GL_FALSE; /* bad offset! */ - } - } + return entry; +} + + +/** + * Fill-in the dispatch stub for the named function. + * + * This function is intended to be called by a hardware driver. When called, + * a dispatch stub may be created created for the function. A pointer to this + * dispatch function will be returned by glXGetProcAddress. + * + * \param function_names Array of pointers to function names that should + * share a common dispatch offset. + * \param parameter_signature String representing the types of the parameters + * passed to the named function. Parameter types + * are converted to characters using the following + * rules: + * - 'i' for \c GLint, \c GLuint, and \c GLenum + * - 'p' for any pointer type + * - 'f' for \c GLfloat and \c GLclampf + * - 'd' for \c GLdouble and \c GLclampd + * + * \returns + * The offset in the dispatch table of the named function. A pointer to the + * driver's implementation of the named function should be stored at + * \c dispatch_table[\c offset]. + * + * \sa glXGetProcAddress + * + * \warning + * This function can only handle up to 8 names at a time. As far as I know, + * the maximum number of names ever associated with an existing GL function is + * 4 (\c glPointParameterfSGIS, \c glPointParameterfEXT, + * \c glPointParameterfARB, and \c glPointParameterf), so this should not be + * too painful of a limitation. + * + * \todo + * Determine whether or not \c parameter_signature should be allowed to be + * \c NULL. It doesn't seem like much of a hardship for drivers to have to + * pass in an empty string. + * + * \todo + * Determine if code should be added to reject function names that start with + * 'glX'. + * + * \bug + * Add code to compare \c parameter_signature with the parameter signature of + * a static function. In order to do that, we need to find a way to \b get + * the parameter signature of a static function. + */ + +PUBLIC int +_glapi_add_dispatch( const char * const * function_names, + const char * parameter_signature ) +{ + static int next_dynamic_offset = _gloffset_FIRST_DYNAMIC; + const char * const real_sig = (parameter_signature != NULL) + ? parameter_signature : ""; + struct _glapi_function * entry[8]; + GLboolean is_static[8]; + unsigned i; + unsigned j; + int offset = ~0; + int new_offset; + + + (void) memset( is_static, 0, sizeof( is_static ) ); + (void) memset( entry, 0, sizeof( entry ) ); + + for ( i = 0 ; function_names[i] != NULL ; i++ ) { + /* Do some trivial validation on the name of the function. + */ + + if (!function_names[i] || function_names[i][0] != 'g' || function_names[i][1] != 'l') + return GL_FALSE; + + /* Determine if the named function already exists. If the function does + * exist, it must have the same parameter signature as the function + * being added. + */ + + new_offset = get_static_proc_offset(function_names[i]); + if (new_offset >= 0) { + /* FIXME: Make sure the parameter signatures match! How do we get + * FIXME: the parameter signature for static functions? + */ + + if ( (offset != ~0) && (new_offset != offset) ) { + return -1; + } + + is_static[i] = GL_TRUE; + offset = new_offset; + } + + + for ( j = 0 ; j < NumExtEntryPoints ; j++ ) { + if (strcmp(ExtEntryTable[j].name, function_names[i]) == 0) { + /* The offset may be ~0 if the function name was added by + * glXGetProcAddress but never filled in by the driver. + */ + + if (ExtEntryTable[j].dispatch_offset != ~0) { + if (strcmp(real_sig, ExtEntryTable[j].parameter_signature) + != 0) { + return -1; + } + + if ( (offset != ~0) && (ExtEntryTable[j].dispatch_offset != offset) ) { + return -1; + } + + offset = ExtEntryTable[j].dispatch_offset; + } + + entry[i] = & ExtEntryTable[j]; + break; + } } } - /* This is a new function, try to add it. */ - if (NumExtEntryPoints >= MAX_EXTENSION_FUNCS || - offset >= DISPATCH_TABLE_SIZE) { - /* No space left */ - return GL_FALSE; - } - else { - _glapi_proc entrypoint = generate_entrypoint(offset); - if (!entrypoint) - return GL_FALSE; /* couldn't generate assembly */ - - /* OK! */ - ExtEntryTable[NumExtEntryPoints].Name = str_dup(funcName); - ExtEntryTable[NumExtEntryPoints].Offset = offset; - ExtEntryTable[NumExtEntryPoints].Address = entrypoint; - NumExtEntryPoints++; - - return GL_TRUE; /* success */ + if (offset == ~0) { + offset = next_dynamic_offset; + next_dynamic_offset++; } - /* should never get here, silence compiler warnings */ - return GL_FALSE; + for ( i = 0 ; function_names[i] != NULL ; i++ ) { + if (! is_static[i] ) { + if (entry[i] == NULL) { + entry[i] = add_function_name( function_names[i] ); + if (entry[i] == NULL) { + /* FIXME: Possible memory leak here. + */ + return -1; + } + } + + entry[i]->parameter_signature = str_dup(real_sig); + fill_in_entrypoint_offset(entry[i]->dispatch_stub, offset); + entry[i]->dispatch_offset = offset; + } + } + + return offset; } @@ -821,11 +854,10 @@ _glapi_get_proc_offset(const char *funcName) /* search extension functions first */ GLuint i; for (i = 0; i < NumExtEntryPoints; i++) { - if (strcmp(ExtEntryTable[i].Name, funcName) == 0) { - return ExtEntryTable[i].Offset; + if (strcmp(ExtEntryTable[i].name, funcName) == 0) { + return ExtEntryTable[i].dispatch_offset; } } - /* search static functions */ return get_static_proc_offset(funcName); } @@ -837,9 +869,10 @@ _glapi_get_proc_offset(const char *funcName) * in the name of static functions, try generating a new API entrypoint on * the fly with assembly language. */ -PUBLIC _glapi_proc +_glapi_proc _glapi_get_proc_address(const char *funcName) { + struct _glapi_function * entry; GLuint i; #ifdef MANGLE @@ -852,40 +885,22 @@ _glapi_get_proc_address(const char *funcName) /* search extension functions first */ for (i = 0; i < NumExtEntryPoints; i++) { - if (strcmp(ExtEntryTable[i].Name, funcName) == 0) { - return ExtEntryTable[i].Address; + if (strcmp(ExtEntryTable[i].name, funcName) == 0) { + return ExtEntryTable[i].dispatch_stub; } } +#if !defined( XFree86Server ) && !defined( XGLServer ) /* search static functions */ { const _glapi_proc func = get_static_proc_address(funcName); if (func) return func; } +#endif /* !defined( XFree86Server ) */ - /* generate new entrypoint - use a temporary dispatch offset of - * ~0 (i.e. -1). Later, when the driver calls _glapi_add_entrypoint() - * we'll put in the proper offset. If that never happens, and the - * user calls this function, he'll segfault. That's what you get - * when you try calling a GL function that doesn't really exist. - */ - if (NumExtEntryPoints < MAX_EXTENSION_FUNCS) { - _glapi_proc entrypoint = generate_entrypoint(~0); - if (!entrypoint) - return GL_FALSE; - - ExtEntryTable[NumExtEntryPoints].Name = str_dup(funcName); - ExtEntryTable[NumExtEntryPoints].Offset = ~0; - ExtEntryTable[NumExtEntryPoints].Address = entrypoint; - NumExtEntryPoints++; - - return entrypoint; - } - else { - /* no space for new functions! */ - return NULL; - } + entry = add_function_name(funcName); + return (entry == NULL) ? NULL : entry->dispatch_stub; } @@ -894,7 +909,7 @@ _glapi_get_proc_address(const char *funcName) * Return the name of the function at the given dispatch offset. * This is only intended for debugging. */ -PUBLIC const char * +const char * _glapi_get_proc_name(GLuint offset) { GLuint i; @@ -908,8 +923,8 @@ _glapi_get_proc_name(GLuint offset) /* search added extension functions */ for (i = 0; i < NumExtEntryPoints; i++) { - if (ExtEntryTable[i].Offset == offset) { - return ExtEntryTable[i].Name; + if (ExtEntryTable[i].dispatch_offset == offset) { + return ExtEntryTable[i].name; } } return NULL; @@ -929,22 +944,11 @@ _glapi_get_dispatch_table_size(void) -/** - * Get API dispatcher version string. - */ -PUBLIC const char * -_glapi_get_version(void) -{ - return "20021001"; /* YYYYMMDD */ -} - - - /** * Make sure there are no NULL pointers in the given dispatch table. * Intended for debugging purposes. */ -PUBLIC void +void _glapi_check_table(const struct _glapi_table *table) { #ifdef DEBUG @@ -993,13 +997,6 @@ _glapi_check_table(const struct _glapi_table *table) assert(blendColorOffset == _gloffset_BlendColor); assert(blendColorOffset == offset); } - { - GLuint istextureOffset = _glapi_get_proc_offset("glIsTextureEXT"); - char *istextureFunc = (char*) &table->IsTextureEXT; - GLuint offset = (istextureFunc - (char *) table) / sizeof(void *); - assert(istextureOffset == _gloffset_IsTextureEXT); - assert(istextureOffset == offset); - } { GLuint secondaryColor3fOffset = _glapi_get_proc_offset("glSecondaryColor3fEXT"); char *secondaryColor3fFunc = (char*) &table->SecondaryColor3fEXT; @@ -1022,9 +1019,32 @@ _glapi_check_table(const struct _glapi_table *table) GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *); assert(setFenceOffset == _gloffset_SetFenceNV); assert(setFenceOffset == offset); - assert(_glapi_get_proc_address("glSetFenceNV") == (_glapi_proc) &glSetFenceNV); } #else (void) table; #endif } + + +#if defined(PTHREADS) || defined(GLX_USE_TLS) +/** + * Perform platform-specific GL API entry-point fixups. + * + * + */ +static void +init_glapi_relocs( void ) +{ +#if defined( USE_X86_ASM ) && defined( GLX_USE_TLS ) + extern void * _x86_get_dispatch(void); + const GLubyte * const get_disp = (const GLubyte *) _x86_get_dispatch; + GLubyte * curr_func = (GLubyte *) gl_dispatch_functions_start; + + + while ( curr_func != (GLubyte *) gl_dispatch_functions_end ) { + (void) memcpy( curr_func, get_disp, 6 ); + curr_func += DISPATCH_FUNCTION_SIZE; + } +#endif /* defined( USE_X86_ASM ) && defined( GLX_USE_TLS ) */ +} +#endif diff --git a/src/kits/opengl/mesa/glapi/glapi.h b/src/kits/opengl/mesa/glapi/glapi.h index 0076f7f89d..ddfb1cffb9 100644 --- a/src/kits/opengl/mesa/glapi/glapi.h +++ b/src/kits/opengl/mesa/glapi/glapi.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -46,18 +46,54 @@ #include "GL/gl.h" +#include "glapitable.h" +#include "glthread.h" -struct _glapi_table; typedef void (*_glapi_warning_func)(void *ctx, const char *str, ...); -typedef void (*_glapi_proc)(void); /* generic function pointer */ +#if defined(USE_MGL_NAMESPACE) +#define _glapi_set_dispatch _mglapi_set_dispatch +#define _glapi_get_dispatch _mglapi_get_dispatch +#define _glapi_set_context _mglapi_set_context +#define _glapi_get_context _mglapi_get_context +#define _glapi_Context _mglapi_Context +#define _glapi_Dispatch _mglapi_Dispatch +#endif + + +/** + ** Define the GET_CURRENT_CONTEXT() macro. + ** \param C local variable which will hold the current context. + **/ +#if defined (GLX_USE_TLS) + +const extern void *_glapi_Context; +const extern struct _glapi_table *_glapi_Dispatch; + +extern __thread void * _glapi_tls_Context + __attribute__((tls_model("initial-exec"))); + +# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_tls_Context + +#else extern void *_glapi_Context; - extern struct _glapi_table *_glapi_Dispatch; +# ifdef THREADS +# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context()) +# else +# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_Context +# endif + +#endif /* defined (GLX_USE_TLS) */ + + +/** + ** GL API public functions + **/ extern void _glapi_noop_enable_warnings(GLboolean enable); @@ -101,17 +137,13 @@ extern GLuint _glapi_get_dispatch_table_size(void); -extern const char * -_glapi_get_version(void); - - extern void _glapi_check_table(const struct _glapi_table *table); -extern GLboolean -_glapi_add_entrypoint(const char *funcName, GLuint offset); - +extern int +_glapi_add_dispatch( const char * const * function_names, + const char * parameter_signature ); extern GLint _glapi_get_proc_offset(const char *funcName); diff --git a/src/kits/opengl/mesa/glapi/glapioffsets.h b/src/kits/opengl/mesa/glapi/glapioffsets.h index 2bd36e4110..cb0d21083e 100644 --- a/src/kits/opengl/mesa/glapi/glapioffsets.h +++ b/src/kits/opengl/mesa/glapi/glapioffsets.h @@ -26,8 +26,8 @@ * SOFTWARE. */ -#ifndef _GLAPI_OFFSETS_H_ -#define _GLAPI_OFFSETS_H_ +#if !defined( _GLAPI_OFFSETS_H_ ) +# define _GLAPI_OFFSETS_H_ #define _gloffset_NewList 0 #define _gloffset_EndList 1 @@ -437,393 +437,742 @@ #define _gloffset_MultiTexCoord4ivARB 405 #define _gloffset_MultiTexCoord4sARB 406 #define _gloffset_MultiTexCoord4svARB 407 -#define _gloffset_LoadTransposeMatrixfARB 408 -#define _gloffset_LoadTransposeMatrixdARB 409 -#define _gloffset_MultTransposeMatrixfARB 410 -#define _gloffset_MultTransposeMatrixdARB 411 -#define _gloffset_SampleCoverageARB 412 -#define _gloffset_DrawBuffersARB 413 -#define _gloffset_PolygonOffsetEXT 414 -#define _gloffset_GetTexFilterFuncSGIS 415 -#define _gloffset_TexFilterFuncSGIS 416 -#define _gloffset_GetHistogramEXT 417 -#define _gloffset_GetHistogramParameterfvEXT 418 -#define _gloffset_GetHistogramParameterivEXT 419 -#define _gloffset_GetMinmaxEXT 420 -#define _gloffset_GetMinmaxParameterfvEXT 421 -#define _gloffset_GetMinmaxParameterivEXT 422 -#define _gloffset_GetConvolutionFilterEXT 423 -#define _gloffset_GetConvolutionParameterfvEXT 424 -#define _gloffset_GetConvolutionParameterivEXT 425 -#define _gloffset_GetSeparableFilterEXT 426 -#define _gloffset_GetColorTableSGI 427 -#define _gloffset_GetColorTableParameterfvSGI 428 -#define _gloffset_GetColorTableParameterivSGI 429 -#define _gloffset_PixelTexGenSGIX 430 -#define _gloffset_PixelTexGenParameteriSGIS 431 -#define _gloffset_PixelTexGenParameterivSGIS 432 -#define _gloffset_PixelTexGenParameterfSGIS 433 -#define _gloffset_PixelTexGenParameterfvSGIS 434 -#define _gloffset_GetPixelTexGenParameterivSGIS 435 -#define _gloffset_GetPixelTexGenParameterfvSGIS 436 -#define _gloffset_TexImage4DSGIS 437 -#define _gloffset_TexSubImage4DSGIS 438 -#define _gloffset_AreTexturesResidentEXT 439 -#define _gloffset_GenTexturesEXT 440 -#define _gloffset_IsTextureEXT 441 -#define _gloffset_DetailTexFuncSGIS 442 -#define _gloffset_GetDetailTexFuncSGIS 443 -#define _gloffset_SharpenTexFuncSGIS 444 -#define _gloffset_GetSharpenTexFuncSGIS 445 -#define _gloffset_SampleMaskSGIS 446 -#define _gloffset_SamplePatternSGIS 447 -#define _gloffset_ColorPointerEXT 448 -#define _gloffset_EdgeFlagPointerEXT 449 -#define _gloffset_IndexPointerEXT 450 -#define _gloffset_NormalPointerEXT 451 -#define _gloffset_TexCoordPointerEXT 452 -#define _gloffset_VertexPointerEXT 453 -#define _gloffset_SpriteParameterfSGIX 454 -#define _gloffset_SpriteParameterfvSGIX 455 -#define _gloffset_SpriteParameteriSGIX 456 -#define _gloffset_SpriteParameterivSGIX 457 -#define _gloffset_PointParameterfEXT 458 -#define _gloffset_PointParameterfvEXT 459 -#define _gloffset_GetInstrumentsSGIX 460 -#define _gloffset_InstrumentsBufferSGIX 461 -#define _gloffset_PollInstrumentsSGIX 462 -#define _gloffset_ReadInstrumentsSGIX 463 -#define _gloffset_StartInstrumentsSGIX 464 -#define _gloffset_StopInstrumentsSGIX 465 -#define _gloffset_FrameZoomSGIX 466 -#define _gloffset_TagSampleBufferSGIX 467 -#define _gloffset_ReferencePlaneSGIX 468 -#define _gloffset_FlushRasterSGIX 469 -#define _gloffset_GetListParameterfvSGIX 470 -#define _gloffset_GetListParameterivSGIX 471 -#define _gloffset_ListParameterfSGIX 472 -#define _gloffset_ListParameterfvSGIX 473 -#define _gloffset_ListParameteriSGIX 474 -#define _gloffset_ListParameterivSGIX 475 -#define _gloffset_FragmentColorMaterialSGIX 476 -#define _gloffset_FragmentLightfSGIX 477 -#define _gloffset_FragmentLightfvSGIX 478 -#define _gloffset_FragmentLightiSGIX 479 -#define _gloffset_FragmentLightivSGIX 480 -#define _gloffset_FragmentLightModelfSGIX 481 -#define _gloffset_FragmentLightModelfvSGIX 482 -#define _gloffset_FragmentLightModeliSGIX 483 -#define _gloffset_FragmentLightModelivSGIX 484 -#define _gloffset_FragmentMaterialfSGIX 485 -#define _gloffset_FragmentMaterialfvSGIX 486 -#define _gloffset_FragmentMaterialiSGIX 487 -#define _gloffset_FragmentMaterialivSGIX 488 -#define _gloffset_GetFragmentLightfvSGIX 489 -#define _gloffset_GetFragmentLightivSGIX 490 -#define _gloffset_GetFragmentMaterialfvSGIX 491 -#define _gloffset_GetFragmentMaterialivSGIX 492 -#define _gloffset_LightEnviSGIX 493 -#define _gloffset_VertexWeightfEXT 494 -#define _gloffset_VertexWeightfvEXT 495 -#define _gloffset_VertexWeightPointerEXT 496 -#define _gloffset_FlushVertexArrayRangeNV 497 -#define _gloffset_VertexArrayRangeNV 498 -#define _gloffset_CombinerParameterfvNV 499 -#define _gloffset_CombinerParameterfNV 500 -#define _gloffset_CombinerParameterivNV 501 -#define _gloffset_CombinerParameteriNV 502 -#define _gloffset_CombinerInputNV 503 -#define _gloffset_CombinerOutputNV 504 -#define _gloffset_FinalCombinerInputNV 505 -#define _gloffset_GetCombinerInputParameterfvNV 506 -#define _gloffset_GetCombinerInputParameterivNV 507 -#define _gloffset_GetCombinerOutputParameterfvNV 508 -#define _gloffset_GetCombinerOutputParameterivNV 509 -#define _gloffset_GetFinalCombinerInputParameterfvNV 510 -#define _gloffset_GetFinalCombinerInputParameterivNV 511 -#define _gloffset_ResizeBuffersMESA 512 -#define _gloffset_WindowPos2dMESA 513 -#define _gloffset_WindowPos2dvMESA 514 -#define _gloffset_WindowPos2fMESA 515 -#define _gloffset_WindowPos2fvMESA 516 -#define _gloffset_WindowPos2iMESA 517 -#define _gloffset_WindowPos2ivMESA 518 -#define _gloffset_WindowPos2sMESA 519 -#define _gloffset_WindowPos2svMESA 520 -#define _gloffset_WindowPos3dMESA 521 -#define _gloffset_WindowPos3dvMESA 522 -#define _gloffset_WindowPos3fMESA 523 -#define _gloffset_WindowPos3fvMESA 524 -#define _gloffset_WindowPos3iMESA 525 -#define _gloffset_WindowPos3ivMESA 526 -#define _gloffset_WindowPos3sMESA 527 -#define _gloffset_WindowPos3svMESA 528 -#define _gloffset_WindowPos4dMESA 529 -#define _gloffset_WindowPos4dvMESA 530 -#define _gloffset_WindowPos4fMESA 531 -#define _gloffset_WindowPos4fvMESA 532 -#define _gloffset_WindowPos4iMESA 533 -#define _gloffset_WindowPos4ivMESA 534 -#define _gloffset_WindowPos4sMESA 535 -#define _gloffset_WindowPos4svMESA 536 -#define _gloffset_BlendFuncSeparateEXT 537 -#define _gloffset_IndexMaterialEXT 538 -#define _gloffset_IndexFuncEXT 539 -#define _gloffset_LockArraysEXT 540 -#define _gloffset_UnlockArraysEXT 541 -#define _gloffset_CullParameterdvEXT 542 -#define _gloffset_CullParameterfvEXT 543 -#define _gloffset_HintPGI 544 -#define _gloffset_FogCoordfEXT 545 -#define _gloffset_FogCoordfvEXT 546 -#define _gloffset_FogCoorddEXT 547 -#define _gloffset_FogCoorddvEXT 548 -#define _gloffset_FogCoordPointerEXT 549 -#define _gloffset_GetColorTableEXT 550 -#define _gloffset_GetColorTableParameterivEXT 551 -#define _gloffset_GetColorTableParameterfvEXT 552 -#define _gloffset_TbufferMask3DFX 553 -#define _gloffset_CompressedTexImage3DARB 554 -#define _gloffset_CompressedTexImage2DARB 555 -#define _gloffset_CompressedTexImage1DARB 556 -#define _gloffset_CompressedTexSubImage3DARB 557 -#define _gloffset_CompressedTexSubImage2DARB 558 -#define _gloffset_CompressedTexSubImage1DARB 559 -#define _gloffset_GetCompressedTexImageARB 560 -#define _gloffset_SecondaryColor3bEXT 561 -#define _gloffset_SecondaryColor3bvEXT 562 -#define _gloffset_SecondaryColor3dEXT 563 -#define _gloffset_SecondaryColor3dvEXT 564 -#define _gloffset_SecondaryColor3fEXT 565 -#define _gloffset_SecondaryColor3fvEXT 566 -#define _gloffset_SecondaryColor3iEXT 567 -#define _gloffset_SecondaryColor3ivEXT 568 -#define _gloffset_SecondaryColor3sEXT 569 -#define _gloffset_SecondaryColor3svEXT 570 -#define _gloffset_SecondaryColor3ubEXT 571 -#define _gloffset_SecondaryColor3ubvEXT 572 -#define _gloffset_SecondaryColor3uiEXT 573 -#define _gloffset_SecondaryColor3uivEXT 574 -#define _gloffset_SecondaryColor3usEXT 575 -#define _gloffset_SecondaryColor3usvEXT 576 -#define _gloffset_SecondaryColorPointerEXT 577 -#define _gloffset_AreProgramsResidentNV 578 -#define _gloffset_BindProgramNV 579 -#define _gloffset_DeleteProgramsNV 580 -#define _gloffset_ExecuteProgramNV 581 -#define _gloffset_GenProgramsNV 582 -#define _gloffset_GetProgramParameterdvNV 583 -#define _gloffset_GetProgramParameterfvNV 584 -#define _gloffset_GetProgramivNV 585 -#define _gloffset_GetProgramStringNV 586 -#define _gloffset_GetTrackMatrixivNV 587 -#define _gloffset_GetVertexAttribdvARB 588 -#define _gloffset_GetVertexAttribfvARB 589 -#define _gloffset_GetVertexAttribivARB 590 -#define _gloffset_GetVertexAttribPointervNV 591 -#define _gloffset_IsProgramNV 592 -#define _gloffset_LoadProgramNV 593 -#define _gloffset_ProgramParameter4dNV 594 -#define _gloffset_ProgramParameter4dvNV 595 -#define _gloffset_ProgramParameter4fNV 596 -#define _gloffset_ProgramParameter4fvNV 597 -#define _gloffset_ProgramParameters4dvNV 598 -#define _gloffset_ProgramParameters4fvNV 599 -#define _gloffset_RequestResidentProgramsNV 600 -#define _gloffset_TrackMatrixNV 601 -#define _gloffset_VertexAttribPointerNV 602 -#define _gloffset_VertexAttrib1dARB 603 -#define _gloffset_VertexAttrib1dvARB 604 -#define _gloffset_VertexAttrib1fARB 605 -#define _gloffset_VertexAttrib1fvARB 606 -#define _gloffset_VertexAttrib1sARB 607 -#define _gloffset_VertexAttrib1svARB 608 -#define _gloffset_VertexAttrib2dARB 609 -#define _gloffset_VertexAttrib2dvARB 610 -#define _gloffset_VertexAttrib2fARB 611 -#define _gloffset_VertexAttrib2fvARB 612 -#define _gloffset_VertexAttrib2sARB 613 -#define _gloffset_VertexAttrib2svARB 614 -#define _gloffset_VertexAttrib3dARB 615 -#define _gloffset_VertexAttrib3dvARB 616 -#define _gloffset_VertexAttrib3fARB 617 -#define _gloffset_VertexAttrib3fvARB 618 -#define _gloffset_VertexAttrib3sARB 619 -#define _gloffset_VertexAttrib3svARB 620 -#define _gloffset_VertexAttrib4dARB 621 -#define _gloffset_VertexAttrib4dvARB 622 -#define _gloffset_VertexAttrib4fARB 623 -#define _gloffset_VertexAttrib4fvARB 624 -#define _gloffset_VertexAttrib4sARB 625 -#define _gloffset_VertexAttrib4svARB 626 -#define _gloffset_VertexAttrib4NubARB 627 -#define _gloffset_VertexAttrib4NubvARB 628 -#define _gloffset_VertexAttribs1dvNV 629 -#define _gloffset_VertexAttribs1fvNV 630 -#define _gloffset_VertexAttribs1svNV 631 -#define _gloffset_VertexAttribs2dvNV 632 -#define _gloffset_VertexAttribs2fvNV 633 -#define _gloffset_VertexAttribs2svNV 634 -#define _gloffset_VertexAttribs3dvNV 635 -#define _gloffset_VertexAttribs3fvNV 636 -#define _gloffset_VertexAttribs3svNV 637 -#define _gloffset_VertexAttribs4dvNV 638 -#define _gloffset_VertexAttribs4fvNV 639 -#define _gloffset_VertexAttribs4svNV 640 -#define _gloffset_VertexAttribs4ubvNV 641 -#define _gloffset_PointParameteriNV 642 -#define _gloffset_PointParameterivNV 643 -#define _gloffset_MultiDrawArraysEXT 644 -#define _gloffset_MultiDrawElementsEXT 645 -#define _gloffset_ActiveStencilFaceEXT 646 -#define _gloffset_DeleteFencesNV 647 -#define _gloffset_GenFencesNV 648 -#define _gloffset_IsFenceNV 649 -#define _gloffset_TestFenceNV 650 -#define _gloffset_GetFenceivNV 651 -#define _gloffset_FinishFenceNV 652 -#define _gloffset_SetFenceNV 653 -#define _gloffset_VertexAttrib4bvARB 654 -#define _gloffset_VertexAttrib4ivARB 655 -#define _gloffset_VertexAttrib4ubvARB 656 -#define _gloffset_VertexAttrib4usvARB 657 -#define _gloffset_VertexAttrib4uivARB 658 -#define _gloffset_VertexAttrib4NbvARB 659 -#define _gloffset_VertexAttrib4NsvARB 660 -#define _gloffset_VertexAttrib4NivARB 661 -#define _gloffset_VertexAttrib4NusvARB 662 -#define _gloffset_VertexAttrib4NuivARB 663 -#define _gloffset_VertexAttribPointerARB 664 -#define _gloffset_EnableVertexAttribArrayARB 665 -#define _gloffset_DisableVertexAttribArrayARB 666 -#define _gloffset_ProgramStringARB 667 -#define _gloffset_ProgramEnvParameter4dARB 668 -#define _gloffset_ProgramEnvParameter4dvARB 669 -#define _gloffset_ProgramEnvParameter4fARB 670 -#define _gloffset_ProgramEnvParameter4fvARB 671 -#define _gloffset_ProgramLocalParameter4dARB 672 -#define _gloffset_ProgramLocalParameter4dvARB 673 -#define _gloffset_ProgramLocalParameter4fARB 674 -#define _gloffset_ProgramLocalParameter4fvARB 675 -#define _gloffset_GetProgramEnvParameterdvARB 676 -#define _gloffset_GetProgramEnvParameterfvARB 677 -#define _gloffset_GetProgramLocalParameterdvARB 678 -#define _gloffset_GetProgramLocalParameterfvARB 679 -#define _gloffset_GetProgramivARB 680 -#define _gloffset_GetProgramStringARB 681 -#define _gloffset_ProgramNamedParameter4fNV 682 -#define _gloffset_ProgramNamedParameter4dNV 683 -#define _gloffset_ProgramNamedParameter4fvNV 684 -#define _gloffset_ProgramNamedParameter4dvNV 685 -#define _gloffset_GetProgramNamedParameterfvNV 686 -#define _gloffset_GetProgramNamedParameterdvNV 687 -#define _gloffset_BindBufferARB 688 -#define _gloffset_BufferDataARB 689 -#define _gloffset_BufferSubDataARB 690 -#define _gloffset_DeleteBuffersARB 691 -#define _gloffset_GenBuffersARB 692 -#define _gloffset_GetBufferParameterivARB 693 -#define _gloffset_GetBufferPointervARB 694 -#define _gloffset_GetBufferSubDataARB 695 -#define _gloffset_IsBufferARB 696 -#define _gloffset_MapBufferARB 697 -#define _gloffset_UnmapBufferARB 698 -#define _gloffset_DepthBoundsEXT 699 -#define _gloffset_GenQueriesARB 700 -#define _gloffset_DeleteQueriesARB 701 -#define _gloffset_IsQueryARB 702 -#define _gloffset_BeginQueryARB 703 -#define _gloffset_EndQueryARB 704 -#define _gloffset_GetQueryivARB 705 -#define _gloffset_GetQueryObjectivARB 706 -#define _gloffset_GetQueryObjectuivARB 707 -#define _gloffset_MultiModeDrawArraysIBM 708 -#define _gloffset_MultiModeDrawElementsIBM 709 -#define _gloffset_BlendEquationSeparateEXT 710 -#define _gloffset_DeleteObjectARB 711 -#define _gloffset_GetHandleARB 712 -#define _gloffset_DetachObjectARB 713 -#define _gloffset_CreateShaderObjectARB 714 -#define _gloffset_ShaderSourceARB 715 -#define _gloffset_CompileShaderARB 716 -#define _gloffset_CreateProgramObjectARB 717 -#define _gloffset_AttachObjectARB 718 -#define _gloffset_LinkProgramARB 719 -#define _gloffset_UseProgramObjectARB 720 -#define _gloffset_ValidateProgramARB 721 -#define _gloffset_Uniform1fARB 722 -#define _gloffset_Uniform2fARB 723 -#define _gloffset_Uniform3fARB 724 -#define _gloffset_Uniform4fARB 725 -#define _gloffset_Uniform1iARB 726 -#define _gloffset_Uniform2iARB 727 -#define _gloffset_Uniform3iARB 728 -#define _gloffset_Uniform4iARB 729 -#define _gloffset_Uniform1fvARB 730 -#define _gloffset_Uniform2fvARB 731 -#define _gloffset_Uniform3fvARB 732 -#define _gloffset_Uniform4fvARB 733 -#define _gloffset_Uniform1ivARB 734 -#define _gloffset_Uniform2ivARB 735 -#define _gloffset_Uniform3ivARB 736 -#define _gloffset_Uniform4ivARB 737 -#define _gloffset_UniformMatrix2fvARB 738 -#define _gloffset_UniformMatrix3fvARB 739 -#define _gloffset_UniformMatrix4fvARB 740 -#define _gloffset_GetObjectParameterfvARB 741 -#define _gloffset_GetObjectParameterivARB 742 -#define _gloffset_GetInfoLogARB 743 -#define _gloffset_GetAttachedObjectsARB 744 -#define _gloffset_GetUniformLocationARB 745 -#define _gloffset_GetActiveUniformARB 746 -#define _gloffset_GetUniformfvARB 747 -#define _gloffset_GetUniformivARB 748 -#define _gloffset_GetShaderSourceARB 749 -#define _gloffset_BindAttribLocationARB 750 -#define _gloffset_GetActiveAttribARB 751 -#define _gloffset_GetAttribLocationARB 752 -#define _gloffset_GetVertexAttribdvNV 753 -#define _gloffset_GetVertexAttribfvNV 754 -#define _gloffset_GetVertexAttribivNV 755 -#define _gloffset_VertexAttrib1dNV 756 -#define _gloffset_VertexAttrib1dvNV 757 -#define _gloffset_VertexAttrib1fNV 758 -#define _gloffset_VertexAttrib1fvNV 759 -#define _gloffset_VertexAttrib1sNV 760 -#define _gloffset_VertexAttrib1svNV 761 -#define _gloffset_VertexAttrib2dNV 762 -#define _gloffset_VertexAttrib2dvNV 763 -#define _gloffset_VertexAttrib2fNV 764 -#define _gloffset_VertexAttrib2fvNV 765 -#define _gloffset_VertexAttrib2sNV 766 -#define _gloffset_VertexAttrib2svNV 767 -#define _gloffset_VertexAttrib3dNV 768 -#define _gloffset_VertexAttrib3dvNV 769 -#define _gloffset_VertexAttrib3fNV 770 -#define _gloffset_VertexAttrib3fvNV 771 -#define _gloffset_VertexAttrib3sNV 772 -#define _gloffset_VertexAttrib3svNV 773 -#define _gloffset_VertexAttrib4dNV 774 -#define _gloffset_VertexAttrib4dvNV 775 -#define _gloffset_VertexAttrib4fNV 776 -#define _gloffset_VertexAttrib4fvNV 777 -#define _gloffset_VertexAttrib4sNV 778 -#define _gloffset_VertexAttrib4svNV 779 -#define _gloffset_VertexAttrib4ubNV 780 -#define _gloffset_VertexAttrib4ubvNV 781 -#define _gloffset_GenFragmentShadersATI 782 -#define _gloffset_BindFragmentShaderATI 783 -#define _gloffset_DeleteFragmentShaderATI 784 -#define _gloffset_BeginFragmentShaderATI 785 -#define _gloffset_EndFragmentShaderATI 786 -#define _gloffset_PassTexCoordATI 787 -#define _gloffset_SampleMapATI 788 -#define _gloffset_ColorFragmentOp1ATI 789 -#define _gloffset_ColorFragmentOp2ATI 790 -#define _gloffset_ColorFragmentOp3ATI 791 -#define _gloffset_AlphaFragmentOp1ATI 792 -#define _gloffset_AlphaFragmentOp2ATI 793 -#define _gloffset_AlphaFragmentOp3ATI 794 -#define _gloffset_SetFragmentShaderConstantATI 795 -#endif +#if !defined(IN_DRI_DRIVER) + +#define _gloffset_AttachShader 408 +#define _gloffset_CreateProgram 409 +#define _gloffset_CreateShader 410 +#define _gloffset_DeleteProgram 411 +#define _gloffset_DeleteShader 412 +#define _gloffset_DetachShader 413 +#define _gloffset_GetAttachedShaders 414 +#define _gloffset_GetProgramInfoLog 415 +#define _gloffset_GetProgramiv 416 +#define _gloffset_GetShaderInfoLog 417 +#define _gloffset_GetShaderiv 418 +#define _gloffset_IsProgram 419 +#define _gloffset_IsShader 420 +#define _gloffset_StencilFuncSeparate 421 +#define _gloffset_StencilMaskSeparate 422 +#define _gloffset_StencilOpSeparate 423 +#define _gloffset_UniformMatrix2x3fv 424 +#define _gloffset_UniformMatrix2x4fv 425 +#define _gloffset_UniformMatrix3x2fv 426 +#define _gloffset_UniformMatrix3x4fv 427 +#define _gloffset_UniformMatrix4x2fv 428 +#define _gloffset_UniformMatrix4x3fv 429 +#define _gloffset_LoadTransposeMatrixdARB 430 +#define _gloffset_LoadTransposeMatrixfARB 431 +#define _gloffset_MultTransposeMatrixdARB 432 +#define _gloffset_MultTransposeMatrixfARB 433 +#define _gloffset_SampleCoverageARB 434 +#define _gloffset_CompressedTexImage1DARB 435 +#define _gloffset_CompressedTexImage2DARB 436 +#define _gloffset_CompressedTexImage3DARB 437 +#define _gloffset_CompressedTexSubImage1DARB 438 +#define _gloffset_CompressedTexSubImage2DARB 439 +#define _gloffset_CompressedTexSubImage3DARB 440 +#define _gloffset_GetCompressedTexImageARB 441 +#define _gloffset_DisableVertexAttribArrayARB 442 +#define _gloffset_EnableVertexAttribArrayARB 443 +#define _gloffset_GetProgramEnvParameterdvARB 444 +#define _gloffset_GetProgramEnvParameterfvARB 445 +#define _gloffset_GetProgramLocalParameterdvARB 446 +#define _gloffset_GetProgramLocalParameterfvARB 447 +#define _gloffset_GetProgramStringARB 448 +#define _gloffset_GetProgramivARB 449 +#define _gloffset_GetVertexAttribdvARB 450 +#define _gloffset_GetVertexAttribfvARB 451 +#define _gloffset_GetVertexAttribivARB 452 +#define _gloffset_ProgramEnvParameter4dARB 453 +#define _gloffset_ProgramEnvParameter4dvARB 454 +#define _gloffset_ProgramEnvParameter4fARB 455 +#define _gloffset_ProgramEnvParameter4fvARB 456 +#define _gloffset_ProgramLocalParameter4dARB 457 +#define _gloffset_ProgramLocalParameter4dvARB 458 +#define _gloffset_ProgramLocalParameter4fARB 459 +#define _gloffset_ProgramLocalParameter4fvARB 460 +#define _gloffset_ProgramStringARB 461 +#define _gloffset_VertexAttrib1dARB 462 +#define _gloffset_VertexAttrib1dvARB 463 +#define _gloffset_VertexAttrib1fARB 464 +#define _gloffset_VertexAttrib1fvARB 465 +#define _gloffset_VertexAttrib1sARB 466 +#define _gloffset_VertexAttrib1svARB 467 +#define _gloffset_VertexAttrib2dARB 468 +#define _gloffset_VertexAttrib2dvARB 469 +#define _gloffset_VertexAttrib2fARB 470 +#define _gloffset_VertexAttrib2fvARB 471 +#define _gloffset_VertexAttrib2sARB 472 +#define _gloffset_VertexAttrib2svARB 473 +#define _gloffset_VertexAttrib3dARB 474 +#define _gloffset_VertexAttrib3dvARB 475 +#define _gloffset_VertexAttrib3fARB 476 +#define _gloffset_VertexAttrib3fvARB 477 +#define _gloffset_VertexAttrib3sARB 478 +#define _gloffset_VertexAttrib3svARB 479 +#define _gloffset_VertexAttrib4NbvARB 480 +#define _gloffset_VertexAttrib4NivARB 481 +#define _gloffset_VertexAttrib4NsvARB 482 +#define _gloffset_VertexAttrib4NubARB 483 +#define _gloffset_VertexAttrib4NubvARB 484 +#define _gloffset_VertexAttrib4NuivARB 485 +#define _gloffset_VertexAttrib4NusvARB 486 +#define _gloffset_VertexAttrib4bvARB 487 +#define _gloffset_VertexAttrib4dARB 488 +#define _gloffset_VertexAttrib4dvARB 489 +#define _gloffset_VertexAttrib4fARB 490 +#define _gloffset_VertexAttrib4fvARB 491 +#define _gloffset_VertexAttrib4ivARB 492 +#define _gloffset_VertexAttrib4sARB 493 +#define _gloffset_VertexAttrib4svARB 494 +#define _gloffset_VertexAttrib4ubvARB 495 +#define _gloffset_VertexAttrib4uivARB 496 +#define _gloffset_VertexAttrib4usvARB 497 +#define _gloffset_VertexAttribPointerARB 498 +#define _gloffset_BindBufferARB 499 +#define _gloffset_BufferDataARB 500 +#define _gloffset_BufferSubDataARB 501 +#define _gloffset_DeleteBuffersARB 502 +#define _gloffset_GenBuffersARB 503 +#define _gloffset_GetBufferParameterivARB 504 +#define _gloffset_GetBufferPointervARB 505 +#define _gloffset_GetBufferSubDataARB 506 +#define _gloffset_IsBufferARB 507 +#define _gloffset_MapBufferARB 508 +#define _gloffset_UnmapBufferARB 509 +#define _gloffset_BeginQueryARB 510 +#define _gloffset_DeleteQueriesARB 511 +#define _gloffset_EndQueryARB 512 +#define _gloffset_GenQueriesARB 513 +#define _gloffset_GetQueryObjectivARB 514 +#define _gloffset_GetQueryObjectuivARB 515 +#define _gloffset_GetQueryivARB 516 +#define _gloffset_IsQueryARB 517 +#define _gloffset_AttachObjectARB 518 +#define _gloffset_CompileShaderARB 519 +#define _gloffset_CreateProgramObjectARB 520 +#define _gloffset_CreateShaderObjectARB 521 +#define _gloffset_DeleteObjectARB 522 +#define _gloffset_DetachObjectARB 523 +#define _gloffset_GetActiveUniformARB 524 +#define _gloffset_GetAttachedObjectsARB 525 +#define _gloffset_GetHandleARB 526 +#define _gloffset_GetInfoLogARB 527 +#define _gloffset_GetObjectParameterfvARB 528 +#define _gloffset_GetObjectParameterivARB 529 +#define _gloffset_GetShaderSourceARB 530 +#define _gloffset_GetUniformLocationARB 531 +#define _gloffset_GetUniformfvARB 532 +#define _gloffset_GetUniformivARB 533 +#define _gloffset_LinkProgramARB 534 +#define _gloffset_ShaderSourceARB 535 +#define _gloffset_Uniform1fARB 536 +#define _gloffset_Uniform1fvARB 537 +#define _gloffset_Uniform1iARB 538 +#define _gloffset_Uniform1ivARB 539 +#define _gloffset_Uniform2fARB 540 +#define _gloffset_Uniform2fvARB 541 +#define _gloffset_Uniform2iARB 542 +#define _gloffset_Uniform2ivARB 543 +#define _gloffset_Uniform3fARB 544 +#define _gloffset_Uniform3fvARB 545 +#define _gloffset_Uniform3iARB 546 +#define _gloffset_Uniform3ivARB 547 +#define _gloffset_Uniform4fARB 548 +#define _gloffset_Uniform4fvARB 549 +#define _gloffset_Uniform4iARB 550 +#define _gloffset_Uniform4ivARB 551 +#define _gloffset_UniformMatrix2fvARB 552 +#define _gloffset_UniformMatrix3fvARB 553 +#define _gloffset_UniformMatrix4fvARB 554 +#define _gloffset_UseProgramObjectARB 555 +#define _gloffset_ValidateProgramARB 556 +#define _gloffset_BindAttribLocationARB 557 +#define _gloffset_GetActiveAttribARB 558 +#define _gloffset_GetAttribLocationARB 559 +#define _gloffset_DrawBuffersARB 560 +#define _gloffset_PolygonOffsetEXT 561 +#define _gloffset_GetPixelTexGenParameterfvSGIS 562 +#define _gloffset_GetPixelTexGenParameterivSGIS 563 +#define _gloffset_PixelTexGenParameterfSGIS 564 +#define _gloffset_PixelTexGenParameterfvSGIS 565 +#define _gloffset_PixelTexGenParameteriSGIS 566 +#define _gloffset_PixelTexGenParameterivSGIS 567 +#define _gloffset_SampleMaskSGIS 568 +#define _gloffset_SamplePatternSGIS 569 +#define _gloffset_ColorPointerEXT 570 +#define _gloffset_EdgeFlagPointerEXT 571 +#define _gloffset_IndexPointerEXT 572 +#define _gloffset_NormalPointerEXT 573 +#define _gloffset_TexCoordPointerEXT 574 +#define _gloffset_VertexPointerEXT 575 +#define _gloffset_PointParameterfEXT 576 +#define _gloffset_PointParameterfvEXT 577 +#define _gloffset_LockArraysEXT 578 +#define _gloffset_UnlockArraysEXT 579 +#define _gloffset_CullParameterdvEXT 580 +#define _gloffset_CullParameterfvEXT 581 +#define _gloffset_SecondaryColor3bEXT 582 +#define _gloffset_SecondaryColor3bvEXT 583 +#define _gloffset_SecondaryColor3dEXT 584 +#define _gloffset_SecondaryColor3dvEXT 585 +#define _gloffset_SecondaryColor3fEXT 586 +#define _gloffset_SecondaryColor3fvEXT 587 +#define _gloffset_SecondaryColor3iEXT 588 +#define _gloffset_SecondaryColor3ivEXT 589 +#define _gloffset_SecondaryColor3sEXT 590 +#define _gloffset_SecondaryColor3svEXT 591 +#define _gloffset_SecondaryColor3ubEXT 592 +#define _gloffset_SecondaryColor3ubvEXT 593 +#define _gloffset_SecondaryColor3uiEXT 594 +#define _gloffset_SecondaryColor3uivEXT 595 +#define _gloffset_SecondaryColor3usEXT 596 +#define _gloffset_SecondaryColor3usvEXT 597 +#define _gloffset_SecondaryColorPointerEXT 598 +#define _gloffset_MultiDrawArraysEXT 599 +#define _gloffset_MultiDrawElementsEXT 600 +#define _gloffset_FogCoordPointerEXT 601 +#define _gloffset_FogCoorddEXT 602 +#define _gloffset_FogCoorddvEXT 603 +#define _gloffset_FogCoordfEXT 604 +#define _gloffset_FogCoordfvEXT 605 +#define _gloffset_PixelTexGenSGIX 606 +#define _gloffset_BlendFuncSeparateEXT 607 +#define _gloffset_FlushVertexArrayRangeNV 608 +#define _gloffset_VertexArrayRangeNV 609 +#define _gloffset_CombinerInputNV 610 +#define _gloffset_CombinerOutputNV 611 +#define _gloffset_CombinerParameterfNV 612 +#define _gloffset_CombinerParameterfvNV 613 +#define _gloffset_CombinerParameteriNV 614 +#define _gloffset_CombinerParameterivNV 615 +#define _gloffset_FinalCombinerInputNV 616 +#define _gloffset_GetCombinerInputParameterfvNV 617 +#define _gloffset_GetCombinerInputParameterivNV 618 +#define _gloffset_GetCombinerOutputParameterfvNV 619 +#define _gloffset_GetCombinerOutputParameterivNV 620 +#define _gloffset_GetFinalCombinerInputParameterfvNV 621 +#define _gloffset_GetFinalCombinerInputParameterivNV 622 +#define _gloffset_ResizeBuffersMESA 623 +#define _gloffset_WindowPos2dMESA 624 +#define _gloffset_WindowPos2dvMESA 625 +#define _gloffset_WindowPos2fMESA 626 +#define _gloffset_WindowPos2fvMESA 627 +#define _gloffset_WindowPos2iMESA 628 +#define _gloffset_WindowPos2ivMESA 629 +#define _gloffset_WindowPos2sMESA 630 +#define _gloffset_WindowPos2svMESA 631 +#define _gloffset_WindowPos3dMESA 632 +#define _gloffset_WindowPos3dvMESA 633 +#define _gloffset_WindowPos3fMESA 634 +#define _gloffset_WindowPos3fvMESA 635 +#define _gloffset_WindowPos3iMESA 636 +#define _gloffset_WindowPos3ivMESA 637 +#define _gloffset_WindowPos3sMESA 638 +#define _gloffset_WindowPos3svMESA 639 +#define _gloffset_WindowPos4dMESA 640 +#define _gloffset_WindowPos4dvMESA 641 +#define _gloffset_WindowPos4fMESA 642 +#define _gloffset_WindowPos4fvMESA 643 +#define _gloffset_WindowPos4iMESA 644 +#define _gloffset_WindowPos4ivMESA 645 +#define _gloffset_WindowPos4sMESA 646 +#define _gloffset_WindowPos4svMESA 647 +#define _gloffset_MultiModeDrawArraysIBM 648 +#define _gloffset_MultiModeDrawElementsIBM 649 +#define _gloffset_DeleteFencesNV 650 +#define _gloffset_FinishFenceNV 651 +#define _gloffset_GenFencesNV 652 +#define _gloffset_GetFenceivNV 653 +#define _gloffset_IsFenceNV 654 +#define _gloffset_SetFenceNV 655 +#define _gloffset_TestFenceNV 656 +#define _gloffset_AreProgramsResidentNV 657 +#define _gloffset_BindProgramNV 658 +#define _gloffset_DeleteProgramsNV 659 +#define _gloffset_ExecuteProgramNV 660 +#define _gloffset_GenProgramsNV 661 +#define _gloffset_GetProgramParameterdvNV 662 +#define _gloffset_GetProgramParameterfvNV 663 +#define _gloffset_GetProgramStringNV 664 +#define _gloffset_GetProgramivNV 665 +#define _gloffset_GetTrackMatrixivNV 666 +#define _gloffset_GetVertexAttribPointervNV 667 +#define _gloffset_GetVertexAttribdvNV 668 +#define _gloffset_GetVertexAttribfvNV 669 +#define _gloffset_GetVertexAttribivNV 670 +#define _gloffset_IsProgramNV 671 +#define _gloffset_LoadProgramNV 672 +#define _gloffset_ProgramParameter4dNV 673 +#define _gloffset_ProgramParameter4dvNV 674 +#define _gloffset_ProgramParameter4fNV 675 +#define _gloffset_ProgramParameter4fvNV 676 +#define _gloffset_ProgramParameters4dvNV 677 +#define _gloffset_ProgramParameters4fvNV 678 +#define _gloffset_RequestResidentProgramsNV 679 +#define _gloffset_TrackMatrixNV 680 +#define _gloffset_VertexAttrib1dNV 681 +#define _gloffset_VertexAttrib1dvNV 682 +#define _gloffset_VertexAttrib1fNV 683 +#define _gloffset_VertexAttrib1fvNV 684 +#define _gloffset_VertexAttrib1sNV 685 +#define _gloffset_VertexAttrib1svNV 686 +#define _gloffset_VertexAttrib2dNV 687 +#define _gloffset_VertexAttrib2dvNV 688 +#define _gloffset_VertexAttrib2fNV 689 +#define _gloffset_VertexAttrib2fvNV 690 +#define _gloffset_VertexAttrib2sNV 691 +#define _gloffset_VertexAttrib2svNV 692 +#define _gloffset_VertexAttrib3dNV 693 +#define _gloffset_VertexAttrib3dvNV 694 +#define _gloffset_VertexAttrib3fNV 695 +#define _gloffset_VertexAttrib3fvNV 696 +#define _gloffset_VertexAttrib3sNV 697 +#define _gloffset_VertexAttrib3svNV 698 +#define _gloffset_VertexAttrib4dNV 699 +#define _gloffset_VertexAttrib4dvNV 700 +#define _gloffset_VertexAttrib4fNV 701 +#define _gloffset_VertexAttrib4fvNV 702 +#define _gloffset_VertexAttrib4sNV 703 +#define _gloffset_VertexAttrib4svNV 704 +#define _gloffset_VertexAttrib4ubNV 705 +#define _gloffset_VertexAttrib4ubvNV 706 +#define _gloffset_VertexAttribPointerNV 707 +#define _gloffset_VertexAttribs1dvNV 708 +#define _gloffset_VertexAttribs1fvNV 709 +#define _gloffset_VertexAttribs1svNV 710 +#define _gloffset_VertexAttribs2dvNV 711 +#define _gloffset_VertexAttribs2fvNV 712 +#define _gloffset_VertexAttribs2svNV 713 +#define _gloffset_VertexAttribs3dvNV 714 +#define _gloffset_VertexAttribs3fvNV 715 +#define _gloffset_VertexAttribs3svNV 716 +#define _gloffset_VertexAttribs4dvNV 717 +#define _gloffset_VertexAttribs4fvNV 718 +#define _gloffset_VertexAttribs4svNV 719 +#define _gloffset_VertexAttribs4ubvNV 720 +#define _gloffset_AlphaFragmentOp1ATI 721 +#define _gloffset_AlphaFragmentOp2ATI 722 +#define _gloffset_AlphaFragmentOp3ATI 723 +#define _gloffset_BeginFragmentShaderATI 724 +#define _gloffset_BindFragmentShaderATI 725 +#define _gloffset_ColorFragmentOp1ATI 726 +#define _gloffset_ColorFragmentOp2ATI 727 +#define _gloffset_ColorFragmentOp3ATI 728 +#define _gloffset_DeleteFragmentShaderATI 729 +#define _gloffset_EndFragmentShaderATI 730 +#define _gloffset_GenFragmentShadersATI 731 +#define _gloffset_PassTexCoordATI 732 +#define _gloffset_SampleMapATI 733 +#define _gloffset_SetFragmentShaderConstantATI 734 +#define _gloffset_PointParameteriNV 735 +#define _gloffset_PointParameterivNV 736 +#define _gloffset_ActiveStencilFaceEXT 737 +#define _gloffset_BindVertexArrayAPPLE 738 +#define _gloffset_DeleteVertexArraysAPPLE 739 +#define _gloffset_GenVertexArraysAPPLE 740 +#define _gloffset_IsVertexArrayAPPLE 741 +#define _gloffset_GetProgramNamedParameterdvNV 742 +#define _gloffset_GetProgramNamedParameterfvNV 743 +#define _gloffset_ProgramNamedParameter4dNV 744 +#define _gloffset_ProgramNamedParameter4dvNV 745 +#define _gloffset_ProgramNamedParameter4fNV 746 +#define _gloffset_ProgramNamedParameter4fvNV 747 +#define _gloffset_DepthBoundsEXT 748 +#define _gloffset_BlendEquationSeparateEXT 749 +#define _gloffset_BindFramebufferEXT 750 +#define _gloffset_BindRenderbufferEXT 751 +#define _gloffset_CheckFramebufferStatusEXT 752 +#define _gloffset_DeleteFramebuffersEXT 753 +#define _gloffset_DeleteRenderbuffersEXT 754 +#define _gloffset_FramebufferRenderbufferEXT 755 +#define _gloffset_FramebufferTexture1DEXT 756 +#define _gloffset_FramebufferTexture2DEXT 757 +#define _gloffset_FramebufferTexture3DEXT 758 +#define _gloffset_GenFramebuffersEXT 759 +#define _gloffset_GenRenderbuffersEXT 760 +#define _gloffset_GenerateMipmapEXT 761 +#define _gloffset_GetFramebufferAttachmentParameterivEXT 762 +#define _gloffset_GetRenderbufferParameterivEXT 763 +#define _gloffset_IsFramebufferEXT 764 +#define _gloffset_IsRenderbufferEXT 765 +#define _gloffset_RenderbufferStorageEXT 766 +#define _gloffset_BlitFramebufferEXT 767 +#define _gloffset_ProgramEnvParameters4fvEXT 768 +#define _gloffset_ProgramLocalParameters4fvEXT 769 +#define _gloffset_GetQueryObjecti64vEXT 770 +#define _gloffset_GetQueryObjectui64vEXT 771 +#define _gloffset_FIRST_DYNAMIC 772 + +#else + +#define _gloffset_AttachShader driDispatchRemapTable[AttachShader_remap_index] +#define _gloffset_CreateProgram driDispatchRemapTable[CreateProgram_remap_index] +#define _gloffset_CreateShader driDispatchRemapTable[CreateShader_remap_index] +#define _gloffset_DeleteProgram driDispatchRemapTable[DeleteProgram_remap_index] +#define _gloffset_DeleteShader driDispatchRemapTable[DeleteShader_remap_index] +#define _gloffset_DetachShader driDispatchRemapTable[DetachShader_remap_index] +#define _gloffset_GetAttachedShaders driDispatchRemapTable[GetAttachedShaders_remap_index] +#define _gloffset_GetProgramInfoLog driDispatchRemapTable[GetProgramInfoLog_remap_index] +#define _gloffset_GetProgramiv driDispatchRemapTable[GetProgramiv_remap_index] +#define _gloffset_GetShaderInfoLog driDispatchRemapTable[GetShaderInfoLog_remap_index] +#define _gloffset_GetShaderiv driDispatchRemapTable[GetShaderiv_remap_index] +#define _gloffset_IsProgram driDispatchRemapTable[IsProgram_remap_index] +#define _gloffset_IsShader driDispatchRemapTable[IsShader_remap_index] +#define _gloffset_StencilFuncSeparate driDispatchRemapTable[StencilFuncSeparate_remap_index] +#define _gloffset_StencilMaskSeparate driDispatchRemapTable[StencilMaskSeparate_remap_index] +#define _gloffset_StencilOpSeparate driDispatchRemapTable[StencilOpSeparate_remap_index] +#define _gloffset_UniformMatrix2x3fv driDispatchRemapTable[UniformMatrix2x3fv_remap_index] +#define _gloffset_UniformMatrix2x4fv driDispatchRemapTable[UniformMatrix2x4fv_remap_index] +#define _gloffset_UniformMatrix3x2fv driDispatchRemapTable[UniformMatrix3x2fv_remap_index] +#define _gloffset_UniformMatrix3x4fv driDispatchRemapTable[UniformMatrix3x4fv_remap_index] +#define _gloffset_UniformMatrix4x2fv driDispatchRemapTable[UniformMatrix4x2fv_remap_index] +#define _gloffset_UniformMatrix4x3fv driDispatchRemapTable[UniformMatrix4x3fv_remap_index] +#define _gloffset_LoadTransposeMatrixdARB driDispatchRemapTable[LoadTransposeMatrixdARB_remap_index] +#define _gloffset_LoadTransposeMatrixfARB driDispatchRemapTable[LoadTransposeMatrixfARB_remap_index] +#define _gloffset_MultTransposeMatrixdARB driDispatchRemapTable[MultTransposeMatrixdARB_remap_index] +#define _gloffset_MultTransposeMatrixfARB driDispatchRemapTable[MultTransposeMatrixfARB_remap_index] +#define _gloffset_SampleCoverageARB driDispatchRemapTable[SampleCoverageARB_remap_index] +#define _gloffset_CompressedTexImage1DARB driDispatchRemapTable[CompressedTexImage1DARB_remap_index] +#define _gloffset_CompressedTexImage2DARB driDispatchRemapTable[CompressedTexImage2DARB_remap_index] +#define _gloffset_CompressedTexImage3DARB driDispatchRemapTable[CompressedTexImage3DARB_remap_index] +#define _gloffset_CompressedTexSubImage1DARB driDispatchRemapTable[CompressedTexSubImage1DARB_remap_index] +#define _gloffset_CompressedTexSubImage2DARB driDispatchRemapTable[CompressedTexSubImage2DARB_remap_index] +#define _gloffset_CompressedTexSubImage3DARB driDispatchRemapTable[CompressedTexSubImage3DARB_remap_index] +#define _gloffset_GetCompressedTexImageARB driDispatchRemapTable[GetCompressedTexImageARB_remap_index] +#define _gloffset_DisableVertexAttribArrayARB driDispatchRemapTable[DisableVertexAttribArrayARB_remap_index] +#define _gloffset_EnableVertexAttribArrayARB driDispatchRemapTable[EnableVertexAttribArrayARB_remap_index] +#define _gloffset_GetProgramEnvParameterdvARB driDispatchRemapTable[GetProgramEnvParameterdvARB_remap_index] +#define _gloffset_GetProgramEnvParameterfvARB driDispatchRemapTable[GetProgramEnvParameterfvARB_remap_index] +#define _gloffset_GetProgramLocalParameterdvARB driDispatchRemapTable[GetProgramLocalParameterdvARB_remap_index] +#define _gloffset_GetProgramLocalParameterfvARB driDispatchRemapTable[GetProgramLocalParameterfvARB_remap_index] +#define _gloffset_GetProgramStringARB driDispatchRemapTable[GetProgramStringARB_remap_index] +#define _gloffset_GetProgramivARB driDispatchRemapTable[GetProgramivARB_remap_index] +#define _gloffset_GetVertexAttribdvARB driDispatchRemapTable[GetVertexAttribdvARB_remap_index] +#define _gloffset_GetVertexAttribfvARB driDispatchRemapTable[GetVertexAttribfvARB_remap_index] +#define _gloffset_GetVertexAttribivARB driDispatchRemapTable[GetVertexAttribivARB_remap_index] +#define _gloffset_ProgramEnvParameter4dARB driDispatchRemapTable[ProgramEnvParameter4dARB_remap_index] +#define _gloffset_ProgramEnvParameter4dvARB driDispatchRemapTable[ProgramEnvParameter4dvARB_remap_index] +#define _gloffset_ProgramEnvParameter4fARB driDispatchRemapTable[ProgramEnvParameter4fARB_remap_index] +#define _gloffset_ProgramEnvParameter4fvARB driDispatchRemapTable[ProgramEnvParameter4fvARB_remap_index] +#define _gloffset_ProgramLocalParameter4dARB driDispatchRemapTable[ProgramLocalParameter4dARB_remap_index] +#define _gloffset_ProgramLocalParameter4dvARB driDispatchRemapTable[ProgramLocalParameter4dvARB_remap_index] +#define _gloffset_ProgramLocalParameter4fARB driDispatchRemapTable[ProgramLocalParameter4fARB_remap_index] +#define _gloffset_ProgramLocalParameter4fvARB driDispatchRemapTable[ProgramLocalParameter4fvARB_remap_index] +#define _gloffset_ProgramStringARB driDispatchRemapTable[ProgramStringARB_remap_index] +#define _gloffset_VertexAttrib1dARB driDispatchRemapTable[VertexAttrib1dARB_remap_index] +#define _gloffset_VertexAttrib1dvARB driDispatchRemapTable[VertexAttrib1dvARB_remap_index] +#define _gloffset_VertexAttrib1fARB driDispatchRemapTable[VertexAttrib1fARB_remap_index] +#define _gloffset_VertexAttrib1fvARB driDispatchRemapTable[VertexAttrib1fvARB_remap_index] +#define _gloffset_VertexAttrib1sARB driDispatchRemapTable[VertexAttrib1sARB_remap_index] +#define _gloffset_VertexAttrib1svARB driDispatchRemapTable[VertexAttrib1svARB_remap_index] +#define _gloffset_VertexAttrib2dARB driDispatchRemapTable[VertexAttrib2dARB_remap_index] +#define _gloffset_VertexAttrib2dvARB driDispatchRemapTable[VertexAttrib2dvARB_remap_index] +#define _gloffset_VertexAttrib2fARB driDispatchRemapTable[VertexAttrib2fARB_remap_index] +#define _gloffset_VertexAttrib2fvARB driDispatchRemapTable[VertexAttrib2fvARB_remap_index] +#define _gloffset_VertexAttrib2sARB driDispatchRemapTable[VertexAttrib2sARB_remap_index] +#define _gloffset_VertexAttrib2svARB driDispatchRemapTable[VertexAttrib2svARB_remap_index] +#define _gloffset_VertexAttrib3dARB driDispatchRemapTable[VertexAttrib3dARB_remap_index] +#define _gloffset_VertexAttrib3dvARB driDispatchRemapTable[VertexAttrib3dvARB_remap_index] +#define _gloffset_VertexAttrib3fARB driDispatchRemapTable[VertexAttrib3fARB_remap_index] +#define _gloffset_VertexAttrib3fvARB driDispatchRemapTable[VertexAttrib3fvARB_remap_index] +#define _gloffset_VertexAttrib3sARB driDispatchRemapTable[VertexAttrib3sARB_remap_index] +#define _gloffset_VertexAttrib3svARB driDispatchRemapTable[VertexAttrib3svARB_remap_index] +#define _gloffset_VertexAttrib4NbvARB driDispatchRemapTable[VertexAttrib4NbvARB_remap_index] +#define _gloffset_VertexAttrib4NivARB driDispatchRemapTable[VertexAttrib4NivARB_remap_index] +#define _gloffset_VertexAttrib4NsvARB driDispatchRemapTable[VertexAttrib4NsvARB_remap_index] +#define _gloffset_VertexAttrib4NubARB driDispatchRemapTable[VertexAttrib4NubARB_remap_index] +#define _gloffset_VertexAttrib4NubvARB driDispatchRemapTable[VertexAttrib4NubvARB_remap_index] +#define _gloffset_VertexAttrib4NuivARB driDispatchRemapTable[VertexAttrib4NuivARB_remap_index] +#define _gloffset_VertexAttrib4NusvARB driDispatchRemapTable[VertexAttrib4NusvARB_remap_index] +#define _gloffset_VertexAttrib4bvARB driDispatchRemapTable[VertexAttrib4bvARB_remap_index] +#define _gloffset_VertexAttrib4dARB driDispatchRemapTable[VertexAttrib4dARB_remap_index] +#define _gloffset_VertexAttrib4dvARB driDispatchRemapTable[VertexAttrib4dvARB_remap_index] +#define _gloffset_VertexAttrib4fARB driDispatchRemapTable[VertexAttrib4fARB_remap_index] +#define _gloffset_VertexAttrib4fvARB driDispatchRemapTable[VertexAttrib4fvARB_remap_index] +#define _gloffset_VertexAttrib4ivARB driDispatchRemapTable[VertexAttrib4ivARB_remap_index] +#define _gloffset_VertexAttrib4sARB driDispatchRemapTable[VertexAttrib4sARB_remap_index] +#define _gloffset_VertexAttrib4svARB driDispatchRemapTable[VertexAttrib4svARB_remap_index] +#define _gloffset_VertexAttrib4ubvARB driDispatchRemapTable[VertexAttrib4ubvARB_remap_index] +#define _gloffset_VertexAttrib4uivARB driDispatchRemapTable[VertexAttrib4uivARB_remap_index] +#define _gloffset_VertexAttrib4usvARB driDispatchRemapTable[VertexAttrib4usvARB_remap_index] +#define _gloffset_VertexAttribPointerARB driDispatchRemapTable[VertexAttribPointerARB_remap_index] +#define _gloffset_BindBufferARB driDispatchRemapTable[BindBufferARB_remap_index] +#define _gloffset_BufferDataARB driDispatchRemapTable[BufferDataARB_remap_index] +#define _gloffset_BufferSubDataARB driDispatchRemapTable[BufferSubDataARB_remap_index] +#define _gloffset_DeleteBuffersARB driDispatchRemapTable[DeleteBuffersARB_remap_index] +#define _gloffset_GenBuffersARB driDispatchRemapTable[GenBuffersARB_remap_index] +#define _gloffset_GetBufferParameterivARB driDispatchRemapTable[GetBufferParameterivARB_remap_index] +#define _gloffset_GetBufferPointervARB driDispatchRemapTable[GetBufferPointervARB_remap_index] +#define _gloffset_GetBufferSubDataARB driDispatchRemapTable[GetBufferSubDataARB_remap_index] +#define _gloffset_IsBufferARB driDispatchRemapTable[IsBufferARB_remap_index] +#define _gloffset_MapBufferARB driDispatchRemapTable[MapBufferARB_remap_index] +#define _gloffset_UnmapBufferARB driDispatchRemapTable[UnmapBufferARB_remap_index] +#define _gloffset_BeginQueryARB driDispatchRemapTable[BeginQueryARB_remap_index] +#define _gloffset_DeleteQueriesARB driDispatchRemapTable[DeleteQueriesARB_remap_index] +#define _gloffset_EndQueryARB driDispatchRemapTable[EndQueryARB_remap_index] +#define _gloffset_GenQueriesARB driDispatchRemapTable[GenQueriesARB_remap_index] +#define _gloffset_GetQueryObjectivARB driDispatchRemapTable[GetQueryObjectivARB_remap_index] +#define _gloffset_GetQueryObjectuivARB driDispatchRemapTable[GetQueryObjectuivARB_remap_index] +#define _gloffset_GetQueryivARB driDispatchRemapTable[GetQueryivARB_remap_index] +#define _gloffset_IsQueryARB driDispatchRemapTable[IsQueryARB_remap_index] +#define _gloffset_AttachObjectARB driDispatchRemapTable[AttachObjectARB_remap_index] +#define _gloffset_CompileShaderARB driDispatchRemapTable[CompileShaderARB_remap_index] +#define _gloffset_CreateProgramObjectARB driDispatchRemapTable[CreateProgramObjectARB_remap_index] +#define _gloffset_CreateShaderObjectARB driDispatchRemapTable[CreateShaderObjectARB_remap_index] +#define _gloffset_DeleteObjectARB driDispatchRemapTable[DeleteObjectARB_remap_index] +#define _gloffset_DetachObjectARB driDispatchRemapTable[DetachObjectARB_remap_index] +#define _gloffset_GetActiveUniformARB driDispatchRemapTable[GetActiveUniformARB_remap_index] +#define _gloffset_GetAttachedObjectsARB driDispatchRemapTable[GetAttachedObjectsARB_remap_index] +#define _gloffset_GetHandleARB driDispatchRemapTable[GetHandleARB_remap_index] +#define _gloffset_GetInfoLogARB driDispatchRemapTable[GetInfoLogARB_remap_index] +#define _gloffset_GetObjectParameterfvARB driDispatchRemapTable[GetObjectParameterfvARB_remap_index] +#define _gloffset_GetObjectParameterivARB driDispatchRemapTable[GetObjectParameterivARB_remap_index] +#define _gloffset_GetShaderSourceARB driDispatchRemapTable[GetShaderSourceARB_remap_index] +#define _gloffset_GetUniformLocationARB driDispatchRemapTable[GetUniformLocationARB_remap_index] +#define _gloffset_GetUniformfvARB driDispatchRemapTable[GetUniformfvARB_remap_index] +#define _gloffset_GetUniformivARB driDispatchRemapTable[GetUniformivARB_remap_index] +#define _gloffset_LinkProgramARB driDispatchRemapTable[LinkProgramARB_remap_index] +#define _gloffset_ShaderSourceARB driDispatchRemapTable[ShaderSourceARB_remap_index] +#define _gloffset_Uniform1fARB driDispatchRemapTable[Uniform1fARB_remap_index] +#define _gloffset_Uniform1fvARB driDispatchRemapTable[Uniform1fvARB_remap_index] +#define _gloffset_Uniform1iARB driDispatchRemapTable[Uniform1iARB_remap_index] +#define _gloffset_Uniform1ivARB driDispatchRemapTable[Uniform1ivARB_remap_index] +#define _gloffset_Uniform2fARB driDispatchRemapTable[Uniform2fARB_remap_index] +#define _gloffset_Uniform2fvARB driDispatchRemapTable[Uniform2fvARB_remap_index] +#define _gloffset_Uniform2iARB driDispatchRemapTable[Uniform2iARB_remap_index] +#define _gloffset_Uniform2ivARB driDispatchRemapTable[Uniform2ivARB_remap_index] +#define _gloffset_Uniform3fARB driDispatchRemapTable[Uniform3fARB_remap_index] +#define _gloffset_Uniform3fvARB driDispatchRemapTable[Uniform3fvARB_remap_index] +#define _gloffset_Uniform3iARB driDispatchRemapTable[Uniform3iARB_remap_index] +#define _gloffset_Uniform3ivARB driDispatchRemapTable[Uniform3ivARB_remap_index] +#define _gloffset_Uniform4fARB driDispatchRemapTable[Uniform4fARB_remap_index] +#define _gloffset_Uniform4fvARB driDispatchRemapTable[Uniform4fvARB_remap_index] +#define _gloffset_Uniform4iARB driDispatchRemapTable[Uniform4iARB_remap_index] +#define _gloffset_Uniform4ivARB driDispatchRemapTable[Uniform4ivARB_remap_index] +#define _gloffset_UniformMatrix2fvARB driDispatchRemapTable[UniformMatrix2fvARB_remap_index] +#define _gloffset_UniformMatrix3fvARB driDispatchRemapTable[UniformMatrix3fvARB_remap_index] +#define _gloffset_UniformMatrix4fvARB driDispatchRemapTable[UniformMatrix4fvARB_remap_index] +#define _gloffset_UseProgramObjectARB driDispatchRemapTable[UseProgramObjectARB_remap_index] +#define _gloffset_ValidateProgramARB driDispatchRemapTable[ValidateProgramARB_remap_index] +#define _gloffset_BindAttribLocationARB driDispatchRemapTable[BindAttribLocationARB_remap_index] +#define _gloffset_GetActiveAttribARB driDispatchRemapTable[GetActiveAttribARB_remap_index] +#define _gloffset_GetAttribLocationARB driDispatchRemapTable[GetAttribLocationARB_remap_index] +#define _gloffset_DrawBuffersARB driDispatchRemapTable[DrawBuffersARB_remap_index] +#define _gloffset_PolygonOffsetEXT driDispatchRemapTable[PolygonOffsetEXT_remap_index] +#define _gloffset_GetPixelTexGenParameterfvSGIS driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index] +#define _gloffset_GetPixelTexGenParameterivSGIS driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index] +#define _gloffset_PixelTexGenParameterfSGIS driDispatchRemapTable[PixelTexGenParameterfSGIS_remap_index] +#define _gloffset_PixelTexGenParameterfvSGIS driDispatchRemapTable[PixelTexGenParameterfvSGIS_remap_index] +#define _gloffset_PixelTexGenParameteriSGIS driDispatchRemapTable[PixelTexGenParameteriSGIS_remap_index] +#define _gloffset_PixelTexGenParameterivSGIS driDispatchRemapTable[PixelTexGenParameterivSGIS_remap_index] +#define _gloffset_SampleMaskSGIS driDispatchRemapTable[SampleMaskSGIS_remap_index] +#define _gloffset_SamplePatternSGIS driDispatchRemapTable[SamplePatternSGIS_remap_index] +#define _gloffset_ColorPointerEXT driDispatchRemapTable[ColorPointerEXT_remap_index] +#define _gloffset_EdgeFlagPointerEXT driDispatchRemapTable[EdgeFlagPointerEXT_remap_index] +#define _gloffset_IndexPointerEXT driDispatchRemapTable[IndexPointerEXT_remap_index] +#define _gloffset_NormalPointerEXT driDispatchRemapTable[NormalPointerEXT_remap_index] +#define _gloffset_TexCoordPointerEXT driDispatchRemapTable[TexCoordPointerEXT_remap_index] +#define _gloffset_VertexPointerEXT driDispatchRemapTable[VertexPointerEXT_remap_index] +#define _gloffset_PointParameterfEXT driDispatchRemapTable[PointParameterfEXT_remap_index] +#define _gloffset_PointParameterfvEXT driDispatchRemapTable[PointParameterfvEXT_remap_index] +#define _gloffset_LockArraysEXT driDispatchRemapTable[LockArraysEXT_remap_index] +#define _gloffset_UnlockArraysEXT driDispatchRemapTable[UnlockArraysEXT_remap_index] +#define _gloffset_CullParameterdvEXT driDispatchRemapTable[CullParameterdvEXT_remap_index] +#define _gloffset_CullParameterfvEXT driDispatchRemapTable[CullParameterfvEXT_remap_index] +#define _gloffset_SecondaryColor3bEXT driDispatchRemapTable[SecondaryColor3bEXT_remap_index] +#define _gloffset_SecondaryColor3bvEXT driDispatchRemapTable[SecondaryColor3bvEXT_remap_index] +#define _gloffset_SecondaryColor3dEXT driDispatchRemapTable[SecondaryColor3dEXT_remap_index] +#define _gloffset_SecondaryColor3dvEXT driDispatchRemapTable[SecondaryColor3dvEXT_remap_index] +#define _gloffset_SecondaryColor3fEXT driDispatchRemapTable[SecondaryColor3fEXT_remap_index] +#define _gloffset_SecondaryColor3fvEXT driDispatchRemapTable[SecondaryColor3fvEXT_remap_index] +#define _gloffset_SecondaryColor3iEXT driDispatchRemapTable[SecondaryColor3iEXT_remap_index] +#define _gloffset_SecondaryColor3ivEXT driDispatchRemapTable[SecondaryColor3ivEXT_remap_index] +#define _gloffset_SecondaryColor3sEXT driDispatchRemapTable[SecondaryColor3sEXT_remap_index] +#define _gloffset_SecondaryColor3svEXT driDispatchRemapTable[SecondaryColor3svEXT_remap_index] +#define _gloffset_SecondaryColor3ubEXT driDispatchRemapTable[SecondaryColor3ubEXT_remap_index] +#define _gloffset_SecondaryColor3ubvEXT driDispatchRemapTable[SecondaryColor3ubvEXT_remap_index] +#define _gloffset_SecondaryColor3uiEXT driDispatchRemapTable[SecondaryColor3uiEXT_remap_index] +#define _gloffset_SecondaryColor3uivEXT driDispatchRemapTable[SecondaryColor3uivEXT_remap_index] +#define _gloffset_SecondaryColor3usEXT driDispatchRemapTable[SecondaryColor3usEXT_remap_index] +#define _gloffset_SecondaryColor3usvEXT driDispatchRemapTable[SecondaryColor3usvEXT_remap_index] +#define _gloffset_SecondaryColorPointerEXT driDispatchRemapTable[SecondaryColorPointerEXT_remap_index] +#define _gloffset_MultiDrawArraysEXT driDispatchRemapTable[MultiDrawArraysEXT_remap_index] +#define _gloffset_MultiDrawElementsEXT driDispatchRemapTable[MultiDrawElementsEXT_remap_index] +#define _gloffset_FogCoordPointerEXT driDispatchRemapTable[FogCoordPointerEXT_remap_index] +#define _gloffset_FogCoorddEXT driDispatchRemapTable[FogCoorddEXT_remap_index] +#define _gloffset_FogCoorddvEXT driDispatchRemapTable[FogCoorddvEXT_remap_index] +#define _gloffset_FogCoordfEXT driDispatchRemapTable[FogCoordfEXT_remap_index] +#define _gloffset_FogCoordfvEXT driDispatchRemapTable[FogCoordfvEXT_remap_index] +#define _gloffset_PixelTexGenSGIX driDispatchRemapTable[PixelTexGenSGIX_remap_index] +#define _gloffset_BlendFuncSeparateEXT driDispatchRemapTable[BlendFuncSeparateEXT_remap_index] +#define _gloffset_FlushVertexArrayRangeNV driDispatchRemapTable[FlushVertexArrayRangeNV_remap_index] +#define _gloffset_VertexArrayRangeNV driDispatchRemapTable[VertexArrayRangeNV_remap_index] +#define _gloffset_CombinerInputNV driDispatchRemapTable[CombinerInputNV_remap_index] +#define _gloffset_CombinerOutputNV driDispatchRemapTable[CombinerOutputNV_remap_index] +#define _gloffset_CombinerParameterfNV driDispatchRemapTable[CombinerParameterfNV_remap_index] +#define _gloffset_CombinerParameterfvNV driDispatchRemapTable[CombinerParameterfvNV_remap_index] +#define _gloffset_CombinerParameteriNV driDispatchRemapTable[CombinerParameteriNV_remap_index] +#define _gloffset_CombinerParameterivNV driDispatchRemapTable[CombinerParameterivNV_remap_index] +#define _gloffset_FinalCombinerInputNV driDispatchRemapTable[FinalCombinerInputNV_remap_index] +#define _gloffset_GetCombinerInputParameterfvNV driDispatchRemapTable[GetCombinerInputParameterfvNV_remap_index] +#define _gloffset_GetCombinerInputParameterivNV driDispatchRemapTable[GetCombinerInputParameterivNV_remap_index] +#define _gloffset_GetCombinerOutputParameterfvNV driDispatchRemapTable[GetCombinerOutputParameterfvNV_remap_index] +#define _gloffset_GetCombinerOutputParameterivNV driDispatchRemapTable[GetCombinerOutputParameterivNV_remap_index] +#define _gloffset_GetFinalCombinerInputParameterfvNV driDispatchRemapTable[GetFinalCombinerInputParameterfvNV_remap_index] +#define _gloffset_GetFinalCombinerInputParameterivNV driDispatchRemapTable[GetFinalCombinerInputParameterivNV_remap_index] +#define _gloffset_ResizeBuffersMESA driDispatchRemapTable[ResizeBuffersMESA_remap_index] +#define _gloffset_WindowPos2dMESA driDispatchRemapTable[WindowPos2dMESA_remap_index] +#define _gloffset_WindowPos2dvMESA driDispatchRemapTable[WindowPos2dvMESA_remap_index] +#define _gloffset_WindowPos2fMESA driDispatchRemapTable[WindowPos2fMESA_remap_index] +#define _gloffset_WindowPos2fvMESA driDispatchRemapTable[WindowPos2fvMESA_remap_index] +#define _gloffset_WindowPos2iMESA driDispatchRemapTable[WindowPos2iMESA_remap_index] +#define _gloffset_WindowPos2ivMESA driDispatchRemapTable[WindowPos2ivMESA_remap_index] +#define _gloffset_WindowPos2sMESA driDispatchRemapTable[WindowPos2sMESA_remap_index] +#define _gloffset_WindowPos2svMESA driDispatchRemapTable[WindowPos2svMESA_remap_index] +#define _gloffset_WindowPos3dMESA driDispatchRemapTable[WindowPos3dMESA_remap_index] +#define _gloffset_WindowPos3dvMESA driDispatchRemapTable[WindowPos3dvMESA_remap_index] +#define _gloffset_WindowPos3fMESA driDispatchRemapTable[WindowPos3fMESA_remap_index] +#define _gloffset_WindowPos3fvMESA driDispatchRemapTable[WindowPos3fvMESA_remap_index] +#define _gloffset_WindowPos3iMESA driDispatchRemapTable[WindowPos3iMESA_remap_index] +#define _gloffset_WindowPos3ivMESA driDispatchRemapTable[WindowPos3ivMESA_remap_index] +#define _gloffset_WindowPos3sMESA driDispatchRemapTable[WindowPos3sMESA_remap_index] +#define _gloffset_WindowPos3svMESA driDispatchRemapTable[WindowPos3svMESA_remap_index] +#define _gloffset_WindowPos4dMESA driDispatchRemapTable[WindowPos4dMESA_remap_index] +#define _gloffset_WindowPos4dvMESA driDispatchRemapTable[WindowPos4dvMESA_remap_index] +#define _gloffset_WindowPos4fMESA driDispatchRemapTable[WindowPos4fMESA_remap_index] +#define _gloffset_WindowPos4fvMESA driDispatchRemapTable[WindowPos4fvMESA_remap_index] +#define _gloffset_WindowPos4iMESA driDispatchRemapTable[WindowPos4iMESA_remap_index] +#define _gloffset_WindowPos4ivMESA driDispatchRemapTable[WindowPos4ivMESA_remap_index] +#define _gloffset_WindowPos4sMESA driDispatchRemapTable[WindowPos4sMESA_remap_index] +#define _gloffset_WindowPos4svMESA driDispatchRemapTable[WindowPos4svMESA_remap_index] +#define _gloffset_MultiModeDrawArraysIBM driDispatchRemapTable[MultiModeDrawArraysIBM_remap_index] +#define _gloffset_MultiModeDrawElementsIBM driDispatchRemapTable[MultiModeDrawElementsIBM_remap_index] +#define _gloffset_DeleteFencesNV driDispatchRemapTable[DeleteFencesNV_remap_index] +#define _gloffset_FinishFenceNV driDispatchRemapTable[FinishFenceNV_remap_index] +#define _gloffset_GenFencesNV driDispatchRemapTable[GenFencesNV_remap_index] +#define _gloffset_GetFenceivNV driDispatchRemapTable[GetFenceivNV_remap_index] +#define _gloffset_IsFenceNV driDispatchRemapTable[IsFenceNV_remap_index] +#define _gloffset_SetFenceNV driDispatchRemapTable[SetFenceNV_remap_index] +#define _gloffset_TestFenceNV driDispatchRemapTable[TestFenceNV_remap_index] +#define _gloffset_AreProgramsResidentNV driDispatchRemapTable[AreProgramsResidentNV_remap_index] +#define _gloffset_BindProgramNV driDispatchRemapTable[BindProgramNV_remap_index] +#define _gloffset_DeleteProgramsNV driDispatchRemapTable[DeleteProgramsNV_remap_index] +#define _gloffset_ExecuteProgramNV driDispatchRemapTable[ExecuteProgramNV_remap_index] +#define _gloffset_GenProgramsNV driDispatchRemapTable[GenProgramsNV_remap_index] +#define _gloffset_GetProgramParameterdvNV driDispatchRemapTable[GetProgramParameterdvNV_remap_index] +#define _gloffset_GetProgramParameterfvNV driDispatchRemapTable[GetProgramParameterfvNV_remap_index] +#define _gloffset_GetProgramStringNV driDispatchRemapTable[GetProgramStringNV_remap_index] +#define _gloffset_GetProgramivNV driDispatchRemapTable[GetProgramivNV_remap_index] +#define _gloffset_GetTrackMatrixivNV driDispatchRemapTable[GetTrackMatrixivNV_remap_index] +#define _gloffset_GetVertexAttribPointervNV driDispatchRemapTable[GetVertexAttribPointervNV_remap_index] +#define _gloffset_GetVertexAttribdvNV driDispatchRemapTable[GetVertexAttribdvNV_remap_index] +#define _gloffset_GetVertexAttribfvNV driDispatchRemapTable[GetVertexAttribfvNV_remap_index] +#define _gloffset_GetVertexAttribivNV driDispatchRemapTable[GetVertexAttribivNV_remap_index] +#define _gloffset_IsProgramNV driDispatchRemapTable[IsProgramNV_remap_index] +#define _gloffset_LoadProgramNV driDispatchRemapTable[LoadProgramNV_remap_index] +#define _gloffset_ProgramParameter4dNV driDispatchRemapTable[ProgramParameter4dNV_remap_index] +#define _gloffset_ProgramParameter4dvNV driDispatchRemapTable[ProgramParameter4dvNV_remap_index] +#define _gloffset_ProgramParameter4fNV driDispatchRemapTable[ProgramParameter4fNV_remap_index] +#define _gloffset_ProgramParameter4fvNV driDispatchRemapTable[ProgramParameter4fvNV_remap_index] +#define _gloffset_ProgramParameters4dvNV driDispatchRemapTable[ProgramParameters4dvNV_remap_index] +#define _gloffset_ProgramParameters4fvNV driDispatchRemapTable[ProgramParameters4fvNV_remap_index] +#define _gloffset_RequestResidentProgramsNV driDispatchRemapTable[RequestResidentProgramsNV_remap_index] +#define _gloffset_TrackMatrixNV driDispatchRemapTable[TrackMatrixNV_remap_index] +#define _gloffset_VertexAttrib1dNV driDispatchRemapTable[VertexAttrib1dNV_remap_index] +#define _gloffset_VertexAttrib1dvNV driDispatchRemapTable[VertexAttrib1dvNV_remap_index] +#define _gloffset_VertexAttrib1fNV driDispatchRemapTable[VertexAttrib1fNV_remap_index] +#define _gloffset_VertexAttrib1fvNV driDispatchRemapTable[VertexAttrib1fvNV_remap_index] +#define _gloffset_VertexAttrib1sNV driDispatchRemapTable[VertexAttrib1sNV_remap_index] +#define _gloffset_VertexAttrib1svNV driDispatchRemapTable[VertexAttrib1svNV_remap_index] +#define _gloffset_VertexAttrib2dNV driDispatchRemapTable[VertexAttrib2dNV_remap_index] +#define _gloffset_VertexAttrib2dvNV driDispatchRemapTable[VertexAttrib2dvNV_remap_index] +#define _gloffset_VertexAttrib2fNV driDispatchRemapTable[VertexAttrib2fNV_remap_index] +#define _gloffset_VertexAttrib2fvNV driDispatchRemapTable[VertexAttrib2fvNV_remap_index] +#define _gloffset_VertexAttrib2sNV driDispatchRemapTable[VertexAttrib2sNV_remap_index] +#define _gloffset_VertexAttrib2svNV driDispatchRemapTable[VertexAttrib2svNV_remap_index] +#define _gloffset_VertexAttrib3dNV driDispatchRemapTable[VertexAttrib3dNV_remap_index] +#define _gloffset_VertexAttrib3dvNV driDispatchRemapTable[VertexAttrib3dvNV_remap_index] +#define _gloffset_VertexAttrib3fNV driDispatchRemapTable[VertexAttrib3fNV_remap_index] +#define _gloffset_VertexAttrib3fvNV driDispatchRemapTable[VertexAttrib3fvNV_remap_index] +#define _gloffset_VertexAttrib3sNV driDispatchRemapTable[VertexAttrib3sNV_remap_index] +#define _gloffset_VertexAttrib3svNV driDispatchRemapTable[VertexAttrib3svNV_remap_index] +#define _gloffset_VertexAttrib4dNV driDispatchRemapTable[VertexAttrib4dNV_remap_index] +#define _gloffset_VertexAttrib4dvNV driDispatchRemapTable[VertexAttrib4dvNV_remap_index] +#define _gloffset_VertexAttrib4fNV driDispatchRemapTable[VertexAttrib4fNV_remap_index] +#define _gloffset_VertexAttrib4fvNV driDispatchRemapTable[VertexAttrib4fvNV_remap_index] +#define _gloffset_VertexAttrib4sNV driDispatchRemapTable[VertexAttrib4sNV_remap_index] +#define _gloffset_VertexAttrib4svNV driDispatchRemapTable[VertexAttrib4svNV_remap_index] +#define _gloffset_VertexAttrib4ubNV driDispatchRemapTable[VertexAttrib4ubNV_remap_index] +#define _gloffset_VertexAttrib4ubvNV driDispatchRemapTable[VertexAttrib4ubvNV_remap_index] +#define _gloffset_VertexAttribPointerNV driDispatchRemapTable[VertexAttribPointerNV_remap_index] +#define _gloffset_VertexAttribs1dvNV driDispatchRemapTable[VertexAttribs1dvNV_remap_index] +#define _gloffset_VertexAttribs1fvNV driDispatchRemapTable[VertexAttribs1fvNV_remap_index] +#define _gloffset_VertexAttribs1svNV driDispatchRemapTable[VertexAttribs1svNV_remap_index] +#define _gloffset_VertexAttribs2dvNV driDispatchRemapTable[VertexAttribs2dvNV_remap_index] +#define _gloffset_VertexAttribs2fvNV driDispatchRemapTable[VertexAttribs2fvNV_remap_index] +#define _gloffset_VertexAttribs2svNV driDispatchRemapTable[VertexAttribs2svNV_remap_index] +#define _gloffset_VertexAttribs3dvNV driDispatchRemapTable[VertexAttribs3dvNV_remap_index] +#define _gloffset_VertexAttribs3fvNV driDispatchRemapTable[VertexAttribs3fvNV_remap_index] +#define _gloffset_VertexAttribs3svNV driDispatchRemapTable[VertexAttribs3svNV_remap_index] +#define _gloffset_VertexAttribs4dvNV driDispatchRemapTable[VertexAttribs4dvNV_remap_index] +#define _gloffset_VertexAttribs4fvNV driDispatchRemapTable[VertexAttribs4fvNV_remap_index] +#define _gloffset_VertexAttribs4svNV driDispatchRemapTable[VertexAttribs4svNV_remap_index] +#define _gloffset_VertexAttribs4ubvNV driDispatchRemapTable[VertexAttribs4ubvNV_remap_index] +#define _gloffset_AlphaFragmentOp1ATI driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index] +#define _gloffset_AlphaFragmentOp2ATI driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index] +#define _gloffset_AlphaFragmentOp3ATI driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index] +#define _gloffset_BeginFragmentShaderATI driDispatchRemapTable[BeginFragmentShaderATI_remap_index] +#define _gloffset_BindFragmentShaderATI driDispatchRemapTable[BindFragmentShaderATI_remap_index] +#define _gloffset_ColorFragmentOp1ATI driDispatchRemapTable[ColorFragmentOp1ATI_remap_index] +#define _gloffset_ColorFragmentOp2ATI driDispatchRemapTable[ColorFragmentOp2ATI_remap_index] +#define _gloffset_ColorFragmentOp3ATI driDispatchRemapTable[ColorFragmentOp3ATI_remap_index] +#define _gloffset_DeleteFragmentShaderATI driDispatchRemapTable[DeleteFragmentShaderATI_remap_index] +#define _gloffset_EndFragmentShaderATI driDispatchRemapTable[EndFragmentShaderATI_remap_index] +#define _gloffset_GenFragmentShadersATI driDispatchRemapTable[GenFragmentShadersATI_remap_index] +#define _gloffset_PassTexCoordATI driDispatchRemapTable[PassTexCoordATI_remap_index] +#define _gloffset_SampleMapATI driDispatchRemapTable[SampleMapATI_remap_index] +#define _gloffset_SetFragmentShaderConstantATI driDispatchRemapTable[SetFragmentShaderConstantATI_remap_index] +#define _gloffset_PointParameteriNV driDispatchRemapTable[PointParameteriNV_remap_index] +#define _gloffset_PointParameterivNV driDispatchRemapTable[PointParameterivNV_remap_index] +#define _gloffset_ActiveStencilFaceEXT driDispatchRemapTable[ActiveStencilFaceEXT_remap_index] +#define _gloffset_BindVertexArrayAPPLE driDispatchRemapTable[BindVertexArrayAPPLE_remap_index] +#define _gloffset_DeleteVertexArraysAPPLE driDispatchRemapTable[DeleteVertexArraysAPPLE_remap_index] +#define _gloffset_GenVertexArraysAPPLE driDispatchRemapTable[GenVertexArraysAPPLE_remap_index] +#define _gloffset_IsVertexArrayAPPLE driDispatchRemapTable[IsVertexArrayAPPLE_remap_index] +#define _gloffset_GetProgramNamedParameterdvNV driDispatchRemapTable[GetProgramNamedParameterdvNV_remap_index] +#define _gloffset_GetProgramNamedParameterfvNV driDispatchRemapTable[GetProgramNamedParameterfvNV_remap_index] +#define _gloffset_ProgramNamedParameter4dNV driDispatchRemapTable[ProgramNamedParameter4dNV_remap_index] +#define _gloffset_ProgramNamedParameter4dvNV driDispatchRemapTable[ProgramNamedParameter4dvNV_remap_index] +#define _gloffset_ProgramNamedParameter4fNV driDispatchRemapTable[ProgramNamedParameter4fNV_remap_index] +#define _gloffset_ProgramNamedParameter4fvNV driDispatchRemapTable[ProgramNamedParameter4fvNV_remap_index] +#define _gloffset_DepthBoundsEXT driDispatchRemapTable[DepthBoundsEXT_remap_index] +#define _gloffset_BlendEquationSeparateEXT driDispatchRemapTable[BlendEquationSeparateEXT_remap_index] +#define _gloffset_BindFramebufferEXT driDispatchRemapTable[BindFramebufferEXT_remap_index] +#define _gloffset_BindRenderbufferEXT driDispatchRemapTable[BindRenderbufferEXT_remap_index] +#define _gloffset_CheckFramebufferStatusEXT driDispatchRemapTable[CheckFramebufferStatusEXT_remap_index] +#define _gloffset_DeleteFramebuffersEXT driDispatchRemapTable[DeleteFramebuffersEXT_remap_index] +#define _gloffset_DeleteRenderbuffersEXT driDispatchRemapTable[DeleteRenderbuffersEXT_remap_index] +#define _gloffset_FramebufferRenderbufferEXT driDispatchRemapTable[FramebufferRenderbufferEXT_remap_index] +#define _gloffset_FramebufferTexture1DEXT driDispatchRemapTable[FramebufferTexture1DEXT_remap_index] +#define _gloffset_FramebufferTexture2DEXT driDispatchRemapTable[FramebufferTexture2DEXT_remap_index] +#define _gloffset_FramebufferTexture3DEXT driDispatchRemapTable[FramebufferTexture3DEXT_remap_index] +#define _gloffset_GenFramebuffersEXT driDispatchRemapTable[GenFramebuffersEXT_remap_index] +#define _gloffset_GenRenderbuffersEXT driDispatchRemapTable[GenRenderbuffersEXT_remap_index] +#define _gloffset_GenerateMipmapEXT driDispatchRemapTable[GenerateMipmapEXT_remap_index] +#define _gloffset_GetFramebufferAttachmentParameterivEXT driDispatchRemapTable[GetFramebufferAttachmentParameterivEXT_remap_index] +#define _gloffset_GetRenderbufferParameterivEXT driDispatchRemapTable[GetRenderbufferParameterivEXT_remap_index] +#define _gloffset_IsFramebufferEXT driDispatchRemapTable[IsFramebufferEXT_remap_index] +#define _gloffset_IsRenderbufferEXT driDispatchRemapTable[IsRenderbufferEXT_remap_index] +#define _gloffset_RenderbufferStorageEXT driDispatchRemapTable[RenderbufferStorageEXT_remap_index] +#define _gloffset_BlitFramebufferEXT driDispatchRemapTable[BlitFramebufferEXT_remap_index] +#define _gloffset_ProgramEnvParameters4fvEXT driDispatchRemapTable[ProgramEnvParameters4fvEXT_remap_index] +#define _gloffset_ProgramLocalParameters4fvEXT driDispatchRemapTable[ProgramLocalParameters4fvEXT_remap_index] +#define _gloffset_GetQueryObjecti64vEXT driDispatchRemapTable[GetQueryObjecti64vEXT_remap_index] +#define _gloffset_GetQueryObjectui64vEXT driDispatchRemapTable[GetQueryObjectui64vEXT_remap_index] + +#endif /* !defined(IN_DRI_DRIVER) */ + +#endif /* !defined( _GLAPI_OFFSETS_H_ ) */ diff --git a/src/kits/opengl/mesa/glapi/glapitable.h b/src/kits/opengl/mesa/glapi/glapitable.h index cc63407a40..026af32af8 100644 --- a/src/kits/opengl/mesa/glapi/glapitable.h +++ b/src/kits/opengl/mesa/glapi/glapitable.h @@ -1,4 +1,4 @@ -/* DO NOT EDIT - This file generated automatically by a script */ +/* DO NOT EDIT - This file generated automatically by gl_table.py (from Mesa) script */ /* * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. @@ -26,13 +26,15 @@ * SOFTWARE. */ -#ifndef _GLAPI_TABLE_H_ -#define _GLAPI_TABLE_H_ +#if !defined( _GLAPI_TABLE_H_ ) +# define _GLAPI_TABLE_H_ #ifndef GLAPIENTRYP #define GLAPIENTRYP #endif +typedef void (*_glapi_proc)(void); /* generic function pointer */ + struct _glapi_table { void (GLAPIENTRYP NewList)(GLuint list, GLenum mode); /* 0 */ @@ -443,394 +445,370 @@ struct _glapi_table void (GLAPIENTRYP MultiTexCoord4ivARB)(GLenum target, const GLint * v); /* 405 */ void (GLAPIENTRYP MultiTexCoord4sARB)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); /* 406 */ void (GLAPIENTRYP MultiTexCoord4svARB)(GLenum target, const GLshort * v); /* 407 */ - void (GLAPIENTRYP LoadTransposeMatrixfARB)(const GLfloat * m); /* 408 */ - void (GLAPIENTRYP LoadTransposeMatrixdARB)(const GLdouble * m); /* 409 */ - void (GLAPIENTRYP MultTransposeMatrixfARB)(const GLfloat * m); /* 410 */ - void (GLAPIENTRYP MultTransposeMatrixdARB)(const GLdouble * m); /* 411 */ - void (GLAPIENTRYP SampleCoverageARB)(GLclampf value, GLboolean invert); /* 412 */ - void (GLAPIENTRYP DrawBuffersARB)(GLsizei n, const GLenum * bufs); /* 413 */ - void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 414 */ - void (GLAPIENTRYP GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights); /* 415 */ - void (GLAPIENTRYP TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); /* 416 */ - void (GLAPIENTRYP GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 417 */ - void (GLAPIENTRYP GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 418 */ - void (GLAPIENTRYP GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 419 */ - void (GLAPIENTRYP GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 420 */ - void (GLAPIENTRYP GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 421 */ - void (GLAPIENTRYP GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 422 */ - void (GLAPIENTRYP GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image); /* 423 */ - void (GLAPIENTRYP GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 424 */ - void (GLAPIENTRYP GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 425 */ - void (GLAPIENTRYP GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); /* 426 */ - void (GLAPIENTRYP GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table); /* 427 */ - void (GLAPIENTRYP GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params); /* 428 */ - void (GLAPIENTRYP GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params); /* 429 */ - void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 430 */ - void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 431 */ - void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 432 */ - void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 433 */ - void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 434 */ - void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 435 */ - void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 436 */ - void (GLAPIENTRYP TexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 437 */ - void (GLAPIENTRYP TexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels); /* 438 */ - GLboolean (GLAPIENTRYP AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences); /* 439 */ - void (GLAPIENTRYP GenTexturesEXT)(GLsizei n, GLuint * textures); /* 440 */ - GLboolean (GLAPIENTRYP IsTextureEXT)(GLuint texture); /* 441 */ - void (GLAPIENTRYP DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); /* 442 */ - void (GLAPIENTRYP GetDetailTexFuncSGIS)(GLenum target, GLfloat * points); /* 443 */ - void (GLAPIENTRYP SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); /* 444 */ - void (GLAPIENTRYP GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points); /* 445 */ - void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 446 */ - void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 447 */ - void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 448 */ - void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 449 */ - void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 450 */ - void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 451 */ - void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 452 */ - void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 453 */ - void (GLAPIENTRYP SpriteParameterfSGIX)(GLenum pname, GLfloat param); /* 454 */ - void (GLAPIENTRYP SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params); /* 455 */ - void (GLAPIENTRYP SpriteParameteriSGIX)(GLenum pname, GLint param); /* 456 */ - void (GLAPIENTRYP SpriteParameterivSGIX)(GLenum pname, const GLint * params); /* 457 */ - void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 458 */ - void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 459 */ - GLint (GLAPIENTRYP GetInstrumentsSGIX)(void); /* 460 */ - void (GLAPIENTRYP InstrumentsBufferSGIX)(GLsizei size, GLint * buffer); /* 461 */ - GLint (GLAPIENTRYP PollInstrumentsSGIX)(GLint * marker_p); /* 462 */ - void (GLAPIENTRYP ReadInstrumentsSGIX)(GLint marker); /* 463 */ - void (GLAPIENTRYP StartInstrumentsSGIX)(void); /* 464 */ - void (GLAPIENTRYP StopInstrumentsSGIX)(GLint marker); /* 465 */ - void (GLAPIENTRYP FrameZoomSGIX)(GLint factor); /* 466 */ - void (GLAPIENTRYP TagSampleBufferSGIX)(void); /* 467 */ - void (GLAPIENTRYP ReferencePlaneSGIX)(const GLdouble * equation); /* 468 */ - void (GLAPIENTRYP FlushRasterSGIX)(void); /* 469 */ - void (GLAPIENTRYP GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params); /* 470 */ - void (GLAPIENTRYP GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params); /* 471 */ - void (GLAPIENTRYP ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param); /* 472 */ - void (GLAPIENTRYP ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params); /* 473 */ - void (GLAPIENTRYP ListParameteriSGIX)(GLuint list, GLenum pname, GLint param); /* 474 */ - void (GLAPIENTRYP ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params); /* 475 */ - void (GLAPIENTRYP FragmentColorMaterialSGIX)(GLenum face, GLenum mode); /* 476 */ - void (GLAPIENTRYP FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param); /* 477 */ - void (GLAPIENTRYP FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params); /* 478 */ - void (GLAPIENTRYP FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param); /* 479 */ - void (GLAPIENTRYP FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params); /* 480 */ - void (GLAPIENTRYP FragmentLightModelfSGIX)(GLenum pname, GLfloat param); /* 481 */ - void (GLAPIENTRYP FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params); /* 482 */ - void (GLAPIENTRYP FragmentLightModeliSGIX)(GLenum pname, GLint param); /* 483 */ - void (GLAPIENTRYP FragmentLightModelivSGIX)(GLenum pname, const GLint * params); /* 484 */ - void (GLAPIENTRYP FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param); /* 485 */ - void (GLAPIENTRYP FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params); /* 486 */ - void (GLAPIENTRYP FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param); /* 487 */ - void (GLAPIENTRYP FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params); /* 488 */ - void (GLAPIENTRYP GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params); /* 489 */ - void (GLAPIENTRYP GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params); /* 490 */ - void (GLAPIENTRYP GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params); /* 491 */ - void (GLAPIENTRYP GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params); /* 492 */ - void (GLAPIENTRYP LightEnviSGIX)(GLenum pname, GLint param); /* 493 */ - void (GLAPIENTRYP VertexWeightfEXT)(GLfloat weight); /* 494 */ - void (GLAPIENTRYP VertexWeightfvEXT)(const GLfloat * weight); /* 495 */ - void (GLAPIENTRYP VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 496 */ - void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 497 */ - void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 498 */ - void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 499 */ - void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 500 */ - void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 501 */ - void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 502 */ - void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 503 */ - void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 504 */ - void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 505 */ - void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 506 */ - void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 507 */ - void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 508 */ - void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 509 */ - void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 510 */ - void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 511 */ - void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 512 */ - void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 513 */ - void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 514 */ - void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 515 */ - void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 516 */ - void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 517 */ - void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 518 */ - void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 519 */ - void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 520 */ - void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 521 */ - void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 522 */ - void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 523 */ - void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 524 */ - void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 525 */ - void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 526 */ - void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 527 */ - void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 528 */ - void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 529 */ - void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 530 */ - void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 531 */ - void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 532 */ - void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 533 */ - void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 534 */ - void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 535 */ - void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 536 */ - void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 537 */ - void (GLAPIENTRYP IndexMaterialEXT)(GLenum face, GLenum mode); /* 538 */ - void (GLAPIENTRYP IndexFuncEXT)(GLenum func, GLclampf ref); /* 539 */ - void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 540 */ - void (GLAPIENTRYP UnlockArraysEXT)(void); /* 541 */ - void (GLAPIENTRYP CullParameterdvEXT)(GLenum pname, GLdouble * params); /* 542 */ - void (GLAPIENTRYP CullParameterfvEXT)(GLenum pname, GLfloat * params); /* 543 */ - void (GLAPIENTRYP HintPGI)(GLenum target, GLint mode); /* 544 */ - void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 545 */ - void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 546 */ - void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 547 */ - void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 548 */ - void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 549 */ - void (GLAPIENTRYP GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data); /* 550 */ - void (GLAPIENTRYP GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 551 */ - void (GLAPIENTRYP GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 552 */ - void (GLAPIENTRYP TbufferMask3DFX)(GLuint mask); /* 553 */ - void (GLAPIENTRYP CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); /* 554 */ - void (GLAPIENTRYP CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); /* 555 */ - void (GLAPIENTRYP CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); /* 556 */ - void (GLAPIENTRYP CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 557 */ - void (GLAPIENTRYP CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 558 */ - void (GLAPIENTRYP CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 559 */ - void (GLAPIENTRYP GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img); /* 560 */ - void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 561 */ - void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 562 */ - void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 563 */ - void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 564 */ - void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 565 */ - void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 566 */ - void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 567 */ - void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 568 */ - void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 569 */ - void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 570 */ - void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 571 */ - void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 572 */ - void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 573 */ - void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 574 */ - void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 575 */ - void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 576 */ - void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 577 */ - GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 578 */ - void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint id); /* 579 */ - void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * ids); /* 580 */ - void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 581 */ - void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * ids); /* 582 */ - void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 583 */ - void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 584 */ - void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 585 */ - void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 586 */ - void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 587 */ - void (GLAPIENTRYP GetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params); /* 588 */ - void (GLAPIENTRYP GetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params); /* 589 */ - void (GLAPIENTRYP GetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params); /* 590 */ - void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 591 */ - GLboolean (GLAPIENTRYP IsProgramNV)(GLuint id); /* 592 */ - void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 593 */ - void (GLAPIENTRYP ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 594 */ - void (GLAPIENTRYP ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params); /* 595 */ - void (GLAPIENTRYP ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 596 */ - void (GLAPIENTRYP ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params); /* 597 */ - void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params); /* 598 */ - void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params); /* 599 */ - void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 600 */ - void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 601 */ - void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 602 */ - void (GLAPIENTRYP VertexAttrib1dARB)(GLuint index, GLdouble x); /* 603 */ - void (GLAPIENTRYP VertexAttrib1dvARB)(GLuint index, const GLdouble * v); /* 604 */ - void (GLAPIENTRYP VertexAttrib1fARB)(GLuint index, GLfloat x); /* 605 */ - void (GLAPIENTRYP VertexAttrib1fvARB)(GLuint index, const GLfloat * v); /* 606 */ - void (GLAPIENTRYP VertexAttrib1sARB)(GLuint index, GLshort x); /* 607 */ - void (GLAPIENTRYP VertexAttrib1svARB)(GLuint index, const GLshort * v); /* 608 */ - void (GLAPIENTRYP VertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y); /* 609 */ - void (GLAPIENTRYP VertexAttrib2dvARB)(GLuint index, const GLdouble * v); /* 610 */ - void (GLAPIENTRYP VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y); /* 611 */ - void (GLAPIENTRYP VertexAttrib2fvARB)(GLuint index, const GLfloat * v); /* 612 */ - void (GLAPIENTRYP VertexAttrib2sARB)(GLuint index, GLshort x, GLshort y); /* 613 */ - void (GLAPIENTRYP VertexAttrib2svARB)(GLuint index, const GLshort * v); /* 614 */ - void (GLAPIENTRYP VertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 615 */ - void (GLAPIENTRYP VertexAttrib3dvARB)(GLuint index, const GLdouble * v); /* 616 */ - void (GLAPIENTRYP VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 617 */ - void (GLAPIENTRYP VertexAttrib3fvARB)(GLuint index, const GLfloat * v); /* 618 */ - void (GLAPIENTRYP VertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z); /* 619 */ - void (GLAPIENTRYP VertexAttrib3svARB)(GLuint index, const GLshort * v); /* 620 */ - void (GLAPIENTRYP VertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 621 */ - void (GLAPIENTRYP VertexAttrib4dvARB)(GLuint index, const GLdouble * v); /* 622 */ - void (GLAPIENTRYP VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 623 */ - void (GLAPIENTRYP VertexAttrib4fvARB)(GLuint index, const GLfloat * v); /* 624 */ - void (GLAPIENTRYP VertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 625 */ - void (GLAPIENTRYP VertexAttrib4svARB)(GLuint index, const GLshort * v); /* 626 */ - void (GLAPIENTRYP VertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 627 */ - void (GLAPIENTRYP VertexAttrib4NubvARB)(GLuint index, const GLubyte * v); /* 628 */ - void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 629 */ - void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 630 */ - void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 631 */ - void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 632 */ - void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 633 */ - void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 634 */ - void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 635 */ - void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 636 */ - void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 637 */ - void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 638 */ - void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 639 */ - void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 640 */ - void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 641 */ - void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint params); /* 642 */ - void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 643 */ - void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount); /* 644 */ - void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 645 */ - void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 646 */ - void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 647 */ - void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 648 */ - GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 649 */ - GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 650 */ - void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 651 */ - void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 652 */ - void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 653 */ - void (GLAPIENTRYP VertexAttrib4bvARB)(GLuint index, const GLbyte * v); /* 654 */ - void (GLAPIENTRYP VertexAttrib4ivARB)(GLuint index, const GLint * v); /* 655 */ - void (GLAPIENTRYP VertexAttrib4ubvARB)(GLuint index, const GLubyte * v); /* 656 */ - void (GLAPIENTRYP VertexAttrib4usvARB)(GLuint index, const GLushort * v); /* 657 */ - void (GLAPIENTRYP VertexAttrib4uivARB)(GLuint index, const GLuint * v); /* 658 */ - void (GLAPIENTRYP VertexAttrib4NbvARB)(GLuint index, const GLbyte * v); /* 659 */ - void (GLAPIENTRYP VertexAttrib4NsvARB)(GLuint index, const GLshort * v); /* 660 */ - void (GLAPIENTRYP VertexAttrib4NivARB)(GLuint index, const GLint * v); /* 661 */ - void (GLAPIENTRYP VertexAttrib4NusvARB)(GLuint index, const GLushort * v); /* 662 */ - void (GLAPIENTRYP VertexAttrib4NuivARB)(GLuint index, const GLuint * v); /* 663 */ - void (GLAPIENTRYP VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); /* 664 */ - void (GLAPIENTRYP EnableVertexAttribArrayARB)(GLuint index); /* 665 */ - void (GLAPIENTRYP DisableVertexAttribArrayARB)(GLuint index); /* 666 */ - void (GLAPIENTRYP ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string); /* 667 */ - void (GLAPIENTRYP ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 668 */ - void (GLAPIENTRYP ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 669 */ - void (GLAPIENTRYP ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 670 */ - void (GLAPIENTRYP ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 671 */ - void (GLAPIENTRYP ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 672 */ - void (GLAPIENTRYP ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 673 */ - void (GLAPIENTRYP ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 674 */ - void (GLAPIENTRYP ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 675 */ - void (GLAPIENTRYP GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 676 */ - void (GLAPIENTRYP GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 677 */ - void (GLAPIENTRYP GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 678 */ - void (GLAPIENTRYP GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 679 */ - void (GLAPIENTRYP GetProgramivARB)(GLenum target, GLenum pname, GLint * params); /* 680 */ - void (GLAPIENTRYP GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string); /* 681 */ - void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 682 */ - void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 683 */ - void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 684 */ - void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 685 */ - void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 686 */ - void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 687 */ - void (GLAPIENTRYP BindBufferARB)(GLenum target, GLuint buffer); /* 688 */ - void (GLAPIENTRYP BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); /* 689 */ - void (GLAPIENTRYP BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); /* 690 */ - void (GLAPIENTRYP DeleteBuffersARB)(GLsizei n, const GLuint * buffer); /* 691 */ - void (GLAPIENTRYP GenBuffersARB)(GLsizei n, GLuint * buffer); /* 692 */ - void (GLAPIENTRYP GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 693 */ - void (GLAPIENTRYP GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 694 */ - void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); /* 695 */ - GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 696 */ - GLvoid * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 697 */ - GLboolean (GLAPIENTRYP UnmapBufferARB)(GLenum target); /* 698 */ - void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 699 */ - void (GLAPIENTRYP GenQueriesARB)(GLsizei n, GLuint * ids); /* 700 */ - void (GLAPIENTRYP DeleteQueriesARB)(GLsizei n, const GLuint * ids); /* 701 */ - GLboolean (GLAPIENTRYP IsQueryARB)(GLuint id); /* 702 */ - void (GLAPIENTRYP BeginQueryARB)(GLenum target, GLuint id); /* 703 */ - void (GLAPIENTRYP EndQueryARB)(GLenum target); /* 704 */ - void (GLAPIENTRYP GetQueryivARB)(GLenum target, GLenum pname, GLint * params); /* 705 */ - void (GLAPIENTRYP GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); /* 706 */ - void (GLAPIENTRYP GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); /* 707 */ - void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 708 */ - void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 709 */ - void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 710 */ - void (GLAPIENTRYP DeleteObjectARB)(GLhandleARB obj); /* 711 */ - GLhandleARB (GLAPIENTRYP GetHandleARB)(GLenum pname); /* 712 */ - void (GLAPIENTRYP DetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj); /* 713 */ - GLhandleARB (GLAPIENTRYP CreateShaderObjectARB)(GLenum shaderType); /* 714 */ - void (GLAPIENTRYP ShaderSourceARB)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); /* 715 */ - void (GLAPIENTRYP CompileShaderARB)(GLhandleARB shaderObj); /* 716 */ - GLhandleARB (GLAPIENTRYP CreateProgramObjectARB)(void); /* 717 */ - void (GLAPIENTRYP AttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj); /* 718 */ - void (GLAPIENTRYP LinkProgramARB)(GLhandleARB programObj); /* 719 */ - void (GLAPIENTRYP UseProgramObjectARB)(GLhandleARB programObj); /* 720 */ - void (GLAPIENTRYP ValidateProgramARB)(GLhandleARB programObj); /* 721 */ - void (GLAPIENTRYP Uniform1fARB)(GLint location, GLfloat v0); /* 722 */ - void (GLAPIENTRYP Uniform2fARB)(GLint location, GLfloat v0, GLfloat v1); /* 723 */ - void (GLAPIENTRYP Uniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); /* 724 */ - void (GLAPIENTRYP Uniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); /* 725 */ - void (GLAPIENTRYP Uniform1iARB)(GLint location, GLint v0); /* 726 */ - void (GLAPIENTRYP Uniform2iARB)(GLint location, GLint v0, GLint v1); /* 727 */ - void (GLAPIENTRYP Uniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2); /* 728 */ - void (GLAPIENTRYP Uniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); /* 729 */ - void (GLAPIENTRYP Uniform1fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 730 */ - void (GLAPIENTRYP Uniform2fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 731 */ - void (GLAPIENTRYP Uniform3fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 732 */ - void (GLAPIENTRYP Uniform4fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 733 */ - void (GLAPIENTRYP Uniform1ivARB)(GLint location, GLsizei count, const GLint * value); /* 734 */ - void (GLAPIENTRYP Uniform2ivARB)(GLint location, GLsizei count, const GLint * value); /* 735 */ - void (GLAPIENTRYP Uniform3ivARB)(GLint location, GLsizei count, const GLint * value); /* 736 */ - void (GLAPIENTRYP Uniform4ivARB)(GLint location, GLsizei count, const GLint * value); /* 737 */ - void (GLAPIENTRYP UniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 738 */ - void (GLAPIENTRYP UniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 739 */ - void (GLAPIENTRYP UniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 740 */ - void (GLAPIENTRYP GetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params); /* 741 */ - void (GLAPIENTRYP GetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params); /* 742 */ - void (GLAPIENTRYP GetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); /* 743 */ - void (GLAPIENTRYP GetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxLength, GLsizei * length, GLhandleARB * infoLog); /* 744 */ - GLint (GLAPIENTRYP GetUniformLocationARB)(GLhandleARB programObj, const GLcharARB * name); /* 745 */ - void (GLAPIENTRYP GetActiveUniformARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 746 */ - void (GLAPIENTRYP GetUniformfvARB)(GLhandleARB programObj, GLint location, GLfloat * params); /* 747 */ - void (GLAPIENTRYP GetUniformivARB)(GLhandleARB programObj, GLint location, GLint * params); /* 748 */ - void (GLAPIENTRYP GetShaderSourceARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); /* 749 */ - void (GLAPIENTRYP BindAttribLocationARB)(GLhandleARB programObj, GLuint index, const GLcharARB * name); /* 750 */ - void (GLAPIENTRYP GetActiveAttribARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 751 */ - GLint (GLAPIENTRYP GetAttribLocationARB)(GLhandleARB programObj, const GLcharARB * name); /* 752 */ - void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 753 */ - void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 754 */ - void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 755 */ - void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 756 */ - void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 757 */ - void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 758 */ - void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 759 */ - void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 760 */ - void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 761 */ - void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 762 */ - void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 763 */ - void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 764 */ - void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 765 */ - void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 766 */ - void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 767 */ - void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 768 */ - void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 769 */ - void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 770 */ - void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 771 */ - void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 772 */ - void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 773 */ - void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 774 */ - void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 775 */ - void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 776 */ - void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 777 */ - void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 778 */ - void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 779 */ - void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 780 */ - void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 781 */ - GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 782 */ - void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 783 */ - void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 784 */ - void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 785 */ - void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 786 */ - void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 787 */ - void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 788 */ - void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 789 */ - void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 790 */ - void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 791 */ - void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 792 */ - void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 793 */ - void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 794 */ - void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 795 */ + void (GLAPIENTRYP AttachShader)(GLuint program, GLuint shader); /* 408 */ + GLuint (GLAPIENTRYP CreateProgram)(void); /* 409 */ + GLuint (GLAPIENTRYP CreateShader)(GLenum type); /* 410 */ + void (GLAPIENTRYP DeleteProgram)(GLuint program); /* 411 */ + void (GLAPIENTRYP DeleteShader)(GLuint program); /* 412 */ + void (GLAPIENTRYP DetachShader)(GLuint program, GLuint shader); /* 413 */ + void (GLAPIENTRYP GetAttachedShaders)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj); /* 414 */ + void (GLAPIENTRYP GetProgramInfoLog)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); /* 415 */ + void (GLAPIENTRYP GetProgramiv)(GLuint program, GLenum pname, GLint * params); /* 416 */ + void (GLAPIENTRYP GetShaderInfoLog)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); /* 417 */ + void (GLAPIENTRYP GetShaderiv)(GLuint shader, GLenum pname, GLint * params); /* 418 */ + GLboolean (GLAPIENTRYP IsProgram)(GLuint program); /* 419 */ + GLboolean (GLAPIENTRYP IsShader)(GLuint shader); /* 420 */ + void (GLAPIENTRYP StencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask); /* 421 */ + void (GLAPIENTRYP StencilMaskSeparate)(GLenum face, GLuint mask); /* 422 */ + void (GLAPIENTRYP StencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); /* 423 */ + void (GLAPIENTRYP UniformMatrix2x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 424 */ + void (GLAPIENTRYP UniformMatrix2x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 425 */ + void (GLAPIENTRYP UniformMatrix3x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 426 */ + void (GLAPIENTRYP UniformMatrix3x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 427 */ + void (GLAPIENTRYP UniformMatrix4x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 428 */ + void (GLAPIENTRYP UniformMatrix4x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 429 */ + void (GLAPIENTRYP LoadTransposeMatrixdARB)(const GLdouble * m); /* 430 */ + void (GLAPIENTRYP LoadTransposeMatrixfARB)(const GLfloat * m); /* 431 */ + void (GLAPIENTRYP MultTransposeMatrixdARB)(const GLdouble * m); /* 432 */ + void (GLAPIENTRYP MultTransposeMatrixfARB)(const GLfloat * m); /* 433 */ + void (GLAPIENTRYP SampleCoverageARB)(GLclampf value, GLboolean invert); /* 434 */ + void (GLAPIENTRYP CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); /* 435 */ + void (GLAPIENTRYP CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); /* 436 */ + void (GLAPIENTRYP CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); /* 437 */ + void (GLAPIENTRYP CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 438 */ + void (GLAPIENTRYP CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 439 */ + void (GLAPIENTRYP CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 440 */ + void (GLAPIENTRYP GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img); /* 441 */ + void (GLAPIENTRYP DisableVertexAttribArrayARB)(GLuint index); /* 442 */ + void (GLAPIENTRYP EnableVertexAttribArrayARB)(GLuint index); /* 443 */ + void (GLAPIENTRYP GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 444 */ + void (GLAPIENTRYP GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 445 */ + void (GLAPIENTRYP GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 446 */ + void (GLAPIENTRYP GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 447 */ + void (GLAPIENTRYP GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string); /* 448 */ + void (GLAPIENTRYP GetProgramivARB)(GLenum target, GLenum pname, GLint * params); /* 449 */ + void (GLAPIENTRYP GetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params); /* 450 */ + void (GLAPIENTRYP GetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params); /* 451 */ + void (GLAPIENTRYP GetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params); /* 452 */ + void (GLAPIENTRYP ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 453 */ + void (GLAPIENTRYP ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 454 */ + void (GLAPIENTRYP ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 455 */ + void (GLAPIENTRYP ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 456 */ + void (GLAPIENTRYP ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 457 */ + void (GLAPIENTRYP ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 458 */ + void (GLAPIENTRYP ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 459 */ + void (GLAPIENTRYP ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 460 */ + void (GLAPIENTRYP ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string); /* 461 */ + void (GLAPIENTRYP VertexAttrib1dARB)(GLuint index, GLdouble x); /* 462 */ + void (GLAPIENTRYP VertexAttrib1dvARB)(GLuint index, const GLdouble * v); /* 463 */ + void (GLAPIENTRYP VertexAttrib1fARB)(GLuint index, GLfloat x); /* 464 */ + void (GLAPIENTRYP VertexAttrib1fvARB)(GLuint index, const GLfloat * v); /* 465 */ + void (GLAPIENTRYP VertexAttrib1sARB)(GLuint index, GLshort x); /* 466 */ + void (GLAPIENTRYP VertexAttrib1svARB)(GLuint index, const GLshort * v); /* 467 */ + void (GLAPIENTRYP VertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y); /* 468 */ + void (GLAPIENTRYP VertexAttrib2dvARB)(GLuint index, const GLdouble * v); /* 469 */ + void (GLAPIENTRYP VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y); /* 470 */ + void (GLAPIENTRYP VertexAttrib2fvARB)(GLuint index, const GLfloat * v); /* 471 */ + void (GLAPIENTRYP VertexAttrib2sARB)(GLuint index, GLshort x, GLshort y); /* 472 */ + void (GLAPIENTRYP VertexAttrib2svARB)(GLuint index, const GLshort * v); /* 473 */ + void (GLAPIENTRYP VertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 474 */ + void (GLAPIENTRYP VertexAttrib3dvARB)(GLuint index, const GLdouble * v); /* 475 */ + void (GLAPIENTRYP VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 476 */ + void (GLAPIENTRYP VertexAttrib3fvARB)(GLuint index, const GLfloat * v); /* 477 */ + void (GLAPIENTRYP VertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z); /* 478 */ + void (GLAPIENTRYP VertexAttrib3svARB)(GLuint index, const GLshort * v); /* 479 */ + void (GLAPIENTRYP VertexAttrib4NbvARB)(GLuint index, const GLbyte * v); /* 480 */ + void (GLAPIENTRYP VertexAttrib4NivARB)(GLuint index, const GLint * v); /* 481 */ + void (GLAPIENTRYP VertexAttrib4NsvARB)(GLuint index, const GLshort * v); /* 482 */ + void (GLAPIENTRYP VertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 483 */ + void (GLAPIENTRYP VertexAttrib4NubvARB)(GLuint index, const GLubyte * v); /* 484 */ + void (GLAPIENTRYP VertexAttrib4NuivARB)(GLuint index, const GLuint * v); /* 485 */ + void (GLAPIENTRYP VertexAttrib4NusvARB)(GLuint index, const GLushort * v); /* 486 */ + void (GLAPIENTRYP VertexAttrib4bvARB)(GLuint index, const GLbyte * v); /* 487 */ + void (GLAPIENTRYP VertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 488 */ + void (GLAPIENTRYP VertexAttrib4dvARB)(GLuint index, const GLdouble * v); /* 489 */ + void (GLAPIENTRYP VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 490 */ + void (GLAPIENTRYP VertexAttrib4fvARB)(GLuint index, const GLfloat * v); /* 491 */ + void (GLAPIENTRYP VertexAttrib4ivARB)(GLuint index, const GLint * v); /* 492 */ + void (GLAPIENTRYP VertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 493 */ + void (GLAPIENTRYP VertexAttrib4svARB)(GLuint index, const GLshort * v); /* 494 */ + void (GLAPIENTRYP VertexAttrib4ubvARB)(GLuint index, const GLubyte * v); /* 495 */ + void (GLAPIENTRYP VertexAttrib4uivARB)(GLuint index, const GLuint * v); /* 496 */ + void (GLAPIENTRYP VertexAttrib4usvARB)(GLuint index, const GLushort * v); /* 497 */ + void (GLAPIENTRYP VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); /* 498 */ + void (GLAPIENTRYP BindBufferARB)(GLenum target, GLuint buffer); /* 499 */ + void (GLAPIENTRYP BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); /* 500 */ + void (GLAPIENTRYP BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); /* 501 */ + void (GLAPIENTRYP DeleteBuffersARB)(GLsizei n, const GLuint * buffer); /* 502 */ + void (GLAPIENTRYP GenBuffersARB)(GLsizei n, GLuint * buffer); /* 503 */ + void (GLAPIENTRYP GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 504 */ + void (GLAPIENTRYP GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 505 */ + void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); /* 506 */ + GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 507 */ + GLvoid * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 508 */ + GLboolean (GLAPIENTRYP UnmapBufferARB)(GLenum target); /* 509 */ + void (GLAPIENTRYP BeginQueryARB)(GLenum target, GLuint id); /* 510 */ + void (GLAPIENTRYP DeleteQueriesARB)(GLsizei n, const GLuint * ids); /* 511 */ + void (GLAPIENTRYP EndQueryARB)(GLenum target); /* 512 */ + void (GLAPIENTRYP GenQueriesARB)(GLsizei n, GLuint * ids); /* 513 */ + void (GLAPIENTRYP GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); /* 514 */ + void (GLAPIENTRYP GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); /* 515 */ + void (GLAPIENTRYP GetQueryivARB)(GLenum target, GLenum pname, GLint * params); /* 516 */ + GLboolean (GLAPIENTRYP IsQueryARB)(GLuint id); /* 517 */ + void (GLAPIENTRYP AttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj); /* 518 */ + void (GLAPIENTRYP CompileShaderARB)(GLhandleARB shader); /* 519 */ + GLhandleARB (GLAPIENTRYP CreateProgramObjectARB)(void); /* 520 */ + GLhandleARB (GLAPIENTRYP CreateShaderObjectARB)(GLenum shaderType); /* 521 */ + void (GLAPIENTRYP DeleteObjectARB)(GLhandleARB obj); /* 522 */ + void (GLAPIENTRYP DetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj); /* 523 */ + void (GLAPIENTRYP GetActiveUniformARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 524 */ + void (GLAPIENTRYP GetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxLength, GLsizei * length, GLhandleARB * infoLog); /* 525 */ + GLhandleARB (GLAPIENTRYP GetHandleARB)(GLenum pname); /* 526 */ + void (GLAPIENTRYP GetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); /* 527 */ + void (GLAPIENTRYP GetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params); /* 528 */ + void (GLAPIENTRYP GetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params); /* 529 */ + void (GLAPIENTRYP GetShaderSourceARB)(GLhandleARB shader, GLsizei bufSize, GLsizei * length, GLcharARB * source); /* 530 */ + GLint (GLAPIENTRYP GetUniformLocationARB)(GLhandleARB program, const GLcharARB * name); /* 531 */ + void (GLAPIENTRYP GetUniformfvARB)(GLhandleARB program, GLint location, GLfloat * params); /* 532 */ + void (GLAPIENTRYP GetUniformivARB)(GLhandleARB program, GLint location, GLint * params); /* 533 */ + void (GLAPIENTRYP LinkProgramARB)(GLhandleARB program); /* 534 */ + void (GLAPIENTRYP ShaderSourceARB)(GLhandleARB shader, GLsizei count, const GLcharARB ** string, const GLint * length); /* 535 */ + void (GLAPIENTRYP Uniform1fARB)(GLint location, GLfloat v0); /* 536 */ + void (GLAPIENTRYP Uniform1fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 537 */ + void (GLAPIENTRYP Uniform1iARB)(GLint location, GLint v0); /* 538 */ + void (GLAPIENTRYP Uniform1ivARB)(GLint location, GLsizei count, const GLint * value); /* 539 */ + void (GLAPIENTRYP Uniform2fARB)(GLint location, GLfloat v0, GLfloat v1); /* 540 */ + void (GLAPIENTRYP Uniform2fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 541 */ + void (GLAPIENTRYP Uniform2iARB)(GLint location, GLint v0, GLint v1); /* 542 */ + void (GLAPIENTRYP Uniform2ivARB)(GLint location, GLsizei count, const GLint * value); /* 543 */ + void (GLAPIENTRYP Uniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); /* 544 */ + void (GLAPIENTRYP Uniform3fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 545 */ + void (GLAPIENTRYP Uniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2); /* 546 */ + void (GLAPIENTRYP Uniform3ivARB)(GLint location, GLsizei count, const GLint * value); /* 547 */ + void (GLAPIENTRYP Uniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); /* 548 */ + void (GLAPIENTRYP Uniform4fvARB)(GLint location, GLsizei count, const GLfloat * value); /* 549 */ + void (GLAPIENTRYP Uniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); /* 550 */ + void (GLAPIENTRYP Uniform4ivARB)(GLint location, GLsizei count, const GLint * value); /* 551 */ + void (GLAPIENTRYP UniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 552 */ + void (GLAPIENTRYP UniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 553 */ + void (GLAPIENTRYP UniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 554 */ + void (GLAPIENTRYP UseProgramObjectARB)(GLhandleARB program); /* 555 */ + void (GLAPIENTRYP ValidateProgramARB)(GLhandleARB program); /* 556 */ + void (GLAPIENTRYP BindAttribLocationARB)(GLhandleARB program, GLuint index, const GLcharARB * name); /* 557 */ + void (GLAPIENTRYP GetActiveAttribARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 558 */ + GLint (GLAPIENTRYP GetAttribLocationARB)(GLhandleARB program, const GLcharARB * name); /* 559 */ + void (GLAPIENTRYP DrawBuffersARB)(GLsizei n, const GLenum * bufs); /* 560 */ + void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 561 */ + void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 562 */ + void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 563 */ + void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 564 */ + void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 565 */ + void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 566 */ + void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 567 */ + void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 568 */ + void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 569 */ + void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 570 */ + void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 571 */ + void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 572 */ + void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 573 */ + void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 574 */ + void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 575 */ + void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 576 */ + void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 577 */ + void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 578 */ + void (GLAPIENTRYP UnlockArraysEXT)(void); /* 579 */ + void (GLAPIENTRYP CullParameterdvEXT)(GLenum pname, GLdouble * params); /* 580 */ + void (GLAPIENTRYP CullParameterfvEXT)(GLenum pname, GLfloat * params); /* 581 */ + void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 582 */ + void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 583 */ + void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 584 */ + void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 585 */ + void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 586 */ + void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 587 */ + void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 588 */ + void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 589 */ + void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 590 */ + void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 591 */ + void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 592 */ + void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 593 */ + void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 594 */ + void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 595 */ + void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 596 */ + void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 597 */ + void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 598 */ + void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount); /* 599 */ + void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 600 */ + void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 601 */ + void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 602 */ + void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 603 */ + void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 604 */ + void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 605 */ + void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 606 */ + void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 607 */ + void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 608 */ + void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 609 */ + void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 610 */ + void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 611 */ + void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 612 */ + void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 613 */ + void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 614 */ + void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 615 */ + void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 616 */ + void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 617 */ + void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 618 */ + void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 619 */ + void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 620 */ + void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 621 */ + void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 622 */ + void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 623 */ + void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 624 */ + void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 625 */ + void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 626 */ + void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 627 */ + void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 628 */ + void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 629 */ + void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 630 */ + void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 631 */ + void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 632 */ + void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 633 */ + void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 634 */ + void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 635 */ + void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 636 */ + void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 637 */ + void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 638 */ + void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 639 */ + void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 640 */ + void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 641 */ + void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 642 */ + void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 643 */ + void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 644 */ + void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 645 */ + void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 646 */ + void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 647 */ + void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 648 */ + void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 649 */ + void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 650 */ + void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 651 */ + void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 652 */ + void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 653 */ + GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 654 */ + void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 655 */ + GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 656 */ + GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 657 */ + void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint program); /* 658 */ + void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * programs); /* 659 */ + void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 660 */ + void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * programs); /* 661 */ + void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 662 */ + void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 663 */ + void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 664 */ + void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 665 */ + void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 666 */ + void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** params); /* 667 */ + void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 668 */ + void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 669 */ + void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 670 */ + GLboolean (GLAPIENTRYP IsProgramNV)(GLuint program); /* 671 */ + void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 672 */ + void (GLAPIENTRYP ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 673 */ + void (GLAPIENTRYP ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params); /* 674 */ + void (GLAPIENTRYP ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 675 */ + void (GLAPIENTRYP ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params); /* 676 */ + void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params); /* 677 */ + void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params); /* 678 */ + void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 679 */ + void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 680 */ + void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 681 */ + void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 682 */ + void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 683 */ + void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 684 */ + void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 685 */ + void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 686 */ + void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 687 */ + void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 688 */ + void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 689 */ + void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 690 */ + void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 691 */ + void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 692 */ + void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 693 */ + void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 694 */ + void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 695 */ + void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 696 */ + void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 697 */ + void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 698 */ + void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 699 */ + void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 700 */ + void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 701 */ + void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 702 */ + void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 703 */ + void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 704 */ + void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 705 */ + void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 706 */ + void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 707 */ + void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 708 */ + void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 709 */ + void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 710 */ + void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 711 */ + void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 712 */ + void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 713 */ + void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 714 */ + void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 715 */ + void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 716 */ + void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 717 */ + void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 718 */ + void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 719 */ + void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 720 */ + void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 721 */ + void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 722 */ + void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 723 */ + void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 724 */ + void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 725 */ + void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 726 */ + void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 727 */ + void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 728 */ + void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 729 */ + void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 730 */ + GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 731 */ + void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 732 */ + void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 733 */ + void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 734 */ + void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 735 */ + void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 736 */ + void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 737 */ + void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 738 */ + void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 739 */ + void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 740 */ + GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 741 */ + void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 742 */ + void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 743 */ + void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 744 */ + void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 745 */ + void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 746 */ + void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 747 */ + void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 748 */ + void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 749 */ + void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 750 */ + void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 751 */ + GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 752 */ + void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 753 */ + void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 754 */ + void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 755 */ + void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 756 */ + void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 757 */ + void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 758 */ + void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 759 */ + void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 760 */ + void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 761 */ + void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 762 */ + void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 763 */ + GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 764 */ + GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 765 */ + void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 766 */ + void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 767 */ + void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 768 */ + void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 769 */ + void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 770 */ + void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 771 */ }; -#endif +#endif /* !defined( _GLAPI_TABLE_H_ ) */ diff --git a/src/kits/opengl/mesa/glapi/glapitemp.h b/src/kits/opengl/mesa/glapi/glapitemp.h index d6da59cd81..340a4f6a04 100644 --- a/src/kits/opengl/mesa/glapi/glapitemp.h +++ b/src/kits/opengl/mesa/glapi/glapitemp.h @@ -27,6 +27,12 @@ */ +# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) +# define HIDDEN __attribute__((visibility("hidden"))) +# else +# define HIDDEN +# endif + /* * This file is a template which generates the OpenGL API entry point * functions. It should be included by a .c file which first defines @@ -57,6 +63,10 @@ #define KEYWORD1 #endif +#ifndef KEYWORD1_ALT +#define KEYWORD1_ALT HIDDEN +#endif + #ifndef KEYWORD2 #define KEYWORD2 #endif @@ -1605,11 +1615,21 @@ KEYWORD1 void KEYWORD2 NAME(ArrayElement)(GLint i) DISPATCH(ArrayElement, (i), (F, "glArrayElement(%d);\n", i)); } +KEYWORD1 void KEYWORD2 NAME(ArrayElementEXT)(GLint i) +{ + DISPATCH(ArrayElement, (i), (F, "glArrayElementEXT(%d);\n", i)); +} + KEYWORD1 void KEYWORD2 NAME(BindTexture)(GLenum target, GLuint texture) { DISPATCH(BindTexture, (target, texture), (F, "glBindTexture(0x%x, %d);\n", target, texture)); } +KEYWORD1 void KEYWORD2 NAME(BindTextureEXT)(GLenum target, GLuint texture) +{ + DISPATCH(BindTexture, (target, texture), (F, "glBindTextureEXT(0x%x, %d);\n", target, texture)); +} + KEYWORD1 void KEYWORD2 NAME(ColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) { DISPATCH(ColorPointer, (size, type, stride, pointer), (F, "glColorPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); @@ -1625,6 +1645,11 @@ KEYWORD1 void KEYWORD2 NAME(DrawArrays)(GLenum mode, GLint first, GLsizei count) DISPATCH(DrawArrays, (mode, first, count), (F, "glDrawArrays(0x%x, %d, %d);\n", mode, first, count)); } +KEYWORD1 void KEYWORD2 NAME(DrawArraysEXT)(GLenum mode, GLint first, GLsizei count) +{ + DISPATCH(DrawArrays, (mode, first, count), (F, "glDrawArraysEXT(0x%x, %d, %d);\n", mode, first, count)); +} + KEYWORD1 void KEYWORD2 NAME(DrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices) { DISPATCH(DrawElements, (mode, count, type, indices), (F, "glDrawElements(0x%x, %d, 0x%x, %p);\n", mode, count, type, (const void *) indices)); @@ -1685,61 +1710,129 @@ KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResident)(GLsizei n, const GLuint * RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResident(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences) +{ + RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) { DISPATCH(CopyTexImage1D, (target, level, internalformat, x, y, width, border), (F, "glCopyTexImage1D(0x%x, %d, 0x%x, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, border)); } +KEYWORD1 void KEYWORD2 NAME(CopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) +{ + DISPATCH(CopyTexImage1D, (target, level, internalformat, x, y, width, border), (F, "glCopyTexImage1DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, border)); +} + KEYWORD1 void KEYWORD2 NAME(CopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { DISPATCH(CopyTexImage2D, (target, level, internalformat, x, y, width, height, border), (F, "glCopyTexImage2D(0x%x, %d, 0x%x, %d, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, height, border)); } +KEYWORD1 void KEYWORD2 NAME(CopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) +{ + DISPATCH(CopyTexImage2D, (target, level, internalformat, x, y, width, height, border), (F, "glCopyTexImage2DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, height, border)); +} + KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) { DISPATCH(CopyTexSubImage1D, (target, level, xoffset, x, y, width), (F, "glCopyTexSubImage1D(0x%x, %d, %d, %d, %d, %d);\n", target, level, xoffset, x, y, width)); } +KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) +{ + DISPATCH(CopyTexSubImage1D, (target, level, xoffset, x, y, width), (F, "glCopyTexSubImage1DEXT(0x%x, %d, %d, %d, %d, %d);\n", target, level, xoffset, x, y, width)); +} + KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { DISPATCH(CopyTexSubImage2D, (target, level, xoffset, yoffset, x, y, width, height), (F, "glCopyTexSubImage2D(0x%x, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height)); } +KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) +{ + DISPATCH(CopyTexSubImage2D, (target, level, xoffset, yoffset, x, y, width, height), (F, "glCopyTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height)); +} + KEYWORD1 void KEYWORD2 NAME(DeleteTextures)(GLsizei n, const GLuint * textures) { DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTextures(%d, %p);\n", n, (const void *) textures)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures) +{ + DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GenTextures)(GLsizei n, GLuint * textures) { DISPATCH(GenTextures, (n, textures), (F, "glGenTextures(%d, %p);\n", n, (const void *) textures)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures) +{ + DISPATCH(GenTextures, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetPointerv)(GLenum pname, GLvoid ** params) { DISPATCH(GetPointerv, (pname, params), (F, "glGetPointerv(0x%x, %p);\n", pname, (const void *) params)); } +KEYWORD1 void KEYWORD2 NAME(GetPointervEXT)(GLenum pname, GLvoid ** params) +{ + DISPATCH(GetPointerv, (pname, params), (F, "glGetPointervEXT(0x%x, %p);\n", pname, (const void *) params)); +} + KEYWORD1 GLboolean KEYWORD2 NAME(IsTexture)(GLuint texture) { RETURN_DISPATCH(IsTexture, (texture), (F, "glIsTexture(%d);\n", texture)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture) +{ + RETURN_DISPATCH(IsTexture, (texture), (F, "glIsTextureEXT(%d);\n", texture)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(PrioritizeTextures)(GLsizei n, const GLuint * textures, const GLclampf * priorities) { DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTextures(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities)); } +KEYWORD1 void KEYWORD2 NAME(PrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities) +{ + DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTexturesEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities)); +} + KEYWORD1 void KEYWORD2 NAME(TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) { DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1D(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels)); } +KEYWORD1 void KEYWORD2 NAME(TexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) +{ + DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1DEXT(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels)); +} + KEYWORD1 void KEYWORD2 NAME(TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) { DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels)); } +KEYWORD1 void KEYWORD2 NAME(TexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) +{ + DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels)); +} + KEYWORD1 void KEYWORD2 NAME(PopClientAttrib)(void) { DISPATCH(PopClientAttrib, (), (F, "glPopClientAttrib();\n")); @@ -1755,364 +1848,950 @@ KEYWORD1 void KEYWORD2 NAME(BlendColor)(GLclampf red, GLclampf green, GLclampf b DISPATCH(BlendColor, (red, green, blue, alpha), (F, "glBlendColor(%f, %f, %f, %f);\n", red, green, blue, alpha)); } +KEYWORD1 void KEYWORD2 NAME(BlendColorEXT)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) +{ + DISPATCH(BlendColor, (red, green, blue, alpha), (F, "glBlendColorEXT(%f, %f, %f, %f);\n", red, green, blue, alpha)); +} + KEYWORD1 void KEYWORD2 NAME(BlendEquation)(GLenum mode) { DISPATCH(BlendEquation, (mode), (F, "glBlendEquation(0x%x);\n", mode)); } +KEYWORD1 void KEYWORD2 NAME(BlendEquationEXT)(GLenum mode) +{ + DISPATCH(BlendEquation, (mode), (F, "glBlendEquationEXT(0x%x);\n", mode)); +} + KEYWORD1 void KEYWORD2 NAME(DrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) { DISPATCH(DrawRangeElements, (mode, start, end, count, type, indices), (F, "glDrawRangeElements(0x%x, %d, %d, %d, 0x%x, %p);\n", mode, start, end, count, type, (const void *) indices)); } +KEYWORD1 void KEYWORD2 NAME(DrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) +{ + DISPATCH(DrawRangeElements, (mode, start, end, count, type, indices), (F, "glDrawRangeElementsEXT(0x%x, %d, %d, %d, 0x%x, %p);\n", mode, start, end, count, type, (const void *) indices)); +} + KEYWORD1 void KEYWORD2 NAME(ColorTable)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) { DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTable(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_339)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_339)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) +{ + DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableSGI(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); +} + +KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) +{ + DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); +} + KEYWORD1 void KEYWORD2 NAME(ColorTableParameterfv)(GLenum target, GLenum pname, const GLfloat * params) { DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_340)(GLenum target, GLenum pname, const GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_340)(GLenum target, GLenum pname, const GLfloat * params) +{ + DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + KEYWORD1 void KEYWORD2 NAME(ColorTableParameteriv)(GLenum target, GLenum pname, const GLint * params) { DISPATCH(ColorTableParameteriv, (target, pname, params), (F, "glColorTableParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_341)(GLenum target, GLenum pname, const GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_341)(GLenum target, GLenum pname, const GLint * params) +{ + DISPATCH(ColorTableParameteriv, (target, pname, params), (F, "glColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + KEYWORD1 void KEYWORD2 NAME(CopyColorTable)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) { DISPATCH(CopyColorTable, (target, internalformat, x, y, width), (F, "glCopyColorTable(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_342)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_342)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) +{ + DISPATCH(CopyColorTable, (target, internalformat, x, y, width), (F, "glCopyColorTableSGI(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width)); +} + KEYWORD1 void KEYWORD2 NAME(GetColorTable)(GLenum target, GLenum format, GLenum type, GLvoid * table) { DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTable(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_343)(GLenum target, GLenum format, GLenum type, GLvoid * table); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_343)(GLenum target, GLenum format, GLenum type, GLvoid * table) +{ + DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTableSGI(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); +} +#endif /* GLX_INDIRECT_RENDERING */ + +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1 void KEYWORD2 NAME(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * table) +{ + DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_344)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_344)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetColorTableParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_345)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_345)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(ColorSubTable)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) { DISPATCH(ColorSubTable, (target, start, count, format, type, data), (F, "glColorSubTable(0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, start, count, format, type, (const void *) data)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_346)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_346)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) +{ + DISPATCH(ColorSubTable, (target, start, count, format, type, data), (F, "glColorSubTableEXT(0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, start, count, format, type, (const void *) data)); +} + KEYWORD1 void KEYWORD2 NAME(CopyColorSubTable)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) { DISPATCH(CopyColorSubTable, (target, start, x, y, width), (F, "glCopyColorSubTable(0x%x, %d, %d, %d, %d);\n", target, start, x, y, width)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_347)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_347)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) +{ + DISPATCH(CopyColorSubTable, (target, start, x, y, width), (F, "glCopyColorSubTableEXT(0x%x, %d, %d, %d, %d);\n", target, start, x, y, width)); +} + KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter1D)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) { DISPATCH(ConvolutionFilter1D, (target, internalformat, width, format, type, image), (F, "glConvolutionFilter1D(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) image)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_348)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_348)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) +{ + DISPATCH(ConvolutionFilter1D, (target, internalformat, width, format, type, image), (F, "glConvolutionFilter1DEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) image)); +} + KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) { DISPATCH(ConvolutionFilter2D, (target, internalformat, width, height, format, type, image), (F, "glConvolutionFilter2D(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, height, format, type, (const void *) image)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_349)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_349)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) +{ + DISPATCH(ConvolutionFilter2D, (target, internalformat, width, height, format, type, image), (F, "glConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, height, format, type, (const void *) image)); +} + KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterf)(GLenum target, GLenum pname, GLfloat params) { DISPATCH(ConvolutionParameterf, (target, pname, params), (F, "glConvolutionParameterf(0x%x, 0x%x, %f);\n", target, pname, params)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_350)(GLenum target, GLenum pname, GLfloat params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_350)(GLenum target, GLenum pname, GLfloat params) +{ + DISPATCH(ConvolutionParameterf, (target, pname, params), (F, "glConvolutionParameterfEXT(0x%x, 0x%x, %f);\n", target, pname, params)); +} + KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfv)(GLenum target, GLenum pname, const GLfloat * params) { DISPATCH(ConvolutionParameterfv, (target, pname, params), (F, "glConvolutionParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_351)(GLenum target, GLenum pname, const GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_351)(GLenum target, GLenum pname, const GLfloat * params) +{ + DISPATCH(ConvolutionParameterfv, (target, pname, params), (F, "glConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + KEYWORD1 void KEYWORD2 NAME(ConvolutionParameteri)(GLenum target, GLenum pname, GLint params) { DISPATCH(ConvolutionParameteri, (target, pname, params), (F, "glConvolutionParameteri(0x%x, 0x%x, %d);\n", target, pname, params)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_352)(GLenum target, GLenum pname, GLint params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_352)(GLenum target, GLenum pname, GLint params) +{ + DISPATCH(ConvolutionParameteri, (target, pname, params), (F, "glConvolutionParameteriEXT(0x%x, 0x%x, %d);\n", target, pname, params)); +} + KEYWORD1 void KEYWORD2 NAME(ConvolutionParameteriv)(GLenum target, GLenum pname, const GLint * params) { DISPATCH(ConvolutionParameteriv, (target, pname, params), (F, "glConvolutionParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_353)(GLenum target, GLenum pname, const GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_353)(GLenum target, GLenum pname, const GLint * params) +{ + DISPATCH(ConvolutionParameteriv, (target, pname, params), (F, "glConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter1D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) { DISPATCH(CopyConvolutionFilter1D, (target, internalformat, x, y, width), (F, "glCopyConvolutionFilter1D(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_354)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_354)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) +{ + DISPATCH(CopyConvolutionFilter1D, (target, internalformat, x, y, width), (F, "glCopyConvolutionFilter1DEXT(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width)); +} + KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter2D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) { DISPATCH(CopyConvolutionFilter2D, (target, internalformat, x, y, width, height), (F, "glCopyConvolutionFilter2D(0x%x, 0x%x, %d, %d, %d, %d);\n", target, internalformat, x, y, width, height)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_355)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_355)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) +{ + DISPATCH(CopyConvolutionFilter2D, (target, internalformat, x, y, width, height), (F, "glCopyConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, %d, %d);\n", target, internalformat, x, y, width, height)); +} + KEYWORD1 void KEYWORD2 NAME(GetConvolutionFilter)(GLenum target, GLenum format, GLenum type, GLvoid * image) { DISPATCH(GetConvolutionFilter, (target, format, type, image), (F, "glGetConvolutionFilter(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_356)(GLenum target, GLenum format, GLenum type, GLvoid * image); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_356)(GLenum target, GLenum format, GLenum type, GLvoid * image) +{ + DISPATCH(GetConvolutionFilter, (target, format, type, image), (F, "glGetConvolutionFilterEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetConvolutionParameterfv, (target, pname, params), (F, "glGetConvolutionParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_357)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_357)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetConvolutionParameterfv, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetConvolutionParameteriv, (target, pname, params), (F, "glGetConvolutionParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_358)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_358)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetConvolutionParameteriv, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetSeparableFilter)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) { DISPATCH(GetSeparableFilter, (target, format, type, row, column, span), (F, "glGetSeparableFilter(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_359)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_359)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) +{ + DISPATCH(GetSeparableFilter, (target, format, type, row, column, span), (F, "glGetSeparableFilterEXT(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(SeparableFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) { DISPATCH(SeparableFilter2D, (target, internalformat, width, height, format, type, row, column), (F, "glSeparableFilter2D(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p, %p);\n", target, internalformat, width, height, format, type, (const void *) row, (const void *) column)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_360)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_360)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) +{ + DISPATCH(SeparableFilter2D, (target, internalformat, width, height, format, type, row, column), (F, "glSeparableFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p, %p);\n", target, internalformat, width, height, format, type, (const void *) row, (const void *) column)); +} + KEYWORD1 void KEYWORD2 NAME(GetHistogram)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) { DISPATCH(GetHistogram, (target, reset, format, type, values), (F, "glGetHistogram(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_361)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_361)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) +{ + DISPATCH(GetHistogram, (target, reset, format, type, values), (F, "glGetHistogramEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetHistogramParameterfv, (target, pname, params), (F, "glGetHistogramParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_362)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_362)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetHistogramParameterfv, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetHistogramParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetHistogramParameteriv, (target, pname, params), (F, "glGetHistogramParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_363)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_363)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetHistogramParameteriv, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) { DISPATCH(GetMinmax, (target, reset, format, type, values), (F, "glGetMinmax(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_364)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_364)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) +{ + DISPATCH(GetMinmax, (target, reset, format, type, values), (F, "glGetMinmaxEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetMinmaxParameterfv, (target, pname, params), (F, "glGetMinmaxParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_365)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_365)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetMinmaxParameterfv, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetMinmaxParameteriv, (target, pname, params), (F, "glGetMinmaxParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } +#ifndef GLX_INDIRECT_RENDERING +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_366)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_366)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetMinmaxParameteriv, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} +#endif /* GLX_INDIRECT_RENDERING */ + KEYWORD1 void KEYWORD2 NAME(Histogram)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) { DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogram(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_367)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_367)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) +{ + DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogramEXT(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink)); +} + KEYWORD1 void KEYWORD2 NAME(Minmax)(GLenum target, GLenum internalformat, GLboolean sink) { DISPATCH(Minmax, (target, internalformat, sink), (F, "glMinmax(0x%x, 0x%x, %d);\n", target, internalformat, sink)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_368)(GLenum target, GLenum internalformat, GLboolean sink); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_368)(GLenum target, GLenum internalformat, GLboolean sink) +{ + DISPATCH(Minmax, (target, internalformat, sink), (F, "glMinmaxEXT(0x%x, 0x%x, %d);\n", target, internalformat, sink)); +} + KEYWORD1 void KEYWORD2 NAME(ResetHistogram)(GLenum target) { DISPATCH(ResetHistogram, (target), (F, "glResetHistogram(0x%x);\n", target)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_369)(GLenum target); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_369)(GLenum target) +{ + DISPATCH(ResetHistogram, (target), (F, "glResetHistogramEXT(0x%x);\n", target)); +} + KEYWORD1 void KEYWORD2 NAME(ResetMinmax)(GLenum target) { DISPATCH(ResetMinmax, (target), (F, "glResetMinmax(0x%x);\n", target)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_370)(GLenum target); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_370)(GLenum target) +{ + DISPATCH(ResetMinmax, (target), (F, "glResetMinmaxEXT(0x%x);\n", target)); +} + KEYWORD1 void KEYWORD2 NAME(TexImage3D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) { DISPATCH(TexImage3D, (target, level, internalformat, width, height, depth, border, format, type, pixels), (F, "glTexImage3D(0x%x, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, border, format, type, (const void *) pixels)); } +KEYWORD1 void KEYWORD2 NAME(TexImage3DEXT)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) +{ + DISPATCH(TexImage3D, (target, level, internalformat, width, height, depth, border, format, type, pixels), (F, "glTexImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, border, format, type, (const void *) pixels)); +} + KEYWORD1 void KEYWORD2 NAME(TexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) { DISPATCH(TexSubImage3D, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels), (F, "glTexSubImage3D(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (const void *) pixels)); } +KEYWORD1 void KEYWORD2 NAME(TexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) +{ + DISPATCH(TexSubImage3D, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels), (F, "glTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (const void *) pixels)); +} + KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { DISPATCH(CopyTexSubImage3D, (target, level, xoffset, yoffset, zoffset, x, y, width, height), (F, "glCopyTexSubImage3D(0x%x, %d, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, zoffset, x, y, width, height)); } +KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) +{ + DISPATCH(CopyTexSubImage3D, (target, level, xoffset, yoffset, zoffset, x, y, width, height), (F, "glCopyTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, zoffset, x, y, width, height)); +} + +KEYWORD1 void KEYWORD2 NAME(ActiveTexture)(GLenum texture) +{ + DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTexture(0x%x);\n", texture)); +} + KEYWORD1 void KEYWORD2 NAME(ActiveTextureARB)(GLenum texture) { DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTextureARB(0x%x);\n", texture)); } +KEYWORD1 void KEYWORD2 NAME(ClientActiveTexture)(GLenum texture) +{ + DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTexture(0x%x);\n", texture)); +} + KEYWORD1 void KEYWORD2 NAME(ClientActiveTextureARB)(GLenum texture) { DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTextureARB(0x%x);\n", texture)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1d)(GLenum target, GLdouble s) +{ + DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1d(0x%x, %f);\n", target, s)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dARB)(GLenum target, GLdouble s) { DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1dARB(0x%x, %f);\n", target, s)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dv)(GLenum target, const GLdouble * v) +{ + DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dvARB)(GLenum target, const GLdouble * v) { DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1f)(GLenum target, GLfloat s) +{ + DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1f(0x%x, %f);\n", target, s)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fARB)(GLenum target, GLfloat s) { DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1fARB(0x%x, %f);\n", target, s)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fv)(GLenum target, const GLfloat * v) +{ + DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fvARB)(GLenum target, const GLfloat * v) { DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1i)(GLenum target, GLint s) +{ + DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1i(0x%x, %d);\n", target, s)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iARB)(GLenum target, GLint s) { DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1iARB(0x%x, %d);\n", target, s)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iv)(GLenum target, const GLint * v) +{ + DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1iv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1ivARB)(GLenum target, const GLint * v) { DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1ivARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1s)(GLenum target, GLshort s) +{ + DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1s(0x%x, %d);\n", target, s)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sARB)(GLenum target, GLshort s) { DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1sARB(0x%x, %d);\n", target, s)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sv)(GLenum target, const GLshort * v) +{ + DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1sv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1svARB)(GLenum target, const GLshort * v) { DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1svARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t) +{ + DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2d(0x%x, %f, %f);\n", target, s, t)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dARB)(GLenum target, GLdouble s, GLdouble t) { DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2dARB(0x%x, %f, %f);\n", target, s, t)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dv)(GLenum target, const GLdouble * v) +{ + DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dvARB)(GLenum target, const GLdouble * v) { DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t) +{ + DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2f(0x%x, %f, %f);\n", target, s, t)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t) { DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2fARB(0x%x, %f, %f);\n", target, s, t)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fv)(GLenum target, const GLfloat * v) +{ + DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fvARB)(GLenum target, const GLfloat * v) { DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2i)(GLenum target, GLint s, GLint t) +{ + DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2i(0x%x, %d, %d);\n", target, s, t)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iARB)(GLenum target, GLint s, GLint t) { DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2iARB(0x%x, %d, %d);\n", target, s, t)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iv)(GLenum target, const GLint * v) +{ + DISPATCH(MultiTexCoord2ivARB, (target, v), (F, "glMultiTexCoord2iv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2ivARB)(GLenum target, const GLint * v) { DISPATCH(MultiTexCoord2ivARB, (target, v), (F, "glMultiTexCoord2ivARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2s)(GLenum target, GLshort s, GLshort t) +{ + DISPATCH(MultiTexCoord2sARB, (target, s, t), (F, "glMultiTexCoord2s(0x%x, %d, %d);\n", target, s, t)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2sARB)(GLenum target, GLshort s, GLshort t) { DISPATCH(MultiTexCoord2sARB, (target, s, t), (F, "glMultiTexCoord2sARB(0x%x, %d, %d);\n", target, s, t)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2sv)(GLenum target, const GLshort * v) +{ + DISPATCH(MultiTexCoord2svARB, (target, v), (F, "glMultiTexCoord2sv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2svARB)(GLenum target, const GLshort * v) { DISPATCH(MultiTexCoord2svARB, (target, v), (F, "glMultiTexCoord2svARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r) +{ + DISPATCH(MultiTexCoord3dARB, (target, s, t, r), (F, "glMultiTexCoord3d(0x%x, %f, %f, %f);\n", target, s, t, r)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r) { DISPATCH(MultiTexCoord3dARB, (target, s, t, r), (F, "glMultiTexCoord3dARB(0x%x, %f, %f, %f);\n", target, s, t, r)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dv)(GLenum target, const GLdouble * v) +{ + DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dvARB)(GLenum target, const GLdouble * v) { DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r) +{ + DISPATCH(MultiTexCoord3fARB, (target, s, t, r), (F, "glMultiTexCoord3f(0x%x, %f, %f, %f);\n", target, s, t, r)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r) { DISPATCH(MultiTexCoord3fARB, (target, s, t, r), (F, "glMultiTexCoord3fARB(0x%x, %f, %f, %f);\n", target, s, t, r)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fv)(GLenum target, const GLfloat * v) +{ + DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fvARB)(GLenum target, const GLfloat * v) { DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r) +{ + DISPATCH(MultiTexCoord3iARB, (target, s, t, r), (F, "glMultiTexCoord3i(0x%x, %d, %d, %d);\n", target, s, t, r)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r) { DISPATCH(MultiTexCoord3iARB, (target, s, t, r), (F, "glMultiTexCoord3iARB(0x%x, %d, %d, %d);\n", target, s, t, r)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iv)(GLenum target, const GLint * v) +{ + DISPATCH(MultiTexCoord3ivARB, (target, v), (F, "glMultiTexCoord3iv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3ivARB)(GLenum target, const GLint * v) { DISPATCH(MultiTexCoord3ivARB, (target, v), (F, "glMultiTexCoord3ivARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r) +{ + DISPATCH(MultiTexCoord3sARB, (target, s, t, r), (F, "glMultiTexCoord3s(0x%x, %d, %d, %d);\n", target, s, t, r)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3sARB)(GLenum target, GLshort s, GLshort t, GLshort r) { DISPATCH(MultiTexCoord3sARB, (target, s, t, r), (F, "glMultiTexCoord3sARB(0x%x, %d, %d, %d);\n", target, s, t, r)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3sv)(GLenum target, const GLshort * v) +{ + DISPATCH(MultiTexCoord3svARB, (target, v), (F, "glMultiTexCoord3sv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3svARB)(GLenum target, const GLshort * v) { DISPATCH(MultiTexCoord3svARB, (target, v), (F, "glMultiTexCoord3svARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) +{ + DISPATCH(MultiTexCoord4dARB, (target, s, t, r, q), (F, "glMultiTexCoord4d(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) { DISPATCH(MultiTexCoord4dARB, (target, s, t, r, q), (F, "glMultiTexCoord4dARB(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dv)(GLenum target, const GLdouble * v) +{ + DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dvARB)(GLenum target, const GLdouble * v) { DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) +{ + DISPATCH(MultiTexCoord4fARB, (target, s, t, r, q), (F, "glMultiTexCoord4f(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) { DISPATCH(MultiTexCoord4fARB, (target, s, t, r, q), (F, "glMultiTexCoord4fARB(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fv)(GLenum target, const GLfloat * v) +{ + DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fvARB)(GLenum target, const GLfloat * v) { DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fvARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q) +{ + DISPATCH(MultiTexCoord4iARB, (target, s, t, r, q), (F, "glMultiTexCoord4i(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q) { DISPATCH(MultiTexCoord4iARB, (target, s, t, r, q), (F, "glMultiTexCoord4iARB(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iv)(GLenum target, const GLint * v) +{ + DISPATCH(MultiTexCoord4ivARB, (target, v), (F, "glMultiTexCoord4iv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4ivARB)(GLenum target, const GLint * v) { DISPATCH(MultiTexCoord4ivARB, (target, v), (F, "glMultiTexCoord4ivARB(0x%x, %p);\n", target, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) +{ + DISPATCH(MultiTexCoord4sARB, (target, s, t, r, q), (F, "glMultiTexCoord4s(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4sARB)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) { DISPATCH(MultiTexCoord4sARB, (target, s, t, r, q), (F, "glMultiTexCoord4sARB(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q)); } +KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4sv)(GLenum target, const GLshort * v) +{ + DISPATCH(MultiTexCoord4svARB, (target, v), (F, "glMultiTexCoord4sv(0x%x, %p);\n", target, (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4svARB)(GLenum target, const GLshort * v) { DISPATCH(MultiTexCoord4svARB, (target, v), (F, "glMultiTexCoord4svARB(0x%x, %p);\n", target, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixfARB)(const GLfloat * m) +KEYWORD1 void KEYWORD2 NAME(AttachShader)(GLuint program, GLuint shader) { - DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixfARB(%p);\n", (const void *) m)); + DISPATCH(AttachShader, (program, shader), (F, "glAttachShader(%d, %d);\n", program, shader)); +} + +KEYWORD1 GLuint KEYWORD2 NAME(CreateProgram)(void) +{ + RETURN_DISPATCH(CreateProgram, (), (F, "glCreateProgram();\n")); +} + +KEYWORD1 GLuint KEYWORD2 NAME(CreateShader)(GLenum type) +{ + RETURN_DISPATCH(CreateShader, (type), (F, "glCreateShader(0x%x);\n", type)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteProgram)(GLuint program) +{ + DISPATCH(DeleteProgram, (program), (F, "glDeleteProgram(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteShader)(GLuint program) +{ + DISPATCH(DeleteShader, (program), (F, "glDeleteShader(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(DetachShader)(GLuint program, GLuint shader) +{ + DISPATCH(DetachShader, (program, shader), (F, "glDetachShader(%d, %d);\n", program, shader)); +} + +KEYWORD1 void KEYWORD2 NAME(GetAttachedShaders)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj) +{ + DISPATCH(GetAttachedShaders, (program, maxCount, count, obj), (F, "glGetAttachedShaders(%d, %d, %p, %p);\n", program, maxCount, (const void *) count, (const void *) obj)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramInfoLog)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog) +{ + DISPATCH(GetProgramInfoLog, (program, bufSize, length, infoLog), (F, "glGetProgramInfoLog(%d, %d, %p, %p);\n", program, bufSize, (const void *) length, (const void *) infoLog)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramiv)(GLuint program, GLenum pname, GLint * params) +{ + DISPATCH(GetProgramiv, (program, pname, params), (F, "glGetProgramiv(%d, 0x%x, %p);\n", program, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetShaderInfoLog)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog) +{ + DISPATCH(GetShaderInfoLog, (shader, bufSize, length, infoLog), (F, "glGetShaderInfoLog(%d, %d, %p, %p);\n", shader, bufSize, (const void *) length, (const void *) infoLog)); +} + +KEYWORD1 void KEYWORD2 NAME(GetShaderiv)(GLuint shader, GLenum pname, GLint * params) +{ + DISPATCH(GetShaderiv, (shader, pname, params), (F, "glGetShaderiv(%d, 0x%x, %p);\n", shader, pname, (const void *) params)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsProgram)(GLuint program) +{ + RETURN_DISPATCH(IsProgram, (program), (F, "glIsProgram(%d);\n", program)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsShader)(GLuint shader) +{ + RETURN_DISPATCH(IsShader, (shader), (F, "glIsShader(%d);\n", shader)); +} + +KEYWORD1 void KEYWORD2 NAME(StencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask) +{ + DISPATCH(StencilFuncSeparate, (face, func, ref, mask), (F, "glStencilFuncSeparate(0x%x, 0x%x, %d, %d);\n", face, func, ref, mask)); +} + +KEYWORD1 void KEYWORD2 NAME(StencilMaskSeparate)(GLenum face, GLuint mask) +{ + DISPATCH(StencilMaskSeparate, (face, mask), (F, "glStencilMaskSeparate(0x%x, %d);\n", face, mask)); +} + +KEYWORD1 void KEYWORD2 NAME(StencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) +{ + DISPATCH(StencilOpSeparate, (face, fail, zfail, zpass), (F, "glStencilOpSeparate(0x%x, 0x%x, 0x%x, 0x%x);\n", face, fail, zfail, zpass)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix2x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix2x3fv, (location, count, transpose, value), (F, "glUniformMatrix2x3fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix2x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix2x4fv, (location, count, transpose, value), (F, "glUniformMatrix2x4fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix3x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix3x2fv, (location, count, transpose, value), (F, "glUniformMatrix3x2fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix3x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix3x4fv, (location, count, transpose, value), (F, "glUniformMatrix3x4fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix4x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix4x2fv, (location, count, transpose, value), (F, "glUniformMatrix4x2fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix4x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix4x3fv, (location, count, transpose, value), (F, "glUniformMatrix4x3fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixd)(const GLdouble * m) +{ + DISPATCH(LoadTransposeMatrixdARB, (m), (F, "glLoadTransposeMatrixd(%p);\n", (const void *) m)); } KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixdARB)(const GLdouble * m) @@ -2120,9 +2799,19 @@ KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixdARB)(const GLdouble * m) DISPATCH(LoadTransposeMatrixdARB, (m), (F, "glLoadTransposeMatrixdARB(%p);\n", (const void *) m)); } -KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixfARB)(const GLfloat * m) +KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixf)(const GLfloat * m) { - DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixfARB(%p);\n", (const void *) m)); + DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixf(%p);\n", (const void *) m)); +} + +KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixfARB)(const GLfloat * m) +{ + DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixfARB(%p);\n", (const void *) m)); +} + +KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixd)(const GLdouble * m) +{ + DISPATCH(MultTransposeMatrixdARB, (m), (F, "glMultTransposeMatrixd(%p);\n", (const void *) m)); } KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixdARB)(const GLdouble * m) @@ -2130,182 +2819,1198 @@ KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixdARB)(const GLdouble * m) DISPATCH(MultTransposeMatrixdARB, (m), (F, "glMultTransposeMatrixdARB(%p);\n", (const void *) m)); } +KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixf)(const GLfloat * m) +{ + DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixf(%p);\n", (const void *) m)); +} + +KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixfARB)(const GLfloat * m) +{ + DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixfARB(%p);\n", (const void *) m)); +} + +KEYWORD1 void KEYWORD2 NAME(SampleCoverage)(GLclampf value, GLboolean invert) +{ + DISPATCH(SampleCoverageARB, (value, invert), (F, "glSampleCoverage(%f, %d);\n", value, invert)); +} + KEYWORD1 void KEYWORD2 NAME(SampleCoverageARB)(GLclampf value, GLboolean invert) { DISPATCH(SampleCoverageARB, (value, invert), (F, "glSampleCoverageARB(%f, %d);\n", value, invert)); } +KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1D(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1DARB(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2D(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3D(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1D(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1DARB(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2DARB(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3D(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) +{ + DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3DARB(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImage)(GLenum target, GLint level, GLvoid * img) +{ + DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImage(0x%x, %d, %p);\n", target, level, (const void *) img)); +} + +KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img) +{ + DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImageARB(0x%x, %d, %p);\n", target, level, (const void *) img)); +} + +KEYWORD1 void KEYWORD2 NAME(DisableVertexAttribArray)(GLuint index) +{ + DISPATCH(DisableVertexAttribArrayARB, (index), (F, "glDisableVertexAttribArray(%d);\n", index)); +} + +KEYWORD1 void KEYWORD2 NAME(DisableVertexAttribArrayARB)(GLuint index) +{ + DISPATCH(DisableVertexAttribArrayARB, (index), (F, "glDisableVertexAttribArrayARB(%d);\n", index)); +} + +KEYWORD1 void KEYWORD2 NAME(EnableVertexAttribArray)(GLuint index) +{ + DISPATCH(EnableVertexAttribArrayARB, (index), (F, "glEnableVertexAttribArray(%d);\n", index)); +} + +KEYWORD1 void KEYWORD2 NAME(EnableVertexAttribArrayARB)(GLuint index) +{ + DISPATCH(EnableVertexAttribArrayARB, (index), (F, "glEnableVertexAttribArrayARB(%d);\n", index)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params) +{ + DISPATCH(GetProgramEnvParameterdvARB, (target, index, params), (F, "glGetProgramEnvParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params) +{ + DISPATCH(GetProgramEnvParameterfvARB, (target, index, params), (F, "glGetProgramEnvParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params) +{ + DISPATCH(GetProgramLocalParameterdvARB, (target, index, params), (F, "glGetProgramLocalParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params) +{ + DISPATCH(GetProgramLocalParameterfvARB, (target, index, params), (F, "glGetProgramLocalParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string) +{ + DISPATCH(GetProgramStringARB, (target, pname, string), (F, "glGetProgramStringARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) string)); +} + +KEYWORD1 void KEYWORD2 NAME(GetProgramivARB)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetProgramivARB, (target, pname, params), (F, "glGetProgramivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdv)(GLuint index, GLenum pname, GLdouble * params) +{ + DISPATCH(GetVertexAttribdvARB, (index, pname, params), (F, "glGetVertexAttribdv(%d, 0x%x, %p);\n", index, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params) +{ + DISPATCH(GetVertexAttribdvARB, (index, pname, params), (F, "glGetVertexAttribdvARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfv)(GLuint index, GLenum pname, GLfloat * params) +{ + DISPATCH(GetVertexAttribfvARB, (index, pname, params), (F, "glGetVertexAttribfv(%d, 0x%x, %p);\n", index, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params) +{ + DISPATCH(GetVertexAttribfvARB, (index, pname, params), (F, "glGetVertexAttribfvARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribiv)(GLuint index, GLenum pname, GLint * params) +{ + DISPATCH(GetVertexAttribivARB, (index, pname, params), (F, "glGetVertexAttribiv(%d, 0x%x, %p);\n", index, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params) +{ + DISPATCH(GetVertexAttribivARB, (index, pname, params), (F, "glGetVertexAttribivARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) +{ + DISPATCH(ProgramEnvParameter4dARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params) +{ + DISPATCH(ProgramEnvParameter4dvARB, (target, index, params), (F, "glProgramEnvParameter4dvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ + DISPATCH(ProgramEnvParameter4fARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params) +{ + DISPATCH(ProgramEnvParameter4fvARB, (target, index, params), (F, "glProgramEnvParameter4fvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) +{ + DISPATCH(ProgramLocalParameter4dARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params) +{ + DISPATCH(ProgramLocalParameter4dvARB, (target, index, params), (F, "glProgramLocalParameter4dvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ + DISPATCH(ProgramLocalParameter4fARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params) +{ + DISPATCH(ProgramLocalParameter4fvARB, (target, index, params), (F, "glProgramLocalParameter4fvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string) +{ + DISPATCH(ProgramStringARB, (target, format, len, string), (F, "glProgramStringARB(0x%x, 0x%x, %d, %p);\n", target, format, len, (const void *) string)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1d)(GLuint index, GLdouble x) +{ + DISPATCH(VertexAttrib1dARB, (index, x), (F, "glVertexAttrib1d(%d, %f);\n", index, x)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dARB)(GLuint index, GLdouble x) +{ + DISPATCH(VertexAttrib1dARB, (index, x), (F, "glVertexAttrib1dARB(%d, %f);\n", index, x)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dv)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib1dvARB, (index, v), (F, "glVertexAttrib1dv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dvARB)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib1dvARB, (index, v), (F, "glVertexAttrib1dvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1f)(GLuint index, GLfloat x) +{ + DISPATCH(VertexAttrib1fARB, (index, x), (F, "glVertexAttrib1f(%d, %f);\n", index, x)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fARB)(GLuint index, GLfloat x) +{ + DISPATCH(VertexAttrib1fARB, (index, x), (F, "glVertexAttrib1fARB(%d, %f);\n", index, x)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fv)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib1fvARB, (index, v), (F, "glVertexAttrib1fv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fvARB)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib1fvARB, (index, v), (F, "glVertexAttrib1fvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1s)(GLuint index, GLshort x) +{ + DISPATCH(VertexAttrib1sARB, (index, x), (F, "glVertexAttrib1s(%d, %d);\n", index, x)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sARB)(GLuint index, GLshort x) +{ + DISPATCH(VertexAttrib1sARB, (index, x), (F, "glVertexAttrib1sARB(%d, %d);\n", index, x)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sv)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib1svARB, (index, v), (F, "glVertexAttrib1sv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib1svARB)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib1svARB, (index, v), (F, "glVertexAttrib1svARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2d)(GLuint index, GLdouble x, GLdouble y) +{ + DISPATCH(VertexAttrib2dARB, (index, x, y), (F, "glVertexAttrib2d(%d, %f, %f);\n", index, x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y) +{ + DISPATCH(VertexAttrib2dARB, (index, x, y), (F, "glVertexAttrib2dARB(%d, %f, %f);\n", index, x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dv)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib2dvARB, (index, v), (F, "glVertexAttrib2dv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dvARB)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib2dvARB, (index, v), (F, "glVertexAttrib2dvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2f)(GLuint index, GLfloat x, GLfloat y) +{ + DISPATCH(VertexAttrib2fARB, (index, x, y), (F, "glVertexAttrib2f(%d, %f, %f);\n", index, x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y) +{ + DISPATCH(VertexAttrib2fARB, (index, x, y), (F, "glVertexAttrib2fARB(%d, %f, %f);\n", index, x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fv)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib2fvARB, (index, v), (F, "glVertexAttrib2fv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvARB)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib2fvARB, (index, v), (F, "glVertexAttrib2fvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2s)(GLuint index, GLshort x, GLshort y) +{ + DISPATCH(VertexAttrib2sARB, (index, x, y), (F, "glVertexAttrib2s(%d, %d, %d);\n", index, x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2sARB)(GLuint index, GLshort x, GLshort y) +{ + DISPATCH(VertexAttrib2sARB, (index, x, y), (F, "glVertexAttrib2sARB(%d, %d, %d);\n", index, x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2sv)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib2svARB, (index, v), (F, "glVertexAttrib2sv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib2svARB)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib2svARB, (index, v), (F, "glVertexAttrib2svARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z) +{ + DISPATCH(VertexAttrib3dARB, (index, x, y, z), (F, "glVertexAttrib3d(%d, %f, %f, %f);\n", index, x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z) +{ + DISPATCH(VertexAttrib3dARB, (index, x, y, z), (F, "glVertexAttrib3dARB(%d, %f, %f, %f);\n", index, x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dv)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib3dvARB, (index, v), (F, "glVertexAttrib3dv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dvARB)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib3dvARB, (index, v), (F, "glVertexAttrib3dvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z) +{ + DISPATCH(VertexAttrib3fARB, (index, x, y, z), (F, "glVertexAttrib3f(%d, %f, %f, %f);\n", index, x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z) +{ + DISPATCH(VertexAttrib3fARB, (index, x, y, z), (F, "glVertexAttrib3fARB(%d, %f, %f, %f);\n", index, x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fv)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib3fvARB, (index, v), (F, "glVertexAttrib3fv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvARB)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib3fvARB, (index, v), (F, "glVertexAttrib3fvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z) +{ + DISPATCH(VertexAttrib3sARB, (index, x, y, z), (F, "glVertexAttrib3s(%d, %d, %d, %d);\n", index, x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z) +{ + DISPATCH(VertexAttrib3sARB, (index, x, y, z), (F, "glVertexAttrib3sARB(%d, %d, %d, %d);\n", index, x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3sv)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib3svARB, (index, v), (F, "glVertexAttrib3sv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svARB)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib3svARB, (index, v), (F, "glVertexAttrib3svARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4Nbv)(GLuint index, const GLbyte * v) +{ + DISPATCH(VertexAttrib4NbvARB, (index, v), (F, "glVertexAttrib4Nbv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NbvARB)(GLuint index, const GLbyte * v) +{ + DISPATCH(VertexAttrib4NbvARB, (index, v), (F, "glVertexAttrib4NbvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4Niv)(GLuint index, const GLint * v) +{ + DISPATCH(VertexAttrib4NivARB, (index, v), (F, "glVertexAttrib4Niv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NivARB)(GLuint index, const GLint * v) +{ + DISPATCH(VertexAttrib4NivARB, (index, v), (F, "glVertexAttrib4NivARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4Nsv)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib4NsvARB, (index, v), (F, "glVertexAttrib4Nsv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NsvARB)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib4NsvARB, (index, v), (F, "glVertexAttrib4NsvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) +{ + DISPATCH(VertexAttrib4NubARB, (index, x, y, z, w), (F, "glVertexAttrib4Nub(%d, %d, %d, %d, %d);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) +{ + DISPATCH(VertexAttrib4NubARB, (index, x, y, z, w), (F, "glVertexAttrib4NubARB(%d, %d, %d, %d, %d);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4Nubv)(GLuint index, const GLubyte * v) +{ + DISPATCH(VertexAttrib4NubvARB, (index, v), (F, "glVertexAttrib4Nubv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NubvARB)(GLuint index, const GLubyte * v) +{ + DISPATCH(VertexAttrib4NubvARB, (index, v), (F, "glVertexAttrib4NubvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4Nuiv)(GLuint index, const GLuint * v) +{ + DISPATCH(VertexAttrib4NuivARB, (index, v), (F, "glVertexAttrib4Nuiv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NuivARB)(GLuint index, const GLuint * v) +{ + DISPATCH(VertexAttrib4NuivARB, (index, v), (F, "glVertexAttrib4NuivARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4Nusv)(GLuint index, const GLushort * v) +{ + DISPATCH(VertexAttrib4NusvARB, (index, v), (F, "glVertexAttrib4Nusv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NusvARB)(GLuint index, const GLushort * v) +{ + DISPATCH(VertexAttrib4NusvARB, (index, v), (F, "glVertexAttrib4NusvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4bvARB)(GLuint index, const GLbyte * v) +{ + DISPATCH(VertexAttrib4bvARB, (index, v), (F, "glVertexAttrib4bvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) +{ + DISPATCH(VertexAttrib4dARB, (index, x, y, z, w), (F, "glVertexAttrib4d(%d, %f, %f, %f, %f);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) +{ + DISPATCH(VertexAttrib4dARB, (index, x, y, z, w), (F, "glVertexAttrib4dARB(%d, %f, %f, %f, %f);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dv)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib4dvARB, (index, v), (F, "glVertexAttrib4dv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvARB)(GLuint index, const GLdouble * v) +{ + DISPATCH(VertexAttrib4dvARB, (index, v), (F, "glVertexAttrib4dvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ + DISPATCH(VertexAttrib4fARB, (index, x, y, z, w), (F, "glVertexAttrib4f(%d, %f, %f, %f, %f);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ + DISPATCH(VertexAttrib4fARB, (index, x, y, z, w), (F, "glVertexAttrib4fARB(%d, %f, %f, %f, %f);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fv)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib4fvARB, (index, v), (F, "glVertexAttrib4fv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fvARB)(GLuint index, const GLfloat * v) +{ + DISPATCH(VertexAttrib4fvARB, (index, v), (F, "glVertexAttrib4fvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ivARB)(GLuint index, const GLint * v) +{ + DISPATCH(VertexAttrib4ivARB, (index, v), (F, "glVertexAttrib4ivARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) +{ + DISPATCH(VertexAttrib4sARB, (index, x, y, z, w), (F, "glVertexAttrib4s(%d, %d, %d, %d, %d);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) +{ + DISPATCH(VertexAttrib4sARB, (index, x, y, z, w), (F, "glVertexAttrib4sARB(%d, %d, %d, %d, %d);\n", index, x, y, z, w)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4sv)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib4svARB, (index, v), (F, "glVertexAttrib4sv(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svARB)(GLuint index, const GLshort * v) +{ + DISPATCH(VertexAttrib4svARB, (index, v), (F, "glVertexAttrib4svARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvARB)(GLuint index, const GLubyte * v) +{ + DISPATCH(VertexAttrib4ubvARB, (index, v), (F, "glVertexAttrib4ubvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4uivARB)(GLuint index, const GLuint * v) +{ + DISPATCH(VertexAttrib4uivARB, (index, v), (F, "glVertexAttrib4uivARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttrib4usvARB)(GLuint index, const GLushort * v) +{ + DISPATCH(VertexAttrib4usvARB, (index, v), (F, "glVertexAttrib4usvARB(%d, %p);\n", index, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttribPointer)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) +{ + DISPATCH(VertexAttribPointerARB, (index, size, type, normalized, stride, pointer), (F, "glVertexAttribPointer(%d, %d, 0x%x, %d, %d, %p);\n", index, size, type, normalized, stride, (const void *) pointer)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) +{ + DISPATCH(VertexAttribPointerARB, (index, size, type, normalized, stride, pointer), (F, "glVertexAttribPointerARB(%d, %d, 0x%x, %d, %d, %p);\n", index, size, type, normalized, stride, (const void *) pointer)); +} + +KEYWORD1 void KEYWORD2 NAME(BindBuffer)(GLenum target, GLuint buffer) +{ + DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBuffer(0x%x, %d);\n", target, buffer)); +} + +KEYWORD1 void KEYWORD2 NAME(BindBufferARB)(GLenum target, GLuint buffer) +{ + DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBufferARB(0x%x, %d);\n", target, buffer)); +} + +KEYWORD1 void KEYWORD2 NAME(BufferData)(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) +{ + DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferData(0x%x, %d, %p, 0x%x);\n", target, size, (const void *) data, usage)); +} + +KEYWORD1 void KEYWORD2 NAME(BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage) +{ + DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferDataARB(0x%x, %d, %p, 0x%x);\n", target, size, (const void *) data, usage)); +} + +KEYWORD1 void KEYWORD2 NAME(BufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) +{ + DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubData(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data) +{ + DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteBuffers)(GLsizei n, const GLuint * buffer) +{ + DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffers(%d, %p);\n", n, (const void *) buffer)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteBuffersARB)(GLsizei n, const GLuint * buffer) +{ + DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffersARB(%d, %p);\n", n, (const void *) buffer)); +} + +KEYWORD1 void KEYWORD2 NAME(GenBuffers)(GLsizei n, GLuint * buffer) +{ + DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffers(%d, %p);\n", n, (const void *) buffer)); +} + +KEYWORD1 void KEYWORD2 NAME(GenBuffersARB)(GLsizei n, GLuint * buffer) +{ + DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffersARB(%d, %p);\n", n, (const void *) buffer)); +} + +KEYWORD1 void KEYWORD2 NAME(GetBufferParameteriv)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameterivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetBufferPointerv)(GLenum target, GLenum pname, GLvoid ** params) +{ + DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointerv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params) +{ + DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointervARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data) +{ + DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubData(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); +} + +KEYWORD1 void KEYWORD2 NAME(GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data) +{ + DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsBuffer)(GLuint buffer) +{ + RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBuffer(%d);\n", buffer)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsBufferARB)(GLuint buffer) +{ + RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBufferARB(%d);\n", buffer)); +} + +KEYWORD1 GLvoid * KEYWORD2 NAME(MapBuffer)(GLenum target, GLenum access) +{ + RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBuffer(0x%x, 0x%x);\n", target, access)); +} + +KEYWORD1 GLvoid * KEYWORD2 NAME(MapBufferARB)(GLenum target, GLenum access) +{ + RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBufferARB(0x%x, 0x%x);\n", target, access)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBuffer)(GLenum target) +{ + RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBuffer(0x%x);\n", target)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBufferARB)(GLenum target) +{ + RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBufferARB(0x%x);\n", target)); +} + +KEYWORD1 void KEYWORD2 NAME(BeginQuery)(GLenum target, GLuint id) +{ + DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQuery(0x%x, %d);\n", target, id)); +} + +KEYWORD1 void KEYWORD2 NAME(BeginQueryARB)(GLenum target, GLuint id) +{ + DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQueryARB(0x%x, %d);\n", target, id)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteQueries)(GLsizei n, const GLuint * ids) +{ + DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueries(%d, %p);\n", n, (const void *) ids)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteQueriesARB)(GLsizei n, const GLuint * ids) +{ + DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueriesARB(%d, %p);\n", n, (const void *) ids)); +} + +KEYWORD1 void KEYWORD2 NAME(EndQuery)(GLenum target) +{ + DISPATCH(EndQueryARB, (target), (F, "glEndQuery(0x%x);\n", target)); +} + +KEYWORD1 void KEYWORD2 NAME(EndQueryARB)(GLenum target) +{ + DISPATCH(EndQueryARB, (target), (F, "glEndQueryARB(0x%x);\n", target)); +} + +KEYWORD1 void KEYWORD2 NAME(GenQueries)(GLsizei n, GLuint * ids) +{ + DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueries(%d, %p);\n", n, (const void *) ids)); +} + +KEYWORD1 void KEYWORD2 NAME(GenQueriesARB)(GLsizei n, GLuint * ids) +{ + DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueriesARB(%d, %p);\n", n, (const void *) ids)); +} + +KEYWORD1 void KEYWORD2 NAME(GetQueryObjectiv)(GLuint id, GLenum pname, GLint * params) +{ + DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectiv(%d, 0x%x, %p);\n", id, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params) +{ + DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuiv)(GLuint id, GLenum pname, GLuint * params) +{ + DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuiv(%d, 0x%x, %p);\n", id, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params) +{ + DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetQueryiv)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetQueryivARB)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsQuery)(GLuint id) +{ + RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQuery(%d);\n", id)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsQueryARB)(GLuint id) +{ + RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQueryARB(%d);\n", id)); +} + +KEYWORD1 void KEYWORD2 NAME(AttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj) +{ + DISPATCH(AttachObjectARB, (containerObj, obj), (F, "glAttachObjectARB(%d, %d);\n", containerObj, obj)); +} + +KEYWORD1 void KEYWORD2 NAME(CompileShader)(GLuint shader) +{ + DISPATCH(CompileShaderARB, (shader), (F, "glCompileShader(%d);\n", shader)); +} + +KEYWORD1 void KEYWORD2 NAME(CompileShaderARB)(GLhandleARB shader) +{ + DISPATCH(CompileShaderARB, (shader), (F, "glCompileShaderARB(%d);\n", shader)); +} + +KEYWORD1 GLhandleARB KEYWORD2 NAME(CreateProgramObjectARB)(void) +{ + RETURN_DISPATCH(CreateProgramObjectARB, (), (F, "glCreateProgramObjectARB();\n")); +} + +KEYWORD1 GLhandleARB KEYWORD2 NAME(CreateShaderObjectARB)(GLenum shaderType) +{ + RETURN_DISPATCH(CreateShaderObjectARB, (shaderType), (F, "glCreateShaderObjectARB(0x%x);\n", shaderType)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteObjectARB)(GLhandleARB obj) +{ + DISPATCH(DeleteObjectARB, (obj), (F, "glDeleteObjectARB(%d);\n", obj)); +} + +KEYWORD1 void KEYWORD2 NAME(DetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj) +{ + DISPATCH(DetachObjectARB, (containerObj, attachedObj), (F, "glDetachObjectARB(%d, %d);\n", containerObj, attachedObj)); +} + +KEYWORD1 void KEYWORD2 NAME(GetActiveUniform)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) +{ + DISPATCH(GetActiveUniformARB, (program, index, bufSize, length, size, type, name), (F, "glGetActiveUniform(%d, %d, %d, %p, %p, %p, %p);\n", program, index, bufSize, (const void *) length, (const void *) size, (const void *) type, (const void *) name)); +} + +KEYWORD1 void KEYWORD2 NAME(GetActiveUniformARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) +{ + DISPATCH(GetActiveUniformARB, (program, index, bufSize, length, size, type, name), (F, "glGetActiveUniformARB(%d, %d, %d, %p, %p, %p, %p);\n", program, index, bufSize, (const void *) length, (const void *) size, (const void *) type, (const void *) name)); +} + +KEYWORD1 void KEYWORD2 NAME(GetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxLength, GLsizei * length, GLhandleARB * infoLog) +{ + DISPATCH(GetAttachedObjectsARB, (containerObj, maxLength, length, infoLog), (F, "glGetAttachedObjectsARB(%d, %d, %p, %p);\n", containerObj, maxLength, (const void *) length, (const void *) infoLog)); +} + +KEYWORD1 GLhandleARB KEYWORD2 NAME(GetHandleARB)(GLenum pname) +{ + RETURN_DISPATCH(GetHandleARB, (pname), (F, "glGetHandleARB(0x%x);\n", pname)); +} + +KEYWORD1 void KEYWORD2 NAME(GetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog) +{ + DISPATCH(GetInfoLogARB, (obj, maxLength, length, infoLog), (F, "glGetInfoLogARB(%d, %d, %p, %p);\n", obj, maxLength, (const void *) length, (const void *) infoLog)); +} + +KEYWORD1 void KEYWORD2 NAME(GetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params) +{ + DISPATCH(GetObjectParameterfvARB, (obj, pname, params), (F, "glGetObjectParameterfvARB(%d, 0x%x, %p);\n", obj, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params) +{ + DISPATCH(GetObjectParameterivARB, (obj, pname, params), (F, "glGetObjectParameterivARB(%d, 0x%x, %p);\n", obj, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetShaderSource)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source) +{ + DISPATCH(GetShaderSourceARB, (shader, bufSize, length, source), (F, "glGetShaderSource(%d, %d, %p, %p);\n", shader, bufSize, (const void *) length, (const void *) source)); +} + +KEYWORD1 void KEYWORD2 NAME(GetShaderSourceARB)(GLhandleARB shader, GLsizei bufSize, GLsizei * length, GLcharARB * source) +{ + DISPATCH(GetShaderSourceARB, (shader, bufSize, length, source), (F, "glGetShaderSourceARB(%d, %d, %p, %p);\n", shader, bufSize, (const void *) length, (const void *) source)); +} + +KEYWORD1 GLint KEYWORD2 NAME(GetUniformLocation)(GLuint program, const GLchar * name) +{ + RETURN_DISPATCH(GetUniformLocationARB, (program, name), (F, "glGetUniformLocation(%d, %p);\n", program, (const void *) name)); +} + +KEYWORD1 GLint KEYWORD2 NAME(GetUniformLocationARB)(GLhandleARB program, const GLcharARB * name) +{ + RETURN_DISPATCH(GetUniformLocationARB, (program, name), (F, "glGetUniformLocationARB(%d, %p);\n", program, (const void *) name)); +} + +KEYWORD1 void KEYWORD2 NAME(GetUniformfv)(GLuint program, GLint location, GLfloat * params) +{ + DISPATCH(GetUniformfvARB, (program, location, params), (F, "glGetUniformfv(%d, %d, %p);\n", program, location, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetUniformfvARB)(GLhandleARB program, GLint location, GLfloat * params) +{ + DISPATCH(GetUniformfvARB, (program, location, params), (F, "glGetUniformfvARB(%d, %d, %p);\n", program, location, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetUniformiv)(GLuint program, GLint location, GLint * params) +{ + DISPATCH(GetUniformivARB, (program, location, params), (F, "glGetUniformiv(%d, %d, %p);\n", program, location, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetUniformivARB)(GLhandleARB program, GLint location, GLint * params) +{ + DISPATCH(GetUniformivARB, (program, location, params), (F, "glGetUniformivARB(%d, %d, %p);\n", program, location, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(LinkProgram)(GLuint program) +{ + DISPATCH(LinkProgramARB, (program), (F, "glLinkProgram(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(LinkProgramARB)(GLhandleARB program) +{ + DISPATCH(LinkProgramARB, (program), (F, "glLinkProgramARB(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(ShaderSource)(GLuint shader, GLsizei count, const GLchar ** string, const GLint * length) +{ + DISPATCH(ShaderSourceARB, (shader, count, string, length), (F, "glShaderSource(%d, %d, %p, %p);\n", shader, count, (const void *) string, (const void *) length)); +} + +KEYWORD1 void KEYWORD2 NAME(ShaderSourceARB)(GLhandleARB shader, GLsizei count, const GLcharARB ** string, const GLint * length) +{ + DISPATCH(ShaderSourceARB, (shader, count, string, length), (F, "glShaderSourceARB(%d, %d, %p, %p);\n", shader, count, (const void *) string, (const void *) length)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1f)(GLint location, GLfloat v0) +{ + DISPATCH(Uniform1fARB, (location, v0), (F, "glUniform1f(%d, %f);\n", location, v0)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1fARB)(GLint location, GLfloat v0) +{ + DISPATCH(Uniform1fARB, (location, v0), (F, "glUniform1fARB(%d, %f);\n", location, v0)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1fv)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform1fvARB, (location, count, value), (F, "glUniform1fv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1fvARB)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform1fvARB, (location, count, value), (F, "glUniform1fvARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1i)(GLint location, GLint v0) +{ + DISPATCH(Uniform1iARB, (location, v0), (F, "glUniform1i(%d, %d);\n", location, v0)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1iARB)(GLint location, GLint v0) +{ + DISPATCH(Uniform1iARB, (location, v0), (F, "glUniform1iARB(%d, %d);\n", location, v0)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1iv)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform1ivARB, (location, count, value), (F, "glUniform1iv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform1ivARB)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform1ivARB, (location, count, value), (F, "glUniform1ivARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2f)(GLint location, GLfloat v0, GLfloat v1) +{ + DISPATCH(Uniform2fARB, (location, v0, v1), (F, "glUniform2f(%d, %f, %f);\n", location, v0, v1)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2fARB)(GLint location, GLfloat v0, GLfloat v1) +{ + DISPATCH(Uniform2fARB, (location, v0, v1), (F, "glUniform2fARB(%d, %f, %f);\n", location, v0, v1)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2fv)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform2fvARB, (location, count, value), (F, "glUniform2fv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2fvARB)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform2fvARB, (location, count, value), (F, "glUniform2fvARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2i)(GLint location, GLint v0, GLint v1) +{ + DISPATCH(Uniform2iARB, (location, v0, v1), (F, "glUniform2i(%d, %d, %d);\n", location, v0, v1)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2iARB)(GLint location, GLint v0, GLint v1) +{ + DISPATCH(Uniform2iARB, (location, v0, v1), (F, "glUniform2iARB(%d, %d, %d);\n", location, v0, v1)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2iv)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform2ivARB, (location, count, value), (F, "glUniform2iv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform2ivARB)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform2ivARB, (location, count, value), (F, "glUniform2ivARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) +{ + DISPATCH(Uniform3fARB, (location, v0, v1, v2), (F, "glUniform3f(%d, %f, %f, %f);\n", location, v0, v1, v2)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) +{ + DISPATCH(Uniform3fARB, (location, v0, v1, v2), (F, "glUniform3fARB(%d, %f, %f, %f);\n", location, v0, v1, v2)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3fv)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform3fvARB, (location, count, value), (F, "glUniform3fv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3fvARB)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform3fvARB, (location, count, value), (F, "glUniform3fvARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3i)(GLint location, GLint v0, GLint v1, GLint v2) +{ + DISPATCH(Uniform3iARB, (location, v0, v1, v2), (F, "glUniform3i(%d, %d, %d, %d);\n", location, v0, v1, v2)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2) +{ + DISPATCH(Uniform3iARB, (location, v0, v1, v2), (F, "glUniform3iARB(%d, %d, %d, %d);\n", location, v0, v1, v2)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3iv)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform3ivARB, (location, count, value), (F, "glUniform3iv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform3ivARB)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform3ivARB, (location, count, value), (F, "glUniform3ivARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) +{ + DISPATCH(Uniform4fARB, (location, v0, v1, v2, v3), (F, "glUniform4f(%d, %f, %f, %f, %f);\n", location, v0, v1, v2, v3)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) +{ + DISPATCH(Uniform4fARB, (location, v0, v1, v2, v3), (F, "glUniform4fARB(%d, %f, %f, %f, %f);\n", location, v0, v1, v2, v3)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4fv)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform4fvARB, (location, count, value), (F, "glUniform4fv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4fvARB)(GLint location, GLsizei count, const GLfloat * value) +{ + DISPATCH(Uniform4fvARB, (location, count, value), (F, "glUniform4fvARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4i)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) +{ + DISPATCH(Uniform4iARB, (location, v0, v1, v2, v3), (F, "glUniform4i(%d, %d, %d, %d, %d);\n", location, v0, v1, v2, v3)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) +{ + DISPATCH(Uniform4iARB, (location, v0, v1, v2, v3), (F, "glUniform4iARB(%d, %d, %d, %d, %d);\n", location, v0, v1, v2, v3)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4iv)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform4ivARB, (location, count, value), (F, "glUniform4iv(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(Uniform4ivARB)(GLint location, GLsizei count, const GLint * value) +{ + DISPATCH(Uniform4ivARB, (location, count, value), (F, "glUniform4ivARB(%d, %d, %p);\n", location, count, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix2fvARB, (location, count, transpose, value), (F, "glUniformMatrix2fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix2fvARB, (location, count, transpose, value), (F, "glUniformMatrix2fvARB(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix3fvARB, (location, count, transpose, value), (F, "glUniformMatrix3fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix3fvARB, (location, count, transpose, value), (F, "glUniformMatrix3fvARB(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix4fvARB, (location, count, transpose, value), (F, "glUniformMatrix4fv(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) +{ + DISPATCH(UniformMatrix4fvARB, (location, count, transpose, value), (F, "glUniformMatrix4fvARB(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); +} + +KEYWORD1 void KEYWORD2 NAME(UseProgram)(GLuint program) +{ + DISPATCH(UseProgramObjectARB, (program), (F, "glUseProgram(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(UseProgramObjectARB)(GLhandleARB program) +{ + DISPATCH(UseProgramObjectARB, (program), (F, "glUseProgramObjectARB(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(ValidateProgram)(GLuint program) +{ + DISPATCH(ValidateProgramARB, (program), (F, "glValidateProgram(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(ValidateProgramARB)(GLhandleARB program) +{ + DISPATCH(ValidateProgramARB, (program), (F, "glValidateProgramARB(%d);\n", program)); +} + +KEYWORD1 void KEYWORD2 NAME(BindAttribLocation)(GLuint program, GLuint index, const GLchar * name) +{ + DISPATCH(BindAttribLocationARB, (program, index, name), (F, "glBindAttribLocation(%d, %d, %p);\n", program, index, (const void *) name)); +} + +KEYWORD1 void KEYWORD2 NAME(BindAttribLocationARB)(GLhandleARB program, GLuint index, const GLcharARB * name) +{ + DISPATCH(BindAttribLocationARB, (program, index, name), (F, "glBindAttribLocationARB(%d, %d, %p);\n", program, index, (const void *) name)); +} + +KEYWORD1 void KEYWORD2 NAME(GetActiveAttrib)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) +{ + DISPATCH(GetActiveAttribARB, (program, index, bufSize, length, size, type, name), (F, "glGetActiveAttrib(%d, %d, %d, %p, %p, %p, %p);\n", program, index, bufSize, (const void *) length, (const void *) size, (const void *) type, (const void *) name)); +} + +KEYWORD1 void KEYWORD2 NAME(GetActiveAttribARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) +{ + DISPATCH(GetActiveAttribARB, (program, index, bufSize, length, size, type, name), (F, "glGetActiveAttribARB(%d, %d, %d, %p, %p, %p, %p);\n", program, index, bufSize, (const void *) length, (const void *) size, (const void *) type, (const void *) name)); +} + +KEYWORD1 GLint KEYWORD2 NAME(GetAttribLocation)(GLuint program, const GLchar * name) +{ + RETURN_DISPATCH(GetAttribLocationARB, (program, name), (F, "glGetAttribLocation(%d, %p);\n", program, (const void *) name)); +} + +KEYWORD1 GLint KEYWORD2 NAME(GetAttribLocationARB)(GLhandleARB program, const GLcharARB * name) +{ + RETURN_DISPATCH(GetAttribLocationARB, (program, name), (F, "glGetAttribLocationARB(%d, %p);\n", program, (const void *) name)); +} + +KEYWORD1 void KEYWORD2 NAME(DrawBuffers)(GLsizei n, const GLenum * bufs) +{ + DISPATCH(DrawBuffersARB, (n, bufs), (F, "glDrawBuffers(%d, %p);\n", n, (const void *) bufs)); +} + KEYWORD1 void KEYWORD2 NAME(DrawBuffersARB)(GLsizei n, const GLenum * bufs) { DISPATCH(DrawBuffersARB, (n, bufs), (F, "glDrawBuffersARB(%d, %p);\n", n, (const void *) bufs)); } +KEYWORD1 void KEYWORD2 NAME(DrawBuffersATI)(GLsizei n, const GLenum * bufs) +{ + DISPATCH(DrawBuffersARB, (n, bufs), (F, "glDrawBuffersATI(%d, %p);\n", n, (const void *) bufs)); +} + KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias) { DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias)); } -KEYWORD1 void KEYWORD2 NAME(GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights) -{ - DISPATCH(GetTexFilterFuncSGIS, (target, filter, weights), (F, "glGetTexFilterFuncSGIS(0x%x, 0x%x, %p);\n", target, filter, (const void *) weights)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_562)(GLenum pname, GLfloat * params); -KEYWORD1 void KEYWORD2 NAME(TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights) -{ - DISPATCH(TexFilterFuncSGIS, (target, filter, n, weights), (F, "glTexFilterFuncSGIS(0x%x, 0x%x, %d, %p);\n", target, filter, n, (const void *) weights)); -} - -KEYWORD1 void KEYWORD2 NAME(GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) -{ - DISPATCH(GetHistogramEXT, (target, reset, format, type, values), (F, "glGetHistogramEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); -} - -KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetHistogramParameterfvEXT, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetHistogramParameterivEXT, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) -{ - DISPATCH(GetMinmaxEXT, (target, reset, format, type, values), (F, "glGetMinmaxEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); -} - -KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetMinmaxParameterfvEXT, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetMinmaxParameterivEXT, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image) -{ - DISPATCH(GetConvolutionFilterEXT, (target, format, type, image), (F, "glGetConvolutionFilterEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image)); -} - -KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetConvolutionParameterfvEXT, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetConvolutionParameterivEXT, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) -{ - DISPATCH(GetSeparableFilterEXT, (target, format, type, row, column, span), (F, "glGetSeparableFilterEXT(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span)); -} - -KEYWORD1 void KEYWORD2 NAME(GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table) -{ - DISPATCH(GetColorTableSGI, (target, format, type, table), (F, "glGetColorTableSGI(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); -} - -KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetColorTableParameterfvSGI, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetColorTableParameterivSGI, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(PixelTexGenSGIX)(GLenum mode) -{ - DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode)); -} - -KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameteriSGIS)(GLenum pname, GLint param) -{ - DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param)); -} - -KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params) -{ - DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param) -{ - DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param)); -} - -KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params) -{ - DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params) -{ - DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_562)(GLenum pname, GLfloat * params) { DISPATCH(GetPixelTexGenParameterfvSGIS, (pname, params), (F, "glGetPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(TexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_563)(GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_563)(GLenum pname, GLint * params) { - DISPATCH(TexImage4DSGIS, (target, level, internalformat, width, height, depth, size4d, border, format, type, pixels), (F, "glTexImage4DSGIS(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, size4d, border, format, type, (const void *) pixels)); + DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(TexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_564)(GLenum pname, GLfloat param); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_564)(GLenum pname, GLfloat param) { - DISPATCH(TexSubImage4DSGIS, (target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels), (F, "glTexSubImage4DSGIS(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, (const void *) pixels)); + DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param)); } -KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_565)(GLenum pname, const GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_565)(GLenum pname, const GLfloat * params) { - RETURN_DISPATCH(AreTexturesResidentEXT, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); + DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_566)(GLenum pname, GLint param); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_566)(GLenum pname, GLint param) { - DISPATCH(GenTexturesEXT, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures)); + DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param)); } -KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_567)(GLenum pname, const GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_567)(GLenum pname, const GLint * params) { - RETURN_DISPATCH(IsTextureEXT, (texture), (F, "glIsTextureEXT(%d);\n", texture)); + DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points) -{ - DISPATCH(DetailTexFuncSGIS, (target, n, points), (F, "glDetailTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_568)(GLclampf value, GLboolean invert); -KEYWORD1 void KEYWORD2 NAME(GetDetailTexFuncSGIS)(GLenum target, GLfloat * points) -{ - DISPATCH(GetDetailTexFuncSGIS, (target, points), (F, "glGetDetailTexFuncSGIS(0x%x, %p);\n", target, (const void *) points)); -} - -KEYWORD1 void KEYWORD2 NAME(SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points) -{ - DISPATCH(SharpenTexFuncSGIS, (target, n, points), (F, "glSharpenTexFuncSGIS(0x%x, %d, %p);\n", target, n, (const void *) points)); -} - -KEYWORD1 void KEYWORD2 NAME(GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points) -{ - DISPATCH(GetSharpenTexFuncSGIS, (target, points), (F, "glGetSharpenTexFuncSGIS(0x%x, %p);\n", target, (const void *) points)); -} - -KEYWORD1 void KEYWORD2 NAME(SampleMaskSGIS)(GLclampf value, GLboolean invert) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_568)(GLclampf value, GLboolean invert) { DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert)); } -KEYWORD1 void KEYWORD2 NAME(SamplePatternSGIS)(GLenum pattern) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_569)(GLenum pattern); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_569)(GLenum pattern) { DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern)); } @@ -2340,24 +4045,14 @@ KEYWORD1 void KEYWORD2 NAME(VertexPointerEXT)(GLint size, GLenum type, GLsizei s DISPATCH(VertexPointerEXT, (size, type, stride, count, pointer), (F, "glVertexPointerEXT(%d, 0x%x, %d, %d, %p);\n", size, type, stride, count, (const void *) pointer)); } -KEYWORD1 void KEYWORD2 NAME(SpriteParameterfSGIX)(GLenum pname, GLfloat param) +KEYWORD1 void KEYWORD2 NAME(PointParameterf)(GLenum pname, GLfloat param) { - DISPATCH(SpriteParameterfSGIX, (pname, param), (F, "glSpriteParameterfSGIX(0x%x, %f);\n", pname, param)); + DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterf(0x%x, %f);\n", pname, param)); } -KEYWORD1 void KEYWORD2 NAME(SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(PointParameterfARB)(GLenum pname, GLfloat param) { - DISPATCH(SpriteParameterfvSGIX, (pname, params), (F, "glSpriteParameterfvSGIX(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(SpriteParameteriSGIX)(GLenum pname, GLint param) -{ - DISPATCH(SpriteParameteriSGIX, (pname, param), (F, "glSpriteParameteriSGIX(0x%x, %d);\n", pname, param)); -} - -KEYWORD1 void KEYWORD2 NAME(SpriteParameterivSGIX)(GLenum pname, const GLint * params) -{ - DISPATCH(SpriteParameterivSGIX, (pname, params), (F, "glSpriteParameterivSGIX(0x%x, %p);\n", pname, (const void *) params)); + DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfARB(0x%x, %f);\n", pname, param)); } KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param) @@ -2365,194 +4060,321 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param) DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfEXT(0x%x, %f);\n", pname, param)); } +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_576)(GLenum pname, GLfloat param); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_576)(GLenum pname, GLfloat param) +{ + DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param)); +} + +KEYWORD1 void KEYWORD2 NAME(PointParameterfv)(GLenum pname, const GLfloat * params) +{ + DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfv(0x%x, %p);\n", pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(PointParameterfvARB)(GLenum pname, const GLfloat * params) +{ + DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvARB(0x%x, %p);\n", pname, (const void *) params)); +} + KEYWORD1 void KEYWORD2 NAME(PointParameterfvEXT)(GLenum pname, const GLfloat * params) { DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvEXT(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 GLint KEYWORD2 NAME(GetInstrumentsSGIX)(void) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_577)(GLenum pname, const GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_577)(GLenum pname, const GLfloat * params) { - RETURN_DISPATCH(GetInstrumentsSGIX, (), (F, "glGetInstrumentsSGIX();\n")); + DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(InstrumentsBufferSGIX)(GLsizei size, GLint * buffer) +KEYWORD1 void KEYWORD2 NAME(LockArraysEXT)(GLint first, GLsizei count) { - DISPATCH(InstrumentsBufferSGIX, (size, buffer), (F, "glInstrumentsBufferSGIX(%d, %p);\n", size, (const void *) buffer)); + DISPATCH(LockArraysEXT, (first, count), (F, "glLockArraysEXT(%d, %d);\n", first, count)); } -KEYWORD1 GLint KEYWORD2 NAME(PollInstrumentsSGIX)(GLint * marker_p) +KEYWORD1 void KEYWORD2 NAME(UnlockArraysEXT)(void) { - RETURN_DISPATCH(PollInstrumentsSGIX, (marker_p), (F, "glPollInstrumentsSGIX(%p);\n", (const void *) marker_p)); + DISPATCH(UnlockArraysEXT, (), (F, "glUnlockArraysEXT();\n")); } -KEYWORD1 void KEYWORD2 NAME(ReadInstrumentsSGIX)(GLint marker) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_580)(GLenum pname, GLdouble * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_580)(GLenum pname, GLdouble * params) { - DISPATCH(ReadInstrumentsSGIX, (marker), (F, "glReadInstrumentsSGIX(%d);\n", marker)); + DISPATCH(CullParameterdvEXT, (pname, params), (F, "glCullParameterdvEXT(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(StartInstrumentsSGIX)(void) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_581)(GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_581)(GLenum pname, GLfloat * params) { - DISPATCH(StartInstrumentsSGIX, (), (F, "glStartInstrumentsSGIX();\n")); + DISPATCH(CullParameterfvEXT, (pname, params), (F, "glCullParameterfvEXT(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(StopInstrumentsSGIX)(GLint marker) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3b)(GLbyte red, GLbyte green, GLbyte blue) { - DISPATCH(StopInstrumentsSGIX, (marker), (F, "glStopInstrumentsSGIX(%d);\n", marker)); + DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3b(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(FrameZoomSGIX)(GLint factor) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue) { - DISPATCH(FrameZoomSGIX, (factor), (F, "glFrameZoomSGIX(%d);\n", factor)); + DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3bEXT(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(TagSampleBufferSGIX)(void) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bv)(const GLbyte * v) { - DISPATCH(TagSampleBufferSGIX, (), (F, "glTagSampleBufferSGIX();\n")); + DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(ReferencePlaneSGIX)(const GLdouble * equation) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bvEXT)(const GLbyte * v) { - DISPATCH(ReferencePlaneSGIX, (equation), (F, "glReferencePlaneSGIX(%p);\n", (const void *) equation)); + DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bvEXT(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FlushRasterSGIX)(void) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3d)(GLdouble red, GLdouble green, GLdouble blue) { - DISPATCH(FlushRasterSGIX, (), (F, "glFlushRasterSGIX();\n")); + DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3d(%f, %f, %f);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue) { - DISPATCH(GetListParameterfvSGIX, (list, pname, params), (F, "glGetListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params)); + DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3dEXT(%f, %f, %f);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dv)(const GLdouble * v) { - DISPATCH(GetListParameterivSGIX, (list, pname, params), (F, "glGetListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params)); + DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dvEXT)(const GLdouble * v) { - DISPATCH(ListParameterfSGIX, (list, pname, param), (F, "glListParameterfSGIX(%d, 0x%x, %f);\n", list, pname, param)); + DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dvEXT(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue) { - DISPATCH(ListParameterfvSGIX, (list, pname, params), (F, "glListParameterfvSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params)); + DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3f(%f, %f, %f);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(ListParameteriSGIX)(GLuint list, GLenum pname, GLint param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue) { - DISPATCH(ListParameteriSGIX, (list, pname, param), (F, "glListParameteriSGIX(%d, 0x%x, %d);\n", list, pname, param)); + DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3fEXT(%f, %f, %f);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fv)(const GLfloat * v) { - DISPATCH(ListParameterivSGIX, (list, pname, params), (F, "glListParameterivSGIX(%d, 0x%x, %p);\n", list, pname, (const void *) params)); + DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FragmentColorMaterialSGIX)(GLenum face, GLenum mode) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fvEXT)(const GLfloat * v) { - DISPATCH(FragmentColorMaterialSGIX, (face, mode), (F, "glFragmentColorMaterialSGIX(0x%x, 0x%x);\n", face, mode)); + DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fvEXT(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3i)(GLint red, GLint green, GLint blue) { - DISPATCH(FragmentLightfSGIX, (light, pname, param), (F, "glFragmentLightfSGIX(0x%x, 0x%x, %f);\n", light, pname, param)); + DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3i(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iEXT)(GLint red, GLint green, GLint blue) { - DISPATCH(FragmentLightfvSGIX, (light, pname, params), (F, "glFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params)); + DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3iEXT(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iv)(const GLint * v) { - DISPATCH(FragmentLightiSGIX, (light, pname, param), (F, "glFragmentLightiSGIX(0x%x, 0x%x, %d);\n", light, pname, param)); + DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3iv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ivEXT)(const GLint * v) { - DISPATCH(FragmentLightivSGIX, (light, pname, params), (F, "glFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params)); + DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3ivEXT(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfSGIX)(GLenum pname, GLfloat param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3s)(GLshort red, GLshort green, GLshort blue) { - DISPATCH(FragmentLightModelfSGIX, (pname, param), (F, "glFragmentLightModelfSGIX(0x%x, %f);\n", pname, param)); + DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3s(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue) { - DISPATCH(FragmentLightModelfvSGIX, (pname, params), (F, "glFragmentLightModelfvSGIX(0x%x, %p);\n", pname, (const void *) params)); + DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3sEXT(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightModeliSGIX)(GLenum pname, GLint param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sv)(const GLshort * v) { - DISPATCH(FragmentLightModeliSGIX, (pname, param), (F, "glFragmentLightModeliSGIX(0x%x, %d);\n", pname, param)); + DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3sv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FragmentLightModelivSGIX)(GLenum pname, const GLint * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3svEXT)(const GLshort * v) { - DISPATCH(FragmentLightModelivSGIX, (pname, params), (F, "glFragmentLightModelivSGIX(0x%x, %p);\n", pname, (const void *) params)); + DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3svEXT(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ub)(GLubyte red, GLubyte green, GLubyte blue) { - DISPATCH(FragmentMaterialfSGIX, (face, pname, param), (F, "glFragmentMaterialfSGIX(0x%x, 0x%x, %f);\n", face, pname, param)); + DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ub(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue) { - DISPATCH(FragmentMaterialfvSGIX, (face, pname, params), (F, "glFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params)); + DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ubEXT(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubv)(const GLubyte * v) { - DISPATCH(FragmentMaterialiSGIX, (face, pname, param), (F, "glFragmentMaterialiSGIX(0x%x, 0x%x, %d);\n", face, pname, param)); + DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubvEXT)(const GLubyte * v) { - DISPATCH(FragmentMaterialivSGIX, (face, pname, params), (F, "glFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params)); + DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubvEXT(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ui)(GLuint red, GLuint green, GLuint blue) { - DISPATCH(GetFragmentLightfvSGIX, (light, pname, params), (F, "glGetFragmentLightfvSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params)); + DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3ui(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue) { - DISPATCH(GetFragmentLightivSGIX, (light, pname, params), (F, "glGetFragmentLightivSGIX(0x%x, 0x%x, %p);\n", light, pname, (const void *) params)); + DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3uiEXT(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiv)(const GLuint * v) { - DISPATCH(GetFragmentMaterialfvSGIX, (face, pname, params), (F, "glGetFragmentMaterialfvSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params)); + DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uiv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uivEXT)(const GLuint * v) { - DISPATCH(GetFragmentMaterialivSGIX, (face, pname, params), (F, "glGetFragmentMaterialivSGIX(0x%x, 0x%x, %p);\n", face, pname, (const void *) params)); + DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uivEXT(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(LightEnviSGIX)(GLenum pname, GLint param) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3us)(GLushort red, GLushort green, GLushort blue) { - DISPATCH(LightEnviSGIX, (pname, param), (F, "glLightEnviSGIX(0x%x, %d);\n", pname, param)); + DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3us(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(VertexWeightfEXT)(GLfloat weight) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue) { - DISPATCH(VertexWeightfEXT, (weight), (F, "glVertexWeightfEXT(%f);\n", weight)); + DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3usEXT(%d, %d, %d);\n", red, green, blue)); } -KEYWORD1 void KEYWORD2 NAME(VertexWeightfvEXT)(const GLfloat * weight) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usv)(const GLushort * v) { - DISPATCH(VertexWeightfvEXT, (weight), (F, "glVertexWeightfvEXT(%p);\n", (const void *) weight)); + DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usv(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer) +KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usvEXT)(const GLushort * v) { - DISPATCH(VertexWeightPointerEXT, (size, type, stride, pointer), (F, "glVertexWeightPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); + DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usvEXT(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) +{ + DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); +} + +KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) +{ + DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); +} + +KEYWORD1 void KEYWORD2 NAME(MultiDrawArrays)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount) +{ + DISPATCH(MultiDrawArraysEXT, (mode, first, count, primcount), (F, "glMultiDrawArrays(0x%x, %p, %p, %d);\n", mode, (const void *) first, (const void *) count, primcount)); +} + +KEYWORD1 void KEYWORD2 NAME(MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount) +{ + DISPATCH(MultiDrawArraysEXT, (mode, first, count, primcount), (F, "glMultiDrawArraysEXT(0x%x, %p, %p, %d);\n", mode, (const void *) first, (const void *) count, primcount)); +} + +KEYWORD1 void KEYWORD2 NAME(MultiDrawElements)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount) +{ + DISPATCH(MultiDrawElementsEXT, (mode, count, type, indices, primcount), (F, "glMultiDrawElements(0x%x, %p, 0x%x, %p, %d);\n", mode, (const void *) count, type, (const void *) indices, primcount)); +} + +KEYWORD1 void KEYWORD2 NAME(MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount) +{ + DISPATCH(MultiDrawElementsEXT, (mode, count, type, indices, primcount), (F, "glMultiDrawElementsEXT(0x%x, %p, 0x%x, %p, %d);\n", mode, (const void *) count, type, (const void *) indices, primcount)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoordPointer)(GLenum type, GLsizei stride, const GLvoid * pointer) +{ + DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer) +{ + DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointerEXT(0x%x, %d, %p);\n", type, stride, (const void *) pointer)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoordd)(GLdouble coord) +{ + DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoordd(%f);\n", coord)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoorddEXT)(GLdouble coord) +{ + DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoorddEXT(%f);\n", coord)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoorddv)(const GLdouble * coord) +{ + DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddv(%p);\n", (const void *) coord)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoorddvEXT)(const GLdouble * coord) +{ + DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddvEXT(%p);\n", (const void *) coord)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoordf)(GLfloat coord) +{ + DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordf(%f);\n", coord)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoordfEXT)(GLfloat coord) +{ + DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordfEXT(%f);\n", coord)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoordfv)(const GLfloat * coord) +{ + DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfv(%p);\n", (const void *) coord)); +} + +KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord) +{ + DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_606)(GLenum mode); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_606)(GLenum mode) +{ + DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode)); +} + +KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) +{ + DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparate(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)); +} + +KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) +{ + DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateEXT(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_607)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_607)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) +{ + DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateINGR(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)); } KEYWORD1 void KEYWORD2 NAME(FlushVertexArrayRangeNV)(void) @@ -2565,26 +4387,6 @@ KEYWORD1 void KEYWORD2 NAME(VertexArrayRangeNV)(GLsizei length, const GLvoid * p DISPATCH(VertexArrayRangeNV, (length, pointer), (F, "glVertexArrayRangeNV(%d, %p);\n", length, (const void *) pointer)); } -KEYWORD1 void KEYWORD2 NAME(CombinerParameterfvNV)(GLenum pname, const GLfloat * params) -{ - DISPATCH(CombinerParameterfvNV, (pname, params), (F, "glCombinerParameterfvNV(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(CombinerParameterfNV)(GLenum pname, GLfloat param) -{ - DISPATCH(CombinerParameterfNV, (pname, param), (F, "glCombinerParameterfNV(0x%x, %f);\n", pname, param)); -} - -KEYWORD1 void KEYWORD2 NAME(CombinerParameterivNV)(GLenum pname, const GLint * params) -{ - DISPATCH(CombinerParameterivNV, (pname, params), (F, "glCombinerParameterivNV(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(CombinerParameteriNV)(GLenum pname, GLint param) -{ - DISPATCH(CombinerParameteriNV, (pname, param), (F, "glCombinerParameteriNV(0x%x, %d);\n", pname, param)); -} - KEYWORD1 void KEYWORD2 NAME(CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) { DISPATCH(CombinerInputNV, (stage, portion, variable, input, mapping, componentUsage), (F, "glCombinerInputNV(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x);\n", stage, portion, variable, input, mapping, componentUsage)); @@ -2595,6 +4397,26 @@ KEYWORD1 void KEYWORD2 NAME(CombinerOutputNV)(GLenum stage, GLenum portion, GLen DISPATCH(CombinerOutputNV, (stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum), (F, "glCombinerOutputNV(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, %d, %d, %d);\n", stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum)); } +KEYWORD1 void KEYWORD2 NAME(CombinerParameterfNV)(GLenum pname, GLfloat param) +{ + DISPATCH(CombinerParameterfNV, (pname, param), (F, "glCombinerParameterfNV(0x%x, %f);\n", pname, param)); +} + +KEYWORD1 void KEYWORD2 NAME(CombinerParameterfvNV)(GLenum pname, const GLfloat * params) +{ + DISPATCH(CombinerParameterfvNV, (pname, params), (F, "glCombinerParameterfvNV(0x%x, %p);\n", pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(CombinerParameteriNV)(GLenum pname, GLint param) +{ + DISPATCH(CombinerParameteriNV, (pname, param), (F, "glCombinerParameteriNV(0x%x, %d);\n", pname, param)); +} + +KEYWORD1 void KEYWORD2 NAME(CombinerParameterivNV)(GLenum pname, const GLint * params) +{ + DISPATCH(CombinerParameterivNV, (pname, params), (F, "glCombinerParameterivNV(0x%x, %p);\n", pname, (const void *) params)); +} + KEYWORD1 void KEYWORD2 NAME(FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) { DISPATCH(FinalCombinerInputNV, (variable, input, mapping, componentUsage), (F, "glFinalCombinerInputNV(0x%x, 0x%x, 0x%x, 0x%x);\n", variable, input, mapping, componentUsage)); @@ -2635,81 +4457,241 @@ KEYWORD1 void KEYWORD2 NAME(ResizeBuffersMESA)(void) DISPATCH(ResizeBuffersMESA, (), (F, "glResizeBuffersMESA();\n")); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2d)(GLdouble x, GLdouble y) +{ + DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2d(%f, %f);\n", x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2dARB)(GLdouble x, GLdouble y) +{ + DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dARB(%f, %f);\n", x, y)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2dMESA)(GLdouble x, GLdouble y) { DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dMESA(%f, %f);\n", x, y)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2dv)(const GLdouble * v) +{ + DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2dvARB)(const GLdouble * v) +{ + DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dvARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2dvMESA)(const GLdouble * v) { DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dvMESA(%p);\n", (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2f)(GLfloat x, GLfloat y) +{ + DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2f(%f, %f);\n", x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2fARB)(GLfloat x, GLfloat y) +{ + DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fARB(%f, %f);\n", x, y)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2fMESA)(GLfloat x, GLfloat y) { DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fMESA(%f, %f);\n", x, y)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2fv)(const GLfloat * v) +{ + DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2fvARB)(const GLfloat * v) +{ + DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fvARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2fvMESA)(const GLfloat * v) { DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fvMESA(%p);\n", (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2i)(GLint x, GLint y) +{ + DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2i(%d, %d);\n", x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2iARB)(GLint x, GLint y) +{ + DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iARB(%d, %d);\n", x, y)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2iMESA)(GLint x, GLint y) { DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iMESA(%d, %d);\n", x, y)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2iv)(const GLint * v) +{ + DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2iv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2ivARB)(const GLint * v) +{ + DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2ivARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2ivMESA)(const GLint * v) { DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2ivMESA(%p);\n", (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2s)(GLshort x, GLshort y) +{ + DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2s(%d, %d);\n", x, y)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2sARB)(GLshort x, GLshort y) +{ + DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sARB(%d, %d);\n", x, y)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2sMESA)(GLshort x, GLshort y) { DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sMESA(%d, %d);\n", x, y)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos2sv)(const GLshort * v) +{ + DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2sv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos2svARB)(const GLshort * v) +{ + DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2svARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos2svMESA)(const GLshort * v) { DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2svMESA(%p);\n", (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3d)(GLdouble x, GLdouble y, GLdouble z) +{ + DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3d(%f, %f, %f);\n", x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z) +{ + DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dARB(%f, %f, %f);\n", x, y, z)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z) { DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dMESA(%f, %f, %f);\n", x, y, z)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3dv)(const GLdouble * v) +{ + DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3dvARB)(const GLdouble * v) +{ + DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dvARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3dvMESA)(const GLdouble * v) { DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dvMESA(%p);\n", (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3f)(GLfloat x, GLfloat y, GLfloat z) +{ + DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3f(%f, %f, %f);\n", x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z) +{ + DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fARB(%f, %f, %f);\n", x, y, z)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z) { DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fMESA(%f, %f, %f);\n", x, y, z)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3fv)(const GLfloat * v) +{ + DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3fvARB)(const GLfloat * v) +{ + DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fvARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3fvMESA)(const GLfloat * v) { DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fvMESA(%p);\n", (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3i)(GLint x, GLint y, GLint z) +{ + DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3i(%d, %d, %d);\n", x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3iARB)(GLint x, GLint y, GLint z) +{ + DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iARB(%d, %d, %d);\n", x, y, z)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3iMESA)(GLint x, GLint y, GLint z) { DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iMESA(%d, %d, %d);\n", x, y, z)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3iv)(const GLint * v) +{ + DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3iv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3ivARB)(const GLint * v) +{ + DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3ivARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3ivMESA)(const GLint * v) { DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3ivMESA(%p);\n", (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3s)(GLshort x, GLshort y, GLshort z) +{ + DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3s(%d, %d, %d);\n", x, y, z)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3sARB)(GLshort x, GLshort y, GLshort z) +{ + DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sARB(%d, %d, %d);\n", x, y, z)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3sMESA)(GLshort x, GLshort y, GLshort z) { DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sMESA(%d, %d, %d);\n", x, y, z)); } +KEYWORD1 void KEYWORD2 NAME(WindowPos3sv)(const GLshort * v) +{ + DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3sv(%p);\n", (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(WindowPos3svARB)(const GLshort * v) +{ + DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3svARB(%p);\n", (const void *) v)); +} + KEYWORD1 void KEYWORD2 NAME(WindowPos3svMESA)(const GLshort * v) { DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3svMESA(%p);\n", (const void *) v)); @@ -2755,209 +4737,67 @@ KEYWORD1 void KEYWORD2 NAME(WindowPos4svMESA)(const GLshort * v) DISPATCH(WindowPos4svMESA, (v), (F, "glWindowPos4svMESA(%p);\n", (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_648)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_648)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride) { - DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateEXT(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)); + DISPATCH(MultiModeDrawArraysIBM, (mode, first, count, primcount, modestride), (F, "glMultiModeDrawArraysIBM(%p, %p, %p, %d, %d);\n", (const void *) mode, (const void *) first, (const void *) count, primcount, modestride)); } -KEYWORD1 void KEYWORD2 NAME(IndexMaterialEXT)(GLenum face, GLenum mode) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_649)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_649)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride) { - DISPATCH(IndexMaterialEXT, (face, mode), (F, "glIndexMaterialEXT(0x%x, 0x%x);\n", face, mode)); + DISPATCH(MultiModeDrawElementsIBM, (mode, count, type, indices, primcount, modestride), (F, "glMultiModeDrawElementsIBM(%p, %p, 0x%x, %p, %d, %d);\n", (const void *) mode, (const void *) count, type, (const void *) indices, primcount, modestride)); } -KEYWORD1 void KEYWORD2 NAME(IndexFuncEXT)(GLenum func, GLclampf ref) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_650)(GLsizei n, const GLuint * fences); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_650)(GLsizei n, const GLuint * fences) { - DISPATCH(IndexFuncEXT, (func, ref), (F, "glIndexFuncEXT(0x%x, %f);\n", func, ref)); + DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences)); } -KEYWORD1 void KEYWORD2 NAME(LockArraysEXT)(GLint first, GLsizei count) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_651)(GLuint fence); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_651)(GLuint fence) { - DISPATCH(LockArraysEXT, (first, count), (F, "glLockArraysEXT(%d, %d);\n", first, count)); + DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence)); } -KEYWORD1 void KEYWORD2 NAME(UnlockArraysEXT)(void) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_652)(GLsizei n, GLuint * fences); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_652)(GLsizei n, GLuint * fences) { - DISPATCH(UnlockArraysEXT, (), (F, "glUnlockArraysEXT();\n")); + DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences)); } -KEYWORD1 void KEYWORD2 NAME(CullParameterdvEXT)(GLenum pname, GLdouble * params) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLuint fence, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLuint fence, GLenum pname, GLint * params) { - DISPATCH(CullParameterdvEXT, (pname, params), (F, "glCullParameterdvEXT(0x%x, %p);\n", pname, (const void *) params)); + DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(CullParameterfvEXT)(GLenum pname, GLfloat * params) +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_654)(GLuint fence); + +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_654)(GLuint fence) { - DISPATCH(CullParameterfvEXT, (pname, params), (F, "glCullParameterfvEXT(0x%x, %p);\n", pname, (const void *) params)); + RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence)); } -KEYWORD1 void KEYWORD2 NAME(HintPGI)(GLenum target, GLint mode) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_655)(GLuint fence, GLenum condition); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_655)(GLuint fence, GLenum condition) { - DISPATCH(HintPGI, (target, mode), (F, "glHintPGI(0x%x, %d);\n", target, mode)); + DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition)); } -KEYWORD1 void KEYWORD2 NAME(FogCoordfEXT)(GLfloat coord) -{ - DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordfEXT(%f);\n", coord)); -} +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_656)(GLuint fence); -KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord) +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_656)(GLuint fence) { - DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoorddEXT)(GLdouble coord) -{ - DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoorddEXT(%f);\n", coord)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoorddvEXT)(const GLdouble * coord) -{ - DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddvEXT(%p);\n", (const void *) coord)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer) -{ - DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointerEXT(0x%x, %d, %p);\n", type, stride, (const void *) pointer)); -} - -KEYWORD1 void KEYWORD2 NAME(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data) -{ - DISPATCH(GetColorTableEXT, (target, format, type, data), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetColorTableParameterivEXT, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetColorTableParameterfvEXT, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(TbufferMask3DFX)(GLuint mask) -{ - DISPATCH(TbufferMask3DFX, (mask), (F, "glTbufferMask3DFX(%d);\n", mask)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1DARB(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3DARB(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2DARB(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1DARB(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img) -{ - DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImageARB(0x%x, %d, %p);\n", target, level, (const void *) img)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue) -{ - DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3bEXT(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bvEXT)(const GLbyte * v) -{ - DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bvEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue) -{ - DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3dEXT(%f, %f, %f);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dvEXT)(const GLdouble * v) -{ - DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dvEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue) -{ - DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3fEXT(%f, %f, %f);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fvEXT)(const GLfloat * v) -{ - DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fvEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iEXT)(GLint red, GLint green, GLint blue) -{ - DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3iEXT(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ivEXT)(const GLint * v) -{ - DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3ivEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue) -{ - DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3sEXT(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3svEXT)(const GLshort * v) -{ - DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3svEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue) -{ - DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ubEXT(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubvEXT)(const GLubyte * v) -{ - DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubvEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue) -{ - DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3uiEXT(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uivEXT)(const GLuint * v) -{ - DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uivEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue) -{ - DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3usEXT(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usvEXT)(const GLushort * v) -{ - DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usvEXT(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) -{ - DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointerEXT(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); + RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence)); } KEYWORD1 GLboolean KEYWORD2 NAME(AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences) @@ -2965,14 +4805,24 @@ KEYWORD1 GLboolean KEYWORD2 NAME(AreProgramsResidentNV)(GLsizei n, const GLuint RETURN_DISPATCH(AreProgramsResidentNV, (n, ids, residences), (F, "glAreProgramsResidentNV(%d, %p, %p);\n", n, (const void *) ids, (const void *) residences)); } -KEYWORD1 void KEYWORD2 NAME(BindProgramNV)(GLenum target, GLuint id) +KEYWORD1 void KEYWORD2 NAME(BindProgramARB)(GLenum target, GLuint program) { - DISPATCH(BindProgramNV, (target, id), (F, "glBindProgramNV(0x%x, %d);\n", target, id)); + DISPATCH(BindProgramNV, (target, program), (F, "glBindProgramARB(0x%x, %d);\n", target, program)); } -KEYWORD1 void KEYWORD2 NAME(DeleteProgramsNV)(GLsizei n, const GLuint * ids) +KEYWORD1 void KEYWORD2 NAME(BindProgramNV)(GLenum target, GLuint program) { - DISPATCH(DeleteProgramsNV, (n, ids), (F, "glDeleteProgramsNV(%d, %p);\n", n, (const void *) ids)); + DISPATCH(BindProgramNV, (target, program), (F, "glBindProgramNV(0x%x, %d);\n", target, program)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteProgramsARB)(GLsizei n, const GLuint * programs) +{ + DISPATCH(DeleteProgramsNV, (n, programs), (F, "glDeleteProgramsARB(%d, %p);\n", n, (const void *) programs)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteProgramsNV)(GLsizei n, const GLuint * programs) +{ + DISPATCH(DeleteProgramsNV, (n, programs), (F, "glDeleteProgramsNV(%d, %p);\n", n, (const void *) programs)); } KEYWORD1 void KEYWORD2 NAME(ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params) @@ -2980,9 +4830,14 @@ KEYWORD1 void KEYWORD2 NAME(ExecuteProgramNV)(GLenum target, GLuint id, const GL DISPATCH(ExecuteProgramNV, (target, id, params), (F, "glExecuteProgramNV(0x%x, %d, %p);\n", target, id, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GenProgramsNV)(GLsizei n, GLuint * ids) +KEYWORD1 void KEYWORD2 NAME(GenProgramsARB)(GLsizei n, GLuint * programs) { - DISPATCH(GenProgramsNV, (n, ids), (F, "glGenProgramsNV(%d, %p);\n", n, (const void *) ids)); + DISPATCH(GenProgramsNV, (n, programs), (F, "glGenProgramsARB(%d, %p);\n", n, (const void *) programs)); +} + +KEYWORD1 void KEYWORD2 NAME(GenProgramsNV)(GLsizei n, GLuint * programs) +{ + DISPATCH(GenProgramsNV, (n, programs), (F, "glGenProgramsNV(%d, %p);\n", n, (const void *) programs)); } KEYWORD1 void KEYWORD2 NAME(GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params) @@ -2995,44 +4850,54 @@ KEYWORD1 void KEYWORD2 NAME(GetProgramParameterfvNV)(GLenum target, GLuint index DISPATCH(GetProgramParameterfvNV, (target, index, pname, params), (F, "glGetProgramParameterfvNV(0x%x, %d, 0x%x, %p);\n", target, index, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GetProgramivNV)(GLuint id, GLenum pname, GLint * params) -{ - DISPATCH(GetProgramivNV, (id, pname, params), (F, "glGetProgramivNV(%d, 0x%x, %p);\n", id, pname, (const void *) params)); -} - KEYWORD1 void KEYWORD2 NAME(GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program) { DISPATCH(GetProgramStringNV, (id, pname, program), (F, "glGetProgramStringNV(%d, 0x%x, %p);\n", id, pname, (const void *) program)); } +KEYWORD1 void KEYWORD2 NAME(GetProgramivNV)(GLuint id, GLenum pname, GLint * params) +{ + DISPATCH(GetProgramivNV, (id, pname, params), (F, "glGetProgramivNV(%d, 0x%x, %p);\n", id, pname, (const void *) params)); +} + KEYWORD1 void KEYWORD2 NAME(GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params) { DISPATCH(GetTrackMatrixivNV, (target, address, pname, params), (F, "glGetTrackMatrixivNV(0x%x, %d, 0x%x, %p);\n", target, address, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params) +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervARB)(GLuint index, GLenum pname, GLvoid ** params) { - DISPATCH(GetVertexAttribdvARB, (index, pname, params), (F, "glGetVertexAttribdvARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); + DISPATCH(GetVertexAttribPointervNV, (index, pname, params), (F, "glGetVertexAttribPointervARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params) +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** params) { - DISPATCH(GetVertexAttribfvARB, (index, pname, params), (F, "glGetVertexAttribfvARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); + DISPATCH(GetVertexAttribPointervNV, (index, pname, params), (F, "glGetVertexAttribPointervNV(%d, 0x%x, %p);\n", index, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params) +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params) { - DISPATCH(GetVertexAttribivARB, (index, pname, params), (F, "glGetVertexAttribivARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); + DISPATCH(GetVertexAttribdvNV, (index, pname, params), (F, "glGetVertexAttribdvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer) +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params) { - DISPATCH(GetVertexAttribPointervNV, (index, pname, pointer), (F, "glGetVertexAttribPointervNV(%d, 0x%x, %p);\n", index, pname, (const void *) pointer)); + DISPATCH(GetVertexAttribfvNV, (index, pname, params), (F, "glGetVertexAttribfvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params)); } -KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramNV)(GLuint id) +KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params) { - RETURN_DISPATCH(IsProgramNV, (id), (F, "glIsProgramNV(%d);\n", id)); + DISPATCH(GetVertexAttribivNV, (index, pname, params), (F, "glGetVertexAttribivNV(%d, 0x%x, %p);\n", index, pname, (const void *) params)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramARB)(GLuint program) +{ + RETURN_DISPATCH(IsProgramNV, (program), (F, "glIsProgramARB(%d);\n", program)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramNV)(GLuint program) +{ + RETURN_DISPATCH(IsProgramNV, (program), (F, "glIsProgramNV(%d);\n", program)); } KEYWORD1 void KEYWORD2 NAME(LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program) @@ -3080,776 +4945,6 @@ KEYWORD1 void KEYWORD2 NAME(TrackMatrixNV)(GLenum target, GLuint address, GLenum DISPATCH(TrackMatrixNV, (target, address, matrix, transform), (F, "glTrackMatrixNV(0x%x, %d, 0x%x, 0x%x);\n", target, address, matrix, transform)); } -KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) -{ - DISPATCH(VertexAttribPointerNV, (index, size, type, stride, pointer), (F, "glVertexAttribPointerNV(%d, %d, 0x%x, %d, %p);\n", index, size, type, stride, (const void *) pointer)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dARB)(GLuint index, GLdouble x) -{ - DISPATCH(VertexAttrib1dARB, (index, x), (F, "glVertexAttrib1dARB(%d, %f);\n", index, x)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dvARB)(GLuint index, const GLdouble * v) -{ - DISPATCH(VertexAttrib1dvARB, (index, v), (F, "glVertexAttrib1dvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fARB)(GLuint index, GLfloat x) -{ - DISPATCH(VertexAttrib1fARB, (index, x), (F, "glVertexAttrib1fARB(%d, %f);\n", index, x)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib1fvARB)(GLuint index, const GLfloat * v) -{ - DISPATCH(VertexAttrib1fvARB, (index, v), (F, "glVertexAttrib1fvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib1sARB)(GLuint index, GLshort x) -{ - DISPATCH(VertexAttrib1sARB, (index, x), (F, "glVertexAttrib1sARB(%d, %d);\n", index, x)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib1svARB)(GLuint index, const GLshort * v) -{ - DISPATCH(VertexAttrib1svARB, (index, v), (F, "glVertexAttrib1svARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y) -{ - DISPATCH(VertexAttrib2dARB, (index, x, y), (F, "glVertexAttrib2dARB(%d, %f, %f);\n", index, x, y)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib2dvARB)(GLuint index, const GLdouble * v) -{ - DISPATCH(VertexAttrib2dvARB, (index, v), (F, "glVertexAttrib2dvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y) -{ - DISPATCH(VertexAttrib2fARB, (index, x, y), (F, "glVertexAttrib2fARB(%d, %f, %f);\n", index, x, y)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib2fvARB)(GLuint index, const GLfloat * v) -{ - DISPATCH(VertexAttrib2fvARB, (index, v), (F, "glVertexAttrib2fvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib2sARB)(GLuint index, GLshort x, GLshort y) -{ - DISPATCH(VertexAttrib2sARB, (index, x, y), (F, "glVertexAttrib2sARB(%d, %d, %d);\n", index, x, y)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib2svARB)(GLuint index, const GLshort * v) -{ - DISPATCH(VertexAttrib2svARB, (index, v), (F, "glVertexAttrib2svARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - DISPATCH(VertexAttrib3dARB, (index, x, y, z), (F, "glVertexAttrib3dARB(%d, %f, %f, %f);\n", index, x, y, z)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib3dvARB)(GLuint index, const GLdouble * v) -{ - DISPATCH(VertexAttrib3dvARB, (index, v), (F, "glVertexAttrib3dvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - DISPATCH(VertexAttrib3fARB, (index, x, y, z), (F, "glVertexAttrib3fARB(%d, %f, %f, %f);\n", index, x, y, z)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib3fvARB)(GLuint index, const GLfloat * v) -{ - DISPATCH(VertexAttrib3fvARB, (index, v), (F, "glVertexAttrib3fvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z) -{ - DISPATCH(VertexAttrib3sARB, (index, x, y, z), (F, "glVertexAttrib3sARB(%d, %d, %d, %d);\n", index, x, y, z)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib3svARB)(GLuint index, const GLshort * v) -{ - DISPATCH(VertexAttrib3svARB, (index, v), (F, "glVertexAttrib3svARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - DISPATCH(VertexAttrib4dARB, (index, x, y, z, w), (F, "glVertexAttrib4dARB(%d, %f, %f, %f, %f);\n", index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4dvARB)(GLuint index, const GLdouble * v) -{ - DISPATCH(VertexAttrib4dvARB, (index, v), (F, "glVertexAttrib4dvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - DISPATCH(VertexAttrib4fARB, (index, x, y, z, w), (F, "glVertexAttrib4fARB(%d, %f, %f, %f, %f);\n", index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4fvARB)(GLuint index, const GLfloat * v) -{ - DISPATCH(VertexAttrib4fvARB, (index, v), (F, "glVertexAttrib4fvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - DISPATCH(VertexAttrib4sARB, (index, x, y, z, w), (F, "glVertexAttrib4sARB(%d, %d, %d, %d, %d);\n", index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4svARB)(GLuint index, const GLshort * v) -{ - DISPATCH(VertexAttrib4svARB, (index, v), (F, "glVertexAttrib4svARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - DISPATCH(VertexAttrib4NubARB, (index, x, y, z, w), (F, "glVertexAttrib4NubARB(%d, %d, %d, %d, %d);\n", index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NubvARB)(GLuint index, const GLubyte * v) -{ - DISPATCH(VertexAttrib4NubvARB, (index, v), (F, "glVertexAttrib4NubvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v) -{ - DISPATCH(VertexAttribs1dvNV, (index, n, v), (F, "glVertexAttribs1dvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v) -{ - DISPATCH(VertexAttribs1fvNV, (index, n, v), (F, "glVertexAttribs1fvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v) -{ - DISPATCH(VertexAttribs1svNV, (index, n, v), (F, "glVertexAttribs1svNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v) -{ - DISPATCH(VertexAttribs2dvNV, (index, n, v), (F, "glVertexAttribs2dvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v) -{ - DISPATCH(VertexAttribs2fvNV, (index, n, v), (F, "glVertexAttribs2fvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v) -{ - DISPATCH(VertexAttribs2svNV, (index, n, v), (F, "glVertexAttribs2svNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v) -{ - DISPATCH(VertexAttribs3dvNV, (index, n, v), (F, "glVertexAttribs3dvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v) -{ - DISPATCH(VertexAttribs3fvNV, (index, n, v), (F, "glVertexAttribs3fvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v) -{ - DISPATCH(VertexAttribs3svNV, (index, n, v), (F, "glVertexAttribs3svNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v) -{ - DISPATCH(VertexAttribs4dvNV, (index, n, v), (F, "glVertexAttribs4dvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v) -{ - DISPATCH(VertexAttribs4fvNV, (index, n, v), (F, "glVertexAttribs4fvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v) -{ - DISPATCH(VertexAttribs4svNV, (index, n, v), (F, "glVertexAttribs4svNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v) -{ - DISPATCH(VertexAttribs4ubvNV, (index, n, v), (F, "glVertexAttribs4ubvNV(%d, %d, %p);\n", index, n, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(PointParameteriNV)(GLenum pname, GLint params) -{ - DISPATCH(PointParameteriNV, (pname, params), (F, "glPointParameteriNV(0x%x, %d);\n", pname, params)); -} - -KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * params) -{ - DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount) -{ - DISPATCH(MultiDrawArraysEXT, (mode, first, count, primcount), (F, "glMultiDrawArraysEXT(0x%x, %p, %p, %d);\n", mode, (const void *) first, (const void *) count, primcount)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount) -{ - DISPATCH(MultiDrawElementsEXT, (mode, count, type, indices, primcount), (F, "glMultiDrawElementsEXT(0x%x, %p, 0x%x, %p, %d);\n", mode, (const void *) count, type, (const void *) indices, primcount)); -} - -KEYWORD1 void KEYWORD2 NAME(ActiveStencilFaceEXT)(GLenum face) -{ - DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face)); -} - -KEYWORD1 void KEYWORD2 NAME(DeleteFencesNV)(GLsizei n, const GLuint * fences) -{ - DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences)); -} - -KEYWORD1 void KEYWORD2 NAME(GenFencesNV)(GLsizei n, GLuint * fences) -{ - DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences)); -} - -KEYWORD1 GLboolean KEYWORD2 NAME(IsFenceNV)(GLuint fence) -{ - RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence)); -} - -KEYWORD1 GLboolean KEYWORD2 NAME(TestFenceNV)(GLuint fence) -{ - RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence)); -} - -KEYWORD1 void KEYWORD2 NAME(GetFenceivNV)(GLuint fence, GLenum pname, GLint * params) -{ - DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(FinishFenceNV)(GLuint fence) -{ - DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence)); -} - -KEYWORD1 void KEYWORD2 NAME(SetFenceNV)(GLuint fence, GLenum condition) -{ - DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4bvARB)(GLuint index, const GLbyte * v) -{ - DISPATCH(VertexAttrib4bvARB, (index, v), (F, "glVertexAttrib4bvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ivARB)(GLuint index, const GLint * v) -{ - DISPATCH(VertexAttrib4ivARB, (index, v), (F, "glVertexAttrib4ivARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvARB)(GLuint index, const GLubyte * v) -{ - DISPATCH(VertexAttrib4ubvARB, (index, v), (F, "glVertexAttrib4ubvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4usvARB)(GLuint index, const GLushort * v) -{ - DISPATCH(VertexAttrib4usvARB, (index, v), (F, "glVertexAttrib4usvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4uivARB)(GLuint index, const GLuint * v) -{ - DISPATCH(VertexAttrib4uivARB, (index, v), (F, "glVertexAttrib4uivARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NbvARB)(GLuint index, const GLbyte * v) -{ - DISPATCH(VertexAttrib4NbvARB, (index, v), (F, "glVertexAttrib4NbvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NsvARB)(GLuint index, const GLshort * v) -{ - DISPATCH(VertexAttrib4NsvARB, (index, v), (F, "glVertexAttrib4NsvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NivARB)(GLuint index, const GLint * v) -{ - DISPATCH(VertexAttrib4NivARB, (index, v), (F, "glVertexAttrib4NivARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NusvARB)(GLuint index, const GLushort * v) -{ - DISPATCH(VertexAttrib4NusvARB, (index, v), (F, "glVertexAttrib4NusvARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttrib4NuivARB)(GLuint index, const GLuint * v) -{ - DISPATCH(VertexAttrib4NuivARB, (index, v), (F, "glVertexAttrib4NuivARB(%d, %p);\n", index, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) -{ - DISPATCH(VertexAttribPointerARB, (index, size, type, normalized, stride, pointer), (F, "glVertexAttribPointerARB(%d, %d, 0x%x, %d, %d, %p);\n", index, size, type, normalized, stride, (const void *) pointer)); -} - -KEYWORD1 void KEYWORD2 NAME(EnableVertexAttribArrayARB)(GLuint index) -{ - DISPATCH(EnableVertexAttribArrayARB, (index), (F, "glEnableVertexAttribArrayARB(%d);\n", index)); -} - -KEYWORD1 void KEYWORD2 NAME(DisableVertexAttribArrayARB)(GLuint index) -{ - DISPATCH(DisableVertexAttribArrayARB, (index), (F, "glDisableVertexAttribArrayARB(%d);\n", index)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string) -{ - DISPATCH(ProgramStringARB, (target, format, len, string), (F, "glProgramStringARB(0x%x, 0x%x, %d, %p);\n", target, format, len, (const void *) string)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - DISPATCH(ProgramEnvParameter4dARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params) -{ - DISPATCH(ProgramEnvParameter4dvARB, (target, index, params), (F, "glProgramEnvParameter4dvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - DISPATCH(ProgramEnvParameter4fARB, (target, index, x, y, z, w), (F, "glProgramEnvParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params) -{ - DISPATCH(ProgramEnvParameter4fvARB, (target, index, params), (F, "glProgramEnvParameter4fvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - DISPATCH(ProgramLocalParameter4dARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4dARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params) -{ - DISPATCH(ProgramLocalParameter4dvARB, (target, index, params), (F, "glProgramLocalParameter4dvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - DISPATCH(ProgramLocalParameter4fARB, (target, index, x, y, z, w), (F, "glProgramLocalParameter4fARB(0x%x, %d, %f, %f, %f, %f);\n", target, index, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params) -{ - DISPATCH(ProgramLocalParameter4fvARB, (target, index, params), (F, "glProgramLocalParameter4fvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params) -{ - DISPATCH(GetProgramEnvParameterdvARB, (target, index, params), (F, "glGetProgramEnvParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params) -{ - DISPATCH(GetProgramEnvParameterfvARB, (target, index, params), (F, "glGetProgramEnvParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params) -{ - DISPATCH(GetProgramLocalParameterdvARB, (target, index, params), (F, "glGetProgramLocalParameterdvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params) -{ - DISPATCH(GetProgramLocalParameterfvARB, (target, index, params), (F, "glGetProgramLocalParameterfvARB(0x%x, %d, %p);\n", target, index, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramivARB)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetProgramivARB, (target, pname, params), (F, "glGetProgramivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string) -{ - DISPATCH(GetProgramStringARB, (target, pname, string), (F, "glGetProgramStringARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) string)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - DISPATCH(ProgramNamedParameter4fNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4fNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - DISPATCH(ProgramNamedParameter4dNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4dNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v) -{ - DISPATCH(ProgramNamedParameter4fvNV, (id, len, name, v), (F, "glProgramNamedParameter4fvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v) -{ - DISPATCH(ProgramNamedParameter4dvNV, (id, len, name, v), (F, "glProgramNamedParameter4dvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params) -{ - DISPATCH(GetProgramNamedParameterfvNV, (id, len, name, params), (F, "glGetProgramNamedParameterfvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params) -{ - DISPATCH(GetProgramNamedParameterdvNV, (id, len, name, params), (F, "glGetProgramNamedParameterdvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(BindBufferARB)(GLenum target, GLuint buffer) -{ - DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBufferARB(0x%x, %d);\n", target, buffer)); -} - -KEYWORD1 void KEYWORD2 NAME(BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage) -{ - DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferDataARB(0x%x, %d, %p, 0x%x);\n", target, size, (const void *) data, usage)); -} - -KEYWORD1 void KEYWORD2 NAME(BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data) -{ - DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(DeleteBuffersARB)(GLsizei n, const GLuint * buffer) -{ - DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffersARB(%d, %p);\n", n, (const void *) buffer)); -} - -KEYWORD1 void KEYWORD2 NAME(GenBuffersARB)(GLsizei n, GLuint * buffer) -{ - DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffersARB(%d, %p);\n", n, (const void *) buffer)); -} - -KEYWORD1 void KEYWORD2 NAME(GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameterivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params) -{ - DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointervARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data) -{ - DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubDataARB(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); -} - -KEYWORD1 GLboolean KEYWORD2 NAME(IsBufferARB)(GLuint buffer) -{ - RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBufferARB(%d);\n", buffer)); -} - -KEYWORD1 GLvoid * KEYWORD2 NAME(MapBufferARB)(GLenum target, GLenum access) -{ - RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBufferARB(0x%x, 0x%x);\n", target, access)); -} - -KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBufferARB)(GLenum target) -{ - RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBufferARB(0x%x);\n", target)); -} - -KEYWORD1 void KEYWORD2 NAME(DepthBoundsEXT)(GLclampd zmin, GLclampd zmax) -{ - DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax)); -} - -KEYWORD1 void KEYWORD2 NAME(GenQueriesARB)(GLsizei n, GLuint * ids) -{ - DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueriesARB(%d, %p);\n", n, (const void *) ids)); -} - -KEYWORD1 void KEYWORD2 NAME(DeleteQueriesARB)(GLsizei n, const GLuint * ids) -{ - DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueriesARB(%d, %p);\n", n, (const void *) ids)); -} - -KEYWORD1 GLboolean KEYWORD2 NAME(IsQueryARB)(GLuint id) -{ - RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQueryARB(%d);\n", id)); -} - -KEYWORD1 void KEYWORD2 NAME(BeginQueryARB)(GLenum target, GLuint id) -{ - DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQueryARB(0x%x, %d);\n", target, id)); -} - -KEYWORD1 void KEYWORD2 NAME(EndQueryARB)(GLenum target) -{ - DISPATCH(EndQueryARB, (target), (F, "glEndQueryARB(0x%x);\n", target)); -} - -KEYWORD1 void KEYWORD2 NAME(GetQueryivARB)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryivARB(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params) -{ - DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params) -{ - DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuivARB(%d, 0x%x, %p);\n", id, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride) -{ - DISPATCH(MultiModeDrawArraysIBM, (mode, first, count, primcount, modestride), (F, "glMultiModeDrawArraysIBM(%p, %p, %p, %d, %d);\n", (const void *) mode, (const void *) first, (const void *) count, primcount, modestride)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride) -{ - DISPATCH(MultiModeDrawElementsIBM, (mode, count, type, indices, primcount, modestride), (F, "glMultiModeDrawElementsIBM(%p, %p, 0x%x, %p, %d, %d);\n", (const void *) mode, (const void *) count, type, (const void *) indices, primcount, modestride)); -} - -KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA) -{ - DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA)); -} - -KEYWORD1 void KEYWORD2 NAME(DeleteObjectARB)(GLhandleARB obj) -{ - DISPATCH(DeleteObjectARB, (obj), (F, "glDeleteObjectARB(%d);\n", obj)); -} - -KEYWORD1 GLhandleARB KEYWORD2 NAME(GetHandleARB)(GLenum pname) -{ - RETURN_DISPATCH(GetHandleARB, (pname), (F, "glGetHandleARB(0x%x);\n", pname)); -} - -KEYWORD1 void KEYWORD2 NAME(DetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj) -{ - DISPATCH(DetachObjectARB, (containerObj, attachedObj), (F, "glDetachObjectARB(%d, %d);\n", containerObj, attachedObj)); -} - -KEYWORD1 GLhandleARB KEYWORD2 NAME(CreateShaderObjectARB)(GLenum shaderType) -{ - RETURN_DISPATCH(CreateShaderObjectARB, (shaderType), (F, "glCreateShaderObjectARB(0x%x);\n", shaderType)); -} - -KEYWORD1 void KEYWORD2 NAME(ShaderSourceARB)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length) -{ - DISPATCH(ShaderSourceARB, (shaderObj, count, string, length), (F, "glShaderSourceARB(%d, %d, %p, %p);\n", shaderObj, count, (const void *) string, (const void *) length)); -} - -KEYWORD1 void KEYWORD2 NAME(CompileShaderARB)(GLhandleARB shaderObj) -{ - DISPATCH(CompileShaderARB, (shaderObj), (F, "glCompileShaderARB(%d);\n", shaderObj)); -} - -KEYWORD1 GLhandleARB KEYWORD2 NAME(CreateProgramObjectARB)(void) -{ - RETURN_DISPATCH(CreateProgramObjectARB, (), (F, "glCreateProgramObjectARB();\n")); -} - -KEYWORD1 void KEYWORD2 NAME(AttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj) -{ - DISPATCH(AttachObjectARB, (containerObj, obj), (F, "glAttachObjectARB(%d, %d);\n", containerObj, obj)); -} - -KEYWORD1 void KEYWORD2 NAME(LinkProgramARB)(GLhandleARB programObj) -{ - DISPATCH(LinkProgramARB, (programObj), (F, "glLinkProgramARB(%d);\n", programObj)); -} - -KEYWORD1 void KEYWORD2 NAME(UseProgramObjectARB)(GLhandleARB programObj) -{ - DISPATCH(UseProgramObjectARB, (programObj), (F, "glUseProgramObjectARB(%d);\n", programObj)); -} - -KEYWORD1 void KEYWORD2 NAME(ValidateProgramARB)(GLhandleARB programObj) -{ - DISPATCH(ValidateProgramARB, (programObj), (F, "glValidateProgramARB(%d);\n", programObj)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform1fARB)(GLint location, GLfloat v0) -{ - DISPATCH(Uniform1fARB, (location, v0), (F, "glUniform1fARB(%d, %f);\n", location, v0)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform2fARB)(GLint location, GLfloat v0, GLfloat v1) -{ - DISPATCH(Uniform2fARB, (location, v0, v1), (F, "glUniform2fARB(%d, %f, %f);\n", location, v0, v1)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - DISPATCH(Uniform3fARB, (location, v0, v1, v2), (F, "glUniform3fARB(%d, %f, %f, %f);\n", location, v0, v1, v2)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - DISPATCH(Uniform4fARB, (location, v0, v1, v2, v3), (F, "glUniform4fARB(%d, %f, %f, %f, %f);\n", location, v0, v1, v2, v3)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform1iARB)(GLint location, GLint v0) -{ - DISPATCH(Uniform1iARB, (location, v0), (F, "glUniform1iARB(%d, %d);\n", location, v0)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform2iARB)(GLint location, GLint v0, GLint v1) -{ - DISPATCH(Uniform2iARB, (location, v0, v1), (F, "glUniform2iARB(%d, %d, %d);\n", location, v0, v1)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2) -{ - DISPATCH(Uniform3iARB, (location, v0, v1, v2), (F, "glUniform3iARB(%d, %d, %d, %d);\n", location, v0, v1, v2)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - DISPATCH(Uniform4iARB, (location, v0, v1, v2, v3), (F, "glUniform4iARB(%d, %d, %d, %d, %d);\n", location, v0, v1, v2, v3)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform1fvARB)(GLint location, GLsizei count, const GLfloat * value) -{ - DISPATCH(Uniform1fvARB, (location, count, value), (F, "glUniform1fvARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform2fvARB)(GLint location, GLsizei count, const GLfloat * value) -{ - DISPATCH(Uniform2fvARB, (location, count, value), (F, "glUniform2fvARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform3fvARB)(GLint location, GLsizei count, const GLfloat * value) -{ - DISPATCH(Uniform3fvARB, (location, count, value), (F, "glUniform3fvARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform4fvARB)(GLint location, GLsizei count, const GLfloat * value) -{ - DISPATCH(Uniform4fvARB, (location, count, value), (F, "glUniform4fvARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform1ivARB)(GLint location, GLsizei count, const GLint * value) -{ - DISPATCH(Uniform1ivARB, (location, count, value), (F, "glUniform1ivARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform2ivARB)(GLint location, GLsizei count, const GLint * value) -{ - DISPATCH(Uniform2ivARB, (location, count, value), (F, "glUniform2ivARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform3ivARB)(GLint location, GLsizei count, const GLint * value) -{ - DISPATCH(Uniform3ivARB, (location, count, value), (F, "glUniform3ivARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(Uniform4ivARB)(GLint location, GLsizei count, const GLint * value) -{ - DISPATCH(Uniform4ivARB, (location, count, value), (F, "glUniform4ivARB(%d, %d, %p);\n", location, count, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(UniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) -{ - DISPATCH(UniformMatrix2fvARB, (location, count, transpose, value), (F, "glUniformMatrix2fvARB(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(UniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) -{ - DISPATCH(UniformMatrix3fvARB, (location, count, transpose, value), (F, "glUniformMatrix3fvARB(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(UniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) -{ - DISPATCH(UniformMatrix4fvARB, (location, count, transpose, value), (F, "glUniformMatrix4fvARB(%d, %d, %d, %p);\n", location, count, transpose, (const void *) value)); -} - -KEYWORD1 void KEYWORD2 NAME(GetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params) -{ - DISPATCH(GetObjectParameterfvARB, (obj, pname, params), (F, "glGetObjectParameterfvARB(%d, 0x%x, %p);\n", obj, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params) -{ - DISPATCH(GetObjectParameterivARB, (obj, pname, params), (F, "glGetObjectParameterivARB(%d, 0x%x, %p);\n", obj, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog) -{ - DISPATCH(GetInfoLogARB, (obj, maxLength, length, infoLog), (F, "glGetInfoLogARB(%d, %d, %p, %p);\n", obj, maxLength, (const void *) length, (const void *) infoLog)); -} - -KEYWORD1 void KEYWORD2 NAME(GetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxLength, GLsizei * length, GLhandleARB * infoLog) -{ - DISPATCH(GetAttachedObjectsARB, (containerObj, maxLength, length, infoLog), (F, "glGetAttachedObjectsARB(%d, %d, %p, %p);\n", containerObj, maxLength, (const void *) length, (const void *) infoLog)); -} - -KEYWORD1 GLint KEYWORD2 NAME(GetUniformLocationARB)(GLhandleARB programObj, const GLcharARB * name) -{ - RETURN_DISPATCH(GetUniformLocationARB, (programObj, name), (F, "glGetUniformLocationARB(%d, %p);\n", programObj, (const void *) name)); -} - -KEYWORD1 void KEYWORD2 NAME(GetActiveUniformARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) -{ - DISPATCH(GetActiveUniformARB, (programObj, index, maxLength, length, size, type, name), (F, "glGetActiveUniformARB(%d, %d, %d, %p, %p, %p, %p);\n", programObj, index, maxLength, (const void *) length, (const void *) size, (const void *) type, (const void *) name)); -} - -KEYWORD1 void KEYWORD2 NAME(GetUniformfvARB)(GLhandleARB programObj, GLint location, GLfloat * params) -{ - DISPATCH(GetUniformfvARB, (programObj, location, params), (F, "glGetUniformfvARB(%d, %d, %p);\n", programObj, location, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetUniformivARB)(GLhandleARB programObj, GLint location, GLint * params) -{ - DISPATCH(GetUniformivARB, (programObj, location, params), (F, "glGetUniformivARB(%d, %d, %p);\n", programObj, location, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetShaderSourceARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source) -{ - DISPATCH(GetShaderSourceARB, (obj, maxLength, length, source), (F, "glGetShaderSourceARB(%d, %d, %p, %p);\n", obj, maxLength, (const void *) length, (const void *) source)); -} - -KEYWORD1 void KEYWORD2 NAME(BindAttribLocationARB)(GLhandleARB programObj, GLuint index, const GLcharARB * name) -{ - DISPATCH(BindAttribLocationARB, (programObj, index, name), (F, "glBindAttribLocationARB(%d, %d, %p);\n", programObj, index, (const void *) name)); -} - -KEYWORD1 void KEYWORD2 NAME(GetActiveAttribARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) -{ - DISPATCH(GetActiveAttribARB, (programObj, index, maxLength, length, size, type, name), (F, "glGetActiveAttribARB(%d, %d, %d, %p, %p, %p, %p);\n", programObj, index, maxLength, (const void *) length, (const void *) size, (const void *) type, (const void *) name)); -} - -KEYWORD1 GLint KEYWORD2 NAME(GetAttribLocationARB)(GLhandleARB programObj, const GLcharARB * name) -{ - RETURN_DISPATCH(GetAttribLocationARB, (programObj, name), (F, "glGetAttribLocationARB(%d, %p);\n", programObj, (const void *) name)); -} - -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params) -{ - DISPATCH(GetVertexAttribdvNV, (index, pname, params), (F, "glGetVertexAttribdvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params) -{ - DISPATCH(GetVertexAttribfvNV, (index, pname, params), (F, "glGetVertexAttribfvNV(%d, 0x%x, %p);\n", index, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params) -{ - DISPATCH(GetVertexAttribivNV, (index, pname, params), (F, "glGetVertexAttribivNV(%d, 0x%x, %p);\n", index, pname, (const void *) params)); -} - KEYWORD1 void KEYWORD2 NAME(VertexAttrib1dNV)(GLuint index, GLdouble x) { DISPATCH(VertexAttrib1dNV, (index, x), (F, "glVertexAttrib1dNV(%d, %f);\n", index, x)); @@ -3980,54 +5075,74 @@ KEYWORD1 void KEYWORD2 NAME(VertexAttrib4ubvNV)(GLuint index, const GLubyte * v) DISPATCH(VertexAttrib4ubvNV, (index, v), (F, "glVertexAttrib4ubvNV(%d, %p);\n", index, (const void *) v)); } -KEYWORD1 GLuint KEYWORD2 NAME(GenFragmentShadersATI)(GLuint range) +KEYWORD1 void KEYWORD2 NAME(VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) { - RETURN_DISPATCH(GenFragmentShadersATI, (range), (F, "glGenFragmentShadersATI(%d);\n", range)); + DISPATCH(VertexAttribPointerNV, (index, size, type, stride, pointer), (F, "glVertexAttribPointerNV(%d, %d, 0x%x, %d, %p);\n", index, size, type, stride, (const void *) pointer)); } -KEYWORD1 void KEYWORD2 NAME(BindFragmentShaderATI)(GLuint id) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v) { - DISPATCH(BindFragmentShaderATI, (id), (F, "glBindFragmentShaderATI(%d);\n", id)); + DISPATCH(VertexAttribs1dvNV, (index, n, v), (F, "glVertexAttribs1dvNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(DeleteFragmentShaderATI)(GLuint id) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v) { - DISPATCH(DeleteFragmentShaderATI, (id), (F, "glDeleteFragmentShaderATI(%d);\n", id)); + DISPATCH(VertexAttribs1fvNV, (index, n, v), (F, "glVertexAttribs1fvNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(BeginFragmentShaderATI)(void) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v) { - DISPATCH(BeginFragmentShaderATI, (), (F, "glBeginFragmentShaderATI();\n")); + DISPATCH(VertexAttribs1svNV, (index, n, v), (F, "glVertexAttribs1svNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(EndFragmentShaderATI)(void) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v) { - DISPATCH(EndFragmentShaderATI, (), (F, "glEndFragmentShaderATI();\n")); + DISPATCH(VertexAttribs2dvNV, (index, n, v), (F, "glVertexAttribs2dvNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v) { - DISPATCH(PassTexCoordATI, (dst, coord, swizzle), (F, "glPassTexCoordATI(%d, %d, 0x%x);\n", dst, coord, swizzle)); + DISPATCH(VertexAttribs2fvNV, (index, n, v), (F, "glVertexAttribs2fvNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v) { - DISPATCH(SampleMapATI, (dst, interp, swizzle), (F, "glSampleMapATI(%d, %d, 0x%x);\n", dst, interp, swizzle)); + DISPATCH(VertexAttribs2svNV, (index, n, v), (F, "glVertexAttribs2svNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v) { - DISPATCH(ColorFragmentOp1ATI, (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod), (F, "glColorFragmentOp1ATI(0x%x, %d, %d, %d, %d, %d, %d);\n", op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod)); + DISPATCH(VertexAttribs3dvNV, (index, n, v), (F, "glVertexAttribs3dvNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v) { - DISPATCH(ColorFragmentOp2ATI, (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod), (F, "glColorFragmentOp2ATI(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d);\n", op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)); + DISPATCH(VertexAttribs3fvNV, (index, n, v), (F, "glVertexAttribs3fvNV(%d, %d, %p);\n", index, n, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) +KEYWORD1 void KEYWORD2 NAME(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v) { - DISPATCH(ColorFragmentOp3ATI, (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod), (F, "glColorFragmentOp3ATI(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d);\n", op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)); + DISPATCH(VertexAttribs3svNV, (index, n, v), (F, "glVertexAttribs3svNV(%d, %d, %p);\n", index, n, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v) +{ + DISPATCH(VertexAttribs4dvNV, (index, n, v), (F, "glVertexAttribs4dvNV(%d, %d, %p);\n", index, n, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v) +{ + DISPATCH(VertexAttribs4fvNV, (index, n, v), (F, "glVertexAttribs4fvNV(%d, %d, %p);\n", index, n, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v) +{ + DISPATCH(VertexAttribs4svNV, (index, n, v), (F, "glVertexAttribs4svNV(%d, %d, %p);\n", index, n, (const void *) v)); +} + +KEYWORD1 void KEYWORD2 NAME(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v) +{ + DISPATCH(VertexAttribs4ubvNV, (index, n, v), (F, "glVertexAttribs4ubvNV(%d, %d, %p);\n", index, n, (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) @@ -4045,899 +5160,283 @@ KEYWORD1 void KEYWORD2 NAME(AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint d DISPATCH(AlphaFragmentOp3ATI, (op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod), (F, "glAlphaFragmentOp3ATI(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d);\n", op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)); } +KEYWORD1 void KEYWORD2 NAME(BeginFragmentShaderATI)(void) +{ + DISPATCH(BeginFragmentShaderATI, (), (F, "glBeginFragmentShaderATI();\n")); +} + +KEYWORD1 void KEYWORD2 NAME(BindFragmentShaderATI)(GLuint id) +{ + DISPATCH(BindFragmentShaderATI, (id), (F, "glBindFragmentShaderATI(%d);\n", id)); +} + +KEYWORD1 void KEYWORD2 NAME(ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) +{ + DISPATCH(ColorFragmentOp1ATI, (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod), (F, "glColorFragmentOp1ATI(0x%x, %d, %d, %d, %d, %d, %d);\n", op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod)); +} + +KEYWORD1 void KEYWORD2 NAME(ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) +{ + DISPATCH(ColorFragmentOp2ATI, (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod), (F, "glColorFragmentOp2ATI(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d);\n", op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)); +} + +KEYWORD1 void KEYWORD2 NAME(ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) +{ + DISPATCH(ColorFragmentOp3ATI, (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod), (F, "glColorFragmentOp3ATI(0x%x, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d);\n", op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteFragmentShaderATI)(GLuint id) +{ + DISPATCH(DeleteFragmentShaderATI, (id), (F, "glDeleteFragmentShaderATI(%d);\n", id)); +} + +KEYWORD1 void KEYWORD2 NAME(EndFragmentShaderATI)(void) +{ + DISPATCH(EndFragmentShaderATI, (), (F, "glEndFragmentShaderATI();\n")); +} + +KEYWORD1 GLuint KEYWORD2 NAME(GenFragmentShadersATI)(GLuint range) +{ + RETURN_DISPATCH(GenFragmentShadersATI, (range), (F, "glGenFragmentShadersATI(%d);\n", range)); +} + +KEYWORD1 void KEYWORD2 NAME(PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle) +{ + DISPATCH(PassTexCoordATI, (dst, coord, swizzle), (F, "glPassTexCoordATI(%d, %d, 0x%x);\n", dst, coord, swizzle)); +} + +KEYWORD1 void KEYWORD2 NAME(SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle) +{ + DISPATCH(SampleMapATI, (dst, interp, swizzle), (F, "glSampleMapATI(%d, %d, 0x%x);\n", dst, interp, swizzle)); +} + KEYWORD1 void KEYWORD2 NAME(SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value) { DISPATCH(SetFragmentShaderConstantATI, (dst, value), (F, "glSetFragmentShaderConstantATI(%d, %p);\n", dst, (const void *) value)); } -KEYWORD1 void KEYWORD2 NAME(ActiveTexture)(GLenum texture) -{ - DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTexture(0x%x);\n", texture)); -} - -KEYWORD1 void KEYWORD2 NAME(ClientActiveTexture)(GLenum texture) -{ - DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTexture(0x%x);\n", texture)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1d)(GLenum target, GLdouble s) -{ - DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1d(0x%x, %f);\n", target, s)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dv)(GLenum target, const GLdouble * v) -{ - DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1f)(GLenum target, GLfloat s) -{ - DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1f(0x%x, %f);\n", target, s)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fv)(GLenum target, const GLfloat * v) -{ - DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1i)(GLenum target, GLint s) -{ - DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1i(0x%x, %d);\n", target, s)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iv)(GLenum target, const GLint * v) -{ - DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1iv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1s)(GLenum target, GLshort s) -{ - DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1s(0x%x, %d);\n", target, s)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sv)(GLenum target, const GLshort * v) -{ - DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1sv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t) -{ - DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2d(0x%x, %f, %f);\n", target, s, t)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dv)(GLenum target, const GLdouble * v) -{ - DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t) -{ - DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2f(0x%x, %f, %f);\n", target, s, t)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fv)(GLenum target, const GLfloat * v) -{ - DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2i)(GLenum target, GLint s, GLint t) -{ - DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2i(0x%x, %d, %d);\n", target, s, t)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iv)(GLenum target, const GLint * v) -{ - DISPATCH(MultiTexCoord2ivARB, (target, v), (F, "glMultiTexCoord2iv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2s)(GLenum target, GLshort s, GLshort t) -{ - DISPATCH(MultiTexCoord2sARB, (target, s, t), (F, "glMultiTexCoord2s(0x%x, %d, %d);\n", target, s, t)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2sv)(GLenum target, const GLshort * v) -{ - DISPATCH(MultiTexCoord2svARB, (target, v), (F, "glMultiTexCoord2sv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - DISPATCH(MultiTexCoord3dARB, (target, s, t, r), (F, "glMultiTexCoord3d(0x%x, %f, %f, %f);\n", target, s, t, r)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dv)(GLenum target, const GLdouble * v) -{ - DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - DISPATCH(MultiTexCoord3fARB, (target, s, t, r), (F, "glMultiTexCoord3f(0x%x, %f, %f, %f);\n", target, s, t, r)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fv)(GLenum target, const GLfloat * v) -{ - DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r) -{ - DISPATCH(MultiTexCoord3iARB, (target, s, t, r), (F, "glMultiTexCoord3i(0x%x, %d, %d, %d);\n", target, s, t, r)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iv)(GLenum target, const GLint * v) -{ - DISPATCH(MultiTexCoord3ivARB, (target, v), (F, "glMultiTexCoord3iv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r) -{ - DISPATCH(MultiTexCoord3sARB, (target, s, t, r), (F, "glMultiTexCoord3s(0x%x, %d, %d, %d);\n", target, s, t, r)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3sv)(GLenum target, const GLshort * v) -{ - DISPATCH(MultiTexCoord3svARB, (target, v), (F, "glMultiTexCoord3sv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - DISPATCH(MultiTexCoord4dARB, (target, s, t, r, q), (F, "glMultiTexCoord4d(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dv)(GLenum target, const GLdouble * v) -{ - DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - DISPATCH(MultiTexCoord4fARB, (target, s, t, r, q), (F, "glMultiTexCoord4f(0x%x, %f, %f, %f, %f);\n", target, s, t, r, q)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fv)(GLenum target, const GLfloat * v) -{ - DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - DISPATCH(MultiTexCoord4iARB, (target, s, t, r, q), (F, "glMultiTexCoord4i(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iv)(GLenum target, const GLint * v) -{ - DISPATCH(MultiTexCoord4ivARB, (target, v), (F, "glMultiTexCoord4iv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - DISPATCH(MultiTexCoord4sARB, (target, s, t, r, q), (F, "glMultiTexCoord4s(0x%x, %d, %d, %d, %d);\n", target, s, t, r, q)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4sv)(GLenum target, const GLshort * v) -{ - DISPATCH(MultiTexCoord4svARB, (target, v), (F, "glMultiTexCoord4sv(0x%x, %p);\n", target, (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixf)(const GLfloat * m) -{ - DISPATCH(LoadTransposeMatrixfARB, (m), (F, "glLoadTransposeMatrixf(%p);\n", (const void *) m)); -} - -KEYWORD1 void KEYWORD2 NAME(LoadTransposeMatrixd)(const GLdouble * m) -{ - DISPATCH(LoadTransposeMatrixdARB, (m), (F, "glLoadTransposeMatrixd(%p);\n", (const void *) m)); -} - -KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixf)(const GLfloat * m) -{ - DISPATCH(MultTransposeMatrixfARB, (m), (F, "glMultTransposeMatrixf(%p);\n", (const void *) m)); -} - -KEYWORD1 void KEYWORD2 NAME(MultTransposeMatrixd)(const GLdouble * m) -{ - DISPATCH(MultTransposeMatrixdARB, (m), (F, "glMultTransposeMatrixd(%p);\n", (const void *) m)); -} - -KEYWORD1 void KEYWORD2 NAME(SampleCoverage)(GLclampf value, GLboolean invert) -{ - DISPATCH(SampleCoverageARB, (value, invert), (F, "glSampleCoverage(%f, %d);\n", value, invert)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3D(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2D(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1D(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3D(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) -{ - DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1D(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImage)(GLenum target, GLint level, GLvoid * img) -{ - DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImage(0x%x, %d, %p);\n", target, level, (const void *) img)); -} - -KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparate(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoordf)(GLfloat coord) -{ - DISPATCH(FogCoordfEXT, (coord), (F, "glFogCoordf(%f);\n", coord)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoordfv)(const GLfloat * coord) -{ - DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfv(%p);\n", (const void *) coord)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoordd)(GLdouble coord) -{ - DISPATCH(FogCoorddEXT, (coord), (F, "glFogCoordd(%f);\n", coord)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoorddv)(const GLdouble * coord) -{ - DISPATCH(FogCoorddvEXT, (coord), (F, "glFogCoorddv(%p);\n", (const void *) coord)); -} - -KEYWORD1 void KEYWORD2 NAME(FogCoordPointer)(GLenum type, GLsizei stride, const GLvoid * pointer) -{ - DISPATCH(FogCoordPointerEXT, (type, stride, pointer), (F, "glFogCoordPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiDrawArrays)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount) -{ - DISPATCH(MultiDrawArraysEXT, (mode, first, count, primcount), (F, "glMultiDrawArrays(0x%x, %p, %p, %d);\n", mode, (const void *) first, (const void *) count, primcount)); -} - -KEYWORD1 void KEYWORD2 NAME(MultiDrawElements)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount) -{ - DISPATCH(MultiDrawElementsEXT, (mode, count, type, indices, primcount), (F, "glMultiDrawElements(0x%x, %p, 0x%x, %p, %d);\n", mode, (const void *) count, type, (const void *) indices, primcount)); -} - -KEYWORD1 void KEYWORD2 NAME(PointParameterf)(GLenum pname, GLfloat param) -{ - DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterf(0x%x, %f);\n", pname, param)); -} - -KEYWORD1 void KEYWORD2 NAME(PointParameterfv)(GLenum pname, const GLfloat * params) -{ - DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfv(0x%x, %p);\n", pname, (const void *) params)); -} - KEYWORD1 void KEYWORD2 NAME(PointParameteri)(GLenum pname, GLint param) { DISPATCH(PointParameteriNV, (pname, param), (F, "glPointParameteri(0x%x, %d);\n", pname, param)); } +KEYWORD1 void KEYWORD2 NAME(PointParameteriNV)(GLenum pname, GLint param) +{ + DISPATCH(PointParameteriNV, (pname, param), (F, "glPointParameteriNV(0x%x, %d);\n", pname, param)); +} + KEYWORD1 void KEYWORD2 NAME(PointParameteriv)(GLenum pname, const GLint * params) { DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameteriv(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3b)(GLbyte red, GLbyte green, GLbyte blue) +KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * params) { - DISPATCH(SecondaryColor3bEXT, (red, green, blue), (F, "glSecondaryColor3b(%d, %d, %d);\n", red, green, blue)); + DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3bv)(const GLbyte * v) -{ - DISPATCH(SecondaryColor3bvEXT, (v), (F, "glSecondaryColor3bv(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3d)(GLdouble red, GLdouble green, GLdouble blue) -{ - DISPATCH(SecondaryColor3dEXT, (red, green, blue), (F, "glSecondaryColor3d(%f, %f, %f);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3dv)(const GLdouble * v) -{ - DISPATCH(SecondaryColor3dvEXT, (v), (F, "glSecondaryColor3dv(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue) -{ - DISPATCH(SecondaryColor3fEXT, (red, green, blue), (F, "glSecondaryColor3f(%f, %f, %f);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3fv)(const GLfloat * v) -{ - DISPATCH(SecondaryColor3fvEXT, (v), (F, "glSecondaryColor3fv(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3i)(GLint red, GLint green, GLint blue) -{ - DISPATCH(SecondaryColor3iEXT, (red, green, blue), (F, "glSecondaryColor3i(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3iv)(const GLint * v) -{ - DISPATCH(SecondaryColor3ivEXT, (v), (F, "glSecondaryColor3iv(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3s)(GLshort red, GLshort green, GLshort blue) -{ - DISPATCH(SecondaryColor3sEXT, (red, green, blue), (F, "glSecondaryColor3s(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3sv)(const GLshort * v) -{ - DISPATCH(SecondaryColor3svEXT, (v), (F, "glSecondaryColor3sv(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ub)(GLubyte red, GLubyte green, GLubyte blue) -{ - DISPATCH(SecondaryColor3ubEXT, (red, green, blue), (F, "glSecondaryColor3ub(%d, %d, %d);\n", red, green, blue)); -} - -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ubv)(const GLubyte * v) -{ - DISPATCH(SecondaryColor3ubvEXT, (v), (F, "glSecondaryColor3ubv(%p);\n", (const void *) v)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_737)(GLenum face); -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3ui)(GLuint red, GLuint green, GLuint blue) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_737)(GLenum face) { - DISPATCH(SecondaryColor3uiEXT, (red, green, blue), (F, "glSecondaryColor3ui(%d, %d, %d);\n", red, green, blue)); + DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face)); } -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3uiv)(const GLuint * v) -{ - DISPATCH(SecondaryColor3uivEXT, (v), (F, "glSecondaryColor3uiv(%p);\n", (const void *) v)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_738)(GLuint array); -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3us)(GLushort red, GLushort green, GLushort blue) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_738)(GLuint array) { - DISPATCH(SecondaryColor3usEXT, (red, green, blue), (F, "glSecondaryColor3us(%d, %d, %d);\n", red, green, blue)); + DISPATCH(BindVertexArrayAPPLE, (array), (F, "glBindVertexArrayAPPLE(%d);\n", array)); } -KEYWORD1 void KEYWORD2 NAME(SecondaryColor3usv)(const GLushort * v) -{ - DISPATCH(SecondaryColor3usvEXT, (v), (F, "glSecondaryColor3usv(%p);\n", (const void *) v)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_739)(GLsizei n, const GLuint * arrays); -KEYWORD1 void KEYWORD2 NAME(SecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_739)(GLsizei n, const GLuint * arrays) { - DISPATCH(SecondaryColorPointerEXT, (size, type, stride, pointer), (F, "glSecondaryColorPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); + DISPATCH(DeleteVertexArraysAPPLE, (n, arrays), (F, "glDeleteVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos2d)(GLdouble x, GLdouble y) -{ - DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2d(%f, %f);\n", x, y)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_740)(GLsizei n, GLuint * arrays); -KEYWORD1 void KEYWORD2 NAME(WindowPos2dv)(const GLdouble * v) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_740)(GLsizei n, GLuint * arrays) { - DISPATCH(WindowPos2dvMESA, (v), (F, "glWindowPos2dv(%p);\n", (const void *) v)); + DISPATCH(GenVertexArraysAPPLE, (n, arrays), (F, "glGenVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos2f)(GLfloat x, GLfloat y) -{ - DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2f(%f, %f);\n", x, y)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos2fv)(const GLfloat * v) -{ - DISPATCH(WindowPos2fvMESA, (v), (F, "glWindowPos2fv(%p);\n", (const void *) v)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos2i)(GLint x, GLint y) -{ - DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2i(%d, %d);\n", x, y)); -} +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_741)(GLuint array); -KEYWORD1 void KEYWORD2 NAME(WindowPos2iv)(const GLint * v) +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_741)(GLuint array) { - DISPATCH(WindowPos2ivMESA, (v), (F, "glWindowPos2iv(%p);\n", (const void *) v)); + RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArrayAPPLE(%d);\n", array)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos2s)(GLshort x, GLshort y) +KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params) { - DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2s(%d, %d);\n", x, y)); + DISPATCH(GetProgramNamedParameterdvNV, (id, len, name, params), (F, "glGetProgramNamedParameterdvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos2sv)(const GLshort * v) +KEYWORD1 void KEYWORD2 NAME(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params) { - DISPATCH(WindowPos2svMESA, (v), (F, "glWindowPos2sv(%p);\n", (const void *) v)); + DISPATCH(GetProgramNamedParameterfvNV, (id, len, name, params), (F, "glGetProgramNamedParameterfvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos3d)(GLdouble x, GLdouble y, GLdouble z) +KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { - DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3d(%f, %f, %f);\n", x, y, z)); + DISPATCH(ProgramNamedParameter4dNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4dNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos3dv)(const GLdouble * v) +KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v) { - DISPATCH(WindowPos3dvMESA, (v), (F, "glWindowPos3dv(%p);\n", (const void *) v)); + DISPATCH(ProgramNamedParameter4dvNV, (id, len, name, v), (F, "glProgramNamedParameter4dvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos3f)(GLfloat x, GLfloat y, GLfloat z) +KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { - DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3f(%f, %f, %f);\n", x, y, z)); + DISPATCH(ProgramNamedParameter4fNV, (id, len, name, x, y, z, w), (F, "glProgramNamedParameter4fNV(%d, %d, %p, %f, %f, %f, %f);\n", id, len, (const void *) name, x, y, z, w)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos3fv)(const GLfloat * v) +KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v) { - DISPATCH(WindowPos3fvMESA, (v), (F, "glWindowPos3fv(%p);\n", (const void *) v)); + DISPATCH(ProgramNamedParameter4fvNV, (id, len, name, v), (F, "glProgramNamedParameter4fvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) v)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos3i)(GLint x, GLint y, GLint z) -{ - DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3i(%d, %d, %d);\n", x, y, z)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_748)(GLclampd zmin, GLclampd zmax); -KEYWORD1 void KEYWORD2 NAME(WindowPos3iv)(const GLint * v) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_748)(GLclampd zmin, GLclampd zmax) { - DISPATCH(WindowPos3ivMESA, (v), (F, "glWindowPos3iv(%p);\n", (const void *) v)); + DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos3s)(GLshort x, GLshort y, GLshort z) +KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparate)(GLenum modeRGB, GLenum modeA) { - DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3s(%d, %d, %d);\n", x, y, z)); + DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparate(0x%x, 0x%x);\n", modeRGB, modeA)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos3sv)(const GLshort * v) -{ - DISPATCH(WindowPos3svMESA, (v), (F, "glWindowPos3sv(%p);\n", (const void *) v)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_749)(GLenum modeRGB, GLenum modeA); -KEYWORD1 void KEYWORD2 NAME(BindBuffer)(GLenum target, GLuint buffer) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_749)(GLenum modeRGB, GLenum modeA) { - DISPATCH(BindBufferARB, (target, buffer), (F, "glBindBuffer(0x%x, %d);\n", target, buffer)); + DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA)); } -KEYWORD1 void KEYWORD2 NAME(BufferData)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage) +KEYWORD1 void KEYWORD2 NAME(BindFramebufferEXT)(GLenum target, GLuint framebuffer) { - DISPATCH(BufferDataARB, (target, size, data, usage), (F, "glBufferData(0x%x, %d, %p, 0x%x);\n", target, size, (const void *) data, usage)); + DISPATCH(BindFramebufferEXT, (target, framebuffer), (F, "glBindFramebufferEXT(0x%x, %d);\n", target, framebuffer)); } -KEYWORD1 void KEYWORD2 NAME(BufferSubData)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(BindRenderbufferEXT)(GLenum target, GLuint renderbuffer) { - DISPATCH(BufferSubDataARB, (target, offset, size, data), (F, "glBufferSubData(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); + DISPATCH(BindRenderbufferEXT, (target, renderbuffer), (F, "glBindRenderbufferEXT(0x%x, %d);\n", target, renderbuffer)); } -KEYWORD1 void KEYWORD2 NAME(DeleteBuffers)(GLsizei n, const GLuint * buffer) +KEYWORD1 GLenum KEYWORD2 NAME(CheckFramebufferStatusEXT)(GLenum target) { - DISPATCH(DeleteBuffersARB, (n, buffer), (F, "glDeleteBuffers(%d, %p);\n", n, (const void *) buffer)); + RETURN_DISPATCH(CheckFramebufferStatusEXT, (target), (F, "glCheckFramebufferStatusEXT(0x%x);\n", target)); } -KEYWORD1 void KEYWORD2 NAME(GenBuffers)(GLsizei n, GLuint * buffer) +KEYWORD1 void KEYWORD2 NAME(DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers) { - DISPATCH(GenBuffersARB, (n, buffer), (F, "glGenBuffers(%d, %p);\n", n, (const void *) buffer)); + DISPATCH(DeleteFramebuffersEXT, (n, framebuffers), (F, "glDeleteFramebuffersEXT(%d, %p);\n", n, (const void *) framebuffers)); } -KEYWORD1 void KEYWORD2 NAME(GetBufferParameteriv)(GLenum target, GLenum pname, GLint * params) +KEYWORD1 void KEYWORD2 NAME(DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers) { - DISPATCH(GetBufferParameterivARB, (target, pname, params), (F, "glGetBufferParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); + DISPATCH(DeleteRenderbuffersEXT, (n, renderbuffers), (F, "glDeleteRenderbuffersEXT(%d, %p);\n", n, (const void *) renderbuffers)); } -KEYWORD1 void KEYWORD2 NAME(GetBufferPointerv)(GLenum target, GLenum pname, GLvoid ** params) +KEYWORD1 void KEYWORD2 NAME(FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { - DISPATCH(GetBufferPointervARB, (target, pname, params), (F, "glGetBufferPointerv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); + DISPATCH(FramebufferRenderbufferEXT, (target, attachment, renderbuffertarget, renderbuffer), (F, "glFramebufferRenderbufferEXT(0x%x, 0x%x, 0x%x, %d);\n", target, attachment, renderbuffertarget, renderbuffer)); } -KEYWORD1 void KEYWORD2 NAME(GetBufferSubData)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { - DISPATCH(GetBufferSubDataARB, (target, offset, size, data), (F, "glGetBufferSubData(0x%x, %d, %d, %p);\n", target, offset, size, (const void *) data)); + DISPATCH(FramebufferTexture1DEXT, (target, attachment, textarget, texture, level), (F, "glFramebufferTexture1DEXT(0x%x, 0x%x, 0x%x, %d, %d);\n", target, attachment, textarget, texture, level)); } -KEYWORD1 GLboolean KEYWORD2 NAME(IsBuffer)(GLuint buffer) +KEYWORD1 void KEYWORD2 NAME(FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { - RETURN_DISPATCH(IsBufferARB, (buffer), (F, "glIsBuffer(%d);\n", buffer)); + DISPATCH(FramebufferTexture2DEXT, (target, attachment, textarget, texture, level), (F, "glFramebufferTexture2DEXT(0x%x, 0x%x, 0x%x, %d, %d);\n", target, attachment, textarget, texture, level)); } -KEYWORD1 GLvoid * KEYWORD2 NAME(MapBuffer)(GLenum target, GLenum access) +KEYWORD1 void KEYWORD2 NAME(FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) { - RETURN_DISPATCH(MapBufferARB, (target, access), (F, "glMapBuffer(0x%x, 0x%x);\n", target, access)); + DISPATCH(FramebufferTexture3DEXT, (target, attachment, textarget, texture, level, zoffset), (F, "glFramebufferTexture3DEXT(0x%x, 0x%x, 0x%x, %d, %d, %d);\n", target, attachment, textarget, texture, level, zoffset)); } -KEYWORD1 GLboolean KEYWORD2 NAME(UnmapBuffer)(GLenum target) +KEYWORD1 void KEYWORD2 NAME(GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers) { - RETURN_DISPATCH(UnmapBufferARB, (target), (F, "glUnmapBuffer(0x%x);\n", target)); + DISPATCH(GenFramebuffersEXT, (n, framebuffers), (F, "glGenFramebuffersEXT(%d, %p);\n", n, (const void *) framebuffers)); } -KEYWORD1 void KEYWORD2 NAME(GenQueries)(GLsizei n, GLuint * ids) +KEYWORD1 void KEYWORD2 NAME(GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers) { - DISPATCH(GenQueriesARB, (n, ids), (F, "glGenQueries(%d, %p);\n", n, (const void *) ids)); + DISPATCH(GenRenderbuffersEXT, (n, renderbuffers), (F, "glGenRenderbuffersEXT(%d, %p);\n", n, (const void *) renderbuffers)); } -KEYWORD1 void KEYWORD2 NAME(DeleteQueries)(GLsizei n, const GLuint * ids) +KEYWORD1 void KEYWORD2 NAME(GenerateMipmapEXT)(GLenum target) { - DISPATCH(DeleteQueriesARB, (n, ids), (F, "glDeleteQueries(%d, %p);\n", n, (const void *) ids)); + DISPATCH(GenerateMipmapEXT, (target), (F, "glGenerateMipmapEXT(0x%x);\n", target)); } -KEYWORD1 GLboolean KEYWORD2 NAME(IsQuery)(GLuint id) +KEYWORD1 void KEYWORD2 NAME(GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params) { - RETURN_DISPATCH(IsQueryARB, (id), (F, "glIsQuery(%d);\n", id)); + DISPATCH(GetFramebufferAttachmentParameterivEXT, (target, attachment, pname, params), (F, "glGetFramebufferAttachmentParameterivEXT(0x%x, 0x%x, 0x%x, %p);\n", target, attachment, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(BeginQuery)(GLenum target, GLuint id) +KEYWORD1 void KEYWORD2 NAME(GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params) { - DISPATCH(BeginQueryARB, (target, id), (F, "glBeginQuery(0x%x, %d);\n", target, id)); + DISPATCH(GetRenderbufferParameterivEXT, (target, pname, params), (F, "glGetRenderbufferParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(EndQuery)(GLenum target) +KEYWORD1 GLboolean KEYWORD2 NAME(IsFramebufferEXT)(GLuint framebuffer) { - DISPATCH(EndQueryARB, (target), (F, "glEndQuery(0x%x);\n", target)); + RETURN_DISPATCH(IsFramebufferEXT, (framebuffer), (F, "glIsFramebufferEXT(%d);\n", framebuffer)); } -KEYWORD1 void KEYWORD2 NAME(GetQueryiv)(GLenum target, GLenum pname, GLint * params) +KEYWORD1 GLboolean KEYWORD2 NAME(IsRenderbufferEXT)(GLuint renderbuffer) { - DISPATCH(GetQueryivARB, (target, pname, params), (F, "glGetQueryiv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); + RETURN_DISPATCH(IsRenderbufferEXT, (renderbuffer), (F, "glIsRenderbufferEXT(%d);\n", renderbuffer)); } -KEYWORD1 void KEYWORD2 NAME(GetQueryObjectiv)(GLuint id, GLenum pname, GLint * params) +KEYWORD1 void KEYWORD2 NAME(RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) { - DISPATCH(GetQueryObjectivARB, (id, pname, params), (F, "glGetQueryObjectiv(%d, 0x%x, %p);\n", id, pname, (const void *) params)); + DISPATCH(RenderbufferStorageEXT, (target, internalformat, width, height), (F, "glRenderbufferStorageEXT(0x%x, 0x%x, %d, %d);\n", target, internalformat, width, height)); } -KEYWORD1 void KEYWORD2 NAME(GetQueryObjectuiv)(GLuint id, GLenum pname, GLuint * params) -{ - DISPATCH(GetQueryObjectuivARB, (id, pname, params), (F, "glGetQueryObjectuiv(%d, 0x%x, %p);\n", id, pname, (const void *) params)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_767)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -KEYWORD1 void KEYWORD2 NAME(PointParameterfARB)(GLenum pname, GLfloat param) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_767)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { - DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfARB(0x%x, %f);\n", pname, param)); + DISPATCH(BlitFramebufferEXT, (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter), (F, "glBlitFramebufferEXT(%d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x);\n", srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)); } -KEYWORD1 void KEYWORD2 NAME(PointParameterfvARB)(GLenum pname, const GLfloat * params) -{ - DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvARB(0x%x, %p);\n", pname, (const void *) params)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_768)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); -KEYWORD1 void KEYWORD2 NAME(WindowPos2dARB)(GLdouble x, GLdouble y) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_768)(GLenum target, GLuint index, GLsizei count, const GLfloat * params) { - DISPATCH(WindowPos2dMESA, (x, y), (F, "glWindowPos2dARB(%f, %f);\n", x, y)); + DISPATCH(ProgramEnvParameters4fvEXT, (target, index, count, params), (F, "glProgramEnvParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos2fARB)(GLfloat x, GLfloat y) -{ - DISPATCH(WindowPos2fMESA, (x, y), (F, "glWindowPos2fARB(%f, %f);\n", x, y)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_769)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); -KEYWORD1 void KEYWORD2 NAME(WindowPos2iARB)(GLint x, GLint y) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_769)(GLenum target, GLuint index, GLsizei count, const GLfloat * params) { - DISPATCH(WindowPos2iMESA, (x, y), (F, "glWindowPos2iARB(%d, %d);\n", x, y)); + DISPATCH(ProgramLocalParameters4fvEXT, (target, index, count, params), (F, "glProgramLocalParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos2sARB)(GLshort x, GLshort y) -{ - DISPATCH(WindowPos2sMESA, (x, y), (F, "glWindowPos2sARB(%d, %d);\n", x, y)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_770)(GLuint id, GLenum pname, GLint64EXT * params); -KEYWORD1 void KEYWORD2 NAME(WindowPos2dvARB)(const GLdouble * p) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_770)(GLuint id, GLenum pname, GLint64EXT * params) { - DISPATCH(WindowPos2dvMESA, (p), (F, "glWindowPos2dvARB(%p);\n", (const void *) p)); + DISPATCH(GetQueryObjecti64vEXT, (id, pname, params), (F, "glGetQueryObjecti64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(WindowPos2fvARB)(const GLfloat * p) -{ - DISPATCH(WindowPos2fvMESA, (p), (F, "glWindowPos2fvARB(%p);\n", (const void *) p)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos2ivARB)(const GLint * p) -{ - DISPATCH(WindowPos2ivMESA, (p), (F, "glWindowPos2ivARB(%p);\n", (const void *) p)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos2svARB)(const GLshort * p) -{ - DISPATCH(WindowPos2svMESA, (p), (F, "glWindowPos2svARB(%p);\n", (const void *) p)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z) -{ - DISPATCH(WindowPos3dMESA, (x, y, z), (F, "glWindowPos3dARB(%f, %f, %f);\n", x, y, z)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z) -{ - DISPATCH(WindowPos3fMESA, (x, y, z), (F, "glWindowPos3fARB(%f, %f, %f);\n", x, y, z)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3iARB)(GLint x, GLint y, GLint z) -{ - DISPATCH(WindowPos3iMESA, (x, y, z), (F, "glWindowPos3iARB(%d, %d, %d);\n", x, y, z)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3sARB)(GLshort x, GLshort y, GLshort z) -{ - DISPATCH(WindowPos3sMESA, (x, y, z), (F, "glWindowPos3sARB(%d, %d, %d);\n", x, y, z)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3dvARB)(const GLdouble * p) -{ - DISPATCH(WindowPos3dvMESA, (p), (F, "glWindowPos3dvARB(%p);\n", (const void *) p)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3fvARB)(const GLfloat * p) -{ - DISPATCH(WindowPos3fvMESA, (p), (F, "glWindowPos3fvARB(%p);\n", (const void *) p)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3ivARB)(const GLint * p) -{ - DISPATCH(WindowPos3ivMESA, (p), (F, "glWindowPos3ivARB(%p);\n", (const void *) p)); -} - -KEYWORD1 void KEYWORD2 NAME(WindowPos3svARB)(const GLshort * p) -{ - DISPATCH(WindowPos3svMESA, (p), (F, "glWindowPos3svARB(%p);\n", (const void *) p)); -} - -KEYWORD1 void KEYWORD2 NAME(BindProgramARB)(GLenum target, GLuint program) -{ - DISPATCH(BindProgramNV, (target, program), (F, "glBindProgramARB(0x%x, %d);\n", target, program)); -} - -KEYWORD1 void KEYWORD2 NAME(DeleteProgramsARB)(GLsizei n, const GLuint * programs) -{ - DISPATCH(DeleteProgramsNV, (n, programs), (F, "glDeleteProgramsARB(%d, %p);\n", n, (const void *) programs)); -} - -KEYWORD1 void KEYWORD2 NAME(GenProgramsARB)(GLsizei n, GLuint * programs) -{ - DISPATCH(GenProgramsNV, (n, programs), (F, "glGenProgramsARB(%d, %p);\n", n, (const void *) programs)); -} - -KEYWORD1 GLboolean KEYWORD2 NAME(IsProgramARB)(GLuint program) -{ - RETURN_DISPATCH(IsProgramNV, (program), (F, "glIsProgramARB(%d);\n", program)); -} - -KEYWORD1 void KEYWORD2 NAME(GetVertexAttribPointervARB)(GLuint index, GLenum pname, GLvoid ** params) -{ - DISPATCH(GetVertexAttribPointervNV, (index, pname, params), (F, "glGetVertexAttribPointervARB(%d, 0x%x, %p);\n", index, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(BlendColorEXT)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) -{ - DISPATCH(BlendColor, (red, green, blue, alpha), (F, "glBlendColorEXT(%f, %f, %f, %f);\n", red, green, blue, alpha)); -} - -KEYWORD1 void KEYWORD2 NAME(TexImage3DEXT)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) -{ - DISPATCH(TexImage3D, (target, level, internalformat, width, height, depth, border, format, type, pixels), (F, "glTexImage3DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, internalformat, width, height, depth, border, format, type, (const void *) pixels)); -} - -KEYWORD1 void KEYWORD2 NAME(TexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) -{ - DISPATCH(TexSubImage3D, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels), (F, "glTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (const void *) pixels)); -} - -KEYWORD1 void KEYWORD2 NAME(TexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) -{ - DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1DEXT(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels)); -} - -KEYWORD1 void KEYWORD2 NAME(TexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) -{ - DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) -{ - DISPATCH(CopyTexImage1D, (target, level, internalformat, x, y, width, border), (F, "glCopyTexImage1DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, border)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - DISPATCH(CopyTexImage2D, (target, level, internalformat, x, y, width, height, border), (F, "glCopyTexImage2DEXT(0x%x, %d, 0x%x, %d, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, height, border)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - DISPATCH(CopyTexSubImage1D, (target, level, xoffset, x, y, width), (F, "glCopyTexSubImage1DEXT(0x%x, %d, %d, %d, %d, %d);\n", target, level, xoffset, x, y, width)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - DISPATCH(CopyTexSubImage2D, (target, level, xoffset, yoffset, x, y, width, height), (F, "glCopyTexSubImage2DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - DISPATCH(CopyTexSubImage3D, (target, level, xoffset, yoffset, zoffset, x, y, width, height), (F, "glCopyTexSubImage3DEXT(0x%x, %d, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, zoffset, x, y, width, height)); -} - -KEYWORD1 void KEYWORD2 NAME(HistogramEXT)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) -{ - DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogramEXT(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink)); -} - -KEYWORD1 void KEYWORD2 NAME(MinmaxEXT)(GLenum target, GLenum internalformat, GLboolean sink) -{ - DISPATCH(Minmax, (target, internalformat, sink), (F, "glMinmaxEXT(0x%x, 0x%x, %d);\n", target, internalformat, sink)); -} - -KEYWORD1 void KEYWORD2 NAME(ResetHistogramEXT)(GLenum target) -{ - DISPATCH(ResetHistogram, (target), (F, "glResetHistogramEXT(0x%x);\n", target)); -} - -KEYWORD1 void KEYWORD2 NAME(ResetMinmaxEXT)(GLenum target) -{ - DISPATCH(ResetMinmax, (target), (F, "glResetMinmaxEXT(0x%x);\n", target)); -} - -KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) -{ - DISPATCH(ConvolutionFilter1D, (target, internalformat, width, format, type, image), (F, "glConvolutionFilter1DEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) image)); -} - -KEYWORD1 void KEYWORD2 NAME(ConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) -{ - DISPATCH(ConvolutionFilter2D, (target, internalformat, width, height, format, type, image), (F, "glConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, height, format, type, (const void *) image)); -} - -KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfEXT)(GLenum target, GLenum pname, GLfloat params) -{ - DISPATCH(ConvolutionParameterf, (target, pname, params), (F, "glConvolutionParameterfEXT(0x%x, 0x%x, %f);\n", target, pname, params)); -} - -KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params) -{ - DISPATCH(ConvolutionParameterfv, (target, pname, params), (F, "glConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(ConvolutionParameteriEXT)(GLenum target, GLenum pname, GLint params) -{ - DISPATCH(ConvolutionParameteri, (target, pname, params), (F, "glConvolutionParameteriEXT(0x%x, 0x%x, %d);\n", target, pname, params)); -} - -KEYWORD1 void KEYWORD2 NAME(ConvolutionParameterivEXT)(GLenum target, GLenum pname, const GLint * params) -{ - DISPATCH(ConvolutionParameteriv, (target, pname, params), (F, "glConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) -{ - DISPATCH(CopyConvolutionFilter1D, (target, internalformat, x, y, width), (F, "glCopyConvolutionFilter1DEXT(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - DISPATCH(CopyConvolutionFilter2D, (target, internalformat, x, y, width, height), (F, "glCopyConvolutionFilter2DEXT(0x%x, 0x%x, %d, %d, %d, %d);\n", target, internalformat, x, y, width, height)); -} - -KEYWORD1 void KEYWORD2 NAME(SeparableFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) -{ - DISPATCH(SeparableFilter2D, (target, internalformat, width, height, format, type, row, column), (F, "glSeparableFilter2DEXT(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p, %p);\n", target, internalformat, width, height, format, type, (const void *) row, (const void *) column)); -} - -KEYWORD1 void KEYWORD2 NAME(ColorTableSGI)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) -{ - DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableSGI(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); -} - -KEYWORD1 void KEYWORD2 NAME(ColorTableParameterfvSGI)(GLenum target, GLenum pname, const GLfloat * params) -{ - DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(ColorTableParameterivSGI)(GLenum target, GLenum pname, const GLint * params) -{ - DISPATCH(ColorTableParameteriv, (target, pname, params), (F, "glColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyColorTableSGI)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) -{ - DISPATCH(CopyColorTable, (target, internalformat, x, y, width), (F, "glCopyColorTableSGI(0x%x, 0x%x, %d, %d, %d);\n", target, internalformat, x, y, width)); -} - -KEYWORD1 void KEYWORD2 NAME(BindTextureEXT)(GLenum target, GLuint texture) -{ - DISPATCH(BindTexture, (target, texture), (F, "glBindTextureEXT(0x%x, %d);\n", target, texture)); -} - -KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures) -{ - DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures)); -} - -KEYWORD1 void KEYWORD2 NAME(PrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities) -{ - DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTexturesEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities)); -} - -KEYWORD1 void KEYWORD2 NAME(ArrayElementEXT)(GLint i) -{ - DISPATCH(ArrayElement, (i), (F, "glArrayElementEXT(%d);\n", i)); -} - -KEYWORD1 void KEYWORD2 NAME(DrawArraysEXT)(GLenum mode, GLint first, GLsizei count) -{ - DISPATCH(DrawArrays, (mode, first, count), (F, "glDrawArraysEXT(0x%x, %d, %d);\n", mode, first, count)); -} - -KEYWORD1 void KEYWORD2 NAME(GetPointervEXT)(GLenum pname, GLvoid ** params) -{ - DISPATCH(GetPointerv, (pname, params), (F, "glGetPointervEXT(0x%x, %p);\n", pname, (const void *) params)); -} - -KEYWORD1 void KEYWORD2 NAME(BlendEquationEXT)(GLenum mode) -{ - DISPATCH(BlendEquation, (mode), (F, "glBlendEquationEXT(0x%x);\n", mode)); -} - -KEYWORD1 void KEYWORD2 NAME(ColorSubTableEXT)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) -{ - DISPATCH(ColorSubTable, (target, start, count, format, type, data), (F, "glColorSubTableEXT(0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, start, count, format, type, (const void *) data)); -} - -KEYWORD1 void KEYWORD2 NAME(CopyColorSubTableEXT)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - DISPATCH(CopyColorSubTable, (target, start, x, y, width), (F, "glCopyColorSubTableEXT(0x%x, %d, %d, %d, %d);\n", target, start, x, y, width)); -} - -KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) -{ - DISPATCH(ColorTable, (target, internalFormat, width, format, type, table), (F, "glColorTableEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalFormat, width, format, type, (const void *) table)); -} - -KEYWORD1 void KEYWORD2 NAME(DrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) -{ - DISPATCH(DrawRangeElements, (mode, start, end, count, type, indices), (F, "glDrawRangeElementsEXT(0x%x, %d, %d, %d, 0x%x, %p);\n", mode, start, end, count, type, (const void *) indices)); -} - -KEYWORD1 void KEYWORD2 NAME(SampleMaskEXT)(GLclampf value, GLboolean invert) -{ - DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskEXT(%f, %d);\n", value, invert)); -} - -KEYWORD1 void KEYWORD2 NAME(SamplePatternEXT)(GLenum pattern) -{ - DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternEXT(0x%x);\n", pattern)); -} - -KEYWORD1 void KEYWORD2 NAME(DrawBuffersATI)(GLsizei n, const GLenum * bufs) -{ - DISPATCH(DrawBuffersARB, (n, bufs), (F, "glDrawBuffersATI(%d, %p);\n", n, (const void *) bufs)); -} - -KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparateATI)(GLenum modeRGB, GLenum modeA) -{ - DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateATI(0x%x, 0x%x);\n", modeRGB, modeA)); -} - -KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateINGR)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateINGR(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)); -} - -KEYWORD1 void KEYWORD2 NAME(PointParameterfSGIS)(GLenum pname, GLfloat param) -{ - DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param)); -} +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_771)(GLuint id, GLenum pname, GLuint64EXT * params); -KEYWORD1 void KEYWORD2 NAME(PointParameterfvSGIS)(GLenum pname, const GLfloat * params) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_771)(GLuint id, GLenum pname, GLuint64EXT * params) { - DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params)); + DISPATCH(GetQueryObjectui64vEXT, (id, pname, params), (F, "glGetQueryObjectui64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params)); } @@ -5362,103 +5861,214 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(MultiTexCoord4ivARB), TABLE_ENTRY(MultiTexCoord4sARB), TABLE_ENTRY(MultiTexCoord4svARB), - TABLE_ENTRY(LoadTransposeMatrixfARB), + TABLE_ENTRY(AttachShader), + TABLE_ENTRY(CreateProgram), + TABLE_ENTRY(CreateShader), + TABLE_ENTRY(DeleteProgram), + TABLE_ENTRY(DeleteShader), + TABLE_ENTRY(DetachShader), + TABLE_ENTRY(GetAttachedShaders), + TABLE_ENTRY(GetProgramInfoLog), + TABLE_ENTRY(GetProgramiv), + TABLE_ENTRY(GetShaderInfoLog), + TABLE_ENTRY(GetShaderiv), + TABLE_ENTRY(IsProgram), + TABLE_ENTRY(IsShader), + TABLE_ENTRY(StencilFuncSeparate), + TABLE_ENTRY(StencilMaskSeparate), + TABLE_ENTRY(StencilOpSeparate), + TABLE_ENTRY(UniformMatrix2x3fv), + TABLE_ENTRY(UniformMatrix2x4fv), + TABLE_ENTRY(UniformMatrix3x2fv), + TABLE_ENTRY(UniformMatrix3x4fv), + TABLE_ENTRY(UniformMatrix4x2fv), + TABLE_ENTRY(UniformMatrix4x3fv), TABLE_ENTRY(LoadTransposeMatrixdARB), - TABLE_ENTRY(MultTransposeMatrixfARB), + TABLE_ENTRY(LoadTransposeMatrixfARB), TABLE_ENTRY(MultTransposeMatrixdARB), + TABLE_ENTRY(MultTransposeMatrixfARB), TABLE_ENTRY(SampleCoverageARB), + TABLE_ENTRY(CompressedTexImage1DARB), + TABLE_ENTRY(CompressedTexImage2DARB), + TABLE_ENTRY(CompressedTexImage3DARB), + TABLE_ENTRY(CompressedTexSubImage1DARB), + TABLE_ENTRY(CompressedTexSubImage2DARB), + TABLE_ENTRY(CompressedTexSubImage3DARB), + TABLE_ENTRY(GetCompressedTexImageARB), + TABLE_ENTRY(DisableVertexAttribArrayARB), + TABLE_ENTRY(EnableVertexAttribArrayARB), + TABLE_ENTRY(GetProgramEnvParameterdvARB), + TABLE_ENTRY(GetProgramEnvParameterfvARB), + TABLE_ENTRY(GetProgramLocalParameterdvARB), + TABLE_ENTRY(GetProgramLocalParameterfvARB), + TABLE_ENTRY(GetProgramStringARB), + TABLE_ENTRY(GetProgramivARB), + TABLE_ENTRY(GetVertexAttribdvARB), + TABLE_ENTRY(GetVertexAttribfvARB), + TABLE_ENTRY(GetVertexAttribivARB), + TABLE_ENTRY(ProgramEnvParameter4dARB), + TABLE_ENTRY(ProgramEnvParameter4dvARB), + TABLE_ENTRY(ProgramEnvParameter4fARB), + TABLE_ENTRY(ProgramEnvParameter4fvARB), + TABLE_ENTRY(ProgramLocalParameter4dARB), + TABLE_ENTRY(ProgramLocalParameter4dvARB), + TABLE_ENTRY(ProgramLocalParameter4fARB), + TABLE_ENTRY(ProgramLocalParameter4fvARB), + TABLE_ENTRY(ProgramStringARB), + TABLE_ENTRY(VertexAttrib1dARB), + TABLE_ENTRY(VertexAttrib1dvARB), + TABLE_ENTRY(VertexAttrib1fARB), + TABLE_ENTRY(VertexAttrib1fvARB), + TABLE_ENTRY(VertexAttrib1sARB), + TABLE_ENTRY(VertexAttrib1svARB), + TABLE_ENTRY(VertexAttrib2dARB), + TABLE_ENTRY(VertexAttrib2dvARB), + TABLE_ENTRY(VertexAttrib2fARB), + TABLE_ENTRY(VertexAttrib2fvARB), + TABLE_ENTRY(VertexAttrib2sARB), + TABLE_ENTRY(VertexAttrib2svARB), + TABLE_ENTRY(VertexAttrib3dARB), + TABLE_ENTRY(VertexAttrib3dvARB), + TABLE_ENTRY(VertexAttrib3fARB), + TABLE_ENTRY(VertexAttrib3fvARB), + TABLE_ENTRY(VertexAttrib3sARB), + TABLE_ENTRY(VertexAttrib3svARB), + TABLE_ENTRY(VertexAttrib4NbvARB), + TABLE_ENTRY(VertexAttrib4NivARB), + TABLE_ENTRY(VertexAttrib4NsvARB), + TABLE_ENTRY(VertexAttrib4NubARB), + TABLE_ENTRY(VertexAttrib4NubvARB), + TABLE_ENTRY(VertexAttrib4NuivARB), + TABLE_ENTRY(VertexAttrib4NusvARB), + TABLE_ENTRY(VertexAttrib4bvARB), + TABLE_ENTRY(VertexAttrib4dARB), + TABLE_ENTRY(VertexAttrib4dvARB), + TABLE_ENTRY(VertexAttrib4fARB), + TABLE_ENTRY(VertexAttrib4fvARB), + TABLE_ENTRY(VertexAttrib4ivARB), + TABLE_ENTRY(VertexAttrib4sARB), + TABLE_ENTRY(VertexAttrib4svARB), + TABLE_ENTRY(VertexAttrib4ubvARB), + TABLE_ENTRY(VertexAttrib4uivARB), + TABLE_ENTRY(VertexAttrib4usvARB), + TABLE_ENTRY(VertexAttribPointerARB), + TABLE_ENTRY(BindBufferARB), + TABLE_ENTRY(BufferDataARB), + TABLE_ENTRY(BufferSubDataARB), + TABLE_ENTRY(DeleteBuffersARB), + TABLE_ENTRY(GenBuffersARB), + TABLE_ENTRY(GetBufferParameterivARB), + TABLE_ENTRY(GetBufferPointervARB), + TABLE_ENTRY(GetBufferSubDataARB), + TABLE_ENTRY(IsBufferARB), + TABLE_ENTRY(MapBufferARB), + TABLE_ENTRY(UnmapBufferARB), + TABLE_ENTRY(BeginQueryARB), + TABLE_ENTRY(DeleteQueriesARB), + TABLE_ENTRY(EndQueryARB), + TABLE_ENTRY(GenQueriesARB), + TABLE_ENTRY(GetQueryObjectivARB), + TABLE_ENTRY(GetQueryObjectuivARB), + TABLE_ENTRY(GetQueryivARB), + TABLE_ENTRY(IsQueryARB), + TABLE_ENTRY(AttachObjectARB), + TABLE_ENTRY(CompileShaderARB), + TABLE_ENTRY(CreateProgramObjectARB), + TABLE_ENTRY(CreateShaderObjectARB), + TABLE_ENTRY(DeleteObjectARB), + TABLE_ENTRY(DetachObjectARB), + TABLE_ENTRY(GetActiveUniformARB), + TABLE_ENTRY(GetAttachedObjectsARB), + TABLE_ENTRY(GetHandleARB), + TABLE_ENTRY(GetInfoLogARB), + TABLE_ENTRY(GetObjectParameterfvARB), + TABLE_ENTRY(GetObjectParameterivARB), + TABLE_ENTRY(GetShaderSourceARB), + TABLE_ENTRY(GetUniformLocationARB), + TABLE_ENTRY(GetUniformfvARB), + TABLE_ENTRY(GetUniformivARB), + TABLE_ENTRY(LinkProgramARB), + TABLE_ENTRY(ShaderSourceARB), + TABLE_ENTRY(Uniform1fARB), + TABLE_ENTRY(Uniform1fvARB), + TABLE_ENTRY(Uniform1iARB), + TABLE_ENTRY(Uniform1ivARB), + TABLE_ENTRY(Uniform2fARB), + TABLE_ENTRY(Uniform2fvARB), + TABLE_ENTRY(Uniform2iARB), + TABLE_ENTRY(Uniform2ivARB), + TABLE_ENTRY(Uniform3fARB), + TABLE_ENTRY(Uniform3fvARB), + TABLE_ENTRY(Uniform3iARB), + TABLE_ENTRY(Uniform3ivARB), + TABLE_ENTRY(Uniform4fARB), + TABLE_ENTRY(Uniform4fvARB), + TABLE_ENTRY(Uniform4iARB), + TABLE_ENTRY(Uniform4ivARB), + TABLE_ENTRY(UniformMatrix2fvARB), + TABLE_ENTRY(UniformMatrix3fvARB), + TABLE_ENTRY(UniformMatrix4fvARB), + TABLE_ENTRY(UseProgramObjectARB), + TABLE_ENTRY(ValidateProgramARB), + TABLE_ENTRY(BindAttribLocationARB), + TABLE_ENTRY(GetActiveAttribARB), + TABLE_ENTRY(GetAttribLocationARB), TABLE_ENTRY(DrawBuffersARB), TABLE_ENTRY(PolygonOffsetEXT), - TABLE_ENTRY(GetTexFilterFuncSGIS), - TABLE_ENTRY(TexFilterFuncSGIS), - TABLE_ENTRY(GetHistogramEXT), - TABLE_ENTRY(GetHistogramParameterfvEXT), - TABLE_ENTRY(GetHistogramParameterivEXT), - TABLE_ENTRY(GetMinmaxEXT), - TABLE_ENTRY(GetMinmaxParameterfvEXT), - TABLE_ENTRY(GetMinmaxParameterivEXT), - TABLE_ENTRY(GetConvolutionFilterEXT), - TABLE_ENTRY(GetConvolutionParameterfvEXT), - TABLE_ENTRY(GetConvolutionParameterivEXT), - TABLE_ENTRY(GetSeparableFilterEXT), - TABLE_ENTRY(GetColorTableSGI), - TABLE_ENTRY(GetColorTableParameterfvSGI), - TABLE_ENTRY(GetColorTableParameterivSGI), - TABLE_ENTRY(PixelTexGenSGIX), - TABLE_ENTRY(PixelTexGenParameteriSGIS), - TABLE_ENTRY(PixelTexGenParameterivSGIS), - TABLE_ENTRY(PixelTexGenParameterfSGIS), - TABLE_ENTRY(PixelTexGenParameterfvSGIS), - TABLE_ENTRY(GetPixelTexGenParameterivSGIS), - TABLE_ENTRY(GetPixelTexGenParameterfvSGIS), - TABLE_ENTRY(TexImage4DSGIS), - TABLE_ENTRY(TexSubImage4DSGIS), - TABLE_ENTRY(AreTexturesResidentEXT), - TABLE_ENTRY(GenTexturesEXT), - TABLE_ENTRY(IsTextureEXT), - TABLE_ENTRY(DetailTexFuncSGIS), - TABLE_ENTRY(GetDetailTexFuncSGIS), - TABLE_ENTRY(SharpenTexFuncSGIS), - TABLE_ENTRY(GetSharpenTexFuncSGIS), - TABLE_ENTRY(SampleMaskSGIS), - TABLE_ENTRY(SamplePatternSGIS), + TABLE_ENTRY(_dispatch_stub_562), + TABLE_ENTRY(_dispatch_stub_563), + TABLE_ENTRY(_dispatch_stub_564), + TABLE_ENTRY(_dispatch_stub_565), + TABLE_ENTRY(_dispatch_stub_566), + TABLE_ENTRY(_dispatch_stub_567), + TABLE_ENTRY(_dispatch_stub_568), + TABLE_ENTRY(_dispatch_stub_569), TABLE_ENTRY(ColorPointerEXT), TABLE_ENTRY(EdgeFlagPointerEXT), TABLE_ENTRY(IndexPointerEXT), TABLE_ENTRY(NormalPointerEXT), TABLE_ENTRY(TexCoordPointerEXT), TABLE_ENTRY(VertexPointerEXT), - TABLE_ENTRY(SpriteParameterfSGIX), - TABLE_ENTRY(SpriteParameterfvSGIX), - TABLE_ENTRY(SpriteParameteriSGIX), - TABLE_ENTRY(SpriteParameterivSGIX), TABLE_ENTRY(PointParameterfEXT), TABLE_ENTRY(PointParameterfvEXT), - TABLE_ENTRY(GetInstrumentsSGIX), - TABLE_ENTRY(InstrumentsBufferSGIX), - TABLE_ENTRY(PollInstrumentsSGIX), - TABLE_ENTRY(ReadInstrumentsSGIX), - TABLE_ENTRY(StartInstrumentsSGIX), - TABLE_ENTRY(StopInstrumentsSGIX), - TABLE_ENTRY(FrameZoomSGIX), - TABLE_ENTRY(TagSampleBufferSGIX), - TABLE_ENTRY(ReferencePlaneSGIX), - TABLE_ENTRY(FlushRasterSGIX), - TABLE_ENTRY(GetListParameterfvSGIX), - TABLE_ENTRY(GetListParameterivSGIX), - TABLE_ENTRY(ListParameterfSGIX), - TABLE_ENTRY(ListParameterfvSGIX), - TABLE_ENTRY(ListParameteriSGIX), - TABLE_ENTRY(ListParameterivSGIX), - TABLE_ENTRY(FragmentColorMaterialSGIX), - TABLE_ENTRY(FragmentLightfSGIX), - TABLE_ENTRY(FragmentLightfvSGIX), - TABLE_ENTRY(FragmentLightiSGIX), - TABLE_ENTRY(FragmentLightivSGIX), - TABLE_ENTRY(FragmentLightModelfSGIX), - TABLE_ENTRY(FragmentLightModelfvSGIX), - TABLE_ENTRY(FragmentLightModeliSGIX), - TABLE_ENTRY(FragmentLightModelivSGIX), - TABLE_ENTRY(FragmentMaterialfSGIX), - TABLE_ENTRY(FragmentMaterialfvSGIX), - TABLE_ENTRY(FragmentMaterialiSGIX), - TABLE_ENTRY(FragmentMaterialivSGIX), - TABLE_ENTRY(GetFragmentLightfvSGIX), - TABLE_ENTRY(GetFragmentLightivSGIX), - TABLE_ENTRY(GetFragmentMaterialfvSGIX), - TABLE_ENTRY(GetFragmentMaterialivSGIX), - TABLE_ENTRY(LightEnviSGIX), - TABLE_ENTRY(VertexWeightfEXT), - TABLE_ENTRY(VertexWeightfvEXT), - TABLE_ENTRY(VertexWeightPointerEXT), + TABLE_ENTRY(LockArraysEXT), + TABLE_ENTRY(UnlockArraysEXT), + TABLE_ENTRY(_dispatch_stub_580), + TABLE_ENTRY(_dispatch_stub_581), + TABLE_ENTRY(SecondaryColor3bEXT), + TABLE_ENTRY(SecondaryColor3bvEXT), + TABLE_ENTRY(SecondaryColor3dEXT), + TABLE_ENTRY(SecondaryColor3dvEXT), + TABLE_ENTRY(SecondaryColor3fEXT), + TABLE_ENTRY(SecondaryColor3fvEXT), + TABLE_ENTRY(SecondaryColor3iEXT), + TABLE_ENTRY(SecondaryColor3ivEXT), + TABLE_ENTRY(SecondaryColor3sEXT), + TABLE_ENTRY(SecondaryColor3svEXT), + TABLE_ENTRY(SecondaryColor3ubEXT), + TABLE_ENTRY(SecondaryColor3ubvEXT), + TABLE_ENTRY(SecondaryColor3uiEXT), + TABLE_ENTRY(SecondaryColor3uivEXT), + TABLE_ENTRY(SecondaryColor3usEXT), + TABLE_ENTRY(SecondaryColor3usvEXT), + TABLE_ENTRY(SecondaryColorPointerEXT), + TABLE_ENTRY(MultiDrawArraysEXT), + TABLE_ENTRY(MultiDrawElementsEXT), + TABLE_ENTRY(FogCoordPointerEXT), + TABLE_ENTRY(FogCoorddEXT), + TABLE_ENTRY(FogCoorddvEXT), + TABLE_ENTRY(FogCoordfEXT), + TABLE_ENTRY(FogCoordfvEXT), + TABLE_ENTRY(_dispatch_stub_606), + TABLE_ENTRY(BlendFuncSeparateEXT), TABLE_ENTRY(FlushVertexArrayRangeNV), TABLE_ENTRY(VertexArrayRangeNV), - TABLE_ENTRY(CombinerParameterfvNV), - TABLE_ENTRY(CombinerParameterfNV), - TABLE_ENTRY(CombinerParameterivNV), - TABLE_ENTRY(CombinerParameteriNV), TABLE_ENTRY(CombinerInputNV), TABLE_ENTRY(CombinerOutputNV), + TABLE_ENTRY(CombinerParameterfNV), + TABLE_ENTRY(CombinerParameterfvNV), + TABLE_ENTRY(CombinerParameteriNV), + TABLE_ENTRY(CombinerParameterivNV), TABLE_ENTRY(FinalCombinerInputNV), TABLE_ENTRY(GetCombinerInputParameterfvNV), TABLE_ENTRY(GetCombinerInputParameterivNV), @@ -5491,47 +6101,15 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(WindowPos4ivMESA), TABLE_ENTRY(WindowPos4sMESA), TABLE_ENTRY(WindowPos4svMESA), - TABLE_ENTRY(BlendFuncSeparateEXT), - TABLE_ENTRY(IndexMaterialEXT), - TABLE_ENTRY(IndexFuncEXT), - TABLE_ENTRY(LockArraysEXT), - TABLE_ENTRY(UnlockArraysEXT), - TABLE_ENTRY(CullParameterdvEXT), - TABLE_ENTRY(CullParameterfvEXT), - TABLE_ENTRY(HintPGI), - TABLE_ENTRY(FogCoordfEXT), - TABLE_ENTRY(FogCoordfvEXT), - TABLE_ENTRY(FogCoorddEXT), - TABLE_ENTRY(FogCoorddvEXT), - TABLE_ENTRY(FogCoordPointerEXT), - TABLE_ENTRY(GetColorTableEXT), - TABLE_ENTRY(GetColorTableParameterivEXT), - TABLE_ENTRY(GetColorTableParameterfvEXT), - TABLE_ENTRY(TbufferMask3DFX), - TABLE_ENTRY(CompressedTexImage3DARB), - TABLE_ENTRY(CompressedTexImage2DARB), - TABLE_ENTRY(CompressedTexImage1DARB), - TABLE_ENTRY(CompressedTexSubImage3DARB), - TABLE_ENTRY(CompressedTexSubImage2DARB), - TABLE_ENTRY(CompressedTexSubImage1DARB), - TABLE_ENTRY(GetCompressedTexImageARB), - TABLE_ENTRY(SecondaryColor3bEXT), - TABLE_ENTRY(SecondaryColor3bvEXT), - TABLE_ENTRY(SecondaryColor3dEXT), - TABLE_ENTRY(SecondaryColor3dvEXT), - TABLE_ENTRY(SecondaryColor3fEXT), - TABLE_ENTRY(SecondaryColor3fvEXT), - TABLE_ENTRY(SecondaryColor3iEXT), - TABLE_ENTRY(SecondaryColor3ivEXT), - TABLE_ENTRY(SecondaryColor3sEXT), - TABLE_ENTRY(SecondaryColor3svEXT), - TABLE_ENTRY(SecondaryColor3ubEXT), - TABLE_ENTRY(SecondaryColor3ubvEXT), - TABLE_ENTRY(SecondaryColor3uiEXT), - TABLE_ENTRY(SecondaryColor3uivEXT), - TABLE_ENTRY(SecondaryColor3usEXT), - TABLE_ENTRY(SecondaryColor3usvEXT), - TABLE_ENTRY(SecondaryColorPointerEXT), + TABLE_ENTRY(_dispatch_stub_648), + TABLE_ENTRY(_dispatch_stub_649), + TABLE_ENTRY(_dispatch_stub_650), + TABLE_ENTRY(_dispatch_stub_651), + TABLE_ENTRY(_dispatch_stub_652), + TABLE_ENTRY(_dispatch_stub_653), + TABLE_ENTRY(_dispatch_stub_654), + TABLE_ENTRY(_dispatch_stub_655), + TABLE_ENTRY(_dispatch_stub_656), TABLE_ENTRY(AreProgramsResidentNV), TABLE_ENTRY(BindProgramNV), TABLE_ENTRY(DeleteProgramsNV), @@ -5539,13 +6117,13 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(GenProgramsNV), TABLE_ENTRY(GetProgramParameterdvNV), TABLE_ENTRY(GetProgramParameterfvNV), - TABLE_ENTRY(GetProgramivNV), TABLE_ENTRY(GetProgramStringNV), + TABLE_ENTRY(GetProgramivNV), TABLE_ENTRY(GetTrackMatrixivNV), - TABLE_ENTRY(GetVertexAttribdvARB), - TABLE_ENTRY(GetVertexAttribfvARB), - TABLE_ENTRY(GetVertexAttribivARB), TABLE_ENTRY(GetVertexAttribPointervNV), + TABLE_ENTRY(GetVertexAttribdvNV), + TABLE_ENTRY(GetVertexAttribfvNV), + TABLE_ENTRY(GetVertexAttribivNV), TABLE_ENTRY(IsProgramNV), TABLE_ENTRY(LoadProgramNV), TABLE_ENTRY(ProgramParameter4dNV), @@ -5556,160 +6134,6 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(ProgramParameters4fvNV), TABLE_ENTRY(RequestResidentProgramsNV), TABLE_ENTRY(TrackMatrixNV), - TABLE_ENTRY(VertexAttribPointerNV), - TABLE_ENTRY(VertexAttrib1dARB), - TABLE_ENTRY(VertexAttrib1dvARB), - TABLE_ENTRY(VertexAttrib1fARB), - TABLE_ENTRY(VertexAttrib1fvARB), - TABLE_ENTRY(VertexAttrib1sARB), - TABLE_ENTRY(VertexAttrib1svARB), - TABLE_ENTRY(VertexAttrib2dARB), - TABLE_ENTRY(VertexAttrib2dvARB), - TABLE_ENTRY(VertexAttrib2fARB), - TABLE_ENTRY(VertexAttrib2fvARB), - TABLE_ENTRY(VertexAttrib2sARB), - TABLE_ENTRY(VertexAttrib2svARB), - TABLE_ENTRY(VertexAttrib3dARB), - TABLE_ENTRY(VertexAttrib3dvARB), - TABLE_ENTRY(VertexAttrib3fARB), - TABLE_ENTRY(VertexAttrib3fvARB), - TABLE_ENTRY(VertexAttrib3sARB), - TABLE_ENTRY(VertexAttrib3svARB), - TABLE_ENTRY(VertexAttrib4dARB), - TABLE_ENTRY(VertexAttrib4dvARB), - TABLE_ENTRY(VertexAttrib4fARB), - TABLE_ENTRY(VertexAttrib4fvARB), - TABLE_ENTRY(VertexAttrib4sARB), - TABLE_ENTRY(VertexAttrib4svARB), - TABLE_ENTRY(VertexAttrib4NubARB), - TABLE_ENTRY(VertexAttrib4NubvARB), - TABLE_ENTRY(VertexAttribs1dvNV), - TABLE_ENTRY(VertexAttribs1fvNV), - TABLE_ENTRY(VertexAttribs1svNV), - TABLE_ENTRY(VertexAttribs2dvNV), - TABLE_ENTRY(VertexAttribs2fvNV), - TABLE_ENTRY(VertexAttribs2svNV), - TABLE_ENTRY(VertexAttribs3dvNV), - TABLE_ENTRY(VertexAttribs3fvNV), - TABLE_ENTRY(VertexAttribs3svNV), - TABLE_ENTRY(VertexAttribs4dvNV), - TABLE_ENTRY(VertexAttribs4fvNV), - TABLE_ENTRY(VertexAttribs4svNV), - TABLE_ENTRY(VertexAttribs4ubvNV), - TABLE_ENTRY(PointParameteriNV), - TABLE_ENTRY(PointParameterivNV), - TABLE_ENTRY(MultiDrawArraysEXT), - TABLE_ENTRY(MultiDrawElementsEXT), - TABLE_ENTRY(ActiveStencilFaceEXT), - TABLE_ENTRY(DeleteFencesNV), - TABLE_ENTRY(GenFencesNV), - TABLE_ENTRY(IsFenceNV), - TABLE_ENTRY(TestFenceNV), - TABLE_ENTRY(GetFenceivNV), - TABLE_ENTRY(FinishFenceNV), - TABLE_ENTRY(SetFenceNV), - TABLE_ENTRY(VertexAttrib4bvARB), - TABLE_ENTRY(VertexAttrib4ivARB), - TABLE_ENTRY(VertexAttrib4ubvARB), - TABLE_ENTRY(VertexAttrib4usvARB), - TABLE_ENTRY(VertexAttrib4uivARB), - TABLE_ENTRY(VertexAttrib4NbvARB), - TABLE_ENTRY(VertexAttrib4NsvARB), - TABLE_ENTRY(VertexAttrib4NivARB), - TABLE_ENTRY(VertexAttrib4NusvARB), - TABLE_ENTRY(VertexAttrib4NuivARB), - TABLE_ENTRY(VertexAttribPointerARB), - TABLE_ENTRY(EnableVertexAttribArrayARB), - TABLE_ENTRY(DisableVertexAttribArrayARB), - TABLE_ENTRY(ProgramStringARB), - TABLE_ENTRY(ProgramEnvParameter4dARB), - TABLE_ENTRY(ProgramEnvParameter4dvARB), - TABLE_ENTRY(ProgramEnvParameter4fARB), - TABLE_ENTRY(ProgramEnvParameter4fvARB), - TABLE_ENTRY(ProgramLocalParameter4dARB), - TABLE_ENTRY(ProgramLocalParameter4dvARB), - TABLE_ENTRY(ProgramLocalParameter4fARB), - TABLE_ENTRY(ProgramLocalParameter4fvARB), - TABLE_ENTRY(GetProgramEnvParameterdvARB), - TABLE_ENTRY(GetProgramEnvParameterfvARB), - TABLE_ENTRY(GetProgramLocalParameterdvARB), - TABLE_ENTRY(GetProgramLocalParameterfvARB), - TABLE_ENTRY(GetProgramivARB), - TABLE_ENTRY(GetProgramStringARB), - TABLE_ENTRY(ProgramNamedParameter4fNV), - TABLE_ENTRY(ProgramNamedParameter4dNV), - TABLE_ENTRY(ProgramNamedParameter4fvNV), - TABLE_ENTRY(ProgramNamedParameter4dvNV), - TABLE_ENTRY(GetProgramNamedParameterfvNV), - TABLE_ENTRY(GetProgramNamedParameterdvNV), - TABLE_ENTRY(BindBufferARB), - TABLE_ENTRY(BufferDataARB), - TABLE_ENTRY(BufferSubDataARB), - TABLE_ENTRY(DeleteBuffersARB), - TABLE_ENTRY(GenBuffersARB), - TABLE_ENTRY(GetBufferParameterivARB), - TABLE_ENTRY(GetBufferPointervARB), - TABLE_ENTRY(GetBufferSubDataARB), - TABLE_ENTRY(IsBufferARB), - TABLE_ENTRY(MapBufferARB), - TABLE_ENTRY(UnmapBufferARB), - TABLE_ENTRY(DepthBoundsEXT), - TABLE_ENTRY(GenQueriesARB), - TABLE_ENTRY(DeleteQueriesARB), - TABLE_ENTRY(IsQueryARB), - TABLE_ENTRY(BeginQueryARB), - TABLE_ENTRY(EndQueryARB), - TABLE_ENTRY(GetQueryivARB), - TABLE_ENTRY(GetQueryObjectivARB), - TABLE_ENTRY(GetQueryObjectuivARB), - TABLE_ENTRY(MultiModeDrawArraysIBM), - TABLE_ENTRY(MultiModeDrawElementsIBM), - TABLE_ENTRY(BlendEquationSeparateEXT), - TABLE_ENTRY(DeleteObjectARB), - TABLE_ENTRY(GetHandleARB), - TABLE_ENTRY(DetachObjectARB), - TABLE_ENTRY(CreateShaderObjectARB), - TABLE_ENTRY(ShaderSourceARB), - TABLE_ENTRY(CompileShaderARB), - TABLE_ENTRY(CreateProgramObjectARB), - TABLE_ENTRY(AttachObjectARB), - TABLE_ENTRY(LinkProgramARB), - TABLE_ENTRY(UseProgramObjectARB), - TABLE_ENTRY(ValidateProgramARB), - TABLE_ENTRY(Uniform1fARB), - TABLE_ENTRY(Uniform2fARB), - TABLE_ENTRY(Uniform3fARB), - TABLE_ENTRY(Uniform4fARB), - TABLE_ENTRY(Uniform1iARB), - TABLE_ENTRY(Uniform2iARB), - TABLE_ENTRY(Uniform3iARB), - TABLE_ENTRY(Uniform4iARB), - TABLE_ENTRY(Uniform1fvARB), - TABLE_ENTRY(Uniform2fvARB), - TABLE_ENTRY(Uniform3fvARB), - TABLE_ENTRY(Uniform4fvARB), - TABLE_ENTRY(Uniform1ivARB), - TABLE_ENTRY(Uniform2ivARB), - TABLE_ENTRY(Uniform3ivARB), - TABLE_ENTRY(Uniform4ivARB), - TABLE_ENTRY(UniformMatrix2fvARB), - TABLE_ENTRY(UniformMatrix3fvARB), - TABLE_ENTRY(UniformMatrix4fvARB), - TABLE_ENTRY(GetObjectParameterfvARB), - TABLE_ENTRY(GetObjectParameterivARB), - TABLE_ENTRY(GetInfoLogARB), - TABLE_ENTRY(GetAttachedObjectsARB), - TABLE_ENTRY(GetUniformLocationARB), - TABLE_ENTRY(GetActiveUniformARB), - TABLE_ENTRY(GetUniformfvARB), - TABLE_ENTRY(GetUniformivARB), - TABLE_ENTRY(GetShaderSourceARB), - TABLE_ENTRY(BindAttribLocationARB), - TABLE_ENTRY(GetActiveAttribARB), - TABLE_ENTRY(GetAttribLocationARB), - TABLE_ENTRY(GetVertexAttribdvNV), - TABLE_ENTRY(GetVertexAttribfvNV), - TABLE_ENTRY(GetVertexAttribivNV), TABLE_ENTRY(VertexAttrib1dNV), TABLE_ENTRY(VertexAttrib1dvNV), TABLE_ENTRY(VertexAttrib1fNV), @@ -5736,20 +6160,71 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(VertexAttrib4svNV), TABLE_ENTRY(VertexAttrib4ubNV), TABLE_ENTRY(VertexAttrib4ubvNV), - TABLE_ENTRY(GenFragmentShadersATI), - TABLE_ENTRY(BindFragmentShaderATI), - TABLE_ENTRY(DeleteFragmentShaderATI), - TABLE_ENTRY(BeginFragmentShaderATI), - TABLE_ENTRY(EndFragmentShaderATI), - TABLE_ENTRY(PassTexCoordATI), - TABLE_ENTRY(SampleMapATI), - TABLE_ENTRY(ColorFragmentOp1ATI), - TABLE_ENTRY(ColorFragmentOp2ATI), - TABLE_ENTRY(ColorFragmentOp3ATI), + TABLE_ENTRY(VertexAttribPointerNV), + TABLE_ENTRY(VertexAttribs1dvNV), + TABLE_ENTRY(VertexAttribs1fvNV), + TABLE_ENTRY(VertexAttribs1svNV), + TABLE_ENTRY(VertexAttribs2dvNV), + TABLE_ENTRY(VertexAttribs2fvNV), + TABLE_ENTRY(VertexAttribs2svNV), + TABLE_ENTRY(VertexAttribs3dvNV), + TABLE_ENTRY(VertexAttribs3fvNV), + TABLE_ENTRY(VertexAttribs3svNV), + TABLE_ENTRY(VertexAttribs4dvNV), + TABLE_ENTRY(VertexAttribs4fvNV), + TABLE_ENTRY(VertexAttribs4svNV), + TABLE_ENTRY(VertexAttribs4ubvNV), TABLE_ENTRY(AlphaFragmentOp1ATI), TABLE_ENTRY(AlphaFragmentOp2ATI), TABLE_ENTRY(AlphaFragmentOp3ATI), + TABLE_ENTRY(BeginFragmentShaderATI), + TABLE_ENTRY(BindFragmentShaderATI), + TABLE_ENTRY(ColorFragmentOp1ATI), + TABLE_ENTRY(ColorFragmentOp2ATI), + TABLE_ENTRY(ColorFragmentOp3ATI), + TABLE_ENTRY(DeleteFragmentShaderATI), + TABLE_ENTRY(EndFragmentShaderATI), + TABLE_ENTRY(GenFragmentShadersATI), + TABLE_ENTRY(PassTexCoordATI), + TABLE_ENTRY(SampleMapATI), TABLE_ENTRY(SetFragmentShaderConstantATI), + TABLE_ENTRY(PointParameteriNV), + TABLE_ENTRY(PointParameterivNV), + TABLE_ENTRY(_dispatch_stub_737), + TABLE_ENTRY(_dispatch_stub_738), + TABLE_ENTRY(_dispatch_stub_739), + TABLE_ENTRY(_dispatch_stub_740), + TABLE_ENTRY(_dispatch_stub_741), + TABLE_ENTRY(GetProgramNamedParameterdvNV), + TABLE_ENTRY(GetProgramNamedParameterfvNV), + TABLE_ENTRY(ProgramNamedParameter4dNV), + TABLE_ENTRY(ProgramNamedParameter4dvNV), + TABLE_ENTRY(ProgramNamedParameter4fNV), + TABLE_ENTRY(ProgramNamedParameter4fvNV), + TABLE_ENTRY(_dispatch_stub_748), + TABLE_ENTRY(_dispatch_stub_749), + TABLE_ENTRY(BindFramebufferEXT), + TABLE_ENTRY(BindRenderbufferEXT), + TABLE_ENTRY(CheckFramebufferStatusEXT), + TABLE_ENTRY(DeleteFramebuffersEXT), + TABLE_ENTRY(DeleteRenderbuffersEXT), + TABLE_ENTRY(FramebufferRenderbufferEXT), + TABLE_ENTRY(FramebufferTexture1DEXT), + TABLE_ENTRY(FramebufferTexture2DEXT), + TABLE_ENTRY(FramebufferTexture3DEXT), + TABLE_ENTRY(GenFramebuffersEXT), + TABLE_ENTRY(GenRenderbuffersEXT), + TABLE_ENTRY(GenerateMipmapEXT), + TABLE_ENTRY(GetFramebufferAttachmentParameterivEXT), + TABLE_ENTRY(GetRenderbufferParameterivEXT), + TABLE_ENTRY(IsFramebufferEXT), + TABLE_ENTRY(IsRenderbufferEXT), + TABLE_ENTRY(RenderbufferStorageEXT), + TABLE_ENTRY(_dispatch_stub_767), + TABLE_ENTRY(_dispatch_stub_768), + TABLE_ENTRY(_dispatch_stub_769), + TABLE_ENTRY(_dispatch_stub_770), + TABLE_ENTRY(_dispatch_stub_771), /* A whole bunch of no-op functions. These might be called * when someone tries to call a dynamically-registered * extension function without a current rendering context. @@ -5863,6 +6338,45 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { */ #ifdef UNUSED_TABLE_NAME static _glapi_proc UNUSED_TABLE_NAME[] = { + TABLE_ENTRY(ArrayElementEXT), + TABLE_ENTRY(BindTextureEXT), + TABLE_ENTRY(DrawArraysEXT), +#ifndef GLX_INDIRECT_RENDERING + TABLE_ENTRY(AreTexturesResidentEXT), +#endif + TABLE_ENTRY(CopyTexImage1DEXT), + TABLE_ENTRY(CopyTexImage2DEXT), + TABLE_ENTRY(CopyTexSubImage1DEXT), + TABLE_ENTRY(CopyTexSubImage2DEXT), +#ifndef GLX_INDIRECT_RENDERING + TABLE_ENTRY(DeleteTexturesEXT), +#endif +#ifndef GLX_INDIRECT_RENDERING + TABLE_ENTRY(GenTexturesEXT), +#endif + TABLE_ENTRY(GetPointervEXT), +#ifndef GLX_INDIRECT_RENDERING + TABLE_ENTRY(IsTextureEXT), +#endif + TABLE_ENTRY(PrioritizeTexturesEXT), + TABLE_ENTRY(TexSubImage1DEXT), + TABLE_ENTRY(TexSubImage2DEXT), + TABLE_ENTRY(BlendColorEXT), + TABLE_ENTRY(BlendEquationEXT), + TABLE_ENTRY(DrawRangeElementsEXT), + TABLE_ENTRY(ColorTableEXT), +#ifndef GLX_INDIRECT_RENDERING + TABLE_ENTRY(GetColorTableEXT), +#endif +#ifndef GLX_INDIRECT_RENDERING + TABLE_ENTRY(GetColorTableParameterfvEXT), +#endif +#ifndef GLX_INDIRECT_RENDERING + TABLE_ENTRY(GetColorTableParameterivEXT), +#endif + TABLE_ENTRY(TexImage3DEXT), + TABLE_ENTRY(TexSubImage3DEXT), + TABLE_ENTRY(CopyTexSubImage3DEXT), TABLE_ENTRY(ActiveTexture), TABLE_ENTRY(ClientActiveTexture), TABLE_ENTRY(MultiTexCoord1d), @@ -5897,30 +6411,112 @@ static _glapi_proc UNUSED_TABLE_NAME[] = { TABLE_ENTRY(MultiTexCoord4iv), TABLE_ENTRY(MultiTexCoord4s), TABLE_ENTRY(MultiTexCoord4sv), - TABLE_ENTRY(LoadTransposeMatrixf), TABLE_ENTRY(LoadTransposeMatrixd), - TABLE_ENTRY(MultTransposeMatrixf), + TABLE_ENTRY(LoadTransposeMatrixf), TABLE_ENTRY(MultTransposeMatrixd), + TABLE_ENTRY(MultTransposeMatrixf), TABLE_ENTRY(SampleCoverage), - TABLE_ENTRY(CompressedTexImage3D), - TABLE_ENTRY(CompressedTexImage2D), TABLE_ENTRY(CompressedTexImage1D), - TABLE_ENTRY(CompressedTexSubImage3D), - TABLE_ENTRY(CompressedTexSubImage2D), + TABLE_ENTRY(CompressedTexImage2D), + TABLE_ENTRY(CompressedTexImage3D), TABLE_ENTRY(CompressedTexSubImage1D), + TABLE_ENTRY(CompressedTexSubImage2D), + TABLE_ENTRY(CompressedTexSubImage3D), TABLE_ENTRY(GetCompressedTexImage), - TABLE_ENTRY(BlendFuncSeparate), - TABLE_ENTRY(FogCoordf), - TABLE_ENTRY(FogCoordfv), - TABLE_ENTRY(FogCoordd), - TABLE_ENTRY(FogCoorddv), - TABLE_ENTRY(FogCoordPointer), - TABLE_ENTRY(MultiDrawArrays), - TABLE_ENTRY(MultiDrawElements), + TABLE_ENTRY(DisableVertexAttribArray), + TABLE_ENTRY(EnableVertexAttribArray), + TABLE_ENTRY(GetVertexAttribdv), + TABLE_ENTRY(GetVertexAttribfv), + TABLE_ENTRY(GetVertexAttribiv), + TABLE_ENTRY(VertexAttrib1d), + TABLE_ENTRY(VertexAttrib1dv), + TABLE_ENTRY(VertexAttrib1f), + TABLE_ENTRY(VertexAttrib1fv), + TABLE_ENTRY(VertexAttrib1s), + TABLE_ENTRY(VertexAttrib1sv), + TABLE_ENTRY(VertexAttrib2d), + TABLE_ENTRY(VertexAttrib2dv), + TABLE_ENTRY(VertexAttrib2f), + TABLE_ENTRY(VertexAttrib2fv), + TABLE_ENTRY(VertexAttrib2s), + TABLE_ENTRY(VertexAttrib2sv), + TABLE_ENTRY(VertexAttrib3d), + TABLE_ENTRY(VertexAttrib3dv), + TABLE_ENTRY(VertexAttrib3f), + TABLE_ENTRY(VertexAttrib3fv), + TABLE_ENTRY(VertexAttrib3s), + TABLE_ENTRY(VertexAttrib3sv), + TABLE_ENTRY(VertexAttrib4Nbv), + TABLE_ENTRY(VertexAttrib4Niv), + TABLE_ENTRY(VertexAttrib4Nsv), + TABLE_ENTRY(VertexAttrib4Nub), + TABLE_ENTRY(VertexAttrib4Nubv), + TABLE_ENTRY(VertexAttrib4Nuiv), + TABLE_ENTRY(VertexAttrib4Nusv), + TABLE_ENTRY(VertexAttrib4d), + TABLE_ENTRY(VertexAttrib4dv), + TABLE_ENTRY(VertexAttrib4f), + TABLE_ENTRY(VertexAttrib4fv), + TABLE_ENTRY(VertexAttrib4s), + TABLE_ENTRY(VertexAttrib4sv), + TABLE_ENTRY(VertexAttribPointer), + TABLE_ENTRY(BindBuffer), + TABLE_ENTRY(BufferData), + TABLE_ENTRY(BufferSubData), + TABLE_ENTRY(DeleteBuffers), + TABLE_ENTRY(GenBuffers), + TABLE_ENTRY(GetBufferParameteriv), + TABLE_ENTRY(GetBufferPointerv), + TABLE_ENTRY(GetBufferSubData), + TABLE_ENTRY(IsBuffer), + TABLE_ENTRY(MapBuffer), + TABLE_ENTRY(UnmapBuffer), + TABLE_ENTRY(BeginQuery), + TABLE_ENTRY(DeleteQueries), + TABLE_ENTRY(EndQuery), + TABLE_ENTRY(GenQueries), + TABLE_ENTRY(GetQueryObjectiv), + TABLE_ENTRY(GetQueryObjectuiv), + TABLE_ENTRY(GetQueryiv), + TABLE_ENTRY(IsQuery), + TABLE_ENTRY(CompileShader), + TABLE_ENTRY(GetActiveUniform), + TABLE_ENTRY(GetShaderSource), + TABLE_ENTRY(GetUniformLocation), + TABLE_ENTRY(GetUniformfv), + TABLE_ENTRY(GetUniformiv), + TABLE_ENTRY(LinkProgram), + TABLE_ENTRY(ShaderSource), + TABLE_ENTRY(Uniform1f), + TABLE_ENTRY(Uniform1fv), + TABLE_ENTRY(Uniform1i), + TABLE_ENTRY(Uniform1iv), + TABLE_ENTRY(Uniform2f), + TABLE_ENTRY(Uniform2fv), + TABLE_ENTRY(Uniform2i), + TABLE_ENTRY(Uniform2iv), + TABLE_ENTRY(Uniform3f), + TABLE_ENTRY(Uniform3fv), + TABLE_ENTRY(Uniform3i), + TABLE_ENTRY(Uniform3iv), + TABLE_ENTRY(Uniform4f), + TABLE_ENTRY(Uniform4fv), + TABLE_ENTRY(Uniform4i), + TABLE_ENTRY(Uniform4iv), + TABLE_ENTRY(UniformMatrix2fv), + TABLE_ENTRY(UniformMatrix3fv), + TABLE_ENTRY(UniformMatrix4fv), + TABLE_ENTRY(UseProgram), + TABLE_ENTRY(ValidateProgram), + TABLE_ENTRY(BindAttribLocation), + TABLE_ENTRY(GetActiveAttrib), + TABLE_ENTRY(GetAttribLocation), + TABLE_ENTRY(DrawBuffers), + TABLE_ENTRY(DrawBuffersATI), TABLE_ENTRY(PointParameterf), + TABLE_ENTRY(PointParameterfARB), TABLE_ENTRY(PointParameterfv), - TABLE_ENTRY(PointParameteri), - TABLE_ENTRY(PointParameteriv), + TABLE_ENTRY(PointParameterfvARB), TABLE_ENTRY(SecondaryColor3b), TABLE_ENTRY(SecondaryColor3bv), TABLE_ENTRY(SecondaryColor3d), @@ -5938,119 +6534,65 @@ static _glapi_proc UNUSED_TABLE_NAME[] = { TABLE_ENTRY(SecondaryColor3us), TABLE_ENTRY(SecondaryColor3usv), TABLE_ENTRY(SecondaryColorPointer), + TABLE_ENTRY(MultiDrawArrays), + TABLE_ENTRY(MultiDrawElements), + TABLE_ENTRY(FogCoordPointer), + TABLE_ENTRY(FogCoordd), + TABLE_ENTRY(FogCoorddv), + TABLE_ENTRY(FogCoordf), + TABLE_ENTRY(FogCoordfv), + TABLE_ENTRY(BlendFuncSeparate), TABLE_ENTRY(WindowPos2d), - TABLE_ENTRY(WindowPos2dv), - TABLE_ENTRY(WindowPos2f), - TABLE_ENTRY(WindowPos2fv), - TABLE_ENTRY(WindowPos2i), - TABLE_ENTRY(WindowPos2iv), - TABLE_ENTRY(WindowPos2s), - TABLE_ENTRY(WindowPos2sv), - TABLE_ENTRY(WindowPos3d), - TABLE_ENTRY(WindowPos3dv), - TABLE_ENTRY(WindowPos3f), - TABLE_ENTRY(WindowPos3fv), - TABLE_ENTRY(WindowPos3i), - TABLE_ENTRY(WindowPos3iv), - TABLE_ENTRY(WindowPos3s), - TABLE_ENTRY(WindowPos3sv), - TABLE_ENTRY(BindBuffer), - TABLE_ENTRY(BufferData), - TABLE_ENTRY(BufferSubData), - TABLE_ENTRY(DeleteBuffers), - TABLE_ENTRY(GenBuffers), - TABLE_ENTRY(GetBufferParameteriv), - TABLE_ENTRY(GetBufferPointerv), - TABLE_ENTRY(GetBufferSubData), - TABLE_ENTRY(IsBuffer), - TABLE_ENTRY(MapBuffer), - TABLE_ENTRY(UnmapBuffer), - TABLE_ENTRY(GenQueries), - TABLE_ENTRY(DeleteQueries), - TABLE_ENTRY(IsQuery), - TABLE_ENTRY(BeginQuery), - TABLE_ENTRY(EndQuery), - TABLE_ENTRY(GetQueryiv), - TABLE_ENTRY(GetQueryObjectiv), - TABLE_ENTRY(GetQueryObjectuiv), - TABLE_ENTRY(PointParameterfARB), - TABLE_ENTRY(PointParameterfvARB), TABLE_ENTRY(WindowPos2dARB), - TABLE_ENTRY(WindowPos2fARB), - TABLE_ENTRY(WindowPos2iARB), - TABLE_ENTRY(WindowPos2sARB), + TABLE_ENTRY(WindowPos2dv), TABLE_ENTRY(WindowPos2dvARB), + TABLE_ENTRY(WindowPos2f), + TABLE_ENTRY(WindowPos2fARB), + TABLE_ENTRY(WindowPos2fv), TABLE_ENTRY(WindowPos2fvARB), + TABLE_ENTRY(WindowPos2i), + TABLE_ENTRY(WindowPos2iARB), + TABLE_ENTRY(WindowPos2iv), TABLE_ENTRY(WindowPos2ivARB), + TABLE_ENTRY(WindowPos2s), + TABLE_ENTRY(WindowPos2sARB), + TABLE_ENTRY(WindowPos2sv), TABLE_ENTRY(WindowPos2svARB), + TABLE_ENTRY(WindowPos3d), TABLE_ENTRY(WindowPos3dARB), - TABLE_ENTRY(WindowPos3fARB), - TABLE_ENTRY(WindowPos3iARB), - TABLE_ENTRY(WindowPos3sARB), + TABLE_ENTRY(WindowPos3dv), TABLE_ENTRY(WindowPos3dvARB), + TABLE_ENTRY(WindowPos3f), + TABLE_ENTRY(WindowPos3fARB), + TABLE_ENTRY(WindowPos3fv), TABLE_ENTRY(WindowPos3fvARB), + TABLE_ENTRY(WindowPos3i), + TABLE_ENTRY(WindowPos3iARB), + TABLE_ENTRY(WindowPos3iv), TABLE_ENTRY(WindowPos3ivARB), + TABLE_ENTRY(WindowPos3s), + TABLE_ENTRY(WindowPos3sARB), + TABLE_ENTRY(WindowPos3sv), TABLE_ENTRY(WindowPos3svARB), TABLE_ENTRY(BindProgramARB), TABLE_ENTRY(DeleteProgramsARB), TABLE_ENTRY(GenProgramsARB), - TABLE_ENTRY(IsProgramARB), TABLE_ENTRY(GetVertexAttribPointervARB), - TABLE_ENTRY(BlendColorEXT), - TABLE_ENTRY(TexImage3DEXT), - TABLE_ENTRY(TexSubImage3DEXT), - TABLE_ENTRY(TexSubImage1DEXT), - TABLE_ENTRY(TexSubImage2DEXT), - TABLE_ENTRY(CopyTexImage1DEXT), - TABLE_ENTRY(CopyTexImage2DEXT), - TABLE_ENTRY(CopyTexSubImage1DEXT), - TABLE_ENTRY(CopyTexSubImage2DEXT), - TABLE_ENTRY(CopyTexSubImage3DEXT), - TABLE_ENTRY(HistogramEXT), - TABLE_ENTRY(MinmaxEXT), - TABLE_ENTRY(ResetHistogramEXT), - TABLE_ENTRY(ResetMinmaxEXT), - TABLE_ENTRY(ConvolutionFilter1DEXT), - TABLE_ENTRY(ConvolutionFilter2DEXT), - TABLE_ENTRY(ConvolutionParameterfEXT), - TABLE_ENTRY(ConvolutionParameterfvEXT), - TABLE_ENTRY(ConvolutionParameteriEXT), - TABLE_ENTRY(ConvolutionParameterivEXT), - TABLE_ENTRY(CopyConvolutionFilter1DEXT), - TABLE_ENTRY(CopyConvolutionFilter2DEXT), - TABLE_ENTRY(SeparableFilter2DEXT), - TABLE_ENTRY(ColorTableSGI), - TABLE_ENTRY(ColorTableParameterfvSGI), - TABLE_ENTRY(ColorTableParameterivSGI), - TABLE_ENTRY(CopyColorTableSGI), - TABLE_ENTRY(BindTextureEXT), - TABLE_ENTRY(DeleteTexturesEXT), - TABLE_ENTRY(PrioritizeTexturesEXT), - TABLE_ENTRY(ArrayElementEXT), - TABLE_ENTRY(DrawArraysEXT), - TABLE_ENTRY(GetPointervEXT), - TABLE_ENTRY(BlendEquationEXT), - TABLE_ENTRY(ColorSubTableEXT), - TABLE_ENTRY(CopyColorSubTableEXT), - TABLE_ENTRY(ColorTableEXT), - TABLE_ENTRY(DrawRangeElementsEXT), - TABLE_ENTRY(SampleMaskEXT), - TABLE_ENTRY(SamplePatternEXT), - TABLE_ENTRY(DrawBuffersATI), - TABLE_ENTRY(BlendEquationSeparateATI), - TABLE_ENTRY(BlendFuncSeparateINGR), - TABLE_ENTRY(PointParameterfSGIS), - TABLE_ENTRY(PointParameterfvSGIS), + TABLE_ENTRY(IsProgramARB), + TABLE_ENTRY(PointParameteri), + TABLE_ENTRY(PointParameteriv), + TABLE_ENTRY(BlendEquationSeparate), }; #endif /*UNUSED_TABLE_NAME*/ -#undef KEYWORD1 -#undef KEYWORD2 -#undef NAME -#undef DISPATCH -#undef RETURN_DISPATCH -#undef DISPATCH_TABLE_NAME -#undef UNUSED_TABLE_NAME -#undef TABLE_ENTRY - +# undef KEYWORD1 +# undef KEYWORD1_ALT +# undef KEYWORD2 +# undef NAME +# undef DISPATCH +# undef RETURN_DISPATCH +# undef DISPATCH_TABLE_NAME +# undef UNUSED_TABLE_NAME +# undef TABLE_ENTRY +# undef HIDDEN diff --git a/src/kits/opengl/mesa/glapi/glprocs.h b/src/kits/opengl/mesa/glapi/glprocs.h index bdf9339cc1..905c65862d 100644 --- a/src/kits/opengl/mesa/glapi/glprocs.h +++ b/src/kits/opengl/mesa/glapi/glprocs.h @@ -2,7 +2,7 @@ /* * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. - * (C) Copyright IBM Corporation 2004 + * (C) Copyright IBM Corporation 2004, 2006 * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -26,25 +26,31 @@ * SOFTWARE. */ + /* This file is only included by glapi.c and is used for * the GetProcAddress() function */ typedef struct { GLint Name_offset; -#ifdef NEED_FUNCTION_POINTER +#if defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) _glapi_proc Address; #endif GLuint Offset; } glprocs_table_t; -#ifdef NEED_FUNCTION_POINTER -# define NAME_FUNC_OFFSET(n,f,o) { n , (_glapi_proc) f , o } -#else -# define NAME_FUNC_OFFSET(n,f,o) { n , o } +#if !defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING) +# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , o } +#elif defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING) +# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f1 , o } +#elif defined(NEED_FUNCTION_POINTER) && defined(GLX_INDIRECT_RENDERING) +# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f2 , o } +#elif !defined(NEED_FUNCTION_POINTER) && defined(GLX_INDIRECT_RENDERING) +# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f3 , o } #endif + static const char gl_string_table[] = "glNewList\0" "glEndList\0" @@ -454,44 +460,166 @@ static const char gl_string_table[] = "glMultiTexCoord4ivARB\0" "glMultiTexCoord4sARB\0" "glMultiTexCoord4svARB\0" - "glLoadTransposeMatrixfARB\0" + "glAttachShader\0" + "glCreateProgram\0" + "glCreateShader\0" + "glDeleteProgram\0" + "glDeleteShader\0" + "glDetachShader\0" + "glGetAttachedShaders\0" + "glGetProgramInfoLog\0" + "glGetProgramiv\0" + "glGetShaderInfoLog\0" + "glGetShaderiv\0" + "glIsProgram\0" + "glIsShader\0" + "glStencilFuncSeparate\0" + "glStencilMaskSeparate\0" + "glStencilOpSeparate\0" + "glUniformMatrix2x3fv\0" + "glUniformMatrix2x4fv\0" + "glUniformMatrix3x2fv\0" + "glUniformMatrix3x4fv\0" + "glUniformMatrix4x2fv\0" + "glUniformMatrix4x3fv\0" "glLoadTransposeMatrixdARB\0" - "glMultTransposeMatrixfARB\0" + "glLoadTransposeMatrixfARB\0" "glMultTransposeMatrixdARB\0" + "glMultTransposeMatrixfARB\0" "glSampleCoverageARB\0" + "glCompressedTexImage1DARB\0" + "glCompressedTexImage2DARB\0" + "glCompressedTexImage3DARB\0" + "glCompressedTexSubImage1DARB\0" + "glCompressedTexSubImage2DARB\0" + "glCompressedTexSubImage3DARB\0" + "glGetCompressedTexImageARB\0" + "glDisableVertexAttribArrayARB\0" + "glEnableVertexAttribArrayARB\0" + "glGetProgramEnvParameterdvARB\0" + "glGetProgramEnvParameterfvARB\0" + "glGetProgramLocalParameterdvARB\0" + "glGetProgramLocalParameterfvARB\0" + "glGetProgramStringARB\0" + "glGetProgramivARB\0" + "glGetVertexAttribdvARB\0" + "glGetVertexAttribfvARB\0" + "glGetVertexAttribivARB\0" + "glProgramEnvParameter4dARB\0" + "glProgramEnvParameter4dvARB\0" + "glProgramEnvParameter4fARB\0" + "glProgramEnvParameter4fvARB\0" + "glProgramLocalParameter4dARB\0" + "glProgramLocalParameter4dvARB\0" + "glProgramLocalParameter4fARB\0" + "glProgramLocalParameter4fvARB\0" + "glProgramStringARB\0" + "glVertexAttrib1dARB\0" + "glVertexAttrib1dvARB\0" + "glVertexAttrib1fARB\0" + "glVertexAttrib1fvARB\0" + "glVertexAttrib1sARB\0" + "glVertexAttrib1svARB\0" + "glVertexAttrib2dARB\0" + "glVertexAttrib2dvARB\0" + "glVertexAttrib2fARB\0" + "glVertexAttrib2fvARB\0" + "glVertexAttrib2sARB\0" + "glVertexAttrib2svARB\0" + "glVertexAttrib3dARB\0" + "glVertexAttrib3dvARB\0" + "glVertexAttrib3fARB\0" + "glVertexAttrib3fvARB\0" + "glVertexAttrib3sARB\0" + "glVertexAttrib3svARB\0" + "glVertexAttrib4NbvARB\0" + "glVertexAttrib4NivARB\0" + "glVertexAttrib4NsvARB\0" + "glVertexAttrib4NubARB\0" + "glVertexAttrib4NubvARB\0" + "glVertexAttrib4NuivARB\0" + "glVertexAttrib4NusvARB\0" + "glVertexAttrib4bvARB\0" + "glVertexAttrib4dARB\0" + "glVertexAttrib4dvARB\0" + "glVertexAttrib4fARB\0" + "glVertexAttrib4fvARB\0" + "glVertexAttrib4ivARB\0" + "glVertexAttrib4sARB\0" + "glVertexAttrib4svARB\0" + "glVertexAttrib4ubvARB\0" + "glVertexAttrib4uivARB\0" + "glVertexAttrib4usvARB\0" + "glVertexAttribPointerARB\0" + "glBindBufferARB\0" + "glBufferDataARB\0" + "glBufferSubDataARB\0" + "glDeleteBuffersARB\0" + "glGenBuffersARB\0" + "glGetBufferParameterivARB\0" + "glGetBufferPointervARB\0" + "glGetBufferSubDataARB\0" + "glIsBufferARB\0" + "glMapBufferARB\0" + "glUnmapBufferARB\0" + "glBeginQueryARB\0" + "glDeleteQueriesARB\0" + "glEndQueryARB\0" + "glGenQueriesARB\0" + "glGetQueryObjectivARB\0" + "glGetQueryObjectuivARB\0" + "glGetQueryivARB\0" + "glIsQueryARB\0" + "glAttachObjectARB\0" + "glCompileShaderARB\0" + "glCreateProgramObjectARB\0" + "glCreateShaderObjectARB\0" + "glDeleteObjectARB\0" + "glDetachObjectARB\0" + "glGetActiveUniformARB\0" + "glGetAttachedObjectsARB\0" + "glGetHandleARB\0" + "glGetInfoLogARB\0" + "glGetObjectParameterfvARB\0" + "glGetObjectParameterivARB\0" + "glGetShaderSourceARB\0" + "glGetUniformLocationARB\0" + "glGetUniformfvARB\0" + "glGetUniformivARB\0" + "glLinkProgramARB\0" + "glShaderSourceARB\0" + "glUniform1fARB\0" + "glUniform1fvARB\0" + "glUniform1iARB\0" + "glUniform1ivARB\0" + "glUniform2fARB\0" + "glUniform2fvARB\0" + "glUniform2iARB\0" + "glUniform2ivARB\0" + "glUniform3fARB\0" + "glUniform3fvARB\0" + "glUniform3iARB\0" + "glUniform3ivARB\0" + "glUniform4fARB\0" + "glUniform4fvARB\0" + "glUniform4iARB\0" + "glUniform4ivARB\0" + "glUniformMatrix2fvARB\0" + "glUniformMatrix3fvARB\0" + "glUniformMatrix4fvARB\0" + "glUseProgramObjectARB\0" + "glValidateProgramARB\0" + "glBindAttribLocationARB\0" + "glGetActiveAttribARB\0" + "glGetAttribLocationARB\0" "glDrawBuffersARB\0" "glPolygonOffsetEXT\0" - "glGetTexFilterFuncSGIS\0" - "glTexFilterFuncSGIS\0" - "glGetHistogramEXT\0" - "glGetHistogramParameterfvEXT\0" - "glGetHistogramParameterivEXT\0" - "glGetMinmaxEXT\0" - "glGetMinmaxParameterfvEXT\0" - "glGetMinmaxParameterivEXT\0" - "glGetConvolutionFilterEXT\0" - "glGetConvolutionParameterfvEXT\0" - "glGetConvolutionParameterivEXT\0" - "glGetSeparableFilterEXT\0" - "glGetColorTableSGI\0" - "glGetColorTableParameterfvSGI\0" - "glGetColorTableParameterivSGI\0" - "glPixelTexGenSGIX\0" - "glPixelTexGenParameteriSGIS\0" - "glPixelTexGenParameterivSGIS\0" + "glGetPixelTexGenParameterfvSGIS\0" + "glGetPixelTexGenParameterivSGIS\0" "glPixelTexGenParameterfSGIS\0" "glPixelTexGenParameterfvSGIS\0" - "glGetPixelTexGenParameterivSGIS\0" - "glGetPixelTexGenParameterfvSGIS\0" - "glTexImage4DSGIS\0" - "glTexSubImage4DSGIS\0" - "glAreTexturesResidentEXT\0" - "glGenTexturesEXT\0" - "glIsTextureEXT\0" - "glDetailTexFuncSGIS\0" - "glGetDetailTexFuncSGIS\0" - "glSharpenTexFuncSGIS\0" - "glGetSharpenTexFuncSGIS\0" + "glPixelTexGenParameteriSGIS\0" + "glPixelTexGenParameterivSGIS\0" "glSampleMaskSGIS\0" "glSamplePatternSGIS\0" "glColorPointerEXT\0" @@ -500,57 +628,46 @@ static const char gl_string_table[] = "glNormalPointerEXT\0" "glTexCoordPointerEXT\0" "glVertexPointerEXT\0" - "glSpriteParameterfSGIX\0" - "glSpriteParameterfvSGIX\0" - "glSpriteParameteriSGIX\0" - "glSpriteParameterivSGIX\0" "glPointParameterfEXT\0" "glPointParameterfvEXT\0" - "glGetInstrumentsSGIX\0" - "glInstrumentsBufferSGIX\0" - "glPollInstrumentsSGIX\0" - "glReadInstrumentsSGIX\0" - "glStartInstrumentsSGIX\0" - "glStopInstrumentsSGIX\0" - "glFrameZoomSGIX\0" - "glTagSampleBufferSGIX\0" - "glReferencePlaneSGIX\0" - "glFlushRasterSGIX\0" - "glGetListParameterfvSGIX\0" - "glGetListParameterivSGIX\0" - "glListParameterfSGIX\0" - "glListParameterfvSGIX\0" - "glListParameteriSGIX\0" - "glListParameterivSGIX\0" - "glFragmentColorMaterialSGIX\0" - "glFragmentLightfSGIX\0" - "glFragmentLightfvSGIX\0" - "glFragmentLightiSGIX\0" - "glFragmentLightivSGIX\0" - "glFragmentLightModelfSGIX\0" - "glFragmentLightModelfvSGIX\0" - "glFragmentLightModeliSGIX\0" - "glFragmentLightModelivSGIX\0" - "glFragmentMaterialfSGIX\0" - "glFragmentMaterialfvSGIX\0" - "glFragmentMaterialiSGIX\0" - "glFragmentMaterialivSGIX\0" - "glGetFragmentLightfvSGIX\0" - "glGetFragmentLightivSGIX\0" - "glGetFragmentMaterialfvSGIX\0" - "glGetFragmentMaterialivSGIX\0" - "glLightEnviSGIX\0" - "glVertexWeightfEXT\0" - "glVertexWeightfvEXT\0" - "glVertexWeightPointerEXT\0" + "glLockArraysEXT\0" + "glUnlockArraysEXT\0" + "glCullParameterdvEXT\0" + "glCullParameterfvEXT\0" + "glSecondaryColor3bEXT\0" + "glSecondaryColor3bvEXT\0" + "glSecondaryColor3dEXT\0" + "glSecondaryColor3dvEXT\0" + "glSecondaryColor3fEXT\0" + "glSecondaryColor3fvEXT\0" + "glSecondaryColor3iEXT\0" + "glSecondaryColor3ivEXT\0" + "glSecondaryColor3sEXT\0" + "glSecondaryColor3svEXT\0" + "glSecondaryColor3ubEXT\0" + "glSecondaryColor3ubvEXT\0" + "glSecondaryColor3uiEXT\0" + "glSecondaryColor3uivEXT\0" + "glSecondaryColor3usEXT\0" + "glSecondaryColor3usvEXT\0" + "glSecondaryColorPointerEXT\0" + "glMultiDrawArraysEXT\0" + "glMultiDrawElementsEXT\0" + "glFogCoordPointerEXT\0" + "glFogCoorddEXT\0" + "glFogCoorddvEXT\0" + "glFogCoordfEXT\0" + "glFogCoordfvEXT\0" + "glPixelTexGenSGIX\0" + "glBlendFuncSeparateEXT\0" "glFlushVertexArrayRangeNV\0" "glVertexArrayRangeNV\0" - "glCombinerParameterfvNV\0" - "glCombinerParameterfNV\0" - "glCombinerParameterivNV\0" - "glCombinerParameteriNV\0" "glCombinerInputNV\0" "glCombinerOutputNV\0" + "glCombinerParameterfNV\0" + "glCombinerParameterfvNV\0" + "glCombinerParameteriNV\0" + "glCombinerParameterivNV\0" "glFinalCombinerInputNV\0" "glGetCombinerInputParameterfvNV\0" "glGetCombinerInputParameterivNV\0" @@ -583,47 +700,15 @@ static const char gl_string_table[] = "glWindowPos4ivMESA\0" "glWindowPos4sMESA\0" "glWindowPos4svMESA\0" - "glBlendFuncSeparateEXT\0" - "glIndexMaterialEXT\0" - "glIndexFuncEXT\0" - "glLockArraysEXT\0" - "glUnlockArraysEXT\0" - "glCullParameterdvEXT\0" - "glCullParameterfvEXT\0" - "glHintPGI\0" - "glFogCoordfEXT\0" - "glFogCoordfvEXT\0" - "glFogCoorddEXT\0" - "glFogCoorddvEXT\0" - "glFogCoordPointerEXT\0" - "glGetColorTableEXT\0" - "glGetColorTableParameterivEXT\0" - "glGetColorTableParameterfvEXT\0" - "glTbufferMask3DFX\0" - "glCompressedTexImage3DARB\0" - "glCompressedTexImage2DARB\0" - "glCompressedTexImage1DARB\0" - "glCompressedTexSubImage3DARB\0" - "glCompressedTexSubImage2DARB\0" - "glCompressedTexSubImage1DARB\0" - "glGetCompressedTexImageARB\0" - "glSecondaryColor3bEXT\0" - "glSecondaryColor3bvEXT\0" - "glSecondaryColor3dEXT\0" - "glSecondaryColor3dvEXT\0" - "glSecondaryColor3fEXT\0" - "glSecondaryColor3fvEXT\0" - "glSecondaryColor3iEXT\0" - "glSecondaryColor3ivEXT\0" - "glSecondaryColor3sEXT\0" - "glSecondaryColor3svEXT\0" - "glSecondaryColor3ubEXT\0" - "glSecondaryColor3ubvEXT\0" - "glSecondaryColor3uiEXT\0" - "glSecondaryColor3uivEXT\0" - "glSecondaryColor3usEXT\0" - "glSecondaryColor3usvEXT\0" - "glSecondaryColorPointerEXT\0" + "glMultiModeDrawArraysIBM\0" + "glMultiModeDrawElementsIBM\0" + "glDeleteFencesNV\0" + "glFinishFenceNV\0" + "glGenFencesNV\0" + "glGetFenceivNV\0" + "glIsFenceNV\0" + "glSetFenceNV\0" + "glTestFenceNV\0" "glAreProgramsResidentNV\0" "glBindProgramNV\0" "glDeleteProgramsNV\0" @@ -631,13 +716,13 @@ static const char gl_string_table[] = "glGenProgramsNV\0" "glGetProgramParameterdvNV\0" "glGetProgramParameterfvNV\0" - "glGetProgramivNV\0" "glGetProgramStringNV\0" + "glGetProgramivNV\0" "glGetTrackMatrixivNV\0" - "glGetVertexAttribdvARB\0" - "glGetVertexAttribfvARB\0" - "glGetVertexAttribivARB\0" "glGetVertexAttribPointervNV\0" + "glGetVertexAttribdvNV\0" + "glGetVertexAttribfvNV\0" + "glGetVertexAttribivNV\0" "glIsProgramNV\0" "glLoadProgramNV\0" "glProgramParameter4dNV\0" @@ -648,160 +733,6 @@ static const char gl_string_table[] = "glProgramParameters4fvNV\0" "glRequestResidentProgramsNV\0" "glTrackMatrixNV\0" - "glVertexAttribPointerNV\0" - "glVertexAttrib1dARB\0" - "glVertexAttrib1dvARB\0" - "glVertexAttrib1fARB\0" - "glVertexAttrib1fvARB\0" - "glVertexAttrib1sARB\0" - "glVertexAttrib1svARB\0" - "glVertexAttrib2dARB\0" - "glVertexAttrib2dvARB\0" - "glVertexAttrib2fARB\0" - "glVertexAttrib2fvARB\0" - "glVertexAttrib2sARB\0" - "glVertexAttrib2svARB\0" - "glVertexAttrib3dARB\0" - "glVertexAttrib3dvARB\0" - "glVertexAttrib3fARB\0" - "glVertexAttrib3fvARB\0" - "glVertexAttrib3sARB\0" - "glVertexAttrib3svARB\0" - "glVertexAttrib4dARB\0" - "glVertexAttrib4dvARB\0" - "glVertexAttrib4fARB\0" - "glVertexAttrib4fvARB\0" - "glVertexAttrib4sARB\0" - "glVertexAttrib4svARB\0" - "glVertexAttrib4NubARB\0" - "glVertexAttrib4NubvARB\0" - "glVertexAttribs1dvNV\0" - "glVertexAttribs1fvNV\0" - "glVertexAttribs1svNV\0" - "glVertexAttribs2dvNV\0" - "glVertexAttribs2fvNV\0" - "glVertexAttribs2svNV\0" - "glVertexAttribs3dvNV\0" - "glVertexAttribs3fvNV\0" - "glVertexAttribs3svNV\0" - "glVertexAttribs4dvNV\0" - "glVertexAttribs4fvNV\0" - "glVertexAttribs4svNV\0" - "glVertexAttribs4ubvNV\0" - "glPointParameteriNV\0" - "glPointParameterivNV\0" - "glMultiDrawArraysEXT\0" - "glMultiDrawElementsEXT\0" - "glActiveStencilFaceEXT\0" - "glDeleteFencesNV\0" - "glGenFencesNV\0" - "glIsFenceNV\0" - "glTestFenceNV\0" - "glGetFenceivNV\0" - "glFinishFenceNV\0" - "glSetFenceNV\0" - "glVertexAttrib4bvARB\0" - "glVertexAttrib4ivARB\0" - "glVertexAttrib4ubvARB\0" - "glVertexAttrib4usvARB\0" - "glVertexAttrib4uivARB\0" - "glVertexAttrib4NbvARB\0" - "glVertexAttrib4NsvARB\0" - "glVertexAttrib4NivARB\0" - "glVertexAttrib4NusvARB\0" - "glVertexAttrib4NuivARB\0" - "glVertexAttribPointerARB\0" - "glEnableVertexAttribArrayARB\0" - "glDisableVertexAttribArrayARB\0" - "glProgramStringARB\0" - "glProgramEnvParameter4dARB\0" - "glProgramEnvParameter4dvARB\0" - "glProgramEnvParameter4fARB\0" - "glProgramEnvParameter4fvARB\0" - "glProgramLocalParameter4dARB\0" - "glProgramLocalParameter4dvARB\0" - "glProgramLocalParameter4fARB\0" - "glProgramLocalParameter4fvARB\0" - "glGetProgramEnvParameterdvARB\0" - "glGetProgramEnvParameterfvARB\0" - "glGetProgramLocalParameterdvARB\0" - "glGetProgramLocalParameterfvARB\0" - "glGetProgramivARB\0" - "glGetProgramStringARB\0" - "glProgramNamedParameter4fNV\0" - "glProgramNamedParameter4dNV\0" - "glProgramNamedParameter4fvNV\0" - "glProgramNamedParameter4dvNV\0" - "glGetProgramNamedParameterfvNV\0" - "glGetProgramNamedParameterdvNV\0" - "glBindBufferARB\0" - "glBufferDataARB\0" - "glBufferSubDataARB\0" - "glDeleteBuffersARB\0" - "glGenBuffersARB\0" - "glGetBufferParameterivARB\0" - "glGetBufferPointervARB\0" - "glGetBufferSubDataARB\0" - "glIsBufferARB\0" - "glMapBufferARB\0" - "glUnmapBufferARB\0" - "glDepthBoundsEXT\0" - "glGenQueriesARB\0" - "glDeleteQueriesARB\0" - "glIsQueryARB\0" - "glBeginQueryARB\0" - "glEndQueryARB\0" - "glGetQueryivARB\0" - "glGetQueryObjectivARB\0" - "glGetQueryObjectuivARB\0" - "glMultiModeDrawArraysIBM\0" - "glMultiModeDrawElementsIBM\0" - "glBlendEquationSeparateEXT\0" - "glDeleteObjectARB\0" - "glGetHandleARB\0" - "glDetachObjectARB\0" - "glCreateShaderObjectARB\0" - "glShaderSourceARB\0" - "glCompileShaderARB\0" - "glCreateProgramObjectARB\0" - "glAttachObjectARB\0" - "glLinkProgramARB\0" - "glUseProgramObjectARB\0" - "glValidateProgramARB\0" - "glUniform1fARB\0" - "glUniform2fARB\0" - "glUniform3fARB\0" - "glUniform4fARB\0" - "glUniform1iARB\0" - "glUniform2iARB\0" - "glUniform3iARB\0" - "glUniform4iARB\0" - "glUniform1fvARB\0" - "glUniform2fvARB\0" - "glUniform3fvARB\0" - "glUniform4fvARB\0" - "glUniform1ivARB\0" - "glUniform2ivARB\0" - "glUniform3ivARB\0" - "glUniform4ivARB\0" - "glUniformMatrix2fvARB\0" - "glUniformMatrix3fvARB\0" - "glUniformMatrix4fvARB\0" - "glGetObjectParameterfvARB\0" - "glGetObjectParameterivARB\0" - "glGetInfoLogARB\0" - "glGetAttachedObjectsARB\0" - "glGetUniformLocationARB\0" - "glGetActiveUniformARB\0" - "glGetUniformfvARB\0" - "glGetUniformivARB\0" - "glGetShaderSourceARB\0" - "glBindAttribLocationARB\0" - "glGetActiveAttribARB\0" - "glGetAttribLocationARB\0" - "glGetVertexAttribdvNV\0" - "glGetVertexAttribfvNV\0" - "glGetVertexAttribivNV\0" "glVertexAttrib1dNV\0" "glVertexAttrib1dvNV\0" "glVertexAttrib1fNV\0" @@ -828,20 +759,128 @@ static const char gl_string_table[] = "glVertexAttrib4svNV\0" "glVertexAttrib4ubNV\0" "glVertexAttrib4ubvNV\0" - "glGenFragmentShadersATI\0" - "glBindFragmentShaderATI\0" - "glDeleteFragmentShaderATI\0" - "glBeginFragmentShaderATI\0" - "glEndFragmentShaderATI\0" - "glPassTexCoordATI\0" - "glSampleMapATI\0" - "glColorFragmentOp1ATI\0" - "glColorFragmentOp2ATI\0" - "glColorFragmentOp3ATI\0" + "glVertexAttribPointerNV\0" + "glVertexAttribs1dvNV\0" + "glVertexAttribs1fvNV\0" + "glVertexAttribs1svNV\0" + "glVertexAttribs2dvNV\0" + "glVertexAttribs2fvNV\0" + "glVertexAttribs2svNV\0" + "glVertexAttribs3dvNV\0" + "glVertexAttribs3fvNV\0" + "glVertexAttribs3svNV\0" + "glVertexAttribs4dvNV\0" + "glVertexAttribs4fvNV\0" + "glVertexAttribs4svNV\0" + "glVertexAttribs4ubvNV\0" "glAlphaFragmentOp1ATI\0" "glAlphaFragmentOp2ATI\0" "glAlphaFragmentOp3ATI\0" + "glBeginFragmentShaderATI\0" + "glBindFragmentShaderATI\0" + "glColorFragmentOp1ATI\0" + "glColorFragmentOp2ATI\0" + "glColorFragmentOp3ATI\0" + "glDeleteFragmentShaderATI\0" + "glEndFragmentShaderATI\0" + "glGenFragmentShadersATI\0" + "glPassTexCoordATI\0" + "glSampleMapATI\0" "glSetFragmentShaderConstantATI\0" + "glPointParameteriNV\0" + "glPointParameterivNV\0" + "glActiveStencilFaceEXT\0" + "glBindVertexArrayAPPLE\0" + "glDeleteVertexArraysAPPLE\0" + "glGenVertexArraysAPPLE\0" + "glIsVertexArrayAPPLE\0" + "glGetProgramNamedParameterdvNV\0" + "glGetProgramNamedParameterfvNV\0" + "glProgramNamedParameter4dNV\0" + "glProgramNamedParameter4dvNV\0" + "glProgramNamedParameter4fNV\0" + "glProgramNamedParameter4fvNV\0" + "glDepthBoundsEXT\0" + "glBlendEquationSeparateEXT\0" + "glBindFramebufferEXT\0" + "glBindRenderbufferEXT\0" + "glCheckFramebufferStatusEXT\0" + "glDeleteFramebuffersEXT\0" + "glDeleteRenderbuffersEXT\0" + "glFramebufferRenderbufferEXT\0" + "glFramebufferTexture1DEXT\0" + "glFramebufferTexture2DEXT\0" + "glFramebufferTexture3DEXT\0" + "glGenFramebuffersEXT\0" + "glGenRenderbuffersEXT\0" + "glGenerateMipmapEXT\0" + "glGetFramebufferAttachmentParameterivEXT\0" + "glGetRenderbufferParameterivEXT\0" + "glIsFramebufferEXT\0" + "glIsRenderbufferEXT\0" + "glRenderbufferStorageEXT\0" + "glBlitFramebufferEXT\0" + "glProgramEnvParameters4fvEXT\0" + "glProgramLocalParameters4fvEXT\0" + "glGetQueryObjecti64vEXT\0" + "glGetQueryObjectui64vEXT\0" + "glArrayElementEXT\0" + "glBindTextureEXT\0" + "glDrawArraysEXT\0" + "glAreTexturesResidentEXT\0" + "glCopyTexImage1DEXT\0" + "glCopyTexImage2DEXT\0" + "glCopyTexSubImage1DEXT\0" + "glCopyTexSubImage2DEXT\0" + "glDeleteTexturesEXT\0" + "glGenTexturesEXT\0" + "glGetPointervEXT\0" + "glIsTextureEXT\0" + "glPrioritizeTexturesEXT\0" + "glTexSubImage1DEXT\0" + "glTexSubImage2DEXT\0" + "glBlendColorEXT\0" + "glBlendEquationEXT\0" + "glDrawRangeElementsEXT\0" + "glColorTableSGI\0" + "glColorTableEXT\0" + "glColorTableParameterfvSGI\0" + "glColorTableParameterivSGI\0" + "glCopyColorTableSGI\0" + "glGetColorTableSGI\0" + "glGetColorTableEXT\0" + "glGetColorTableParameterfvSGI\0" + "glGetColorTableParameterfvEXT\0" + "glGetColorTableParameterivSGI\0" + "glGetColorTableParameterivEXT\0" + "glColorSubTableEXT\0" + "glCopyColorSubTableEXT\0" + "glConvolutionFilter1DEXT\0" + "glConvolutionFilter2DEXT\0" + "glConvolutionParameterfEXT\0" + "glConvolutionParameterfvEXT\0" + "glConvolutionParameteriEXT\0" + "glConvolutionParameterivEXT\0" + "glCopyConvolutionFilter1DEXT\0" + "glCopyConvolutionFilter2DEXT\0" + "glGetConvolutionFilterEXT\0" + "glGetConvolutionParameterfvEXT\0" + "glGetConvolutionParameterivEXT\0" + "glGetSeparableFilterEXT\0" + "glSeparableFilter2DEXT\0" + "glGetHistogramEXT\0" + "glGetHistogramParameterfvEXT\0" + "glGetHistogramParameterivEXT\0" + "glGetMinmaxEXT\0" + "glGetMinmaxParameterfvEXT\0" + "glGetMinmaxParameterivEXT\0" + "glHistogramEXT\0" + "glMinmaxEXT\0" + "glResetHistogramEXT\0" + "glResetMinmaxEXT\0" + "glTexImage3DEXT\0" + "glTexSubImage3DEXT\0" + "glCopyTexSubImage3DEXT\0" "glActiveTexture\0" "glClientActiveTexture\0" "glMultiTexCoord1d\0" @@ -876,30 +915,116 @@ static const char gl_string_table[] = "glMultiTexCoord4iv\0" "glMultiTexCoord4s\0" "glMultiTexCoord4sv\0" - "glLoadTransposeMatrixf\0" "glLoadTransposeMatrixd\0" - "glMultTransposeMatrixf\0" + "glLoadTransposeMatrixf\0" "glMultTransposeMatrixd\0" + "glMultTransposeMatrixf\0" "glSampleCoverage\0" - "glCompressedTexImage3D\0" - "glCompressedTexImage2D\0" "glCompressedTexImage1D\0" - "glCompressedTexSubImage3D\0" - "glCompressedTexSubImage2D\0" + "glCompressedTexImage2D\0" + "glCompressedTexImage3D\0" "glCompressedTexSubImage1D\0" + "glCompressedTexSubImage2D\0" + "glCompressedTexSubImage3D\0" "glGetCompressedTexImage\0" - "glBlendFuncSeparate\0" - "glFogCoordf\0" - "glFogCoordfv\0" - "glFogCoordd\0" - "glFogCoorddv\0" - "glFogCoordPointer\0" - "glMultiDrawArrays\0" - "glMultiDrawElements\0" + "glDisableVertexAttribArray\0" + "glEnableVertexAttribArray\0" + "glGetVertexAttribdv\0" + "glGetVertexAttribfv\0" + "glGetVertexAttribiv\0" + "glVertexAttrib1d\0" + "glVertexAttrib1dv\0" + "glVertexAttrib1f\0" + "glVertexAttrib1fv\0" + "glVertexAttrib1s\0" + "glVertexAttrib1sv\0" + "glVertexAttrib2d\0" + "glVertexAttrib2dv\0" + "glVertexAttrib2f\0" + "glVertexAttrib2fv\0" + "glVertexAttrib2s\0" + "glVertexAttrib2sv\0" + "glVertexAttrib3d\0" + "glVertexAttrib3dv\0" + "glVertexAttrib3f\0" + "glVertexAttrib3fv\0" + "glVertexAttrib3s\0" + "glVertexAttrib3sv\0" + "glVertexAttrib4Nbv\0" + "glVertexAttrib4Niv\0" + "glVertexAttrib4Nsv\0" + "glVertexAttrib4Nub\0" + "glVertexAttrib4Nubv\0" + "glVertexAttrib4Nuiv\0" + "glVertexAttrib4Nusv\0" + "glVertexAttrib4d\0" + "glVertexAttrib4dv\0" + "glVertexAttrib4f\0" + "glVertexAttrib4fv\0" + "glVertexAttrib4s\0" + "glVertexAttrib4sv\0" + "glVertexAttribPointer\0" + "glBindBuffer\0" + "glBufferData\0" + "glBufferSubData\0" + "glDeleteBuffers\0" + "glGenBuffers\0" + "glGetBufferParameteriv\0" + "glGetBufferPointerv\0" + "glGetBufferSubData\0" + "glIsBuffer\0" + "glMapBuffer\0" + "glUnmapBuffer\0" + "glBeginQuery\0" + "glDeleteQueries\0" + "glEndQuery\0" + "glGenQueries\0" + "glGetQueryObjectiv\0" + "glGetQueryObjectuiv\0" + "glGetQueryiv\0" + "glIsQuery\0" + "glCompileShader\0" + "glGetActiveUniform\0" + "glGetShaderSource\0" + "glGetUniformLocation\0" + "glGetUniformfv\0" + "glGetUniformiv\0" + "glLinkProgram\0" + "glShaderSource\0" + "glUniform1f\0" + "glUniform1fv\0" + "glUniform1i\0" + "glUniform1iv\0" + "glUniform2f\0" + "glUniform2fv\0" + "glUniform2i\0" + "glUniform2iv\0" + "glUniform3f\0" + "glUniform3fv\0" + "glUniform3i\0" + "glUniform3iv\0" + "glUniform4f\0" + "glUniform4fv\0" + "glUniform4i\0" + "glUniform4iv\0" + "glUniformMatrix2fv\0" + "glUniformMatrix3fv\0" + "glUniformMatrix4fv\0" + "glUseProgram\0" + "glValidateProgram\0" + "glBindAttribLocation\0" + "glGetActiveAttrib\0" + "glGetAttribLocation\0" + "glDrawBuffers\0" + "glDrawBuffersATI\0" + "glSampleMaskEXT\0" + "glSamplePatternEXT\0" "glPointParameterf\0" + "glPointParameterfARB\0" + "glPointParameterfSGIS\0" "glPointParameterfv\0" - "glPointParameteri\0" - "glPointParameteriv\0" + "glPointParameterfvARB\0" + "glPointParameterfvSGIS\0" "glSecondaryColor3b\0" "glSecondaryColor3bv\0" "glSecondaryColor3d\0" @@ -917,1087 +1042,1199 @@ static const char gl_string_table[] = "glSecondaryColor3us\0" "glSecondaryColor3usv\0" "glSecondaryColorPointer\0" + "glMultiDrawArrays\0" + "glMultiDrawElements\0" + "glFogCoordPointer\0" + "glFogCoordd\0" + "glFogCoorddv\0" + "glFogCoordf\0" + "glFogCoordfv\0" + "glBlendFuncSeparate\0" + "glBlendFuncSeparateINGR\0" "glWindowPos2d\0" - "glWindowPos2dv\0" - "glWindowPos2f\0" - "glWindowPos2fv\0" - "glWindowPos2i\0" - "glWindowPos2iv\0" - "glWindowPos2s\0" - "glWindowPos2sv\0" - "glWindowPos3d\0" - "glWindowPos3dv\0" - "glWindowPos3f\0" - "glWindowPos3fv\0" - "glWindowPos3i\0" - "glWindowPos3iv\0" - "glWindowPos3s\0" - "glWindowPos3sv\0" - "glBindBuffer\0" - "glBufferData\0" - "glBufferSubData\0" - "glDeleteBuffers\0" - "glGenBuffers\0" - "glGetBufferParameteriv\0" - "glGetBufferPointerv\0" - "glGetBufferSubData\0" - "glIsBuffer\0" - "glMapBuffer\0" - "glUnmapBuffer\0" - "glGenQueries\0" - "glDeleteQueries\0" - "glIsQuery\0" - "glBeginQuery\0" - "glEndQuery\0" - "glGetQueryiv\0" - "glGetQueryObjectiv\0" - "glGetQueryObjectuiv\0" - "glPointParameterfARB\0" - "glPointParameterfvARB\0" "glWindowPos2dARB\0" - "glWindowPos2fARB\0" - "glWindowPos2iARB\0" - "glWindowPos2sARB\0" + "glWindowPos2dv\0" "glWindowPos2dvARB\0" + "glWindowPos2f\0" + "glWindowPos2fARB\0" + "glWindowPos2fv\0" "glWindowPos2fvARB\0" + "glWindowPos2i\0" + "glWindowPos2iARB\0" + "glWindowPos2iv\0" "glWindowPos2ivARB\0" + "glWindowPos2s\0" + "glWindowPos2sARB\0" + "glWindowPos2sv\0" "glWindowPos2svARB\0" + "glWindowPos3d\0" "glWindowPos3dARB\0" - "glWindowPos3fARB\0" - "glWindowPos3iARB\0" - "glWindowPos3sARB\0" + "glWindowPos3dv\0" "glWindowPos3dvARB\0" + "glWindowPos3f\0" + "glWindowPos3fARB\0" + "glWindowPos3fv\0" "glWindowPos3fvARB\0" + "glWindowPos3i\0" + "glWindowPos3iARB\0" + "glWindowPos3iv\0" "glWindowPos3ivARB\0" + "glWindowPos3s\0" + "glWindowPos3sARB\0" + "glWindowPos3sv\0" "glWindowPos3svARB\0" "glBindProgramARB\0" "glDeleteProgramsARB\0" "glGenProgramsARB\0" - "glIsProgramARB\0" "glGetVertexAttribPointervARB\0" - "glBlendColorEXT\0" - "glTexImage3DEXT\0" - "glTexSubImage3DEXT\0" - "glTexSubImage1DEXT\0" - "glTexSubImage2DEXT\0" - "glCopyTexImage1DEXT\0" - "glCopyTexImage2DEXT\0" - "glCopyTexSubImage1DEXT\0" - "glCopyTexSubImage2DEXT\0" - "glCopyTexSubImage3DEXT\0" - "glHistogramEXT\0" - "glMinmaxEXT\0" - "glResetHistogramEXT\0" - "glResetMinmaxEXT\0" - "glConvolutionFilter1DEXT\0" - "glConvolutionFilter2DEXT\0" - "glConvolutionParameterfEXT\0" - "glConvolutionParameterfvEXT\0" - "glConvolutionParameteriEXT\0" - "glConvolutionParameterivEXT\0" - "glCopyConvolutionFilter1DEXT\0" - "glCopyConvolutionFilter2DEXT\0" - "glSeparableFilter2DEXT\0" - "glColorTableSGI\0" - "glColorTableParameterfvSGI\0" - "glColorTableParameterivSGI\0" - "glCopyColorTableSGI\0" - "glBindTextureEXT\0" - "glDeleteTexturesEXT\0" - "glPrioritizeTexturesEXT\0" - "glArrayElementEXT\0" - "glDrawArraysEXT\0" - "glGetPointervEXT\0" - "glBlendEquationEXT\0" - "glColorSubTableEXT\0" - "glCopyColorSubTableEXT\0" - "glColorTableEXT\0" - "glDrawRangeElementsEXT\0" - "glSampleMaskEXT\0" - "glSamplePatternEXT\0" - "glDrawBuffersATI\0" + "glIsProgramARB\0" + "glPointParameteri\0" + "glPointParameteriv\0" + "glBlendEquationSeparate\0" "glBlendEquationSeparateATI\0" - "glBlendFuncSeparateINGR\0" - "glPointParameterfSGIS\0" - "glPointParameterfvSGIS\0" ; + +#ifdef USE_MGL_NAMESPACE +#define gl_dispatch_stub_343 mgl_dispatch_stub_343 +#define gl_dispatch_stub_344 mgl_dispatch_stub_344 +#define gl_dispatch_stub_345 mgl_dispatch_stub_345 +#define gl_dispatch_stub_356 mgl_dispatch_stub_356 +#define gl_dispatch_stub_357 mgl_dispatch_stub_357 +#define gl_dispatch_stub_358 mgl_dispatch_stub_358 +#define gl_dispatch_stub_359 mgl_dispatch_stub_359 +#define gl_dispatch_stub_361 mgl_dispatch_stub_361 +#define gl_dispatch_stub_362 mgl_dispatch_stub_362 +#define gl_dispatch_stub_363 mgl_dispatch_stub_363 +#define gl_dispatch_stub_364 mgl_dispatch_stub_364 +#define gl_dispatch_stub_365 mgl_dispatch_stub_365 +#define gl_dispatch_stub_366 mgl_dispatch_stub_366 +#define gl_dispatch_stub_562 mgl_dispatch_stub_562 +#define gl_dispatch_stub_563 mgl_dispatch_stub_563 +#define gl_dispatch_stub_564 mgl_dispatch_stub_564 +#define gl_dispatch_stub_565 mgl_dispatch_stub_565 +#define gl_dispatch_stub_566 mgl_dispatch_stub_566 +#define gl_dispatch_stub_567 mgl_dispatch_stub_567 +#define gl_dispatch_stub_568 mgl_dispatch_stub_568 +#define gl_dispatch_stub_569 mgl_dispatch_stub_569 +#define gl_dispatch_stub_580 mgl_dispatch_stub_580 +#define gl_dispatch_stub_581 mgl_dispatch_stub_581 +#define gl_dispatch_stub_606 mgl_dispatch_stub_606 +#define gl_dispatch_stub_648 mgl_dispatch_stub_648 +#define gl_dispatch_stub_649 mgl_dispatch_stub_649 +#define gl_dispatch_stub_650 mgl_dispatch_stub_650 +#define gl_dispatch_stub_651 mgl_dispatch_stub_651 +#define gl_dispatch_stub_652 mgl_dispatch_stub_652 +#define gl_dispatch_stub_653 mgl_dispatch_stub_653 +#define gl_dispatch_stub_654 mgl_dispatch_stub_654 +#define gl_dispatch_stub_655 mgl_dispatch_stub_655 +#define gl_dispatch_stub_656 mgl_dispatch_stub_656 +#define gl_dispatch_stub_737 mgl_dispatch_stub_737 +#define gl_dispatch_stub_738 mgl_dispatch_stub_738 +#define gl_dispatch_stub_739 mgl_dispatch_stub_739 +#define gl_dispatch_stub_740 mgl_dispatch_stub_740 +#define gl_dispatch_stub_741 mgl_dispatch_stub_741 +#define gl_dispatch_stub_748 mgl_dispatch_stub_748 +#define gl_dispatch_stub_749 mgl_dispatch_stub_749 +#define gl_dispatch_stub_767 mgl_dispatch_stub_767 +#define gl_dispatch_stub_768 mgl_dispatch_stub_768 +#define gl_dispatch_stub_769 mgl_dispatch_stub_769 +#define gl_dispatch_stub_770 mgl_dispatch_stub_770 +#define gl_dispatch_stub_771 mgl_dispatch_stub_771 +#endif /* USE_MGL_NAMESPACE */ + + +/* FIXME: Having these (incorrect) prototypes here is ugly. */ +#if defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) +extern void gl_dispatch_stub_343(void); +extern void gl_dispatch_stub_344(void); +extern void gl_dispatch_stub_345(void); +extern void gl_dispatch_stub_356(void); +extern void gl_dispatch_stub_357(void); +extern void gl_dispatch_stub_358(void); +extern void gl_dispatch_stub_359(void); +extern void gl_dispatch_stub_361(void); +extern void gl_dispatch_stub_362(void); +extern void gl_dispatch_stub_363(void); +extern void gl_dispatch_stub_364(void); +extern void gl_dispatch_stub_365(void); +extern void gl_dispatch_stub_366(void); +extern void gl_dispatch_stub_562(void); +extern void gl_dispatch_stub_563(void); +extern void gl_dispatch_stub_564(void); +extern void gl_dispatch_stub_565(void); +extern void gl_dispatch_stub_566(void); +extern void gl_dispatch_stub_567(void); +extern void gl_dispatch_stub_568(void); +extern void gl_dispatch_stub_569(void); +extern void gl_dispatch_stub_580(void); +extern void gl_dispatch_stub_581(void); +extern void gl_dispatch_stub_606(void); +extern void gl_dispatch_stub_648(void); +extern void gl_dispatch_stub_649(void); +extern void gl_dispatch_stub_650(void); +extern void gl_dispatch_stub_651(void); +extern void gl_dispatch_stub_652(void); +extern void gl_dispatch_stub_653(void); +extern void gl_dispatch_stub_654(void); +extern void gl_dispatch_stub_655(void); +extern void gl_dispatch_stub_656(void); +extern void gl_dispatch_stub_737(void); +extern void gl_dispatch_stub_738(void); +extern void gl_dispatch_stub_739(void); +extern void gl_dispatch_stub_740(void); +extern void gl_dispatch_stub_741(void); +extern void gl_dispatch_stub_748(void); +extern void gl_dispatch_stub_749(void); +extern void gl_dispatch_stub_767(void); +extern void gl_dispatch_stub_768(void); +extern void gl_dispatch_stub_769(void); +extern void gl_dispatch_stub_770(void); +extern void gl_dispatch_stub_771(void); +#endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */ + static const glprocs_table_t static_functions[] = { - NAME_FUNC_OFFSET( 0, glNewList, _gloffset_NewList ), - NAME_FUNC_OFFSET( 10, glEndList, _gloffset_EndList ), - NAME_FUNC_OFFSET( 20, glCallList, _gloffset_CallList ), - NAME_FUNC_OFFSET( 31, glCallLists, _gloffset_CallLists ), - NAME_FUNC_OFFSET( 43, glDeleteLists, _gloffset_DeleteLists ), - NAME_FUNC_OFFSET( 57, glGenLists, _gloffset_GenLists ), - NAME_FUNC_OFFSET( 68, glListBase, _gloffset_ListBase ), - NAME_FUNC_OFFSET( 79, glBegin, _gloffset_Begin ), - NAME_FUNC_OFFSET( 87, glBitmap, _gloffset_Bitmap ), - NAME_FUNC_OFFSET( 96, glColor3b, _gloffset_Color3b ), - NAME_FUNC_OFFSET( 106, glColor3bv, _gloffset_Color3bv ), - NAME_FUNC_OFFSET( 117, glColor3d, _gloffset_Color3d ), - NAME_FUNC_OFFSET( 127, glColor3dv, _gloffset_Color3dv ), - NAME_FUNC_OFFSET( 138, glColor3f, _gloffset_Color3f ), - NAME_FUNC_OFFSET( 148, glColor3fv, _gloffset_Color3fv ), - NAME_FUNC_OFFSET( 159, glColor3i, _gloffset_Color3i ), - NAME_FUNC_OFFSET( 169, glColor3iv, _gloffset_Color3iv ), - NAME_FUNC_OFFSET( 180, glColor3s, _gloffset_Color3s ), - NAME_FUNC_OFFSET( 190, glColor3sv, _gloffset_Color3sv ), - NAME_FUNC_OFFSET( 201, glColor3ub, _gloffset_Color3ub ), - NAME_FUNC_OFFSET( 212, glColor3ubv, _gloffset_Color3ubv ), - NAME_FUNC_OFFSET( 224, glColor3ui, _gloffset_Color3ui ), - NAME_FUNC_OFFSET( 235, glColor3uiv, _gloffset_Color3uiv ), - NAME_FUNC_OFFSET( 247, glColor3us, _gloffset_Color3us ), - NAME_FUNC_OFFSET( 258, glColor3usv, _gloffset_Color3usv ), - NAME_FUNC_OFFSET( 270, glColor4b, _gloffset_Color4b ), - NAME_FUNC_OFFSET( 280, glColor4bv, _gloffset_Color4bv ), - NAME_FUNC_OFFSET( 291, glColor4d, _gloffset_Color4d ), - NAME_FUNC_OFFSET( 301, glColor4dv, _gloffset_Color4dv ), - NAME_FUNC_OFFSET( 312, glColor4f, _gloffset_Color4f ), - NAME_FUNC_OFFSET( 322, glColor4fv, _gloffset_Color4fv ), - NAME_FUNC_OFFSET( 333, glColor4i, _gloffset_Color4i ), - NAME_FUNC_OFFSET( 343, glColor4iv, _gloffset_Color4iv ), - NAME_FUNC_OFFSET( 354, glColor4s, _gloffset_Color4s ), - NAME_FUNC_OFFSET( 364, glColor4sv, _gloffset_Color4sv ), - NAME_FUNC_OFFSET( 375, glColor4ub, _gloffset_Color4ub ), - NAME_FUNC_OFFSET( 386, glColor4ubv, _gloffset_Color4ubv ), - NAME_FUNC_OFFSET( 398, glColor4ui, _gloffset_Color4ui ), - NAME_FUNC_OFFSET( 409, glColor4uiv, _gloffset_Color4uiv ), - NAME_FUNC_OFFSET( 421, glColor4us, _gloffset_Color4us ), - NAME_FUNC_OFFSET( 432, glColor4usv, _gloffset_Color4usv ), - NAME_FUNC_OFFSET( 444, glEdgeFlag, _gloffset_EdgeFlag ), - NAME_FUNC_OFFSET( 455, glEdgeFlagv, _gloffset_EdgeFlagv ), - NAME_FUNC_OFFSET( 467, glEnd, _gloffset_End ), - NAME_FUNC_OFFSET( 473, glIndexd, _gloffset_Indexd ), - NAME_FUNC_OFFSET( 482, glIndexdv, _gloffset_Indexdv ), - NAME_FUNC_OFFSET( 492, glIndexf, _gloffset_Indexf ), - NAME_FUNC_OFFSET( 501, glIndexfv, _gloffset_Indexfv ), - NAME_FUNC_OFFSET( 511, glIndexi, _gloffset_Indexi ), - NAME_FUNC_OFFSET( 520, glIndexiv, _gloffset_Indexiv ), - NAME_FUNC_OFFSET( 530, glIndexs, _gloffset_Indexs ), - NAME_FUNC_OFFSET( 539, glIndexsv, _gloffset_Indexsv ), - NAME_FUNC_OFFSET( 549, glNormal3b, _gloffset_Normal3b ), - NAME_FUNC_OFFSET( 560, glNormal3bv, _gloffset_Normal3bv ), - NAME_FUNC_OFFSET( 572, glNormal3d, _gloffset_Normal3d ), - NAME_FUNC_OFFSET( 583, glNormal3dv, _gloffset_Normal3dv ), - NAME_FUNC_OFFSET( 595, glNormal3f, _gloffset_Normal3f ), - NAME_FUNC_OFFSET( 606, glNormal3fv, _gloffset_Normal3fv ), - NAME_FUNC_OFFSET( 618, glNormal3i, _gloffset_Normal3i ), - NAME_FUNC_OFFSET( 629, glNormal3iv, _gloffset_Normal3iv ), - NAME_FUNC_OFFSET( 641, glNormal3s, _gloffset_Normal3s ), - NAME_FUNC_OFFSET( 652, glNormal3sv, _gloffset_Normal3sv ), - NAME_FUNC_OFFSET( 664, glRasterPos2d, _gloffset_RasterPos2d ), - NAME_FUNC_OFFSET( 678, glRasterPos2dv, _gloffset_RasterPos2dv ), - NAME_FUNC_OFFSET( 693, glRasterPos2f, _gloffset_RasterPos2f ), - NAME_FUNC_OFFSET( 707, glRasterPos2fv, _gloffset_RasterPos2fv ), - NAME_FUNC_OFFSET( 722, glRasterPos2i, _gloffset_RasterPos2i ), - NAME_FUNC_OFFSET( 736, glRasterPos2iv, _gloffset_RasterPos2iv ), - NAME_FUNC_OFFSET( 751, glRasterPos2s, _gloffset_RasterPos2s ), - NAME_FUNC_OFFSET( 765, glRasterPos2sv, _gloffset_RasterPos2sv ), - NAME_FUNC_OFFSET( 780, glRasterPos3d, _gloffset_RasterPos3d ), - NAME_FUNC_OFFSET( 794, glRasterPos3dv, _gloffset_RasterPos3dv ), - NAME_FUNC_OFFSET( 809, glRasterPos3f, _gloffset_RasterPos3f ), - NAME_FUNC_OFFSET( 823, glRasterPos3fv, _gloffset_RasterPos3fv ), - NAME_FUNC_OFFSET( 838, glRasterPos3i, _gloffset_RasterPos3i ), - NAME_FUNC_OFFSET( 852, glRasterPos3iv, _gloffset_RasterPos3iv ), - NAME_FUNC_OFFSET( 867, glRasterPos3s, _gloffset_RasterPos3s ), - NAME_FUNC_OFFSET( 881, glRasterPos3sv, _gloffset_RasterPos3sv ), - NAME_FUNC_OFFSET( 896, glRasterPos4d, _gloffset_RasterPos4d ), - NAME_FUNC_OFFSET( 910, glRasterPos4dv, _gloffset_RasterPos4dv ), - NAME_FUNC_OFFSET( 925, glRasterPos4f, _gloffset_RasterPos4f ), - NAME_FUNC_OFFSET( 939, glRasterPos4fv, _gloffset_RasterPos4fv ), - NAME_FUNC_OFFSET( 954, glRasterPos4i, _gloffset_RasterPos4i ), - NAME_FUNC_OFFSET( 968, glRasterPos4iv, _gloffset_RasterPos4iv ), - NAME_FUNC_OFFSET( 983, glRasterPos4s, _gloffset_RasterPos4s ), - NAME_FUNC_OFFSET( 997, glRasterPos4sv, _gloffset_RasterPos4sv ), - NAME_FUNC_OFFSET( 1012, glRectd, _gloffset_Rectd ), - NAME_FUNC_OFFSET( 1020, glRectdv, _gloffset_Rectdv ), - NAME_FUNC_OFFSET( 1029, glRectf, _gloffset_Rectf ), - NAME_FUNC_OFFSET( 1037, glRectfv, _gloffset_Rectfv ), - NAME_FUNC_OFFSET( 1046, glRecti, _gloffset_Recti ), - NAME_FUNC_OFFSET( 1054, glRectiv, _gloffset_Rectiv ), - NAME_FUNC_OFFSET( 1063, glRects, _gloffset_Rects ), - NAME_FUNC_OFFSET( 1071, glRectsv, _gloffset_Rectsv ), - NAME_FUNC_OFFSET( 1080, glTexCoord1d, _gloffset_TexCoord1d ), - NAME_FUNC_OFFSET( 1093, glTexCoord1dv, _gloffset_TexCoord1dv ), - NAME_FUNC_OFFSET( 1107, glTexCoord1f, _gloffset_TexCoord1f ), - NAME_FUNC_OFFSET( 1120, glTexCoord1fv, _gloffset_TexCoord1fv ), - NAME_FUNC_OFFSET( 1134, glTexCoord1i, _gloffset_TexCoord1i ), - NAME_FUNC_OFFSET( 1147, glTexCoord1iv, _gloffset_TexCoord1iv ), - NAME_FUNC_OFFSET( 1161, glTexCoord1s, _gloffset_TexCoord1s ), - NAME_FUNC_OFFSET( 1174, glTexCoord1sv, _gloffset_TexCoord1sv ), - NAME_FUNC_OFFSET( 1188, glTexCoord2d, _gloffset_TexCoord2d ), - NAME_FUNC_OFFSET( 1201, glTexCoord2dv, _gloffset_TexCoord2dv ), - NAME_FUNC_OFFSET( 1215, glTexCoord2f, _gloffset_TexCoord2f ), - NAME_FUNC_OFFSET( 1228, glTexCoord2fv, _gloffset_TexCoord2fv ), - NAME_FUNC_OFFSET( 1242, glTexCoord2i, _gloffset_TexCoord2i ), - NAME_FUNC_OFFSET( 1255, glTexCoord2iv, _gloffset_TexCoord2iv ), - NAME_FUNC_OFFSET( 1269, glTexCoord2s, _gloffset_TexCoord2s ), - NAME_FUNC_OFFSET( 1282, glTexCoord2sv, _gloffset_TexCoord2sv ), - NAME_FUNC_OFFSET( 1296, glTexCoord3d, _gloffset_TexCoord3d ), - NAME_FUNC_OFFSET( 1309, glTexCoord3dv, _gloffset_TexCoord3dv ), - NAME_FUNC_OFFSET( 1323, glTexCoord3f, _gloffset_TexCoord3f ), - NAME_FUNC_OFFSET( 1336, glTexCoord3fv, _gloffset_TexCoord3fv ), - NAME_FUNC_OFFSET( 1350, glTexCoord3i, _gloffset_TexCoord3i ), - NAME_FUNC_OFFSET( 1363, glTexCoord3iv, _gloffset_TexCoord3iv ), - NAME_FUNC_OFFSET( 1377, glTexCoord3s, _gloffset_TexCoord3s ), - NAME_FUNC_OFFSET( 1390, glTexCoord3sv, _gloffset_TexCoord3sv ), - NAME_FUNC_OFFSET( 1404, glTexCoord4d, _gloffset_TexCoord4d ), - NAME_FUNC_OFFSET( 1417, glTexCoord4dv, _gloffset_TexCoord4dv ), - NAME_FUNC_OFFSET( 1431, glTexCoord4f, _gloffset_TexCoord4f ), - NAME_FUNC_OFFSET( 1444, glTexCoord4fv, _gloffset_TexCoord4fv ), - NAME_FUNC_OFFSET( 1458, glTexCoord4i, _gloffset_TexCoord4i ), - NAME_FUNC_OFFSET( 1471, glTexCoord4iv, _gloffset_TexCoord4iv ), - NAME_FUNC_OFFSET( 1485, glTexCoord4s, _gloffset_TexCoord4s ), - NAME_FUNC_OFFSET( 1498, glTexCoord4sv, _gloffset_TexCoord4sv ), - NAME_FUNC_OFFSET( 1512, glVertex2d, _gloffset_Vertex2d ), - NAME_FUNC_OFFSET( 1523, glVertex2dv, _gloffset_Vertex2dv ), - NAME_FUNC_OFFSET( 1535, glVertex2f, _gloffset_Vertex2f ), - NAME_FUNC_OFFSET( 1546, glVertex2fv, _gloffset_Vertex2fv ), - NAME_FUNC_OFFSET( 1558, glVertex2i, _gloffset_Vertex2i ), - NAME_FUNC_OFFSET( 1569, glVertex2iv, _gloffset_Vertex2iv ), - NAME_FUNC_OFFSET( 1581, glVertex2s, _gloffset_Vertex2s ), - NAME_FUNC_OFFSET( 1592, glVertex2sv, _gloffset_Vertex2sv ), - NAME_FUNC_OFFSET( 1604, glVertex3d, _gloffset_Vertex3d ), - NAME_FUNC_OFFSET( 1615, glVertex3dv, _gloffset_Vertex3dv ), - NAME_FUNC_OFFSET( 1627, glVertex3f, _gloffset_Vertex3f ), - NAME_FUNC_OFFSET( 1638, glVertex3fv, _gloffset_Vertex3fv ), - NAME_FUNC_OFFSET( 1650, glVertex3i, _gloffset_Vertex3i ), - NAME_FUNC_OFFSET( 1661, glVertex3iv, _gloffset_Vertex3iv ), - NAME_FUNC_OFFSET( 1673, glVertex3s, _gloffset_Vertex3s ), - NAME_FUNC_OFFSET( 1684, glVertex3sv, _gloffset_Vertex3sv ), - NAME_FUNC_OFFSET( 1696, glVertex4d, _gloffset_Vertex4d ), - NAME_FUNC_OFFSET( 1707, glVertex4dv, _gloffset_Vertex4dv ), - NAME_FUNC_OFFSET( 1719, glVertex4f, _gloffset_Vertex4f ), - NAME_FUNC_OFFSET( 1730, glVertex4fv, _gloffset_Vertex4fv ), - NAME_FUNC_OFFSET( 1742, glVertex4i, _gloffset_Vertex4i ), - NAME_FUNC_OFFSET( 1753, glVertex4iv, _gloffset_Vertex4iv ), - NAME_FUNC_OFFSET( 1765, glVertex4s, _gloffset_Vertex4s ), - NAME_FUNC_OFFSET( 1776, glVertex4sv, _gloffset_Vertex4sv ), - NAME_FUNC_OFFSET( 1788, glClipPlane, _gloffset_ClipPlane ), - NAME_FUNC_OFFSET( 1800, glColorMaterial, _gloffset_ColorMaterial ), - NAME_FUNC_OFFSET( 1816, glCullFace, _gloffset_CullFace ), - NAME_FUNC_OFFSET( 1827, glFogf, _gloffset_Fogf ), - NAME_FUNC_OFFSET( 1834, glFogfv, _gloffset_Fogfv ), - NAME_FUNC_OFFSET( 1842, glFogi, _gloffset_Fogi ), - NAME_FUNC_OFFSET( 1849, glFogiv, _gloffset_Fogiv ), - NAME_FUNC_OFFSET( 1857, glFrontFace, _gloffset_FrontFace ), - NAME_FUNC_OFFSET( 1869, glHint, _gloffset_Hint ), - NAME_FUNC_OFFSET( 1876, glLightf, _gloffset_Lightf ), - NAME_FUNC_OFFSET( 1885, glLightfv, _gloffset_Lightfv ), - NAME_FUNC_OFFSET( 1895, glLighti, _gloffset_Lighti ), - NAME_FUNC_OFFSET( 1904, glLightiv, _gloffset_Lightiv ), - NAME_FUNC_OFFSET( 1914, glLightModelf, _gloffset_LightModelf ), - NAME_FUNC_OFFSET( 1928, glLightModelfv, _gloffset_LightModelfv ), - NAME_FUNC_OFFSET( 1943, glLightModeli, _gloffset_LightModeli ), - NAME_FUNC_OFFSET( 1957, glLightModeliv, _gloffset_LightModeliv ), - NAME_FUNC_OFFSET( 1972, glLineStipple, _gloffset_LineStipple ), - NAME_FUNC_OFFSET( 1986, glLineWidth, _gloffset_LineWidth ), - NAME_FUNC_OFFSET( 1998, glMaterialf, _gloffset_Materialf ), - NAME_FUNC_OFFSET( 2010, glMaterialfv, _gloffset_Materialfv ), - NAME_FUNC_OFFSET( 2023, glMateriali, _gloffset_Materiali ), - NAME_FUNC_OFFSET( 2035, glMaterialiv, _gloffset_Materialiv ), - NAME_FUNC_OFFSET( 2048, glPointSize, _gloffset_PointSize ), - NAME_FUNC_OFFSET( 2060, glPolygonMode, _gloffset_PolygonMode ), - NAME_FUNC_OFFSET( 2074, glPolygonStipple, _gloffset_PolygonStipple ), - NAME_FUNC_OFFSET( 2091, glScissor, _gloffset_Scissor ), - NAME_FUNC_OFFSET( 2101, glShadeModel, _gloffset_ShadeModel ), - NAME_FUNC_OFFSET( 2114, glTexParameterf, _gloffset_TexParameterf ), - NAME_FUNC_OFFSET( 2130, glTexParameterfv, _gloffset_TexParameterfv ), - NAME_FUNC_OFFSET( 2147, glTexParameteri, _gloffset_TexParameteri ), - NAME_FUNC_OFFSET( 2163, glTexParameteriv, _gloffset_TexParameteriv ), - NAME_FUNC_OFFSET( 2180, glTexImage1D, _gloffset_TexImage1D ), - NAME_FUNC_OFFSET( 2193, glTexImage2D, _gloffset_TexImage2D ), - NAME_FUNC_OFFSET( 2206, glTexEnvf, _gloffset_TexEnvf ), - NAME_FUNC_OFFSET( 2216, glTexEnvfv, _gloffset_TexEnvfv ), - NAME_FUNC_OFFSET( 2227, glTexEnvi, _gloffset_TexEnvi ), - NAME_FUNC_OFFSET( 2237, glTexEnviv, _gloffset_TexEnviv ), - NAME_FUNC_OFFSET( 2248, glTexGend, _gloffset_TexGend ), - NAME_FUNC_OFFSET( 2258, glTexGendv, _gloffset_TexGendv ), - NAME_FUNC_OFFSET( 2269, glTexGenf, _gloffset_TexGenf ), - NAME_FUNC_OFFSET( 2279, glTexGenfv, _gloffset_TexGenfv ), - NAME_FUNC_OFFSET( 2290, glTexGeni, _gloffset_TexGeni ), - NAME_FUNC_OFFSET( 2300, glTexGeniv, _gloffset_TexGeniv ), - NAME_FUNC_OFFSET( 2311, glFeedbackBuffer, _gloffset_FeedbackBuffer ), - NAME_FUNC_OFFSET( 2328, glSelectBuffer, _gloffset_SelectBuffer ), - NAME_FUNC_OFFSET( 2343, glRenderMode, _gloffset_RenderMode ), - NAME_FUNC_OFFSET( 2356, glInitNames, _gloffset_InitNames ), - NAME_FUNC_OFFSET( 2368, glLoadName, _gloffset_LoadName ), - NAME_FUNC_OFFSET( 2379, glPassThrough, _gloffset_PassThrough ), - NAME_FUNC_OFFSET( 2393, glPopName, _gloffset_PopName ), - NAME_FUNC_OFFSET( 2403, glPushName, _gloffset_PushName ), - NAME_FUNC_OFFSET( 2414, glDrawBuffer, _gloffset_DrawBuffer ), - NAME_FUNC_OFFSET( 2427, glClear, _gloffset_Clear ), - NAME_FUNC_OFFSET( 2435, glClearAccum, _gloffset_ClearAccum ), - NAME_FUNC_OFFSET( 2448, glClearIndex, _gloffset_ClearIndex ), - NAME_FUNC_OFFSET( 2461, glClearColor, _gloffset_ClearColor ), - NAME_FUNC_OFFSET( 2474, glClearStencil, _gloffset_ClearStencil ), - NAME_FUNC_OFFSET( 2489, glClearDepth, _gloffset_ClearDepth ), - NAME_FUNC_OFFSET( 2502, glStencilMask, _gloffset_StencilMask ), - NAME_FUNC_OFFSET( 2516, glColorMask, _gloffset_ColorMask ), - NAME_FUNC_OFFSET( 2528, glDepthMask, _gloffset_DepthMask ), - NAME_FUNC_OFFSET( 2540, glIndexMask, _gloffset_IndexMask ), - NAME_FUNC_OFFSET( 2552, glAccum, _gloffset_Accum ), - NAME_FUNC_OFFSET( 2560, glDisable, _gloffset_Disable ), - NAME_FUNC_OFFSET( 2570, glEnable, _gloffset_Enable ), - NAME_FUNC_OFFSET( 2579, glFinish, _gloffset_Finish ), - NAME_FUNC_OFFSET( 2588, glFlush, _gloffset_Flush ), - NAME_FUNC_OFFSET( 2596, glPopAttrib, _gloffset_PopAttrib ), - NAME_FUNC_OFFSET( 2608, glPushAttrib, _gloffset_PushAttrib ), - NAME_FUNC_OFFSET( 2621, glMap1d, _gloffset_Map1d ), - NAME_FUNC_OFFSET( 2629, glMap1f, _gloffset_Map1f ), - NAME_FUNC_OFFSET( 2637, glMap2d, _gloffset_Map2d ), - NAME_FUNC_OFFSET( 2645, glMap2f, _gloffset_Map2f ), - NAME_FUNC_OFFSET( 2653, glMapGrid1d, _gloffset_MapGrid1d ), - NAME_FUNC_OFFSET( 2665, glMapGrid1f, _gloffset_MapGrid1f ), - NAME_FUNC_OFFSET( 2677, glMapGrid2d, _gloffset_MapGrid2d ), - NAME_FUNC_OFFSET( 2689, glMapGrid2f, _gloffset_MapGrid2f ), - NAME_FUNC_OFFSET( 2701, glEvalCoord1d, _gloffset_EvalCoord1d ), - NAME_FUNC_OFFSET( 2715, glEvalCoord1dv, _gloffset_EvalCoord1dv ), - NAME_FUNC_OFFSET( 2730, glEvalCoord1f, _gloffset_EvalCoord1f ), - NAME_FUNC_OFFSET( 2744, glEvalCoord1fv, _gloffset_EvalCoord1fv ), - NAME_FUNC_OFFSET( 2759, glEvalCoord2d, _gloffset_EvalCoord2d ), - NAME_FUNC_OFFSET( 2773, glEvalCoord2dv, _gloffset_EvalCoord2dv ), - NAME_FUNC_OFFSET( 2788, glEvalCoord2f, _gloffset_EvalCoord2f ), - NAME_FUNC_OFFSET( 2802, glEvalCoord2fv, _gloffset_EvalCoord2fv ), - NAME_FUNC_OFFSET( 2817, glEvalMesh1, _gloffset_EvalMesh1 ), - NAME_FUNC_OFFSET( 2829, glEvalPoint1, _gloffset_EvalPoint1 ), - NAME_FUNC_OFFSET( 2842, glEvalMesh2, _gloffset_EvalMesh2 ), - NAME_FUNC_OFFSET( 2854, glEvalPoint2, _gloffset_EvalPoint2 ), - NAME_FUNC_OFFSET( 2867, glAlphaFunc, _gloffset_AlphaFunc ), - NAME_FUNC_OFFSET( 2879, glBlendFunc, _gloffset_BlendFunc ), - NAME_FUNC_OFFSET( 2891, glLogicOp, _gloffset_LogicOp ), - NAME_FUNC_OFFSET( 2901, glStencilFunc, _gloffset_StencilFunc ), - NAME_FUNC_OFFSET( 2915, glStencilOp, _gloffset_StencilOp ), - NAME_FUNC_OFFSET( 2927, glDepthFunc, _gloffset_DepthFunc ), - NAME_FUNC_OFFSET( 2939, glPixelZoom, _gloffset_PixelZoom ), - NAME_FUNC_OFFSET( 2951, glPixelTransferf, _gloffset_PixelTransferf ), - NAME_FUNC_OFFSET( 2968, glPixelTransferi, _gloffset_PixelTransferi ), - NAME_FUNC_OFFSET( 2985, glPixelStoref, _gloffset_PixelStoref ), - NAME_FUNC_OFFSET( 2999, glPixelStorei, _gloffset_PixelStorei ), - NAME_FUNC_OFFSET( 3013, glPixelMapfv, _gloffset_PixelMapfv ), - NAME_FUNC_OFFSET( 3026, glPixelMapuiv, _gloffset_PixelMapuiv ), - NAME_FUNC_OFFSET( 3040, glPixelMapusv, _gloffset_PixelMapusv ), - NAME_FUNC_OFFSET( 3054, glReadBuffer, _gloffset_ReadBuffer ), - NAME_FUNC_OFFSET( 3067, glCopyPixels, _gloffset_CopyPixels ), - NAME_FUNC_OFFSET( 3080, glReadPixels, _gloffset_ReadPixels ), - NAME_FUNC_OFFSET( 3093, glDrawPixels, _gloffset_DrawPixels ), - NAME_FUNC_OFFSET( 3106, glGetBooleanv, _gloffset_GetBooleanv ), - NAME_FUNC_OFFSET( 3120, glGetClipPlane, _gloffset_GetClipPlane ), - NAME_FUNC_OFFSET( 3135, glGetDoublev, _gloffset_GetDoublev ), - NAME_FUNC_OFFSET( 3148, glGetError, _gloffset_GetError ), - NAME_FUNC_OFFSET( 3159, glGetFloatv, _gloffset_GetFloatv ), - NAME_FUNC_OFFSET( 3171, glGetIntegerv, _gloffset_GetIntegerv ), - NAME_FUNC_OFFSET( 3185, glGetLightfv, _gloffset_GetLightfv ), - NAME_FUNC_OFFSET( 3198, glGetLightiv, _gloffset_GetLightiv ), - NAME_FUNC_OFFSET( 3211, glGetMapdv, _gloffset_GetMapdv ), - NAME_FUNC_OFFSET( 3222, glGetMapfv, _gloffset_GetMapfv ), - NAME_FUNC_OFFSET( 3233, glGetMapiv, _gloffset_GetMapiv ), - NAME_FUNC_OFFSET( 3244, glGetMaterialfv, _gloffset_GetMaterialfv ), - NAME_FUNC_OFFSET( 3260, glGetMaterialiv, _gloffset_GetMaterialiv ), - NAME_FUNC_OFFSET( 3276, glGetPixelMapfv, _gloffset_GetPixelMapfv ), - NAME_FUNC_OFFSET( 3292, glGetPixelMapuiv, _gloffset_GetPixelMapuiv ), - NAME_FUNC_OFFSET( 3309, glGetPixelMapusv, _gloffset_GetPixelMapusv ), - NAME_FUNC_OFFSET( 3326, glGetPolygonStipple, _gloffset_GetPolygonStipple ), - NAME_FUNC_OFFSET( 3346, glGetString, _gloffset_GetString ), - NAME_FUNC_OFFSET( 3358, glGetTexEnvfv, _gloffset_GetTexEnvfv ), - NAME_FUNC_OFFSET( 3372, glGetTexEnviv, _gloffset_GetTexEnviv ), - NAME_FUNC_OFFSET( 3386, glGetTexGendv, _gloffset_GetTexGendv ), - NAME_FUNC_OFFSET( 3400, glGetTexGenfv, _gloffset_GetTexGenfv ), - NAME_FUNC_OFFSET( 3414, glGetTexGeniv, _gloffset_GetTexGeniv ), - NAME_FUNC_OFFSET( 3428, glGetTexImage, _gloffset_GetTexImage ), - NAME_FUNC_OFFSET( 3442, glGetTexParameterfv, _gloffset_GetTexParameterfv ), - NAME_FUNC_OFFSET( 3462, glGetTexParameteriv, _gloffset_GetTexParameteriv ), - NAME_FUNC_OFFSET( 3482, glGetTexLevelParameterfv, _gloffset_GetTexLevelParameterfv ), - NAME_FUNC_OFFSET( 3507, glGetTexLevelParameteriv, _gloffset_GetTexLevelParameteriv ), - NAME_FUNC_OFFSET( 3532, glIsEnabled, _gloffset_IsEnabled ), - NAME_FUNC_OFFSET( 3544, glIsList, _gloffset_IsList ), - NAME_FUNC_OFFSET( 3553, glDepthRange, _gloffset_DepthRange ), - NAME_FUNC_OFFSET( 3566, glFrustum, _gloffset_Frustum ), - NAME_FUNC_OFFSET( 3576, glLoadIdentity, _gloffset_LoadIdentity ), - NAME_FUNC_OFFSET( 3591, glLoadMatrixf, _gloffset_LoadMatrixf ), - NAME_FUNC_OFFSET( 3605, glLoadMatrixd, _gloffset_LoadMatrixd ), - NAME_FUNC_OFFSET( 3619, glMatrixMode, _gloffset_MatrixMode ), - NAME_FUNC_OFFSET( 3632, glMultMatrixf, _gloffset_MultMatrixf ), - NAME_FUNC_OFFSET( 3646, glMultMatrixd, _gloffset_MultMatrixd ), - NAME_FUNC_OFFSET( 3660, glOrtho, _gloffset_Ortho ), - NAME_FUNC_OFFSET( 3668, glPopMatrix, _gloffset_PopMatrix ), - NAME_FUNC_OFFSET( 3680, glPushMatrix, _gloffset_PushMatrix ), - NAME_FUNC_OFFSET( 3693, glRotated, _gloffset_Rotated ), - NAME_FUNC_OFFSET( 3703, glRotatef, _gloffset_Rotatef ), - NAME_FUNC_OFFSET( 3713, glScaled, _gloffset_Scaled ), - NAME_FUNC_OFFSET( 3722, glScalef, _gloffset_Scalef ), - NAME_FUNC_OFFSET( 3731, glTranslated, _gloffset_Translated ), - NAME_FUNC_OFFSET( 3744, glTranslatef, _gloffset_Translatef ), - NAME_FUNC_OFFSET( 3757, glViewport, _gloffset_Viewport ), - NAME_FUNC_OFFSET( 3768, glArrayElement, _gloffset_ArrayElement ), - NAME_FUNC_OFFSET( 3783, glBindTexture, _gloffset_BindTexture ), - NAME_FUNC_OFFSET( 3797, glColorPointer, _gloffset_ColorPointer ), - NAME_FUNC_OFFSET( 3812, glDisableClientState, _gloffset_DisableClientState ), - NAME_FUNC_OFFSET( 3833, glDrawArrays, _gloffset_DrawArrays ), - NAME_FUNC_OFFSET( 3846, glDrawElements, _gloffset_DrawElements ), - NAME_FUNC_OFFSET( 3861, glEdgeFlagPointer, _gloffset_EdgeFlagPointer ), - NAME_FUNC_OFFSET( 3879, glEnableClientState, _gloffset_EnableClientState ), - NAME_FUNC_OFFSET( 3899, glIndexPointer, _gloffset_IndexPointer ), - NAME_FUNC_OFFSET( 3914, glIndexub, _gloffset_Indexub ), - NAME_FUNC_OFFSET( 3924, glIndexubv, _gloffset_Indexubv ), - NAME_FUNC_OFFSET( 3935, glInterleavedArrays, _gloffset_InterleavedArrays ), - NAME_FUNC_OFFSET( 3955, glNormalPointer, _gloffset_NormalPointer ), - NAME_FUNC_OFFSET( 3971, glPolygonOffset, _gloffset_PolygonOffset ), - NAME_FUNC_OFFSET( 3987, glTexCoordPointer, _gloffset_TexCoordPointer ), - NAME_FUNC_OFFSET( 4005, glVertexPointer, _gloffset_VertexPointer ), - NAME_FUNC_OFFSET( 4021, glAreTexturesResident, _gloffset_AreTexturesResident ), - NAME_FUNC_OFFSET( 4043, glCopyTexImage1D, _gloffset_CopyTexImage1D ), - NAME_FUNC_OFFSET( 4060, glCopyTexImage2D, _gloffset_CopyTexImage2D ), - NAME_FUNC_OFFSET( 4077, glCopyTexSubImage1D, _gloffset_CopyTexSubImage1D ), - NAME_FUNC_OFFSET( 4097, glCopyTexSubImage2D, _gloffset_CopyTexSubImage2D ), - NAME_FUNC_OFFSET( 4117, glDeleteTextures, _gloffset_DeleteTextures ), - NAME_FUNC_OFFSET( 4134, glGenTextures, _gloffset_GenTextures ), - NAME_FUNC_OFFSET( 4148, glGetPointerv, _gloffset_GetPointerv ), - NAME_FUNC_OFFSET( 4162, glIsTexture, _gloffset_IsTexture ), - NAME_FUNC_OFFSET( 4174, glPrioritizeTextures, _gloffset_PrioritizeTextures ), - NAME_FUNC_OFFSET( 4195, glTexSubImage1D, _gloffset_TexSubImage1D ), - NAME_FUNC_OFFSET( 4211, glTexSubImage2D, _gloffset_TexSubImage2D ), - NAME_FUNC_OFFSET( 4227, glPopClientAttrib, _gloffset_PopClientAttrib ), - NAME_FUNC_OFFSET( 4245, glPushClientAttrib, _gloffset_PushClientAttrib ), - NAME_FUNC_OFFSET( 4264, glBlendColor, _gloffset_BlendColor ), - NAME_FUNC_OFFSET( 4277, glBlendEquation, _gloffset_BlendEquation ), - NAME_FUNC_OFFSET( 4293, glDrawRangeElements, _gloffset_DrawRangeElements ), - NAME_FUNC_OFFSET( 4313, glColorTable, _gloffset_ColorTable ), - NAME_FUNC_OFFSET( 4326, glColorTableParameterfv, _gloffset_ColorTableParameterfv ), - NAME_FUNC_OFFSET( 4350, glColorTableParameteriv, _gloffset_ColorTableParameteriv ), - NAME_FUNC_OFFSET( 4374, glCopyColorTable, _gloffset_CopyColorTable ), - NAME_FUNC_OFFSET( 4391, glGetColorTable, _gloffset_GetColorTable ), - NAME_FUNC_OFFSET( 4407, glGetColorTableParameterfv, _gloffset_GetColorTableParameterfv ), - NAME_FUNC_OFFSET( 4434, glGetColorTableParameteriv, _gloffset_GetColorTableParameteriv ), - NAME_FUNC_OFFSET( 4461, glColorSubTable, _gloffset_ColorSubTable ), - NAME_FUNC_OFFSET( 4477, glCopyColorSubTable, _gloffset_CopyColorSubTable ), - NAME_FUNC_OFFSET( 4497, glConvolutionFilter1D, _gloffset_ConvolutionFilter1D ), - NAME_FUNC_OFFSET( 4519, glConvolutionFilter2D, _gloffset_ConvolutionFilter2D ), - NAME_FUNC_OFFSET( 4541, glConvolutionParameterf, _gloffset_ConvolutionParameterf ), - NAME_FUNC_OFFSET( 4565, glConvolutionParameterfv, _gloffset_ConvolutionParameterfv ), - NAME_FUNC_OFFSET( 4590, glConvolutionParameteri, _gloffset_ConvolutionParameteri ), - NAME_FUNC_OFFSET( 4614, glConvolutionParameteriv, _gloffset_ConvolutionParameteriv ), - NAME_FUNC_OFFSET( 4639, glCopyConvolutionFilter1D, _gloffset_CopyConvolutionFilter1D ), - NAME_FUNC_OFFSET( 4665, glCopyConvolutionFilter2D, _gloffset_CopyConvolutionFilter2D ), - NAME_FUNC_OFFSET( 4691, glGetConvolutionFilter, _gloffset_GetConvolutionFilter ), - NAME_FUNC_OFFSET( 4714, glGetConvolutionParameterfv, _gloffset_GetConvolutionParameterfv ), - NAME_FUNC_OFFSET( 4742, glGetConvolutionParameteriv, _gloffset_GetConvolutionParameteriv ), - NAME_FUNC_OFFSET( 4770, glGetSeparableFilter, _gloffset_GetSeparableFilter ), - NAME_FUNC_OFFSET( 4791, glSeparableFilter2D, _gloffset_SeparableFilter2D ), - NAME_FUNC_OFFSET( 4811, glGetHistogram, _gloffset_GetHistogram ), - NAME_FUNC_OFFSET( 4826, glGetHistogramParameterfv, _gloffset_GetHistogramParameterfv ), - NAME_FUNC_OFFSET( 4852, glGetHistogramParameteriv, _gloffset_GetHistogramParameteriv ), - NAME_FUNC_OFFSET( 4878, glGetMinmax, _gloffset_GetMinmax ), - NAME_FUNC_OFFSET( 4890, glGetMinmaxParameterfv, _gloffset_GetMinmaxParameterfv ), - NAME_FUNC_OFFSET( 4913, glGetMinmaxParameteriv, _gloffset_GetMinmaxParameteriv ), - NAME_FUNC_OFFSET( 4936, glHistogram, _gloffset_Histogram ), - NAME_FUNC_OFFSET( 4948, glMinmax, _gloffset_Minmax ), - NAME_FUNC_OFFSET( 4957, glResetHistogram, _gloffset_ResetHistogram ), - NAME_FUNC_OFFSET( 4974, glResetMinmax, _gloffset_ResetMinmax ), - NAME_FUNC_OFFSET( 4988, glTexImage3D, _gloffset_TexImage3D ), - NAME_FUNC_OFFSET( 5001, glTexSubImage3D, _gloffset_TexSubImage3D ), - NAME_FUNC_OFFSET( 5017, glCopyTexSubImage3D, _gloffset_CopyTexSubImage3D ), - NAME_FUNC_OFFSET( 5037, glActiveTextureARB, _gloffset_ActiveTextureARB ), - NAME_FUNC_OFFSET( 5056, glClientActiveTextureARB, _gloffset_ClientActiveTextureARB ), - NAME_FUNC_OFFSET( 5081, glMultiTexCoord1dARB, _gloffset_MultiTexCoord1dARB ), - NAME_FUNC_OFFSET( 5102, glMultiTexCoord1dvARB, _gloffset_MultiTexCoord1dvARB ), - NAME_FUNC_OFFSET( 5124, glMultiTexCoord1fARB, _gloffset_MultiTexCoord1fARB ), - NAME_FUNC_OFFSET( 5145, glMultiTexCoord1fvARB, _gloffset_MultiTexCoord1fvARB ), - NAME_FUNC_OFFSET( 5167, glMultiTexCoord1iARB, _gloffset_MultiTexCoord1iARB ), - NAME_FUNC_OFFSET( 5188, glMultiTexCoord1ivARB, _gloffset_MultiTexCoord1ivARB ), - NAME_FUNC_OFFSET( 5210, glMultiTexCoord1sARB, _gloffset_MultiTexCoord1sARB ), - NAME_FUNC_OFFSET( 5231, glMultiTexCoord1svARB, _gloffset_MultiTexCoord1svARB ), - NAME_FUNC_OFFSET( 5253, glMultiTexCoord2dARB, _gloffset_MultiTexCoord2dARB ), - NAME_FUNC_OFFSET( 5274, glMultiTexCoord2dvARB, _gloffset_MultiTexCoord2dvARB ), - NAME_FUNC_OFFSET( 5296, glMultiTexCoord2fARB, _gloffset_MultiTexCoord2fARB ), - NAME_FUNC_OFFSET( 5317, glMultiTexCoord2fvARB, _gloffset_MultiTexCoord2fvARB ), - NAME_FUNC_OFFSET( 5339, glMultiTexCoord2iARB, _gloffset_MultiTexCoord2iARB ), - NAME_FUNC_OFFSET( 5360, glMultiTexCoord2ivARB, _gloffset_MultiTexCoord2ivARB ), - NAME_FUNC_OFFSET( 5382, glMultiTexCoord2sARB, _gloffset_MultiTexCoord2sARB ), - NAME_FUNC_OFFSET( 5403, glMultiTexCoord2svARB, _gloffset_MultiTexCoord2svARB ), - NAME_FUNC_OFFSET( 5425, glMultiTexCoord3dARB, _gloffset_MultiTexCoord3dARB ), - NAME_FUNC_OFFSET( 5446, glMultiTexCoord3dvARB, _gloffset_MultiTexCoord3dvARB ), - NAME_FUNC_OFFSET( 5468, glMultiTexCoord3fARB, _gloffset_MultiTexCoord3fARB ), - NAME_FUNC_OFFSET( 5489, glMultiTexCoord3fvARB, _gloffset_MultiTexCoord3fvARB ), - NAME_FUNC_OFFSET( 5511, glMultiTexCoord3iARB, _gloffset_MultiTexCoord3iARB ), - NAME_FUNC_OFFSET( 5532, glMultiTexCoord3ivARB, _gloffset_MultiTexCoord3ivARB ), - NAME_FUNC_OFFSET( 5554, glMultiTexCoord3sARB, _gloffset_MultiTexCoord3sARB ), - NAME_FUNC_OFFSET( 5575, glMultiTexCoord3svARB, _gloffset_MultiTexCoord3svARB ), - NAME_FUNC_OFFSET( 5597, glMultiTexCoord4dARB, _gloffset_MultiTexCoord4dARB ), - NAME_FUNC_OFFSET( 5618, glMultiTexCoord4dvARB, _gloffset_MultiTexCoord4dvARB ), - NAME_FUNC_OFFSET( 5640, glMultiTexCoord4fARB, _gloffset_MultiTexCoord4fARB ), - NAME_FUNC_OFFSET( 5661, glMultiTexCoord4fvARB, _gloffset_MultiTexCoord4fvARB ), - NAME_FUNC_OFFSET( 5683, glMultiTexCoord4iARB, _gloffset_MultiTexCoord4iARB ), - NAME_FUNC_OFFSET( 5704, glMultiTexCoord4ivARB, _gloffset_MultiTexCoord4ivARB ), - NAME_FUNC_OFFSET( 5726, glMultiTexCoord4sARB, _gloffset_MultiTexCoord4sARB ), - NAME_FUNC_OFFSET( 5747, glMultiTexCoord4svARB, _gloffset_MultiTexCoord4svARB ), - NAME_FUNC_OFFSET( 5769, glLoadTransposeMatrixfARB, _gloffset_LoadTransposeMatrixfARB ), - NAME_FUNC_OFFSET( 5795, glLoadTransposeMatrixdARB, _gloffset_LoadTransposeMatrixdARB ), - NAME_FUNC_OFFSET( 5821, glMultTransposeMatrixfARB, _gloffset_MultTransposeMatrixfARB ), - NAME_FUNC_OFFSET( 5847, glMultTransposeMatrixdARB, _gloffset_MultTransposeMatrixdARB ), - NAME_FUNC_OFFSET( 5873, glSampleCoverageARB, _gloffset_SampleCoverageARB ), - NAME_FUNC_OFFSET( 5893, glDrawBuffersARB, _gloffset_DrawBuffersARB ), - NAME_FUNC_OFFSET( 5910, glPolygonOffsetEXT, _gloffset_PolygonOffsetEXT ), - NAME_FUNC_OFFSET( 5929, glGetTexFilterFuncSGIS, _gloffset_GetTexFilterFuncSGIS ), - NAME_FUNC_OFFSET( 5952, glTexFilterFuncSGIS, _gloffset_TexFilterFuncSGIS ), - NAME_FUNC_OFFSET( 5972, glGetHistogramEXT, _gloffset_GetHistogramEXT ), - NAME_FUNC_OFFSET( 5990, glGetHistogramParameterfvEXT, _gloffset_GetHistogramParameterfvEXT ), - NAME_FUNC_OFFSET( 6019, glGetHistogramParameterivEXT, _gloffset_GetHistogramParameterivEXT ), - NAME_FUNC_OFFSET( 6048, glGetMinmaxEXT, _gloffset_GetMinmaxEXT ), - NAME_FUNC_OFFSET( 6063, glGetMinmaxParameterfvEXT, _gloffset_GetMinmaxParameterfvEXT ), - NAME_FUNC_OFFSET( 6089, glGetMinmaxParameterivEXT, _gloffset_GetMinmaxParameterivEXT ), - NAME_FUNC_OFFSET( 6115, glGetConvolutionFilterEXT, _gloffset_GetConvolutionFilterEXT ), - NAME_FUNC_OFFSET( 6141, glGetConvolutionParameterfvEXT, _gloffset_GetConvolutionParameterfvEXT ), - NAME_FUNC_OFFSET( 6172, glGetConvolutionParameterivEXT, _gloffset_GetConvolutionParameterivEXT ), - NAME_FUNC_OFFSET( 6203, glGetSeparableFilterEXT, _gloffset_GetSeparableFilterEXT ), - NAME_FUNC_OFFSET( 6227, glGetColorTableSGI, _gloffset_GetColorTableSGI ), - NAME_FUNC_OFFSET( 6246, glGetColorTableParameterfvSGI, _gloffset_GetColorTableParameterfvSGI ), - NAME_FUNC_OFFSET( 6276, glGetColorTableParameterivSGI, _gloffset_GetColorTableParameterivSGI ), - NAME_FUNC_OFFSET( 6306, glPixelTexGenSGIX, _gloffset_PixelTexGenSGIX ), - NAME_FUNC_OFFSET( 6324, glPixelTexGenParameteriSGIS, _gloffset_PixelTexGenParameteriSGIS ), - NAME_FUNC_OFFSET( 6352, glPixelTexGenParameterivSGIS, _gloffset_PixelTexGenParameterivSGIS ), - NAME_FUNC_OFFSET( 6381, glPixelTexGenParameterfSGIS, _gloffset_PixelTexGenParameterfSGIS ), - NAME_FUNC_OFFSET( 6409, glPixelTexGenParameterfvSGIS, _gloffset_PixelTexGenParameterfvSGIS ), - NAME_FUNC_OFFSET( 6438, glGetPixelTexGenParameterivSGIS, _gloffset_GetPixelTexGenParameterivSGIS ), - NAME_FUNC_OFFSET( 6470, glGetPixelTexGenParameterfvSGIS, _gloffset_GetPixelTexGenParameterfvSGIS ), - NAME_FUNC_OFFSET( 6502, glTexImage4DSGIS, _gloffset_TexImage4DSGIS ), - NAME_FUNC_OFFSET( 6519, glTexSubImage4DSGIS, _gloffset_TexSubImage4DSGIS ), - NAME_FUNC_OFFSET( 6539, glAreTexturesResidentEXT, _gloffset_AreTexturesResidentEXT ), - NAME_FUNC_OFFSET( 6564, glGenTexturesEXT, _gloffset_GenTexturesEXT ), - NAME_FUNC_OFFSET( 6581, glIsTextureEXT, _gloffset_IsTextureEXT ), - NAME_FUNC_OFFSET( 6596, glDetailTexFuncSGIS, _gloffset_DetailTexFuncSGIS ), - NAME_FUNC_OFFSET( 6616, glGetDetailTexFuncSGIS, _gloffset_GetDetailTexFuncSGIS ), - NAME_FUNC_OFFSET( 6639, glSharpenTexFuncSGIS, _gloffset_SharpenTexFuncSGIS ), - NAME_FUNC_OFFSET( 6660, glGetSharpenTexFuncSGIS, _gloffset_GetSharpenTexFuncSGIS ), - NAME_FUNC_OFFSET( 6684, glSampleMaskSGIS, _gloffset_SampleMaskSGIS ), - NAME_FUNC_OFFSET( 6701, glSamplePatternSGIS, _gloffset_SamplePatternSGIS ), - NAME_FUNC_OFFSET( 6721, glColorPointerEXT, _gloffset_ColorPointerEXT ), - NAME_FUNC_OFFSET( 6739, glEdgeFlagPointerEXT, _gloffset_EdgeFlagPointerEXT ), - NAME_FUNC_OFFSET( 6760, glIndexPointerEXT, _gloffset_IndexPointerEXT ), - NAME_FUNC_OFFSET( 6778, glNormalPointerEXT, _gloffset_NormalPointerEXT ), - NAME_FUNC_OFFSET( 6797, glTexCoordPointerEXT, _gloffset_TexCoordPointerEXT ), - NAME_FUNC_OFFSET( 6818, glVertexPointerEXT, _gloffset_VertexPointerEXT ), - NAME_FUNC_OFFSET( 6837, glSpriteParameterfSGIX, _gloffset_SpriteParameterfSGIX ), - NAME_FUNC_OFFSET( 6860, glSpriteParameterfvSGIX, _gloffset_SpriteParameterfvSGIX ), - NAME_FUNC_OFFSET( 6884, glSpriteParameteriSGIX, _gloffset_SpriteParameteriSGIX ), - NAME_FUNC_OFFSET( 6907, glSpriteParameterivSGIX, _gloffset_SpriteParameterivSGIX ), - NAME_FUNC_OFFSET( 6931, glPointParameterfEXT, _gloffset_PointParameterfEXT ), - NAME_FUNC_OFFSET( 6952, glPointParameterfvEXT, _gloffset_PointParameterfvEXT ), - NAME_FUNC_OFFSET( 6974, glGetInstrumentsSGIX, _gloffset_GetInstrumentsSGIX ), - NAME_FUNC_OFFSET( 6995, glInstrumentsBufferSGIX, _gloffset_InstrumentsBufferSGIX ), - NAME_FUNC_OFFSET( 7019, glPollInstrumentsSGIX, _gloffset_PollInstrumentsSGIX ), - NAME_FUNC_OFFSET( 7041, glReadInstrumentsSGIX, _gloffset_ReadInstrumentsSGIX ), - NAME_FUNC_OFFSET( 7063, glStartInstrumentsSGIX, _gloffset_StartInstrumentsSGIX ), - NAME_FUNC_OFFSET( 7086, glStopInstrumentsSGIX, _gloffset_StopInstrumentsSGIX ), - NAME_FUNC_OFFSET( 7108, glFrameZoomSGIX, _gloffset_FrameZoomSGIX ), - NAME_FUNC_OFFSET( 7124, glTagSampleBufferSGIX, _gloffset_TagSampleBufferSGIX ), - NAME_FUNC_OFFSET( 7146, glReferencePlaneSGIX, _gloffset_ReferencePlaneSGIX ), - NAME_FUNC_OFFSET( 7167, glFlushRasterSGIX, _gloffset_FlushRasterSGIX ), - NAME_FUNC_OFFSET( 7185, glGetListParameterfvSGIX, _gloffset_GetListParameterfvSGIX ), - NAME_FUNC_OFFSET( 7210, glGetListParameterivSGIX, _gloffset_GetListParameterivSGIX ), - NAME_FUNC_OFFSET( 7235, glListParameterfSGIX, _gloffset_ListParameterfSGIX ), - NAME_FUNC_OFFSET( 7256, glListParameterfvSGIX, _gloffset_ListParameterfvSGIX ), - NAME_FUNC_OFFSET( 7278, glListParameteriSGIX, _gloffset_ListParameteriSGIX ), - NAME_FUNC_OFFSET( 7299, glListParameterivSGIX, _gloffset_ListParameterivSGIX ), - NAME_FUNC_OFFSET( 7321, glFragmentColorMaterialSGIX, _gloffset_FragmentColorMaterialSGIX ), - NAME_FUNC_OFFSET( 7349, glFragmentLightfSGIX, _gloffset_FragmentLightfSGIX ), - NAME_FUNC_OFFSET( 7370, glFragmentLightfvSGIX, _gloffset_FragmentLightfvSGIX ), - NAME_FUNC_OFFSET( 7392, glFragmentLightiSGIX, _gloffset_FragmentLightiSGIX ), - NAME_FUNC_OFFSET( 7413, glFragmentLightivSGIX, _gloffset_FragmentLightivSGIX ), - NAME_FUNC_OFFSET( 7435, glFragmentLightModelfSGIX, _gloffset_FragmentLightModelfSGIX ), - NAME_FUNC_OFFSET( 7461, glFragmentLightModelfvSGIX, _gloffset_FragmentLightModelfvSGIX ), - NAME_FUNC_OFFSET( 7488, glFragmentLightModeliSGIX, _gloffset_FragmentLightModeliSGIX ), - NAME_FUNC_OFFSET( 7514, glFragmentLightModelivSGIX, _gloffset_FragmentLightModelivSGIX ), - NAME_FUNC_OFFSET( 7541, glFragmentMaterialfSGIX, _gloffset_FragmentMaterialfSGIX ), - NAME_FUNC_OFFSET( 7565, glFragmentMaterialfvSGIX, _gloffset_FragmentMaterialfvSGIX ), - NAME_FUNC_OFFSET( 7590, glFragmentMaterialiSGIX, _gloffset_FragmentMaterialiSGIX ), - NAME_FUNC_OFFSET( 7614, glFragmentMaterialivSGIX, _gloffset_FragmentMaterialivSGIX ), - NAME_FUNC_OFFSET( 7639, glGetFragmentLightfvSGIX, _gloffset_GetFragmentLightfvSGIX ), - NAME_FUNC_OFFSET( 7664, glGetFragmentLightivSGIX, _gloffset_GetFragmentLightivSGIX ), - NAME_FUNC_OFFSET( 7689, glGetFragmentMaterialfvSGIX, _gloffset_GetFragmentMaterialfvSGIX ), - NAME_FUNC_OFFSET( 7717, glGetFragmentMaterialivSGIX, _gloffset_GetFragmentMaterialivSGIX ), - NAME_FUNC_OFFSET( 7745, glLightEnviSGIX, _gloffset_LightEnviSGIX ), - NAME_FUNC_OFFSET( 7761, glVertexWeightfEXT, _gloffset_VertexWeightfEXT ), - NAME_FUNC_OFFSET( 7780, glVertexWeightfvEXT, _gloffset_VertexWeightfvEXT ), - NAME_FUNC_OFFSET( 7800, glVertexWeightPointerEXT, _gloffset_VertexWeightPointerEXT ), - NAME_FUNC_OFFSET( 7825, glFlushVertexArrayRangeNV, _gloffset_FlushVertexArrayRangeNV ), - NAME_FUNC_OFFSET( 7851, glVertexArrayRangeNV, _gloffset_VertexArrayRangeNV ), - NAME_FUNC_OFFSET( 7872, glCombinerParameterfvNV, _gloffset_CombinerParameterfvNV ), - NAME_FUNC_OFFSET( 7896, glCombinerParameterfNV, _gloffset_CombinerParameterfNV ), - NAME_FUNC_OFFSET( 7919, glCombinerParameterivNV, _gloffset_CombinerParameterivNV ), - NAME_FUNC_OFFSET( 7943, glCombinerParameteriNV, _gloffset_CombinerParameteriNV ), - NAME_FUNC_OFFSET( 7966, glCombinerInputNV, _gloffset_CombinerInputNV ), - NAME_FUNC_OFFSET( 7984, glCombinerOutputNV, _gloffset_CombinerOutputNV ), - NAME_FUNC_OFFSET( 8003, glFinalCombinerInputNV, _gloffset_FinalCombinerInputNV ), - NAME_FUNC_OFFSET( 8026, glGetCombinerInputParameterfvNV, _gloffset_GetCombinerInputParameterfvNV ), - NAME_FUNC_OFFSET( 8058, glGetCombinerInputParameterivNV, _gloffset_GetCombinerInputParameterivNV ), - NAME_FUNC_OFFSET( 8090, glGetCombinerOutputParameterfvNV, _gloffset_GetCombinerOutputParameterfvNV ), - NAME_FUNC_OFFSET( 8123, glGetCombinerOutputParameterivNV, _gloffset_GetCombinerOutputParameterivNV ), - NAME_FUNC_OFFSET( 8156, glGetFinalCombinerInputParameterfvNV, _gloffset_GetFinalCombinerInputParameterfvNV ), - NAME_FUNC_OFFSET( 8193, glGetFinalCombinerInputParameterivNV, _gloffset_GetFinalCombinerInputParameterivNV ), - NAME_FUNC_OFFSET( 8230, glResizeBuffersMESA, _gloffset_ResizeBuffersMESA ), - NAME_FUNC_OFFSET( 8250, glWindowPos2dMESA, _gloffset_WindowPos2dMESA ), - NAME_FUNC_OFFSET( 8268, glWindowPos2dvMESA, _gloffset_WindowPos2dvMESA ), - NAME_FUNC_OFFSET( 8287, glWindowPos2fMESA, _gloffset_WindowPos2fMESA ), - NAME_FUNC_OFFSET( 8305, glWindowPos2fvMESA, _gloffset_WindowPos2fvMESA ), - NAME_FUNC_OFFSET( 8324, glWindowPos2iMESA, _gloffset_WindowPos2iMESA ), - NAME_FUNC_OFFSET( 8342, glWindowPos2ivMESA, _gloffset_WindowPos2ivMESA ), - NAME_FUNC_OFFSET( 8361, glWindowPos2sMESA, _gloffset_WindowPos2sMESA ), - NAME_FUNC_OFFSET( 8379, glWindowPos2svMESA, _gloffset_WindowPos2svMESA ), - NAME_FUNC_OFFSET( 8398, glWindowPos3dMESA, _gloffset_WindowPos3dMESA ), - NAME_FUNC_OFFSET( 8416, glWindowPos3dvMESA, _gloffset_WindowPos3dvMESA ), - NAME_FUNC_OFFSET( 8435, glWindowPos3fMESA, _gloffset_WindowPos3fMESA ), - NAME_FUNC_OFFSET( 8453, glWindowPos3fvMESA, _gloffset_WindowPos3fvMESA ), - NAME_FUNC_OFFSET( 8472, glWindowPos3iMESA, _gloffset_WindowPos3iMESA ), - NAME_FUNC_OFFSET( 8490, glWindowPos3ivMESA, _gloffset_WindowPos3ivMESA ), - NAME_FUNC_OFFSET( 8509, glWindowPos3sMESA, _gloffset_WindowPos3sMESA ), - NAME_FUNC_OFFSET( 8527, glWindowPos3svMESA, _gloffset_WindowPos3svMESA ), - NAME_FUNC_OFFSET( 8546, glWindowPos4dMESA, _gloffset_WindowPos4dMESA ), - NAME_FUNC_OFFSET( 8564, glWindowPos4dvMESA, _gloffset_WindowPos4dvMESA ), - NAME_FUNC_OFFSET( 8583, glWindowPos4fMESA, _gloffset_WindowPos4fMESA ), - NAME_FUNC_OFFSET( 8601, glWindowPos4fvMESA, _gloffset_WindowPos4fvMESA ), - NAME_FUNC_OFFSET( 8620, glWindowPos4iMESA, _gloffset_WindowPos4iMESA ), - NAME_FUNC_OFFSET( 8638, glWindowPos4ivMESA, _gloffset_WindowPos4ivMESA ), - NAME_FUNC_OFFSET( 8657, glWindowPos4sMESA, _gloffset_WindowPos4sMESA ), - NAME_FUNC_OFFSET( 8675, glWindowPos4svMESA, _gloffset_WindowPos4svMESA ), - NAME_FUNC_OFFSET( 8694, glBlendFuncSeparateEXT, _gloffset_BlendFuncSeparateEXT ), - NAME_FUNC_OFFSET( 8717, glIndexMaterialEXT, _gloffset_IndexMaterialEXT ), - NAME_FUNC_OFFSET( 8736, glIndexFuncEXT, _gloffset_IndexFuncEXT ), - NAME_FUNC_OFFSET( 8751, glLockArraysEXT, _gloffset_LockArraysEXT ), - NAME_FUNC_OFFSET( 8767, glUnlockArraysEXT, _gloffset_UnlockArraysEXT ), - NAME_FUNC_OFFSET( 8785, glCullParameterdvEXT, _gloffset_CullParameterdvEXT ), - NAME_FUNC_OFFSET( 8806, glCullParameterfvEXT, _gloffset_CullParameterfvEXT ), - NAME_FUNC_OFFSET( 8827, glHintPGI, _gloffset_HintPGI ), - NAME_FUNC_OFFSET( 8837, glFogCoordfEXT, _gloffset_FogCoordfEXT ), - NAME_FUNC_OFFSET( 8852, glFogCoordfvEXT, _gloffset_FogCoordfvEXT ), - NAME_FUNC_OFFSET( 8868, glFogCoorddEXT, _gloffset_FogCoorddEXT ), - NAME_FUNC_OFFSET( 8883, glFogCoorddvEXT, _gloffset_FogCoorddvEXT ), - NAME_FUNC_OFFSET( 8899, glFogCoordPointerEXT, _gloffset_FogCoordPointerEXT ), - NAME_FUNC_OFFSET( 8920, glGetColorTableEXT, _gloffset_GetColorTableEXT ), - NAME_FUNC_OFFSET( 8939, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameterivEXT ), - NAME_FUNC_OFFSET( 8969, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfvEXT ), - NAME_FUNC_OFFSET( 8999, glTbufferMask3DFX, _gloffset_TbufferMask3DFX ), - NAME_FUNC_OFFSET( 9017, glCompressedTexImage3DARB, _gloffset_CompressedTexImage3DARB ), - NAME_FUNC_OFFSET( 9043, glCompressedTexImage2DARB, _gloffset_CompressedTexImage2DARB ), - NAME_FUNC_OFFSET( 9069, glCompressedTexImage1DARB, _gloffset_CompressedTexImage1DARB ), - NAME_FUNC_OFFSET( 9095, glCompressedTexSubImage3DARB, _gloffset_CompressedTexSubImage3DARB ), - NAME_FUNC_OFFSET( 9124, glCompressedTexSubImage2DARB, _gloffset_CompressedTexSubImage2DARB ), - NAME_FUNC_OFFSET( 9153, glCompressedTexSubImage1DARB, _gloffset_CompressedTexSubImage1DARB ), - NAME_FUNC_OFFSET( 9182, glGetCompressedTexImageARB, _gloffset_GetCompressedTexImageARB ), - NAME_FUNC_OFFSET( 9209, glSecondaryColor3bEXT, _gloffset_SecondaryColor3bEXT ), - NAME_FUNC_OFFSET( 9231, glSecondaryColor3bvEXT, _gloffset_SecondaryColor3bvEXT ), - NAME_FUNC_OFFSET( 9254, glSecondaryColor3dEXT, _gloffset_SecondaryColor3dEXT ), - NAME_FUNC_OFFSET( 9276, glSecondaryColor3dvEXT, _gloffset_SecondaryColor3dvEXT ), - NAME_FUNC_OFFSET( 9299, glSecondaryColor3fEXT, _gloffset_SecondaryColor3fEXT ), - NAME_FUNC_OFFSET( 9321, glSecondaryColor3fvEXT, _gloffset_SecondaryColor3fvEXT ), - NAME_FUNC_OFFSET( 9344, glSecondaryColor3iEXT, _gloffset_SecondaryColor3iEXT ), - NAME_FUNC_OFFSET( 9366, glSecondaryColor3ivEXT, _gloffset_SecondaryColor3ivEXT ), - NAME_FUNC_OFFSET( 9389, glSecondaryColor3sEXT, _gloffset_SecondaryColor3sEXT ), - NAME_FUNC_OFFSET( 9411, glSecondaryColor3svEXT, _gloffset_SecondaryColor3svEXT ), - NAME_FUNC_OFFSET( 9434, glSecondaryColor3ubEXT, _gloffset_SecondaryColor3ubEXT ), - NAME_FUNC_OFFSET( 9457, glSecondaryColor3ubvEXT, _gloffset_SecondaryColor3ubvEXT ), - NAME_FUNC_OFFSET( 9481, glSecondaryColor3uiEXT, _gloffset_SecondaryColor3uiEXT ), - NAME_FUNC_OFFSET( 9504, glSecondaryColor3uivEXT, _gloffset_SecondaryColor3uivEXT ), - NAME_FUNC_OFFSET( 9528, glSecondaryColor3usEXT, _gloffset_SecondaryColor3usEXT ), - NAME_FUNC_OFFSET( 9551, glSecondaryColor3usvEXT, _gloffset_SecondaryColor3usvEXT ), - NAME_FUNC_OFFSET( 9575, glSecondaryColorPointerEXT, _gloffset_SecondaryColorPointerEXT ), - NAME_FUNC_OFFSET( 9602, glAreProgramsResidentNV, _gloffset_AreProgramsResidentNV ), - NAME_FUNC_OFFSET( 9626, glBindProgramNV, _gloffset_BindProgramNV ), - NAME_FUNC_OFFSET( 9642, glDeleteProgramsNV, _gloffset_DeleteProgramsNV ), - NAME_FUNC_OFFSET( 9661, glExecuteProgramNV, _gloffset_ExecuteProgramNV ), - NAME_FUNC_OFFSET( 9680, glGenProgramsNV, _gloffset_GenProgramsNV ), - NAME_FUNC_OFFSET( 9696, glGetProgramParameterdvNV, _gloffset_GetProgramParameterdvNV ), - NAME_FUNC_OFFSET( 9722, glGetProgramParameterfvNV, _gloffset_GetProgramParameterfvNV ), - NAME_FUNC_OFFSET( 9748, glGetProgramivNV, _gloffset_GetProgramivNV ), - NAME_FUNC_OFFSET( 9765, glGetProgramStringNV, _gloffset_GetProgramStringNV ), - NAME_FUNC_OFFSET( 9786, glGetTrackMatrixivNV, _gloffset_GetTrackMatrixivNV ), - NAME_FUNC_OFFSET( 9807, glGetVertexAttribdvARB, _gloffset_GetVertexAttribdvARB ), - NAME_FUNC_OFFSET( 9830, glGetVertexAttribfvARB, _gloffset_GetVertexAttribfvARB ), - NAME_FUNC_OFFSET( 9853, glGetVertexAttribivARB, _gloffset_GetVertexAttribivARB ), - NAME_FUNC_OFFSET( 9876, glGetVertexAttribPointervNV, _gloffset_GetVertexAttribPointervNV ), - NAME_FUNC_OFFSET( 9904, glIsProgramNV, _gloffset_IsProgramNV ), - NAME_FUNC_OFFSET( 9918, glLoadProgramNV, _gloffset_LoadProgramNV ), - NAME_FUNC_OFFSET( 9934, glProgramParameter4dNV, _gloffset_ProgramParameter4dNV ), - NAME_FUNC_OFFSET( 9957, glProgramParameter4dvNV, _gloffset_ProgramParameter4dvNV ), - NAME_FUNC_OFFSET( 9981, glProgramParameter4fNV, _gloffset_ProgramParameter4fNV ), - NAME_FUNC_OFFSET( 10004, glProgramParameter4fvNV, _gloffset_ProgramParameter4fvNV ), - NAME_FUNC_OFFSET( 10028, glProgramParameters4dvNV, _gloffset_ProgramParameters4dvNV ), - NAME_FUNC_OFFSET( 10053, glProgramParameters4fvNV, _gloffset_ProgramParameters4fvNV ), - NAME_FUNC_OFFSET( 10078, glRequestResidentProgramsNV, _gloffset_RequestResidentProgramsNV ), - NAME_FUNC_OFFSET( 10106, glTrackMatrixNV, _gloffset_TrackMatrixNV ), - NAME_FUNC_OFFSET( 10122, glVertexAttribPointerNV, _gloffset_VertexAttribPointerNV ), - NAME_FUNC_OFFSET( 10146, glVertexAttrib1dARB, _gloffset_VertexAttrib1dARB ), - NAME_FUNC_OFFSET( 10166, glVertexAttrib1dvARB, _gloffset_VertexAttrib1dvARB ), - NAME_FUNC_OFFSET( 10187, glVertexAttrib1fARB, _gloffset_VertexAttrib1fARB ), - NAME_FUNC_OFFSET( 10207, glVertexAttrib1fvARB, _gloffset_VertexAttrib1fvARB ), - NAME_FUNC_OFFSET( 10228, glVertexAttrib1sARB, _gloffset_VertexAttrib1sARB ), - NAME_FUNC_OFFSET( 10248, glVertexAttrib1svARB, _gloffset_VertexAttrib1svARB ), - NAME_FUNC_OFFSET( 10269, glVertexAttrib2dARB, _gloffset_VertexAttrib2dARB ), - NAME_FUNC_OFFSET( 10289, glVertexAttrib2dvARB, _gloffset_VertexAttrib2dvARB ), - NAME_FUNC_OFFSET( 10310, glVertexAttrib2fARB, _gloffset_VertexAttrib2fARB ), - NAME_FUNC_OFFSET( 10330, glVertexAttrib2fvARB, _gloffset_VertexAttrib2fvARB ), - NAME_FUNC_OFFSET( 10351, glVertexAttrib2sARB, _gloffset_VertexAttrib2sARB ), - NAME_FUNC_OFFSET( 10371, glVertexAttrib2svARB, _gloffset_VertexAttrib2svARB ), - NAME_FUNC_OFFSET( 10392, glVertexAttrib3dARB, _gloffset_VertexAttrib3dARB ), - NAME_FUNC_OFFSET( 10412, glVertexAttrib3dvARB, _gloffset_VertexAttrib3dvARB ), - NAME_FUNC_OFFSET( 10433, glVertexAttrib3fARB, _gloffset_VertexAttrib3fARB ), - NAME_FUNC_OFFSET( 10453, glVertexAttrib3fvARB, _gloffset_VertexAttrib3fvARB ), - NAME_FUNC_OFFSET( 10474, glVertexAttrib3sARB, _gloffset_VertexAttrib3sARB ), - NAME_FUNC_OFFSET( 10494, glVertexAttrib3svARB, _gloffset_VertexAttrib3svARB ), - NAME_FUNC_OFFSET( 10515, glVertexAttrib4dARB, _gloffset_VertexAttrib4dARB ), - NAME_FUNC_OFFSET( 10535, glVertexAttrib4dvARB, _gloffset_VertexAttrib4dvARB ), - NAME_FUNC_OFFSET( 10556, glVertexAttrib4fARB, _gloffset_VertexAttrib4fARB ), - NAME_FUNC_OFFSET( 10576, glVertexAttrib4fvARB, _gloffset_VertexAttrib4fvARB ), - NAME_FUNC_OFFSET( 10597, glVertexAttrib4sARB, _gloffset_VertexAttrib4sARB ), - NAME_FUNC_OFFSET( 10617, glVertexAttrib4svARB, _gloffset_VertexAttrib4svARB ), - NAME_FUNC_OFFSET( 10638, glVertexAttrib4NubARB, _gloffset_VertexAttrib4NubARB ), - NAME_FUNC_OFFSET( 10660, glVertexAttrib4NubvARB, _gloffset_VertexAttrib4NubvARB ), - NAME_FUNC_OFFSET( 10683, glVertexAttribs1dvNV, _gloffset_VertexAttribs1dvNV ), - NAME_FUNC_OFFSET( 10704, glVertexAttribs1fvNV, _gloffset_VertexAttribs1fvNV ), - NAME_FUNC_OFFSET( 10725, glVertexAttribs1svNV, _gloffset_VertexAttribs1svNV ), - NAME_FUNC_OFFSET( 10746, glVertexAttribs2dvNV, _gloffset_VertexAttribs2dvNV ), - NAME_FUNC_OFFSET( 10767, glVertexAttribs2fvNV, _gloffset_VertexAttribs2fvNV ), - NAME_FUNC_OFFSET( 10788, glVertexAttribs2svNV, _gloffset_VertexAttribs2svNV ), - NAME_FUNC_OFFSET( 10809, glVertexAttribs3dvNV, _gloffset_VertexAttribs3dvNV ), - NAME_FUNC_OFFSET( 10830, glVertexAttribs3fvNV, _gloffset_VertexAttribs3fvNV ), - NAME_FUNC_OFFSET( 10851, glVertexAttribs3svNV, _gloffset_VertexAttribs3svNV ), - NAME_FUNC_OFFSET( 10872, glVertexAttribs4dvNV, _gloffset_VertexAttribs4dvNV ), - NAME_FUNC_OFFSET( 10893, glVertexAttribs4fvNV, _gloffset_VertexAttribs4fvNV ), - NAME_FUNC_OFFSET( 10914, glVertexAttribs4svNV, _gloffset_VertexAttribs4svNV ), - NAME_FUNC_OFFSET( 10935, glVertexAttribs4ubvNV, _gloffset_VertexAttribs4ubvNV ), - NAME_FUNC_OFFSET( 10957, glPointParameteriNV, _gloffset_PointParameteriNV ), - NAME_FUNC_OFFSET( 10977, glPointParameterivNV, _gloffset_PointParameterivNV ), - NAME_FUNC_OFFSET( 10998, glMultiDrawArraysEXT, _gloffset_MultiDrawArraysEXT ), - NAME_FUNC_OFFSET( 11019, glMultiDrawElementsEXT, _gloffset_MultiDrawElementsEXT ), - NAME_FUNC_OFFSET( 11042, glActiveStencilFaceEXT, _gloffset_ActiveStencilFaceEXT ), - NAME_FUNC_OFFSET( 11065, glDeleteFencesNV, _gloffset_DeleteFencesNV ), - NAME_FUNC_OFFSET( 11082, glGenFencesNV, _gloffset_GenFencesNV ), - NAME_FUNC_OFFSET( 11096, glIsFenceNV, _gloffset_IsFenceNV ), - NAME_FUNC_OFFSET( 11108, glTestFenceNV, _gloffset_TestFenceNV ), - NAME_FUNC_OFFSET( 11122, glGetFenceivNV, _gloffset_GetFenceivNV ), - NAME_FUNC_OFFSET( 11137, glFinishFenceNV, _gloffset_FinishFenceNV ), - NAME_FUNC_OFFSET( 11153, glSetFenceNV, _gloffset_SetFenceNV ), - NAME_FUNC_OFFSET( 11166, glVertexAttrib4bvARB, _gloffset_VertexAttrib4bvARB ), - NAME_FUNC_OFFSET( 11187, glVertexAttrib4ivARB, _gloffset_VertexAttrib4ivARB ), - NAME_FUNC_OFFSET( 11208, glVertexAttrib4ubvARB, _gloffset_VertexAttrib4ubvARB ), - NAME_FUNC_OFFSET( 11230, glVertexAttrib4usvARB, _gloffset_VertexAttrib4usvARB ), - NAME_FUNC_OFFSET( 11252, glVertexAttrib4uivARB, _gloffset_VertexAttrib4uivARB ), - NAME_FUNC_OFFSET( 11274, glVertexAttrib4NbvARB, _gloffset_VertexAttrib4NbvARB ), - NAME_FUNC_OFFSET( 11296, glVertexAttrib4NsvARB, _gloffset_VertexAttrib4NsvARB ), - NAME_FUNC_OFFSET( 11318, glVertexAttrib4NivARB, _gloffset_VertexAttrib4NivARB ), - NAME_FUNC_OFFSET( 11340, glVertexAttrib4NusvARB, _gloffset_VertexAttrib4NusvARB ), - NAME_FUNC_OFFSET( 11363, glVertexAttrib4NuivARB, _gloffset_VertexAttrib4NuivARB ), - NAME_FUNC_OFFSET( 11386, glVertexAttribPointerARB, _gloffset_VertexAttribPointerARB ), - NAME_FUNC_OFFSET( 11411, glEnableVertexAttribArrayARB, _gloffset_EnableVertexAttribArrayARB ), - NAME_FUNC_OFFSET( 11440, glDisableVertexAttribArrayARB, _gloffset_DisableVertexAttribArrayARB ), - NAME_FUNC_OFFSET( 11470, glProgramStringARB, _gloffset_ProgramStringARB ), - NAME_FUNC_OFFSET( 11489, glProgramEnvParameter4dARB, _gloffset_ProgramEnvParameter4dARB ), - NAME_FUNC_OFFSET( 11516, glProgramEnvParameter4dvARB, _gloffset_ProgramEnvParameter4dvARB ), - NAME_FUNC_OFFSET( 11544, glProgramEnvParameter4fARB, _gloffset_ProgramEnvParameter4fARB ), - NAME_FUNC_OFFSET( 11571, glProgramEnvParameter4fvARB, _gloffset_ProgramEnvParameter4fvARB ), - NAME_FUNC_OFFSET( 11599, glProgramLocalParameter4dARB, _gloffset_ProgramLocalParameter4dARB ), - NAME_FUNC_OFFSET( 11628, glProgramLocalParameter4dvARB, _gloffset_ProgramLocalParameter4dvARB ), - NAME_FUNC_OFFSET( 11658, glProgramLocalParameter4fARB, _gloffset_ProgramLocalParameter4fARB ), - NAME_FUNC_OFFSET( 11687, glProgramLocalParameter4fvARB, _gloffset_ProgramLocalParameter4fvARB ), - NAME_FUNC_OFFSET( 11717, glGetProgramEnvParameterdvARB, _gloffset_GetProgramEnvParameterdvARB ), - NAME_FUNC_OFFSET( 11747, glGetProgramEnvParameterfvARB, _gloffset_GetProgramEnvParameterfvARB ), - NAME_FUNC_OFFSET( 11777, glGetProgramLocalParameterdvARB, _gloffset_GetProgramLocalParameterdvARB ), - NAME_FUNC_OFFSET( 11809, glGetProgramLocalParameterfvARB, _gloffset_GetProgramLocalParameterfvARB ), - NAME_FUNC_OFFSET( 11841, glGetProgramivARB, _gloffset_GetProgramivARB ), - NAME_FUNC_OFFSET( 11859, glGetProgramStringARB, _gloffset_GetProgramStringARB ), - NAME_FUNC_OFFSET( 11881, glProgramNamedParameter4fNV, _gloffset_ProgramNamedParameter4fNV ), - NAME_FUNC_OFFSET( 11909, glProgramNamedParameter4dNV, _gloffset_ProgramNamedParameter4dNV ), - NAME_FUNC_OFFSET( 11937, glProgramNamedParameter4fvNV, _gloffset_ProgramNamedParameter4fvNV ), - NAME_FUNC_OFFSET( 11966, glProgramNamedParameter4dvNV, _gloffset_ProgramNamedParameter4dvNV ), - NAME_FUNC_OFFSET( 11995, glGetProgramNamedParameterfvNV, _gloffset_GetProgramNamedParameterfvNV ), - NAME_FUNC_OFFSET( 12026, glGetProgramNamedParameterdvNV, _gloffset_GetProgramNamedParameterdvNV ), - NAME_FUNC_OFFSET( 12057, glBindBufferARB, _gloffset_BindBufferARB ), - NAME_FUNC_OFFSET( 12073, glBufferDataARB, _gloffset_BufferDataARB ), - NAME_FUNC_OFFSET( 12089, glBufferSubDataARB, _gloffset_BufferSubDataARB ), - NAME_FUNC_OFFSET( 12108, glDeleteBuffersARB, _gloffset_DeleteBuffersARB ), - NAME_FUNC_OFFSET( 12127, glGenBuffersARB, _gloffset_GenBuffersARB ), - NAME_FUNC_OFFSET( 12143, glGetBufferParameterivARB, _gloffset_GetBufferParameterivARB ), - NAME_FUNC_OFFSET( 12169, glGetBufferPointervARB, _gloffset_GetBufferPointervARB ), - NAME_FUNC_OFFSET( 12192, glGetBufferSubDataARB, _gloffset_GetBufferSubDataARB ), - NAME_FUNC_OFFSET( 12214, glIsBufferARB, _gloffset_IsBufferARB ), - NAME_FUNC_OFFSET( 12228, glMapBufferARB, _gloffset_MapBufferARB ), - NAME_FUNC_OFFSET( 12243, glUnmapBufferARB, _gloffset_UnmapBufferARB ), - NAME_FUNC_OFFSET( 12260, glDepthBoundsEXT, _gloffset_DepthBoundsEXT ), - NAME_FUNC_OFFSET( 12277, glGenQueriesARB, _gloffset_GenQueriesARB ), - NAME_FUNC_OFFSET( 12293, glDeleteQueriesARB, _gloffset_DeleteQueriesARB ), - NAME_FUNC_OFFSET( 12312, glIsQueryARB, _gloffset_IsQueryARB ), - NAME_FUNC_OFFSET( 12325, glBeginQueryARB, _gloffset_BeginQueryARB ), - NAME_FUNC_OFFSET( 12341, glEndQueryARB, _gloffset_EndQueryARB ), - NAME_FUNC_OFFSET( 12355, glGetQueryivARB, _gloffset_GetQueryivARB ), - NAME_FUNC_OFFSET( 12371, glGetQueryObjectivARB, _gloffset_GetQueryObjectivARB ), - NAME_FUNC_OFFSET( 12393, glGetQueryObjectuivARB, _gloffset_GetQueryObjectuivARB ), - NAME_FUNC_OFFSET( 12416, glMultiModeDrawArraysIBM, _gloffset_MultiModeDrawArraysIBM ), - NAME_FUNC_OFFSET( 12441, glMultiModeDrawElementsIBM, _gloffset_MultiModeDrawElementsIBM ), - NAME_FUNC_OFFSET( 12468, glBlendEquationSeparateEXT, _gloffset_BlendEquationSeparateEXT ), - NAME_FUNC_OFFSET( 12495, glDeleteObjectARB, _gloffset_DeleteObjectARB ), - NAME_FUNC_OFFSET( 12513, glGetHandleARB, _gloffset_GetHandleARB ), - NAME_FUNC_OFFSET( 12528, glDetachObjectARB, _gloffset_DetachObjectARB ), - NAME_FUNC_OFFSET( 12546, glCreateShaderObjectARB, _gloffset_CreateShaderObjectARB ), - NAME_FUNC_OFFSET( 12570, glShaderSourceARB, _gloffset_ShaderSourceARB ), - NAME_FUNC_OFFSET( 12588, glCompileShaderARB, _gloffset_CompileShaderARB ), - NAME_FUNC_OFFSET( 12607, glCreateProgramObjectARB, _gloffset_CreateProgramObjectARB ), - NAME_FUNC_OFFSET( 12632, glAttachObjectARB, _gloffset_AttachObjectARB ), - NAME_FUNC_OFFSET( 12650, glLinkProgramARB, _gloffset_LinkProgramARB ), - NAME_FUNC_OFFSET( 12667, glUseProgramObjectARB, _gloffset_UseProgramObjectARB ), - NAME_FUNC_OFFSET( 12689, glValidateProgramARB, _gloffset_ValidateProgramARB ), - NAME_FUNC_OFFSET( 12710, glUniform1fARB, _gloffset_Uniform1fARB ), - NAME_FUNC_OFFSET( 12725, glUniform2fARB, _gloffset_Uniform2fARB ), - NAME_FUNC_OFFSET( 12740, glUniform3fARB, _gloffset_Uniform3fARB ), - NAME_FUNC_OFFSET( 12755, glUniform4fARB, _gloffset_Uniform4fARB ), - NAME_FUNC_OFFSET( 12770, glUniform1iARB, _gloffset_Uniform1iARB ), - NAME_FUNC_OFFSET( 12785, glUniform2iARB, _gloffset_Uniform2iARB ), - NAME_FUNC_OFFSET( 12800, glUniform3iARB, _gloffset_Uniform3iARB ), - NAME_FUNC_OFFSET( 12815, glUniform4iARB, _gloffset_Uniform4iARB ), - NAME_FUNC_OFFSET( 12830, glUniform1fvARB, _gloffset_Uniform1fvARB ), - NAME_FUNC_OFFSET( 12846, glUniform2fvARB, _gloffset_Uniform2fvARB ), - NAME_FUNC_OFFSET( 12862, glUniform3fvARB, _gloffset_Uniform3fvARB ), - NAME_FUNC_OFFSET( 12878, glUniform4fvARB, _gloffset_Uniform4fvARB ), - NAME_FUNC_OFFSET( 12894, glUniform1ivARB, _gloffset_Uniform1ivARB ), - NAME_FUNC_OFFSET( 12910, glUniform2ivARB, _gloffset_Uniform2ivARB ), - NAME_FUNC_OFFSET( 12926, glUniform3ivARB, _gloffset_Uniform3ivARB ), - NAME_FUNC_OFFSET( 12942, glUniform4ivARB, _gloffset_Uniform4ivARB ), - NAME_FUNC_OFFSET( 12958, glUniformMatrix2fvARB, _gloffset_UniformMatrix2fvARB ), - NAME_FUNC_OFFSET( 12980, glUniformMatrix3fvARB, _gloffset_UniformMatrix3fvARB ), - NAME_FUNC_OFFSET( 13002, glUniformMatrix4fvARB, _gloffset_UniformMatrix4fvARB ), - NAME_FUNC_OFFSET( 13024, glGetObjectParameterfvARB, _gloffset_GetObjectParameterfvARB ), - NAME_FUNC_OFFSET( 13050, glGetObjectParameterivARB, _gloffset_GetObjectParameterivARB ), - NAME_FUNC_OFFSET( 13076, glGetInfoLogARB, _gloffset_GetInfoLogARB ), - NAME_FUNC_OFFSET( 13092, glGetAttachedObjectsARB, _gloffset_GetAttachedObjectsARB ), - NAME_FUNC_OFFSET( 13116, glGetUniformLocationARB, _gloffset_GetUniformLocationARB ), - NAME_FUNC_OFFSET( 13140, glGetActiveUniformARB, _gloffset_GetActiveUniformARB ), - NAME_FUNC_OFFSET( 13162, glGetUniformfvARB, _gloffset_GetUniformfvARB ), - NAME_FUNC_OFFSET( 13180, glGetUniformivARB, _gloffset_GetUniformivARB ), - NAME_FUNC_OFFSET( 13198, glGetShaderSourceARB, _gloffset_GetShaderSourceARB ), - NAME_FUNC_OFFSET( 13219, glBindAttribLocationARB, _gloffset_BindAttribLocationARB ), - NAME_FUNC_OFFSET( 13243, glGetActiveAttribARB, _gloffset_GetActiveAttribARB ), - NAME_FUNC_OFFSET( 13264, glGetAttribLocationARB, _gloffset_GetAttribLocationARB ), - NAME_FUNC_OFFSET( 13287, glGetVertexAttribdvNV, _gloffset_GetVertexAttribdvNV ), - NAME_FUNC_OFFSET( 13309, glGetVertexAttribfvNV, _gloffset_GetVertexAttribfvNV ), - NAME_FUNC_OFFSET( 13331, glGetVertexAttribivNV, _gloffset_GetVertexAttribivNV ), - NAME_FUNC_OFFSET( 13353, glVertexAttrib1dNV, _gloffset_VertexAttrib1dNV ), - NAME_FUNC_OFFSET( 13372, glVertexAttrib1dvNV, _gloffset_VertexAttrib1dvNV ), - NAME_FUNC_OFFSET( 13392, glVertexAttrib1fNV, _gloffset_VertexAttrib1fNV ), - NAME_FUNC_OFFSET( 13411, glVertexAttrib1fvNV, _gloffset_VertexAttrib1fvNV ), - NAME_FUNC_OFFSET( 13431, glVertexAttrib1sNV, _gloffset_VertexAttrib1sNV ), - NAME_FUNC_OFFSET( 13450, glVertexAttrib1svNV, _gloffset_VertexAttrib1svNV ), - NAME_FUNC_OFFSET( 13470, glVertexAttrib2dNV, _gloffset_VertexAttrib2dNV ), - NAME_FUNC_OFFSET( 13489, glVertexAttrib2dvNV, _gloffset_VertexAttrib2dvNV ), - NAME_FUNC_OFFSET( 13509, glVertexAttrib2fNV, _gloffset_VertexAttrib2fNV ), - NAME_FUNC_OFFSET( 13528, glVertexAttrib2fvNV, _gloffset_VertexAttrib2fvNV ), - NAME_FUNC_OFFSET( 13548, glVertexAttrib2sNV, _gloffset_VertexAttrib2sNV ), - NAME_FUNC_OFFSET( 13567, glVertexAttrib2svNV, _gloffset_VertexAttrib2svNV ), - NAME_FUNC_OFFSET( 13587, glVertexAttrib3dNV, _gloffset_VertexAttrib3dNV ), - NAME_FUNC_OFFSET( 13606, glVertexAttrib3dvNV, _gloffset_VertexAttrib3dvNV ), - NAME_FUNC_OFFSET( 13626, glVertexAttrib3fNV, _gloffset_VertexAttrib3fNV ), - NAME_FUNC_OFFSET( 13645, glVertexAttrib3fvNV, _gloffset_VertexAttrib3fvNV ), - NAME_FUNC_OFFSET( 13665, glVertexAttrib3sNV, _gloffset_VertexAttrib3sNV ), - NAME_FUNC_OFFSET( 13684, glVertexAttrib3svNV, _gloffset_VertexAttrib3svNV ), - NAME_FUNC_OFFSET( 13704, glVertexAttrib4dNV, _gloffset_VertexAttrib4dNV ), - NAME_FUNC_OFFSET( 13723, glVertexAttrib4dvNV, _gloffset_VertexAttrib4dvNV ), - NAME_FUNC_OFFSET( 13743, glVertexAttrib4fNV, _gloffset_VertexAttrib4fNV ), - NAME_FUNC_OFFSET( 13762, glVertexAttrib4fvNV, _gloffset_VertexAttrib4fvNV ), - NAME_FUNC_OFFSET( 13782, glVertexAttrib4sNV, _gloffset_VertexAttrib4sNV ), - NAME_FUNC_OFFSET( 13801, glVertexAttrib4svNV, _gloffset_VertexAttrib4svNV ), - NAME_FUNC_OFFSET( 13821, glVertexAttrib4ubNV, _gloffset_VertexAttrib4ubNV ), - NAME_FUNC_OFFSET( 13841, glVertexAttrib4ubvNV, _gloffset_VertexAttrib4ubvNV ), - NAME_FUNC_OFFSET( 13862, glGenFragmentShadersATI, _gloffset_GenFragmentShadersATI ), - NAME_FUNC_OFFSET( 13886, glBindFragmentShaderATI, _gloffset_BindFragmentShaderATI ), - NAME_FUNC_OFFSET( 13910, glDeleteFragmentShaderATI, _gloffset_DeleteFragmentShaderATI ), - NAME_FUNC_OFFSET( 13936, glBeginFragmentShaderATI, _gloffset_BeginFragmentShaderATI ), - NAME_FUNC_OFFSET( 13961, glEndFragmentShaderATI, _gloffset_EndFragmentShaderATI ), - NAME_FUNC_OFFSET( 13984, glPassTexCoordATI, _gloffset_PassTexCoordATI ), - NAME_FUNC_OFFSET( 14002, glSampleMapATI, _gloffset_SampleMapATI ), - NAME_FUNC_OFFSET( 14017, glColorFragmentOp1ATI, _gloffset_ColorFragmentOp1ATI ), - NAME_FUNC_OFFSET( 14039, glColorFragmentOp2ATI, _gloffset_ColorFragmentOp2ATI ), - NAME_FUNC_OFFSET( 14061, glColorFragmentOp3ATI, _gloffset_ColorFragmentOp3ATI ), - NAME_FUNC_OFFSET( 14083, glAlphaFragmentOp1ATI, _gloffset_AlphaFragmentOp1ATI ), - NAME_FUNC_OFFSET( 14105, glAlphaFragmentOp2ATI, _gloffset_AlphaFragmentOp2ATI ), - NAME_FUNC_OFFSET( 14127, glAlphaFragmentOp3ATI, _gloffset_AlphaFragmentOp3ATI ), - NAME_FUNC_OFFSET( 14149, glSetFragmentShaderConstantATI, _gloffset_SetFragmentShaderConstantATI ), - NAME_FUNC_OFFSET( 14180, glActiveTexture, _gloffset_ActiveTextureARB ), - NAME_FUNC_OFFSET( 14196, glClientActiveTexture, _gloffset_ClientActiveTextureARB ), - NAME_FUNC_OFFSET( 14218, glMultiTexCoord1d, _gloffset_MultiTexCoord1dARB ), - NAME_FUNC_OFFSET( 14236, glMultiTexCoord1dv, _gloffset_MultiTexCoord1dvARB ), - NAME_FUNC_OFFSET( 14255, glMultiTexCoord1f, _gloffset_MultiTexCoord1fARB ), - NAME_FUNC_OFFSET( 14273, glMultiTexCoord1fv, _gloffset_MultiTexCoord1fvARB ), - NAME_FUNC_OFFSET( 14292, glMultiTexCoord1i, _gloffset_MultiTexCoord1iARB ), - NAME_FUNC_OFFSET( 14310, glMultiTexCoord1iv, _gloffset_MultiTexCoord1ivARB ), - NAME_FUNC_OFFSET( 14329, glMultiTexCoord1s, _gloffset_MultiTexCoord1sARB ), - NAME_FUNC_OFFSET( 14347, glMultiTexCoord1sv, _gloffset_MultiTexCoord1svARB ), - NAME_FUNC_OFFSET( 14366, glMultiTexCoord2d, _gloffset_MultiTexCoord2dARB ), - NAME_FUNC_OFFSET( 14384, glMultiTexCoord2dv, _gloffset_MultiTexCoord2dvARB ), - NAME_FUNC_OFFSET( 14403, glMultiTexCoord2f, _gloffset_MultiTexCoord2fARB ), - NAME_FUNC_OFFSET( 14421, glMultiTexCoord2fv, _gloffset_MultiTexCoord2fvARB ), - NAME_FUNC_OFFSET( 14440, glMultiTexCoord2i, _gloffset_MultiTexCoord2iARB ), - NAME_FUNC_OFFSET( 14458, glMultiTexCoord2iv, _gloffset_MultiTexCoord2ivARB ), - NAME_FUNC_OFFSET( 14477, glMultiTexCoord2s, _gloffset_MultiTexCoord2sARB ), - NAME_FUNC_OFFSET( 14495, glMultiTexCoord2sv, _gloffset_MultiTexCoord2svARB ), - NAME_FUNC_OFFSET( 14514, glMultiTexCoord3d, _gloffset_MultiTexCoord3dARB ), - NAME_FUNC_OFFSET( 14532, glMultiTexCoord3dv, _gloffset_MultiTexCoord3dvARB ), - NAME_FUNC_OFFSET( 14551, glMultiTexCoord3f, _gloffset_MultiTexCoord3fARB ), - NAME_FUNC_OFFSET( 14569, glMultiTexCoord3fv, _gloffset_MultiTexCoord3fvARB ), - NAME_FUNC_OFFSET( 14588, glMultiTexCoord3i, _gloffset_MultiTexCoord3iARB ), - NAME_FUNC_OFFSET( 14606, glMultiTexCoord3iv, _gloffset_MultiTexCoord3ivARB ), - NAME_FUNC_OFFSET( 14625, glMultiTexCoord3s, _gloffset_MultiTexCoord3sARB ), - NAME_FUNC_OFFSET( 14643, glMultiTexCoord3sv, _gloffset_MultiTexCoord3svARB ), - NAME_FUNC_OFFSET( 14662, glMultiTexCoord4d, _gloffset_MultiTexCoord4dARB ), - NAME_FUNC_OFFSET( 14680, glMultiTexCoord4dv, _gloffset_MultiTexCoord4dvARB ), - NAME_FUNC_OFFSET( 14699, glMultiTexCoord4f, _gloffset_MultiTexCoord4fARB ), - NAME_FUNC_OFFSET( 14717, glMultiTexCoord4fv, _gloffset_MultiTexCoord4fvARB ), - NAME_FUNC_OFFSET( 14736, glMultiTexCoord4i, _gloffset_MultiTexCoord4iARB ), - NAME_FUNC_OFFSET( 14754, glMultiTexCoord4iv, _gloffset_MultiTexCoord4ivARB ), - NAME_FUNC_OFFSET( 14773, glMultiTexCoord4s, _gloffset_MultiTexCoord4sARB ), - NAME_FUNC_OFFSET( 14791, glMultiTexCoord4sv, _gloffset_MultiTexCoord4svARB ), - NAME_FUNC_OFFSET( 14810, glLoadTransposeMatrixf, _gloffset_LoadTransposeMatrixfARB ), - NAME_FUNC_OFFSET( 14833, glLoadTransposeMatrixd, _gloffset_LoadTransposeMatrixdARB ), - NAME_FUNC_OFFSET( 14856, glMultTransposeMatrixf, _gloffset_MultTransposeMatrixfARB ), - NAME_FUNC_OFFSET( 14879, glMultTransposeMatrixd, _gloffset_MultTransposeMatrixdARB ), - NAME_FUNC_OFFSET( 14902, glSampleCoverage, _gloffset_SampleCoverageARB ), - NAME_FUNC_OFFSET( 14919, glCompressedTexImage3D, _gloffset_CompressedTexImage3DARB ), - NAME_FUNC_OFFSET( 14942, glCompressedTexImage2D, _gloffset_CompressedTexImage2DARB ), - NAME_FUNC_OFFSET( 14965, glCompressedTexImage1D, _gloffset_CompressedTexImage1DARB ), - NAME_FUNC_OFFSET( 14988, glCompressedTexSubImage3D, _gloffset_CompressedTexSubImage3DARB ), - NAME_FUNC_OFFSET( 15014, glCompressedTexSubImage2D, _gloffset_CompressedTexSubImage2DARB ), - NAME_FUNC_OFFSET( 15040, glCompressedTexSubImage1D, _gloffset_CompressedTexSubImage1DARB ), - NAME_FUNC_OFFSET( 15066, glGetCompressedTexImage, _gloffset_GetCompressedTexImageARB ), - NAME_FUNC_OFFSET( 15090, glBlendFuncSeparate, _gloffset_BlendFuncSeparateEXT ), - NAME_FUNC_OFFSET( 15110, glFogCoordf, _gloffset_FogCoordfEXT ), - NAME_FUNC_OFFSET( 15122, glFogCoordfv, _gloffset_FogCoordfvEXT ), - NAME_FUNC_OFFSET( 15135, glFogCoordd, _gloffset_FogCoorddEXT ), - NAME_FUNC_OFFSET( 15147, glFogCoorddv, _gloffset_FogCoorddvEXT ), - NAME_FUNC_OFFSET( 15160, glFogCoordPointer, _gloffset_FogCoordPointerEXT ), - NAME_FUNC_OFFSET( 15178, glMultiDrawArrays, _gloffset_MultiDrawArraysEXT ), - NAME_FUNC_OFFSET( 15196, glMultiDrawElements, _gloffset_MultiDrawElementsEXT ), - NAME_FUNC_OFFSET( 15216, glPointParameterf, _gloffset_PointParameterfEXT ), - NAME_FUNC_OFFSET( 15234, glPointParameterfv, _gloffset_PointParameterfvEXT ), - NAME_FUNC_OFFSET( 15253, glPointParameteri, _gloffset_PointParameteriNV ), - NAME_FUNC_OFFSET( 15271, glPointParameteriv, _gloffset_PointParameterivNV ), - NAME_FUNC_OFFSET( 15290, glSecondaryColor3b, _gloffset_SecondaryColor3bEXT ), - NAME_FUNC_OFFSET( 15309, glSecondaryColor3bv, _gloffset_SecondaryColor3bvEXT ), - NAME_FUNC_OFFSET( 15329, glSecondaryColor3d, _gloffset_SecondaryColor3dEXT ), - NAME_FUNC_OFFSET( 15348, glSecondaryColor3dv, _gloffset_SecondaryColor3dvEXT ), - NAME_FUNC_OFFSET( 15368, glSecondaryColor3f, _gloffset_SecondaryColor3fEXT ), - NAME_FUNC_OFFSET( 15387, glSecondaryColor3fv, _gloffset_SecondaryColor3fvEXT ), - NAME_FUNC_OFFSET( 15407, glSecondaryColor3i, _gloffset_SecondaryColor3iEXT ), - NAME_FUNC_OFFSET( 15426, glSecondaryColor3iv, _gloffset_SecondaryColor3ivEXT ), - NAME_FUNC_OFFSET( 15446, glSecondaryColor3s, _gloffset_SecondaryColor3sEXT ), - NAME_FUNC_OFFSET( 15465, glSecondaryColor3sv, _gloffset_SecondaryColor3svEXT ), - NAME_FUNC_OFFSET( 15485, glSecondaryColor3ub, _gloffset_SecondaryColor3ubEXT ), - NAME_FUNC_OFFSET( 15505, glSecondaryColor3ubv, _gloffset_SecondaryColor3ubvEXT ), - NAME_FUNC_OFFSET( 15526, glSecondaryColor3ui, _gloffset_SecondaryColor3uiEXT ), - NAME_FUNC_OFFSET( 15546, glSecondaryColor3uiv, _gloffset_SecondaryColor3uivEXT ), - NAME_FUNC_OFFSET( 15567, glSecondaryColor3us, _gloffset_SecondaryColor3usEXT ), - NAME_FUNC_OFFSET( 15587, glSecondaryColor3usv, _gloffset_SecondaryColor3usvEXT ), - NAME_FUNC_OFFSET( 15608, glSecondaryColorPointer, _gloffset_SecondaryColorPointerEXT ), - NAME_FUNC_OFFSET( 15632, glWindowPos2d, _gloffset_WindowPos2dMESA ), - NAME_FUNC_OFFSET( 15646, glWindowPos2dv, _gloffset_WindowPos2dvMESA ), - NAME_FUNC_OFFSET( 15661, glWindowPos2f, _gloffset_WindowPos2fMESA ), - NAME_FUNC_OFFSET( 15675, glWindowPos2fv, _gloffset_WindowPos2fvMESA ), - NAME_FUNC_OFFSET( 15690, glWindowPos2i, _gloffset_WindowPos2iMESA ), - NAME_FUNC_OFFSET( 15704, glWindowPos2iv, _gloffset_WindowPos2ivMESA ), - NAME_FUNC_OFFSET( 15719, glWindowPos2s, _gloffset_WindowPos2sMESA ), - NAME_FUNC_OFFSET( 15733, glWindowPos2sv, _gloffset_WindowPos2svMESA ), - NAME_FUNC_OFFSET( 15748, glWindowPos3d, _gloffset_WindowPos3dMESA ), - NAME_FUNC_OFFSET( 15762, glWindowPos3dv, _gloffset_WindowPos3dvMESA ), - NAME_FUNC_OFFSET( 15777, glWindowPos3f, _gloffset_WindowPos3fMESA ), - NAME_FUNC_OFFSET( 15791, glWindowPos3fv, _gloffset_WindowPos3fvMESA ), - NAME_FUNC_OFFSET( 15806, glWindowPos3i, _gloffset_WindowPos3iMESA ), - NAME_FUNC_OFFSET( 15820, glWindowPos3iv, _gloffset_WindowPos3ivMESA ), - NAME_FUNC_OFFSET( 15835, glWindowPos3s, _gloffset_WindowPos3sMESA ), - NAME_FUNC_OFFSET( 15849, glWindowPos3sv, _gloffset_WindowPos3svMESA ), - NAME_FUNC_OFFSET( 15864, glBindBuffer, _gloffset_BindBufferARB ), - NAME_FUNC_OFFSET( 15877, glBufferData, _gloffset_BufferDataARB ), - NAME_FUNC_OFFSET( 15890, glBufferSubData, _gloffset_BufferSubDataARB ), - NAME_FUNC_OFFSET( 15906, glDeleteBuffers, _gloffset_DeleteBuffersARB ), - NAME_FUNC_OFFSET( 15922, glGenBuffers, _gloffset_GenBuffersARB ), - NAME_FUNC_OFFSET( 15935, glGetBufferParameteriv, _gloffset_GetBufferParameterivARB ), - NAME_FUNC_OFFSET( 15958, glGetBufferPointerv, _gloffset_GetBufferPointervARB ), - NAME_FUNC_OFFSET( 15978, glGetBufferSubData, _gloffset_GetBufferSubDataARB ), - NAME_FUNC_OFFSET( 15997, glIsBuffer, _gloffset_IsBufferARB ), - NAME_FUNC_OFFSET( 16008, glMapBuffer, _gloffset_MapBufferARB ), - NAME_FUNC_OFFSET( 16020, glUnmapBuffer, _gloffset_UnmapBufferARB ), - NAME_FUNC_OFFSET( 16034, glGenQueries, _gloffset_GenQueriesARB ), - NAME_FUNC_OFFSET( 16047, glDeleteQueries, _gloffset_DeleteQueriesARB ), - NAME_FUNC_OFFSET( 16063, glIsQuery, _gloffset_IsQueryARB ), - NAME_FUNC_OFFSET( 16073, glBeginQuery, _gloffset_BeginQueryARB ), - NAME_FUNC_OFFSET( 16086, glEndQuery, _gloffset_EndQueryARB ), - NAME_FUNC_OFFSET( 16097, glGetQueryiv, _gloffset_GetQueryivARB ), - NAME_FUNC_OFFSET( 16110, glGetQueryObjectiv, _gloffset_GetQueryObjectivARB ), - NAME_FUNC_OFFSET( 16129, glGetQueryObjectuiv, _gloffset_GetQueryObjectuivARB ), - NAME_FUNC_OFFSET( 16149, glPointParameterfARB, _gloffset_PointParameterfEXT ), - NAME_FUNC_OFFSET( 16170, glPointParameterfvARB, _gloffset_PointParameterfvEXT ), - NAME_FUNC_OFFSET( 16192, glWindowPos2dARB, _gloffset_WindowPos2dMESA ), - NAME_FUNC_OFFSET( 16209, glWindowPos2fARB, _gloffset_WindowPos2fMESA ), - NAME_FUNC_OFFSET( 16226, glWindowPos2iARB, _gloffset_WindowPos2iMESA ), - NAME_FUNC_OFFSET( 16243, glWindowPos2sARB, _gloffset_WindowPos2sMESA ), - NAME_FUNC_OFFSET( 16260, glWindowPos2dvARB, _gloffset_WindowPos2dvMESA ), - NAME_FUNC_OFFSET( 16278, glWindowPos2fvARB, _gloffset_WindowPos2fvMESA ), - NAME_FUNC_OFFSET( 16296, glWindowPos2ivARB, _gloffset_WindowPos2ivMESA ), - NAME_FUNC_OFFSET( 16314, glWindowPos2svARB, _gloffset_WindowPos2svMESA ), - NAME_FUNC_OFFSET( 16332, glWindowPos3dARB, _gloffset_WindowPos3dMESA ), - NAME_FUNC_OFFSET( 16349, glWindowPos3fARB, _gloffset_WindowPos3fMESA ), - NAME_FUNC_OFFSET( 16366, glWindowPos3iARB, _gloffset_WindowPos3iMESA ), - NAME_FUNC_OFFSET( 16383, glWindowPos3sARB, _gloffset_WindowPos3sMESA ), - NAME_FUNC_OFFSET( 16400, glWindowPos3dvARB, _gloffset_WindowPos3dvMESA ), - NAME_FUNC_OFFSET( 16418, glWindowPos3fvARB, _gloffset_WindowPos3fvMESA ), - NAME_FUNC_OFFSET( 16436, glWindowPos3ivARB, _gloffset_WindowPos3ivMESA ), - NAME_FUNC_OFFSET( 16454, glWindowPos3svARB, _gloffset_WindowPos3svMESA ), - NAME_FUNC_OFFSET( 16472, glBindProgramARB, _gloffset_BindProgramNV ), - NAME_FUNC_OFFSET( 16489, glDeleteProgramsARB, _gloffset_DeleteProgramsNV ), - NAME_FUNC_OFFSET( 16509, glGenProgramsARB, _gloffset_GenProgramsNV ), - NAME_FUNC_OFFSET( 16526, glIsProgramARB, _gloffset_IsProgramNV ), - NAME_FUNC_OFFSET( 16541, glGetVertexAttribPointervARB, _gloffset_GetVertexAttribPointervNV ), - NAME_FUNC_OFFSET( 16570, glBlendColorEXT, _gloffset_BlendColor ), - NAME_FUNC_OFFSET( 16586, glTexImage3DEXT, _gloffset_TexImage3D ), - NAME_FUNC_OFFSET( 16602, glTexSubImage3DEXT, _gloffset_TexSubImage3D ), - NAME_FUNC_OFFSET( 16621, glTexSubImage1DEXT, _gloffset_TexSubImage1D ), - NAME_FUNC_OFFSET( 16640, glTexSubImage2DEXT, _gloffset_TexSubImage2D ), - NAME_FUNC_OFFSET( 16659, glCopyTexImage1DEXT, _gloffset_CopyTexImage1D ), - NAME_FUNC_OFFSET( 16679, glCopyTexImage2DEXT, _gloffset_CopyTexImage2D ), - NAME_FUNC_OFFSET( 16699, glCopyTexSubImage1DEXT, _gloffset_CopyTexSubImage1D ), - NAME_FUNC_OFFSET( 16722, glCopyTexSubImage2DEXT, _gloffset_CopyTexSubImage2D ), - NAME_FUNC_OFFSET( 16745, glCopyTexSubImage3DEXT, _gloffset_CopyTexSubImage3D ), - NAME_FUNC_OFFSET( 16768, glHistogramEXT, _gloffset_Histogram ), - NAME_FUNC_OFFSET( 16783, glMinmaxEXT, _gloffset_Minmax ), - NAME_FUNC_OFFSET( 16795, glResetHistogramEXT, _gloffset_ResetHistogram ), - NAME_FUNC_OFFSET( 16815, glResetMinmaxEXT, _gloffset_ResetMinmax ), - NAME_FUNC_OFFSET( 16832, glConvolutionFilter1DEXT, _gloffset_ConvolutionFilter1D ), - NAME_FUNC_OFFSET( 16857, glConvolutionFilter2DEXT, _gloffset_ConvolutionFilter2D ), - NAME_FUNC_OFFSET( 16882, glConvolutionParameterfEXT, _gloffset_ConvolutionParameterf ), - NAME_FUNC_OFFSET( 16909, glConvolutionParameterfvEXT, _gloffset_ConvolutionParameterfv ), - NAME_FUNC_OFFSET( 16937, glConvolutionParameteriEXT, _gloffset_ConvolutionParameteri ), - NAME_FUNC_OFFSET( 16964, glConvolutionParameterivEXT, _gloffset_ConvolutionParameteriv ), - NAME_FUNC_OFFSET( 16992, glCopyConvolutionFilter1DEXT, _gloffset_CopyConvolutionFilter1D ), - NAME_FUNC_OFFSET( 17021, glCopyConvolutionFilter2DEXT, _gloffset_CopyConvolutionFilter2D ), - NAME_FUNC_OFFSET( 17050, glSeparableFilter2DEXT, _gloffset_SeparableFilter2D ), - NAME_FUNC_OFFSET( 17073, glColorTableSGI, _gloffset_ColorTable ), - NAME_FUNC_OFFSET( 17089, glColorTableParameterfvSGI, _gloffset_ColorTableParameterfv ), - NAME_FUNC_OFFSET( 17116, glColorTableParameterivSGI, _gloffset_ColorTableParameteriv ), - NAME_FUNC_OFFSET( 17143, glCopyColorTableSGI, _gloffset_CopyColorTable ), - NAME_FUNC_OFFSET( 17163, glBindTextureEXT, _gloffset_BindTexture ), - NAME_FUNC_OFFSET( 17180, glDeleteTexturesEXT, _gloffset_DeleteTextures ), - NAME_FUNC_OFFSET( 17200, glPrioritizeTexturesEXT, _gloffset_PrioritizeTextures ), - NAME_FUNC_OFFSET( 17224, glArrayElementEXT, _gloffset_ArrayElement ), - NAME_FUNC_OFFSET( 17242, glDrawArraysEXT, _gloffset_DrawArrays ), - NAME_FUNC_OFFSET( 17258, glGetPointervEXT, _gloffset_GetPointerv ), - NAME_FUNC_OFFSET( 17275, glBlendEquationEXT, _gloffset_BlendEquation ), - NAME_FUNC_OFFSET( 17294, glColorSubTableEXT, _gloffset_ColorSubTable ), - NAME_FUNC_OFFSET( 17313, glCopyColorSubTableEXT, _gloffset_CopyColorSubTable ), - NAME_FUNC_OFFSET( 17336, glColorTableEXT, _gloffset_ColorTable ), - NAME_FUNC_OFFSET( 17352, glDrawRangeElementsEXT, _gloffset_DrawRangeElements ), - NAME_FUNC_OFFSET( 17375, glSampleMaskEXT, _gloffset_SampleMaskSGIS ), - NAME_FUNC_OFFSET( 17391, glSamplePatternEXT, _gloffset_SamplePatternSGIS ), - NAME_FUNC_OFFSET( 17410, glDrawBuffersATI, _gloffset_DrawBuffersARB ), - NAME_FUNC_OFFSET( 17427, glBlendEquationSeparateATI, _gloffset_BlendEquationSeparateEXT ), - NAME_FUNC_OFFSET( 17454, glBlendFuncSeparateINGR, _gloffset_BlendFuncSeparateEXT ), - NAME_FUNC_OFFSET( 17478, glPointParameterfSGIS, _gloffset_PointParameterfEXT ), - NAME_FUNC_OFFSET( 17500, glPointParameterfvSGIS, _gloffset_PointParameterfvEXT ), - NAME_FUNC_OFFSET( -1, NULL, 0 ) + NAME_FUNC_OFFSET( 0, glNewList, glNewList, NULL, _gloffset_NewList), + NAME_FUNC_OFFSET( 10, glEndList, glEndList, NULL, _gloffset_EndList), + NAME_FUNC_OFFSET( 20, glCallList, glCallList, NULL, _gloffset_CallList), + NAME_FUNC_OFFSET( 31, glCallLists, glCallLists, NULL, _gloffset_CallLists), + NAME_FUNC_OFFSET( 43, glDeleteLists, glDeleteLists, NULL, _gloffset_DeleteLists), + NAME_FUNC_OFFSET( 57, glGenLists, glGenLists, NULL, _gloffset_GenLists), + NAME_FUNC_OFFSET( 68, glListBase, glListBase, NULL, _gloffset_ListBase), + NAME_FUNC_OFFSET( 79, glBegin, glBegin, NULL, _gloffset_Begin), + NAME_FUNC_OFFSET( 87, glBitmap, glBitmap, NULL, _gloffset_Bitmap), + NAME_FUNC_OFFSET( 96, glColor3b, glColor3b, NULL, _gloffset_Color3b), + NAME_FUNC_OFFSET( 106, glColor3bv, glColor3bv, NULL, _gloffset_Color3bv), + NAME_FUNC_OFFSET( 117, glColor3d, glColor3d, NULL, _gloffset_Color3d), + NAME_FUNC_OFFSET( 127, glColor3dv, glColor3dv, NULL, _gloffset_Color3dv), + NAME_FUNC_OFFSET( 138, glColor3f, glColor3f, NULL, _gloffset_Color3f), + NAME_FUNC_OFFSET( 148, glColor3fv, glColor3fv, NULL, _gloffset_Color3fv), + NAME_FUNC_OFFSET( 159, glColor3i, glColor3i, NULL, _gloffset_Color3i), + NAME_FUNC_OFFSET( 169, glColor3iv, glColor3iv, NULL, _gloffset_Color3iv), + NAME_FUNC_OFFSET( 180, glColor3s, glColor3s, NULL, _gloffset_Color3s), + NAME_FUNC_OFFSET( 190, glColor3sv, glColor3sv, NULL, _gloffset_Color3sv), + NAME_FUNC_OFFSET( 201, glColor3ub, glColor3ub, NULL, _gloffset_Color3ub), + NAME_FUNC_OFFSET( 212, glColor3ubv, glColor3ubv, NULL, _gloffset_Color3ubv), + NAME_FUNC_OFFSET( 224, glColor3ui, glColor3ui, NULL, _gloffset_Color3ui), + NAME_FUNC_OFFSET( 235, glColor3uiv, glColor3uiv, NULL, _gloffset_Color3uiv), + NAME_FUNC_OFFSET( 247, glColor3us, glColor3us, NULL, _gloffset_Color3us), + NAME_FUNC_OFFSET( 258, glColor3usv, glColor3usv, NULL, _gloffset_Color3usv), + NAME_FUNC_OFFSET( 270, glColor4b, glColor4b, NULL, _gloffset_Color4b), + NAME_FUNC_OFFSET( 280, glColor4bv, glColor4bv, NULL, _gloffset_Color4bv), + NAME_FUNC_OFFSET( 291, glColor4d, glColor4d, NULL, _gloffset_Color4d), + NAME_FUNC_OFFSET( 301, glColor4dv, glColor4dv, NULL, _gloffset_Color4dv), + NAME_FUNC_OFFSET( 312, glColor4f, glColor4f, NULL, _gloffset_Color4f), + NAME_FUNC_OFFSET( 322, glColor4fv, glColor4fv, NULL, _gloffset_Color4fv), + NAME_FUNC_OFFSET( 333, glColor4i, glColor4i, NULL, _gloffset_Color4i), + NAME_FUNC_OFFSET( 343, glColor4iv, glColor4iv, NULL, _gloffset_Color4iv), + NAME_FUNC_OFFSET( 354, glColor4s, glColor4s, NULL, _gloffset_Color4s), + NAME_FUNC_OFFSET( 364, glColor4sv, glColor4sv, NULL, _gloffset_Color4sv), + NAME_FUNC_OFFSET( 375, glColor4ub, glColor4ub, NULL, _gloffset_Color4ub), + NAME_FUNC_OFFSET( 386, glColor4ubv, glColor4ubv, NULL, _gloffset_Color4ubv), + NAME_FUNC_OFFSET( 398, glColor4ui, glColor4ui, NULL, _gloffset_Color4ui), + NAME_FUNC_OFFSET( 409, glColor4uiv, glColor4uiv, NULL, _gloffset_Color4uiv), + NAME_FUNC_OFFSET( 421, glColor4us, glColor4us, NULL, _gloffset_Color4us), + NAME_FUNC_OFFSET( 432, glColor4usv, glColor4usv, NULL, _gloffset_Color4usv), + NAME_FUNC_OFFSET( 444, glEdgeFlag, glEdgeFlag, NULL, _gloffset_EdgeFlag), + NAME_FUNC_OFFSET( 455, glEdgeFlagv, glEdgeFlagv, NULL, _gloffset_EdgeFlagv), + NAME_FUNC_OFFSET( 467, glEnd, glEnd, NULL, _gloffset_End), + NAME_FUNC_OFFSET( 473, glIndexd, glIndexd, NULL, _gloffset_Indexd), + NAME_FUNC_OFFSET( 482, glIndexdv, glIndexdv, NULL, _gloffset_Indexdv), + NAME_FUNC_OFFSET( 492, glIndexf, glIndexf, NULL, _gloffset_Indexf), + NAME_FUNC_OFFSET( 501, glIndexfv, glIndexfv, NULL, _gloffset_Indexfv), + NAME_FUNC_OFFSET( 511, glIndexi, glIndexi, NULL, _gloffset_Indexi), + NAME_FUNC_OFFSET( 520, glIndexiv, glIndexiv, NULL, _gloffset_Indexiv), + NAME_FUNC_OFFSET( 530, glIndexs, glIndexs, NULL, _gloffset_Indexs), + NAME_FUNC_OFFSET( 539, glIndexsv, glIndexsv, NULL, _gloffset_Indexsv), + NAME_FUNC_OFFSET( 549, glNormal3b, glNormal3b, NULL, _gloffset_Normal3b), + NAME_FUNC_OFFSET( 560, glNormal3bv, glNormal3bv, NULL, _gloffset_Normal3bv), + NAME_FUNC_OFFSET( 572, glNormal3d, glNormal3d, NULL, _gloffset_Normal3d), + NAME_FUNC_OFFSET( 583, glNormal3dv, glNormal3dv, NULL, _gloffset_Normal3dv), + NAME_FUNC_OFFSET( 595, glNormal3f, glNormal3f, NULL, _gloffset_Normal3f), + NAME_FUNC_OFFSET( 606, glNormal3fv, glNormal3fv, NULL, _gloffset_Normal3fv), + NAME_FUNC_OFFSET( 618, glNormal3i, glNormal3i, NULL, _gloffset_Normal3i), + NAME_FUNC_OFFSET( 629, glNormal3iv, glNormal3iv, NULL, _gloffset_Normal3iv), + NAME_FUNC_OFFSET( 641, glNormal3s, glNormal3s, NULL, _gloffset_Normal3s), + NAME_FUNC_OFFSET( 652, glNormal3sv, glNormal3sv, NULL, _gloffset_Normal3sv), + NAME_FUNC_OFFSET( 664, glRasterPos2d, glRasterPos2d, NULL, _gloffset_RasterPos2d), + NAME_FUNC_OFFSET( 678, glRasterPos2dv, glRasterPos2dv, NULL, _gloffset_RasterPos2dv), + NAME_FUNC_OFFSET( 693, glRasterPos2f, glRasterPos2f, NULL, _gloffset_RasterPos2f), + NAME_FUNC_OFFSET( 707, glRasterPos2fv, glRasterPos2fv, NULL, _gloffset_RasterPos2fv), + NAME_FUNC_OFFSET( 722, glRasterPos2i, glRasterPos2i, NULL, _gloffset_RasterPos2i), + NAME_FUNC_OFFSET( 736, glRasterPos2iv, glRasterPos2iv, NULL, _gloffset_RasterPos2iv), + NAME_FUNC_OFFSET( 751, glRasterPos2s, glRasterPos2s, NULL, _gloffset_RasterPos2s), + NAME_FUNC_OFFSET( 765, glRasterPos2sv, glRasterPos2sv, NULL, _gloffset_RasterPos2sv), + NAME_FUNC_OFFSET( 780, glRasterPos3d, glRasterPos3d, NULL, _gloffset_RasterPos3d), + NAME_FUNC_OFFSET( 794, glRasterPos3dv, glRasterPos3dv, NULL, _gloffset_RasterPos3dv), + NAME_FUNC_OFFSET( 809, glRasterPos3f, glRasterPos3f, NULL, _gloffset_RasterPos3f), + NAME_FUNC_OFFSET( 823, glRasterPos3fv, glRasterPos3fv, NULL, _gloffset_RasterPos3fv), + NAME_FUNC_OFFSET( 838, glRasterPos3i, glRasterPos3i, NULL, _gloffset_RasterPos3i), + NAME_FUNC_OFFSET( 852, glRasterPos3iv, glRasterPos3iv, NULL, _gloffset_RasterPos3iv), + NAME_FUNC_OFFSET( 867, glRasterPos3s, glRasterPos3s, NULL, _gloffset_RasterPos3s), + NAME_FUNC_OFFSET( 881, glRasterPos3sv, glRasterPos3sv, NULL, _gloffset_RasterPos3sv), + NAME_FUNC_OFFSET( 896, glRasterPos4d, glRasterPos4d, NULL, _gloffset_RasterPos4d), + NAME_FUNC_OFFSET( 910, glRasterPos4dv, glRasterPos4dv, NULL, _gloffset_RasterPos4dv), + NAME_FUNC_OFFSET( 925, glRasterPos4f, glRasterPos4f, NULL, _gloffset_RasterPos4f), + NAME_FUNC_OFFSET( 939, glRasterPos4fv, glRasterPos4fv, NULL, _gloffset_RasterPos4fv), + NAME_FUNC_OFFSET( 954, glRasterPos4i, glRasterPos4i, NULL, _gloffset_RasterPos4i), + NAME_FUNC_OFFSET( 968, glRasterPos4iv, glRasterPos4iv, NULL, _gloffset_RasterPos4iv), + NAME_FUNC_OFFSET( 983, glRasterPos4s, glRasterPos4s, NULL, _gloffset_RasterPos4s), + NAME_FUNC_OFFSET( 997, glRasterPos4sv, glRasterPos4sv, NULL, _gloffset_RasterPos4sv), + NAME_FUNC_OFFSET( 1012, glRectd, glRectd, NULL, _gloffset_Rectd), + NAME_FUNC_OFFSET( 1020, glRectdv, glRectdv, NULL, _gloffset_Rectdv), + NAME_FUNC_OFFSET( 1029, glRectf, glRectf, NULL, _gloffset_Rectf), + NAME_FUNC_OFFSET( 1037, glRectfv, glRectfv, NULL, _gloffset_Rectfv), + NAME_FUNC_OFFSET( 1046, glRecti, glRecti, NULL, _gloffset_Recti), + NAME_FUNC_OFFSET( 1054, glRectiv, glRectiv, NULL, _gloffset_Rectiv), + NAME_FUNC_OFFSET( 1063, glRects, glRects, NULL, _gloffset_Rects), + NAME_FUNC_OFFSET( 1071, glRectsv, glRectsv, NULL, _gloffset_Rectsv), + NAME_FUNC_OFFSET( 1080, glTexCoord1d, glTexCoord1d, NULL, _gloffset_TexCoord1d), + NAME_FUNC_OFFSET( 1093, glTexCoord1dv, glTexCoord1dv, NULL, _gloffset_TexCoord1dv), + NAME_FUNC_OFFSET( 1107, glTexCoord1f, glTexCoord1f, NULL, _gloffset_TexCoord1f), + NAME_FUNC_OFFSET( 1120, glTexCoord1fv, glTexCoord1fv, NULL, _gloffset_TexCoord1fv), + NAME_FUNC_OFFSET( 1134, glTexCoord1i, glTexCoord1i, NULL, _gloffset_TexCoord1i), + NAME_FUNC_OFFSET( 1147, glTexCoord1iv, glTexCoord1iv, NULL, _gloffset_TexCoord1iv), + NAME_FUNC_OFFSET( 1161, glTexCoord1s, glTexCoord1s, NULL, _gloffset_TexCoord1s), + NAME_FUNC_OFFSET( 1174, glTexCoord1sv, glTexCoord1sv, NULL, _gloffset_TexCoord1sv), + NAME_FUNC_OFFSET( 1188, glTexCoord2d, glTexCoord2d, NULL, _gloffset_TexCoord2d), + NAME_FUNC_OFFSET( 1201, glTexCoord2dv, glTexCoord2dv, NULL, _gloffset_TexCoord2dv), + NAME_FUNC_OFFSET( 1215, glTexCoord2f, glTexCoord2f, NULL, _gloffset_TexCoord2f), + NAME_FUNC_OFFSET( 1228, glTexCoord2fv, glTexCoord2fv, NULL, _gloffset_TexCoord2fv), + NAME_FUNC_OFFSET( 1242, glTexCoord2i, glTexCoord2i, NULL, _gloffset_TexCoord2i), + NAME_FUNC_OFFSET( 1255, glTexCoord2iv, glTexCoord2iv, NULL, _gloffset_TexCoord2iv), + NAME_FUNC_OFFSET( 1269, glTexCoord2s, glTexCoord2s, NULL, _gloffset_TexCoord2s), + NAME_FUNC_OFFSET( 1282, glTexCoord2sv, glTexCoord2sv, NULL, _gloffset_TexCoord2sv), + NAME_FUNC_OFFSET( 1296, glTexCoord3d, glTexCoord3d, NULL, _gloffset_TexCoord3d), + NAME_FUNC_OFFSET( 1309, glTexCoord3dv, glTexCoord3dv, NULL, _gloffset_TexCoord3dv), + NAME_FUNC_OFFSET( 1323, glTexCoord3f, glTexCoord3f, NULL, _gloffset_TexCoord3f), + NAME_FUNC_OFFSET( 1336, glTexCoord3fv, glTexCoord3fv, NULL, _gloffset_TexCoord3fv), + NAME_FUNC_OFFSET( 1350, glTexCoord3i, glTexCoord3i, NULL, _gloffset_TexCoord3i), + NAME_FUNC_OFFSET( 1363, glTexCoord3iv, glTexCoord3iv, NULL, _gloffset_TexCoord3iv), + NAME_FUNC_OFFSET( 1377, glTexCoord3s, glTexCoord3s, NULL, _gloffset_TexCoord3s), + NAME_FUNC_OFFSET( 1390, glTexCoord3sv, glTexCoord3sv, NULL, _gloffset_TexCoord3sv), + NAME_FUNC_OFFSET( 1404, glTexCoord4d, glTexCoord4d, NULL, _gloffset_TexCoord4d), + NAME_FUNC_OFFSET( 1417, glTexCoord4dv, glTexCoord4dv, NULL, _gloffset_TexCoord4dv), + NAME_FUNC_OFFSET( 1431, glTexCoord4f, glTexCoord4f, NULL, _gloffset_TexCoord4f), + NAME_FUNC_OFFSET( 1444, glTexCoord4fv, glTexCoord4fv, NULL, _gloffset_TexCoord4fv), + NAME_FUNC_OFFSET( 1458, glTexCoord4i, glTexCoord4i, NULL, _gloffset_TexCoord4i), + NAME_FUNC_OFFSET( 1471, glTexCoord4iv, glTexCoord4iv, NULL, _gloffset_TexCoord4iv), + NAME_FUNC_OFFSET( 1485, glTexCoord4s, glTexCoord4s, NULL, _gloffset_TexCoord4s), + NAME_FUNC_OFFSET( 1498, glTexCoord4sv, glTexCoord4sv, NULL, _gloffset_TexCoord4sv), + NAME_FUNC_OFFSET( 1512, glVertex2d, glVertex2d, NULL, _gloffset_Vertex2d), + NAME_FUNC_OFFSET( 1523, glVertex2dv, glVertex2dv, NULL, _gloffset_Vertex2dv), + NAME_FUNC_OFFSET( 1535, glVertex2f, glVertex2f, NULL, _gloffset_Vertex2f), + NAME_FUNC_OFFSET( 1546, glVertex2fv, glVertex2fv, NULL, _gloffset_Vertex2fv), + NAME_FUNC_OFFSET( 1558, glVertex2i, glVertex2i, NULL, _gloffset_Vertex2i), + NAME_FUNC_OFFSET( 1569, glVertex2iv, glVertex2iv, NULL, _gloffset_Vertex2iv), + NAME_FUNC_OFFSET( 1581, glVertex2s, glVertex2s, NULL, _gloffset_Vertex2s), + NAME_FUNC_OFFSET( 1592, glVertex2sv, glVertex2sv, NULL, _gloffset_Vertex2sv), + NAME_FUNC_OFFSET( 1604, glVertex3d, glVertex3d, NULL, _gloffset_Vertex3d), + NAME_FUNC_OFFSET( 1615, glVertex3dv, glVertex3dv, NULL, _gloffset_Vertex3dv), + NAME_FUNC_OFFSET( 1627, glVertex3f, glVertex3f, NULL, _gloffset_Vertex3f), + NAME_FUNC_OFFSET( 1638, glVertex3fv, glVertex3fv, NULL, _gloffset_Vertex3fv), + NAME_FUNC_OFFSET( 1650, glVertex3i, glVertex3i, NULL, _gloffset_Vertex3i), + NAME_FUNC_OFFSET( 1661, glVertex3iv, glVertex3iv, NULL, _gloffset_Vertex3iv), + NAME_FUNC_OFFSET( 1673, glVertex3s, glVertex3s, NULL, _gloffset_Vertex3s), + NAME_FUNC_OFFSET( 1684, glVertex3sv, glVertex3sv, NULL, _gloffset_Vertex3sv), + NAME_FUNC_OFFSET( 1696, glVertex4d, glVertex4d, NULL, _gloffset_Vertex4d), + NAME_FUNC_OFFSET( 1707, glVertex4dv, glVertex4dv, NULL, _gloffset_Vertex4dv), + NAME_FUNC_OFFSET( 1719, glVertex4f, glVertex4f, NULL, _gloffset_Vertex4f), + NAME_FUNC_OFFSET( 1730, glVertex4fv, glVertex4fv, NULL, _gloffset_Vertex4fv), + NAME_FUNC_OFFSET( 1742, glVertex4i, glVertex4i, NULL, _gloffset_Vertex4i), + NAME_FUNC_OFFSET( 1753, glVertex4iv, glVertex4iv, NULL, _gloffset_Vertex4iv), + NAME_FUNC_OFFSET( 1765, glVertex4s, glVertex4s, NULL, _gloffset_Vertex4s), + NAME_FUNC_OFFSET( 1776, glVertex4sv, glVertex4sv, NULL, _gloffset_Vertex4sv), + NAME_FUNC_OFFSET( 1788, glClipPlane, glClipPlane, NULL, _gloffset_ClipPlane), + NAME_FUNC_OFFSET( 1800, glColorMaterial, glColorMaterial, NULL, _gloffset_ColorMaterial), + NAME_FUNC_OFFSET( 1816, glCullFace, glCullFace, NULL, _gloffset_CullFace), + NAME_FUNC_OFFSET( 1827, glFogf, glFogf, NULL, _gloffset_Fogf), + NAME_FUNC_OFFSET( 1834, glFogfv, glFogfv, NULL, _gloffset_Fogfv), + NAME_FUNC_OFFSET( 1842, glFogi, glFogi, NULL, _gloffset_Fogi), + NAME_FUNC_OFFSET( 1849, glFogiv, glFogiv, NULL, _gloffset_Fogiv), + NAME_FUNC_OFFSET( 1857, glFrontFace, glFrontFace, NULL, _gloffset_FrontFace), + NAME_FUNC_OFFSET( 1869, glHint, glHint, NULL, _gloffset_Hint), + NAME_FUNC_OFFSET( 1876, glLightf, glLightf, NULL, _gloffset_Lightf), + NAME_FUNC_OFFSET( 1885, glLightfv, glLightfv, NULL, _gloffset_Lightfv), + NAME_FUNC_OFFSET( 1895, glLighti, glLighti, NULL, _gloffset_Lighti), + NAME_FUNC_OFFSET( 1904, glLightiv, glLightiv, NULL, _gloffset_Lightiv), + NAME_FUNC_OFFSET( 1914, glLightModelf, glLightModelf, NULL, _gloffset_LightModelf), + NAME_FUNC_OFFSET( 1928, glLightModelfv, glLightModelfv, NULL, _gloffset_LightModelfv), + NAME_FUNC_OFFSET( 1943, glLightModeli, glLightModeli, NULL, _gloffset_LightModeli), + NAME_FUNC_OFFSET( 1957, glLightModeliv, glLightModeliv, NULL, _gloffset_LightModeliv), + NAME_FUNC_OFFSET( 1972, glLineStipple, glLineStipple, NULL, _gloffset_LineStipple), + NAME_FUNC_OFFSET( 1986, glLineWidth, glLineWidth, NULL, _gloffset_LineWidth), + NAME_FUNC_OFFSET( 1998, glMaterialf, glMaterialf, NULL, _gloffset_Materialf), + NAME_FUNC_OFFSET( 2010, glMaterialfv, glMaterialfv, NULL, _gloffset_Materialfv), + NAME_FUNC_OFFSET( 2023, glMateriali, glMateriali, NULL, _gloffset_Materiali), + NAME_FUNC_OFFSET( 2035, glMaterialiv, glMaterialiv, NULL, _gloffset_Materialiv), + NAME_FUNC_OFFSET( 2048, glPointSize, glPointSize, NULL, _gloffset_PointSize), + NAME_FUNC_OFFSET( 2060, glPolygonMode, glPolygonMode, NULL, _gloffset_PolygonMode), + NAME_FUNC_OFFSET( 2074, glPolygonStipple, glPolygonStipple, NULL, _gloffset_PolygonStipple), + NAME_FUNC_OFFSET( 2091, glScissor, glScissor, NULL, _gloffset_Scissor), + NAME_FUNC_OFFSET( 2101, glShadeModel, glShadeModel, NULL, _gloffset_ShadeModel), + NAME_FUNC_OFFSET( 2114, glTexParameterf, glTexParameterf, NULL, _gloffset_TexParameterf), + NAME_FUNC_OFFSET( 2130, glTexParameterfv, glTexParameterfv, NULL, _gloffset_TexParameterfv), + NAME_FUNC_OFFSET( 2147, glTexParameteri, glTexParameteri, NULL, _gloffset_TexParameteri), + NAME_FUNC_OFFSET( 2163, glTexParameteriv, glTexParameteriv, NULL, _gloffset_TexParameteriv), + NAME_FUNC_OFFSET( 2180, glTexImage1D, glTexImage1D, NULL, _gloffset_TexImage1D), + NAME_FUNC_OFFSET( 2193, glTexImage2D, glTexImage2D, NULL, _gloffset_TexImage2D), + NAME_FUNC_OFFSET( 2206, glTexEnvf, glTexEnvf, NULL, _gloffset_TexEnvf), + NAME_FUNC_OFFSET( 2216, glTexEnvfv, glTexEnvfv, NULL, _gloffset_TexEnvfv), + NAME_FUNC_OFFSET( 2227, glTexEnvi, glTexEnvi, NULL, _gloffset_TexEnvi), + NAME_FUNC_OFFSET( 2237, glTexEnviv, glTexEnviv, NULL, _gloffset_TexEnviv), + NAME_FUNC_OFFSET( 2248, glTexGend, glTexGend, NULL, _gloffset_TexGend), + NAME_FUNC_OFFSET( 2258, glTexGendv, glTexGendv, NULL, _gloffset_TexGendv), + NAME_FUNC_OFFSET( 2269, glTexGenf, glTexGenf, NULL, _gloffset_TexGenf), + NAME_FUNC_OFFSET( 2279, glTexGenfv, glTexGenfv, NULL, _gloffset_TexGenfv), + NAME_FUNC_OFFSET( 2290, glTexGeni, glTexGeni, NULL, _gloffset_TexGeni), + NAME_FUNC_OFFSET( 2300, glTexGeniv, glTexGeniv, NULL, _gloffset_TexGeniv), + NAME_FUNC_OFFSET( 2311, glFeedbackBuffer, glFeedbackBuffer, NULL, _gloffset_FeedbackBuffer), + NAME_FUNC_OFFSET( 2328, glSelectBuffer, glSelectBuffer, NULL, _gloffset_SelectBuffer), + NAME_FUNC_OFFSET( 2343, glRenderMode, glRenderMode, NULL, _gloffset_RenderMode), + NAME_FUNC_OFFSET( 2356, glInitNames, glInitNames, NULL, _gloffset_InitNames), + NAME_FUNC_OFFSET( 2368, glLoadName, glLoadName, NULL, _gloffset_LoadName), + NAME_FUNC_OFFSET( 2379, glPassThrough, glPassThrough, NULL, _gloffset_PassThrough), + NAME_FUNC_OFFSET( 2393, glPopName, glPopName, NULL, _gloffset_PopName), + NAME_FUNC_OFFSET( 2403, glPushName, glPushName, NULL, _gloffset_PushName), + NAME_FUNC_OFFSET( 2414, glDrawBuffer, glDrawBuffer, NULL, _gloffset_DrawBuffer), + NAME_FUNC_OFFSET( 2427, glClear, glClear, NULL, _gloffset_Clear), + NAME_FUNC_OFFSET( 2435, glClearAccum, glClearAccum, NULL, _gloffset_ClearAccum), + NAME_FUNC_OFFSET( 2448, glClearIndex, glClearIndex, NULL, _gloffset_ClearIndex), + NAME_FUNC_OFFSET( 2461, glClearColor, glClearColor, NULL, _gloffset_ClearColor), + NAME_FUNC_OFFSET( 2474, glClearStencil, glClearStencil, NULL, _gloffset_ClearStencil), + NAME_FUNC_OFFSET( 2489, glClearDepth, glClearDepth, NULL, _gloffset_ClearDepth), + NAME_FUNC_OFFSET( 2502, glStencilMask, glStencilMask, NULL, _gloffset_StencilMask), + NAME_FUNC_OFFSET( 2516, glColorMask, glColorMask, NULL, _gloffset_ColorMask), + NAME_FUNC_OFFSET( 2528, glDepthMask, glDepthMask, NULL, _gloffset_DepthMask), + NAME_FUNC_OFFSET( 2540, glIndexMask, glIndexMask, NULL, _gloffset_IndexMask), + NAME_FUNC_OFFSET( 2552, glAccum, glAccum, NULL, _gloffset_Accum), + NAME_FUNC_OFFSET( 2560, glDisable, glDisable, NULL, _gloffset_Disable), + NAME_FUNC_OFFSET( 2570, glEnable, glEnable, NULL, _gloffset_Enable), + NAME_FUNC_OFFSET( 2579, glFinish, glFinish, NULL, _gloffset_Finish), + NAME_FUNC_OFFSET( 2588, glFlush, glFlush, NULL, _gloffset_Flush), + NAME_FUNC_OFFSET( 2596, glPopAttrib, glPopAttrib, NULL, _gloffset_PopAttrib), + NAME_FUNC_OFFSET( 2608, glPushAttrib, glPushAttrib, NULL, _gloffset_PushAttrib), + NAME_FUNC_OFFSET( 2621, glMap1d, glMap1d, NULL, _gloffset_Map1d), + NAME_FUNC_OFFSET( 2629, glMap1f, glMap1f, NULL, _gloffset_Map1f), + NAME_FUNC_OFFSET( 2637, glMap2d, glMap2d, NULL, _gloffset_Map2d), + NAME_FUNC_OFFSET( 2645, glMap2f, glMap2f, NULL, _gloffset_Map2f), + NAME_FUNC_OFFSET( 2653, glMapGrid1d, glMapGrid1d, NULL, _gloffset_MapGrid1d), + NAME_FUNC_OFFSET( 2665, glMapGrid1f, glMapGrid1f, NULL, _gloffset_MapGrid1f), + NAME_FUNC_OFFSET( 2677, glMapGrid2d, glMapGrid2d, NULL, _gloffset_MapGrid2d), + NAME_FUNC_OFFSET( 2689, glMapGrid2f, glMapGrid2f, NULL, _gloffset_MapGrid2f), + NAME_FUNC_OFFSET( 2701, glEvalCoord1d, glEvalCoord1d, NULL, _gloffset_EvalCoord1d), + NAME_FUNC_OFFSET( 2715, glEvalCoord1dv, glEvalCoord1dv, NULL, _gloffset_EvalCoord1dv), + NAME_FUNC_OFFSET( 2730, glEvalCoord1f, glEvalCoord1f, NULL, _gloffset_EvalCoord1f), + NAME_FUNC_OFFSET( 2744, glEvalCoord1fv, glEvalCoord1fv, NULL, _gloffset_EvalCoord1fv), + NAME_FUNC_OFFSET( 2759, glEvalCoord2d, glEvalCoord2d, NULL, _gloffset_EvalCoord2d), + NAME_FUNC_OFFSET( 2773, glEvalCoord2dv, glEvalCoord2dv, NULL, _gloffset_EvalCoord2dv), + NAME_FUNC_OFFSET( 2788, glEvalCoord2f, glEvalCoord2f, NULL, _gloffset_EvalCoord2f), + NAME_FUNC_OFFSET( 2802, glEvalCoord2fv, glEvalCoord2fv, NULL, _gloffset_EvalCoord2fv), + NAME_FUNC_OFFSET( 2817, glEvalMesh1, glEvalMesh1, NULL, _gloffset_EvalMesh1), + NAME_FUNC_OFFSET( 2829, glEvalPoint1, glEvalPoint1, NULL, _gloffset_EvalPoint1), + NAME_FUNC_OFFSET( 2842, glEvalMesh2, glEvalMesh2, NULL, _gloffset_EvalMesh2), + NAME_FUNC_OFFSET( 2854, glEvalPoint2, glEvalPoint2, NULL, _gloffset_EvalPoint2), + NAME_FUNC_OFFSET( 2867, glAlphaFunc, glAlphaFunc, NULL, _gloffset_AlphaFunc), + NAME_FUNC_OFFSET( 2879, glBlendFunc, glBlendFunc, NULL, _gloffset_BlendFunc), + NAME_FUNC_OFFSET( 2891, glLogicOp, glLogicOp, NULL, _gloffset_LogicOp), + NAME_FUNC_OFFSET( 2901, glStencilFunc, glStencilFunc, NULL, _gloffset_StencilFunc), + NAME_FUNC_OFFSET( 2915, glStencilOp, glStencilOp, NULL, _gloffset_StencilOp), + NAME_FUNC_OFFSET( 2927, glDepthFunc, glDepthFunc, NULL, _gloffset_DepthFunc), + NAME_FUNC_OFFSET( 2939, glPixelZoom, glPixelZoom, NULL, _gloffset_PixelZoom), + NAME_FUNC_OFFSET( 2951, glPixelTransferf, glPixelTransferf, NULL, _gloffset_PixelTransferf), + NAME_FUNC_OFFSET( 2968, glPixelTransferi, glPixelTransferi, NULL, _gloffset_PixelTransferi), + NAME_FUNC_OFFSET( 2985, glPixelStoref, glPixelStoref, NULL, _gloffset_PixelStoref), + NAME_FUNC_OFFSET( 2999, glPixelStorei, glPixelStorei, NULL, _gloffset_PixelStorei), + NAME_FUNC_OFFSET( 3013, glPixelMapfv, glPixelMapfv, NULL, _gloffset_PixelMapfv), + NAME_FUNC_OFFSET( 3026, glPixelMapuiv, glPixelMapuiv, NULL, _gloffset_PixelMapuiv), + NAME_FUNC_OFFSET( 3040, glPixelMapusv, glPixelMapusv, NULL, _gloffset_PixelMapusv), + NAME_FUNC_OFFSET( 3054, glReadBuffer, glReadBuffer, NULL, _gloffset_ReadBuffer), + NAME_FUNC_OFFSET( 3067, glCopyPixels, glCopyPixels, NULL, _gloffset_CopyPixels), + NAME_FUNC_OFFSET( 3080, glReadPixels, glReadPixels, NULL, _gloffset_ReadPixels), + NAME_FUNC_OFFSET( 3093, glDrawPixels, glDrawPixels, NULL, _gloffset_DrawPixels), + NAME_FUNC_OFFSET( 3106, glGetBooleanv, glGetBooleanv, NULL, _gloffset_GetBooleanv), + NAME_FUNC_OFFSET( 3120, glGetClipPlane, glGetClipPlane, NULL, _gloffset_GetClipPlane), + NAME_FUNC_OFFSET( 3135, glGetDoublev, glGetDoublev, NULL, _gloffset_GetDoublev), + NAME_FUNC_OFFSET( 3148, glGetError, glGetError, NULL, _gloffset_GetError), + NAME_FUNC_OFFSET( 3159, glGetFloatv, glGetFloatv, NULL, _gloffset_GetFloatv), + NAME_FUNC_OFFSET( 3171, glGetIntegerv, glGetIntegerv, NULL, _gloffset_GetIntegerv), + NAME_FUNC_OFFSET( 3185, glGetLightfv, glGetLightfv, NULL, _gloffset_GetLightfv), + NAME_FUNC_OFFSET( 3198, glGetLightiv, glGetLightiv, NULL, _gloffset_GetLightiv), + NAME_FUNC_OFFSET( 3211, glGetMapdv, glGetMapdv, NULL, _gloffset_GetMapdv), + NAME_FUNC_OFFSET( 3222, glGetMapfv, glGetMapfv, NULL, _gloffset_GetMapfv), + NAME_FUNC_OFFSET( 3233, glGetMapiv, glGetMapiv, NULL, _gloffset_GetMapiv), + NAME_FUNC_OFFSET( 3244, glGetMaterialfv, glGetMaterialfv, NULL, _gloffset_GetMaterialfv), + NAME_FUNC_OFFSET( 3260, glGetMaterialiv, glGetMaterialiv, NULL, _gloffset_GetMaterialiv), + NAME_FUNC_OFFSET( 3276, glGetPixelMapfv, glGetPixelMapfv, NULL, _gloffset_GetPixelMapfv), + NAME_FUNC_OFFSET( 3292, glGetPixelMapuiv, glGetPixelMapuiv, NULL, _gloffset_GetPixelMapuiv), + NAME_FUNC_OFFSET( 3309, glGetPixelMapusv, glGetPixelMapusv, NULL, _gloffset_GetPixelMapusv), + NAME_FUNC_OFFSET( 3326, glGetPolygonStipple, glGetPolygonStipple, NULL, _gloffset_GetPolygonStipple), + NAME_FUNC_OFFSET( 3346, glGetString, glGetString, NULL, _gloffset_GetString), + NAME_FUNC_OFFSET( 3358, glGetTexEnvfv, glGetTexEnvfv, NULL, _gloffset_GetTexEnvfv), + NAME_FUNC_OFFSET( 3372, glGetTexEnviv, glGetTexEnviv, NULL, _gloffset_GetTexEnviv), + NAME_FUNC_OFFSET( 3386, glGetTexGendv, glGetTexGendv, NULL, _gloffset_GetTexGendv), + NAME_FUNC_OFFSET( 3400, glGetTexGenfv, glGetTexGenfv, NULL, _gloffset_GetTexGenfv), + NAME_FUNC_OFFSET( 3414, glGetTexGeniv, glGetTexGeniv, NULL, _gloffset_GetTexGeniv), + NAME_FUNC_OFFSET( 3428, glGetTexImage, glGetTexImage, NULL, _gloffset_GetTexImage), + NAME_FUNC_OFFSET( 3442, glGetTexParameterfv, glGetTexParameterfv, NULL, _gloffset_GetTexParameterfv), + NAME_FUNC_OFFSET( 3462, glGetTexParameteriv, glGetTexParameteriv, NULL, _gloffset_GetTexParameteriv), + NAME_FUNC_OFFSET( 3482, glGetTexLevelParameterfv, glGetTexLevelParameterfv, NULL, _gloffset_GetTexLevelParameterfv), + NAME_FUNC_OFFSET( 3507, glGetTexLevelParameteriv, glGetTexLevelParameteriv, NULL, _gloffset_GetTexLevelParameteriv), + NAME_FUNC_OFFSET( 3532, glIsEnabled, glIsEnabled, NULL, _gloffset_IsEnabled), + NAME_FUNC_OFFSET( 3544, glIsList, glIsList, NULL, _gloffset_IsList), + NAME_FUNC_OFFSET( 3553, glDepthRange, glDepthRange, NULL, _gloffset_DepthRange), + NAME_FUNC_OFFSET( 3566, glFrustum, glFrustum, NULL, _gloffset_Frustum), + NAME_FUNC_OFFSET( 3576, glLoadIdentity, glLoadIdentity, NULL, _gloffset_LoadIdentity), + NAME_FUNC_OFFSET( 3591, glLoadMatrixf, glLoadMatrixf, NULL, _gloffset_LoadMatrixf), + NAME_FUNC_OFFSET( 3605, glLoadMatrixd, glLoadMatrixd, NULL, _gloffset_LoadMatrixd), + NAME_FUNC_OFFSET( 3619, glMatrixMode, glMatrixMode, NULL, _gloffset_MatrixMode), + NAME_FUNC_OFFSET( 3632, glMultMatrixf, glMultMatrixf, NULL, _gloffset_MultMatrixf), + NAME_FUNC_OFFSET( 3646, glMultMatrixd, glMultMatrixd, NULL, _gloffset_MultMatrixd), + NAME_FUNC_OFFSET( 3660, glOrtho, glOrtho, NULL, _gloffset_Ortho), + NAME_FUNC_OFFSET( 3668, glPopMatrix, glPopMatrix, NULL, _gloffset_PopMatrix), + NAME_FUNC_OFFSET( 3680, glPushMatrix, glPushMatrix, NULL, _gloffset_PushMatrix), + NAME_FUNC_OFFSET( 3693, glRotated, glRotated, NULL, _gloffset_Rotated), + NAME_FUNC_OFFSET( 3703, glRotatef, glRotatef, NULL, _gloffset_Rotatef), + NAME_FUNC_OFFSET( 3713, glScaled, glScaled, NULL, _gloffset_Scaled), + NAME_FUNC_OFFSET( 3722, glScalef, glScalef, NULL, _gloffset_Scalef), + NAME_FUNC_OFFSET( 3731, glTranslated, glTranslated, NULL, _gloffset_Translated), + NAME_FUNC_OFFSET( 3744, glTranslatef, glTranslatef, NULL, _gloffset_Translatef), + NAME_FUNC_OFFSET( 3757, glViewport, glViewport, NULL, _gloffset_Viewport), + NAME_FUNC_OFFSET( 3768, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement), + NAME_FUNC_OFFSET( 3783, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture), + NAME_FUNC_OFFSET( 3797, glColorPointer, glColorPointer, NULL, _gloffset_ColorPointer), + NAME_FUNC_OFFSET( 3812, glDisableClientState, glDisableClientState, NULL, _gloffset_DisableClientState), + NAME_FUNC_OFFSET( 3833, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays), + NAME_FUNC_OFFSET( 3846, glDrawElements, glDrawElements, NULL, _gloffset_DrawElements), + NAME_FUNC_OFFSET( 3861, glEdgeFlagPointer, glEdgeFlagPointer, NULL, _gloffset_EdgeFlagPointer), + NAME_FUNC_OFFSET( 3879, glEnableClientState, glEnableClientState, NULL, _gloffset_EnableClientState), + NAME_FUNC_OFFSET( 3899, glIndexPointer, glIndexPointer, NULL, _gloffset_IndexPointer), + NAME_FUNC_OFFSET( 3914, glIndexub, glIndexub, NULL, _gloffset_Indexub), + NAME_FUNC_OFFSET( 3924, glIndexubv, glIndexubv, NULL, _gloffset_Indexubv), + NAME_FUNC_OFFSET( 3935, glInterleavedArrays, glInterleavedArrays, NULL, _gloffset_InterleavedArrays), + NAME_FUNC_OFFSET( 3955, glNormalPointer, glNormalPointer, NULL, _gloffset_NormalPointer), + NAME_FUNC_OFFSET( 3971, glPolygonOffset, glPolygonOffset, NULL, _gloffset_PolygonOffset), + NAME_FUNC_OFFSET( 3987, glTexCoordPointer, glTexCoordPointer, NULL, _gloffset_TexCoordPointer), + NAME_FUNC_OFFSET( 4005, glVertexPointer, glVertexPointer, NULL, _gloffset_VertexPointer), + NAME_FUNC_OFFSET( 4021, glAreTexturesResident, glAreTexturesResident, NULL, _gloffset_AreTexturesResident), + NAME_FUNC_OFFSET( 4043, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D), + NAME_FUNC_OFFSET( 4060, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D), + NAME_FUNC_OFFSET( 4077, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D), + NAME_FUNC_OFFSET( 4097, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D), + NAME_FUNC_OFFSET( 4117, glDeleteTextures, glDeleteTextures, NULL, _gloffset_DeleteTextures), + NAME_FUNC_OFFSET( 4134, glGenTextures, glGenTextures, NULL, _gloffset_GenTextures), + NAME_FUNC_OFFSET( 4148, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv), + NAME_FUNC_OFFSET( 4162, glIsTexture, glIsTexture, NULL, _gloffset_IsTexture), + NAME_FUNC_OFFSET( 4174, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures), + NAME_FUNC_OFFSET( 4195, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D), + NAME_FUNC_OFFSET( 4211, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D), + NAME_FUNC_OFFSET( 4227, glPopClientAttrib, glPopClientAttrib, NULL, _gloffset_PopClientAttrib), + NAME_FUNC_OFFSET( 4245, glPushClientAttrib, glPushClientAttrib, NULL, _gloffset_PushClientAttrib), + NAME_FUNC_OFFSET( 4264, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor), + NAME_FUNC_OFFSET( 4277, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation), + NAME_FUNC_OFFSET( 4293, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements), + NAME_FUNC_OFFSET( 4313, glColorTable, glColorTable, NULL, _gloffset_ColorTable), + NAME_FUNC_OFFSET( 4326, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv), + NAME_FUNC_OFFSET( 4350, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv), + NAME_FUNC_OFFSET( 4374, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable), + NAME_FUNC_OFFSET( 4391, glGetColorTable, glGetColorTable, NULL, _gloffset_GetColorTable), + NAME_FUNC_OFFSET( 4407, glGetColorTableParameterfv, glGetColorTableParameterfv, NULL, _gloffset_GetColorTableParameterfv), + NAME_FUNC_OFFSET( 4434, glGetColorTableParameteriv, glGetColorTableParameteriv, NULL, _gloffset_GetColorTableParameteriv), + NAME_FUNC_OFFSET( 4461, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable), + NAME_FUNC_OFFSET( 4477, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable), + NAME_FUNC_OFFSET( 4497, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D), + NAME_FUNC_OFFSET( 4519, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D), + NAME_FUNC_OFFSET( 4541, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf), + NAME_FUNC_OFFSET( 4565, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv), + NAME_FUNC_OFFSET( 4590, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri), + NAME_FUNC_OFFSET( 4614, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv), + NAME_FUNC_OFFSET( 4639, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D), + NAME_FUNC_OFFSET( 4665, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D), + NAME_FUNC_OFFSET( 4691, glGetConvolutionFilter, glGetConvolutionFilter, NULL, _gloffset_GetConvolutionFilter), + NAME_FUNC_OFFSET( 4714, glGetConvolutionParameterfv, glGetConvolutionParameterfv, NULL, _gloffset_GetConvolutionParameterfv), + NAME_FUNC_OFFSET( 4742, glGetConvolutionParameteriv, glGetConvolutionParameteriv, NULL, _gloffset_GetConvolutionParameteriv), + NAME_FUNC_OFFSET( 4770, glGetSeparableFilter, glGetSeparableFilter, NULL, _gloffset_GetSeparableFilter), + NAME_FUNC_OFFSET( 4791, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D), + NAME_FUNC_OFFSET( 4811, glGetHistogram, glGetHistogram, NULL, _gloffset_GetHistogram), + NAME_FUNC_OFFSET( 4826, glGetHistogramParameterfv, glGetHistogramParameterfv, NULL, _gloffset_GetHistogramParameterfv), + NAME_FUNC_OFFSET( 4852, glGetHistogramParameteriv, glGetHistogramParameteriv, NULL, _gloffset_GetHistogramParameteriv), + NAME_FUNC_OFFSET( 4878, glGetMinmax, glGetMinmax, NULL, _gloffset_GetMinmax), + NAME_FUNC_OFFSET( 4890, glGetMinmaxParameterfv, glGetMinmaxParameterfv, NULL, _gloffset_GetMinmaxParameterfv), + NAME_FUNC_OFFSET( 4913, glGetMinmaxParameteriv, glGetMinmaxParameteriv, NULL, _gloffset_GetMinmaxParameteriv), + NAME_FUNC_OFFSET( 4936, glHistogram, glHistogram, NULL, _gloffset_Histogram), + NAME_FUNC_OFFSET( 4948, glMinmax, glMinmax, NULL, _gloffset_Minmax), + NAME_FUNC_OFFSET( 4957, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram), + NAME_FUNC_OFFSET( 4974, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax), + NAME_FUNC_OFFSET( 4988, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D), + NAME_FUNC_OFFSET( 5001, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D), + NAME_FUNC_OFFSET( 5017, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D), + NAME_FUNC_OFFSET( 5037, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB), + NAME_FUNC_OFFSET( 5056, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB), + NAME_FUNC_OFFSET( 5081, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB), + NAME_FUNC_OFFSET( 5102, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB), + NAME_FUNC_OFFSET( 5124, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB), + NAME_FUNC_OFFSET( 5145, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB), + NAME_FUNC_OFFSET( 5167, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB), + NAME_FUNC_OFFSET( 5188, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB), + NAME_FUNC_OFFSET( 5210, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB), + NAME_FUNC_OFFSET( 5231, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB), + NAME_FUNC_OFFSET( 5253, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB), + NAME_FUNC_OFFSET( 5274, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB), + NAME_FUNC_OFFSET( 5296, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB), + NAME_FUNC_OFFSET( 5317, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB), + NAME_FUNC_OFFSET( 5339, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB), + NAME_FUNC_OFFSET( 5360, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB), + NAME_FUNC_OFFSET( 5382, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB), + NAME_FUNC_OFFSET( 5403, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB), + NAME_FUNC_OFFSET( 5425, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB), + NAME_FUNC_OFFSET( 5446, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB), + NAME_FUNC_OFFSET( 5468, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB), + NAME_FUNC_OFFSET( 5489, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB), + NAME_FUNC_OFFSET( 5511, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB), + NAME_FUNC_OFFSET( 5532, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB), + NAME_FUNC_OFFSET( 5554, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB), + NAME_FUNC_OFFSET( 5575, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB), + NAME_FUNC_OFFSET( 5597, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB), + NAME_FUNC_OFFSET( 5618, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB), + NAME_FUNC_OFFSET( 5640, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB), + NAME_FUNC_OFFSET( 5661, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB), + NAME_FUNC_OFFSET( 5683, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB), + NAME_FUNC_OFFSET( 5704, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB), + NAME_FUNC_OFFSET( 5726, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB), + NAME_FUNC_OFFSET( 5747, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB), + NAME_FUNC_OFFSET( 5769, glAttachShader, glAttachShader, NULL, _gloffset_AttachShader), + NAME_FUNC_OFFSET( 5784, glCreateProgram, glCreateProgram, NULL, _gloffset_CreateProgram), + NAME_FUNC_OFFSET( 5800, glCreateShader, glCreateShader, NULL, _gloffset_CreateShader), + NAME_FUNC_OFFSET( 5815, glDeleteProgram, glDeleteProgram, NULL, _gloffset_DeleteProgram), + NAME_FUNC_OFFSET( 5831, glDeleteShader, glDeleteShader, NULL, _gloffset_DeleteShader), + NAME_FUNC_OFFSET( 5846, glDetachShader, glDetachShader, NULL, _gloffset_DetachShader), + NAME_FUNC_OFFSET( 5861, glGetAttachedShaders, glGetAttachedShaders, NULL, _gloffset_GetAttachedShaders), + NAME_FUNC_OFFSET( 5882, glGetProgramInfoLog, glGetProgramInfoLog, NULL, _gloffset_GetProgramInfoLog), + NAME_FUNC_OFFSET( 5902, glGetProgramiv, glGetProgramiv, NULL, _gloffset_GetProgramiv), + NAME_FUNC_OFFSET( 5917, glGetShaderInfoLog, glGetShaderInfoLog, NULL, _gloffset_GetShaderInfoLog), + NAME_FUNC_OFFSET( 5936, glGetShaderiv, glGetShaderiv, NULL, _gloffset_GetShaderiv), + NAME_FUNC_OFFSET( 5950, glIsProgram, glIsProgram, NULL, _gloffset_IsProgram), + NAME_FUNC_OFFSET( 5962, glIsShader, glIsShader, NULL, _gloffset_IsShader), + NAME_FUNC_OFFSET( 5973, glStencilFuncSeparate, glStencilFuncSeparate, NULL, _gloffset_StencilFuncSeparate), + NAME_FUNC_OFFSET( 5995, glStencilMaskSeparate, glStencilMaskSeparate, NULL, _gloffset_StencilMaskSeparate), + NAME_FUNC_OFFSET( 6017, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate), + NAME_FUNC_OFFSET( 6037, glUniformMatrix2x3fv, glUniformMatrix2x3fv, NULL, _gloffset_UniformMatrix2x3fv), + NAME_FUNC_OFFSET( 6058, glUniformMatrix2x4fv, glUniformMatrix2x4fv, NULL, _gloffset_UniformMatrix2x4fv), + NAME_FUNC_OFFSET( 6079, glUniformMatrix3x2fv, glUniformMatrix3x2fv, NULL, _gloffset_UniformMatrix3x2fv), + NAME_FUNC_OFFSET( 6100, glUniformMatrix3x4fv, glUniformMatrix3x4fv, NULL, _gloffset_UniformMatrix3x4fv), + NAME_FUNC_OFFSET( 6121, glUniformMatrix4x2fv, glUniformMatrix4x2fv, NULL, _gloffset_UniformMatrix4x2fv), + NAME_FUNC_OFFSET( 6142, glUniformMatrix4x3fv, glUniformMatrix4x3fv, NULL, _gloffset_UniformMatrix4x3fv), + NAME_FUNC_OFFSET( 6163, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB), + NAME_FUNC_OFFSET( 6189, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB), + NAME_FUNC_OFFSET( 6215, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB), + NAME_FUNC_OFFSET( 6241, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB), + NAME_FUNC_OFFSET( 6267, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB), + NAME_FUNC_OFFSET( 6287, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB), + NAME_FUNC_OFFSET( 6313, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB), + NAME_FUNC_OFFSET( 6339, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB), + NAME_FUNC_OFFSET( 6365, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB), + NAME_FUNC_OFFSET( 6394, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB), + NAME_FUNC_OFFSET( 6423, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB), + NAME_FUNC_OFFSET( 6452, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB), + NAME_FUNC_OFFSET( 6479, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB), + NAME_FUNC_OFFSET( 6509, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB), + NAME_FUNC_OFFSET( 6538, glGetProgramEnvParameterdvARB, glGetProgramEnvParameterdvARB, NULL, _gloffset_GetProgramEnvParameterdvARB), + NAME_FUNC_OFFSET( 6568, glGetProgramEnvParameterfvARB, glGetProgramEnvParameterfvARB, NULL, _gloffset_GetProgramEnvParameterfvARB), + NAME_FUNC_OFFSET( 6598, glGetProgramLocalParameterdvARB, glGetProgramLocalParameterdvARB, NULL, _gloffset_GetProgramLocalParameterdvARB), + NAME_FUNC_OFFSET( 6630, glGetProgramLocalParameterfvARB, glGetProgramLocalParameterfvARB, NULL, _gloffset_GetProgramLocalParameterfvARB), + NAME_FUNC_OFFSET( 6662, glGetProgramStringARB, glGetProgramStringARB, NULL, _gloffset_GetProgramStringARB), + NAME_FUNC_OFFSET( 6684, glGetProgramivARB, glGetProgramivARB, NULL, _gloffset_GetProgramivARB), + NAME_FUNC_OFFSET( 6702, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB), + NAME_FUNC_OFFSET( 6725, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB), + NAME_FUNC_OFFSET( 6748, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB), + NAME_FUNC_OFFSET( 6771, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB), + NAME_FUNC_OFFSET( 6798, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB), + NAME_FUNC_OFFSET( 6826, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB), + NAME_FUNC_OFFSET( 6853, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB), + NAME_FUNC_OFFSET( 6881, glProgramLocalParameter4dARB, glProgramLocalParameter4dARB, NULL, _gloffset_ProgramLocalParameter4dARB), + NAME_FUNC_OFFSET( 6910, glProgramLocalParameter4dvARB, glProgramLocalParameter4dvARB, NULL, _gloffset_ProgramLocalParameter4dvARB), + NAME_FUNC_OFFSET( 6940, glProgramLocalParameter4fARB, glProgramLocalParameter4fARB, NULL, _gloffset_ProgramLocalParameter4fARB), + NAME_FUNC_OFFSET( 6969, glProgramLocalParameter4fvARB, glProgramLocalParameter4fvARB, NULL, _gloffset_ProgramLocalParameter4fvARB), + NAME_FUNC_OFFSET( 6999, glProgramStringARB, glProgramStringARB, NULL, _gloffset_ProgramStringARB), + NAME_FUNC_OFFSET( 7018, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB), + NAME_FUNC_OFFSET( 7038, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB), + NAME_FUNC_OFFSET( 7059, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB), + NAME_FUNC_OFFSET( 7079, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB), + NAME_FUNC_OFFSET( 7100, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB), + NAME_FUNC_OFFSET( 7120, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB), + NAME_FUNC_OFFSET( 7141, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB), + NAME_FUNC_OFFSET( 7161, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB), + NAME_FUNC_OFFSET( 7182, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB), + NAME_FUNC_OFFSET( 7202, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB), + NAME_FUNC_OFFSET( 7223, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB), + NAME_FUNC_OFFSET( 7243, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB), + NAME_FUNC_OFFSET( 7264, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB), + NAME_FUNC_OFFSET( 7284, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB), + NAME_FUNC_OFFSET( 7305, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB), + NAME_FUNC_OFFSET( 7325, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB), + NAME_FUNC_OFFSET( 7346, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB), + NAME_FUNC_OFFSET( 7366, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB), + NAME_FUNC_OFFSET( 7387, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB), + NAME_FUNC_OFFSET( 7409, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB), + NAME_FUNC_OFFSET( 7431, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB), + NAME_FUNC_OFFSET( 7453, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB), + NAME_FUNC_OFFSET( 7475, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB), + NAME_FUNC_OFFSET( 7498, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB), + NAME_FUNC_OFFSET( 7521, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB), + NAME_FUNC_OFFSET( 7544, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB), + NAME_FUNC_OFFSET( 7565, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB), + NAME_FUNC_OFFSET( 7585, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB), + NAME_FUNC_OFFSET( 7606, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB), + NAME_FUNC_OFFSET( 7626, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB), + NAME_FUNC_OFFSET( 7647, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB), + NAME_FUNC_OFFSET( 7668, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB), + NAME_FUNC_OFFSET( 7688, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB), + NAME_FUNC_OFFSET( 7709, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB), + NAME_FUNC_OFFSET( 7731, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB), + NAME_FUNC_OFFSET( 7753, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB), + NAME_FUNC_OFFSET( 7775, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB), + NAME_FUNC_OFFSET( 7800, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB), + NAME_FUNC_OFFSET( 7816, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB), + NAME_FUNC_OFFSET( 7832, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB), + NAME_FUNC_OFFSET( 7851, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB), + NAME_FUNC_OFFSET( 7870, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB), + NAME_FUNC_OFFSET( 7886, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB), + NAME_FUNC_OFFSET( 7912, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB), + NAME_FUNC_OFFSET( 7935, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB), + NAME_FUNC_OFFSET( 7957, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB), + NAME_FUNC_OFFSET( 7971, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB), + NAME_FUNC_OFFSET( 7986, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB), + NAME_FUNC_OFFSET( 8003, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB), + NAME_FUNC_OFFSET( 8019, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB), + NAME_FUNC_OFFSET( 8038, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB), + NAME_FUNC_OFFSET( 8052, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB), + NAME_FUNC_OFFSET( 8068, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB), + NAME_FUNC_OFFSET( 8090, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB), + NAME_FUNC_OFFSET( 8113, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB), + NAME_FUNC_OFFSET( 8129, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB), + NAME_FUNC_OFFSET( 8142, glAttachObjectARB, glAttachObjectARB, NULL, _gloffset_AttachObjectARB), + NAME_FUNC_OFFSET( 8160, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB), + NAME_FUNC_OFFSET( 8179, glCreateProgramObjectARB, glCreateProgramObjectARB, NULL, _gloffset_CreateProgramObjectARB), + NAME_FUNC_OFFSET( 8204, glCreateShaderObjectARB, glCreateShaderObjectARB, NULL, _gloffset_CreateShaderObjectARB), + NAME_FUNC_OFFSET( 8228, glDeleteObjectARB, glDeleteObjectARB, NULL, _gloffset_DeleteObjectARB), + NAME_FUNC_OFFSET( 8246, glDetachObjectARB, glDetachObjectARB, NULL, _gloffset_DetachObjectARB), + NAME_FUNC_OFFSET( 8264, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB), + NAME_FUNC_OFFSET( 8286, glGetAttachedObjectsARB, glGetAttachedObjectsARB, NULL, _gloffset_GetAttachedObjectsARB), + NAME_FUNC_OFFSET( 8310, glGetHandleARB, glGetHandleARB, NULL, _gloffset_GetHandleARB), + NAME_FUNC_OFFSET( 8325, glGetInfoLogARB, glGetInfoLogARB, NULL, _gloffset_GetInfoLogARB), + NAME_FUNC_OFFSET( 8341, glGetObjectParameterfvARB, glGetObjectParameterfvARB, NULL, _gloffset_GetObjectParameterfvARB), + NAME_FUNC_OFFSET( 8367, glGetObjectParameterivARB, glGetObjectParameterivARB, NULL, _gloffset_GetObjectParameterivARB), + NAME_FUNC_OFFSET( 8393, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB), + NAME_FUNC_OFFSET( 8414, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB), + NAME_FUNC_OFFSET( 8438, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB), + NAME_FUNC_OFFSET( 8456, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB), + NAME_FUNC_OFFSET( 8474, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB), + NAME_FUNC_OFFSET( 8491, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB), + NAME_FUNC_OFFSET( 8509, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB), + NAME_FUNC_OFFSET( 8524, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB), + NAME_FUNC_OFFSET( 8540, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB), + NAME_FUNC_OFFSET( 8555, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB), + NAME_FUNC_OFFSET( 8571, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB), + NAME_FUNC_OFFSET( 8586, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB), + NAME_FUNC_OFFSET( 8602, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB), + NAME_FUNC_OFFSET( 8617, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB), + NAME_FUNC_OFFSET( 8633, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB), + NAME_FUNC_OFFSET( 8648, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB), + NAME_FUNC_OFFSET( 8664, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB), + NAME_FUNC_OFFSET( 8679, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB), + NAME_FUNC_OFFSET( 8695, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB), + NAME_FUNC_OFFSET( 8710, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB), + NAME_FUNC_OFFSET( 8726, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB), + NAME_FUNC_OFFSET( 8741, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB), + NAME_FUNC_OFFSET( 8757, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB), + NAME_FUNC_OFFSET( 8779, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB), + NAME_FUNC_OFFSET( 8801, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB), + NAME_FUNC_OFFSET( 8823, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB), + NAME_FUNC_OFFSET( 8845, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB), + NAME_FUNC_OFFSET( 8866, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB), + NAME_FUNC_OFFSET( 8890, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB), + NAME_FUNC_OFFSET( 8911, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB), + NAME_FUNC_OFFSET( 8934, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB), + NAME_FUNC_OFFSET( 8951, glPolygonOffsetEXT, glPolygonOffsetEXT, NULL, _gloffset_PolygonOffsetEXT), + NAME_FUNC_OFFSET( 8970, gl_dispatch_stub_562, gl_dispatch_stub_562, NULL, _gloffset_GetPixelTexGenParameterfvSGIS), + NAME_FUNC_OFFSET( 9002, gl_dispatch_stub_563, gl_dispatch_stub_563, NULL, _gloffset_GetPixelTexGenParameterivSGIS), + NAME_FUNC_OFFSET( 9034, gl_dispatch_stub_564, gl_dispatch_stub_564, NULL, _gloffset_PixelTexGenParameterfSGIS), + NAME_FUNC_OFFSET( 9062, gl_dispatch_stub_565, gl_dispatch_stub_565, NULL, _gloffset_PixelTexGenParameterfvSGIS), + NAME_FUNC_OFFSET( 9091, gl_dispatch_stub_566, gl_dispatch_stub_566, NULL, _gloffset_PixelTexGenParameteriSGIS), + NAME_FUNC_OFFSET( 9119, gl_dispatch_stub_567, gl_dispatch_stub_567, NULL, _gloffset_PixelTexGenParameterivSGIS), + NAME_FUNC_OFFSET( 9148, gl_dispatch_stub_568, gl_dispatch_stub_568, NULL, _gloffset_SampleMaskSGIS), + NAME_FUNC_OFFSET( 9165, gl_dispatch_stub_569, gl_dispatch_stub_569, NULL, _gloffset_SamplePatternSGIS), + NAME_FUNC_OFFSET( 9185, glColorPointerEXT, glColorPointerEXT, NULL, _gloffset_ColorPointerEXT), + NAME_FUNC_OFFSET( 9203, glEdgeFlagPointerEXT, glEdgeFlagPointerEXT, NULL, _gloffset_EdgeFlagPointerEXT), + NAME_FUNC_OFFSET( 9224, glIndexPointerEXT, glIndexPointerEXT, NULL, _gloffset_IndexPointerEXT), + NAME_FUNC_OFFSET( 9242, glNormalPointerEXT, glNormalPointerEXT, NULL, _gloffset_NormalPointerEXT), + NAME_FUNC_OFFSET( 9261, glTexCoordPointerEXT, glTexCoordPointerEXT, NULL, _gloffset_TexCoordPointerEXT), + NAME_FUNC_OFFSET( 9282, glVertexPointerEXT, glVertexPointerEXT, NULL, _gloffset_VertexPointerEXT), + NAME_FUNC_OFFSET( 9301, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), + NAME_FUNC_OFFSET( 9322, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), + NAME_FUNC_OFFSET( 9344, glLockArraysEXT, glLockArraysEXT, NULL, _gloffset_LockArraysEXT), + NAME_FUNC_OFFSET( 9360, glUnlockArraysEXT, glUnlockArraysEXT, NULL, _gloffset_UnlockArraysEXT), + NAME_FUNC_OFFSET( 9378, gl_dispatch_stub_580, gl_dispatch_stub_580, NULL, _gloffset_CullParameterdvEXT), + NAME_FUNC_OFFSET( 9399, gl_dispatch_stub_581, gl_dispatch_stub_581, NULL, _gloffset_CullParameterfvEXT), + NAME_FUNC_OFFSET( 9420, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT), + NAME_FUNC_OFFSET( 9442, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT), + NAME_FUNC_OFFSET( 9465, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT), + NAME_FUNC_OFFSET( 9487, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT), + NAME_FUNC_OFFSET( 9510, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT), + NAME_FUNC_OFFSET( 9532, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT), + NAME_FUNC_OFFSET( 9555, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT), + NAME_FUNC_OFFSET( 9577, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT), + NAME_FUNC_OFFSET( 9600, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT), + NAME_FUNC_OFFSET( 9622, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT), + NAME_FUNC_OFFSET( 9645, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT), + NAME_FUNC_OFFSET( 9668, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT), + NAME_FUNC_OFFSET( 9692, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT), + NAME_FUNC_OFFSET( 9715, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT), + NAME_FUNC_OFFSET( 9739, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT), + NAME_FUNC_OFFSET( 9762, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT), + NAME_FUNC_OFFSET( 9786, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT), + NAME_FUNC_OFFSET( 9813, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT), + NAME_FUNC_OFFSET( 9834, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT), + NAME_FUNC_OFFSET( 9857, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT), + NAME_FUNC_OFFSET( 9878, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT), + NAME_FUNC_OFFSET( 9893, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT), + NAME_FUNC_OFFSET( 9909, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT), + NAME_FUNC_OFFSET( 9924, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT), + NAME_FUNC_OFFSET( 9940, gl_dispatch_stub_606, gl_dispatch_stub_606, NULL, _gloffset_PixelTexGenSGIX), + NAME_FUNC_OFFSET( 9958, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT), + NAME_FUNC_OFFSET( 9981, glFlushVertexArrayRangeNV, glFlushVertexArrayRangeNV, NULL, _gloffset_FlushVertexArrayRangeNV), + NAME_FUNC_OFFSET(10007, glVertexArrayRangeNV, glVertexArrayRangeNV, NULL, _gloffset_VertexArrayRangeNV), + NAME_FUNC_OFFSET(10028, glCombinerInputNV, glCombinerInputNV, NULL, _gloffset_CombinerInputNV), + NAME_FUNC_OFFSET(10046, glCombinerOutputNV, glCombinerOutputNV, NULL, _gloffset_CombinerOutputNV), + NAME_FUNC_OFFSET(10065, glCombinerParameterfNV, glCombinerParameterfNV, NULL, _gloffset_CombinerParameterfNV), + NAME_FUNC_OFFSET(10088, glCombinerParameterfvNV, glCombinerParameterfvNV, NULL, _gloffset_CombinerParameterfvNV), + NAME_FUNC_OFFSET(10112, glCombinerParameteriNV, glCombinerParameteriNV, NULL, _gloffset_CombinerParameteriNV), + NAME_FUNC_OFFSET(10135, glCombinerParameterivNV, glCombinerParameterivNV, NULL, _gloffset_CombinerParameterivNV), + NAME_FUNC_OFFSET(10159, glFinalCombinerInputNV, glFinalCombinerInputNV, NULL, _gloffset_FinalCombinerInputNV), + NAME_FUNC_OFFSET(10182, glGetCombinerInputParameterfvNV, glGetCombinerInputParameterfvNV, NULL, _gloffset_GetCombinerInputParameterfvNV), + NAME_FUNC_OFFSET(10214, glGetCombinerInputParameterivNV, glGetCombinerInputParameterivNV, NULL, _gloffset_GetCombinerInputParameterivNV), + NAME_FUNC_OFFSET(10246, glGetCombinerOutputParameterfvNV, glGetCombinerOutputParameterfvNV, NULL, _gloffset_GetCombinerOutputParameterfvNV), + NAME_FUNC_OFFSET(10279, glGetCombinerOutputParameterivNV, glGetCombinerOutputParameterivNV, NULL, _gloffset_GetCombinerOutputParameterivNV), + NAME_FUNC_OFFSET(10312, glGetFinalCombinerInputParameterfvNV, glGetFinalCombinerInputParameterfvNV, NULL, _gloffset_GetFinalCombinerInputParameterfvNV), + NAME_FUNC_OFFSET(10349, glGetFinalCombinerInputParameterivNV, glGetFinalCombinerInputParameterivNV, NULL, _gloffset_GetFinalCombinerInputParameterivNV), + NAME_FUNC_OFFSET(10386, glResizeBuffersMESA, glResizeBuffersMESA, NULL, _gloffset_ResizeBuffersMESA), + NAME_FUNC_OFFSET(10406, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA), + NAME_FUNC_OFFSET(10424, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA), + NAME_FUNC_OFFSET(10443, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA), + NAME_FUNC_OFFSET(10461, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA), + NAME_FUNC_OFFSET(10480, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA), + NAME_FUNC_OFFSET(10498, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA), + NAME_FUNC_OFFSET(10517, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA), + NAME_FUNC_OFFSET(10535, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA), + NAME_FUNC_OFFSET(10554, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA), + NAME_FUNC_OFFSET(10572, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA), + NAME_FUNC_OFFSET(10591, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA), + NAME_FUNC_OFFSET(10609, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA), + NAME_FUNC_OFFSET(10628, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA), + NAME_FUNC_OFFSET(10646, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA), + NAME_FUNC_OFFSET(10665, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA), + NAME_FUNC_OFFSET(10683, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA), + NAME_FUNC_OFFSET(10702, glWindowPos4dMESA, glWindowPos4dMESA, NULL, _gloffset_WindowPos4dMESA), + NAME_FUNC_OFFSET(10720, glWindowPos4dvMESA, glWindowPos4dvMESA, NULL, _gloffset_WindowPos4dvMESA), + NAME_FUNC_OFFSET(10739, glWindowPos4fMESA, glWindowPos4fMESA, NULL, _gloffset_WindowPos4fMESA), + NAME_FUNC_OFFSET(10757, glWindowPos4fvMESA, glWindowPos4fvMESA, NULL, _gloffset_WindowPos4fvMESA), + NAME_FUNC_OFFSET(10776, glWindowPos4iMESA, glWindowPos4iMESA, NULL, _gloffset_WindowPos4iMESA), + NAME_FUNC_OFFSET(10794, glWindowPos4ivMESA, glWindowPos4ivMESA, NULL, _gloffset_WindowPos4ivMESA), + NAME_FUNC_OFFSET(10813, glWindowPos4sMESA, glWindowPos4sMESA, NULL, _gloffset_WindowPos4sMESA), + NAME_FUNC_OFFSET(10831, glWindowPos4svMESA, glWindowPos4svMESA, NULL, _gloffset_WindowPos4svMESA), + NAME_FUNC_OFFSET(10850, gl_dispatch_stub_648, gl_dispatch_stub_648, NULL, _gloffset_MultiModeDrawArraysIBM), + NAME_FUNC_OFFSET(10875, gl_dispatch_stub_649, gl_dispatch_stub_649, NULL, _gloffset_MultiModeDrawElementsIBM), + NAME_FUNC_OFFSET(10902, gl_dispatch_stub_650, gl_dispatch_stub_650, NULL, _gloffset_DeleteFencesNV), + NAME_FUNC_OFFSET(10919, gl_dispatch_stub_651, gl_dispatch_stub_651, NULL, _gloffset_FinishFenceNV), + NAME_FUNC_OFFSET(10935, gl_dispatch_stub_652, gl_dispatch_stub_652, NULL, _gloffset_GenFencesNV), + NAME_FUNC_OFFSET(10949, gl_dispatch_stub_653, gl_dispatch_stub_653, NULL, _gloffset_GetFenceivNV), + NAME_FUNC_OFFSET(10964, gl_dispatch_stub_654, gl_dispatch_stub_654, NULL, _gloffset_IsFenceNV), + NAME_FUNC_OFFSET(10976, gl_dispatch_stub_655, gl_dispatch_stub_655, NULL, _gloffset_SetFenceNV), + NAME_FUNC_OFFSET(10989, gl_dispatch_stub_656, gl_dispatch_stub_656, NULL, _gloffset_TestFenceNV), + NAME_FUNC_OFFSET(11003, glAreProgramsResidentNV, glAreProgramsResidentNV, NULL, _gloffset_AreProgramsResidentNV), + NAME_FUNC_OFFSET(11027, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV), + NAME_FUNC_OFFSET(11043, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV), + NAME_FUNC_OFFSET(11062, glExecuteProgramNV, glExecuteProgramNV, NULL, _gloffset_ExecuteProgramNV), + NAME_FUNC_OFFSET(11081, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV), + NAME_FUNC_OFFSET(11097, glGetProgramParameterdvNV, glGetProgramParameterdvNV, NULL, _gloffset_GetProgramParameterdvNV), + NAME_FUNC_OFFSET(11123, glGetProgramParameterfvNV, glGetProgramParameterfvNV, NULL, _gloffset_GetProgramParameterfvNV), + NAME_FUNC_OFFSET(11149, glGetProgramStringNV, glGetProgramStringNV, NULL, _gloffset_GetProgramStringNV), + NAME_FUNC_OFFSET(11170, glGetProgramivNV, glGetProgramivNV, NULL, _gloffset_GetProgramivNV), + NAME_FUNC_OFFSET(11187, glGetTrackMatrixivNV, glGetTrackMatrixivNV, NULL, _gloffset_GetTrackMatrixivNV), + NAME_FUNC_OFFSET(11208, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV), + NAME_FUNC_OFFSET(11236, glGetVertexAttribdvNV, glGetVertexAttribdvNV, NULL, _gloffset_GetVertexAttribdvNV), + NAME_FUNC_OFFSET(11258, glGetVertexAttribfvNV, glGetVertexAttribfvNV, NULL, _gloffset_GetVertexAttribfvNV), + NAME_FUNC_OFFSET(11280, glGetVertexAttribivNV, glGetVertexAttribivNV, NULL, _gloffset_GetVertexAttribivNV), + NAME_FUNC_OFFSET(11302, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV), + NAME_FUNC_OFFSET(11316, glLoadProgramNV, glLoadProgramNV, NULL, _gloffset_LoadProgramNV), + NAME_FUNC_OFFSET(11332, glProgramParameter4dNV, glProgramParameter4dNV, NULL, _gloffset_ProgramParameter4dNV), + NAME_FUNC_OFFSET(11355, glProgramParameter4dvNV, glProgramParameter4dvNV, NULL, _gloffset_ProgramParameter4dvNV), + NAME_FUNC_OFFSET(11379, glProgramParameter4fNV, glProgramParameter4fNV, NULL, _gloffset_ProgramParameter4fNV), + NAME_FUNC_OFFSET(11402, glProgramParameter4fvNV, glProgramParameter4fvNV, NULL, _gloffset_ProgramParameter4fvNV), + NAME_FUNC_OFFSET(11426, glProgramParameters4dvNV, glProgramParameters4dvNV, NULL, _gloffset_ProgramParameters4dvNV), + NAME_FUNC_OFFSET(11451, glProgramParameters4fvNV, glProgramParameters4fvNV, NULL, _gloffset_ProgramParameters4fvNV), + NAME_FUNC_OFFSET(11476, glRequestResidentProgramsNV, glRequestResidentProgramsNV, NULL, _gloffset_RequestResidentProgramsNV), + NAME_FUNC_OFFSET(11504, glTrackMatrixNV, glTrackMatrixNV, NULL, _gloffset_TrackMatrixNV), + NAME_FUNC_OFFSET(11520, glVertexAttrib1dNV, glVertexAttrib1dNV, NULL, _gloffset_VertexAttrib1dNV), + NAME_FUNC_OFFSET(11539, glVertexAttrib1dvNV, glVertexAttrib1dvNV, NULL, _gloffset_VertexAttrib1dvNV), + NAME_FUNC_OFFSET(11559, glVertexAttrib1fNV, glVertexAttrib1fNV, NULL, _gloffset_VertexAttrib1fNV), + NAME_FUNC_OFFSET(11578, glVertexAttrib1fvNV, glVertexAttrib1fvNV, NULL, _gloffset_VertexAttrib1fvNV), + NAME_FUNC_OFFSET(11598, glVertexAttrib1sNV, glVertexAttrib1sNV, NULL, _gloffset_VertexAttrib1sNV), + NAME_FUNC_OFFSET(11617, glVertexAttrib1svNV, glVertexAttrib1svNV, NULL, _gloffset_VertexAttrib1svNV), + NAME_FUNC_OFFSET(11637, glVertexAttrib2dNV, glVertexAttrib2dNV, NULL, _gloffset_VertexAttrib2dNV), + NAME_FUNC_OFFSET(11656, glVertexAttrib2dvNV, glVertexAttrib2dvNV, NULL, _gloffset_VertexAttrib2dvNV), + NAME_FUNC_OFFSET(11676, glVertexAttrib2fNV, glVertexAttrib2fNV, NULL, _gloffset_VertexAttrib2fNV), + NAME_FUNC_OFFSET(11695, glVertexAttrib2fvNV, glVertexAttrib2fvNV, NULL, _gloffset_VertexAttrib2fvNV), + NAME_FUNC_OFFSET(11715, glVertexAttrib2sNV, glVertexAttrib2sNV, NULL, _gloffset_VertexAttrib2sNV), + NAME_FUNC_OFFSET(11734, glVertexAttrib2svNV, glVertexAttrib2svNV, NULL, _gloffset_VertexAttrib2svNV), + NAME_FUNC_OFFSET(11754, glVertexAttrib3dNV, glVertexAttrib3dNV, NULL, _gloffset_VertexAttrib3dNV), + NAME_FUNC_OFFSET(11773, glVertexAttrib3dvNV, glVertexAttrib3dvNV, NULL, _gloffset_VertexAttrib3dvNV), + NAME_FUNC_OFFSET(11793, glVertexAttrib3fNV, glVertexAttrib3fNV, NULL, _gloffset_VertexAttrib3fNV), + NAME_FUNC_OFFSET(11812, glVertexAttrib3fvNV, glVertexAttrib3fvNV, NULL, _gloffset_VertexAttrib3fvNV), + NAME_FUNC_OFFSET(11832, glVertexAttrib3sNV, glVertexAttrib3sNV, NULL, _gloffset_VertexAttrib3sNV), + NAME_FUNC_OFFSET(11851, glVertexAttrib3svNV, glVertexAttrib3svNV, NULL, _gloffset_VertexAttrib3svNV), + NAME_FUNC_OFFSET(11871, glVertexAttrib4dNV, glVertexAttrib4dNV, NULL, _gloffset_VertexAttrib4dNV), + NAME_FUNC_OFFSET(11890, glVertexAttrib4dvNV, glVertexAttrib4dvNV, NULL, _gloffset_VertexAttrib4dvNV), + NAME_FUNC_OFFSET(11910, glVertexAttrib4fNV, glVertexAttrib4fNV, NULL, _gloffset_VertexAttrib4fNV), + NAME_FUNC_OFFSET(11929, glVertexAttrib4fvNV, glVertexAttrib4fvNV, NULL, _gloffset_VertexAttrib4fvNV), + NAME_FUNC_OFFSET(11949, glVertexAttrib4sNV, glVertexAttrib4sNV, NULL, _gloffset_VertexAttrib4sNV), + NAME_FUNC_OFFSET(11968, glVertexAttrib4svNV, glVertexAttrib4svNV, NULL, _gloffset_VertexAttrib4svNV), + NAME_FUNC_OFFSET(11988, glVertexAttrib4ubNV, glVertexAttrib4ubNV, NULL, _gloffset_VertexAttrib4ubNV), + NAME_FUNC_OFFSET(12008, glVertexAttrib4ubvNV, glVertexAttrib4ubvNV, NULL, _gloffset_VertexAttrib4ubvNV), + NAME_FUNC_OFFSET(12029, glVertexAttribPointerNV, glVertexAttribPointerNV, NULL, _gloffset_VertexAttribPointerNV), + NAME_FUNC_OFFSET(12053, glVertexAttribs1dvNV, glVertexAttribs1dvNV, NULL, _gloffset_VertexAttribs1dvNV), + NAME_FUNC_OFFSET(12074, glVertexAttribs1fvNV, glVertexAttribs1fvNV, NULL, _gloffset_VertexAttribs1fvNV), + NAME_FUNC_OFFSET(12095, glVertexAttribs1svNV, glVertexAttribs1svNV, NULL, _gloffset_VertexAttribs1svNV), + NAME_FUNC_OFFSET(12116, glVertexAttribs2dvNV, glVertexAttribs2dvNV, NULL, _gloffset_VertexAttribs2dvNV), + NAME_FUNC_OFFSET(12137, glVertexAttribs2fvNV, glVertexAttribs2fvNV, NULL, _gloffset_VertexAttribs2fvNV), + NAME_FUNC_OFFSET(12158, glVertexAttribs2svNV, glVertexAttribs2svNV, NULL, _gloffset_VertexAttribs2svNV), + NAME_FUNC_OFFSET(12179, glVertexAttribs3dvNV, glVertexAttribs3dvNV, NULL, _gloffset_VertexAttribs3dvNV), + NAME_FUNC_OFFSET(12200, glVertexAttribs3fvNV, glVertexAttribs3fvNV, NULL, _gloffset_VertexAttribs3fvNV), + NAME_FUNC_OFFSET(12221, glVertexAttribs3svNV, glVertexAttribs3svNV, NULL, _gloffset_VertexAttribs3svNV), + NAME_FUNC_OFFSET(12242, glVertexAttribs4dvNV, glVertexAttribs4dvNV, NULL, _gloffset_VertexAttribs4dvNV), + NAME_FUNC_OFFSET(12263, glVertexAttribs4fvNV, glVertexAttribs4fvNV, NULL, _gloffset_VertexAttribs4fvNV), + NAME_FUNC_OFFSET(12284, glVertexAttribs4svNV, glVertexAttribs4svNV, NULL, _gloffset_VertexAttribs4svNV), + NAME_FUNC_OFFSET(12305, glVertexAttribs4ubvNV, glVertexAttribs4ubvNV, NULL, _gloffset_VertexAttribs4ubvNV), + NAME_FUNC_OFFSET(12327, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, _gloffset_AlphaFragmentOp1ATI), + NAME_FUNC_OFFSET(12349, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, _gloffset_AlphaFragmentOp2ATI), + NAME_FUNC_OFFSET(12371, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, _gloffset_AlphaFragmentOp3ATI), + NAME_FUNC_OFFSET(12393, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, _gloffset_BeginFragmentShaderATI), + NAME_FUNC_OFFSET(12418, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, _gloffset_BindFragmentShaderATI), + NAME_FUNC_OFFSET(12442, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, _gloffset_ColorFragmentOp1ATI), + NAME_FUNC_OFFSET(12464, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, _gloffset_ColorFragmentOp2ATI), + NAME_FUNC_OFFSET(12486, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, _gloffset_ColorFragmentOp3ATI), + NAME_FUNC_OFFSET(12508, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, _gloffset_DeleteFragmentShaderATI), + NAME_FUNC_OFFSET(12534, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, _gloffset_EndFragmentShaderATI), + NAME_FUNC_OFFSET(12557, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, _gloffset_GenFragmentShadersATI), + NAME_FUNC_OFFSET(12581, glPassTexCoordATI, glPassTexCoordATI, NULL, _gloffset_PassTexCoordATI), + NAME_FUNC_OFFSET(12599, glSampleMapATI, glSampleMapATI, NULL, _gloffset_SampleMapATI), + NAME_FUNC_OFFSET(12614, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, _gloffset_SetFragmentShaderConstantATI), + NAME_FUNC_OFFSET(12645, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV), + NAME_FUNC_OFFSET(12665, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV), + NAME_FUNC_OFFSET(12686, gl_dispatch_stub_737, gl_dispatch_stub_737, NULL, _gloffset_ActiveStencilFaceEXT), + NAME_FUNC_OFFSET(12709, gl_dispatch_stub_738, gl_dispatch_stub_738, NULL, _gloffset_BindVertexArrayAPPLE), + NAME_FUNC_OFFSET(12732, gl_dispatch_stub_739, gl_dispatch_stub_739, NULL, _gloffset_DeleteVertexArraysAPPLE), + NAME_FUNC_OFFSET(12758, gl_dispatch_stub_740, gl_dispatch_stub_740, NULL, _gloffset_GenVertexArraysAPPLE), + NAME_FUNC_OFFSET(12781, gl_dispatch_stub_741, gl_dispatch_stub_741, NULL, _gloffset_IsVertexArrayAPPLE), + NAME_FUNC_OFFSET(12802, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, _gloffset_GetProgramNamedParameterdvNV), + NAME_FUNC_OFFSET(12833, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, _gloffset_GetProgramNamedParameterfvNV), + NAME_FUNC_OFFSET(12864, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, _gloffset_ProgramNamedParameter4dNV), + NAME_FUNC_OFFSET(12892, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, _gloffset_ProgramNamedParameter4dvNV), + NAME_FUNC_OFFSET(12921, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, _gloffset_ProgramNamedParameter4fNV), + NAME_FUNC_OFFSET(12949, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, _gloffset_ProgramNamedParameter4fvNV), + NAME_FUNC_OFFSET(12978, gl_dispatch_stub_748, gl_dispatch_stub_748, NULL, _gloffset_DepthBoundsEXT), + NAME_FUNC_OFFSET(12995, gl_dispatch_stub_749, gl_dispatch_stub_749, NULL, _gloffset_BlendEquationSeparateEXT), + NAME_FUNC_OFFSET(13022, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT), + NAME_FUNC_OFFSET(13043, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT), + NAME_FUNC_OFFSET(13065, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT), + NAME_FUNC_OFFSET(13093, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT), + NAME_FUNC_OFFSET(13117, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT), + NAME_FUNC_OFFSET(13142, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT), + NAME_FUNC_OFFSET(13171, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT), + NAME_FUNC_OFFSET(13197, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT), + NAME_FUNC_OFFSET(13223, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT), + NAME_FUNC_OFFSET(13249, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT), + NAME_FUNC_OFFSET(13270, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT), + NAME_FUNC_OFFSET(13292, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT), + NAME_FUNC_OFFSET(13312, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT), + NAME_FUNC_OFFSET(13353, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT), + NAME_FUNC_OFFSET(13385, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT), + NAME_FUNC_OFFSET(13404, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT), + NAME_FUNC_OFFSET(13424, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT), + NAME_FUNC_OFFSET(13449, gl_dispatch_stub_767, gl_dispatch_stub_767, NULL, _gloffset_BlitFramebufferEXT), + NAME_FUNC_OFFSET(13470, gl_dispatch_stub_768, gl_dispatch_stub_768, NULL, _gloffset_ProgramEnvParameters4fvEXT), + NAME_FUNC_OFFSET(13499, gl_dispatch_stub_769, gl_dispatch_stub_769, NULL, _gloffset_ProgramLocalParameters4fvEXT), + NAME_FUNC_OFFSET(13530, gl_dispatch_stub_770, gl_dispatch_stub_770, NULL, _gloffset_GetQueryObjecti64vEXT), + NAME_FUNC_OFFSET(13554, gl_dispatch_stub_771, gl_dispatch_stub_771, NULL, _gloffset_GetQueryObjectui64vEXT), + NAME_FUNC_OFFSET(13579, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement), + NAME_FUNC_OFFSET(13597, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture), + NAME_FUNC_OFFSET(13614, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays), + NAME_FUNC_OFFSET(13630, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident), + NAME_FUNC_OFFSET(13655, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D), + NAME_FUNC_OFFSET(13675, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D), + NAME_FUNC_OFFSET(13695, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D), + NAME_FUNC_OFFSET(13718, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D), + NAME_FUNC_OFFSET(13741, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures), + NAME_FUNC_OFFSET(13761, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures), + NAME_FUNC_OFFSET(13778, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv), + NAME_FUNC_OFFSET(13795, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture), + NAME_FUNC_OFFSET(13810, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures), + NAME_FUNC_OFFSET(13834, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D), + NAME_FUNC_OFFSET(13853, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D), + NAME_FUNC_OFFSET(13872, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor), + NAME_FUNC_OFFSET(13888, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation), + NAME_FUNC_OFFSET(13907, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements), + NAME_FUNC_OFFSET(13930, glColorTable, glColorTable, NULL, _gloffset_ColorTable), + NAME_FUNC_OFFSET(13946, glColorTable, glColorTable, NULL, _gloffset_ColorTable), + NAME_FUNC_OFFSET(13962, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv), + NAME_FUNC_OFFSET(13989, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv), + NAME_FUNC_OFFSET(14016, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable), + NAME_FUNC_OFFSET(14036, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable), + NAME_FUNC_OFFSET(14055, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable), + NAME_FUNC_OFFSET(14074, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv), + NAME_FUNC_OFFSET(14104, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv), + NAME_FUNC_OFFSET(14134, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv), + NAME_FUNC_OFFSET(14164, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv), + NAME_FUNC_OFFSET(14194, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable), + NAME_FUNC_OFFSET(14213, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable), + NAME_FUNC_OFFSET(14236, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D), + NAME_FUNC_OFFSET(14261, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D), + NAME_FUNC_OFFSET(14286, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf), + NAME_FUNC_OFFSET(14313, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv), + NAME_FUNC_OFFSET(14341, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri), + NAME_FUNC_OFFSET(14368, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv), + NAME_FUNC_OFFSET(14396, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D), + NAME_FUNC_OFFSET(14425, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D), + NAME_FUNC_OFFSET(14454, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter), + NAME_FUNC_OFFSET(14480, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv), + NAME_FUNC_OFFSET(14511, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv), + NAME_FUNC_OFFSET(14542, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter), + NAME_FUNC_OFFSET(14566, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D), + NAME_FUNC_OFFSET(14589, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram), + NAME_FUNC_OFFSET(14607, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv), + NAME_FUNC_OFFSET(14636, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv), + NAME_FUNC_OFFSET(14665, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax), + NAME_FUNC_OFFSET(14680, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv), + NAME_FUNC_OFFSET(14706, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv), + NAME_FUNC_OFFSET(14732, glHistogram, glHistogram, NULL, _gloffset_Histogram), + NAME_FUNC_OFFSET(14747, glMinmax, glMinmax, NULL, _gloffset_Minmax), + NAME_FUNC_OFFSET(14759, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram), + NAME_FUNC_OFFSET(14779, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax), + NAME_FUNC_OFFSET(14796, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D), + NAME_FUNC_OFFSET(14812, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D), + NAME_FUNC_OFFSET(14831, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D), + NAME_FUNC_OFFSET(14854, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB), + NAME_FUNC_OFFSET(14870, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB), + NAME_FUNC_OFFSET(14892, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB), + NAME_FUNC_OFFSET(14910, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB), + NAME_FUNC_OFFSET(14929, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB), + NAME_FUNC_OFFSET(14947, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB), + NAME_FUNC_OFFSET(14966, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB), + NAME_FUNC_OFFSET(14984, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB), + NAME_FUNC_OFFSET(15003, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB), + NAME_FUNC_OFFSET(15021, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB), + NAME_FUNC_OFFSET(15040, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB), + NAME_FUNC_OFFSET(15058, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB), + NAME_FUNC_OFFSET(15077, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB), + NAME_FUNC_OFFSET(15095, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB), + NAME_FUNC_OFFSET(15114, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB), + NAME_FUNC_OFFSET(15132, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB), + NAME_FUNC_OFFSET(15151, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB), + NAME_FUNC_OFFSET(15169, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB), + NAME_FUNC_OFFSET(15188, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB), + NAME_FUNC_OFFSET(15206, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB), + NAME_FUNC_OFFSET(15225, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB), + NAME_FUNC_OFFSET(15243, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB), + NAME_FUNC_OFFSET(15262, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB), + NAME_FUNC_OFFSET(15280, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB), + NAME_FUNC_OFFSET(15299, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB), + NAME_FUNC_OFFSET(15317, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB), + NAME_FUNC_OFFSET(15336, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB), + NAME_FUNC_OFFSET(15354, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB), + NAME_FUNC_OFFSET(15373, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB), + NAME_FUNC_OFFSET(15391, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB), + NAME_FUNC_OFFSET(15410, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB), + NAME_FUNC_OFFSET(15428, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB), + NAME_FUNC_OFFSET(15447, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB), + NAME_FUNC_OFFSET(15465, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB), + NAME_FUNC_OFFSET(15484, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB), + NAME_FUNC_OFFSET(15507, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB), + NAME_FUNC_OFFSET(15530, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB), + NAME_FUNC_OFFSET(15553, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB), + NAME_FUNC_OFFSET(15576, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB), + NAME_FUNC_OFFSET(15593, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB), + NAME_FUNC_OFFSET(15616, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB), + NAME_FUNC_OFFSET(15639, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB), + NAME_FUNC_OFFSET(15662, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB), + NAME_FUNC_OFFSET(15688, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB), + NAME_FUNC_OFFSET(15714, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB), + NAME_FUNC_OFFSET(15740, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB), + NAME_FUNC_OFFSET(15764, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB), + NAME_FUNC_OFFSET(15791, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB), + NAME_FUNC_OFFSET(15817, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB), + NAME_FUNC_OFFSET(15837, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB), + NAME_FUNC_OFFSET(15857, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB), + NAME_FUNC_OFFSET(15877, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB), + NAME_FUNC_OFFSET(15894, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB), + NAME_FUNC_OFFSET(15912, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB), + NAME_FUNC_OFFSET(15929, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB), + NAME_FUNC_OFFSET(15947, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB), + NAME_FUNC_OFFSET(15964, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB), + NAME_FUNC_OFFSET(15982, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB), + NAME_FUNC_OFFSET(15999, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB), + NAME_FUNC_OFFSET(16017, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB), + NAME_FUNC_OFFSET(16034, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB), + NAME_FUNC_OFFSET(16052, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB), + NAME_FUNC_OFFSET(16069, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB), + NAME_FUNC_OFFSET(16087, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB), + NAME_FUNC_OFFSET(16104, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB), + NAME_FUNC_OFFSET(16122, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB), + NAME_FUNC_OFFSET(16139, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB), + NAME_FUNC_OFFSET(16157, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB), + NAME_FUNC_OFFSET(16174, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB), + NAME_FUNC_OFFSET(16192, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB), + NAME_FUNC_OFFSET(16211, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB), + NAME_FUNC_OFFSET(16230, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB), + NAME_FUNC_OFFSET(16249, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB), + NAME_FUNC_OFFSET(16268, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB), + NAME_FUNC_OFFSET(16288, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB), + NAME_FUNC_OFFSET(16308, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB), + NAME_FUNC_OFFSET(16328, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB), + NAME_FUNC_OFFSET(16345, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB), + NAME_FUNC_OFFSET(16363, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB), + NAME_FUNC_OFFSET(16380, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB), + NAME_FUNC_OFFSET(16398, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB), + NAME_FUNC_OFFSET(16415, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB), + NAME_FUNC_OFFSET(16433, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB), + NAME_FUNC_OFFSET(16455, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB), + NAME_FUNC_OFFSET(16468, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB), + NAME_FUNC_OFFSET(16481, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB), + NAME_FUNC_OFFSET(16497, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB), + NAME_FUNC_OFFSET(16513, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB), + NAME_FUNC_OFFSET(16526, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB), + NAME_FUNC_OFFSET(16549, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB), + NAME_FUNC_OFFSET(16569, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB), + NAME_FUNC_OFFSET(16588, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB), + NAME_FUNC_OFFSET(16599, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB), + NAME_FUNC_OFFSET(16611, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB), + NAME_FUNC_OFFSET(16625, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB), + NAME_FUNC_OFFSET(16638, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB), + NAME_FUNC_OFFSET(16654, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB), + NAME_FUNC_OFFSET(16665, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB), + NAME_FUNC_OFFSET(16678, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB), + NAME_FUNC_OFFSET(16697, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB), + NAME_FUNC_OFFSET(16717, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB), + NAME_FUNC_OFFSET(16730, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB), + NAME_FUNC_OFFSET(16740, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB), + NAME_FUNC_OFFSET(16756, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB), + NAME_FUNC_OFFSET(16775, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB), + NAME_FUNC_OFFSET(16793, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB), + NAME_FUNC_OFFSET(16814, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB), + NAME_FUNC_OFFSET(16829, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB), + NAME_FUNC_OFFSET(16844, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB), + NAME_FUNC_OFFSET(16858, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB), + NAME_FUNC_OFFSET(16873, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB), + NAME_FUNC_OFFSET(16885, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB), + NAME_FUNC_OFFSET(16898, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB), + NAME_FUNC_OFFSET(16910, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB), + NAME_FUNC_OFFSET(16923, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB), + NAME_FUNC_OFFSET(16935, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB), + NAME_FUNC_OFFSET(16948, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB), + NAME_FUNC_OFFSET(16960, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB), + NAME_FUNC_OFFSET(16973, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB), + NAME_FUNC_OFFSET(16985, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB), + NAME_FUNC_OFFSET(16998, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB), + NAME_FUNC_OFFSET(17010, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB), + NAME_FUNC_OFFSET(17023, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB), + NAME_FUNC_OFFSET(17035, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB), + NAME_FUNC_OFFSET(17048, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB), + NAME_FUNC_OFFSET(17060, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB), + NAME_FUNC_OFFSET(17073, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB), + NAME_FUNC_OFFSET(17092, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB), + NAME_FUNC_OFFSET(17111, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB), + NAME_FUNC_OFFSET(17130, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB), + NAME_FUNC_OFFSET(17143, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB), + NAME_FUNC_OFFSET(17161, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB), + NAME_FUNC_OFFSET(17182, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB), + NAME_FUNC_OFFSET(17200, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB), + NAME_FUNC_OFFSET(17220, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB), + NAME_FUNC_OFFSET(17234, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB), + NAME_FUNC_OFFSET(17251, gl_dispatch_stub_568, gl_dispatch_stub_568, NULL, _gloffset_SampleMaskSGIS), + NAME_FUNC_OFFSET(17267, gl_dispatch_stub_569, gl_dispatch_stub_569, NULL, _gloffset_SamplePatternSGIS), + NAME_FUNC_OFFSET(17286, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), + NAME_FUNC_OFFSET(17304, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), + NAME_FUNC_OFFSET(17325, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), + NAME_FUNC_OFFSET(17347, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), + NAME_FUNC_OFFSET(17366, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), + NAME_FUNC_OFFSET(17388, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), + NAME_FUNC_OFFSET(17411, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT), + NAME_FUNC_OFFSET(17430, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT), + NAME_FUNC_OFFSET(17450, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT), + NAME_FUNC_OFFSET(17469, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT), + NAME_FUNC_OFFSET(17489, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT), + NAME_FUNC_OFFSET(17508, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT), + NAME_FUNC_OFFSET(17528, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT), + NAME_FUNC_OFFSET(17547, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT), + NAME_FUNC_OFFSET(17567, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT), + NAME_FUNC_OFFSET(17586, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT), + NAME_FUNC_OFFSET(17606, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT), + NAME_FUNC_OFFSET(17626, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT), + NAME_FUNC_OFFSET(17647, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT), + NAME_FUNC_OFFSET(17667, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT), + NAME_FUNC_OFFSET(17688, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT), + NAME_FUNC_OFFSET(17708, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT), + NAME_FUNC_OFFSET(17729, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT), + NAME_FUNC_OFFSET(17753, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT), + NAME_FUNC_OFFSET(17771, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT), + NAME_FUNC_OFFSET(17791, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT), + NAME_FUNC_OFFSET(17809, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT), + NAME_FUNC_OFFSET(17821, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT), + NAME_FUNC_OFFSET(17834, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT), + NAME_FUNC_OFFSET(17846, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT), + NAME_FUNC_OFFSET(17859, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT), + NAME_FUNC_OFFSET(17879, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT), + NAME_FUNC_OFFSET(17903, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA), + NAME_FUNC_OFFSET(17917, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA), + NAME_FUNC_OFFSET(17934, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA), + NAME_FUNC_OFFSET(17949, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA), + NAME_FUNC_OFFSET(17967, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA), + NAME_FUNC_OFFSET(17981, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA), + NAME_FUNC_OFFSET(17998, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA), + NAME_FUNC_OFFSET(18013, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA), + NAME_FUNC_OFFSET(18031, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA), + NAME_FUNC_OFFSET(18045, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA), + NAME_FUNC_OFFSET(18062, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA), + NAME_FUNC_OFFSET(18077, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA), + NAME_FUNC_OFFSET(18095, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA), + NAME_FUNC_OFFSET(18109, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA), + NAME_FUNC_OFFSET(18126, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA), + NAME_FUNC_OFFSET(18141, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA), + NAME_FUNC_OFFSET(18159, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA), + NAME_FUNC_OFFSET(18173, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA), + NAME_FUNC_OFFSET(18190, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA), + NAME_FUNC_OFFSET(18205, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA), + NAME_FUNC_OFFSET(18223, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA), + NAME_FUNC_OFFSET(18237, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA), + NAME_FUNC_OFFSET(18254, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA), + NAME_FUNC_OFFSET(18269, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA), + NAME_FUNC_OFFSET(18287, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA), + NAME_FUNC_OFFSET(18301, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA), + NAME_FUNC_OFFSET(18318, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA), + NAME_FUNC_OFFSET(18333, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA), + NAME_FUNC_OFFSET(18351, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA), + NAME_FUNC_OFFSET(18365, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA), + NAME_FUNC_OFFSET(18382, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA), + NAME_FUNC_OFFSET(18397, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA), + NAME_FUNC_OFFSET(18415, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV), + NAME_FUNC_OFFSET(18432, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV), + NAME_FUNC_OFFSET(18452, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV), + NAME_FUNC_OFFSET(18469, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV), + NAME_FUNC_OFFSET(18498, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV), + NAME_FUNC_OFFSET(18513, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV), + NAME_FUNC_OFFSET(18531, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV), + NAME_FUNC_OFFSET(18550, gl_dispatch_stub_749, gl_dispatch_stub_749, NULL, _gloffset_BlendEquationSeparateEXT), + NAME_FUNC_OFFSET(18574, gl_dispatch_stub_749, gl_dispatch_stub_749, NULL, _gloffset_BlendEquationSeparateEXT), + NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0) }; #undef NAME_FUNC_OFFSET diff --git a/src/kits/opengl/mesa/glapi/glthread.c b/src/kits/opengl/mesa/glapi/glthread.c index 5fa8313975..4513853f5a 100644 --- a/src/kits/opengl/mesa/glapi/glthread.c +++ b/src/kits/opengl/mesa/glapi/glthread.c @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -186,11 +185,23 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr) */ #ifdef WIN32_THREADS +void FreeTSD(_glthread_TSD *p) +{ + if (p->initMagic==INIT_MAGIC) { + TlsFree(p->key); + p->initMagic=0; + } +} + +void InsteadOf_exit(int nCode) +{ + DWORD dwErr=GetLastError(); +} + unsigned long _glthread_GetID(void) { - abort(); /* XXX not implemented yet */ - return (unsigned long) 0; + return GetCurrentThreadId(); } @@ -198,11 +209,9 @@ void _glthread_InitTSD(_glthread_TSD *tsd) { tsd->key = TlsAlloc(); - if (tsd->key == 0xffffffff) { - /* Can Windows handle stderr messages for non-console - applications? Does Windows have perror? */ - /* perror(SET_INIT_ERROR);*/ - exit(-1); + if (tsd->key == TLS_OUT_OF_INDEXES) { + perror("Mesa:_glthread_InitTSD"); + InsteadOf_exit(-1); } tsd->initMagic = INIT_MAGIC; } @@ -227,10 +236,8 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr) _glthread_InitTSD(tsd); } if (TlsSetValue(tsd->key, ptr) == 0) { - /* Can Windows handle stderr messages for non-console - applications? Does Windows have perror? */ - /* perror(SET_TSD_ERROR);*/ - exit(-1); + perror("Mesa:_glthread_SetTSD"); + InsteadOf_exit(-1); } } @@ -242,7 +249,7 @@ _glthread_SetTSD(_glthread_TSD *tsd, void *ptr) * XFree86 has its own thread wrapper, Xthreads.h * We wrap it again for GL. */ -#ifdef XTHREADS +#ifdef USE_XTHREADS unsigned long _glthread_GetID(void) diff --git a/src/kits/opengl/mesa/glapi/glthread.h b/src/kits/opengl/mesa/glapi/glthread.h index 1d2a4a7b00..a61086d0dc 100644 --- a/src/kits/opengl/mesa/glapi/glthread.h +++ b/src/kits/opengl/mesa/glapi/glthread.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -64,9 +64,16 @@ #define GLTHREAD_H -#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || \ - defined(XTHREADS) || defined(BEOS_THREADS) -#define THREADS +#if defined(USE_MGL_NAMESPACE) +#define _glapi_Dispatch _mglapi_Dispatch +#endif + + + +#if (defined(PTHREADS) || defined(SOLARIS_THREADS) ||\ + defined(WIN32_THREADS) || defined(USE_XTHREADS) || defined(BEOS_THREADS)) \ + && !defined(THREADS) +# define THREADS #endif #ifdef VMS @@ -109,20 +116,6 @@ typedef pthread_mutex_t _glthread_Mutex; #define _glthread_UNLOCK_MUTEX(name) \ (void) pthread_mutex_unlock(&(name)) -/* This is temporarilly removed because driver binaries cannot count on - * the existance of _gl_DispatchTSD in libGL. It only exists in "new" - * libGL. We may be able to ressurect this optimization at some point - * for DRI driver or for software Mesa. - */ -#if 0 -extern struct _glapi_table * _glapi_DispatchTSD; -extern _glthread_TSD _gl_DispatchTSD; - -#define GL_CALL(name) \ - (((__builtin_expect( _glapi_DispatchTSD != NULL, 1 )) \ - ? _glapi_DispatchTSD : (struct _glapi_table *) pthread_getspecific(_gl_DispatchTSD.key))-> name) -#endif - #endif /* PTHREADS */ @@ -176,12 +169,11 @@ typedef HANDLE _glthread_Thread; typedef CRITICAL_SECTION _glthread_Mutex; -/* XXX need to really implement mutex-related macros */ -#define _glthread_DECLARE_STATIC_MUTEX(name) static _glthread_Mutex name = 0 -#define _glthread_INIT_MUTEX(name) (void) name -#define _glthread_DESTROY_MUTEX(name) (void) name -#define _glthread_LOCK_MUTEX(name) (void) name -#define _glthread_UNLOCK_MUTEX(name) (void) name +#define _glthread_DECLARE_STATIC_MUTEX(name) /*static*/ _glthread_Mutex name = {0,0,0,0,0,0} +#define _glthread_INIT_MUTEX(name) InitializeCriticalSection(&name) +#define _glthread_DESTROY_MUTEX(name) DeleteCriticalSection(&name) +#define _glthread_LOCK_MUTEX(name) EnterCriticalSection(&name) +#define _glthread_UNLOCK_MUTEX(name) LeaveCriticalSection(&name) #endif /* WIN32_THREADS */ @@ -192,7 +184,7 @@ typedef CRITICAL_SECTION _glthread_Mutex; * XFree86 has its own thread wrapper, Xthreads.h * We wrap it again for GL. */ -#ifdef XTHREADS +#ifdef USE_XTHREADS #include typedef struct { @@ -224,7 +216,7 @@ typedef xmutex_rec _glthread_Mutex; #define _glthread_UNLOCK_MUTEX(name) \ (void) xmutex_unlock(&(name)) -#endif /* XTHREADS */ +#endif /* USE_XTHREADS */ @@ -306,14 +298,20 @@ _glthread_GetTSD(_glthread_TSD *); extern void _glthread_SetTSD(_glthread_TSD *, void *); -#ifndef GL_CALL +#if defined(GLX_USE_TLS) + +extern __thread struct _glapi_table * _glapi_tls_Dispatch + __attribute__((tls_model("initial-exec"))); + +#define GET_DISPATCH() _glapi_tls_Dispatch + +#elif !defined(GL_CALL) # if defined(THREADS) -extern struct _glapi_table * _glapi_DispatchTSD; -# define GL_CALL(name) \ - (((__builtin_expect( _glapi_DispatchTSD != NULL, 1 )) \ - ? _glapi_DispatchTSD : _glapi_get_dispatch())-> name) +# define GET_DISPATCH() \ + ((__builtin_expect( _glapi_Dispatch != NULL, 1 )) \ + ? _glapi_Dispatch : _glapi_get_dispatch()) # else -# define GL_CALL(name) (*(_glapi_Dispatch-> name)) +# define GET_DISPATCH() _glapi_Dispatch # endif /* defined(THREADS) */ #endif /* ndef GL_CALL */ diff --git a/src/kits/opengl/mesa/glapi/license.py b/src/kits/opengl/mesa/glapi/license.py deleted file mode 100644 index 02181648e4..0000000000 --- a/src/kits/opengl/mesa/glapi/license.py +++ /dev/null @@ -1,47 +0,0 @@ -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -bsd_license_template = """%s -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sub license, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -%s, -AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.""" diff --git a/src/kits/opengl/mesa/glapi/mesadef.py b/src/kits/opengl/mesa/glapi/mesadef.py deleted file mode 100644 index 7aa2776ca4..0000000000 --- a/src/kits/opengl/mesa/glapi/mesadef.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env python - -# $Id: mesadef.py,v 1.2 2004/05/10 07:42:27 dborca Exp $ - -# Mesa 3-D graphics library -# Version: 4.1 -# -# Copyright (C) 1999-2001 Brian Paul All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -# Generate the mesa.def file for Windows. -# -# Usage: -# mesadef.py >mesa.def -# Then copy to src/mesa/drivers/windows/gdi -# -# Dependencies: -# The apispec file must be in the current directory. - - - -import apiparser -import string - - -def PrintHead(): - print '; DO NOT EDIT - This file generated automatically by mesadef.py script' - print 'DESCRIPTION \'Mesa (OpenGL work-alike) for Win32\'' - print 'VERSION 6.0' - print ';' - print '; Module definition file for Mesa (OPENGL32.DLL)' - print ';' - print '; Note: The OpenGL functions use the STDCALL' - print '; function calling convention. Microsoft\'s' - print '; OPENGL32 uses this convention and so must the' - print '; Mesa OPENGL32 so that the Mesa DLL can be used' - print '; as a drop-in replacement.' - print ';' - print '; The linker exports STDCALL entry points with' - print '; \'decorated\' names; e.g., _glBegin@0, where the' - print '; trailing number is the number of bytes of ' - print '; parameter data pushed onto the stack. The' - print '; callee is responsible for popping this data' - print '; off the stack, usually via a RETF n instruction.' - print ';' - print '; However, the Microsoft OPENGL32.DLL does not export' - print '; the decorated names, even though the calling convention' - print '; is STDCALL. So, this module definition file is' - print '; needed to force the Mesa OPENGL32.DLL to export the' - print '; symbols in the same manner as the Microsoft DLL.' - print '; Were it not for this problem, this file would not' - print '; be needed (for the gl* functions) since the entry' - print '; points are compiled with dllexport declspec.' - print ';' - print '; However, this file is still needed to export "internal"' - print '; Mesa symbols for the benefit of the OSMESA32.DLL.' - print ';' - print 'EXPORTS' - return -#enddef - - -def PrintTail(): - print ';' - print '; WGL API' - print '\twglChoosePixelFormat' - print '\twglCopyContext' - print '\twglCreateContext' - print '\twglCreateLayerContext' - print '\twglDeleteContext' - print '\twglDescribeLayerPlane' - print '\twglDescribePixelFormat' - print '\twglGetCurrentContext' - print '\twglGetCurrentDC' - print '\twglGetLayerPaletteEntries' - print '\twglGetPixelFormat' - print '\twglGetProcAddress' - print '\twglMakeCurrent' - print '\twglRealizeLayerPalette' - print '\twglSetLayerPaletteEntries' - print '\twglSetPixelFormat' - print '\twglShareLists' - print '\twglSwapBuffers' - print '\twglSwapLayerBuffers' - print '\twglUseFontBitmapsA' - print '\twglUseFontBitmapsW' - print '\twglUseFontOutlinesA' - print '\twglUseFontOutlinesW' - print ';' - print '; Mesa internals - mostly for OSMESA' - print '\t_ac_CreateContext' - print '\t_ac_DestroyContext' - print '\t_ac_InvalidateState' - print '\t_glapi_get_context' - print '\t_glapi_get_proc_address' - print '\t_mesa_buffer_data' - print '\t_mesa_buffer_map' - print '\t_mesa_buffer_subdata' - print '\t_mesa_bzero' - print '\t_mesa_calloc' - print '\t_mesa_choose_tex_format' - print '\t_mesa_compressed_texture_size' - print '\t_mesa_create_framebuffer' - print '\t_mesa_create_visual' - print '\t_mesa_delete_buffer_object' - print '\t_mesa_delete_texture_object' - print '\t_mesa_destroy_framebuffer' - print '\t_mesa_destroy_visual' - print '\t_mesa_enable_1_3_extensions' - print '\t_mesa_enable_1_4_extensions' - print '\t_mesa_enable_1_5_extensions' - print '\t_mesa_enable_sw_extensions' - print '\t_mesa_error' - print '\t_mesa_free' - print '\t_mesa_free_context_data' - print '\t_mesa_get_current_context' - print '\t_mesa_init_default_imports' - print '\t_mesa_initialize_context' - print '\t_mesa_make_current' - print '\t_mesa_memcpy' - print '\t_mesa_memset' - print '\t_mesa_new_buffer_object' - print '\t_mesa_new_texture_object' - print '\t_mesa_problem' - print '\t_mesa_ResizeBuffersMESA' - print '\t_mesa_store_compressed_teximage1d' - print '\t_mesa_store_compressed_teximage2d' - print '\t_mesa_store_compressed_teximage3d' - print '\t_mesa_store_compressed_texsubimage1d' - print '\t_mesa_store_compressed_texsubimage2d' - print '\t_mesa_store_compressed_texsubimage3d' - print '\t_mesa_store_teximage1d' - print '\t_mesa_store_teximage2d' - print '\t_mesa_store_teximage3d' - print '\t_mesa_store_texsubimage1d' - print '\t_mesa_store_texsubimage2d' - print '\t_mesa_store_texsubimage3d' - print '\t_mesa_strcmp' - print '\t_mesa_test_proxy_teximage' - print '\t_mesa_Viewport' - print '\t_swrast_Accum' - print '\t_swrast_alloc_buffers' - print '\t_swrast_Bitmap' - print '\t_swrast_CopyPixels' - print '\t_swrast_DrawBuffer' - print '\t_swrast_DrawPixels' - print '\t_swrast_GetDeviceDriverReference' - print '\t_swrast_Clear' - print '\t_swrast_choose_line' - print '\t_swrast_choose_triangle' - print '\t_swrast_CopyColorSubTable' - print '\t_swrast_CopyColorTable' - print '\t_swrast_CopyConvolutionFilter1D' - print '\t_swrast_CopyConvolutionFilter2D' - print '\t_swrast_copy_teximage1d' - print '\t_swrast_copy_teximage2d' - print '\t_swrast_copy_texsubimage1d' - print '\t_swrast_copy_texsubimage2d' - print '\t_swrast_copy_texsubimage3d' - print '\t_swrast_CreateContext' - print '\t_swrast_DestroyContext' - print '\t_swrast_InvalidateState' - print '\t_swrast_ReadPixels' - print '\t_swrast_zbuffer_address' - print '\t_swsetup_Wakeup' - print '\t_swsetup_CreateContext' - print '\t_swsetup_DestroyContext' - print '\t_swsetup_InvalidateState' - print '\t_tnl_CreateContext' - print '\t_tnl_DestroyContext' - print '\t_tnl_InvalidateState' - print '\t_tnl_MakeCurrent' - print '\t_tnl_run_pipeline' -#enddef - - -records = [] - -def FindOffset(funcName): - for (name, alias, offset) in records: - if name == funcName: - return offset - #endif - #endfor - return -1 -#enddef - - -def EmitEntry(name, returnType, argTypeList, argNameList, alias, offset): - if alias == '': - dispatchName = name - else: - dispatchName = alias - if offset < 0: - offset = FindOffset(dispatchName) - if offset >= 0 and string.find(name, "unused") == -1: - print '\tgl%s' % (name) - # save this info in case we need to look up an alias later - records.append((name, dispatchName, offset)) - -#enddef - - -PrintHead() -apiparser.ProcessSpecFile("APIspec", EmitEntry) -PrintTail() diff --git a/src/kits/opengl/mesa/glapi/next_available_offset.sh b/src/kits/opengl/mesa/glapi/next_available_offset.sh deleted file mode 100755 index e7d6c2f4af..0000000000 --- a/src/kits/opengl/mesa/glapi/next_available_offset.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash -# -# (C) Copyright IBM Corporation 2004 -# All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# on the rights to use, copy, modify, merge, publish, distribute, sub -# license, and/or sell copies of the Software, and to permit persons to whom -# the Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice (including the next -# paragraph) shall be included in all copies or substantial portions of the -# Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# Authors: -# Ian Romanick - -# Trivial shell script to search the API definition file and print out the -# next numerically available API entry-point offset. This could probably -# be made smarter, but it would be better to use the existin Python -# framework to do that. This is just a quick-and-dirty hack. - -num=$(grep 'offset="' gl_API.xml |\ - sed 's/.\+ offset="//g;s/".*$//g' |\ - grep -v '?' |\ - sort -rn |\ - head -1) - -echo $((num + 1)) diff --git a/src/kits/opengl/mesa/main/KNOWN_BUGS b/src/kits/opengl/mesa/main/KNOWN_BUGS deleted file mode 100644 index efbb0ca40f..0000000000 --- a/src/kits/opengl/mesa/main/KNOWN_BUGS +++ /dev/null @@ -1,21 +0,0 @@ - - -Performance issues with EXT_point_parameters & quake2 - - - -Using glPolygonMode() where the front and back modes aren't the -same causes poor performance on 3Dfx. - - - -Broken drivers: some of the Mesa device drivers (such as BeOS, D3D, -etc) haven't been updated for Mesa 3.3's device driver changes. - - - -glDrawRangeElements() should use vertex array locking to improve performance -but trying to do so causes a rendering error. Reported by Scott McMillan. -Fixed by disabling locking in glDrawRangeElements (varray.c) but that's -really just hiding a bug in array locking. - diff --git a/src/kits/opengl/mesa/main/accum.c b/src/kits/opengl/mesa/main/accum.c index 315bd33b61..2345695f3c 100644 --- a/src/kits/opengl/mesa/main/accum.c +++ b/src/kits/opengl/mesa/main/accum.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.5 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -55,40 +55,51 @@ void GLAPIENTRY _mesa_Accum( GLenum op, GLfloat value ) { GET_CURRENT_CONTEXT(ctx); - GLuint xpos, ypos, width, height; ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - if (ctx->Visual.accumRedBits == 0 || ctx->DrawBuffer != ctx->ReadBuffer) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glAccum"); + switch (op) { + case GL_ADD: + case GL_MULT: + case GL_ACCUM: + case GL_LOAD: + case GL_RETURN: + /* OK */ + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glAccum(op)"); + return; + } + + if (ctx->DrawBuffer->Visual.haveAccumBuffer == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glAccum(no accum buffer)"); + return; + } + + if (ctx->DrawBuffer != ctx->ReadBuffer) { + /* See GLX_SGI_make_current_read or WGL_ARB_make_current_read, + * or GL_EXT_framebuffer_blit. + */ + _mesa_error(ctx, GL_INVALID_OPERATION, + "glAccum(different read/draw buffers)"); return; } if (ctx->NewState) - _mesa_update_state( ctx ); + _mesa_update_state(ctx); - if (ctx->RenderMode != GL_RENDER) { - /* no-op */ + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glAccum(incomplete framebuffer)"); return; } - /* 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; + if (ctx->RenderMode == GL_RENDER) { + ctx->Driver.Accum(ctx, op, value); } - else { - /* whole window */ - xpos = 0; - ypos = 0; - width = ctx->DrawBuffer->Width; - height = ctx->DrawBuffer->Height; - } - - ctx->Driver.Accum( ctx, op, value, xpos, ypos, width, height ); } + + void _mesa_init_accum( GLcontext *ctx ) { diff --git a/src/kits/opengl/mesa/main/api_arrayelt.c b/src/kits/opengl/mesa/main/api_arrayelt.c index 12ea41379c..1899975213 100644 --- a/src/kits/opengl/mesa/main/api_arrayelt.c +++ b/src/kits/opengl/mesa/main/api_arrayelt.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -29,16 +29,16 @@ #include "glheader.h" #include "api_arrayelt.h" #include "context.h" -#include "glapi.h" #include "imports.h" #include "macros.h" -#include "mtypes.h" +#include "glapioffsets.h" +#include "dispatch.h" typedef void (GLAPIENTRY *array_func)( const void * ); typedef struct { const struct gl_client_array *array; - array_func func; + int offset; } AEarray; typedef void (GLAPIENTRY *attrib_func)( GLuint indx, const void *data ); @@ -53,10 +53,16 @@ typedef struct { AEarray arrays[32]; AEattrib attribs[VERT_ATTRIB_MAX + 1]; GLuint NewState; + + struct gl_buffer_object *vbo[VERT_ATTRIB_MAX]; + GLuint nr_vbos; + GLboolean mapped_vbos; + } AEcontext; #define AE_CONTEXT(ctx) ((AEcontext *)(ctx)->aelt_context) + /* * Convert GL_BYTE, GL_UNSIGNED_BYTE, .. GL_DOUBLE into an integer * in the range [0, 7]. Luckily these type tokens are sequentially @@ -64,679 +70,421 @@ typedef struct { */ #define TYPE_IDX(t) ( (t) == GL_DOUBLE ? 7 : (t) & 7 ) -static void GLAPIENTRY Color3bv(const GLbyte *v) -{ - GL_CALL(Color3bv)(v); -} - -static void GLAPIENTRY Color3ubv(const GLubyte *v) -{ - GL_CALL(Color3ubv)(v); -} - -static void GLAPIENTRY Color3sv(const GLshort *v) -{ - GL_CALL(Color3sv)(v); -} - -static void GLAPIENTRY Color3usv(const GLushort *v) -{ - GL_CALL(Color3usv)(v); -} - -static void GLAPIENTRY Color3iv(const GLint *v) -{ - GL_CALL(Color3iv)(v); -} - -static void GLAPIENTRY Color3uiv(const GLuint *v) -{ - GL_CALL(Color3uiv)(v); -} - -static void GLAPIENTRY Color3fv(const GLfloat *v) -{ - GL_CALL(Color3fv)(v); -} - -static void GLAPIENTRY Color3dv(const GLdouble *v) -{ - GL_CALL(Color3dv)(v); -} - -static void GLAPIENTRY Color4bv(const GLbyte *v) -{ - GL_CALL(Color4bv)(v); -} - -static void GLAPIENTRY Color4ubv(const GLubyte *v) -{ - GL_CALL(Color4ubv)(v); -} - -static void GLAPIENTRY Color4sv(const GLshort *v) -{ - GL_CALL(Color4sv)(v); -} - -static void GLAPIENTRY Color4usv(const GLushort *v) -{ - GL_CALL(Color4usv)(v); -} - -static void GLAPIENTRY Color4iv(const GLint *v) -{ - GL_CALL(Color4iv)(v); -} - -static void GLAPIENTRY Color4uiv(const GLuint *v) -{ - GL_CALL(Color4uiv)(v); -} - -static void GLAPIENTRY Color4fv(const GLfloat *v) -{ - GL_CALL(Color4fv)(v); -} - -static void GLAPIENTRY Color4dv(const GLdouble *v) -{ - GL_CALL(Color4dv)(v); -} - -static const array_func ColorFuncs[2][8] = { +static const int ColorFuncs[2][8] = { { - (array_func) Color3bv, - (array_func) Color3ubv, - (array_func) Color3sv, - (array_func) Color3usv, - (array_func) Color3iv, - (array_func) Color3uiv, - (array_func) Color3fv, - (array_func) Color3dv, + _gloffset_Color3bv, + _gloffset_Color3ubv, + _gloffset_Color3sv, + _gloffset_Color3usv, + _gloffset_Color3iv, + _gloffset_Color3uiv, + _gloffset_Color3fv, + _gloffset_Color3dv, }, { - (array_func) Color4bv, - (array_func) Color4ubv, - (array_func) Color4sv, - (array_func) Color4usv, - (array_func) Color4iv, - (array_func) Color4uiv, - (array_func) Color4fv, - (array_func) Color4dv, + _gloffset_Color4bv, + _gloffset_Color4ubv, + _gloffset_Color4sv, + _gloffset_Color4usv, + _gloffset_Color4iv, + _gloffset_Color4uiv, + _gloffset_Color4fv, + _gloffset_Color4dv, }, }; -static void GLAPIENTRY Vertex2sv(const GLshort *v) -{ - GL_CALL(Vertex2sv)(v); -} - -static void GLAPIENTRY Vertex2iv(const GLint *v) -{ - GL_CALL(Vertex2iv)(v); -} - -static void GLAPIENTRY Vertex2fv(const GLfloat *v) -{ - GL_CALL(Vertex2fv)(v); -} - -static void GLAPIENTRY Vertex2dv(const GLdouble *v) -{ - GL_CALL(Vertex2dv)(v); -} - -static void GLAPIENTRY Vertex3sv(const GLshort *v) -{ - GL_CALL(Vertex3sv)(v); -} - -static void GLAPIENTRY Vertex3iv(const GLint *v) -{ - GL_CALL(Vertex3iv)(v); -} - -static void GLAPIENTRY Vertex3fv(const GLfloat *v) -{ - GL_CALL(Vertex3fv)(v); -} - -static void GLAPIENTRY Vertex3dv(const GLdouble *v) -{ - GL_CALL(Vertex3dv)(v); -} - -static void GLAPIENTRY Vertex4sv(const GLshort *v) -{ - GL_CALL(Vertex4sv)(v); -} - -static void GLAPIENTRY Vertex4iv(const GLint *v) -{ - GL_CALL(Vertex4iv)(v); -} - -static void GLAPIENTRY Vertex4fv(const GLfloat *v) -{ - GL_CALL(Vertex4fv)(v); -} - -static void GLAPIENTRY Vertex4dv(const GLdouble *v) -{ - GL_CALL(Vertex4dv)(v); -} - -static const array_func VertexFuncs[3][8] = { +static const int VertexFuncs[3][8] = { { - 0, - 0, - (array_func) Vertex2sv, - 0, - (array_func) Vertex2iv, - 0, - (array_func) Vertex2fv, - (array_func) Vertex2dv, + -1, + -1, + _gloffset_Vertex2sv, + -1, + _gloffset_Vertex2iv, + -1, + _gloffset_Vertex2fv, + _gloffset_Vertex2dv, }, { - 0, - 0, - (array_func) Vertex3sv, - 0, - (array_func) Vertex3iv, - 0, - (array_func) Vertex3fv, - (array_func) Vertex3dv, + -1, + -1, + _gloffset_Vertex3sv, + -1, + _gloffset_Vertex3iv, + -1, + _gloffset_Vertex3fv, + _gloffset_Vertex3dv, }, { - 0, - 0, - (array_func) Vertex4sv, - 0, - (array_func) Vertex4iv, - 0, - (array_func) Vertex4fv, - (array_func) Vertex4dv, + -1, + -1, + _gloffset_Vertex4sv, + -1, + _gloffset_Vertex4iv, + -1, + _gloffset_Vertex4fv, + _gloffset_Vertex4dv, }, }; -static void GLAPIENTRY Indexubv(const GLubyte *c) -{ - GL_CALL(Indexubv)(c); -} - -static void GLAPIENTRY Indexsv(const GLshort *c) -{ - GL_CALL(Indexsv)(c); -} - -static void GLAPIENTRY Indexiv(const GLint *c) -{ - GL_CALL(Indexiv)(c); -} - -static void GLAPIENTRY Indexfv(const GLfloat *c) -{ - GL_CALL(Indexfv)(c); -} - -static void GLAPIENTRY Indexdv(const GLdouble *c) -{ - GL_CALL(Indexdv)(c); -} - -static const array_func IndexFuncs[8] = { - 0, - (array_func) Indexubv, - (array_func) Indexsv, - 0, - (array_func) Indexiv, - 0, - (array_func) Indexfv, - (array_func) Indexdv, +static const int IndexFuncs[8] = { + -1, + _gloffset_Indexubv, + _gloffset_Indexsv, + -1, + _gloffset_Indexiv, + -1, + _gloffset_Indexfv, + _gloffset_Indexdv, }; -static void GLAPIENTRY Normal3bv(const GLbyte *v) -{ - GL_CALL(Normal3bv)(v); -} - -static void GLAPIENTRY Normal3sv(const GLshort *v) -{ - GL_CALL(Normal3sv)(v); -} - -static void GLAPIENTRY Normal3iv(const GLint *v) -{ - GL_CALL(Normal3iv)(v); -} - -static void GLAPIENTRY Normal3fv(const GLfloat *v) -{ - GL_CALL(Normal3fv)(v); -} - -static void GLAPIENTRY Normal3dv(const GLdouble *v) -{ - GL_CALL(Normal3dv)(v); -} - -static const array_func NormalFuncs[8] = { - (array_func) Normal3bv, - 0, - (array_func) Normal3sv, - 0, - (array_func) Normal3iv, - 0, - (array_func) Normal3fv, - (array_func) Normal3dv, +static const int NormalFuncs[8] = { + _gloffset_Normal3bv, + -1, + _gloffset_Normal3sv, + -1, + _gloffset_Normal3iv, + -1, + _gloffset_Normal3fv, + _gloffset_Normal3dv, }; -/* Wrapper functions in case glSecondaryColor*EXT doesn't exist */ -static void GLAPIENTRY SecondaryColor3bvEXT(const GLbyte *c) -{ - GL_CALL(SecondaryColor3bvEXT)(c); -} - -static void GLAPIENTRY SecondaryColor3ubvEXT(const GLubyte *c) -{ - GL_CALL(SecondaryColor3ubvEXT)(c); -} - -static void GLAPIENTRY SecondaryColor3svEXT(const GLshort *c) -{ - GL_CALL(SecondaryColor3svEXT)(c); -} - -static void GLAPIENTRY SecondaryColor3usvEXT(const GLushort *c) -{ - GL_CALL(SecondaryColor3usvEXT)(c); -} - -static void GLAPIENTRY SecondaryColor3ivEXT(const GLint *c) -{ - GL_CALL(SecondaryColor3ivEXT)(c); -} - -static void GLAPIENTRY SecondaryColor3uivEXT(const GLuint *c) -{ - GL_CALL(SecondaryColor3uivEXT)(c); -} - -static void GLAPIENTRY SecondaryColor3fvEXT(const GLfloat *c) -{ - GL_CALL(SecondaryColor3fvEXT)(c); -} - -static void GLAPIENTRY SecondaryColor3dvEXT(const GLdouble *c) -{ - GL_CALL(SecondaryColor3dvEXT)(c); -} - -static const array_func SecondaryColorFuncs[8] = { - (array_func) SecondaryColor3bvEXT, - (array_func) SecondaryColor3ubvEXT, - (array_func) SecondaryColor3svEXT, - (array_func) SecondaryColor3usvEXT, - (array_func) SecondaryColor3ivEXT, - (array_func) SecondaryColor3uivEXT, - (array_func) SecondaryColor3fvEXT, - (array_func) SecondaryColor3dvEXT, -}; +/* Note: _gloffset_* for these may not be a compile-time constant. */ +static int SecondaryColorFuncs[8]; +static int FogCoordFuncs[8]; -/* Again, wrapper functions in case glSecondaryColor*EXT doesn't exist */ -static void GLAPIENTRY FogCoordfvEXT(const GLfloat *f) -{ - GL_CALL(FogCoordfvEXT)(f); -} - -static void GLAPIENTRY FogCoorddvEXT(const GLdouble *f) -{ - GL_CALL(FogCoorddvEXT)(f); -} - -static const array_func FogCoordFuncs[8] = { - 0, - 0, - 0, - 0, - 0, - 0, - (array_func) FogCoordfvEXT, - (array_func) FogCoorddvEXT -}; - -/**********************************************************************/ +/** + ** GL_NV_vertex_program + **/ /* GL_BYTE attributes */ static void GLAPIENTRY VertexAttrib1NbvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib1fNV)(index, BYTE_TO_FLOAT(v[0])); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]))); } static void GLAPIENTRY VertexAttrib1bvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib1fNV)(index, v[0]); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0])); } static void GLAPIENTRY VertexAttrib2NbvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib2fNV)(index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1])); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]))); } static void GLAPIENTRY VertexAttrib2bvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1])); } static void GLAPIENTRY VertexAttrib3NbvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib3fNV)(index, BYTE_TO_FLOAT(v[0]), - BYTE_TO_FLOAT(v[1]), - BYTE_TO_FLOAT(v[2])); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), + BYTE_TO_FLOAT(v[1]), + BYTE_TO_FLOAT(v[2]))); } static void GLAPIENTRY VertexAttrib3bvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2])); } static void GLAPIENTRY VertexAttrib4NbvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib4fNV)(index, BYTE_TO_FLOAT(v[0]), - BYTE_TO_FLOAT(v[1]), - BYTE_TO_FLOAT(v[2]), - BYTE_TO_FLOAT(v[3])); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), + BYTE_TO_FLOAT(v[1]), + BYTE_TO_FLOAT(v[2]), + BYTE_TO_FLOAT(v[3]))); } static void GLAPIENTRY VertexAttrib4bvNV(GLuint index, const GLbyte *v) { - GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); } /* GL_UNSIGNED_BYTE attributes */ static void GLAPIENTRY VertexAttrib1NubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib1fNV)(index, UBYTE_TO_FLOAT(v[0])); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]))); } static void GLAPIENTRY VertexAttrib1ubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib1fNV)(index, v[0]); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0])); } static void GLAPIENTRY VertexAttrib2NubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib2fNV)(index, UBYTE_TO_FLOAT(v[0]), - UBYTE_TO_FLOAT(v[1])); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]), + UBYTE_TO_FLOAT(v[1]))); } static void GLAPIENTRY VertexAttrib2ubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1])); } static void GLAPIENTRY VertexAttrib3NubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib3fNV)(index, UBYTE_TO_FLOAT(v[0]), - UBYTE_TO_FLOAT(v[1]), - UBYTE_TO_FLOAT(v[2])); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]), + UBYTE_TO_FLOAT(v[1]), + UBYTE_TO_FLOAT(v[2]))); } static void GLAPIENTRY VertexAttrib3ubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2])); } static void GLAPIENTRY VertexAttrib4NubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib4fNV)(index, UBYTE_TO_FLOAT(v[0]), + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]), UBYTE_TO_FLOAT(v[2]), - UBYTE_TO_FLOAT(v[3])); + UBYTE_TO_FLOAT(v[3]))); } static void GLAPIENTRY VertexAttrib4ubvNV(GLuint index, const GLubyte *v) { - GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); } /* GL_SHORT attributes */ static void GLAPIENTRY VertexAttrib1NsvNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib1fNV)(index, SHORT_TO_FLOAT(v[0])); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]))); } static void GLAPIENTRY VertexAttrib1svNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib1fNV)(index, v[0]); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0])); } static void GLAPIENTRY VertexAttrib2NsvNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib2fNV)(index, SHORT_TO_FLOAT(v[0]), - SHORT_TO_FLOAT(v[1])); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]), + SHORT_TO_FLOAT(v[1]))); } static void GLAPIENTRY VertexAttrib2svNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1])); } static void GLAPIENTRY VertexAttrib3NsvNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib3fNV)(index, SHORT_TO_FLOAT(v[0]), + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), - SHORT_TO_FLOAT(v[2])); + SHORT_TO_FLOAT(v[2]))); } static void GLAPIENTRY VertexAttrib3svNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2])); } static void GLAPIENTRY VertexAttrib4NsvNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib4fNV)(index, SHORT_TO_FLOAT(v[0]), + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]), - SHORT_TO_FLOAT(v[3])); + SHORT_TO_FLOAT(v[3]))); } static void GLAPIENTRY VertexAttrib4svNV(GLuint index, const GLshort *v) { - GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); } /* GL_UNSIGNED_SHORT attributes */ static void GLAPIENTRY VertexAttrib1NusvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib1fNV)(index, USHORT_TO_FLOAT(v[0])); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]))); } static void GLAPIENTRY VertexAttrib1usvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib1fNV)(index, v[0]); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0])); } static void GLAPIENTRY VertexAttrib2NusvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib2fNV)(index, USHORT_TO_FLOAT(v[0]), - USHORT_TO_FLOAT(v[1])); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]), + USHORT_TO_FLOAT(v[1]))); } static void GLAPIENTRY VertexAttrib2usvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1])); } static void GLAPIENTRY VertexAttrib3NusvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib3fNV)(index, USHORT_TO_FLOAT(v[0]), - USHORT_TO_FLOAT(v[1]), - USHORT_TO_FLOAT(v[2])); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]), + USHORT_TO_FLOAT(v[1]), + USHORT_TO_FLOAT(v[2]))); } static void GLAPIENTRY VertexAttrib3usvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2])); } static void GLAPIENTRY VertexAttrib4NusvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib4fNV)(index, USHORT_TO_FLOAT(v[0]), - USHORT_TO_FLOAT(v[1]), - USHORT_TO_FLOAT(v[2]), - USHORT_TO_FLOAT(v[3])); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]), + USHORT_TO_FLOAT(v[1]), + USHORT_TO_FLOAT(v[2]), + USHORT_TO_FLOAT(v[3]))); } static void GLAPIENTRY VertexAttrib4usvNV(GLuint index, const GLushort *v) { - GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); } /* GL_INT attributes */ static void GLAPIENTRY VertexAttrib1NivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib1fNV)(index, INT_TO_FLOAT(v[0])); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]))); } static void GLAPIENTRY VertexAttrib1ivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib1fNV)(index, v[0]); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0])); } static void GLAPIENTRY VertexAttrib2NivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib2fNV)(index, INT_TO_FLOAT(v[0]), - INT_TO_FLOAT(v[1])); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]), + INT_TO_FLOAT(v[1]))); } static void GLAPIENTRY VertexAttrib2ivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1])); } static void GLAPIENTRY VertexAttrib3NivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib3fNV)(index, INT_TO_FLOAT(v[0]), - INT_TO_FLOAT(v[1]), - INT_TO_FLOAT(v[2])); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]), + INT_TO_FLOAT(v[1]), + INT_TO_FLOAT(v[2]))); } static void GLAPIENTRY VertexAttrib3ivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2])); } static void GLAPIENTRY VertexAttrib4NivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib4fNV)(index, INT_TO_FLOAT(v[0]), - INT_TO_FLOAT(v[1]), - INT_TO_FLOAT(v[2]), - INT_TO_FLOAT(v[3])); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]), + INT_TO_FLOAT(v[1]), + INT_TO_FLOAT(v[2]), + INT_TO_FLOAT(v[3]))); } static void GLAPIENTRY VertexAttrib4ivNV(GLuint index, const GLint *v) { - GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); } /* GL_UNSIGNED_INT attributes */ static void GLAPIENTRY VertexAttrib1NuivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib1fNV)(index, UINT_TO_FLOAT(v[0])); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]))); } static void GLAPIENTRY VertexAttrib1uivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib1fNV)(index, v[0]); + CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, v[0])); } static void GLAPIENTRY VertexAttrib2NuivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib2fNV)(index, UINT_TO_FLOAT(v[0]), - UINT_TO_FLOAT(v[1])); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]), + UINT_TO_FLOAT(v[1]))); } static void GLAPIENTRY VertexAttrib2uivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib2fNV)(index, v[0], v[1]); + CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, v[0], v[1])); } static void GLAPIENTRY VertexAttrib3NuivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib3fNV)(index, UINT_TO_FLOAT(v[0]), - UINT_TO_FLOAT(v[1]), - UINT_TO_FLOAT(v[2])); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]), + UINT_TO_FLOAT(v[1]), + UINT_TO_FLOAT(v[2]))); } static void GLAPIENTRY VertexAttrib3uivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib3fNV)(index, v[0], v[1], v[2]); + CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, v[0], v[1], v[2])); } static void GLAPIENTRY VertexAttrib4NuivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib4fNV)(index, UINT_TO_FLOAT(v[0]), - UINT_TO_FLOAT(v[1]), - UINT_TO_FLOAT(v[2]), - UINT_TO_FLOAT(v[3])); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]), + UINT_TO_FLOAT(v[1]), + UINT_TO_FLOAT(v[2]), + UINT_TO_FLOAT(v[3]))); } static void GLAPIENTRY VertexAttrib4uivNV(GLuint index, const GLuint *v) { - GL_CALL(VertexAttrib4fNV)(index, v[0], v[1], v[2], v[3]); + CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); } /* GL_FLOAT attributes */ static void GLAPIENTRY VertexAttrib1fvNV(GLuint index, const GLfloat *v) { - GL_CALL(VertexAttrib1fvNV)(index, v); + CALL_VertexAttrib1fvNV(GET_DISPATCH(), (index, v)); } static void GLAPIENTRY VertexAttrib2fvNV(GLuint index, const GLfloat *v) { - GL_CALL(VertexAttrib2fvNV)(index, v); + CALL_VertexAttrib2fvNV(GET_DISPATCH(), (index, v)); } static void GLAPIENTRY VertexAttrib3fvNV(GLuint index, const GLfloat *v) { - GL_CALL(VertexAttrib3fvNV)(index, v); + CALL_VertexAttrib3fvNV(GET_DISPATCH(), (index, v)); } static void GLAPIENTRY VertexAttrib4fvNV(GLuint index, const GLfloat *v) { - GL_CALL(VertexAttrib4fvNV)(index, v); + CALL_VertexAttrib4fvNV(GET_DISPATCH(), (index, v)); } /* GL_DOUBLE attributes */ static void GLAPIENTRY VertexAttrib1dvNV(GLuint index, const GLdouble *v) { - GL_CALL(VertexAttrib1dvNV)(index, v); + CALL_VertexAttrib1dvNV(GET_DISPATCH(), (index, v)); } static void GLAPIENTRY VertexAttrib2dvNV(GLuint index, const GLdouble *v) { - GL_CALL(VertexAttrib2dvNV)(index, v); + CALL_VertexAttrib2dvNV(GET_DISPATCH(), (index, v)); } static void GLAPIENTRY VertexAttrib3dvNV(GLuint index, const GLdouble *v) { - GL_CALL(VertexAttrib3dvNV)(index, v); + CALL_VertexAttrib3dvNV(GET_DISPATCH(), (index, v)); } static void GLAPIENTRY VertexAttrib4dvNV(GLuint index, const GLdouble *v) { - GL_CALL(VertexAttrib4dvNV)(index, v); + CALL_VertexAttrib4dvNV(GET_DISPATCH(), (index, v)); } @@ -840,11 +588,442 @@ static attrib_func AttribFuncsNV[2][4][8] = { } }; -static void GLAPIENTRY EdgeFlagv(const GLboolean *flag) + +/** + ** GL_ARB_vertex_program + **/ + +/* GL_BYTE attributes */ + +static void GLAPIENTRY VertexAttrib1NbvARB(GLuint index, const GLbyte *v) { - GL_CALL(EdgeFlagv)(flag); + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]))); } +static void GLAPIENTRY VertexAttrib1bvARB(GLuint index, const GLbyte *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, v[0])); +} + +static void GLAPIENTRY VertexAttrib2NbvARB(GLuint index, const GLbyte *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]))); +} + +static void GLAPIENTRY VertexAttrib2bvARB(GLuint index, const GLbyte *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, v[0], v[1])); +} + +static void GLAPIENTRY VertexAttrib3NbvARB(GLuint index, const GLbyte *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), + BYTE_TO_FLOAT(v[1]), + BYTE_TO_FLOAT(v[2]))); +} + +static void GLAPIENTRY VertexAttrib3bvARB(GLuint index, const GLbyte *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, v[0], v[1], v[2])); +} + +static void GLAPIENTRY VertexAttrib4NbvARB(GLuint index, const GLbyte *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), + BYTE_TO_FLOAT(v[1]), + BYTE_TO_FLOAT(v[2]), + BYTE_TO_FLOAT(v[3]))); +} + +static void GLAPIENTRY VertexAttrib4bvARB(GLuint index, const GLbyte *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); +} + +/* GL_UNSIGNED_BYTE attributes */ + +static void GLAPIENTRY VertexAttrib1NubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]))); +} + +static void GLAPIENTRY VertexAttrib1ubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, v[0])); +} + +static void GLAPIENTRY VertexAttrib2NubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]), + UBYTE_TO_FLOAT(v[1]))); +} + +static void GLAPIENTRY VertexAttrib2ubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, v[0], v[1])); +} + +static void GLAPIENTRY VertexAttrib3NubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]), + UBYTE_TO_FLOAT(v[1]), + UBYTE_TO_FLOAT(v[2]))); +} +static void GLAPIENTRY VertexAttrib3ubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, v[0], v[1], v[2])); +} + +static void GLAPIENTRY VertexAttrib4NubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]), + UBYTE_TO_FLOAT(v[1]), + UBYTE_TO_FLOAT(v[2]), + UBYTE_TO_FLOAT(v[3]))); +} + +static void GLAPIENTRY VertexAttrib4ubvARB(GLuint index, const GLubyte *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); +} + +/* GL_SHORT attributes */ + +static void GLAPIENTRY VertexAttrib1NsvARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]))); +} + +static void GLAPIENTRY VertexAttrib1svARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, v[0])); +} + +static void GLAPIENTRY VertexAttrib2NsvARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]), + SHORT_TO_FLOAT(v[1]))); +} + +static void GLAPIENTRY VertexAttrib2svARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, v[0], v[1])); +} + +static void GLAPIENTRY VertexAttrib3NsvARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]), + SHORT_TO_FLOAT(v[1]), + SHORT_TO_FLOAT(v[2]))); +} + +static void GLAPIENTRY VertexAttrib3svARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, v[0], v[1], v[2])); +} + +static void GLAPIENTRY VertexAttrib4NsvARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]), + SHORT_TO_FLOAT(v[1]), + SHORT_TO_FLOAT(v[2]), + SHORT_TO_FLOAT(v[3]))); +} + +static void GLAPIENTRY VertexAttrib4svARB(GLuint index, const GLshort *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); +} + +/* GL_UNSIGNED_SHORT attributes */ + +static void GLAPIENTRY VertexAttrib1NusvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]))); +} + +static void GLAPIENTRY VertexAttrib1usvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, v[0])); +} + +static void GLAPIENTRY VertexAttrib2NusvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]), + USHORT_TO_FLOAT(v[1]))); +} + +static void GLAPIENTRY VertexAttrib2usvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, v[0], v[1])); +} + +static void GLAPIENTRY VertexAttrib3NusvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]), + USHORT_TO_FLOAT(v[1]), + USHORT_TO_FLOAT(v[2]))); +} + +static void GLAPIENTRY VertexAttrib3usvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, v[0], v[1], v[2])); +} + +static void GLAPIENTRY VertexAttrib4NusvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]), + USHORT_TO_FLOAT(v[1]), + USHORT_TO_FLOAT(v[2]), + USHORT_TO_FLOAT(v[3]))); +} + +static void GLAPIENTRY VertexAttrib4usvARB(GLuint index, const GLushort *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); +} + +/* GL_INT attributes */ + +static void GLAPIENTRY VertexAttrib1NivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]))); +} + +static void GLAPIENTRY VertexAttrib1ivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, v[0])); +} + +static void GLAPIENTRY VertexAttrib2NivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]), + INT_TO_FLOAT(v[1]))); +} + +static void GLAPIENTRY VertexAttrib2ivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, v[0], v[1])); +} + +static void GLAPIENTRY VertexAttrib3NivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]), + INT_TO_FLOAT(v[1]), + INT_TO_FLOAT(v[2]))); +} + +static void GLAPIENTRY VertexAttrib3ivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, v[0], v[1], v[2])); +} + +static void GLAPIENTRY VertexAttrib4NivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]), + INT_TO_FLOAT(v[1]), + INT_TO_FLOAT(v[2]), + INT_TO_FLOAT(v[3]))); +} + +static void GLAPIENTRY VertexAttrib4ivARB(GLuint index, const GLint *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); +} + +/* GL_UNSIGNED_INT attributes */ + +static void GLAPIENTRY VertexAttrib1NuivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]))); +} + +static void GLAPIENTRY VertexAttrib1uivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, v[0])); +} + +static void GLAPIENTRY VertexAttrib2NuivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]), + UINT_TO_FLOAT(v[1]))); +} + +static void GLAPIENTRY VertexAttrib2uivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, v[0], v[1])); +} + +static void GLAPIENTRY VertexAttrib3NuivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]), + UINT_TO_FLOAT(v[1]), + UINT_TO_FLOAT(v[2]))); +} + +static void GLAPIENTRY VertexAttrib3uivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, v[0], v[1], v[2])); +} + +static void GLAPIENTRY VertexAttrib4NuivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]), + UINT_TO_FLOAT(v[1]), + UINT_TO_FLOAT(v[2]), + UINT_TO_FLOAT(v[3]))); +} + +static void GLAPIENTRY VertexAttrib4uivARB(GLuint index, const GLuint *v) +{ + CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, v[0], v[1], v[2], v[3])); +} + +/* GL_FLOAT attributes */ + +static void GLAPIENTRY VertexAttrib1fvARB(GLuint index, const GLfloat *v) +{ + CALL_VertexAttrib1fvARB(GET_DISPATCH(), (index, v)); +} + +static void GLAPIENTRY VertexAttrib2fvARB(GLuint index, const GLfloat *v) +{ + CALL_VertexAttrib2fvARB(GET_DISPATCH(), (index, v)); +} + +static void GLAPIENTRY VertexAttrib3fvARB(GLuint index, const GLfloat *v) +{ + CALL_VertexAttrib3fvARB(GET_DISPATCH(), (index, v)); +} + +static void GLAPIENTRY VertexAttrib4fvARB(GLuint index, const GLfloat *v) +{ + CALL_VertexAttrib4fvARB(GET_DISPATCH(), (index, v)); +} + +/* GL_DOUBLE attributes */ + +static void GLAPIENTRY VertexAttrib1dvARB(GLuint index, const GLdouble *v) +{ + CALL_VertexAttrib1dvARB(GET_DISPATCH(), (index, v)); +} + +static void GLAPIENTRY VertexAttrib2dvARB(GLuint index, const GLdouble *v) +{ + CALL_VertexAttrib2dvARB(GET_DISPATCH(), (index, v)); +} + +static void GLAPIENTRY VertexAttrib3dvARB(GLuint index, const GLdouble *v) +{ + CALL_VertexAttrib3dvARB(GET_DISPATCH(), (index, v)); +} + +static void GLAPIENTRY VertexAttrib4dvARB(GLuint index, const GLdouble *v) +{ + CALL_VertexAttrib4dvARB(GET_DISPATCH(), (index, v)); +} + + +/* + * Array [size][type] of VertexAttrib functions + */ +static attrib_func AttribFuncsARB[2][4][8] = { + { + /* non-normalized */ + { + /* size 1 */ + (attrib_func) VertexAttrib1bvARB, + (attrib_func) VertexAttrib1ubvARB, + (attrib_func) VertexAttrib1svARB, + (attrib_func) VertexAttrib1usvARB, + (attrib_func) VertexAttrib1ivARB, + (attrib_func) VertexAttrib1uivARB, + (attrib_func) VertexAttrib1fvARB, + (attrib_func) VertexAttrib1dvARB + }, + { + /* size 2 */ + (attrib_func) VertexAttrib2bvARB, + (attrib_func) VertexAttrib2ubvARB, + (attrib_func) VertexAttrib2svARB, + (attrib_func) VertexAttrib2usvARB, + (attrib_func) VertexAttrib2ivARB, + (attrib_func) VertexAttrib2uivARB, + (attrib_func) VertexAttrib2fvARB, + (attrib_func) VertexAttrib2dvARB + }, + { + /* size 3 */ + (attrib_func) VertexAttrib3bvARB, + (attrib_func) VertexAttrib3ubvARB, + (attrib_func) VertexAttrib3svARB, + (attrib_func) VertexAttrib3usvARB, + (attrib_func) VertexAttrib3ivARB, + (attrib_func) VertexAttrib3uivARB, + (attrib_func) VertexAttrib3fvARB, + (attrib_func) VertexAttrib3dvARB + }, + { + /* size 4 */ + (attrib_func) VertexAttrib4bvARB, + (attrib_func) VertexAttrib4ubvARB, + (attrib_func) VertexAttrib4svARB, + (attrib_func) VertexAttrib4usvARB, + (attrib_func) VertexAttrib4ivARB, + (attrib_func) VertexAttrib4uivARB, + (attrib_func) VertexAttrib4fvARB, + (attrib_func) VertexAttrib4dvARB + } + }, + { + /* normalized (except for float/double) */ + { + /* size 1 */ + (attrib_func) VertexAttrib1NbvARB, + (attrib_func) VertexAttrib1NubvARB, + (attrib_func) VertexAttrib1NsvARB, + (attrib_func) VertexAttrib1NusvARB, + (attrib_func) VertexAttrib1NivARB, + (attrib_func) VertexAttrib1NuivARB, + (attrib_func) VertexAttrib1fvARB, + (attrib_func) VertexAttrib1dvARB + }, + { + /* size 2 */ + (attrib_func) VertexAttrib2NbvARB, + (attrib_func) VertexAttrib2NubvARB, + (attrib_func) VertexAttrib2NsvARB, + (attrib_func) VertexAttrib2NusvARB, + (attrib_func) VertexAttrib2NivARB, + (attrib_func) VertexAttrib2NuivARB, + (attrib_func) VertexAttrib2fvARB, + (attrib_func) VertexAttrib2dvARB + }, + { + /* size 3 */ + (attrib_func) VertexAttrib3NbvARB, + (attrib_func) VertexAttrib3NubvARB, + (attrib_func) VertexAttrib3NsvARB, + (attrib_func) VertexAttrib3NusvARB, + (attrib_func) VertexAttrib3NivARB, + (attrib_func) VertexAttrib3NuivARB, + (attrib_func) VertexAttrib3fvARB, + (attrib_func) VertexAttrib3dvARB + }, + { + /* size 4 */ + (attrib_func) VertexAttrib4NbvARB, + (attrib_func) VertexAttrib4NubvARB, + (attrib_func) VertexAttrib4NsvARB, + (attrib_func) VertexAttrib4NusvARB, + (attrib_func) VertexAttrib4NivARB, + (attrib_func) VertexAttrib4NuivARB, + (attrib_func) VertexAttrib4fvARB, + (attrib_func) VertexAttrib4dvARB + } + } +}; + /**********************************************************************/ @@ -853,7 +1032,26 @@ GLboolean _ae_create_context( GLcontext *ctx ) if (ctx->aelt_context) return GL_TRUE; - ctx->aelt_context = MALLOC( sizeof(AEcontext) ); + /* These _gloffset_* values may not be compile-time constants */ + SecondaryColorFuncs[0] = _gloffset_SecondaryColor3bvEXT; + SecondaryColorFuncs[1] = _gloffset_SecondaryColor3ubvEXT; + SecondaryColorFuncs[2] = _gloffset_SecondaryColor3svEXT; + SecondaryColorFuncs[3] = _gloffset_SecondaryColor3usvEXT; + SecondaryColorFuncs[4] = _gloffset_SecondaryColor3ivEXT; + SecondaryColorFuncs[5] = _gloffset_SecondaryColor3uivEXT; + SecondaryColorFuncs[6] = _gloffset_SecondaryColor3fvEXT; + SecondaryColorFuncs[7] = _gloffset_SecondaryColor3dvEXT; + + FogCoordFuncs[0] = -1; + FogCoordFuncs[1] = -1; + FogCoordFuncs[2] = -1; + FogCoordFuncs[3] = -1; + FogCoordFuncs[4] = -1; + FogCoordFuncs[5] = -1; + FogCoordFuncs[6] = _gloffset_FogCoordfvEXT; + FogCoordFuncs[7] = _gloffset_FogCoorddvEXT; + + ctx->aelt_context = CALLOC( sizeof(AEcontext) ); if (!ctx->aelt_context) return GL_FALSE; @@ -866,7 +1064,20 @@ void _ae_destroy_context( GLcontext *ctx ) { if ( AE_CONTEXT( ctx ) ) { FREE( ctx->aelt_context ); - ctx->aelt_context = 0; + ctx->aelt_context = NULL; + } +} + +static void check_vbo( AEcontext *actx, + struct gl_buffer_object *vbo ) +{ + if (vbo->Name && !vbo->Pointer) { + GLuint i; + for (i = 0; i < actx->nr_vbos; i++) + if (actx->vbo[i] == vbo) + return; + assert(actx->nr_vbos < VERT_ATTRIB_MAX); + actx->vbo[actx->nr_vbos++] = vbo; } } @@ -884,91 +1095,156 @@ static void _ae_update_state( GLcontext *ctx ) AEattrib *at = actx->attribs; GLuint i; + actx->nr_vbos = 0; + /* conventional vertex arrays */ - if (ctx->Array.Index.Enabled) { - aa->array = &ctx->Array.Index; - aa->func = IndexFuncs[TYPE_IDX(aa->array->Type)]; + if (ctx->Array.ArrayObj->Index.Enabled) { + aa->array = &ctx->Array.ArrayObj->Index; + aa->offset = IndexFuncs[TYPE_IDX(aa->array->Type)]; + check_vbo(actx, aa->array->BufferObj); aa++; } - if (ctx->Array.EdgeFlag.Enabled) { - aa->array = &ctx->Array.EdgeFlag; - aa->func = (array_func) EdgeFlagv; + if (ctx->Array.ArrayObj->EdgeFlag.Enabled) { + aa->array = &ctx->Array.ArrayObj->EdgeFlag; + aa->offset = _gloffset_EdgeFlagv; + check_vbo(actx, aa->array->BufferObj); aa++; } - if (ctx->Array.Normal.Enabled) { - aa->array = &ctx->Array.Normal; - aa->func = NormalFuncs[TYPE_IDX(aa->array->Type)]; + if (ctx->Array.ArrayObj->Normal.Enabled) { + aa->array = &ctx->Array.ArrayObj->Normal; + aa->offset = NormalFuncs[TYPE_IDX(aa->array->Type)]; + check_vbo(actx, aa->array->BufferObj); aa++; } - if (ctx->Array.Color.Enabled) { - aa->array = &ctx->Array.Color; - aa->func = ColorFuncs[aa->array->Size-3][TYPE_IDX(aa->array->Type)]; + if (ctx->Array.ArrayObj->Color.Enabled) { + aa->array = &ctx->Array.ArrayObj->Color; + aa->offset = ColorFuncs[aa->array->Size-3][TYPE_IDX(aa->array->Type)]; + check_vbo(actx, aa->array->BufferObj); aa++; } - if (ctx->Array.SecondaryColor.Enabled) { - aa->array = &ctx->Array.SecondaryColor; - aa->func = SecondaryColorFuncs[TYPE_IDX(aa->array->Type)]; + if (ctx->Array.ArrayObj->SecondaryColor.Enabled) { + aa->array = &ctx->Array.ArrayObj->SecondaryColor; + aa->offset = SecondaryColorFuncs[TYPE_IDX(aa->array->Type)]; + check_vbo(actx, aa->array->BufferObj); aa++; } - if (ctx->Array.FogCoord.Enabled) { - aa->array = &ctx->Array.FogCoord; - aa->func = FogCoordFuncs[TYPE_IDX(aa->array->Type)]; + if (ctx->Array.ArrayObj->FogCoord.Enabled) { + aa->array = &ctx->Array.ArrayObj->FogCoord; + aa->offset = FogCoordFuncs[TYPE_IDX(aa->array->Type)]; + check_vbo(actx, aa->array->BufferObj); aa++; } for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) { - if (ctx->Array.TexCoord[i].Enabled) { - /* NOTE: we use generic glVertexAttrib functions here. - * If we ever de-alias conventional/generic vertex attribs this - * will have to change. + struct gl_client_array *attribArray = &ctx->Array.ArrayObj->TexCoord[i]; + if (attribArray->Enabled) { + /* NOTE: we use generic glVertexAttribNV functions here. + * If we ever remove GL_NV_vertex_program this will have to change. */ - struct gl_client_array *attribArray = &ctx->Array.TexCoord[i]; at->array = attribArray; - at->func = AttribFuncsNV[at->array->Normalized][at->array->Size-1][TYPE_IDX(at->array->Type)]; + ASSERT(!at->array->Normalized); + at->func = AttribFuncsNV[at->array->Normalized] + [at->array->Size-1] + [TYPE_IDX(at->array->Type)]; at->index = VERT_ATTRIB_TEX0 + i; + check_vbo(actx, at->array->BufferObj); at++; } } - /* generic vertex attribute arrays */ + /* generic vertex attribute arrays */ for (i = 1; i < VERT_ATTRIB_MAX; i++) { /* skip zero! */ - if (ctx->Array.VertexAttrib[i].Enabled) { - struct gl_client_array *attribArray = &ctx->Array.VertexAttrib[i]; + struct gl_client_array *attribArray = &ctx->Array.ArrayObj->VertexAttrib[i]; + if (attribArray->Enabled) { at->array = attribArray; /* Note: we can't grab the _glapi_Dispatch->VertexAttrib1fvNV * function pointer here (for float arrays) since the pointer may * change from one execution of _ae_loopback_array_elt() to * the next. Doing so caused UT to break. */ - at->func = AttribFuncsNV[at->array->Normalized][at->array->Size-1][TYPE_IDX(at->array->Type)]; + if (ctx->VertexProgram._Enabled + && ctx->VertexProgram.Current->IsNVProgram) { + at->func = AttribFuncsNV[at->array->Normalized] + [at->array->Size-1] + [TYPE_IDX(at->array->Type)]; + } + else { + at->func = AttribFuncsARB[at->array->Normalized] + [at->array->Size-1] + [TYPE_IDX(at->array->Type)]; + } at->index = i; + check_vbo(actx, at->array->BufferObj); at++; } } /* finally, vertex position */ - if (ctx->Array.VertexAttrib[0].Enabled) { + if (ctx->Array.ArrayObj->VertexAttrib[0].Enabled) { /* Use glVertex(v) instead of glVertexAttrib(0, v) to be sure it's - * issued as the last (proviking) attribute). + * issued as the last (provoking) attribute). */ - aa->array = &ctx->Array.VertexAttrib[0]; + aa->array = &ctx->Array.ArrayObj->VertexAttrib[0]; assert(aa->array->Size >= 2); /* XXX fix someday? */ - aa->func = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)]; + aa->offset = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)]; + check_vbo(actx, aa->array->BufferObj); aa++; } - else if (ctx->Array.Vertex.Enabled) { - aa->array = &ctx->Array.Vertex; - aa->func = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)]; + else if (ctx->Array.ArrayObj->Vertex.Enabled) { + aa->array = &ctx->Array.ArrayObj->Vertex; + aa->offset = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)]; + check_vbo(actx, aa->array->BufferObj); aa++; } + check_vbo(actx, ctx->Array.ElementArrayBufferObj); + ASSERT(at - actx->attribs <= VERT_ATTRIB_MAX); ASSERT(aa - actx->arrays < 32); at->func = NULL; /* terminate the list */ - aa->func = NULL; /* terminate the list */ + aa->offset = -1; /* terminate the list */ actx->NewState = 0; } +void _ae_map_vbos( GLcontext *ctx ) +{ + AEcontext *actx = AE_CONTEXT(ctx); + GLuint i; + + if (actx->mapped_vbos) + return; + + if (actx->NewState) + _ae_update_state(ctx); + + for (i = 0; i < actx->nr_vbos; i++) + ctx->Driver.MapBuffer(ctx, + GL_ARRAY_BUFFER_ARB, + GL_DYNAMIC_DRAW_ARB, + actx->vbo[i]); + + if (actx->nr_vbos) + actx->mapped_vbos = GL_TRUE; +} + +void _ae_unmap_vbos( GLcontext *ctx ) +{ + AEcontext *actx = AE_CONTEXT(ctx); + GLuint i; + + if (!actx->mapped_vbos) + return; + + assert (!actx->NewState); + + for (i = 0; i < actx->nr_vbos; i++) + ctx->Driver.UnmapBuffer(ctx, + GL_ARRAY_BUFFER_ARB, + actx->vbo[i]); + + actx->mapped_vbos = GL_FALSE; +} + /** * Called via glArrayElement() and glDrawArrays(). @@ -982,29 +1258,60 @@ void GLAPIENTRY _ae_loopback_array_elt( GLint elt ) const AEcontext *actx = AE_CONTEXT(ctx); const AEarray *aa; const AEattrib *at; + const struct _glapi_table * const disp = GET_DISPATCH(); + GLboolean do_map; - if (actx->NewState) + if (actx->NewState) { + assert(!actx->mapped_vbos); _ae_update_state( ctx ); + } + do_map = actx->nr_vbos && !actx->mapped_vbos; + + /* + */ + if (do_map) + _ae_map_vbos(ctx); + /* generic attributes */ for (at = actx->attribs; at->func; at++) { - const GLubyte *src = at->array->BufferObj->Data - + (unsigned long) at->array->Ptr - + elt * at->array->StrideB; + const GLubyte *src + = ADD_POINTERS(at->array->BufferObj->Pointer, at->array->Ptr) + + elt * at->array->StrideB; at->func( at->index, src ); } /* conventional arrays */ - for (aa = actx->arrays; aa->func ; aa++) { - const GLubyte *src = aa->array->BufferObj->Data - + (unsigned long) aa->array->Ptr - + elt * aa->array->StrideB; - aa->func( src ); + for (aa = actx->arrays; aa->offset != -1 ; aa++) { + const GLubyte *src + = ADD_POINTERS(aa->array->BufferObj->Pointer, aa->array->Ptr) + + elt * aa->array->StrideB; + CALL_by_offset( disp, (array_func), aa->offset, + ((const void *) src) ); } + + if (do_map) + _ae_unmap_vbos(ctx); } void _ae_invalidate_state( GLcontext *ctx, GLuint new_state ) { - AE_CONTEXT(ctx)->NewState |= new_state; + AEcontext *actx = AE_CONTEXT(ctx); + + + /* Only interested in this subset of mesa state. Need to prune + * this down as both tnl/ and the drivers can raise statechanges + * for arcane reasons in the middle of seemingly atomic operations + * like DrawElements, over which we'd like to keep a known set of + * arrays and vbo's mapped. + * + * Luckily, neither the drivers nor tnl muck with the state that + * concerns us here: + */ + new_state &= _NEW_ARRAY | _NEW_PROGRAM; + if (new_state) { + assert(!actx->mapped_vbos); + actx->NewState |= new_state; + } } diff --git a/src/kits/opengl/mesa/main/api_arrayelt.h b/src/kits/opengl/mesa/main/api_arrayelt.h index 1c0af9f3ea..e621724fb2 100644 --- a/src/kits/opengl/mesa/main/api_arrayelt.h +++ b/src/kits/opengl/mesa/main/api_arrayelt.h @@ -34,4 +34,9 @@ extern void _ae_destroy_context( GLcontext *ctx ); extern void _ae_invalidate_state( GLcontext *ctx, GLuint new_state ); extern void GLAPIENTRY _ae_loopback_array_elt( GLint elt ); +/* May optionally be called before a batch of element calls: + */ +extern void _ae_map_vbos( GLcontext *ctx ); +extern void _ae_unmap_vbos( GLcontext *ctx ); + #endif diff --git a/src/kits/opengl/mesa/main/api_loopback.c b/src/kits/opengl/mesa/main/api_loopback.c index 2921569757..717ef1fc8f 100644 --- a/src/kits/opengl/mesa/main/api_loopback.c +++ b/src/kits/opengl/mesa/main/api_loopback.c @@ -36,6 +36,8 @@ #include "colormac.h" #include "api_loopback.h" #include "glthread.h" +#include "mtypes.h" +#include "dispatch.h" /* KW: A set of functions to convert unusual Color/Normal/Vertex/etc * calls to a smaller set of driver-provided formats. Currently just @@ -46,35 +48,35 @@ * listed in dd.h. The easiest way for a driver to do this is to * install the supplied software t&l module. */ -#define COLORF(r,g,b,a) GL_CALL(Color4f)(r,g,b,a) -#define VERTEX2(x,y) GL_CALL(Vertex2f)(x,y) -#define VERTEX3(x,y,z) GL_CALL(Vertex3f)(x,y,z) -#define VERTEX4(x,y,z,w) GL_CALL(Vertex4f)(x,y,z,w) -#define NORMAL(x,y,z) GL_CALL(Normal3f)(x,y,z) -#define TEXCOORD1(s) GL_CALL(TexCoord1f)(s) -#define TEXCOORD2(s,t) GL_CALL(TexCoord2f)(s,t) -#define TEXCOORD3(s,t,u) GL_CALL(TexCoord3f)(s,t,u) -#define TEXCOORD4(s,t,u,v) GL_CALL(TexCoord4f)(s,t,u,v) -#define INDEX(c) GL_CALL(Indexf)(c) -#define MULTI_TEXCOORD1(z,s) GL_CALL(MultiTexCoord1fARB)(z,s) -#define MULTI_TEXCOORD2(z,s,t) GL_CALL(MultiTexCoord2fARB)(z,s,t) -#define MULTI_TEXCOORD3(z,s,t,u) GL_CALL(MultiTexCoord3fARB)(z,s,t,u) -#define MULTI_TEXCOORD4(z,s,t,u,v) GL_CALL(MultiTexCoord4fARB)(z,s,t,u,v) -#define EVALCOORD1(x) GL_CALL(EvalCoord1f)(x) -#define EVALCOORD2(x,y) GL_CALL(EvalCoord2f)(x,y) -#define MATERIALFV(a,b,c) GL_CALL(Materialfv)(a,b,c) -#define RECTF(a,b,c,d) GL_CALL(Rectf)(a,b,c,d) +#define COLORF(r,g,b,a) CALL_Color4f(GET_DISPATCH(), (r,g,b,a)) +#define VERTEX2(x,y) CALL_Vertex2f(GET_DISPATCH(), (x,y)) +#define VERTEX3(x,y,z) CALL_Vertex3f(GET_DISPATCH(), (x,y,z)) +#define VERTEX4(x,y,z,w) CALL_Vertex4f(GET_DISPATCH(), (x,y,z,w)) +#define NORMAL(x,y,z) CALL_Normal3f(GET_DISPATCH(), (x,y,z)) +#define TEXCOORD1(s) CALL_TexCoord1f(GET_DISPATCH(), (s)) +#define TEXCOORD2(s,t) CALL_TexCoord2f(GET_DISPATCH(), (s,t)) +#define TEXCOORD3(s,t,u) CALL_TexCoord3f(GET_DISPATCH(), (s,t,u)) +#define TEXCOORD4(s,t,u,v) CALL_TexCoord4f(GET_DISPATCH(), (s,t,u,v)) +#define INDEX(c) CALL_Indexf(GET_DISPATCH(), (c)) +#define MULTI_TEXCOORD1(z,s) CALL_MultiTexCoord1fARB(GET_DISPATCH(), (z,s)) +#define MULTI_TEXCOORD2(z,s,t) CALL_MultiTexCoord2fARB(GET_DISPATCH(), (z,s,t)) +#define MULTI_TEXCOORD3(z,s,t,u) CALL_MultiTexCoord3fARB(GET_DISPATCH(), (z,s,t,u)) +#define MULTI_TEXCOORD4(z,s,t,u,v) CALL_MultiTexCoord4fARB(GET_DISPATCH(), (z,s,t,u,v)) +#define EVALCOORD1(x) CALL_EvalCoord1f(GET_DISPATCH(), (x)) +#define EVALCOORD2(x,y) CALL_EvalCoord2f(GET_DISPATCH(), (x,y)) +#define MATERIALFV(a,b,c) CALL_Materialfv(GET_DISPATCH(), (a,b,c)) +#define RECTF(a,b,c,d) CALL_Rectf(GET_DISPATCH(), (a,b,c,d)) -#define ATTRIB1NV(index,x) GL_CALL(VertexAttrib1fNV)(index,x) -#define ATTRIB2NV(index,x,y) GL_CALL(VertexAttrib2fNV)(index,x,y) -#define ATTRIB3NV(index,x,y,z) GL_CALL(VertexAttrib3fNV)(index,x,y,z) -#define ATTRIB4NV(index,x,y,z,w) GL_CALL(VertexAttrib4fNV)(index,x,y,z,w) -#define ATTRIB1ARB(index,x) GL_CALL(VertexAttrib1fARB)(index,x) -#define ATTRIB2ARB(index,x,y) GL_CALL(VertexAttrib2fARB)(index,x,y) -#define ATTRIB3ARB(index,x,y,z) GL_CALL(VertexAttrib3fARB)(index,x,y,z) -#define ATTRIB4ARB(index,x,y,z,w) GL_CALL(VertexAttrib4fARB)(index,x,y,z,w) -#define FOGCOORDF(x) GL_CALL(FogCoordfEXT)(x) -#define SECONDARYCOLORF(a,b,c) GL_CALL(SecondaryColor3fEXT)(a,b,c) +#define ATTRIB1NV(index,x) CALL_VertexAttrib1fNV(GET_DISPATCH(), (index,x)) +#define ATTRIB2NV(index,x,y) CALL_VertexAttrib2fNV(GET_DISPATCH(), (index,x,y)) +#define ATTRIB3NV(index,x,y,z) CALL_VertexAttrib3fNV(GET_DISPATCH(), (index,x,y,z)) +#define ATTRIB4NV(index,x,y,z,w) CALL_VertexAttrib4fNV(GET_DISPATCH(), (index,x,y,z,w)) +#define ATTRIB1ARB(index,x) CALL_VertexAttrib1fARB(GET_DISPATCH(), (index,x)) +#define ATTRIB2ARB(index,x,y) CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,x,y)) +#define ATTRIB3ARB(index,x,y,z) CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,x,y,z)) +#define ATTRIB4ARB(index,x,y,z,w) CALL_VertexAttrib4fARB(GET_DISPATCH(), (index,x,y,z,w)) +#define FOGCOORDF(x) CALL_FogCoordfEXT(GET_DISPATCH(), (x)) +#define SECONDARYCOLORF(a,b,c) CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c)) static void GLAPIENTRY loopback_Color3b_f( GLbyte red, GLbyte green, GLbyte blue ) @@ -279,6 +281,7 @@ loopback_Color4ubv_f( const GLubyte *v) UBYTE_TO_FLOAT(v[2]), UBYTE_TO_FLOAT(v[3]) ); } + static void GLAPIENTRY loopback_FogCoorddEXT( GLdouble d ) { @@ -340,6 +343,14 @@ loopback_Indexubv( const GLubyte *c ) INDEX( (GLfloat) *c ); } + +static void GLAPIENTRY +loopback_EdgeFlagv(const GLboolean *flag) +{ + CALL_EdgeFlag(GET_DISPATCH(), (*flag)); +} + + static void GLAPIENTRY loopback_Normal3b( GLbyte nx, GLbyte ny, GLbyte nz ) { @@ -499,7 +510,7 @@ loopback_TexCoord2sv( const GLshort *v ) static void GLAPIENTRY loopback_TexCoord3dv( const GLdouble *v ) { - TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]); + TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]); } static void GLAPIENTRY @@ -1437,209 +1448,211 @@ loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v) void _mesa_loopback_init_api_table( struct _glapi_table *dest ) { - dest->Color3b = loopback_Color3b_f; - dest->Color3d = loopback_Color3d_f; - dest->Color3i = loopback_Color3i_f; - dest->Color3s = loopback_Color3s_f; - dest->Color3ui = loopback_Color3ui_f; - dest->Color3us = loopback_Color3us_f; - dest->Color3ub = loopback_Color3ub_f; - dest->Color4b = loopback_Color4b_f; - dest->Color4d = loopback_Color4d_f; - dest->Color4i = loopback_Color4i_f; - dest->Color4s = loopback_Color4s_f; - dest->Color4ui = loopback_Color4ui_f; - dest->Color4us = loopback_Color4us_f; - dest->Color4ub = loopback_Color4ub_f; - dest->Color3bv = loopback_Color3bv_f; - dest->Color3dv = loopback_Color3dv_f; - dest->Color3iv = loopback_Color3iv_f; - dest->Color3sv = loopback_Color3sv_f; - dest->Color3uiv = loopback_Color3uiv_f; - dest->Color3usv = loopback_Color3usv_f; - dest->Color3ubv = loopback_Color3ubv_f; - dest->Color4bv = loopback_Color4bv_f; - dest->Color4dv = loopback_Color4dv_f; - dest->Color4iv = loopback_Color4iv_f; - dest->Color4sv = loopback_Color4sv_f; - dest->Color4uiv = loopback_Color4uiv_f; - dest->Color4usv = loopback_Color4usv_f; - dest->Color4ubv = loopback_Color4ubv_f; + SET_Color3b(dest, loopback_Color3b_f); + SET_Color3d(dest, loopback_Color3d_f); + SET_Color3i(dest, loopback_Color3i_f); + SET_Color3s(dest, loopback_Color3s_f); + SET_Color3ui(dest, loopback_Color3ui_f); + SET_Color3us(dest, loopback_Color3us_f); + SET_Color3ub(dest, loopback_Color3ub_f); + SET_Color4b(dest, loopback_Color4b_f); + SET_Color4d(dest, loopback_Color4d_f); + SET_Color4i(dest, loopback_Color4i_f); + SET_Color4s(dest, loopback_Color4s_f); + SET_Color4ui(dest, loopback_Color4ui_f); + SET_Color4us(dest, loopback_Color4us_f); + SET_Color4ub(dest, loopback_Color4ub_f); + SET_Color3bv(dest, loopback_Color3bv_f); + SET_Color3dv(dest, loopback_Color3dv_f); + SET_Color3iv(dest, loopback_Color3iv_f); + SET_Color3sv(dest, loopback_Color3sv_f); + SET_Color3uiv(dest, loopback_Color3uiv_f); + SET_Color3usv(dest, loopback_Color3usv_f); + SET_Color3ubv(dest, loopback_Color3ubv_f); + SET_Color4bv(dest, loopback_Color4bv_f); + SET_Color4dv(dest, loopback_Color4dv_f); + SET_Color4iv(dest, loopback_Color4iv_f); + SET_Color4sv(dest, loopback_Color4sv_f); + SET_Color4uiv(dest, loopback_Color4uiv_f); + SET_Color4usv(dest, loopback_Color4usv_f); + SET_Color4ubv(dest, loopback_Color4ubv_f); - dest->SecondaryColor3bEXT = loopback_SecondaryColor3bEXT_f; - dest->SecondaryColor3dEXT = loopback_SecondaryColor3dEXT_f; - dest->SecondaryColor3iEXT = loopback_SecondaryColor3iEXT_f; - dest->SecondaryColor3sEXT = loopback_SecondaryColor3sEXT_f; - dest->SecondaryColor3uiEXT = loopback_SecondaryColor3uiEXT_f; - dest->SecondaryColor3usEXT = loopback_SecondaryColor3usEXT_f; - dest->SecondaryColor3ubEXT = loopback_SecondaryColor3ubEXT_f; - dest->SecondaryColor3bvEXT = loopback_SecondaryColor3bvEXT_f; - dest->SecondaryColor3dvEXT = loopback_SecondaryColor3dvEXT_f; - dest->SecondaryColor3ivEXT = loopback_SecondaryColor3ivEXT_f; - dest->SecondaryColor3svEXT = loopback_SecondaryColor3svEXT_f; - dest->SecondaryColor3uivEXT = loopback_SecondaryColor3uivEXT_f; - dest->SecondaryColor3usvEXT = loopback_SecondaryColor3usvEXT_f; - dest->SecondaryColor3ubvEXT = loopback_SecondaryColor3ubvEXT_f; + SET_SecondaryColor3bEXT(dest, loopback_SecondaryColor3bEXT_f); + SET_SecondaryColor3dEXT(dest, loopback_SecondaryColor3dEXT_f); + SET_SecondaryColor3iEXT(dest, loopback_SecondaryColor3iEXT_f); + SET_SecondaryColor3sEXT(dest, loopback_SecondaryColor3sEXT_f); + SET_SecondaryColor3uiEXT(dest, loopback_SecondaryColor3uiEXT_f); + SET_SecondaryColor3usEXT(dest, loopback_SecondaryColor3usEXT_f); + SET_SecondaryColor3ubEXT(dest, loopback_SecondaryColor3ubEXT_f); + SET_SecondaryColor3bvEXT(dest, loopback_SecondaryColor3bvEXT_f); + SET_SecondaryColor3dvEXT(dest, loopback_SecondaryColor3dvEXT_f); + SET_SecondaryColor3ivEXT(dest, loopback_SecondaryColor3ivEXT_f); + SET_SecondaryColor3svEXT(dest, loopback_SecondaryColor3svEXT_f); + SET_SecondaryColor3uivEXT(dest, loopback_SecondaryColor3uivEXT_f); + SET_SecondaryColor3usvEXT(dest, loopback_SecondaryColor3usvEXT_f); + SET_SecondaryColor3ubvEXT(dest, loopback_SecondaryColor3ubvEXT_f); - dest->Indexd = loopback_Indexd; - dest->Indexi = loopback_Indexi; - dest->Indexs = loopback_Indexs; - dest->Indexub = loopback_Indexub; - dest->Indexdv = loopback_Indexdv; - dest->Indexiv = loopback_Indexiv; - dest->Indexsv = loopback_Indexsv; - dest->Indexubv = loopback_Indexubv; - dest->Normal3b = loopback_Normal3b; - dest->Normal3d = loopback_Normal3d; - dest->Normal3i = loopback_Normal3i; - dest->Normal3s = loopback_Normal3s; - dest->Normal3bv = loopback_Normal3bv; - dest->Normal3dv = loopback_Normal3dv; - dest->Normal3iv = loopback_Normal3iv; - dest->Normal3sv = loopback_Normal3sv; - dest->TexCoord1d = loopback_TexCoord1d; - dest->TexCoord1i = loopback_TexCoord1i; - dest->TexCoord1s = loopback_TexCoord1s; - dest->TexCoord2d = loopback_TexCoord2d; - dest->TexCoord2s = loopback_TexCoord2s; - dest->TexCoord2i = loopback_TexCoord2i; - dest->TexCoord3d = loopback_TexCoord3d; - dest->TexCoord3i = loopback_TexCoord3i; - dest->TexCoord3s = loopback_TexCoord3s; - dest->TexCoord4d = loopback_TexCoord4d; - dest->TexCoord4i = loopback_TexCoord4i; - dest->TexCoord4s = loopback_TexCoord4s; - dest->TexCoord1dv = loopback_TexCoord1dv; - dest->TexCoord1iv = loopback_TexCoord1iv; - dest->TexCoord1sv = loopback_TexCoord1sv; - dest->TexCoord2dv = loopback_TexCoord2dv; - dest->TexCoord2iv = loopback_TexCoord2iv; - dest->TexCoord2sv = loopback_TexCoord2sv; - dest->TexCoord3dv = loopback_TexCoord3dv; - dest->TexCoord3iv = loopback_TexCoord3iv; - dest->TexCoord3sv = loopback_TexCoord3sv; - dest->TexCoord4dv = loopback_TexCoord4dv; - dest->TexCoord4iv = loopback_TexCoord4iv; - dest->TexCoord4sv = loopback_TexCoord4sv; - dest->Vertex2d = loopback_Vertex2d; - dest->Vertex2i = loopback_Vertex2i; - dest->Vertex2s = loopback_Vertex2s; - dest->Vertex3d = loopback_Vertex3d; - dest->Vertex3i = loopback_Vertex3i; - dest->Vertex3s = loopback_Vertex3s; - dest->Vertex4d = loopback_Vertex4d; - dest->Vertex4i = loopback_Vertex4i; - dest->Vertex4s = loopback_Vertex4s; - dest->Vertex2dv = loopback_Vertex2dv; - dest->Vertex2iv = loopback_Vertex2iv; - dest->Vertex2sv = loopback_Vertex2sv; - dest->Vertex3dv = loopback_Vertex3dv; - dest->Vertex3iv = loopback_Vertex3iv; - dest->Vertex3sv = loopback_Vertex3sv; - dest->Vertex4dv = loopback_Vertex4dv; - dest->Vertex4iv = loopback_Vertex4iv; - dest->Vertex4sv = loopback_Vertex4sv; - dest->MultiTexCoord1dARB = loopback_MultiTexCoord1dARB; - dest->MultiTexCoord1dvARB = loopback_MultiTexCoord1dvARB; - dest->MultiTexCoord1iARB = loopback_MultiTexCoord1iARB; - dest->MultiTexCoord1ivARB = loopback_MultiTexCoord1ivARB; - dest->MultiTexCoord1sARB = loopback_MultiTexCoord1sARB; - dest->MultiTexCoord1svARB = loopback_MultiTexCoord1svARB; - dest->MultiTexCoord2dARB = loopback_MultiTexCoord2dARB; - dest->MultiTexCoord2dvARB = loopback_MultiTexCoord2dvARB; - dest->MultiTexCoord2iARB = loopback_MultiTexCoord2iARB; - dest->MultiTexCoord2ivARB = loopback_MultiTexCoord2ivARB; - dest->MultiTexCoord2sARB = loopback_MultiTexCoord2sARB; - dest->MultiTexCoord2svARB = loopback_MultiTexCoord2svARB; - dest->MultiTexCoord3dARB = loopback_MultiTexCoord3dARB; - dest->MultiTexCoord3dvARB = loopback_MultiTexCoord3dvARB; - dest->MultiTexCoord3iARB = loopback_MultiTexCoord3iARB; - dest->MultiTexCoord3ivARB = loopback_MultiTexCoord3ivARB; - dest->MultiTexCoord3sARB = loopback_MultiTexCoord3sARB; - dest->MultiTexCoord3svARB = loopback_MultiTexCoord3svARB; - dest->MultiTexCoord4dARB = loopback_MultiTexCoord4dARB; - dest->MultiTexCoord4dvARB = loopback_MultiTexCoord4dvARB; - dest->MultiTexCoord4iARB = loopback_MultiTexCoord4iARB; - dest->MultiTexCoord4ivARB = loopback_MultiTexCoord4ivARB; - dest->MultiTexCoord4sARB = loopback_MultiTexCoord4sARB; - dest->MultiTexCoord4svARB = loopback_MultiTexCoord4svARB; - dest->EvalCoord2dv = loopback_EvalCoord2dv; - dest->EvalCoord2fv = loopback_EvalCoord2fv; - dest->EvalCoord2d = loopback_EvalCoord2d; - dest->EvalCoord1dv = loopback_EvalCoord1dv; - dest->EvalCoord1fv = loopback_EvalCoord1fv; - dest->EvalCoord1d = loopback_EvalCoord1d; - dest->Materialf = loopback_Materialf; - dest->Materiali = loopback_Materiali; - dest->Materialiv = loopback_Materialiv; - dest->Rectd = loopback_Rectd; - dest->Rectdv = loopback_Rectdv; - dest->Rectfv = loopback_Rectfv; - dest->Recti = loopback_Recti; - dest->Rectiv = loopback_Rectiv; - dest->Rects = loopback_Rects; - dest->Rectsv = loopback_Rectsv; - dest->FogCoorddEXT = loopback_FogCoorddEXT; - dest->FogCoorddvEXT = loopback_FogCoorddvEXT; + SET_EdgeFlagv(dest, loopback_EdgeFlagv); - dest->VertexAttrib1sNV = loopback_VertexAttrib1sNV; - dest->VertexAttrib1dNV = loopback_VertexAttrib1dNV; - dest->VertexAttrib2sNV = loopback_VertexAttrib2sNV; - dest->VertexAttrib2dNV = loopback_VertexAttrib2dNV; - dest->VertexAttrib3sNV = loopback_VertexAttrib3sNV; - dest->VertexAttrib3dNV = loopback_VertexAttrib3dNV; - dest->VertexAttrib4sNV = loopback_VertexAttrib4sNV; - dest->VertexAttrib4dNV = loopback_VertexAttrib4dNV; - dest->VertexAttrib4ubNV = loopback_VertexAttrib4ubNV; - dest->VertexAttrib1svNV = loopback_VertexAttrib1svNV; - dest->VertexAttrib1dvNV = loopback_VertexAttrib1dvNV; - dest->VertexAttrib2svNV = loopback_VertexAttrib2svNV; - dest->VertexAttrib2dvNV = loopback_VertexAttrib2dvNV; - dest->VertexAttrib3svNV = loopback_VertexAttrib3svNV; - dest->VertexAttrib3dvNV = loopback_VertexAttrib3dvNV; - dest->VertexAttrib4svNV = loopback_VertexAttrib4svNV; - dest->VertexAttrib4dvNV = loopback_VertexAttrib4dvNV; - dest->VertexAttrib4ubvNV = loopback_VertexAttrib4ubvNV; - dest->VertexAttribs1svNV = loopback_VertexAttribs1svNV; - dest->VertexAttribs1fvNV = loopback_VertexAttribs1fvNV; - dest->VertexAttribs1dvNV = loopback_VertexAttribs1dvNV; - dest->VertexAttribs2svNV = loopback_VertexAttribs2svNV; - dest->VertexAttribs2fvNV = loopback_VertexAttribs2fvNV; - dest->VertexAttribs2dvNV = loopback_VertexAttribs2dvNV; - dest->VertexAttribs3svNV = loopback_VertexAttribs3svNV; - dest->VertexAttribs3fvNV = loopback_VertexAttribs3fvNV; - dest->VertexAttribs3dvNV = loopback_VertexAttribs3dvNV; - dest->VertexAttribs4svNV = loopback_VertexAttribs4svNV; - dest->VertexAttribs4fvNV = loopback_VertexAttribs4fvNV; - dest->VertexAttribs4dvNV = loopback_VertexAttribs4dvNV; - dest->VertexAttribs4ubvNV = loopback_VertexAttribs4ubvNV; + SET_Indexd(dest, loopback_Indexd); + SET_Indexi(dest, loopback_Indexi); + SET_Indexs(dest, loopback_Indexs); + SET_Indexub(dest, loopback_Indexub); + SET_Indexdv(dest, loopback_Indexdv); + SET_Indexiv(dest, loopback_Indexiv); + SET_Indexsv(dest, loopback_Indexsv); + SET_Indexubv(dest, loopback_Indexubv); + SET_Normal3b(dest, loopback_Normal3b); + SET_Normal3d(dest, loopback_Normal3d); + SET_Normal3i(dest, loopback_Normal3i); + SET_Normal3s(dest, loopback_Normal3s); + SET_Normal3bv(dest, loopback_Normal3bv); + SET_Normal3dv(dest, loopback_Normal3dv); + SET_Normal3iv(dest, loopback_Normal3iv); + SET_Normal3sv(dest, loopback_Normal3sv); + SET_TexCoord1d(dest, loopback_TexCoord1d); + SET_TexCoord1i(dest, loopback_TexCoord1i); + SET_TexCoord1s(dest, loopback_TexCoord1s); + SET_TexCoord2d(dest, loopback_TexCoord2d); + SET_TexCoord2s(dest, loopback_TexCoord2s); + SET_TexCoord2i(dest, loopback_TexCoord2i); + SET_TexCoord3d(dest, loopback_TexCoord3d); + SET_TexCoord3i(dest, loopback_TexCoord3i); + SET_TexCoord3s(dest, loopback_TexCoord3s); + SET_TexCoord4d(dest, loopback_TexCoord4d); + SET_TexCoord4i(dest, loopback_TexCoord4i); + SET_TexCoord4s(dest, loopback_TexCoord4s); + SET_TexCoord1dv(dest, loopback_TexCoord1dv); + SET_TexCoord1iv(dest, loopback_TexCoord1iv); + SET_TexCoord1sv(dest, loopback_TexCoord1sv); + SET_TexCoord2dv(dest, loopback_TexCoord2dv); + SET_TexCoord2iv(dest, loopback_TexCoord2iv); + SET_TexCoord2sv(dest, loopback_TexCoord2sv); + SET_TexCoord3dv(dest, loopback_TexCoord3dv); + SET_TexCoord3iv(dest, loopback_TexCoord3iv); + SET_TexCoord3sv(dest, loopback_TexCoord3sv); + SET_TexCoord4dv(dest, loopback_TexCoord4dv); + SET_TexCoord4iv(dest, loopback_TexCoord4iv); + SET_TexCoord4sv(dest, loopback_TexCoord4sv); + SET_Vertex2d(dest, loopback_Vertex2d); + SET_Vertex2i(dest, loopback_Vertex2i); + SET_Vertex2s(dest, loopback_Vertex2s); + SET_Vertex3d(dest, loopback_Vertex3d); + SET_Vertex3i(dest, loopback_Vertex3i); + SET_Vertex3s(dest, loopback_Vertex3s); + SET_Vertex4d(dest, loopback_Vertex4d); + SET_Vertex4i(dest, loopback_Vertex4i); + SET_Vertex4s(dest, loopback_Vertex4s); + SET_Vertex2dv(dest, loopback_Vertex2dv); + SET_Vertex2iv(dest, loopback_Vertex2iv); + SET_Vertex2sv(dest, loopback_Vertex2sv); + SET_Vertex3dv(dest, loopback_Vertex3dv); + SET_Vertex3iv(dest, loopback_Vertex3iv); + SET_Vertex3sv(dest, loopback_Vertex3sv); + SET_Vertex4dv(dest, loopback_Vertex4dv); + SET_Vertex4iv(dest, loopback_Vertex4iv); + SET_Vertex4sv(dest, loopback_Vertex4sv); + SET_MultiTexCoord1dARB(dest, loopback_MultiTexCoord1dARB); + SET_MultiTexCoord1dvARB(dest, loopback_MultiTexCoord1dvARB); + SET_MultiTexCoord1iARB(dest, loopback_MultiTexCoord1iARB); + SET_MultiTexCoord1ivARB(dest, loopback_MultiTexCoord1ivARB); + SET_MultiTexCoord1sARB(dest, loopback_MultiTexCoord1sARB); + SET_MultiTexCoord1svARB(dest, loopback_MultiTexCoord1svARB); + SET_MultiTexCoord2dARB(dest, loopback_MultiTexCoord2dARB); + SET_MultiTexCoord2dvARB(dest, loopback_MultiTexCoord2dvARB); + SET_MultiTexCoord2iARB(dest, loopback_MultiTexCoord2iARB); + SET_MultiTexCoord2ivARB(dest, loopback_MultiTexCoord2ivARB); + SET_MultiTexCoord2sARB(dest, loopback_MultiTexCoord2sARB); + SET_MultiTexCoord2svARB(dest, loopback_MultiTexCoord2svARB); + SET_MultiTexCoord3dARB(dest, loopback_MultiTexCoord3dARB); + SET_MultiTexCoord3dvARB(dest, loopback_MultiTexCoord3dvARB); + SET_MultiTexCoord3iARB(dest, loopback_MultiTexCoord3iARB); + SET_MultiTexCoord3ivARB(dest, loopback_MultiTexCoord3ivARB); + SET_MultiTexCoord3sARB(dest, loopback_MultiTexCoord3sARB); + SET_MultiTexCoord3svARB(dest, loopback_MultiTexCoord3svARB); + SET_MultiTexCoord4dARB(dest, loopback_MultiTexCoord4dARB); + SET_MultiTexCoord4dvARB(dest, loopback_MultiTexCoord4dvARB); + SET_MultiTexCoord4iARB(dest, loopback_MultiTexCoord4iARB); + SET_MultiTexCoord4ivARB(dest, loopback_MultiTexCoord4ivARB); + SET_MultiTexCoord4sARB(dest, loopback_MultiTexCoord4sARB); + SET_MultiTexCoord4svARB(dest, loopback_MultiTexCoord4svARB); + SET_EvalCoord2dv(dest, loopback_EvalCoord2dv); + SET_EvalCoord2fv(dest, loopback_EvalCoord2fv); + SET_EvalCoord2d(dest, loopback_EvalCoord2d); + SET_EvalCoord1dv(dest, loopback_EvalCoord1dv); + SET_EvalCoord1fv(dest, loopback_EvalCoord1fv); + SET_EvalCoord1d(dest, loopback_EvalCoord1d); + SET_Materialf(dest, loopback_Materialf); + SET_Materiali(dest, loopback_Materiali); + SET_Materialiv(dest, loopback_Materialiv); + SET_Rectd(dest, loopback_Rectd); + SET_Rectdv(dest, loopback_Rectdv); + SET_Rectfv(dest, loopback_Rectfv); + SET_Recti(dest, loopback_Recti); + SET_Rectiv(dest, loopback_Rectiv); + SET_Rects(dest, loopback_Rects); + SET_Rectsv(dest, loopback_Rectsv); + SET_FogCoorddEXT(dest, loopback_FogCoorddEXT); + SET_FogCoorddvEXT(dest, loopback_FogCoorddvEXT); - dest->VertexAttrib1sARB = loopback_VertexAttrib1sARB; - dest->VertexAttrib1dARB = loopback_VertexAttrib1dARB; - dest->VertexAttrib2sARB = loopback_VertexAttrib2sARB; - dest->VertexAttrib2dARB = loopback_VertexAttrib2dARB; - dest->VertexAttrib3sARB = loopback_VertexAttrib3sARB; - dest->VertexAttrib3dARB = loopback_VertexAttrib3dARB; - dest->VertexAttrib4sARB = loopback_VertexAttrib4sARB; - dest->VertexAttrib4dARB = loopback_VertexAttrib4dARB; - dest->VertexAttrib1svARB = loopback_VertexAttrib1svARB; - dest->VertexAttrib1dvARB = loopback_VertexAttrib1dvARB; - dest->VertexAttrib2svARB = loopback_VertexAttrib2svARB; - dest->VertexAttrib2dvARB = loopback_VertexAttrib2dvARB; - dest->VertexAttrib3svARB = loopback_VertexAttrib3svARB; - dest->VertexAttrib3dvARB = loopback_VertexAttrib3dvARB; - dest->VertexAttrib4svARB = loopback_VertexAttrib4svARB; - dest->VertexAttrib4dvARB = loopback_VertexAttrib4dvARB; - dest->VertexAttrib4NubARB = loopback_VertexAttrib4NubARB; - dest->VertexAttrib4NubvARB = loopback_VertexAttrib4NubvARB; - dest->VertexAttrib4bvARB = loopback_VertexAttrib4bvARB; - dest->VertexAttrib4ivARB = loopback_VertexAttrib4ivARB; - dest->VertexAttrib4ubvARB = loopback_VertexAttrib4ubvARB; - dest->VertexAttrib4usvARB = loopback_VertexAttrib4usvARB; - dest->VertexAttrib4uivARB = loopback_VertexAttrib4uivARB; - dest->VertexAttrib4NbvARB = loopback_VertexAttrib4NbvARB; - dest->VertexAttrib4NsvARB = loopback_VertexAttrib4NsvARB; - dest->VertexAttrib4NivARB = loopback_VertexAttrib4NivARB; - dest->VertexAttrib4NusvARB = loopback_VertexAttrib4NusvARB; - dest->VertexAttrib4NuivARB = loopback_VertexAttrib4NuivARB; + SET_VertexAttrib1sNV(dest, loopback_VertexAttrib1sNV); + SET_VertexAttrib1dNV(dest, loopback_VertexAttrib1dNV); + SET_VertexAttrib2sNV(dest, loopback_VertexAttrib2sNV); + SET_VertexAttrib2dNV(dest, loopback_VertexAttrib2dNV); + SET_VertexAttrib3sNV(dest, loopback_VertexAttrib3sNV); + SET_VertexAttrib3dNV(dest, loopback_VertexAttrib3dNV); + SET_VertexAttrib4sNV(dest, loopback_VertexAttrib4sNV); + SET_VertexAttrib4dNV(dest, loopback_VertexAttrib4dNV); + SET_VertexAttrib4ubNV(dest, loopback_VertexAttrib4ubNV); + SET_VertexAttrib1svNV(dest, loopback_VertexAttrib1svNV); + SET_VertexAttrib1dvNV(dest, loopback_VertexAttrib1dvNV); + SET_VertexAttrib2svNV(dest, loopback_VertexAttrib2svNV); + SET_VertexAttrib2dvNV(dest, loopback_VertexAttrib2dvNV); + SET_VertexAttrib3svNV(dest, loopback_VertexAttrib3svNV); + SET_VertexAttrib3dvNV(dest, loopback_VertexAttrib3dvNV); + SET_VertexAttrib4svNV(dest, loopback_VertexAttrib4svNV); + SET_VertexAttrib4dvNV(dest, loopback_VertexAttrib4dvNV); + SET_VertexAttrib4ubvNV(dest, loopback_VertexAttrib4ubvNV); + SET_VertexAttribs1svNV(dest, loopback_VertexAttribs1svNV); + SET_VertexAttribs1fvNV(dest, loopback_VertexAttribs1fvNV); + SET_VertexAttribs1dvNV(dest, loopback_VertexAttribs1dvNV); + SET_VertexAttribs2svNV(dest, loopback_VertexAttribs2svNV); + SET_VertexAttribs2fvNV(dest, loopback_VertexAttribs2fvNV); + SET_VertexAttribs2dvNV(dest, loopback_VertexAttribs2dvNV); + SET_VertexAttribs3svNV(dest, loopback_VertexAttribs3svNV); + SET_VertexAttribs3fvNV(dest, loopback_VertexAttribs3fvNV); + SET_VertexAttribs3dvNV(dest, loopback_VertexAttribs3dvNV); + SET_VertexAttribs4svNV(dest, loopback_VertexAttribs4svNV); + SET_VertexAttribs4fvNV(dest, loopback_VertexAttribs4fvNV); + SET_VertexAttribs4dvNV(dest, loopback_VertexAttribs4dvNV); + SET_VertexAttribs4ubvNV(dest, loopback_VertexAttribs4ubvNV); + + SET_VertexAttrib1sARB(dest, loopback_VertexAttrib1sARB); + SET_VertexAttrib1dARB(dest, loopback_VertexAttrib1dARB); + SET_VertexAttrib2sARB(dest, loopback_VertexAttrib2sARB); + SET_VertexAttrib2dARB(dest, loopback_VertexAttrib2dARB); + SET_VertexAttrib3sARB(dest, loopback_VertexAttrib3sARB); + SET_VertexAttrib3dARB(dest, loopback_VertexAttrib3dARB); + SET_VertexAttrib4sARB(dest, loopback_VertexAttrib4sARB); + SET_VertexAttrib4dARB(dest, loopback_VertexAttrib4dARB); + SET_VertexAttrib1svARB(dest, loopback_VertexAttrib1svARB); + SET_VertexAttrib1dvARB(dest, loopback_VertexAttrib1dvARB); + SET_VertexAttrib2svARB(dest, loopback_VertexAttrib2svARB); + SET_VertexAttrib2dvARB(dest, loopback_VertexAttrib2dvARB); + SET_VertexAttrib3svARB(dest, loopback_VertexAttrib3svARB); + SET_VertexAttrib3dvARB(dest, loopback_VertexAttrib3dvARB); + SET_VertexAttrib4svARB(dest, loopback_VertexAttrib4svARB); + SET_VertexAttrib4dvARB(dest, loopback_VertexAttrib4dvARB); + SET_VertexAttrib4NubARB(dest, loopback_VertexAttrib4NubARB); + SET_VertexAttrib4NubvARB(dest, loopback_VertexAttrib4NubvARB); + SET_VertexAttrib4bvARB(dest, loopback_VertexAttrib4bvARB); + SET_VertexAttrib4ivARB(dest, loopback_VertexAttrib4ivARB); + SET_VertexAttrib4ubvARB(dest, loopback_VertexAttrib4ubvARB); + SET_VertexAttrib4usvARB(dest, loopback_VertexAttrib4usvARB); + SET_VertexAttrib4uivARB(dest, loopback_VertexAttrib4uivARB); + SET_VertexAttrib4NbvARB(dest, loopback_VertexAttrib4NbvARB); + SET_VertexAttrib4NsvARB(dest, loopback_VertexAttrib4NsvARB); + SET_VertexAttrib4NivARB(dest, loopback_VertexAttrib4NivARB); + SET_VertexAttrib4NusvARB(dest, loopback_VertexAttrib4NusvARB); + SET_VertexAttrib4NuivARB(dest, loopback_VertexAttrib4NuivARB); } diff --git a/src/kits/opengl/mesa/main/api_noop.c b/src/kits/opengl/mesa/main/api_noop.c index 661a72008a..33d44e4329 100644 --- a/src/kits/opengl/mesa/main/api_noop.c +++ b/src/kits/opengl/mesa/main/api_noop.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -28,47 +28,39 @@ #include "api_validate.h" #include "api_arrayelt.h" #include "context.h" -#include "colormac.h" #include "light.h" #include "macros.h" -#include "mtypes.h" #include "dlist.h" +#include "dispatch.h" -/* In states where certain vertex components are required for t&l or - * rasterization, we still need to keep track of the current values. - * These functions provide this service by keeping uptodate the - * 'ctx->Current' struct for all data elements not included in the - * currently enabled hardware vertex. - * I.e. these functions would typically be used when outside of glBegin/End. +/** + * \file + * Just update the ctx->Current vertex attributes. + * These functions are used when outside glBegin/glEnd or outside display + * lists. */ -void GLAPIENTRY _mesa_noop_EdgeFlag( GLboolean b ) +static void GLAPIENTRY _mesa_noop_EdgeFlag( GLboolean b ) { GET_CURRENT_CONTEXT(ctx); ctx->Current.EdgeFlag = b; } -void GLAPIENTRY _mesa_noop_EdgeFlagv( const GLboolean *b ) +static void GLAPIENTRY _mesa_noop_Indexf( GLfloat f ) { GET_CURRENT_CONTEXT(ctx); - ctx->Current.EdgeFlag = *b; + ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0] = f; } -void GLAPIENTRY _mesa_noop_Indexf( GLfloat f ) +static void GLAPIENTRY _mesa_noop_Indexfv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - ctx->Current.Index = f; + ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0] = *v; } -void GLAPIENTRY _mesa_noop_Indexfv( const GLfloat *v ) -{ - GET_CURRENT_CONTEXT(ctx); - ctx->Current.Index = *v; -} - -void GLAPIENTRY _mesa_noop_FogCoordfEXT( GLfloat a ) +static void GLAPIENTRY _mesa_noop_FogCoordfEXT( GLfloat a ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_FOG]; @@ -78,17 +70,17 @@ void GLAPIENTRY _mesa_noop_FogCoordfEXT( GLfloat a ) dest[3] = 1.0; } -void GLAPIENTRY _mesa_noop_FogCoordfvEXT( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_FogCoordfvEXT( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_NORMAL]; + GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_FOG]; dest[0] = v[0]; dest[1] = 0.0; dest[2] = 0.0; dest[3] = 1.0; } -void GLAPIENTRY _mesa_noop_Normal3f( GLfloat a, GLfloat b, GLfloat c ) +static void GLAPIENTRY _mesa_noop_Normal3f( GLfloat a, GLfloat b, GLfloat c ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_NORMAL]; @@ -98,7 +90,7 @@ void GLAPIENTRY _mesa_noop_Normal3f( GLfloat a, GLfloat b, GLfloat c ) dest[3] = 1.0; } -void GLAPIENTRY _mesa_noop_Normal3fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_Normal3fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_NORMAL]; @@ -108,7 +100,7 @@ void GLAPIENTRY _mesa_noop_Normal3fv( const GLfloat *v ) dest[3] = 1.0; } -void GLAPIENTRY _mesa_noop_Color4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) +static void GLAPIENTRY _mesa_noop_Color4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) { GET_CURRENT_CONTEXT(ctx); GLfloat *color = ctx->Current.Attrib[VERT_ATTRIB_COLOR0]; @@ -118,7 +110,7 @@ void GLAPIENTRY _mesa_noop_Color4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) color[3] = d; } -void GLAPIENTRY _mesa_noop_Color4fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_Color4fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *color = ctx->Current.Attrib[VERT_ATTRIB_COLOR0]; @@ -128,7 +120,7 @@ void GLAPIENTRY _mesa_noop_Color4fv( const GLfloat *v ) color[3] = v[3]; } -void GLAPIENTRY _mesa_noop_Color3f( GLfloat a, GLfloat b, GLfloat c ) +static void GLAPIENTRY _mesa_noop_Color3f( GLfloat a, GLfloat b, GLfloat c ) { GET_CURRENT_CONTEXT(ctx); GLfloat *color = ctx->Current.Attrib[VERT_ATTRIB_COLOR0]; @@ -138,7 +130,7 @@ void GLAPIENTRY _mesa_noop_Color3f( GLfloat a, GLfloat b, GLfloat c ) color[3] = 1.0; } -void GLAPIENTRY _mesa_noop_Color3fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_Color3fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *color = ctx->Current.Attrib[VERT_ATTRIB_COLOR0]; @@ -148,7 +140,7 @@ void GLAPIENTRY _mesa_noop_Color3fv( const GLfloat *v ) color[3] = 1.0; } -void GLAPIENTRY _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a ) +static void GLAPIENTRY _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -165,7 +157,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a ) } } -void GLAPIENTRY _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -182,7 +174,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v } } -void GLAPIENTRY _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a, GLfloat b ) +static void GLAPIENTRY _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a, GLfloat b ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -199,7 +191,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a, GLfloat } } -void GLAPIENTRY _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -216,7 +208,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v } } -void GLAPIENTRY _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a, GLfloat b, GLfloat c) +static void GLAPIENTRY _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a, GLfloat b, GLfloat c) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -233,7 +225,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a, GLfloat } } -void GLAPIENTRY _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -250,7 +242,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v } } -void GLAPIENTRY _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a, GLfloat b, +static void GLAPIENTRY _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a, GLfloat b, GLfloat c, GLfloat d ) { GET_CURRENT_CONTEXT(ctx); @@ -268,7 +260,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a, GLfloat } } -void GLAPIENTRY _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -285,7 +277,7 @@ void GLAPIENTRY _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v } } -void GLAPIENTRY _mesa_noop_SecondaryColor3fEXT( GLfloat a, GLfloat b, GLfloat c ) +static void GLAPIENTRY _mesa_noop_SecondaryColor3fEXT( GLfloat a, GLfloat b, GLfloat c ) { GET_CURRENT_CONTEXT(ctx); GLfloat *color = ctx->Current.Attrib[VERT_ATTRIB_COLOR1]; @@ -295,7 +287,7 @@ void GLAPIENTRY _mesa_noop_SecondaryColor3fEXT( GLfloat a, GLfloat b, GLfloat c color[3] = 1.0; } -void GLAPIENTRY _mesa_noop_SecondaryColor3fvEXT( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_SecondaryColor3fvEXT( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *color = ctx->Current.Attrib[VERT_ATTRIB_COLOR1]; @@ -305,7 +297,7 @@ void GLAPIENTRY _mesa_noop_SecondaryColor3fvEXT( const GLfloat *v ) color[3] = 1.0; } -void GLAPIENTRY _mesa_noop_TexCoord1f( GLfloat a ) +static void GLAPIENTRY _mesa_noop_TexCoord1f( GLfloat a ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -315,7 +307,7 @@ void GLAPIENTRY _mesa_noop_TexCoord1f( GLfloat a ) dest[3] = 1; } -void GLAPIENTRY _mesa_noop_TexCoord1fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_TexCoord1fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -325,7 +317,7 @@ void GLAPIENTRY _mesa_noop_TexCoord1fv( const GLfloat *v ) dest[3] = 1; } -void GLAPIENTRY _mesa_noop_TexCoord2f( GLfloat a, GLfloat b ) +static void GLAPIENTRY _mesa_noop_TexCoord2f( GLfloat a, GLfloat b ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -335,7 +327,7 @@ void GLAPIENTRY _mesa_noop_TexCoord2f( GLfloat a, GLfloat b ) dest[3] = 1; } -void GLAPIENTRY _mesa_noop_TexCoord2fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_TexCoord2fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -345,7 +337,7 @@ void GLAPIENTRY _mesa_noop_TexCoord2fv( const GLfloat *v ) dest[3] = 1; } -void GLAPIENTRY _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c ) +static void GLAPIENTRY _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -355,7 +347,7 @@ void GLAPIENTRY _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c ) dest[3] = 1; } -void GLAPIENTRY _mesa_noop_TexCoord3fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_TexCoord3fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -365,7 +357,7 @@ void GLAPIENTRY _mesa_noop_TexCoord3fv( const GLfloat *v ) dest[3] = 1; } -void GLAPIENTRY _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) +static void GLAPIENTRY _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -375,7 +367,7 @@ void GLAPIENTRY _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat dest[3] = d; } -void GLAPIENTRY _mesa_noop_TexCoord4fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_TexCoord4fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0]; @@ -386,181 +378,189 @@ void GLAPIENTRY _mesa_noop_TexCoord4fv( const GLfloat *v ) } +/** + * GL_NV_vertex_program attributes. + * Note that these attributes alias the conventional vertex attributes. + */ -void GLAPIENTRY _mesa_noop_VertexAttrib1fNV( GLuint index, GLfloat x ) +static void GLAPIENTRY _mesa_noop_VertexAttrib1fNV( GLuint index, GLfloat x ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], x, 0, 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib1fNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib1fNV(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib1fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib1fvNV( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], v[0], 0, 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib1fvNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib1fvNV(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib2fNV( GLuint index, GLfloat x, GLfloat y ) +static void GLAPIENTRY _mesa_noop_VertexAttrib2fNV( GLuint index, GLfloat x, GLfloat y ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], x, y, 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib2fNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib2fNV(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib2fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib2fvNV( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], v[0], v[1], 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib2fvNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib2fvNV(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib3fNV( GLuint index, GLfloat x, +static void GLAPIENTRY _mesa_noop_VertexAttrib3fNV( GLuint index, GLfloat x, GLfloat y, GLfloat z ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], x, y, z, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib3fNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib3fNV(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib3fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib3fvNV( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], v[0], v[1], v[2], 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib3fvNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib3fvNV(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib4fNV( GLuint index, GLfloat x, +static void GLAPIENTRY _mesa_noop_VertexAttrib4fNV( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], x, y, z, w); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib4fNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib4fNV(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib4fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib4fvNV( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { + if (index < MAX_NV_VERTEX_PROGRAM_INPUTS) { ASSIGN_4V(ctx->Current.Attrib[index], v[0], v[1], v[2], v[3]); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib4fvNV" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib4fvNV(index)" ); } -/* - * XXX Un-alias attribs here + +/** + * GL_ARB_vertex_program attributes. + * Note that these attributes DO NOT alias the conventional vertex attributes. */ -void GLAPIENTRY _mesa_noop_VertexAttrib1fARB( GLuint index, GLfloat x ) +static void GLAPIENTRY _mesa_noop_VertexAttrib1fARB( GLuint index, GLfloat x ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], x, 0, 0, 1); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], x, 0, 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib1fARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib1fARB(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib1fvARB( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib1fvARB( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], v[0], 0, 0, 1); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], v[0], 0, 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib1fvARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib1fvARB(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib2fARB( GLuint index, GLfloat x, GLfloat y ) +static void GLAPIENTRY _mesa_noop_VertexAttrib2fARB( GLuint index, GLfloat x, GLfloat y ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], x, y, 0, 1); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], x, y, 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib2fARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib2fARB(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib2fvARB( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib2fvARB( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], v[0], v[1], 0, 1); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], v[0], v[1], 0, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib2fvARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib2fvARB(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib3fARB( GLuint index, GLfloat x, +static void GLAPIENTRY _mesa_noop_VertexAttrib3fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], x, y, z, 1); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], x, y, z, 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib3fARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib3fARB(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib3fvARB( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib3fvARB( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], v[0], v[1], v[2], 1); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], v[0], v[1], v[2], 1); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib3fvARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib3fvARB(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib4fARB( GLuint index, GLfloat x, +static void GLAPIENTRY _mesa_noop_VertexAttrib4fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], x, y, z, w); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], x, y, z, w); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib4fARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib4fARB(index)" ); } -void GLAPIENTRY _mesa_noop_VertexAttrib4fvARB( GLuint index, const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_VertexAttrib4fvARB( GLuint index, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); - if (index < VERT_ATTRIB_MAX) { - ASSIGN_4V(ctx->Current.Attrib[index], v[0], v[1], v[2], v[3]); + if (index < MAX_VERTEX_ATTRIBS) { + ASSIGN_4V(ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index], v[0], v[1], v[2], v[3]); } else - _mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib4fvARB" ); + _mesa_error( ctx, GL_INVALID_VALUE, "glVertexAttrib4fvARB(index)" ); } -/* Material +/** + * Called by glMaterial*() */ -void GLAPIENTRY _mesa_noop_Materialfv( GLenum face, GLenum pname, const GLfloat *params ) +void GLAPIENTRY +_mesa_noop_Materialfv( GLenum face, GLenum pname, const GLfloat *params ) { GET_CURRENT_CONTEXT(ctx); GLint i, nr; @@ -574,7 +574,7 @@ void GLAPIENTRY _mesa_noop_Materialfv( GLenum face, GLenum pname, const GLfloat if (bitmask == 0) return; - switch (face) { + switch (pname) { case GL_SHININESS: nr = 1; break; case GL_COLOR_INDEXES: nr = 3; break; default: nr = 4 ; break; @@ -587,66 +587,68 @@ void GLAPIENTRY _mesa_noop_Materialfv( GLenum face, GLenum pname, const GLfloat _mesa_update_material( ctx, bitmask ); } -/* These really are noops outside begin/end: + +/** + * These really are noops outside begin/end: */ -void GLAPIENTRY _mesa_noop_Vertex2fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_Vertex2fv( const GLfloat *v ) { (void) v; } -void GLAPIENTRY _mesa_noop_Vertex3fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_Vertex3fv( const GLfloat *v ) { (void) v; } -void GLAPIENTRY _mesa_noop_Vertex4fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_Vertex4fv( const GLfloat *v ) { (void) v; } -void GLAPIENTRY _mesa_noop_Vertex2f( GLfloat a, GLfloat b ) +static void GLAPIENTRY _mesa_noop_Vertex2f( GLfloat a, GLfloat b ) { (void) a; (void) b; } -void GLAPIENTRY _mesa_noop_Vertex3f( GLfloat a, GLfloat b, GLfloat c ) +static void GLAPIENTRY _mesa_noop_Vertex3f( GLfloat a, GLfloat b, GLfloat c ) { (void) a; (void) b; (void) c; } -void GLAPIENTRY _mesa_noop_Vertex4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) +static void GLAPIENTRY _mesa_noop_Vertex4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) { (void) a; (void) b; (void) c; (void) d; } /* Similarly, these have no effect outside begin/end: */ -void GLAPIENTRY _mesa_noop_EvalCoord1f( GLfloat a ) +static void GLAPIENTRY _mesa_noop_EvalCoord1f( GLfloat a ) { (void) a; } -void GLAPIENTRY _mesa_noop_EvalCoord1fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_EvalCoord1fv( const GLfloat *v ) { (void) v; } -void GLAPIENTRY _mesa_noop_EvalCoord2f( GLfloat a, GLfloat b ) +static void GLAPIENTRY _mesa_noop_EvalCoord2f( GLfloat a, GLfloat b ) { (void) a; (void) b; } -void GLAPIENTRY _mesa_noop_EvalCoord2fv( const GLfloat *v ) +static void GLAPIENTRY _mesa_noop_EvalCoord2fv( const GLfloat *v ) { (void) v; } -void GLAPIENTRY _mesa_noop_EvalPoint1( GLint a ) +static void GLAPIENTRY _mesa_noop_EvalPoint1( GLint a ) { (void) a; } -void GLAPIENTRY _mesa_noop_EvalPoint2( GLint a, GLint b ) +static void GLAPIENTRY _mesa_noop_EvalPoint2( GLint a, GLint b ) { (void) a; (void) b; } @@ -655,7 +657,7 @@ void GLAPIENTRY _mesa_noop_EvalPoint2( GLint a, GLint b ) /* Begin -- call into driver, should result in the vtxfmt being * swapped out: */ -void GLAPIENTRY _mesa_noop_Begin( GLenum mode ) +static void GLAPIENTRY _mesa_noop_Begin( GLenum mode ) { (void) mode; } @@ -663,14 +665,15 @@ void GLAPIENTRY _mesa_noop_Begin( GLenum mode ) /* End -- just raise an error */ -void GLAPIENTRY _mesa_noop_End( void ) +static void GLAPIENTRY _mesa_noop_End( void ) { GET_CURRENT_CONTEXT(ctx); - _mesa_error( ctx, GL_INVALID_OPERATION, "glEnd" ); + _mesa_error( ctx, GL_INVALID_OPERATION, "glEnd(no glBegin)" ); } -/* Execute a glRectf() function. This is not suitable for GL_COMPILE +/** + * Execute a glRectf() function. This is not suitable for GL_COMPILE * modes (as the test for outside begin/end is not compiled), * but may be useful for drivers in circumstances which exclude * display list interactions. @@ -678,27 +681,30 @@ void GLAPIENTRY _mesa_noop_End( void ) * (None of the functions in this file are suitable for GL_COMPILE * modes). */ -void GLAPIENTRY _mesa_noop_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ) +void GLAPIENTRY +_mesa_noop_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ) { { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); } - GL_CALL(Begin)( GL_QUADS ); - GL_CALL(Vertex2f)( x1, y1 ); - GL_CALL(Vertex2f)( x2, y1 ); - GL_CALL(Vertex2f)( x2, y2 ); - GL_CALL(Vertex2f)( x1, y2 ); - GL_CALL(End)(); + CALL_Begin(GET_DISPATCH(), (GL_QUADS)); + CALL_Vertex2f(GET_DISPATCH(), (x1, y1)); + CALL_Vertex2f(GET_DISPATCH(), (x2, y1)); + CALL_Vertex2f(GET_DISPATCH(), (x2, y2)); + CALL_Vertex2f(GET_DISPATCH(), (x1, y2)); + CALL_End(GET_DISPATCH(), ()); } -/* Some very basic support for arrays. Drivers without explicit array +/** + * Some very basic support for arrays. Drivers without explicit array * support can hook these in, but still need to supply an array-elt * implementation. */ -void GLAPIENTRY _mesa_noop_DrawArrays(GLenum mode, GLint start, GLsizei count) +static void GLAPIENTRY +_mesa_noop_DrawArrays(GLenum mode, GLint start, GLsizei count) { GET_CURRENT_CONTEXT(ctx); GLint i; @@ -706,15 +712,16 @@ void GLAPIENTRY _mesa_noop_DrawArrays(GLenum mode, GLint start, GLsizei count) if (!_mesa_validate_DrawArrays( ctx, mode, start, count )) return; - GL_CALL(Begin)(mode); + CALL_Begin(GET_DISPATCH(), (mode)); for (i = 0; i < count; i++) - GL_CALL(ArrayElement)(start + i); - GL_CALL(End)(); + CALL_ArrayElement(GET_DISPATCH(), (start + i)); + CALL_End(GET_DISPATCH(), ()); } -void GLAPIENTRY _mesa_noop_DrawElements(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices) +static void GLAPIENTRY +_mesa_noop_DrawElements(GLenum mode, GLsizei count, GLenum type, + const GLvoid *indices) { GET_CURRENT_CONTEXT(ctx); GLint i; @@ -722,56 +729,60 @@ void GLAPIENTRY _mesa_noop_DrawElements(GLenum mode, GLsizei count, GLenum type, if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices )) return; - GL_CALL(Begin)(mode); + CALL_Begin(GET_DISPATCH(), (mode)); switch (type) { case GL_UNSIGNED_BYTE: for (i = 0 ; i < count ; i++) - GL_CALL(ArrayElement)( ((GLubyte *)indices)[i] ); + CALL_ArrayElement(GET_DISPATCH(), ( ((GLubyte *)indices)[i] )); break; case GL_UNSIGNED_SHORT: for (i = 0 ; i < count ; i++) - GL_CALL(ArrayElement)( ((GLushort *)indices)[i] ); + CALL_ArrayElement(GET_DISPATCH(), ( ((GLushort *)indices)[i] )); break; case GL_UNSIGNED_INT: for (i = 0 ; i < count ; i++) - GL_CALL(ArrayElement)( ((GLuint *)indices)[i] ); + CALL_ArrayElement(GET_DISPATCH(), ( ((GLuint *)indices)[i] )); break; default: _mesa_error( ctx, GL_INVALID_ENUM, "glDrawElements(type)" ); break; } - GL_CALL(End)(); + CALL_End(GET_DISPATCH(), ()); } -void GLAPIENTRY _mesa_noop_DrawRangeElements(GLenum mode, - GLuint start, GLuint end, - GLsizei count, GLenum type, - const GLvoid *indices) + +static void GLAPIENTRY +_mesa_noop_DrawRangeElements(GLenum mode, + GLuint start, GLuint end, + GLsizei count, GLenum type, + const GLvoid *indices) { GET_CURRENT_CONTEXT(ctx); if (_mesa_validate_DrawRangeElements( ctx, mode, start, end, count, type, indices )) - GL_CALL(DrawElements)( mode, count, type, indices ); + CALL_DrawElements(GET_DISPATCH(), (mode, count, type, indices)); } /* * Eval Mesh */ -/* KW: If are compiling, we don't know whether eval will produce a - * vertex when it is run in the future. If this is pure immediate - * mode, eval is a noop if neither vertex map is enabled. +/** + * KW: + * If are compiling, we don't know whether eval will produce a + * vertex when it is run in the future. If this is pure immediate + * mode, eval is a noop if neither vertex map is enabled. * - * Thus we need to have a check in the display list code or - * elsewhere for eval(1,2) vertices in the case where - * map(1,2)_vertex is disabled, and to purge those vertices from - * the vb. + * Thus we need to have a check in the display list code or elsewhere + * for eval(1,2) vertices in the case where map(1,2)_vertex is + * disabled, and to purge those vertices from the vb. */ -void GLAPIENTRY _mesa_noop_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) +void GLAPIENTRY +_mesa_noop_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) { GET_CURRENT_CONTEXT(ctx); GLint i; @@ -800,16 +811,17 @@ void GLAPIENTRY _mesa_noop_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) du = ctx->Eval.MapGrid1du; u = ctx->Eval.MapGrid1u1 + i1 * du; - GL_CALL(Begin)( prim ); + CALL_Begin(GET_DISPATCH(), (prim)); for (i=i1;i<=i2;i++,u+=du) { - GL_CALL(EvalCoord1f)( u ); + CALL_EvalCoord1f(GET_DISPATCH(), (u)); } - GL_CALL(End)(); + CALL_End(GET_DISPATCH(), ()); } -void GLAPIENTRY _mesa_noop_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) +void GLAPIENTRY +_mesa_noop_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) { GET_CURRENT_CONTEXT(ctx); GLfloat u, du, v, dv, v1, u1; @@ -839,38 +851,38 @@ void GLAPIENTRY _mesa_noop_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, switch (mode) { case GL_POINT: - GL_CALL(Begin)( GL_POINTS ); + CALL_Begin(GET_DISPATCH(), (GL_POINTS)); for (v=v1,j=j1;j<=j2;j++,v+=dv) { for (u=u1,i=i1;i<=i2;i++,u+=du) { - GL_CALL(EvalCoord2f)(u, v ); + CALL_EvalCoord2f(GET_DISPATCH(), (u, v)); } } - GL_CALL(End)(); + CALL_End(GET_DISPATCH(), ()); break; case GL_LINE: for (v=v1,j=j1;j<=j2;j++,v+=dv) { - GL_CALL(Begin)( GL_LINE_STRIP ); + CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP)); for (u=u1,i=i1;i<=i2;i++,u+=du) { - GL_CALL(EvalCoord2f)(u, v ); + CALL_EvalCoord2f(GET_DISPATCH(), (u, v)); } - GL_CALL(End)(); + CALL_End(GET_DISPATCH(), ()); } for (u=u1,i=i1;i<=i2;i++,u+=du) { - GL_CALL(Begin)( GL_LINE_STRIP ); + CALL_Begin(GET_DISPATCH(), (GL_LINE_STRIP)); for (v=v1,j=j1;j<=j2;j++,v+=dv) { - GL_CALL(EvalCoord2f)(u, v ); + CALL_EvalCoord2f(GET_DISPATCH(), (u, v)); } - GL_CALL(End)(); + CALL_End(GET_DISPATCH(), ()); } break; case GL_FILL: for (v=v1,j=j1;jArrayElement = _ae_loopback_array_elt; /* generic helper */ vfmt->Begin = _mesa_noop_Begin; @@ -897,7 +911,6 @@ void _mesa_noop_vtxfmt_init( GLvertexformat *vfmt ) vfmt->Color4f = _mesa_noop_Color4f; vfmt->Color4fv = _mesa_noop_Color4fv; vfmt->EdgeFlag = _mesa_noop_EdgeFlag; - vfmt->EdgeFlagv = _mesa_noop_EdgeFlagv; vfmt->End = _mesa_noop_End; vfmt->EvalCoord1f = _mesa_noop_EvalCoord1f; vfmt->EvalCoord1fv = _mesa_noop_EvalCoord1fv; diff --git a/src/kits/opengl/mesa/main/api_noop.h b/src/kits/opengl/mesa/main/api_noop.h index 56d930e3b0..8bf4660800 100644 --- a/src/kits/opengl/mesa/main/api_noop.h +++ b/src/kits/opengl/mesa/main/api_noop.h @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,122 +25,22 @@ #ifndef _API_NOOP_H #define _API_NOOP_H - -#include "glheader.h" #include "mtypes.h" #include "context.h" -/* In states where certain vertex components are required for t&l or - * rasterization, we still need to keep track of the current values. - * These functions provide this service by keeping uptodate the - * 'ctx->Current' struct for all data elements not included in the - * currently enabled hardware vertex. - * - */ -extern void GLAPIENTRY _mesa_noop_EdgeFlag( GLboolean b ); -extern void GLAPIENTRY _mesa_noop_EdgeFlagv( const GLboolean *b ); +extern void GLAPIENTRY +_mesa_noop_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -extern void GLAPIENTRY _mesa_noop_FogCoordfEXT( GLfloat a ); -extern void GLAPIENTRY _mesa_noop_FogCoordfvEXT( const GLfloat *v ); +extern void GLAPIENTRY +_mesa_noop_EvalMesh1(GLenum mode, GLint i1, GLint i2); -extern void GLAPIENTRY _mesa_noop_Indexf( GLfloat i ); -extern void GLAPIENTRY _mesa_noop_Indexfv( const GLfloat *v ); - -extern void GLAPIENTRY _mesa_noop_Normal3f( GLfloat a, GLfloat b, GLfloat c ); -extern void GLAPIENTRY _mesa_noop_Normal3fv( const GLfloat *v ); - -extern void GLAPIENTRY _mesa_noop_Materialfv( GLenum face, GLenum pname, const GLfloat *param ); - -extern void _mesa_noop_Color4ub( GLubyte a, GLubyte b, GLubyte c, GLubyte d ); -extern void _mesa_noop_Color4ubv( const GLubyte *v ); -extern void GLAPIENTRY _mesa_noop_Color4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ); -extern void GLAPIENTRY _mesa_noop_Color4fv( const GLfloat *v ); -extern void _mesa_noop_Color3ub( GLubyte a, GLubyte b, GLubyte c ); -extern void _mesa_noop_Color3ubv( const GLubyte *v ); -extern void GLAPIENTRY _mesa_noop_Color3f( GLfloat a, GLfloat b, GLfloat c ); -extern void GLAPIENTRY _mesa_noop_Color3fv( const GLfloat *v ); - -extern void GLAPIENTRY _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a ); -extern void GLAPIENTRY _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a, GLfloat b ); -extern void GLAPIENTRY _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a, GLfloat b, GLfloat c); -extern void GLAPIENTRY _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a, GLfloat b, GLfloat c, GLfloat d ); -extern void GLAPIENTRY _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v ); - -extern void GLAPIENTRY _mesa_noop_SecondaryColor3ubEXT( GLubyte a, GLubyte b, GLubyte c ); -extern void GLAPIENTRY _mesa_noop_SecondaryColor3ubvEXT( const GLubyte *v ); -extern void GLAPIENTRY _mesa_noop_SecondaryColor3fEXT( GLfloat a, GLfloat b, GLfloat c ); -extern void GLAPIENTRY _mesa_noop_SecondaryColor3fvEXT( const GLfloat *v ); - -extern void GLAPIENTRY _mesa_noop_TexCoord1f( GLfloat a ); -extern void GLAPIENTRY _mesa_noop_TexCoord1fv( const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_TexCoord2f( GLfloat a, GLfloat b ); -extern void GLAPIENTRY _mesa_noop_TexCoord2fv( const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c ); -extern void GLAPIENTRY _mesa_noop_TexCoord3fv( const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ); -extern void GLAPIENTRY _mesa_noop_TexCoord4fv( const GLfloat *v ); - -extern void GLAPIENTRY _mesa_noop_Vertex2f( GLfloat a, GLfloat b ); -extern void GLAPIENTRY _mesa_noop_Vertex2fv( const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_Vertex3f( GLfloat a, GLfloat b, GLfloat c ); -extern void GLAPIENTRY _mesa_noop_Vertex3fv( const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_Vertex4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ); -extern void GLAPIENTRY _mesa_noop_Vertex4fv( const GLfloat *v ); - -extern void GLAPIENTRY _mesa_noop_VertexAttrib1fNV( GLuint index, GLfloat x ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib1fvNV( GLuint index, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib2fNV( GLuint index, GLfloat x, GLfloat y ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib2fvNV( GLuint index, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib3fNV( GLuint index, GLfloat x, GLfloat y, GLfloat z ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib3fvNV( GLuint index, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib4fNV( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); - -extern void GLAPIENTRY _mesa_noop_VertexAttrib4fvNV( GLuint index, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib1fARB( GLuint index, GLfloat x ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib1fvARB( GLuint index, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib2fARB( GLuint index, GLfloat x, GLfloat y ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib2fvARB( GLuint index, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib3fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib3fvARB( GLuint index, const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib4fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -extern void GLAPIENTRY _mesa_noop_VertexAttrib4fvARB( GLuint index, const GLfloat *v ); - - -extern void GLAPIENTRY _mesa_noop_End( void ); -extern void GLAPIENTRY _mesa_noop_Begin( GLenum mode ); -extern void GLAPIENTRY _mesa_noop_EvalPoint2( GLint a, GLint b ); -extern void GLAPIENTRY _mesa_noop_EvalPoint1( GLint a ); -extern void GLAPIENTRY _mesa_noop_EvalCoord2fv( const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_EvalCoord2f( GLfloat a, GLfloat b ); -extern void GLAPIENTRY _mesa_noop_EvalCoord1fv( const GLfloat *v ); -extern void GLAPIENTRY _mesa_noop_EvalCoord1f( GLfloat a ); - -extern void _mesa_noop_vtxfmt_init( GLvertexformat *vfmt ); - -extern void GLAPIENTRY _mesa_noop_EvalMesh2( GLenum mode, GLint i1, GLint i2, - GLint j1, GLint j2 ); - -extern void GLAPIENTRY _mesa_noop_EvalMesh1( GLenum mode, GLint i1, GLint i2 ); - - -/* Not strictly a noop -- translate Rectf down to Begin/End and - * vertices. Closer to the loopback operations, but doesn't meet the - * criteria for inclusion there (cannot be used in the Save table). - */ -extern void GLAPIENTRY _mesa_noop_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); - - -extern void GLAPIENTRY _mesa_noop_DrawArrays(GLenum mode, GLint start, GLsizei count); -extern void GLAPIENTRY _mesa_noop_DrawElements(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices); -extern void GLAPIENTRY _mesa_noop_DrawRangeElements(GLenum mode, - GLuint start, GLuint end, - GLsizei count, GLenum type, - const GLvoid *indices); +extern void GLAPIENTRY +_mesa_noop_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +extern void GLAPIENTRY +_mesa_noop_Materialfv(GLenum face, GLenum pname, const GLfloat *param); +extern void +_mesa_noop_vtxfmt_init(GLvertexformat *vfmt); #endif diff --git a/src/kits/opengl/mesa/main/api_validate.c b/src/kits/opengl/mesa/main/api_validate.c index d1c8f42e74..3d20ba7d14 100644 --- a/src/kits/opengl/mesa/main/api_validate.c +++ b/src/kits/opengl/mesa/main/api_validate.c @@ -60,8 +60,8 @@ _mesa_validate_DrawElements(GLcontext *ctx, _mesa_update_state(ctx); /* Always need vertex positions */ - if (!ctx->Array.Vertex.Enabled - && !(ctx->VertexProgram._Enabled && ctx->Array.VertexAttrib[0].Enabled)) + if (!ctx->Array.ArrayObj->Vertex.Enabled + && !(ctx->VertexProgram._Enabled && ctx->Array.ArrayObj->VertexAttrib[0].Enabled)) return GL_FALSE; /* Vertex buffer object tests */ @@ -166,8 +166,8 @@ _mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode, _mesa_update_state(ctx); /* Always need vertex positions */ - if (!ctx->Array.Vertex.Enabled - && !(ctx->VertexProgram._Enabled && ctx->Array.VertexAttrib[0].Enabled)) + if (!ctx->Array.ArrayObj->Vertex.Enabled + && !(ctx->VertexProgram._Enabled && ctx->Array.ArrayObj->VertexAttrib[0].Enabled)) return GL_FALSE; if (ctx->Const.CheckArrayBounds) { @@ -226,7 +226,7 @@ _mesa_validate_DrawArrays(GLcontext *ctx, _mesa_update_state(ctx); /* Always need vertex positions */ - if (!ctx->Array.Vertex.Enabled && !ctx->Array.VertexAttrib[0].Enabled) + if (!ctx->Array.ArrayObj->Vertex.Enabled && !ctx->Array.ArrayObj->VertexAttrib[0].Enabled) return GL_FALSE; if (ctx->Const.CheckArrayBounds) { diff --git a/src/kits/opengl/mesa/main/arrayobj.c b/src/kits/opengl/mesa/main/arrayobj.c new file mode 100644 index 0000000000..852b9aaee9 --- /dev/null +++ b/src/kits/opengl/mesa/main/arrayobj.c @@ -0,0 +1,419 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * (C) Copyright IBM Corporation 2006 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL OR IBM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + +/** + * \file arrayobj.c + * Functions for the GL_APPLE_vertex_array_object extension. + * + * \todo + * The code in this file borrows a lot from bufferobj.c. There's a certain + * amount of cruft left over from that origin that may be unnecessary. + * + * \author Ian Romanick + * \author Brian Paul + */ + + +#include "glheader.h" +#include "hash.h" +#include "imports.h" +#include "context.h" +#if FEATURE_ARB_vertex_buffer_object +#include "bufferobj.h" +#endif +#include "arrayobj.h" +#include "dispatch.h" + + +/** + * Look up the array object for the given ID. + * + * \returns + * Either a pointer to the array object with the specified ID or \c NULL for + * a non-existent ID. The spec defines ID 0 as being technically + * non-existent. + */ + +static INLINE struct gl_array_object * +lookup_arrayobj(GLcontext *ctx, GLuint id) +{ + return (id == 0) + ? NULL + : (struct gl_array_object *) _mesa_HashLookup(ctx->Shared->ArrayObjects, + id); +} + + +/** + * Allocate and initialize a new vertex array object. + * + * This function is intended to be called via + * \c dd_function_table::NewArrayObject. + */ +struct gl_array_object * +_mesa_new_array_object( GLcontext *ctx, GLuint name ) +{ + struct gl_array_object *obj = MALLOC_STRUCT(gl_array_object); + if (obj) + _mesa_initialize_array_object(ctx, obj, name); + return obj; +} + + +/** + * Delete an array object. + * + * This function is intended to be called via + * \c dd_function_table::DeleteArrayObject. + */ +void +_mesa_delete_array_object( GLcontext *ctx, struct gl_array_object *obj ) +{ + (void) ctx; + _mesa_free(obj); +} + + +void +_mesa_initialize_array_object( GLcontext *ctx, + struct gl_array_object *obj, + GLuint name ) +{ + GLuint i; + + obj->Name = name; + + /* Vertex arrays */ + obj->Vertex.Size = 4; + obj->Vertex.Type = GL_FLOAT; + obj->Vertex.Stride = 0; + obj->Vertex.StrideB = 0; + obj->Vertex.Ptr = NULL; + obj->Vertex.Enabled = GL_FALSE; + obj->Vertex.Flags = CA_CLIENT_DATA; + obj->Normal.Type = GL_FLOAT; + obj->Normal.Stride = 0; + obj->Normal.StrideB = 0; + obj->Normal.Ptr = NULL; + obj->Normal.Enabled = GL_FALSE; + obj->Normal.Flags = CA_CLIENT_DATA; + obj->Color.Size = 4; + obj->Color.Type = GL_FLOAT; + obj->Color.Stride = 0; + obj->Color.StrideB = 0; + obj->Color.Ptr = NULL; + obj->Color.Enabled = GL_FALSE; + obj->Color.Flags = CA_CLIENT_DATA; + obj->SecondaryColor.Size = 4; + obj->SecondaryColor.Type = GL_FLOAT; + obj->SecondaryColor.Stride = 0; + obj->SecondaryColor.StrideB = 0; + obj->SecondaryColor.Ptr = NULL; + obj->SecondaryColor.Enabled = GL_FALSE; + obj->SecondaryColor.Flags = CA_CLIENT_DATA; + obj->FogCoord.Size = 1; + obj->FogCoord.Type = GL_FLOAT; + obj->FogCoord.Stride = 0; + obj->FogCoord.StrideB = 0; + obj->FogCoord.Ptr = NULL; + obj->FogCoord.Enabled = GL_FALSE; + obj->FogCoord.Flags = CA_CLIENT_DATA; + obj->Index.Type = GL_FLOAT; + obj->Index.Stride = 0; + obj->Index.StrideB = 0; + obj->Index.Ptr = NULL; + obj->Index.Enabled = GL_FALSE; + obj->Index.Flags = CA_CLIENT_DATA; + for (i = 0; i < MAX_TEXTURE_UNITS; i++) { + obj->TexCoord[i].Size = 4; + obj->TexCoord[i].Type = GL_FLOAT; + obj->TexCoord[i].Stride = 0; + obj->TexCoord[i].StrideB = 0; + obj->TexCoord[i].Ptr = NULL; + obj->TexCoord[i].Enabled = GL_FALSE; + obj->TexCoord[i].Flags = CA_CLIENT_DATA; + } + obj->EdgeFlag.Stride = 0; + obj->EdgeFlag.StrideB = 0; + obj->EdgeFlag.Ptr = NULL; + obj->EdgeFlag.Enabled = GL_FALSE; + obj->EdgeFlag.Flags = CA_CLIENT_DATA; + for (i = 0; i < VERT_ATTRIB_MAX; i++) { + obj->VertexAttrib[i].Size = 4; + obj->VertexAttrib[i].Type = GL_FLOAT; + obj->VertexAttrib[i].Stride = 0; + obj->VertexAttrib[i].StrideB = 0; + obj->VertexAttrib[i].Ptr = NULL; + obj->VertexAttrib[i].Enabled = GL_FALSE; + obj->VertexAttrib[i].Normalized = GL_FALSE; + obj->VertexAttrib[i].Flags = CA_CLIENT_DATA; + } + +#if FEATURE_ARB_vertex_buffer_object + /* Vertex array buffers */ + obj->Vertex.BufferObj = ctx->Array.NullBufferObj; + obj->Normal.BufferObj = ctx->Array.NullBufferObj; + obj->Color.BufferObj = ctx->Array.NullBufferObj; + obj->SecondaryColor.BufferObj = ctx->Array.NullBufferObj; + obj->FogCoord.BufferObj = ctx->Array.NullBufferObj; + obj->Index.BufferObj = ctx->Array.NullBufferObj; + for (i = 0; i < MAX_TEXTURE_UNITS; i++) { + obj->TexCoord[i].BufferObj = ctx->Array.NullBufferObj; + } + obj->EdgeFlag.BufferObj = ctx->Array.NullBufferObj; + for (i = 0; i < VERT_ATTRIB_MAX; i++) { + obj->VertexAttrib[i].BufferObj = ctx->Array.NullBufferObj; + } +#endif +} + + +/** + * Add the given array object to the array object pool. + */ +void +_mesa_save_array_object( GLcontext *ctx, struct gl_array_object *obj ) +{ + if (obj->Name > 0) { + /* insert into hash table */ + _mesa_HashInsert(ctx->Shared->ArrayObjects, obj->Name, obj); + } +} + + +/** + * Remove the given array object from the array object pool. + * Do not deallocate the array object though. + */ +void +_mesa_remove_array_object( GLcontext *ctx, struct gl_array_object *obj ) +{ + if (obj->Name > 0) { + /* remove from hash table */ + _mesa_HashRemove(ctx->Shared->ArrayObjects, obj->Name); + } +} + + +/**********************************************************************/ +/* API Functions */ +/**********************************************************************/ + +/** + * Bind a new array. + * + * \todo + * The binding could be done more efficiently by comparing the non-NULL + * pointers in the old and new objects. The only arrays that are "dirty" are + * the ones that are non-NULL in either object. + */ +void GLAPIENTRY +_mesa_BindVertexArrayAPPLE( GLuint id ) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_array_object * const oldObj = ctx->Array.ArrayObj; + struct gl_array_object *newObj = NULL; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + ASSERT(oldObj != NULL); + + if ( oldObj->Name == id ) + return; /* rebinding the same array object- no change */ + + /* + * Get pointer to new array object (newBufObj) + */ + if (id == 0) { + /* The spec says there is no array object named 0, but we use + * one internally because it simplifies things. + */ + newObj = ctx->Array.DefaultArrayObj; + } + else { + /* non-default array object */ + newObj = lookup_arrayobj(ctx, id); + if (!newObj) { + /* If this is a new array object id, allocate an array object now. + */ + + newObj = (*ctx->Driver.NewArrayObject)(ctx, id); + if (!newObj) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindVertexArrayAPPLE"); + return; + } + _mesa_save_array_object(ctx, newObj); + } + } + + + ctx->NewState |= _NEW_ARRAY; + ctx->Array.NewState |= _NEW_ARRAY_ALL; + ctx->Array.ArrayObj = newObj; + + + /* Pass BindVertexArray call to device driver */ + if (ctx->Driver.BindArrayObject && newObj) + (*ctx->Driver.BindArrayObject)( ctx, newObj ); +} + + +/** + * Delete a set of array objects. + * + * \param n Number of array objects to delete. + * \param ids Array of \c n array object IDs. + */ +void GLAPIENTRY +_mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids) +{ + GET_CURRENT_CONTEXT(ctx); + GLsizei i; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (n < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteVertexArrayAPPLE(n)"); + return; + } + + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + + for (i = 0; i < n; i++) { + struct gl_array_object *obj = lookup_arrayobj(ctx, ids[i]); + + if ( obj != NULL ) { + ASSERT( obj->Name == ids[i] ); + + + /* If the array object is currently bound, the spec says "the binding + * for that object reverts to zero and the default vertex array + * becomes current." + */ + if ( obj == ctx->Array.ArrayObj ) { + CALL_BindVertexArrayAPPLE( ctx->Exec, (0) ); + } + +#if FEATURE_ARB_vertex_buffer_object + /* Unbind any buffer objects that might be bound to arrays in + * this array object. + */ + _mesa_unbind_buffer_object( ctx, obj->Vertex.BufferObj ); + _mesa_unbind_buffer_object( ctx, obj->Normal.BufferObj ); + _mesa_unbind_buffer_object( ctx, obj->Color.BufferObj ); + _mesa_unbind_buffer_object( ctx, obj->SecondaryColor.BufferObj ); + _mesa_unbind_buffer_object( ctx, obj->FogCoord.BufferObj ); + _mesa_unbind_buffer_object( ctx, obj->Index.BufferObj ); + for (i = 0; i < MAX_TEXTURE_UNITS; i++) { + _mesa_unbind_buffer_object( ctx, obj->TexCoord[i].BufferObj ); + } + _mesa_unbind_buffer_object( ctx, obj->EdgeFlag.BufferObj ); + for (i = 0; i < VERT_ATTRIB_MAX; i++) { + _mesa_unbind_buffer_object( ctx, obj->VertexAttrib[i].BufferObj ); + } +#endif + + /* The ID is immediately freed for re-use */ + _mesa_remove_array_object(ctx, obj); + ctx->Driver.DeleteArrayObject(ctx, obj); + } + } + + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); +} + + +/** + * Generate a set of unique array object IDs and store them in \c arrays. + * + * \param n Number of IDs to generate. + * \param arrays Array of \c n locations to store the IDs. + */ +void GLAPIENTRY +_mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays) +{ + GET_CURRENT_CONTEXT(ctx); + GLuint first; + GLint i; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (n < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glGenVertexArraysAPPLE"); + return; + } + + if (!arrays) { + return; + } + + /* + * This must be atomic (generation and allocation of array object IDs) + */ + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + + first = _mesa_HashFindFreeKeyBlock(ctx->Shared->ArrayObjects, n); + + /* Allocate new, empty array objects and return identifiers */ + for (i = 0; i < n; i++) { + struct gl_array_object *obj; + GLuint name = first + i; + + obj = (*ctx->Driver.NewArrayObject)( ctx, name ); + if (!obj) { + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArraysAPPLE"); + return; + } + _mesa_save_array_object(ctx, obj); + arrays[i] = first + i; + } + + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); +} + + +/** + * Determine if ID is the name of an array object. + * + * \param id ID of the potential array object. + * \return \c GL_TRUE if \c id is the name of a array object, + * \c GL_FALSE otherwise. + */ +GLboolean GLAPIENTRY +_mesa_IsVertexArrayAPPLE( GLuint id ) +{ + struct gl_array_object * obj; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); + + if (id == 0) + return GL_FALSE; + + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + obj = lookup_arrayobj(ctx, id); + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); + + return (obj != NULL) ? GL_TRUE : GL_FALSE; +} diff --git a/src/kits/opengl/mesa/main/arrayobj.h b/src/kits/opengl/mesa/main/arrayobj.h new file mode 100644 index 0000000000..c7d66ec166 --- /dev/null +++ b/src/kits/opengl/mesa/main/arrayobj.h @@ -0,0 +1,70 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * (C) Copyright IBM Corporation 2006 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL OR IBM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef ARRAYOBJ_H +#define ARRAYOBJ_H + +#include "context.h" + +/** + * \file arrayobj.h + * Functions for the GL_APPLE_vertex_array_object extension. + * + * \author Ian Romanick + * \author Brian Paul + */ + +/* + * Internal functions + */ + +struct gl_array_object * _mesa_new_array_object( GLcontext *ctx, + GLuint name ); + +void _mesa_delete_array_object( GLcontext *ctx, struct gl_array_object *obj ); + +void _mesa_initialize_array_object( GLcontext *ctx, + struct gl_array_object *obj, GLuint name ); + +void _mesa_save_array_object( GLcontext *ctx, struct gl_array_object *obj ); + +void _mesa_remove_array_object( GLcontext *ctx, struct gl_array_object *obj ); + + + +/* + * API functions + */ + +void GLAPIENTRY _mesa_BindVertexArrayAPPLE( GLuint id ); + +void GLAPIENTRY _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids); + +void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer); + +GLboolean GLAPIENTRY _mesa_IsVertexArrayAPPLE( GLuint id ); + +#endif /* ARRAYOBJ_H */ diff --git a/src/kits/opengl/mesa/main/attrib.c b/src/kits/opengl/mesa/main/attrib.c index d45593cc99..9993a0021b 100644 --- a/src/kits/opengl/mesa/main/attrib.c +++ b/src/kits/opengl/mesa/main/attrib.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -25,6 +25,7 @@ #include "glheader.h" #include "imports.h" #include "accum.h" +#include "arrayobj.h" #include "attrib.h" #include "blend.h" #include "buffers.h" @@ -50,7 +51,7 @@ #include "math/m_xform.h" -/* +/** * Allocate a new attribute state node. These nodes have a * "kind" value and a pointer to a struct of state data. */ @@ -147,7 +148,7 @@ _mesa_PushAttrib(GLbitfield mask) attr->DepthTest = ctx->Depth.Test; attr->Dither = ctx->Color.DitherFlag; attr->Fog = ctx->Fog.Enabled; - for (i=0;iConst.MaxLights; i++) { attr->Light[i] = ctx->Light.Light[i].Enabled; } attr->Lighting = ctx->Light.Enabled; @@ -179,7 +180,6 @@ _mesa_PushAttrib(GLbitfield mask) MEMCPY(attr->Map2Attrib, ctx->Eval.Map2Attrib, sizeof(ctx->Eval.Map2Attrib)); attr->Normalize = ctx->Transform.Normalize; attr->RasterPositionUnclipped = ctx->Transform.RasterPositionUnclipped; - attr->PixelTexture = ctx->Pixel.PixelTextureEnabled; attr->PointSmooth = ctx->Point.SmoothFlag; attr->PointSprite = ctx->Point.PointSprite; attr->PolygonOffsetPoint = ctx->Polygon.OffsetPoint; @@ -276,6 +276,8 @@ _mesa_PushAttrib(GLbitfield mask) struct gl_pixel_attrib *attr; attr = MALLOC_STRUCT( gl_pixel_attrib ); MEMCPY( attr, &ctx->Pixel, sizeof(struct gl_pixel_attrib) ); + /* push the Read FBO's ReadBuffer state, not ctx->Pixel.ReadBuffer */ + attr->ReadBuffer = ctx->ReadBuffer->ColorReadBuffer; newnode = new_attrib_node( GL_PIXEL_MODE_BIT ); newnode->data = attr; newnode->next = head; @@ -335,6 +337,8 @@ _mesa_PushAttrib(GLbitfield mask) if (mask & GL_TEXTURE_BIT) { struct gl_texture_attrib *attr; GLuint u; + + _mesa_lock_context_textures(ctx); /* Bump the texture object reference counts so that they don't * inadvertantly get deleted. */ @@ -360,6 +364,9 @@ _mesa_PushAttrib(GLbitfield mask) _mesa_copy_texture_object(&attr->Unit[u].SavedRect, attr->Unit[u].CurrentRect); } + + _mesa_unlock_context_textures(ctx); + newnode = new_attrib_node( GL_TEXTURE_BIT ); newnode->data = attr; newnode->next = head; @@ -499,8 +506,6 @@ pop_enable_group(GLcontext *ctx, const struct gl_enable_attrib *enable) TEST_AND_UPDATE(ctx->Transform.RasterPositionUnclipped, enable->RasterPositionUnclipped, GL_RASTER_POSITION_UNCLIPPED_IBM); - TEST_AND_UPDATE(ctx->Pixel.PixelTextureEnabled, enable->PixelTexture, - GL_POINT_SMOOTH); TEST_AND_UPDATE(ctx->Point.SmoothFlag, enable->PointSmooth, GL_POINT_SMOOTH); if (ctx->Extensions.NV_point_sprite || ctx->Extensions.ARB_point_sprite) { @@ -536,16 +541,16 @@ pop_enable_group(GLcontext *ctx, const struct gl_enable_attrib *enable) TEST_AND_UPDATE(ctx->Multisample.SampleCoverageInvert, enable->SampleCoverageInvert, GL_SAMPLE_COVERAGE_INVERT_ARB); - /* GL_NV_vertex_program */ + /* GL_ARB_vertex_program, GL_NV_vertex_program */ TEST_AND_UPDATE(ctx->VertexProgram.Enabled, enable->VertexProgram, - GL_VERTEX_PROGRAM_NV); + GL_VERTEX_PROGRAM_ARB); TEST_AND_UPDATE(ctx->VertexProgram.PointSizeEnabled, enable->VertexProgramPointSize, - GL_VERTEX_PROGRAM_POINT_SIZE_NV); + GL_VERTEX_PROGRAM_POINT_SIZE_ARB); TEST_AND_UPDATE(ctx->VertexProgram.TwoSideEnabled, enable->VertexProgramTwoSide, - GL_VERTEX_PROGRAM_TWO_SIDE_NV); + GL_VERTEX_PROGRAM_TWO_SIDE_ARB); #undef TEST_AND_UPDATE @@ -618,18 +623,18 @@ pop_texture_group(GLcontext *ctx, const struct gl_texture_attrib *texAttrib) _mesa_ActiveTextureARB(GL_TEXTURE0_ARB + u); _mesa_set_enable(ctx, GL_TEXTURE_1D, - (GLboolean) (unit->Enabled & TEXTURE_1D_BIT ? GL_TRUE : GL_FALSE)); + (unit->Enabled & TEXTURE_1D_BIT) ? GL_TRUE : GL_FALSE); _mesa_set_enable(ctx, GL_TEXTURE_2D, - (GLboolean) (unit->Enabled & TEXTURE_2D_BIT ? GL_TRUE : GL_FALSE)); + (unit->Enabled & TEXTURE_2D_BIT) ? GL_TRUE : GL_FALSE); _mesa_set_enable(ctx, GL_TEXTURE_3D, - (GLboolean) (unit->Enabled & TEXTURE_3D_BIT ? GL_TRUE : GL_FALSE)); + (unit->Enabled & TEXTURE_3D_BIT) ? GL_TRUE : GL_FALSE); if (ctx->Extensions.ARB_texture_cube_map) { _mesa_set_enable(ctx, GL_TEXTURE_CUBE_MAP_ARB, - (GLboolean) (unit->Enabled & TEXTURE_CUBE_BIT ? GL_TRUE : GL_FALSE)); + (unit->Enabled & TEXTURE_CUBE_BIT) ? GL_TRUE : GL_FALSE); } if (ctx->Extensions.NV_texture_rectangle) { _mesa_set_enable(ctx, GL_TEXTURE_RECTANGLE_NV, - (GLboolean) (unit->Enabled & TEXTURE_RECT_BIT ? GL_TRUE : GL_FALSE)); + (unit->Enabled & TEXTURE_RECT_BIT) ? GL_TRUE : GL_FALSE); } if (ctx->Extensions.SGI_texture_color_table) { _mesa_set_enable(ctx, GL_TEXTURE_COLOR_TABLE_SGI, @@ -645,10 +650,28 @@ pop_texture_group(GLcontext *ctx, const struct gl_texture_attrib *texAttrib) _mesa_TexGenfv(GL_T, GL_OBJECT_PLANE, unit->ObjectPlaneT); _mesa_TexGenfv(GL_R, GL_OBJECT_PLANE, unit->ObjectPlaneR); _mesa_TexGenfv(GL_Q, GL_OBJECT_PLANE, unit->ObjectPlaneQ); - _mesa_TexGenfv(GL_S, GL_EYE_PLANE, unit->EyePlaneS); - _mesa_TexGenfv(GL_T, GL_EYE_PLANE, unit->EyePlaneT); - _mesa_TexGenfv(GL_R, GL_EYE_PLANE, unit->EyePlaneR); - _mesa_TexGenfv(GL_Q, GL_EYE_PLANE, unit->EyePlaneQ); + /* Eye plane done differently to avoid re-transformation */ + { + struct gl_texture_unit *destUnit = &ctx->Texture.Unit[u]; + COPY_4FV(destUnit->EyePlaneS, unit->EyePlaneS); + COPY_4FV(destUnit->EyePlaneT, unit->EyePlaneT); + COPY_4FV(destUnit->EyePlaneR, unit->EyePlaneR); + COPY_4FV(destUnit->EyePlaneQ, unit->EyePlaneQ); + if (ctx->Driver.TexGen) { + ctx->Driver.TexGen(ctx, GL_S, GL_EYE_PLANE, unit->EyePlaneS); + ctx->Driver.TexGen(ctx, GL_T, GL_EYE_PLANE, unit->EyePlaneT); + ctx->Driver.TexGen(ctx, GL_R, GL_EYE_PLANE, unit->EyePlaneR); + ctx->Driver.TexGen(ctx, GL_Q, GL_EYE_PLANE, unit->EyePlaneQ); + } + } + _mesa_set_enable(ctx, GL_TEXTURE_GEN_S, + ((unit->TexGenEnabled & S_BIT) ? GL_TRUE : GL_FALSE)); + _mesa_set_enable(ctx, GL_TEXTURE_GEN_T, + ((unit->TexGenEnabled & T_BIT) ? GL_TRUE : GL_FALSE)); + _mesa_set_enable(ctx, GL_TEXTURE_GEN_R, + ((unit->TexGenEnabled & R_BIT) ? GL_TRUE : GL_FALSE)); + _mesa_set_enable(ctx, GL_TEXTURE_GEN_Q, + ((unit->TexGenEnabled & Q_BIT) ? GL_TRUE : GL_FALSE)); if (ctx->Extensions.EXT_texture_lod_bias) { _mesa_TexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, unit->LodBias); @@ -833,8 +856,36 @@ _mesa_PopAttrib(void) (GLboolean) (color->ColorMask[1] != 0), (GLboolean) (color->ColorMask[2] != 0), (GLboolean) (color->ColorMask[3] != 0)); - _mesa_DrawBuffersARB(ctx->Const.MaxDrawBuffers, - color->DrawBuffer); + { + /* Need to determine if more than one color output is + * specified. If so, call glDrawBuffersARB, else call + * glDrawBuffer(). This is a subtle, but essential point + * since GL_FRONT (for example) is illegal for the former + * function, but legal for the later. + */ + GLboolean multipleBuffers = GL_FALSE; + if (ctx->Extensions.ARB_draw_buffers) { + GLuint i; + for (i = 1; i < ctx->Const.MaxDrawBuffers; i++) { + if (color->DrawBuffer[i] != GL_NONE) { + multipleBuffers = GL_TRUE; + break; + } + } + } + /* Call the API_level functions, not _mesa_drawbuffers() + * since we need to do error checking on the pop'd + * GL_DRAW_BUFFER. + * Ex: if GL_FRONT were pushed, but we're popping with a + * user FBO bound, GL_FRONT will be illegal and we'll need + * to record that error. Per OpenGL ARB decision. + */ + if (multipleBuffers) + _mesa_DrawBuffersARB(ctx->Const.MaxDrawBuffers, + color->DrawBuffer); + else + _mesa_DrawBuffer(color->DrawBuffer[0]); + } _mesa_set_enable(ctx, GL_ALPHA_TEST, color->AlphaEnabled); _mesa_AlphaFunc(color->AlphaFunc, color->AlphaRef); _mesa_set_enable(ctx, GL_BLEND, color->BlendEnabled); @@ -877,9 +928,6 @@ _mesa_PopAttrib(void) _mesa_ClearDepth(depth->Clear); _mesa_set_enable(ctx, GL_DEPTH_TEST, depth->Test); _mesa_DepthMask(depth->Mask); - if (ctx->Extensions.HP_occlusion_test) - _mesa_set_enable(ctx, GL_OCCLUSION_TEST_HP, - depth->OcclusionTest); } break; case GL_ENABLE_BIT: @@ -932,29 +980,25 @@ _mesa_PopAttrib(void) /* lighting enable */ _mesa_set_enable(ctx, GL_LIGHTING, light->Enabled); /* per-light state */ - if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY_INVERSE) + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); - for (i = 0; i < MAX_LIGHTS; i++) { - GLenum lgt = (GLenum) (GL_LIGHT0 + i); + for (i = 0; i < ctx->Const.MaxLights; i++) { const struct gl_light *l = &light->Light[i]; - GLfloat tmp[4]; - _mesa_set_enable(ctx, lgt, l->Enabled); - _mesa_Lightfv( lgt, GL_AMBIENT, l->Ambient ); - _mesa_Lightfv( lgt, GL_DIFFUSE, l->Diffuse ); - _mesa_Lightfv( lgt, GL_SPECULAR, l->Specular ); - TRANSFORM_POINT( tmp, ctx->ModelviewMatrixStack.Top->inv, l->EyePosition ); - _mesa_Lightfv( lgt, GL_POSITION, tmp ); - TRANSFORM_POINT( tmp, ctx->ModelviewMatrixStack.Top->m, l->EyeDirection ); - _mesa_Lightfv( lgt, GL_SPOT_DIRECTION, tmp ); - _mesa_Lightfv( lgt, GL_SPOT_EXPONENT, &l->SpotExponent ); - _mesa_Lightfv( lgt, GL_SPOT_CUTOFF, &l->SpotCutoff ); - _mesa_Lightfv( lgt, GL_CONSTANT_ATTENUATION, - &l->ConstantAttenuation ); - _mesa_Lightfv( lgt, GL_LINEAR_ATTENUATION, - &l->LinearAttenuation ); - _mesa_Lightfv( lgt, GL_QUADRATIC_ATTENUATION, - &l->QuadraticAttenuation ); + _mesa_set_enable(ctx, GL_LIGHT0 + i, l->Enabled); + _mesa_light(ctx, i, GL_AMBIENT, l->Ambient); + _mesa_light(ctx, i, GL_DIFFUSE, l->Diffuse); + _mesa_light(ctx, i, GL_SPECULAR, l->Specular ); + _mesa_light(ctx, i, GL_POSITION, l->EyePosition); + _mesa_light(ctx, i, GL_SPOT_DIRECTION, l->EyeDirection); + _mesa_light(ctx, i, GL_SPOT_EXPONENT, &l->SpotExponent); + _mesa_light(ctx, i, GL_SPOT_CUTOFF, &l->SpotCutoff); + _mesa_light(ctx, i, GL_CONSTANT_ATTENUATION, + &l->ConstantAttenuation); + _mesa_light(ctx, i, GL_LINEAR_ATTENUATION, + &l->LinearAttenuation); + _mesa_light(ctx, i, GL_QUADRATIC_ATTENUATION, + &l->QuadraticAttenuation); } /* light model */ _mesa_LightModelfv(GL_LIGHT_MODEL_AMBIENT, @@ -965,9 +1009,6 @@ _mesa_PopAttrib(void) (GLfloat) light->Model.TwoSide); _mesa_LightModelf(GL_LIGHT_MODEL_COLOR_CONTROL, (GLfloat) light->Model.ColorControl); - /* materials */ - MEMCPY(&ctx->Light.Material, &light->Material, - sizeof(struct gl_material)); /* shade model */ _mesa_ShadeModel(light->ShadeModel); /* color material */ @@ -975,6 +1016,9 @@ _mesa_PopAttrib(void) light->ColorMaterialMode); _mesa_set_enable(ctx, GL_COLOR_MATERIAL, light->ColorMaterialEnabled); + /* materials */ + MEMCPY(&ctx->Light.Material, &light->Material, + sizeof(struct gl_material)); } break; case GL_LINE_BIT: @@ -992,6 +1036,8 @@ _mesa_PopAttrib(void) break; case GL_PIXEL_MODE_BIT: MEMCPY( &ctx->Pixel, attr->data, sizeof(struct gl_pixel_attrib) ); + /* XXX what other pixel state needs to be set by function calls? */ + _mesa_ReadBuffer(ctx->Pixel.ReadBuffer); ctx->NewState |= _NEW_PIXEL; break; case GL_POINT_BIT: @@ -1063,26 +1109,34 @@ _mesa_PopAttrib(void) break; case GL_STENCIL_BUFFER_BIT: { - GLint face; const struct gl_stencil_attrib *stencil; stencil = (const struct gl_stencil_attrib *) attr->data; _mesa_set_enable(ctx, GL_STENCIL_TEST, stencil->Enabled); _mesa_ClearStencil(stencil->Clear); - face = stencil->ActiveFace; if (ctx->Extensions.EXT_stencil_two_side) { - _mesa_set_enable(ctx, GL_STENCIL_TEST_TWO_SIDE_EXT, stencil->TestTwoSide); - face ^= 1; + _mesa_set_enable(ctx, GL_STENCIL_TEST_TWO_SIDE_EXT, + stencil->TestTwoSide); + _mesa_ActiveStencilFaceEXT(stencil->ActiveFace + ? GL_BACK : GL_FRONT); } - do { - _mesa_ActiveStencilFaceEXT(face); - _mesa_StencilFunc(stencil->Function[face], stencil->Ref[face], - stencil->ValueMask[face]); - _mesa_StencilMask(stencil->WriteMask[face]); - _mesa_StencilOp(stencil->FailFunc[face], - stencil->ZFailFunc[face], - stencil->ZPassFunc[face]); - face ^= 1; - } while (face != (stencil->ActiveFace ^ 1)); + /* front state */ + _mesa_StencilFuncSeparate(GL_FRONT, + stencil->Function[0], + stencil->Ref[0], + stencil->ValueMask[0]); + _mesa_StencilMaskSeparate(GL_FRONT, stencil->WriteMask[0]); + _mesa_StencilOpSeparate(GL_FRONT, stencil->FailFunc[0], + stencil->ZFailFunc[0], + stencil->ZPassFunc[0]); + /* back state */ + _mesa_StencilFuncSeparate(GL_BACK, + stencil->Function[1], + stencil->Ref[1], + stencil->ValueMask[1]); + _mesa_StencilMaskSeparate(GL_BACK, stencil->WriteMask[1]); + _mesa_StencilOpSeparate(GL_BACK, stencil->FailFunc[1], + stencil->ZFailFunc[1], + stencil->ZPassFunc[1]); } break; case GL_TRANSFORM_BIT: @@ -1091,7 +1145,7 @@ _mesa_PopAttrib(void) const struct gl_transform_attrib *xform; xform = (const struct gl_transform_attrib *) attr->data; _mesa_MatrixMode(xform->MatrixMode); - if (ctx->ProjectionMatrixStack.Top->flags & MAT_DIRTY) + if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top)) _math_matrix_analyse( ctx->ProjectionMatrixStack.Top ); /* restore clip planes */ @@ -1164,17 +1218,17 @@ static void adjust_buffer_object_ref_counts(struct gl_array_attrib *array, GLint step) { GLuint i; - array->Vertex.BufferObj->RefCount += step; - array->Normal.BufferObj->RefCount += step; - array->Color.BufferObj->RefCount += step; - array->SecondaryColor.BufferObj->RefCount += step; - array->FogCoord.BufferObj->RefCount += step; - array->Index.BufferObj->RefCount += step; - array->EdgeFlag.BufferObj->RefCount += step; + array->ArrayObj->Vertex.BufferObj->RefCount += step; + array->ArrayObj->Normal.BufferObj->RefCount += step; + array->ArrayObj->Color.BufferObj->RefCount += step; + array->ArrayObj->SecondaryColor.BufferObj->RefCount += step; + array->ArrayObj->FogCoord.BufferObj->RefCount += step; + array->ArrayObj->Index.BufferObj->RefCount += step; + array->ArrayObj->EdgeFlag.BufferObj->RefCount += step; for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) - array->TexCoord[i].BufferObj->RefCount += step; + array->ArrayObj->TexCoord[i].BufferObj->RefCount += step; for (i = 0; i < VERT_ATTRIB_MAX; i++) - array->VertexAttrib[i].BufferObj->RefCount += step; + array->ArrayObj->VertexAttrib[i].BufferObj->RefCount += step; array->ArrayBufferObj->RefCount += step; array->ElementArrayBufferObj->RefCount += step; @@ -1226,8 +1280,16 @@ _mesa_PushClientAttrib(GLbitfield mask) } if (mask & GL_CLIENT_VERTEX_ARRAY_BIT) { struct gl_array_attrib *attr; + struct gl_array_object *obj; + attr = MALLOC_STRUCT( gl_array_attrib ); + obj = MALLOC_STRUCT( gl_array_object ); + MEMCPY( attr, &ctx->Array, sizeof(struct gl_array_attrib) ); + MEMCPY( obj, ctx->Array.ArrayObj, sizeof(struct gl_array_object) ); + + attr->ArrayObj = obj; + newnode = new_attrib_node( GL_CLIENT_VERTEX_ARRAY_BIT ); newnode->data = attr; newnode->next = head; @@ -1285,13 +1347,31 @@ _mesa_PopClientAttrib(void) sizeof(struct gl_pixelstore_attrib) ); ctx->NewState |= _NEW_PACKUNPACK; break; - case GL_CLIENT_VERTEX_ARRAY_BIT: + case GL_CLIENT_VERTEX_ARRAY_BIT: { + struct gl_array_attrib * data = + (struct gl_array_attrib *) attr->data; + adjust_buffer_object_ref_counts(&ctx->Array, -1); - MEMCPY( &ctx->Array, attr->data, - sizeof(struct gl_array_attrib) ); - /* decrement reference counts on buffer objects */ + + ctx->Array.ActiveTexture = data->ActiveTexture; + ctx->Array.LockFirst = data->LockFirst; + ctx->Array.LockCount = data->LockCount; + + _mesa_BindVertexArrayAPPLE( data->ArrayObj->Name ); + + MEMCPY( ctx->Array.ArrayObj, data->ArrayObj, + sizeof( struct gl_array_object ) ); + + FREE( data->ArrayObj ); + + /* FIXME: Should some bits in ctx->Array->NewState also be set + * FIXME: here? It seems like it should be set to inclusive-or + * FIXME: of the old ArrayObj->_Enabled and the new _Enabled. + */ + ctx->NewState |= _NEW_ARRAY; break; + } default: _mesa_problem( ctx, "Bad attrib flag in PopClientAttrib"); break; diff --git a/src/kits/opengl/mesa/main/bitset.h b/src/kits/opengl/mesa/main/bitset.h new file mode 100644 index 0000000000..8bd4526cb6 --- /dev/null +++ b/src/kits/opengl/mesa/main/bitset.h @@ -0,0 +1,122 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file bitset.h + * \brief Bitset of arbitrary size definitions. + * \author Michal Krol + */ + +/**************************************************************************** + * generic bitset implementation + */ + +#define BITSET_WORD GLuint +#define BITSET_WORDBITS (sizeof (BITSET_WORD) * 8) + +/* bitset declarations + */ +#define BITSET_DECLARE(name, size) \ + BITSET_WORD name[((size) + BITSET_WORDBITS - 1) / BITSET_WORDBITS] + +/* bitset operations + */ +#define BITSET_COPY(x, y) _mesa_memcpy( (x), (y), sizeof (x) ) +#define BITSET_EQUAL(x, y) (_mesa_memcmp( (x), (y), sizeof (x) ) == 0) +#define BITSET_ZERO(x) _mesa_memset( (x), 0, sizeof (x) ) +#define BITSET_ONES(x) _mesa_memset( (x), 0xff, sizeof (x) ) + +#define BITSET_BITWORD(b) ((b) / BITSET_WORDBITS) +#define BITSET_BIT(b) (1 << ((b) % BITSET_WORDBITS)) + +/* single bit operations + */ +#define BITSET_TEST(x, b) ((x)[BITSET_BITWORD(b)] & BITSET_BIT(b)) +#define BITSET_SET(x, b) ((x)[BITSET_BITWORD(b)] |= BITSET_BIT(b)) +#define BITSET_CLEAR(x, b) ((x)[BITSET_BITWORD(b)] &= ~BITSET_BIT(b)) + +#define BITSET_MASK(b) ((b) == BITSET_WORDBITS ? ~0 : BITSET_BIT(b) - 1) +#define BITSET_RANGE(b, e) (BITSET_MASK((e) + 1) & ~BITSET_MASK(b)) + +/* bit range operations + */ +#define BITSET_TEST_RANGE(x, b, e) \ + (BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \ + ((x)[BITSET_BITWORD(b)] & BITSET_RANGE(b, e)) : \ + (assert (!"BITSET_TEST_RANGE: bit range crosses word boundary"), 0)) +#define BITSET_SET_RANGE(x, b, e) \ + (BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \ + ((x)[BITSET_BITWORD(b)] |= BITSET_RANGE(b, e)) : \ + (assert (!"BITSET_SET_RANGE: bit range crosses word boundary"), 0)) +#define BITSET_CLEAR_RANGE(x, b, e) \ + (BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \ + ((x)[BITSET_BITWORD(b)] &= ~BITSET_RANGE(b, e)) : \ + (assert (!"BITSET_CLEAR_RANGE: bit range crosses word boundary"), 0)) + +/**************************************************************************** + * 64-bit bitset implementation + */ + +#define BITSET64_WORD GLuint +#define BITSET64_WORDBITS (sizeof (BITSET64_WORD) * 8) + +/* bitset declarations + */ +#define BITSET64_DECLARE(name, size) \ + GLuint name[2] + +/* bitset operations + */ +#define BITSET64_COPY(x, y) do { (x)[0] = (y)[0]; (x)[1] = (y)[1]; } while (0) +#define BITSET64_EQUAL(x, y) ( (x)[0] == (y)[0] && (x)[1] == (y)[1] ) +#define BITSET64_ZERO(x) do { (x)[0] = 0; (x)[1] = 0; } while (0) +#define BITSET64_ONES(x) do { (x)[0] = 0xFF; (x)[1] = 0xFF; } while (0) + +#define BITSET64_BITWORD(b) ((b) / BITSET64_WORDBITS) +#define BITSET64_BIT(b) (1 << ((b) % BITSET64_WORDBITS)) + +/* single bit operations + */ +#define BITSET64_TEST(x, b) ((x)[BITSET64_BITWORD(b)] & BITSET64_BIT(b)) +#define BITSET64_SET(x, b) ((x)[BITSET64_BITWORD(b)] |= BITSET64_BIT(b)) +#define BITSET64_CLEAR(x, b) ((x)[BITSET64_BITWORD(b)] &= ~BITSET64_BIT(b)) + +#define BITSET64_MASK(b) ((b) == BITSET64_WORDBITS ? ~0 : BITSET64_BIT(b) - 1) +#define BITSET64_RANGE(b, e) (BITSET64_MASK((e) + 1) & ~BITSET64_MASK(b)) + +/* bit range operations + */ +#define BITSET64_TEST_RANGE(x, b, e) \ + (BITSET64_BITWORD(b) == BITSET64_BITWORD(e) ? \ + ((x)[BITSET64_BITWORD(b)] & BITSET64_RANGE(b, e)) : \ + (assert (!"BITSET64_TEST_RANGE: bit range crosses word boundary"), 0)) +#define BITSET64_SET_RANGE(x, b, e) \ + (BITSET64_BITWORD(b) == BITSET64_BITWORD(e) ? \ + ((x)[BITSET64_BITWORD(b)] |= BITSET64_RANGE(b, e)) : \ + (assert (!"BITSET64_SET_RANGE: bit range crosses word boundary"), 0)) +#define BITSET64_CLEAR_RANGE(x, b, e) \ + (BITSET64_BITWORD(b) == BITSET64_BITWORD(e) ? \ + ((x)[BITSET64_BITWORD(b)] &= ~BITSET64_RANGE(b, e)) : \ + (assert (!"BITSET64_CLEAR_RANGE: bit range crosses word boundary"), 0)) + diff --git a/src/kits/opengl/mesa/main/blend.c b/src/kits/opengl/mesa/main/blend.c index 8fadef61b4..81bd4c2f32 100644 --- a/src/kits/opengl/mesa/main/blend.c +++ b/src/kits/opengl/mesa/main/blend.c @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -275,13 +275,6 @@ _mesa_BlendEquation( GLenum mode ) ctx->Color.BlendEquationRGB = mode; ctx->Color.BlendEquationA = mode; - /* This is needed to support 1.1's RGB logic ops AND - * 1.0's blending logicops. - */ - ctx->Color._LogicOpEnabled = (ctx->Color.ColorLogicOpEnabled || - (ctx->Color.BlendEnabled && - mode == GL_LOGIC_OP)); - if (ctx->Driver.BlendEquationSeparate) (*ctx->Driver.BlendEquationSeparate)( ctx, mode, mode ); } @@ -323,12 +316,6 @@ _mesa_BlendEquationSeparateEXT( GLenum modeRGB, GLenum modeA ) ctx->Color.BlendEquationRGB = modeRGB; ctx->Color.BlendEquationA = modeA; - /* This is needed to support 1.1's RGB logic ops AND - * 1.0's blending logicops. This test is simplified over glBlendEquation - * because modeRGB cannot be GL_LOGIC_OP. - */ - ctx->Color._LogicOpEnabled = (ctx->Color.ColorLogicOpEnabled); - if (ctx->Driver.BlendEquationSeparate) (*ctx->Driver.BlendEquationSeparate)( ctx, modeRGB, modeA ); } @@ -529,6 +516,37 @@ _mesa_ColorMask( GLboolean red, GLboolean green, } +extern void GLAPIENTRY +_mesa_ClampColorARB(GLenum target, GLenum clamp) +{ + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (clamp != GL_TRUE && clamp != GL_FALSE && clamp != GL_FIXED_ONLY_ARB) { + _mesa_error(ctx, GL_INVALID_ENUM, "glClampColorARB(clamp)"); + return; + } + + switch (target) { + case GL_CLAMP_VERTEX_COLOR_ARB: + ctx->Light.ClampVertexColor = clamp; + break; + case GL_CLAMP_FRAGMENT_COLOR_ARB: + ctx->Color.ClampFragmentColor = clamp; + break; + case GL_CLAMP_READ_COLOR_ARB: + ctx->Color.ClampReadColor = clamp; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glClampColorARB(target)"); + return; + } +} + + + + /**********************************************************************/ /** \name Initialization */ /*@{*/ @@ -570,12 +588,13 @@ void _mesa_init_color( GLcontext * ctx ) if (ctx->Visual.doubleBufferMode) { ctx->Color.DrawBuffer[0] = GL_BACK; - ctx->Color._DrawDestMask[0] = DD_BACK_LEFT_BIT; } else { ctx->Color.DrawBuffer[0] = GL_FRONT; - ctx->Color._DrawDestMask[0] = DD_FRONT_LEFT_BIT; } + + ctx->Color.ClampFragmentColor = GL_FIXED_ONLY_ARB; + ctx->Color.ClampReadColor = GL_FIXED_ONLY_ARB; } /*@}*/ diff --git a/src/kits/opengl/mesa/main/blend.h b/src/kits/opengl/mesa/main/blend.h index d6c03d903f..5c0f2783a7 100644 --- a/src/kits/opengl/mesa/main/blend.h +++ b/src/kits/opengl/mesa/main/blend.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 6.5.2 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -72,6 +72,11 @@ extern void GLAPIENTRY _mesa_ColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); + +extern void GLAPIENTRY +_mesa_ClampColorARB(GLenum target, GLenum clamp); + + extern void _mesa_init_color( GLcontext * ctx ); diff --git a/src/kits/opengl/mesa/main/bufferobj.c b/src/kits/opengl/mesa/main/bufferobj.c index ca428a7fa0..3f9f798546 100644 --- a/src/kits/opengl/mesa/main/bufferobj.c +++ b/src/kits/opengl/mesa/main/bufferobj.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -44,13 +44,11 @@ * \param ctx GL context * \param target Buffer object target to be retrieved. Currently this must * be either \c GL_ARRAY_BUFFER or \c GL_ELEMENT_ARRAY_BUFFER. - * \param str Name of caller for logging errors. * \return A pointer to the buffer object bound to \c target in the - * specified context or \c NULL if \c target is invalid or no - * buffer object is bound. + * specified context or \c NULL if \c target is invalid. */ static INLINE struct gl_buffer_object * -buffer_object_get_target( GLcontext *ctx, GLenum target, const char * str ) +get_buffer(GLcontext *ctx, GLenum target) { struct gl_buffer_object * bufObj = NULL; @@ -68,12 +66,12 @@ buffer_object_get_target( GLcontext *ctx, GLenum target, const char * str ) bufObj = ctx->Unpack.BufferObj; break; default: - _mesa_error(ctx, GL_INVALID_ENUM, "gl%s(target)", str); + /* error must be recorded by caller */ return NULL; } - if (bufObj->Name == 0) - return NULL; + /* bufObj should point to NullBufferObj or a user-created buffer object */ + ASSERT(bufObj); return bufObj; } @@ -87,7 +85,7 @@ buffer_object_get_target( GLcontext *ctx, GLenum target, const char * str ) * \param target Buffer object target on which to operate. * \param offset Offset of the first byte of the subdata range. * \param size Size, in bytes, of the subdata range. - * \param str Name of caller for logging errors. + * \param caller Name of calling function for recording errors. * \return A pointer to the buffer object bound to \c target in the * specified context or \c NULL if any of the parameter or state * conditions for \c glBufferSubDataARB or \c glGetBufferSubDataARB @@ -98,34 +96,37 @@ buffer_object_get_target( GLcontext *ctx, GLenum target, const char * str ) static struct gl_buffer_object * buffer_object_subdata_range_good( GLcontext * ctx, GLenum target, GLintptrARB offset, GLsizeiptrARB size, - const char * str ) + const char *caller ) { struct gl_buffer_object *bufObj; if (size < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "%s(size < 0)", str); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(size < 0)", caller); return NULL; } if (offset < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "%s(offset < 0)", str); + _mesa_error(ctx, GL_INVALID_VALUE, "%s(offset < 0)", caller); return NULL; } - bufObj = buffer_object_get_target( ctx, target, str ); - if (!bufObj || bufObj->Name == 0) { + bufObj = get_buffer(ctx, target); + if (!bufObj) { + _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", caller); + return NULL; + } + if (bufObj->Name == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, "%s", caller); return NULL; } - if ((GLuint) (offset + size) > bufObj->Size) { _mesa_error(ctx, GL_INVALID_VALUE, - "%s(size + offset > buffer size)", str); + "%s(size + offset > buffer size)", caller); return NULL; } - if (bufObj->Pointer) { /* Buffer is currently mapped */ - _mesa_error(ctx, GL_INVALID_OPERATION, "%s", str); + _mesa_error(ctx, GL_INVALID_OPERATION, "%s", caller); return NULL; } @@ -169,6 +170,22 @@ _mesa_delete_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj ) } +void +_mesa_unbind_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj ) +{ + if (bufObj != ctx->Array.NullBufferObj) { + bufObj->RefCount--; + if (bufObj->RefCount <= 0) { + ASSERT(ctx->Array.ArrayBufferObj != bufObj); + ASSERT(ctx->Array.ElementArrayBufferObj != bufObj); + ASSERT(ctx->Array.ArrayObj->Vertex.BufferObj != bufObj); + ASSERT(ctx->Driver.DeleteBuffer); + ctx->Driver.DeleteBuffer(ctx, bufObj); + } + } +} + + /** * Initialize a buffer object to default values. */ @@ -279,7 +296,10 @@ _mesa_buffer_subdata( GLcontext *ctx, GLenum target, GLintptrARB offset, { (void) ctx; (void) target; - if (bufObj->Data && ((GLuint) (size + offset) <= bufObj->Size)) { + /* this should have been caught in _mesa_BufferSubData() */ + ASSERT((GLuint) (size + offset) <= bufObj->Size); + + if (bufObj->Data) { _mesa_memcpy( (GLubyte *) bufObj->Data + offset, data, size ); } } @@ -310,7 +330,7 @@ _mesa_buffer_get_subdata( GLcontext *ctx, GLenum target, GLintptrARB offset, { (void) ctx; (void) target; - if (bufObj->Data && ((GLuint) (size + offset) <= bufObj->Size)) { + if (bufObj->Data && ((GLsizeiptrARB) (size + offset) <= bufObj->Size)) { _mesa_memcpy( data, (GLubyte *) bufObj->Data + offset, size ); } } @@ -319,9 +339,9 @@ _mesa_buffer_get_subdata( GLcontext *ctx, GLenum target, GLintptrARB offset, /** * Fallback function called via ctx->Driver.MapBuffer(). * Hardware drivers that really implement buffer objects should never use - * function. + * this function. * - * The input parameters will have been already tested for errors. + * The function parameters will have been already tested for errors. * * \param ctx GL context. * \param target Buffer object target on which to operate. @@ -378,8 +398,6 @@ _mesa_buffer_unmap( GLcontext *ctx, GLenum target, void _mesa_init_buffer_objects( GLcontext *ctx ) { - GLuint i; - /* Allocate the default buffer object and set refcount so high that * it never gets deleted. */ @@ -389,21 +407,6 @@ _mesa_init_buffer_objects( GLcontext *ctx ) ctx->Array.ArrayBufferObj = ctx->Array.NullBufferObj; ctx->Array.ElementArrayBufferObj = ctx->Array.NullBufferObj; - - /* Vertex array buffers */ - ctx->Array.Vertex.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.Normal.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.Color.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.SecondaryColor.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.FogCoord.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.Index.BufferObj = ctx->Array.NullBufferObj; - for (i = 0; i < MAX_TEXTURE_UNITS; i++) { - ctx->Array.TexCoord[i].BufferObj = ctx->Array.NullBufferObj; - } - ctx->Array.EdgeFlag.BufferObj = ctx->Array.NullBufferObj; - for (i = 0; i < VERT_ATTRIB_MAX; i++) { - ctx->Array.VertexAttrib[i].BufferObj = ctx->Array.NullBufferObj; - } } @@ -433,6 +436,7 @@ _mesa_validate_pbo_access(GLuint dimensions, GLenum format, GLenum type, const GLvoid *ptr) { GLvoid *start, *end; + const GLubyte *sizeAddr; /* buffer size, cast to a pointer */ ASSERT(pack->BufferObj->Name != 0); @@ -449,11 +453,13 @@ _mesa_validate_pbo_access(GLuint dimensions, format, type, depth-1, height-1, width); - if ((const GLubyte *) start > (const GLubyte *) pack->BufferObj->Size) { + sizeAddr = ((const GLubyte *) 0) + pack->BufferObj->Size; + + if ((const GLubyte *) start > sizeAddr) { /* This will catch negative values / wrap-around */ return GL_FALSE; } - if ((const GLubyte *) end > (const GLubyte *) pack->BufferObj->Size) { + if ((const GLubyte *) end > sizeAddr) { /* Image read goes beyond end of buffer */ return GL_FALSE; } @@ -463,6 +469,20 @@ _mesa_validate_pbo_access(GLuint dimensions, } +/** + * Return the gl_buffer_object for the given ID. + * Always return NULL for ID 0. + */ +struct gl_buffer_object * +_mesa_lookup_bufferobj(GLcontext *ctx, GLuint buffer) +{ + if (buffer == 0) + return NULL; + else + return (struct gl_buffer_object *) + _mesa_HashLookup(ctx->Shared->BufferObjects, buffer); +} + /**********************************************************************/ @@ -474,10 +494,30 @@ _mesa_BindBufferARB(GLenum target, GLuint buffer) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *oldBufObj; - struct gl_buffer_object *newBufObj = 0; + struct gl_buffer_object *newBufObj = NULL; + struct gl_buffer_object **bindTarget = NULL; ASSERT_OUTSIDE_BEGIN_END(ctx); - oldBufObj = buffer_object_get_target( ctx, target, "BindBufferARB" ); + switch (target) { + case GL_ARRAY_BUFFER_ARB: + bindTarget = &ctx->Array.ArrayBufferObj; + break; + case GL_ELEMENT_ARRAY_BUFFER_ARB: + bindTarget = &ctx->Array.ElementArrayBufferObj; + break; + case GL_PIXEL_PACK_BUFFER_EXT: + bindTarget = &ctx->Pack.BufferObj; + break; + case GL_PIXEL_UNPACK_BUFFER_EXT: + bindTarget = &ctx->Unpack.BufferObj; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glBindBufferARB(target)"); + return; + } + + /* Get pointer to old buffer object (to be unbound) */ + oldBufObj = get_buffer(ctx, target); if (oldBufObj && oldBufObj->Name == buffer) return; /* rebinding the same buffer object- no change */ @@ -492,50 +532,35 @@ _mesa_BindBufferARB(GLenum target, GLuint buffer) } else { /* non-default buffer object */ - const struct _mesa_HashTable *hash = ctx->Shared->BufferObjects; - newBufObj = (struct gl_buffer_object *) _mesa_HashLookup(hash, buffer); + newBufObj = _mesa_lookup_bufferobj(ctx, buffer); if (!newBufObj) { /* if this is a new buffer object id, allocate a buffer object now */ - newBufObj = (*ctx->Driver.NewBufferObject)(ctx, buffer, target); + ASSERT(ctx->Driver.NewBufferObject); + newBufObj = ctx->Driver.NewBufferObject(ctx, buffer, target); if (!newBufObj) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindBufferARB"); return; } _mesa_save_buffer_object(ctx, newBufObj); } - newBufObj->RefCount++; } - switch (target) { - case GL_ARRAY_BUFFER_ARB: - ctx->Array.ArrayBufferObj = newBufObj; - break; - case GL_ELEMENT_ARRAY_BUFFER_ARB: - ctx->Array.ElementArrayBufferObj = newBufObj; - break; - case GL_PIXEL_PACK_BUFFER_EXT: - ctx->Pack.BufferObj = newBufObj; - break; - case GL_PIXEL_UNPACK_BUFFER_EXT: - ctx->Unpack.BufferObj = newBufObj; - break; - default: - _mesa_problem(ctx, "Bad target in _mesa_BindBufferARB"); - return; - } + /* Make new binding */ + *bindTarget = newBufObj; + newBufObj->RefCount++; /* Pass BindBuffer call to device driver */ if (ctx->Driver.BindBuffer && newBufObj) - (*ctx->Driver.BindBuffer)( ctx, target, newBufObj ); + ctx->Driver.BindBuffer( ctx, target, newBufObj ); + /* decr ref count on old buffer obj, delete if needed */ if (oldBufObj) { oldBufObj->RefCount--; assert(oldBufObj->RefCount >= 0); if (oldBufObj->RefCount == 0) { assert(oldBufObj->Name != 0); - _mesa_remove_buffer_object(ctx, oldBufObj); ASSERT(ctx->Driver.DeleteBuffer); - (*ctx->Driver.DeleteBuffer)( ctx, oldBufObj ); + ctx->Driver.DeleteBuffer( ctx, oldBufObj ); } } } @@ -562,95 +587,80 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids) _glthread_LOCK_MUTEX(ctx->Shared->Mutex); for (i = 0; i < n; i++) { - if (ids[i] != 0) { - struct gl_buffer_object *bufObj = (struct gl_buffer_object *) - _mesa_HashLookup(ctx->Shared->BufferObjects, ids[i]); - if (bufObj) { - /* unbind any vertex pointers bound to this buffer */ - GLuint j; + struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, ids[i]); + if (bufObj) { + /* unbind any vertex pointers bound to this buffer */ + GLuint j; - ASSERT(bufObj->Name == ids[i]); + ASSERT(bufObj->Name == ids[i]); - if (ctx->Array.Vertex.BufferObj == bufObj) { + if (ctx->Array.ArrayObj->Vertex.BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->Vertex.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + if (ctx->Array.ArrayObj->Normal.BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->Normal.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + if (ctx->Array.ArrayObj->Color.BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->Color.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + if (ctx->Array.ArrayObj->SecondaryColor.BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->SecondaryColor.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + if (ctx->Array.ArrayObj->FogCoord.BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->FogCoord.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + if (ctx->Array.ArrayObj->Index.BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->Index.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + if (ctx->Array.ArrayObj->EdgeFlag.BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->EdgeFlag.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + for (j = 0; j < MAX_TEXTURE_UNITS; j++) { + if (ctx->Array.ArrayObj->TexCoord[j].BufferObj == bufObj) { bufObj->RefCount--; - ctx->Array.Vertex.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.ArrayObj->TexCoord[j].BufferObj = ctx->Array.NullBufferObj; ctx->Array.NullBufferObj->RefCount++; } - if (ctx->Array.Normal.BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.Normal.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - if (ctx->Array.Color.BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.Color.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - if (ctx->Array.SecondaryColor.BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.SecondaryColor.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - if (ctx->Array.FogCoord.BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.FogCoord.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - if (ctx->Array.Index.BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.Index.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - if (ctx->Array.EdgeFlag.BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.EdgeFlag.BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - for (j = 0; j < MAX_TEXTURE_UNITS; j++) { - if (ctx->Array.TexCoord[j].BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.TexCoord[j].BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - } - for (j = 0; j < VERT_ATTRIB_MAX; j++) { - if (ctx->Array.VertexAttrib[j].BufferObj == bufObj) { - bufObj->RefCount--; - ctx->Array.VertexAttrib[j].BufferObj = ctx->Array.NullBufferObj; - ctx->Array.NullBufferObj->RefCount++; - } - } - - if (ctx->Array.ArrayBufferObj == bufObj) { - _mesa_BindBufferARB( GL_ARRAY_BUFFER_ARB, 0 ); - } - if (ctx->Array.ElementArrayBufferObj == bufObj) { - _mesa_BindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 ); - } - - if (ctx->Pack.BufferObj == bufObj) { - _mesa_BindBufferARB( GL_PIXEL_PACK_BUFFER_EXT, 0 ); - } - if (ctx->Unpack.BufferObj == bufObj) { - _mesa_BindBufferARB( GL_PIXEL_UNPACK_BUFFER_EXT, 0 ); - } - - /* decrement refcount and delete if <= 0 */ - if (!bufObj->DeletePending) { - bufObj->DeletePending = GL_TRUE; - bufObj->RefCount--; - } - - if (bufObj->RefCount <= 0) { - /* buffer should not be bound anymore! */ - ASSERT(ctx->Array.ArrayBufferObj != bufObj); - ASSERT(ctx->Array.ElementArrayBufferObj != bufObj); - ASSERT(ctx->Array.Vertex.BufferObj != bufObj); - _mesa_remove_buffer_object(ctx, bufObj); - ASSERT(ctx->Driver.DeleteBuffer); - (*ctx->Driver.DeleteBuffer)(ctx, bufObj); - } } + for (j = 0; j < VERT_ATTRIB_MAX; j++) { + if (ctx->Array.ArrayObj->VertexAttrib[j].BufferObj == bufObj) { + bufObj->RefCount--; + ctx->Array.ArrayObj->VertexAttrib[j].BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; + } + } + + if (ctx->Array.ArrayBufferObj == bufObj) { + _mesa_BindBufferARB( GL_ARRAY_BUFFER_ARB, 0 ); + } + if (ctx->Array.ElementArrayBufferObj == bufObj) { + _mesa_BindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 ); + } + + if (ctx->Pack.BufferObj == bufObj) { + _mesa_BindBufferARB( GL_PIXEL_PACK_BUFFER_EXT, 0 ); + } + if (ctx->Unpack.BufferObj == bufObj) { + _mesa_BindBufferARB( GL_PIXEL_UNPACK_BUFFER_EXT, 0 ); + } + + /* The ID is immediately freed for re-use */ + _mesa_remove_buffer_object(ctx, bufObj); + _mesa_unbind_buffer_object(ctx, bufObj); } } @@ -693,8 +703,9 @@ _mesa_GenBuffersARB(GLsizei n, GLuint *buffer) struct gl_buffer_object *bufObj; GLuint name = first + i; GLenum target = 0; - bufObj = (*ctx->Driver.NewBufferObject)( ctx, name, target ); + bufObj = ctx->Driver.NewBufferObject( ctx, name, target ); if (!bufObj) { + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenBuffersARB"); return; } @@ -716,18 +727,15 @@ _mesa_GenBuffersARB(GLsizei n, GLuint *buffer) GLboolean GLAPIENTRY _mesa_IsBufferARB(GLuint id) { - struct gl_buffer_object * bufObj; + struct gl_buffer_object *bufObj; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); - if (id == 0) - return GL_FALSE; - _glthread_LOCK_MUTEX(ctx->Shared->Mutex); - bufObj = (struct gl_buffer_object *) _mesa_HashLookup(ctx->Shared->BufferObjects, id); + bufObj = _mesa_lookup_bufferobj(ctx, id); _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); - return bufObj && !bufObj->DeletePending; + return bufObj ? GL_TRUE : GL_FALSE; } @@ -761,8 +769,12 @@ _mesa_BufferDataARB(GLenum target, GLsizeiptrARB size, return; } - bufObj = buffer_object_get_target( ctx, target, "BufferDataARB" ); - if (!bufObj || bufObj->Name ==0) { + bufObj = get_buffer(ctx, target); + if (!bufObj) { + _mesa_error(ctx, GL_INVALID_ENUM, "glBufferDataARB(target)" ); + return; + } + if (bufObj->Name == 0) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferDataARB" ); return; } @@ -775,7 +787,7 @@ _mesa_BufferDataARB(GLenum target, GLsizeiptrARB size, ASSERT(ctx->Driver.BufferData); /* Give the buffer object to the driver! may be null! */ - (*ctx->Driver.BufferData)( ctx, target, size, data, usage, bufObj ); + ctx->Driver.BufferData( ctx, target, size, data, usage, bufObj ); } @@ -788,14 +800,14 @@ _mesa_BufferSubDataARB(GLenum target, GLintptrARB offset, ASSERT_OUTSIDE_BEGIN_END(ctx); bufObj = buffer_object_subdata_range_good( ctx, target, offset, size, - "BufferSubDataARB" ); + "glBufferSubDataARB" ); if (!bufObj) { /* error already recorded */ return; } ASSERT(ctx->Driver.BufferSubData); - (*ctx->Driver.BufferSubData)( ctx, target, offset, size, data, bufObj ); + ctx->Driver.BufferSubData( ctx, target, offset, size, data, bufObj ); } @@ -808,14 +820,14 @@ _mesa_GetBufferSubDataARB(GLenum target, GLintptrARB offset, ASSERT_OUTSIDE_BEGIN_END(ctx); bufObj = buffer_object_subdata_range_good( ctx, target, offset, size, - "GetBufferSubDataARB" ); + "glGetBufferSubDataARB" ); if (!bufObj) { /* error already recorded */ return; } ASSERT(ctx->Driver.GetBufferSubData); - (*ctx->Driver.GetBufferSubData)( ctx, target, offset, size, data, bufObj ); + ctx->Driver.GetBufferSubData( ctx, target, offset, size, data, bufObj ); } @@ -837,19 +849,22 @@ _mesa_MapBufferARB(GLenum target, GLenum access) return NULL; } - bufObj = buffer_object_get_target( ctx, target, "MapBufferARB" ); - if (!bufObj || bufObj->Name == 0) { + bufObj = get_buffer(ctx, target); + if (!bufObj) { + _mesa_error(ctx, GL_INVALID_ENUM, "glMapBufferARB(target)" ); + return NULL; + } + if (bufObj->Name == 0) { _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferARB" ); return NULL; } - if (bufObj->Pointer) { _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferARB(already mapped)"); return NULL; } ASSERT(ctx->Driver.MapBuffer); - bufObj->Pointer = (*ctx->Driver.MapBuffer)( ctx, target, access, bufObj ); + bufObj->Pointer = ctx->Driver.MapBuffer( ctx, target, access, bufObj ); if (!bufObj->Pointer) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMapBufferARB(access)"); } @@ -868,19 +883,22 @@ _mesa_UnmapBufferARB(GLenum target) GLboolean status = GL_TRUE; ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); - bufObj = buffer_object_get_target( ctx, target, "UnmapBufferARB" ); - if (!bufObj || bufObj->Name == 0) { + bufObj = get_buffer(ctx, target); + if (!bufObj) { + _mesa_error(ctx, GL_INVALID_ENUM, "glUnmapBufferARB(target)" ); + return GL_FALSE; + } + if (bufObj->Name == 0) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB" ); return GL_FALSE; } - if (!bufObj->Pointer) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUnmapBufferARB"); return GL_FALSE; } if (ctx->Driver.UnmapBuffer) { - status = (*ctx->Driver.UnmapBuffer)( ctx, target, bufObj ); + status = ctx->Driver.UnmapBuffer( ctx, target, bufObj ); } bufObj->Access = GL_READ_WRITE_ARB; /* initial value, OK? */ @@ -897,15 +915,19 @@ _mesa_GetBufferParameterivARB(GLenum target, GLenum pname, GLint *params) struct gl_buffer_object *bufObj; ASSERT_OUTSIDE_BEGIN_END(ctx); - bufObj = buffer_object_get_target( ctx, target, "GetBufferParameterivARB" ); - if (!bufObj || bufObj->Name == 0) { + bufObj = get_buffer(ctx, target); + if (!bufObj) { + _mesa_error(ctx, GL_INVALID_ENUM, "GetBufferParameterivARB(target)" ); + return; + } + if (bufObj->Name == 0) { _mesa_error(ctx, GL_INVALID_OPERATION, "GetBufferParameterivARB" ); return; } switch (pname) { case GL_BUFFER_SIZE_ARB: - *params = bufObj->Size; + *params = (GLint) bufObj->Size; break; case GL_BUFFER_USAGE_ARB: *params = bufObj->Usage; @@ -935,8 +957,12 @@ _mesa_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params) return; } - bufObj = buffer_object_get_target( ctx, target, "GetBufferPointervARB" ); - if (!bufObj || bufObj->Name == 0) { + bufObj = get_buffer(ctx, target); + if (!bufObj) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetBufferPointervARB(target)" ); + return; + } + if (bufObj->Name == 0) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetBufferPointervARB" ); return; } diff --git a/src/kits/opengl/mesa/main/bufferobj.h b/src/kits/opengl/mesa/main/bufferobj.h index bc1005332c..f54f9e9ff0 100644 --- a/src/kits/opengl/mesa/main/bufferobj.h +++ b/src/kits/opengl/mesa/main/bufferobj.h @@ -44,6 +44,9 @@ _mesa_new_buffer_object( GLcontext *ctx, GLuint name, GLenum target ); extern void _mesa_delete_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj ); +extern struct gl_buffer_object * +_mesa_lookup_bufferobj(GLcontext *ctx, GLuint buffer); + extern void _mesa_initialize_buffer_object( struct gl_buffer_object *obj, GLuint name, GLenum target ); @@ -83,6 +86,8 @@ _mesa_validate_pbo_access(GLuint dimensions, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *ptr); +extern void +_mesa_unbind_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj ); /* * API functions diff --git a/src/kits/opengl/mesa/main/buffers.c b/src/kits/opengl/mesa/main/buffers.c index 3415a2b9b5..0e3ed15584 100644 --- a/src/kits/opengl/mesa/main/buffers.c +++ b/src/kits/opengl/mesa/main/buffers.c @@ -1,13 +1,8 @@ -/** - * \file buffers.c - * Frame buffer management. - */ - /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -28,16 +23,23 @@ */ +/** + * \file buffers.c + * General framebuffer-related functions, like glClear, glScissor, etc. + */ + + + #include "glheader.h" -#include "imports.h" #include "buffers.h" #include "colormac.h" #include "context.h" -#include "depth.h" #include "enums.h" -#include "stencil.h" +#include "fbobject.h" #include "state.h" -#include "mtypes.h" + + +#define BAD_MASK ~0u #if _HAVE_FULL_GL @@ -132,12 +134,14 @@ _mesa_Clear( GLbitfield mask ) _mesa_update_state( ctx ); /* update _Xmin, etc */ } - if (ctx->RenderMode==GL_RENDER) { - const GLint x = ctx->DrawBuffer->_Xmin; - const GLint y = ctx->DrawBuffer->_Ymin; - const GLint height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin; - const GLint width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin; - GLbitfield ddMask; + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glClear(incomplete framebuffer)"); + return; + } + + if (ctx->RenderMode == GL_RENDER) { + GLbitfield bufferMask; /* don't clear depth buffer if depth writing disabled */ if (!ctx->Depth.Mask) @@ -145,48 +149,73 @@ _mesa_Clear( GLbitfield mask ) /* Build the bitmask to send to device driver's Clear function. * Note that the GL_COLOR_BUFFER_BIT flag will expand to 0, 1, 2 or 4 - * of the FRONT/BACK_LEFT/RIGHT_BIT flags. + * of the BUFFER_BIT_FRONT/BACK_LEFT/RIGHT flags, or one of the + * BUFFER_BIT_COLORn flags. */ - ddMask = 0; - if (mask & GL_COLOR_BUFFER_BIT) - ddMask |= ctx->Color._DrawDestMask[0]; - if ((mask & GL_DEPTH_BUFFER_BIT) && ctx->Visual.depthBits > 0) - ddMask |= GL_DEPTH_BUFFER_BIT; - if ((mask & GL_STENCIL_BUFFER_BIT) && ctx->Visual.stencilBits > 0) - ddMask |= GL_STENCIL_BUFFER_BIT; - if ((mask & GL_ACCUM_BUFFER_BIT) && ctx->Visual.accumRedBits > 0) - ddMask |= GL_ACCUM_BUFFER_BIT; + bufferMask = 0; + if (mask & GL_COLOR_BUFFER_BIT) { + bufferMask |= ctx->DrawBuffer->_ColorDrawBufferMask[0]; + } + + if ((mask & GL_DEPTH_BUFFER_BIT) + && ctx->DrawBuffer->Visual.haveDepthBuffer) { + bufferMask |= BUFFER_BIT_DEPTH; + } + + if ((mask & GL_STENCIL_BUFFER_BIT) + && ctx->DrawBuffer->Visual.haveStencilBuffer) { + bufferMask |= BUFFER_BIT_STENCIL; + } + + if ((mask & GL_ACCUM_BUFFER_BIT) + && ctx->DrawBuffer->Visual.haveAccumBuffer) { + bufferMask |= BUFFER_BIT_ACCUM; + } ASSERT(ctx->Driver.Clear); - ctx->Driver.Clear( ctx, ddMask, (GLboolean) !ctx->Scissor.Enabled, - x, y, width, height ); + ctx->Driver.Clear(ctx, bufferMask); } } /** - * Return bitmask of DD_* flags indicating which color buffers are - * available to the rendering context; + * Return bitmask of BUFFER_BIT_* flags indicating which color buffers are + * available to the rendering context. + * This depends on the framebuffer we're writing to. For window system + * framebuffers we look at the framebuffer's visual. But for user- + * create framebuffers we look at the number of supported color attachments. */ -static GLuint -supported_buffer_bitmask(const GLcontext *ctx) +static GLbitfield +supported_buffer_bitmask(const GLcontext *ctx, GLuint framebufferID) { - GLuint mask = DD_FRONT_LEFT_BIT; /* always have this */ - GLint i; + GLbitfield mask = 0x0; - if (ctx->Visual.stereoMode) { - mask |= DD_FRONT_RIGHT_BIT; - if (ctx->Visual.doubleBufferMode) { - mask |= DD_BACK_LEFT_BIT | DD_BACK_RIGHT_BIT; + if (framebufferID > 0) { + /* A user-created renderbuffer */ + GLuint i; + ASSERT(ctx->Extensions.EXT_framebuffer_object); + for (i = 0; i < ctx->Const.MaxColorAttachments; i++) { + mask |= (BUFFER_BIT_COLOR0 << i); } } - else if (ctx->Visual.doubleBufferMode) { - mask |= DD_BACK_LEFT_BIT; - } + else { + /* A window system renderbuffer */ + GLint i; + mask = BUFFER_BIT_FRONT_LEFT; /* always have this */ + if (ctx->Visual.stereoMode) { + mask |= BUFFER_BIT_FRONT_RIGHT; + if (ctx->Visual.doubleBufferMode) { + mask |= BUFFER_BIT_BACK_LEFT | BUFFER_BIT_BACK_RIGHT; + } + } + else if (ctx->Visual.doubleBufferMode) { + mask |= BUFFER_BIT_BACK_LEFT; + } - for (i = 0; i < ctx->Visual.numAuxBuffers; i++) { - mask |= (DD_AUX0_BIT << i); + for (i = 0; i < ctx->Visual.numAuxBuffers; i++) { + mask |= (BUFFER_BIT_AUX0 << i); + } } return mask; @@ -195,183 +224,288 @@ supported_buffer_bitmask(const GLcontext *ctx) /** * Helper routine used by glDrawBuffer and glDrawBuffersARB. - * Given a GLenum naming (a) color buffer(s), return the corresponding - * bitmask of DD_* flags. + * Given a GLenum naming one or more color buffers (such as + * GL_FRONT_AND_BACK), return the corresponding bitmask of BUFFER_BIT_* flags. */ -static GLuint +static GLbitfield draw_buffer_enum_to_bitmask(GLenum buffer) { switch (buffer) { - case GL_FRONT: - return DD_FRONT_LEFT_BIT | DD_FRONT_RIGHT_BIT; - case GL_BACK: - return DD_BACK_LEFT_BIT | DD_BACK_RIGHT_BIT; case GL_NONE: return 0; + case GL_FRONT: + return BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_FRONT_RIGHT; + case GL_BACK: + return BUFFER_BIT_BACK_LEFT | BUFFER_BIT_BACK_RIGHT; case GL_RIGHT: - return DD_FRONT_RIGHT_BIT | DD_BACK_RIGHT_BIT; + return BUFFER_BIT_FRONT_RIGHT | BUFFER_BIT_BACK_RIGHT; case GL_FRONT_RIGHT: - return DD_FRONT_RIGHT_BIT; + return BUFFER_BIT_FRONT_RIGHT; case GL_BACK_RIGHT: - return DD_BACK_RIGHT_BIT; + return BUFFER_BIT_BACK_RIGHT; case GL_BACK_LEFT: - return DD_BACK_LEFT_BIT; + return BUFFER_BIT_BACK_LEFT; case GL_FRONT_AND_BACK: - return DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT - | DD_FRONT_RIGHT_BIT | DD_BACK_RIGHT_BIT; + return BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT + | BUFFER_BIT_FRONT_RIGHT | BUFFER_BIT_BACK_RIGHT; case GL_LEFT: - return DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT; + return BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT; case GL_FRONT_LEFT: - return DD_FRONT_LEFT_BIT; + return BUFFER_BIT_FRONT_LEFT; case GL_AUX0: - return DD_AUX0_BIT; + return BUFFER_BIT_AUX0; case GL_AUX1: - return DD_AUX1_BIT; + return BUFFER_BIT_AUX1; case GL_AUX2: - return DD_AUX2_BIT; + return BUFFER_BIT_AUX2; case GL_AUX3: - return DD_AUX3_BIT; + return BUFFER_BIT_AUX3; + case GL_COLOR_ATTACHMENT0_EXT: + return BUFFER_BIT_COLOR0; + case GL_COLOR_ATTACHMENT1_EXT: + return BUFFER_BIT_COLOR1; + case GL_COLOR_ATTACHMENT2_EXT: + return BUFFER_BIT_COLOR2; + case GL_COLOR_ATTACHMENT3_EXT: + return BUFFER_BIT_COLOR3; default: /* error */ - return ~0; + return BAD_MASK; } } /** * Helper routine used by glReadBuffer. - * Given a GLenum naming (a) color buffer(s), return the corresponding - * bitmask of DD_* flags. + * Given a GLenum naming a color buffer, return the index of the corresponding + * renderbuffer (a BUFFER_* value). + * return -1 for an invalid buffer. */ -static GLuint -read_buffer_enum_to_bitmask(GLenum buffer) +static GLint +read_buffer_enum_to_index(GLenum buffer) { switch (buffer) { case GL_FRONT: - return DD_FRONT_LEFT_BIT; + return BUFFER_FRONT_LEFT; case GL_BACK: - return DD_BACK_LEFT_BIT; + return BUFFER_BACK_LEFT; case GL_RIGHT: - return DD_FRONT_RIGHT_BIT; + return BUFFER_FRONT_RIGHT; case GL_FRONT_RIGHT: - return DD_FRONT_RIGHT_BIT; + return BUFFER_FRONT_RIGHT; case GL_BACK_RIGHT: - return DD_BACK_RIGHT_BIT; + return BUFFER_BACK_RIGHT; case GL_BACK_LEFT: - return DD_BACK_LEFT_BIT; + return BUFFER_BACK_LEFT; case GL_LEFT: - return DD_FRONT_LEFT_BIT; + return BUFFER_FRONT_LEFT; case GL_FRONT_LEFT: - return DD_FRONT_LEFT_BIT; + return BUFFER_FRONT_LEFT; case GL_AUX0: - return DD_AUX0_BIT; + return BUFFER_AUX0; case GL_AUX1: - return DD_AUX1_BIT; + return BUFFER_AUX1; case GL_AUX2: - return DD_AUX2_BIT; + return BUFFER_AUX2; case GL_AUX3: - return DD_AUX3_BIT; + return BUFFER_AUX3; + case GL_COLOR_ATTACHMENT0_EXT: + return BUFFER_COLOR0; + case GL_COLOR_ATTACHMENT1_EXT: + return BUFFER_COLOR1; + case GL_COLOR_ATTACHMENT2_EXT: + return BUFFER_COLOR2; + case GL_COLOR_ATTACHMENT3_EXT: + return BUFFER_COLOR3; default: /* error */ - return ~0; + return -1; } } - /** - * Specify which color buffers to draw into. + * Called by glDrawBuffer(). + * Specify which renderbuffer(s) to draw into for the first color output. + * can name zero, one, two or four renderbuffers! + * \sa _mesa_DrawBuffersARB * - * \param mode color buffer combination. - * - * \sa glDrawBuffer(). - * - * Flushes the vertices and verifies the parameter and updates the - * gl_colorbuffer_attrib::_DrawDestMask bitfield. Marks new color state in - * __GLcontextRec::NewState and notifies the driver via the - * dd_function_table::DrawBuffer callback. + * \param buffer buffer token such as GL_LEFT or GL_FRONT_AND_BACK, etc. */ void GLAPIENTRY -_mesa_DrawBuffer( GLenum mode ) +_mesa_DrawBuffer(GLenum buffer) { - GLenum destMask, supportedMask; + GLuint bufferID; + GLbitfield destMask; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* too complex... */ - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glDrawBuffer %s\n", _mesa_lookup_enum_by_nr(mode)); - - /* - * Do error checking and compute the _DrawDestMask bitfield. - */ - destMask = draw_buffer_enum_to_bitmask(mode); - if (destMask == ~0u) { - _mesa_error(ctx, GL_INVALID_ENUM, "glDrawBuffer(mode)"); - return; + if (MESA_VERBOSE & VERBOSE_API) { + _mesa_debug(ctx, "glDrawBuffer %s\n", _mesa_lookup_enum_by_nr(buffer)); } - supportedMask = supported_buffer_bitmask(ctx); - destMask &= supportedMask; + bufferID = ctx->DrawBuffer->Name; - if (destMask == 0) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawBuffer(mode)"); - return; + if (buffer == GL_NONE) { + destMask = 0x0; + } + else { + const GLbitfield supportedMask = supported_buffer_bitmask(ctx, bufferID); + destMask = draw_buffer_enum_to_bitmask(buffer); + if (destMask == BAD_MASK) { + /* totally bogus buffer */ + _mesa_error(ctx, GL_INVALID_ENUM, "glDrawBuffer(buffer)"); + return; + } + destMask &= supportedMask; + if (destMask == 0x0) { + /* none of the named color buffers exist! */ + _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawBuffer(buffer)"); + return; + } } - ctx->Color.DrawBuffer[0] = mode; - ctx->Color._DrawDestMask[0] = destMask; - ctx->NewState |= _NEW_COLOR; - - /* - * Call device driver function. - */ - if (ctx->Driver.DrawBuffer) - (*ctx->Driver.DrawBuffer)(ctx, mode); + /* if we get here, there's no error so set new state */ + _mesa_drawbuffers(ctx, 1, &buffer, &destMask); } /** - * Called by glDrawBuffersARB; specifies the destination color buffers + * Called by glDrawBuffersARB; specifies the destination color renderbuffers * for N fragment program color outputs. + * \sa _mesa_DrawBuffer + * \param n number of outputs + * \param buffers array [n] of renderbuffer names. Unlike glDrawBuffer, the + * names cannot specify more than one buffer. For example, + * GL_FRONT_AND_BACK is illegal. */ void GLAPIENTRY _mesa_DrawBuffersARB(GLsizei n, const GLenum *buffers) { - GLint i; - GLuint usedBufferMask, supportedMask; + GLint output; + GLuint bufferID; + GLbitfield usedBufferMask, supportedMask; + GLbitfield destMask[MAX_DRAW_BUFFERS]; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + if (!ctx->Extensions.ARB_draw_buffers) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawBuffersARB"); + return; + } if (n < 1 || n > (GLsizei) ctx->Const.MaxDrawBuffers) { - _mesa_error(ctx, GL_INVALID_VALUE, "glDrawBuffersARB(n)" ); + _mesa_error(ctx, GL_INVALID_VALUE, "glDrawBuffersARB(n)"); return; } - supportedMask = supported_buffer_bitmask(ctx); - usedBufferMask = 0; - for (i = 0; i < n; i++) { - GLuint destMask = draw_buffer_enum_to_bitmask(buffers[i]); - if (destMask == ~0u ) { - _mesa_error(ctx, GL_INVALID_ENUM, "glDrawBuffersARB(buffer)"); - return; - } - destMask &= supportedMask; - if (destMask == 0) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glDrawBuffersARB(unsupported buffer)"); - return; + bufferID = ctx->DrawBuffer->Name; + + supportedMask = supported_buffer_bitmask(ctx, bufferID); + usedBufferMask = 0x0; + + /* complicated error checking... */ + for (output = 0; output < n; output++) { + if (buffers[output] == GL_NONE) { + destMask[output] = 0x0; } - if (destMask & usedBufferMask) { - /* can't use a dest buffer more than once! */ - _mesa_error(ctx, GL_INVALID_OPERATION, - "glDrawBuffersARB(duplicated buffer)"); - return; + else { + destMask[output] = draw_buffer_enum_to_bitmask(buffers[output]); + if (destMask[output] == BAD_MASK + || _mesa_bitcount(destMask[output]) > 1) { + _mesa_error(ctx, GL_INVALID_ENUM, "glDrawBuffersARB(buffer)"); + return; + } + destMask[output] &= supportedMask; + if (destMask[output] == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glDrawBuffersARB(unsupported buffer)"); + return; + } + if (destMask[output] & usedBufferMask) { + /* can't specify a dest buffer more than once! */ + _mesa_error(ctx, GL_INVALID_OPERATION, + "glDrawBuffersARB(duplicated buffer)"); + return; + } + + /* update bitmask */ + usedBufferMask |= destMask[output]; } - /* update bitmask */ - usedBufferMask |= destMask; - /* save state */ - ctx->Color.DrawBuffer[i] = buffers[i]; - ctx->Color._DrawDestMask[i] = destMask; + } + + /* OK, if we get here, there were no errors so set the new state */ + _mesa_drawbuffers(ctx, n, buffers, destMask); +} + + +/** + * Set color output state. Traditionally, there was only one color + * output, but fragment programs can now have several distinct color + * outputs (see GL_ARB_draw_buffers). This function sets the state + * for one such color output. + * \param ctx current context + * \param output which fragment program output + * \param buffer buffer to write to (like GL_LEFT) + * \param destMask BUFFER_* bitmask + * (like BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT). + */ +static void +set_color_output(GLcontext *ctx, GLuint output, GLenum buffer, + GLbitfield destMask) +{ + struct gl_framebuffer *fb = ctx->DrawBuffer; + + ASSERT(output < ctx->Const.MaxDrawBuffers); + + /* Set per-FBO state */ + fb->ColorDrawBuffer[output] = buffer; + fb->_ColorDrawBufferMask[output] = destMask; + /* not really needed, will be set later */ + fb->_NumColorDrawBuffers[output] = 0; + + /* Set traditional state var */ + ctx->Color.DrawBuffer[output] = buffer; +} + + +/** + * Helper routine used by _mesa_DrawBuffer, _mesa_DrawBuffersARB and + * _mesa_PopAttrib to set drawbuffer state. + * All error checking will have been done prior to calling this function + * so nothing should go wrong at this point. + * \param ctx current context + * \param n number of color outputs to set + * \param buffers array[n] of colorbuffer names, like GL_LEFT. + * \param destMask array[n] of BUFFER_* bitmasks which correspond to the + * colorbuffer names. (i.e. GL_FRONT_AND_BACK => + * BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT). + */ +void +_mesa_drawbuffers(GLcontext *ctx, GLuint n, const GLenum *buffers, + const GLbitfield *destMask) +{ + GLbitfield mask[MAX_DRAW_BUFFERS]; + GLuint output; + + if (!destMask) { + /* compute destMask values now */ + const GLuint bufferID = ctx->DrawBuffer->Name; + const GLbitfield supportedMask = supported_buffer_bitmask(ctx, bufferID); + for (output = 0; output < n; output++) { + mask[output] = draw_buffer_enum_to_bitmask(buffers[output]); + ASSERT(mask[output] != BAD_MASK); + mask[output] &= supportedMask; + } + destMask = mask; + } + + for (output = 0; output < n; output++) { + set_color_output(ctx, output, buffers[output], destMask[output]); + } + + /* set remaining color outputs to NONE */ + for (output = n; output < ctx->Const.MaxDrawBuffers; output++) { + set_color_output(ctx, output, GL_NONE, 0x0); } ctx->NewState |= _NEW_COLOR; @@ -380,56 +514,73 @@ _mesa_DrawBuffersARB(GLsizei n, const GLenum *buffers) * Call device driver function. */ if (ctx->Driver.DrawBuffers) - (*ctx->Driver.DrawBuffers)(ctx, n, buffers); + ctx->Driver.DrawBuffers(ctx, n, buffers); + else if (ctx->Driver.DrawBuffer) + ctx->Driver.DrawBuffer(ctx, buffers[0]); } + /** - * Set the color buffer source for reading pixels. - * - * \param mode color buffer. - * - * \sa glReadBuffer(). - * - * Verifies the parameter and updates gl_pixel_attrib::_ReadSrcMask. Marks - * new pixel state in __GLcontextRec::NewState and notifies the driver via - * dd_function_table::ReadBuffer. + * Called by glReadBuffer to set the source renderbuffer for reading pixels. + * \param mode color buffer such as GL_FRONT, GL_BACK, etc. */ void GLAPIENTRY -_mesa_ReadBuffer( GLenum mode ) +_mesa_ReadBuffer(GLenum buffer) { - GLuint srcMask, supportedMask; + struct gl_framebuffer *fb; + GLbitfield supportedMask; + GLint srcBuffer; + GLuint bufferID; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glReadBuffer %s\n", _mesa_lookup_enum_by_nr(mode)); + fb = ctx->ReadBuffer; + bufferID = fb->Name; - srcMask = read_buffer_enum_to_bitmask(mode); - if (srcMask == ~0u) { - _mesa_error(ctx, GL_INVALID_ENUM, "glReadBuffer(mode)"); - return; + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glReadBuffer %s\n", _mesa_lookup_enum_by_nr(buffer)); + + if (bufferID > 0 && buffer == GL_NONE) { + /* This is legal for user-created framebuffer objects */ + srcBuffer = -1; } - supportedMask = supported_buffer_bitmask(ctx); - if ((srcMask & supportedMask) == 0) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glReadBuffer(mode)"); - return; + else { + /* general case / window-system framebuffer */ + srcBuffer = read_buffer_enum_to_index(buffer); + if (srcBuffer == -1) { + _mesa_error(ctx, GL_INVALID_ENUM, "glReadBuffer(buffer=0x%x)", buffer); + return; + } + supportedMask = supported_buffer_bitmask(ctx, bufferID); + if (((1 << srcBuffer) & supportedMask) == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glReadBuffer(buffer=0x%x)", buffer); + return; + } } - ctx->Pixel._ReadSrcMask = srcMask; - ctx->Pixel.ReadBuffer = mode; + + if (bufferID == 0) { + ctx->Pixel.ReadBuffer = buffer; + } + fb->ColorReadBuffer = buffer; + fb->_ColorReadBufferIndex = srcBuffer; + ctx->NewState |= _NEW_PIXEL; /* * Call device driver function. */ if (ctx->Driver.ReadBuffer) - (*ctx->Driver.ReadBuffer)(ctx, mode); + (*ctx->Driver.ReadBuffer)(ctx, buffer); } #if _HAVE_FULL_GL /** + * XXX THIS IS OBSOLETE - drivers should take care of detecting window + * size changes and act accordingly, likely calling _mesa_resize_framebuffer(). + * * GL_MESA_resize_buffers extension. * * When this function is called, we'll ask the window system how large @@ -437,56 +588,68 @@ _mesa_ReadBuffer( GLenum mode ) * ResizeBuffers function. The driver will then resize its color buffers * as needed, and maybe call the swrast's routine for reallocating * swrast-managed depth/stencil/accum/etc buffers. - * \note This function may be called from within Mesa or called by the - * user directly (see the GL_MESA_resize_buffers extension). + * \note This function should only be called through the GL API, not + * from device drivers (as was done in the past). + */ + +void _mesa_resizebuffers( GLcontext *ctx ) +{ + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx ); + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glResizeBuffersMESA\n"); + + if (!ctx->Driver.GetBufferSize) { + return; + } + + if (ctx->WinSysDrawBuffer) { + GLuint newWidth, newHeight; + GLframebuffer *buffer = ctx->WinSysDrawBuffer; + + assert(buffer->Name == 0); + + /* ask device driver for size of output buffer */ + ctx->Driver.GetBufferSize( buffer, &newWidth, &newHeight ); + + /* see if size of device driver's color buffer (window) has changed */ + if (buffer->Width != newWidth || buffer->Height != newHeight) { + if (ctx->Driver.ResizeBuffers) + ctx->Driver.ResizeBuffers(ctx, buffer, newWidth, newHeight ); + } + } + + if (ctx->WinSysReadBuffer + && ctx->WinSysReadBuffer != ctx->WinSysDrawBuffer) { + GLuint newWidth, newHeight; + GLframebuffer *buffer = ctx->WinSysReadBuffer; + + assert(buffer->Name == 0); + + /* ask device driver for size of read buffer */ + ctx->Driver.GetBufferSize( buffer, &newWidth, &newHeight ); + + /* see if size of device driver's color buffer (window) has changed */ + if (buffer->Width != newWidth || buffer->Height != newHeight) { + if (ctx->Driver.ResizeBuffers) + ctx->Driver.ResizeBuffers(ctx, buffer, newWidth, newHeight ); + } + } + + ctx->NewState |= _NEW_BUFFERS; /* to update scissor / window bounds */ +} + + +/* + * XXX THIS IS OBSOLETE */ void GLAPIENTRY _mesa_ResizeBuffersMESA( void ) { GET_CURRENT_CONTEXT(ctx); - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glResizeBuffersMESA\n"); - - if (ctx) { - ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx ); - - if (ctx->DrawBuffer) { - GLuint buf_width, buf_height; - GLframebuffer *buffer = ctx->DrawBuffer; - - /* ask device driver for size of output buffer */ - (*ctx->Driver.GetBufferSize)( buffer, &buf_width, &buf_height ); - - /* see if size of device driver's color buffer (window) has changed */ - if (buffer->Width == buf_width && buffer->Height == buf_height) - return; /* size is as expected */ - - buffer->Width = buf_width; - buffer->Height = buf_height; - - ctx->Driver.ResizeBuffers( buffer ); - } - - if (ctx->ReadBuffer && ctx->ReadBuffer != ctx->DrawBuffer) { - GLuint buf_width, buf_height; - GLframebuffer *buffer = ctx->ReadBuffer; - - /* ask device driver for size of read buffer */ - (*ctx->Driver.GetBufferSize)( buffer, &buf_width, &buf_height ); - - /* see if size of device driver's color buffer (window) has changed */ - if (buffer->Width == buf_width && buffer->Height == buf_height) - return; /* size is as expected */ - - buffer->Width = buf_width; - buffer->Height = buf_height; - - ctx->Driver.ResizeBuffers( buffer ); - } - - ctx->NewState |= _NEW_BUFFERS; /* to update scissor / window bounds */ - } + if (ctx->Extensions.MESA_resize_buffers) + _mesa_resizebuffers( ctx ); } @@ -509,7 +672,8 @@ _mesa_SampleCoverageARB(GLclampf value, GLboolean invert) ctx->NewState |= _NEW_MULTISAMPLE; } -#endif +#endif /* _HAVE_FULL_GL */ + /** @@ -525,20 +689,10 @@ _mesa_SampleCoverageARB(GLclampf value, GLboolean invert) * change flushes the vertices and notifies the driver via * the dd_function_table::Scissor callback. */ -void GLAPIENTRY -_mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height ) +void +_mesa_set_scissor(GLcontext *ctx, + GLint x, GLint y, GLsizei width, GLsizei height) { - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (width < 0 || height < 0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glScissor" ); - return; - } - - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glScissor %d %d %d %d\n", x, y, width, height); - if (x == ctx->Scissor.X && y == ctx->Scissor.Y && width == ctx->Scissor.Width && @@ -556,56 +710,35 @@ _mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height ) } - -/**********************************************************************/ -/** \name State management */ -/*@{*/ - -/** - * Update screen bounds. - * - * \param ctx GL context. - * - * Update gl_frame_buffer::_Xmin, and etc. - */ -void _mesa_update_buffers( GLcontext *ctx ) +void GLAPIENTRY +_mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height ) { - ctx->DrawBuffer->_Xmin = 0; - ctx->DrawBuffer->_Ymin = 0; - ctx->DrawBuffer->_Xmax = ctx->DrawBuffer->Width; - ctx->DrawBuffer->_Ymax = ctx->DrawBuffer->Height; - if (ctx->Scissor.Enabled) { - if (ctx->Scissor.X > ctx->DrawBuffer->_Xmin) { - ctx->DrawBuffer->_Xmin = ctx->Scissor.X; - } - if (ctx->Scissor.Y > ctx->DrawBuffer->_Ymin) { - ctx->DrawBuffer->_Ymin = ctx->Scissor.Y; - } - if (ctx->Scissor.X + ctx->Scissor.Width < ctx->DrawBuffer->_Xmax) { - ctx->DrawBuffer->_Xmax = ctx->Scissor.X + ctx->Scissor.Width; - } - if (ctx->Scissor.Y + ctx->Scissor.Height < ctx->DrawBuffer->_Ymax) { - ctx->DrawBuffer->_Ymax = ctx->Scissor.Y + ctx->Scissor.Height; - } + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (width < 0 || height < 0) { + _mesa_error( ctx, GL_INVALID_VALUE, "glScissor" ); + return; } + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glScissor %d %d %d %d\n", x, y, width, height); + + _mesa_set_scissor(ctx, x, y, width, height); } -/*@}*/ - + /**********************************************************************/ /** \name Initialization */ /*@{*/ /** - * Initialize the context scissor data. - * - * \param ctx GL context. - * - * Initializes the __GLcontextRec::Scissor and __GLcontextRec::Multisample - * attribute groups, and related constants in __GLcontextRec::Const. + * Initialize the context's scissor state. + * \param ctx the GL context. */ -void _mesa_init_buffers( GLcontext * ctx ) +void +_mesa_init_scissor(GLcontext *ctx) { /* Scissor group */ ctx->Scissor.Enabled = GL_FALSE; @@ -613,15 +746,22 @@ void _mesa_init_buffers( GLcontext * ctx ) ctx->Scissor.Y = 0; ctx->Scissor.Width = 0; ctx->Scissor.Height = 0; +} - /* Multisample */ + +/** + * Initialize the context's multisample state. + * \param ctx the GL context. + */ +void +_mesa_init_multisample(GLcontext *ctx) +{ ctx->Multisample.Enabled = GL_FALSE; ctx->Multisample.SampleAlphaToCoverage = GL_FALSE; ctx->Multisample.SampleAlphaToOne = GL_FALSE; ctx->Multisample.SampleCoverage = GL_FALSE; ctx->Multisample.SampleCoverageValue = 1.0; ctx->Multisample.SampleCoverageInvert = GL_FALSE; - } /*@}*/ diff --git a/src/kits/opengl/mesa/main/buffers.h b/src/kits/opengl/mesa/main/buffers.h index f9369864b6..fcc2152342 100644 --- a/src/kits/opengl/mesa/main/buffers.h +++ b/src/kits/opengl/mesa/main/buffers.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 6.5 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -52,6 +52,10 @@ _mesa_DrawBuffer( GLenum mode ); extern void GLAPIENTRY _mesa_DrawBuffersARB(GLsizei n, const GLenum *buffers); +extern void +_mesa_drawbuffers(GLcontext *ctx, GLuint n, const GLenum *buffers, + const GLbitfield *destMask); + extern void GLAPIENTRY _mesa_ReadBuffer( GLenum mode ); @@ -65,9 +69,15 @@ extern void GLAPIENTRY _mesa_SampleCoverageARB(GLclampf value, GLboolean invert); extern void -_mesa_init_buffers( GLcontext * ctx ); +_mesa_init_scissor(GLcontext *ctx); extern void -_mesa_update_buffers( GLcontext *ctx ); +_mesa_init_multisample(GLcontext *ctx); + +extern void +_mesa_set_scissor(GLcontext *ctx, + GLint x, GLint y, GLsizei width, GLsizei height); + +extern void _mesa_resizebuffers( GLcontext *ctx ); #endif diff --git a/src/kits/opengl/mesa/main/clip.c b/src/kits/opengl/mesa/main/clip.c index a1eda32ebf..43ef55ee3b 100644 --- a/src/kits/opengl/mesa/main/clip.c +++ b/src/kits/opengl/mesa/main/clip.c @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -68,7 +67,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) * clipping now takes place. The clip-space equations are recalculated * whenever the projection matrix changes. */ - if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY) + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); _mesa_transform_vector( equation, equation, @@ -85,7 +84,7 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq ) * code in _mesa_update_state(). */ if (ctx->Transform.ClipPlanesEnabled & (1 << p)) { - if (ctx->ProjectionMatrixStack.Top->flags & MAT_DIRTY) + if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top)) _math_matrix_analyse( ctx->ProjectionMatrixStack.Top ); _mesa_transform_vector( ctx->Transform._ClipUserPlane[p], diff --git a/src/kits/opengl/mesa/main/colortab.c b/src/kits/opengl/mesa/main/colortab.c index 4eafe3e899..e9349516eb 100644 --- a/src/kits/opengl/mesa/main/colortab.c +++ b/src/kits/opengl/mesa/main/colortab.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -32,7 +32,7 @@ #include "state.h" -/* +/** * Given an internalFormat token passed to glColorTable, * return the corresponding base format. * Return -1 if invalid token. @@ -92,30 +92,16 @@ base_colortab_format( GLenum format ) -/* +/** * Examine table's format and set the component sizes accordingly. */ static void set_component_sizes( struct gl_color_table *table ) { - GLubyte sz; + /* assuming the ubyte table */ + const GLubyte sz = 8; - switch (table->Type) { - case GL_UNSIGNED_BYTE: - sz = sizeof(GLubyte); - break; - case GL_UNSIGNED_SHORT: - sz = sizeof(GLushort); - break; - case GL_FLOAT: - sz = sizeof(GLfloat); - break; - default: - _mesa_problem(NULL, "bad color table type in set_component_sizes 0x%x", table->Type); - return; - } - - switch (table->Format) { + switch (table->_BaseFormat) { case GL_ALPHA: table->RedSize = 0; table->GreenSize = 0; @@ -213,7 +199,7 @@ store_colortable_entries(GLcontext *ctx, struct gl_color_table *table, } - if (table->Type == GL_FLOAT) { + { /* convert user-provided data to GLfloat values */ GLfloat tempTab[MAX_COLOR_TABLE_SIZE * 4]; GLfloat *tableF; @@ -221,7 +207,7 @@ store_colortable_entries(GLcontext *ctx, struct gl_color_table *table, _mesa_unpack_color_span_float(ctx, count, /* number of pixels */ - table->Format, /* dest format */ + table->_BaseFormat, /* dest format */ tempTab, /* dest address */ format, type, /* src format/type */ data, /* src data */ @@ -229,10 +215,10 @@ store_colortable_entries(GLcontext *ctx, struct gl_color_table *table, IMAGE_CLAMP_BIT); /* transfer ops */ /* the destination */ - tableF = (GLfloat *) table->Table; + tableF = table->TableF; /* Apply scale & bias & clamp now */ - switch (table->Format) { + switch (table->_BaseFormat) { case GL_INTENSITY: for (i = 0; i < count; i++) { GLuint j = start + i; @@ -280,16 +266,16 @@ store_colortable_entries(GLcontext *ctx, struct gl_color_table *table, return; } } - else { - /* non-float (GLchan) */ - const GLint comps = _mesa_components_in_format(table->Format); - GLchan *dest = (GLchan *) table->Table + start * comps; - _mesa_unpack_color_span_chan(ctx, count, /* number of entries */ - table->Format, /* dest format */ - dest, /* dest address */ - format, type, data, /* src data */ - &ctx->Unpack, - 0); /* transfer ops */ + + /* update the ubyte table */ + { + const GLint comps = _mesa_components_in_format(table->_BaseFormat); + const GLfloat *tableF = table->TableF + start * comps; + GLubyte *tableUB = table->TableUB + start * comps; + GLint i; + for (i = 0; i < count * comps; i++) { + CLAMPED_FLOAT_TO_UBYTE(tableUB[i], tableF[i]); + } } if (ctx->Unpack.BufferObj->Name) { @@ -313,7 +299,6 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, GLint baseFormat; GLfloat rScale = 1.0, gScale = 1.0, bScale = 1.0, aScale = 1.0; GLfloat rBias = 0.0, gBias = 0.0, bBias = 0.0, aBias = 0.0; - GLenum tableType = CHAN_TYPE; GLint comps; ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* too complex */ @@ -366,7 +351,6 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, break; case GL_COLOR_TABLE: table = &ctx->ColorTable; - tableType = GL_FLOAT; rScale = ctx->Pixel.ColorTableScale[0]; gScale = ctx->Pixel.ColorTableScale[1]; bScale = ctx->Pixel.ColorTableScale[2]; @@ -386,7 +370,6 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, return; } table = &(texUnit->ColorTable); - tableType = GL_FLOAT; rScale = ctx->Pixel.TextureColorTableScale[0]; gScale = ctx->Pixel.TextureColorTableScale[1]; bScale = ctx->Pixel.TextureColorTableScale[2]; @@ -406,7 +389,6 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, break; case GL_POST_CONVOLUTION_COLOR_TABLE: table = &ctx->PostConvolutionColorTable; - tableType = GL_FLOAT; rScale = ctx->Pixel.PCCTscale[0]; gScale = ctx->Pixel.PCCTscale[1]; bScale = ctx->Pixel.PCCTscale[2]; @@ -422,7 +404,6 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, break; case GL_POST_COLOR_MATRIX_COLOR_TABLE: table = &ctx->PostColorMatrixColorTable; - tableType = GL_FLOAT; rScale = ctx->Pixel.PCMCTscale[0]; gScale = ctx->Pixel.PCMCTscale[1]; bScale = ctx->Pixel.PCMCTscale[2]; @@ -450,7 +431,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, } baseFormat = base_colortab_format(internalFormat); - if (baseFormat < 0 || baseFormat == GL_COLOR_INDEX) { + if (baseFormat < 0) { _mesa_error(ctx, GL_INVALID_ENUM, "glColorTable(internalFormat)"); return; } @@ -459,8 +440,8 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, /* error */ if (proxy) { table->Size = 0; - table->IntFormat = (GLenum) 0; - table->Format = (GLenum) 0; + table->InternalFormat = (GLenum) 0; + table->_BaseFormat = (GLenum) 0; } else { _mesa_error(ctx, GL_INVALID_VALUE, "glColorTable(width=%d)", width); @@ -471,8 +452,8 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, if (width > (GLsizei) ctx->Const.MaxColorTableSize) { if (proxy) { table->Size = 0; - table->IntFormat = (GLenum) 0; - table->Format = (GLenum) 0; + table->InternalFormat = (GLenum) 0; + table->_BaseFormat = (GLenum) 0; } else { _mesa_error(ctx, GL_TABLE_TOO_LARGE, "glColorTable(width)"); @@ -481,31 +462,20 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, } table->Size = width; - table->IntFormat = internalFormat; - table->Format = (GLenum) baseFormat; - set_component_sizes(table); + table->InternalFormat = internalFormat; + table->_BaseFormat = (GLenum) baseFormat; - comps = _mesa_components_in_format(table->Format); + comps = _mesa_components_in_format(table->_BaseFormat); assert(comps > 0); /* error should have been caught sooner */ if (!proxy) { - /* free old table, if any */ - if (table->Table) { - FREE(table->Table); - table->Table = NULL; - } + _mesa_free_colortable_data(table); if (width > 0) { - if (tableType == GL_FLOAT) { - table->Type = GL_FLOAT; - table->Table = MALLOC(comps * width * sizeof(GLfloat)); - } - else { - table->Type = CHAN_TYPE; - table->Table = MALLOC(comps * width * sizeof(GLchan)); - } + table->TableF = _mesa_malloc(comps * width * sizeof(GLfloat)); + table->TableUB = _mesa_malloc(comps * width * sizeof(GLubyte)); - if (!table->Table) { + if (!table->TableF || !table->TableUB) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glColorTable"); return; } @@ -520,6 +490,9 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat, } } /* proxy */ + /* do this after the table's Type and Format are set */ + set_component_sizes(table); + if (texObj || target == GL_SHARED_TEXTURE_PALETTE_EXT) { /* texture object palette, texObj==NULL means the shared palette */ if (ctx->Driver.UpdateTexturePalette) { @@ -636,15 +609,15 @@ _mesa_ColorSubTable( GLenum target, GLsizei start, } /* error should have been caught sooner */ - assert(_mesa_components_in_format(table->Format) > 0); + assert(_mesa_components_in_format(table->_BaseFormat) > 0); if (start + count > (GLint) table->Size) { _mesa_error(ctx, GL_INVALID_VALUE, "glColorSubTable(count)"); return; } - if (!table->Table) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glColorSubTable"); + if (!table->TableF || !table->TableUB) { + /* a GL_OUT_OF_MEMORY error would have been recorded previously */ return; } @@ -699,7 +672,7 @@ _mesa_GetColorTable( GLenum target, GLenum format, GET_CURRENT_CONTEXT(ctx); struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; struct gl_color_table *table = NULL; - GLchan rgba[MAX_COLOR_TABLE_SIZE][4]; + GLfloat rgba[MAX_COLOR_TABLE_SIZE][4]; ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); if (ctx->NewState) { @@ -749,142 +722,68 @@ _mesa_GetColorTable( GLenum target, GLenum format, ASSERT(table); - switch (table->Format) { - case GL_ALPHA: - if (table->Type == GL_FLOAT) { - const GLfloat *tableF = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = 0; - rgba[i][GCOMP] = 0; - rgba[i][BCOMP] = 0; - rgba[i][ACOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - } + switch (table->_BaseFormat) { + case GL_ALPHA: + { + GLuint i; + for (i = 0; i < table->Size; i++) { + rgba[i][RCOMP] = 0; + rgba[i][GCOMP] = 0; + rgba[i][BCOMP] = 0; + rgba[i][ACOMP] = table->TableF[i]; } - else { - const GLchan *tableUB = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = 0; - rgba[i][GCOMP] = 0; - rgba[i][BCOMP] = 0; - rgba[i][ACOMP] = tableUB[i]; - } + } + break; + case GL_LUMINANCE: + { + GLuint i; + for (i = 0; i < table->Size; i++) { + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = table->TableF[i]; + rgba[i][ACOMP] = 1.0F; } - break; - case GL_LUMINANCE: - if (table->Type == GL_FLOAT) { - const GLfloat *tableF = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - rgba[i][GCOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - rgba[i][BCOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - rgba[i][ACOMP] = CHAN_MAX; - } + } + break; + case GL_LUMINANCE_ALPHA: + { + GLuint i; + for (i = 0; i < table->Size; i++) { + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = table->TableF[i*2+0]; + rgba[i][ACOMP] = table->TableF[i*2+1]; } - else { - const GLchan *tableUB = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = tableUB[i]; - rgba[i][GCOMP] = tableUB[i]; - rgba[i][BCOMP] = tableUB[i]; - rgba[i][ACOMP] = CHAN_MAX; - } + } + break; + case GL_INTENSITY: + { + GLuint i; + for (i = 0; i < table->Size; i++) { + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = + rgba[i][ACOMP] = table->TableF[i]; } - break; - case GL_LUMINANCE_ALPHA: - if (table->Type == GL_FLOAT) { - const GLfloat *tableF = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = IROUND_POS(tableF[i*2+0] * CHAN_MAXF); - rgba[i][GCOMP] = IROUND_POS(tableF[i*2+0] * CHAN_MAXF); - rgba[i][BCOMP] = IROUND_POS(tableF[i*2+0] * CHAN_MAXF); - rgba[i][ACOMP] = IROUND_POS(tableF[i*2+1] * CHAN_MAXF); - } + } + break; + case GL_RGB: + { + GLuint i; + for (i = 0; i < table->Size; i++) { + rgba[i][RCOMP] = table->TableF[i*3+0]; + rgba[i][GCOMP] = table->TableF[i*3+1]; + rgba[i][BCOMP] = table->TableF[i*3+2]; + rgba[i][ACOMP] = 1.0F; } - else { - const GLchan *tableUB = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = tableUB[i*2+0]; - rgba[i][GCOMP] = tableUB[i*2+0]; - rgba[i][BCOMP] = tableUB[i*2+0]; - rgba[i][ACOMP] = tableUB[i*2+1]; - } - } - break; - case GL_INTENSITY: - if (table->Type == GL_FLOAT) { - const GLfloat *tableF = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - rgba[i][GCOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - rgba[i][BCOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - rgba[i][ACOMP] = IROUND_POS(tableF[i] * CHAN_MAXF); - } - } - else { - const GLchan *tableUB = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = tableUB[i]; - rgba[i][GCOMP] = tableUB[i]; - rgba[i][BCOMP] = tableUB[i]; - rgba[i][ACOMP] = tableUB[i]; - } - } - break; - case GL_RGB: - if (table->Type == GL_FLOAT) { - const GLfloat *tableF = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = IROUND_POS(tableF[i*3+0] * CHAN_MAXF); - rgba[i][GCOMP] = IROUND_POS(tableF[i*3+1] * CHAN_MAXF); - rgba[i][BCOMP] = IROUND_POS(tableF[i*3+2] * CHAN_MAXF); - rgba[i][ACOMP] = CHAN_MAX; - } - } - else { - const GLchan *tableUB = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = tableUB[i*3+0]; - rgba[i][GCOMP] = tableUB[i*3+1]; - rgba[i][BCOMP] = tableUB[i*3+2]; - rgba[i][ACOMP] = CHAN_MAX; - } - } - break; - case GL_RGBA: - if (table->Type == GL_FLOAT) { - const GLfloat *tableF = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = IROUND_POS(tableF[i*4+0] * CHAN_MAXF); - rgba[i][GCOMP] = IROUND_POS(tableF[i*4+1] * CHAN_MAXF); - rgba[i][BCOMP] = IROUND_POS(tableF[i*4+2] * CHAN_MAXF); - rgba[i][ACOMP] = IROUND_POS(tableF[i*4+3] * CHAN_MAXF); - } - } - else { - const GLchan *tableUB = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < table->Size; i++) { - rgba[i][RCOMP] = tableUB[i*4+0]; - rgba[i][GCOMP] = tableUB[i*4+1]; - rgba[i][BCOMP] = tableUB[i*4+2]; - rgba[i][ACOMP] = tableUB[i*4+3]; - } - } - break; - default: - _mesa_problem(ctx, "bad table format in glGetColorTable"); - return; + } + break; + case GL_RGBA: + _mesa_memcpy(rgba, table->TableF, 4 * table->Size * sizeof(GLfloat)); + break; + default: + _mesa_problem(ctx, "bad table format in glGetColorTable"); + return; } if (ctx->Pack.BufferObj->Name) { @@ -908,8 +807,8 @@ _mesa_GetColorTable( GLenum target, GLenum format, data = ADD_POINTERS(buf, data); } - _mesa_pack_rgba_span_chan(ctx, table->Size, (const GLchan (*)[4]) rgba, - format, type, data, &ctx->Pack, GL_FALSE); + _mesa_pack_rgba_span_float(ctx, table->Size, rgba, + format, type, data, &ctx->Pack, 0x0); if (ctx->Pack.BufferObj->Name) { ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, @@ -1178,7 +1077,7 @@ _mesa_GetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params ) switch (pname) { case GL_COLOR_TABLE_FORMAT: - *params = (GLfloat) table->IntFormat; + *params = (GLfloat) table->InternalFormat; break; case GL_COLOR_TABLE_WIDTH: *params = (GLfloat) table->Size; @@ -1352,7 +1251,7 @@ _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params ) switch (pname) { case GL_COLOR_TABLE_FORMAT: - *params = table->IntFormat; + *params = table->InternalFormat; break; case GL_COLOR_TABLE_WIDTH: *params = table->Size; @@ -1389,10 +1288,10 @@ _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params ) void _mesa_init_colortable( struct gl_color_table *p ) { - p->Type = CHAN_TYPE; - p->Table = NULL; + p->TableF = NULL; + p->TableUB = NULL; p->Size = 0; - p->IntFormat = GL_RGBA; + p->InternalFormat = GL_RGBA; } @@ -1400,9 +1299,13 @@ _mesa_init_colortable( struct gl_color_table *p ) void _mesa_free_colortable_data( struct gl_color_table *p ) { - if (p->Table) { - FREE(p->Table); - p->Table = NULL; + if (p->TableF) { + _mesa_free(p->TableF); + p->TableF = NULL; + } + if (p->TableUB) { + _mesa_free(p->TableUB); + p->TableUB = NULL; } } @@ -1410,7 +1313,8 @@ _mesa_free_colortable_data( struct gl_color_table *p ) /* * Initialize all colortables for a context. */ -void _mesa_init_colortables( GLcontext * ctx ) +void +_mesa_init_colortables( GLcontext * ctx ) { /* Color tables */ _mesa_init_colortable(&ctx->ColorTable); @@ -1425,7 +1329,8 @@ void _mesa_init_colortables( GLcontext * ctx ) /* * Free all colortable data for a context */ -void _mesa_free_colortables_data( GLcontext *ctx ) +void +_mesa_free_colortables_data( GLcontext *ctx ) { _mesa_free_colortable_data(&ctx->ColorTable); _mesa_free_colortable_data(&ctx->ProxyColorTable); diff --git a/src/kits/opengl/mesa/main/colortab.h b/src/kits/opengl/mesa/main/colortab.h index 4bd16210a0..b6ff737a65 100644 --- a/src/kits/opengl/mesa/main/colortab.h +++ b/src/kits/opengl/mesa/main/colortab.h @@ -1,18 +1,8 @@ -/** - * \file colortab.h - * Color tables. - * - * \if subset - * (No-op) - * - * \endif - */ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 6.5.2 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), diff --git a/src/kits/opengl/mesa/main/config.h b/src/kits/opengl/mesa/main/config.h index cef8dd74a4..13c6281f07 100644 --- a/src/kits/opengl/mesa/main/config.h +++ b/src/kits/opengl/mesa/main/config.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -28,13 +28,8 @@ */ -#ifndef CONFIG_H -#define CONFIG_H - -#ifdef HAVE_CONFIG_H -#include "conf.h" -#endif - +#ifndef MESA_CONFIG_H_INCLUDED +#define MESA_CONFIG_H_INCLUDED /** * \name OpenGL implementation limits @@ -71,7 +66,7 @@ /** Maximum pixel map lookup table size */ #define MAX_PIXEL_MAP_TABLE 256 -/** Maximum Number of auxillary color buffers */ +/** Maximum number of auxillary color buffers */ #define MAX_AUX_BUFFERS 4 /** Maximum order (degree) of curves */ @@ -113,7 +108,11 @@ /** Maximum rectangular texture size - GL_NV_texture_rectangle */ #define MAX_TEXTURE_RECT_SIZE 2048 -/** Number of texture units - GL_ARB_multitexture */ +/** Number of texture units - GL_ARB_multitexture + * This needs to be the larger of MAX_TEXTURE_COORD_UNITS and + * MAX_TEXTURE_IMAGE_UNITS seen below, since MAX_TEXTURE_UNITS is used + * to dimension some arrays that store both coord and image data. +*/ #define MAX_TEXTURE_UNITS 8 /*@}*/ @@ -165,14 +164,14 @@ /*@{*/ #define MAX_NV_VERTEX_PROGRAM_INSTRUCTIONS 128 #define MAX_NV_VERTEX_PROGRAM_TEMPS 12 -#define MAX_NV_VERTEX_PROGRAM_PARAMS 96 +#define MAX_NV_VERTEX_PROGRAM_PARAMS 128 /* KW: power of two */ #define MAX_NV_VERTEX_PROGRAM_INPUTS 16 #define MAX_NV_VERTEX_PROGRAM_OUTPUTS 15 /*@}*/ /** For GL_NV_fragment_program */ /*@{*/ -#define MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS 128 +#define MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS 1024 /* 72 for GL_ARB_f_p */ #define MAX_NV_FRAGMENT_PROGRAM_TEMPS 96 #define MAX_NV_FRAGMENT_PROGRAM_PARAMS 64 #define MAX_NV_FRAGMENT_PROGRAM_INPUTS 12 @@ -188,7 +187,7 @@ /** For GL_ARB_fragment_program */ /*@{*/ -#define MAX_FRAGMENT_PROGRAM_ADDRESS_REGS 1 +#define MAX_FRAGMENT_PROGRAM_ADDRESS_REGS 0 #define MAX_FRAGMENT_PROGRAM_ALU_INSTRUCTIONS 48 #define MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS 24 #define MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS 4 @@ -196,9 +195,24 @@ /** For any program target/extension */ /*@{*/ -#define MAX_PROGRAM_LOCAL_PARAMS 96 +#define MAX_PROGRAM_LOCAL_PARAMS 128 /* KW: power of two */ #define MAX_PROGRAM_MATRICES 8 #define MAX_PROGRAM_MATRIX_STACK_DEPTH 4 +#define MAX_PROGRAM_CALL_DEPTH 8 +/*@}*/ + +/** For GL_ARB_fragment_shader */ +/*@{*/ +#define MAX_FRAGMENT_UNIFORM_COMPONENTS 64 +/*@}*/ + +/** For GL_ARB_vertex_shader */ +/*@{*/ +#define MAX_VERTEX_ATTRIBS 16 +#define MAX_VERTEX_UNIFORM_COMPONENTS 512 +#define MAX_VARYING_FLOATS 32 +#define MAX_VERTEX_TEXTURE_IMAGE_UNITS 0 +#define MAX_COMBINED_TEXTURE_IMAGE_UNITS (MAX_TEXTURE_IMAGE_UNITS + MAX_VERTEX_TEXTURE_IMAGE_UNITS) /*@}*/ @@ -208,6 +222,12 @@ /*@}*/ +/** For GL_EXT_framebuffer_object */ +/*@{*/ +#define MAX_COLOR_ATTACHMENTS 8 +/*@}*/ + + /** * \name Mesa-specific parameters @@ -220,10 +240,6 @@ */ #define TRIANGLE_WALK_DOUBLE 0 -/** - * Bits per accumulation buffer color component: 8, 16 or 32 - */ -#define ACCUM_BITS 16 /** * Bits per depth buffer value. @@ -274,23 +290,29 @@ #define _HAVE_FULL_GL 1 #endif +#define FEATURE_userclip _HAVE_FULL_GL +#define FEATURE_texgen _HAVE_FULL_GL +#define FEATURE_windowpos _HAVE_FULL_GL +#define FEATURE_ARB_occlusion_query _HAVE_FULL_GL +#define FEATURE_ARB_fragment_program _HAVE_FULL_GL #define FEATURE_ARB_vertex_buffer_object _HAVE_FULL_GL #define FEATURE_ARB_vertex_program _HAVE_FULL_GL -#define FEATURE_ARB_fragment_program _HAVE_FULL_GL -#define FEATURE_ARB_occlusion_query _HAVE_FULL_GL + +#define FEATURE_ARB_vertex_shader _HAVE_FULL_GL +#define FEATURE_ARB_fragment_shader _HAVE_FULL_GL +#define FEATURE_ARB_shader_objects (FEATURE_ARB_vertex_shader || FEATURE_ARB_fragment_shader) +#define FEATURE_ARB_shading_language_100 FEATURE_ARB_shader_objects + +#define FEATURE_EXT_framebuffer_blit _HAVE_FULL_GL +#define FEATURE_EXT_framebuffer_object _HAVE_FULL_GL #define FEATURE_EXT_pixel_buffer_object _HAVE_FULL_GL +#define FEATURE_EXT_texture_sRGB _HAVE_FULL_GL +#define FEATURE_EXT_timer_query _HAVE_FULL_GL +#define FEATURE_ATI_fragment_shader _HAVE_FULL_GL #define FEATURE_MESA_program_debug _HAVE_FULL_GL #define FEATURE_NV_fence _HAVE_FULL_GL #define FEATURE_NV_fragment_program _HAVE_FULL_GL #define FEATURE_NV_vertex_program _HAVE_FULL_GL -#define FEATURE_userclip _HAVE_FULL_GL -#define FEATURE_texgen _HAVE_FULL_GL -#define FEATURE_windowpos _HAVE_FULL_GL -#define FEATURE_ARB_vertex_shader _HAVE_FULL_GL -#define FEATURE_ARB_fragment_shader _HAVE_FULL_GL -#define FEATURE_ARB_shader_objects (FEATURE_ARB_vertex_shader || FEATURE_ARB_fragment_shader) -#define FEATURE_ATI_fragment_shader _HAVE_FULL_GL - /*@}*/ @@ -302,4 +324,4 @@ #define MAX_CLIPPED_VERTICES ((2 * (6 + MAX_CLIP_PLANES))+1) -#endif /* CONFIG_H */ +#endif /* MESA_CONFIG_H_INCLUDED */ diff --git a/src/kits/opengl/mesa/main/context.c b/src/kits/opengl/mesa/main/context.c index 98e684d393..7ff45cffe8 100644 --- a/src/kits/opengl/mesa/main/context.c +++ b/src/kits/opengl/mesa/main/context.c @@ -6,9 +6,9 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -79,6 +79,7 @@ #include "glheader.h" #include "imports.h" #include "accum.h" +#include "arrayobj.h" #include "attrib.h" #include "blend.h" #include "buffers.h" @@ -91,6 +92,7 @@ #include "eval.h" #include "enums.h" #include "extensions.h" +#include "fbobject.h" #include "feedback.h" #include "fog.h" #include "get.h" @@ -99,6 +101,7 @@ #include "histogram.h" #include "hint.h" #include "hash.h" +#include "atifragshader.h" #include "light.h" #include "lines.h" #include "macros.h" @@ -120,6 +123,7 @@ #include "texstate.h" #include "mtypes.h" #include "varray.h" +#include "version.h" #include "vtxfmt.h" #if _HAVE_FULL_GL #include "math/m_translate.h" @@ -127,6 +131,7 @@ #include "math/m_xform.h" #include "math/mathmod.h" #endif +#include "shaderobjects.h" #ifdef USE_SPARC_ASM #include "sparc/sparc.h" @@ -474,7 +479,7 @@ _mesa_create_visual( GLboolean rgbFlag, GLint accumAlphaBits, GLint numSamples ) { - GLvisual *vis = (GLvisual *) CALLOC( sizeof(GLvisual) ); + GLvisual *vis = (GLvisual *) _mesa_calloc(sizeof(GLvisual)); if (vis) { if (!_mesa_initialize_visual(vis, rgbFlag, dbFlag, stereoFlag, redBits, greenBits, blueBits, alphaBits, @@ -482,7 +487,7 @@ _mesa_create_visual( GLboolean rgbFlag, accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits, numSamples)) { - FREE(vis); + _mesa_free(vis); return NULL; } } @@ -491,13 +496,12 @@ _mesa_create_visual( GLboolean rgbFlag, /** * Makes some sanity checks and fills in the fields of the - * GLvisual structure with the given parameters. - * + * GLvisual object with the given parameters. If the caller needs + * to set additional fields, he should just probably init the whole GLvisual + * object himself. * \return GL_TRUE on success, or GL_FALSE on failure. * * \sa _mesa_create_visual() above for the parameter description. - * - * \note Need to add params for level and numAuxBuffers (at least) */ GLboolean _mesa_initialize_visual( GLvisual *vis, @@ -519,30 +523,16 @@ _mesa_initialize_visual( GLvisual *vis, { assert(vis); - /* This is to catch bad values from device drivers not updated for - * Mesa 3.3. Some device drivers just passed 1. That's a REALLY - * bad value now (a 1-bit depth buffer!?!). - */ - assert(depthBits == 0 || depthBits > 1); - if (depthBits < 0 || depthBits > 32) { return GL_FALSE; } - if (stencilBits < 0 || stencilBits > (GLint) (8 * sizeof(GLstencil))) { - return GL_FALSE; - } - if (accumRedBits < 0 || accumRedBits > (GLint) (8 * sizeof(GLaccum))) { - return GL_FALSE; - } - if (accumGreenBits < 0 || accumGreenBits > (GLint) (8 * sizeof(GLaccum))) { - return GL_FALSE; - } - if (accumBlueBits < 0 || accumBlueBits > (GLint) (8 * sizeof(GLaccum))) { - return GL_FALSE; - } - if (accumAlphaBits < 0 || accumAlphaBits > (GLint) (8 * sizeof(GLaccum))) { + if (stencilBits < 0 || stencilBits > STENCIL_BITS) { return GL_FALSE; } + assert(accumRedBits >= 0); + assert(accumGreenBits >= 0); + assert(accumBlueBits >= 0); + assert(accumAlphaBits >= 0); vis->rgbMode = rgbFlag; vis->doubleBufferMode = dbFlag; @@ -552,14 +542,16 @@ _mesa_initialize_visual( GLvisual *vis, vis->greenBits = greenBits; vis->blueBits = blueBits; vis->alphaBits = alphaBits; + vis->rgbBits = redBits + greenBits + blueBits; vis->indexBits = indexBits; vis->depthBits = depthBits; - vis->accumRedBits = (accumRedBits > 0) ? (8 * sizeof(GLaccum)) : 0; - vis->accumGreenBits = (accumGreenBits > 0) ? (8 * sizeof(GLaccum)) : 0; - vis->accumBlueBits = (accumBlueBits > 0) ? (8 * sizeof(GLaccum)) : 0; - vis->accumAlphaBits = (accumAlphaBits > 0) ? (8 * sizeof(GLaccum)) : 0; - vis->stencilBits = (stencilBits > 0) ? (8 * sizeof(GLstencil)) : 0; + vis->stencilBits = stencilBits; + + vis->accumRedBits = accumRedBits; + vis->accumGreenBits = accumGreenBits; + vis->accumBlueBits = accumBlueBits; + vis->accumAlphaBits = accumAlphaBits; vis->haveAccumBuffer = accumRedBits > 0; vis->haveDepthBuffer = depthBits > 0; @@ -568,6 +560,7 @@ _mesa_initialize_visual( GLvisual *vis, vis->numAuxBuffers = 0; vis->level = 0; vis->pixmapMode = 0; + vis->sampleBuffers = numSamples > 0 ? 1 : 0; vis->samples = numSamples; return GL_TRUE; @@ -584,161 +577,7 @@ _mesa_initialize_visual( GLvisual *vis, void _mesa_destroy_visual( GLvisual *vis ) { - FREE(vis); -} - -/*@}*/ - - -/**********************************************************************/ -/** \name GL Framebuffer allocation/destruction */ -/**********************************************************************/ -/*@{*/ - -/** - * Allocate a GLframebuffer structure and initializes it via - * _mesa_initialize_framebuffer(). - * - * A GLframebuffer is a structure which encapsulates the depth, stencil and - * accum buffers and related parameters. - * - * Note that the actual depth/stencil/accum/etc buffers are not allocated - * at this time. It's up to the device driver and/or swrast module to - * allocate them as needed. - * - * \param visual a GLvisual pointer (we copy the struct contents) - * \param softwareDepth create/use a software depth buffer? - * \param softwareStencil create/use a software stencil buffer? - * \param softwareAccum create/use a software accum buffer? - * \param softwareAlpha create/use a software alpha buffer? - * - * \return pointer to new GLframebuffer struct or NULL if error. - * - * \note Need to add softwareAuxBuffers parameter. - */ -GLframebuffer * -_mesa_create_framebuffer( const GLvisual *visual, - GLboolean softwareDepth, - GLboolean softwareStencil, - GLboolean softwareAccum, - GLboolean softwareAlpha ) -{ - GLframebuffer *buffer = CALLOC_STRUCT(gl_frame_buffer); - assert(visual); - if (buffer) { - _mesa_initialize_framebuffer(buffer, visual, - softwareDepth, softwareStencil, - softwareAccum, softwareAlpha ); - } - return buffer; -} - - -/** - * Makes some sanity checks and fills in the fields of the - * GLframebuffer structure with the given parameters. - * - * \sa _mesa_create_framebuffer() above for the parameter description. - */ -void -_mesa_initialize_framebuffer( GLframebuffer *buffer, - const GLvisual *visual, - GLboolean softwareDepth, - GLboolean softwareStencil, - GLboolean softwareAccum, - GLboolean softwareAlpha ) -{ - GLboolean softwareAux = GL_FALSE; - assert(buffer); - assert(visual); - - _mesa_bzero(buffer, sizeof(GLframebuffer)); - - /* sanity checks */ - if (softwareDepth ) { - assert(visual->depthBits > 0); - } - if (softwareStencil) { - assert(visual->stencilBits > 0); - } - if (softwareAccum) { - assert(visual->rgbMode); - assert(visual->accumRedBits > 0); - assert(visual->accumGreenBits > 0); - assert(visual->accumBlueBits > 0); - } - if (softwareAlpha) { - assert(visual->rgbMode); - assert(visual->alphaBits > 0); - } - - buffer->Visual = *visual; - buffer->UseSoftwareDepthBuffer = softwareDepth; - buffer->UseSoftwareStencilBuffer = softwareStencil; - buffer->UseSoftwareAccumBuffer = softwareAccum; - buffer->UseSoftwareAlphaBuffers = softwareAlpha; - buffer->UseSoftwareAuxBuffers = softwareAux; -} - - -/** - * Free a framebuffer struct and its buffers. - * - * Calls _mesa_free_framebuffer_data() and frees the structure. - */ -void -_mesa_destroy_framebuffer( GLframebuffer *buffer ) -{ - if (buffer) { - _mesa_free_framebuffer_data(buffer); - FREE(buffer); - } -} - - -/** - * Free the data hanging off of \p buffer, but not \p buffer itself. - * - * \param buffer framebuffer. - * - * Frees all the buffers associated with the structure. - */ -void -_mesa_free_framebuffer_data( GLframebuffer *buffer ) -{ - if (!buffer) - return; - - if (buffer->UseSoftwareDepthBuffer && buffer->DepthBuffer) { - MESA_PBUFFER_FREE( buffer->DepthBuffer ); - buffer->DepthBuffer = NULL; - } - if (buffer->UseSoftwareAccumBuffer && buffer->Accum) { - MESA_PBUFFER_FREE( buffer->Accum ); - buffer->Accum = NULL; - } - if (buffer->UseSoftwareStencilBuffer && buffer->Stencil) { - MESA_PBUFFER_FREE( buffer->Stencil ); - buffer->Stencil = NULL; - } - if (buffer->UseSoftwareAlphaBuffers){ - if (buffer->FrontLeftAlpha) { - MESA_PBUFFER_FREE( buffer->FrontLeftAlpha ); - buffer->FrontLeftAlpha = NULL; - } - if (buffer->BackLeftAlpha) { - MESA_PBUFFER_FREE( buffer->BackLeftAlpha ); - buffer->BackLeftAlpha = NULL; - } - if (buffer->FrontRightAlpha) { - MESA_PBUFFER_FREE( buffer->FrontRightAlpha ); - buffer->FrontRightAlpha = NULL; - } - if (buffer->BackRightAlpha) { - MESA_PBUFFER_FREE( buffer->BackRightAlpha ); - buffer->BackRightAlpha = NULL; - } - } + _mesa_free(vis); } /*@}*/ @@ -767,7 +606,7 @@ _glthread_DECLARE_STATIC_MUTEX(OneTimeLock); * and sets the glapi callbacks if the \c MESA_DEBUG environment variable is * defined. * - * \sa _mesa_init_lists(), _math_init(). + * \sa _math_init(). */ static void one_time_init( GLcontext *ctx ) @@ -786,8 +625,6 @@ one_time_init( GLcontext *ctx ) assert( sizeof(GLint) == 4 ); assert( sizeof(GLuint) == 4 ); - _mesa_init_lists(); - #if _HAVE_FULL_GL _math_init(); @@ -801,20 +638,15 @@ one_time_init( GLcontext *ctx ) #endif if (_mesa_getenv("MESA_DEBUG")) { _glapi_noop_enable_warnings(GL_TRUE); -#ifndef GLX_DIRECT_RENDERING - /* libGL from before 2002/06/28 don't have this function. Someday, - * when newer libGL libs are common, remove the #ifdef test. This - * only serves to print warnings when calling undefined GL functions. - */ _glapi_set_warning_func( (_glapi_warning_func) _mesa_warning ); -#endif } else { _glapi_noop_enable_warnings(GL_FALSE); } #if defined(DEBUG) && defined(__DATE__) && defined(__TIME__) - _mesa_debug(ctx, "Mesa DEBUG build %s %s\n", __DATE__, __TIME__); + _mesa_debug(ctx, "Mesa %s DEBUG build %s %s\n", + MESA_VERSION_STRING, __DATE__, __TIME__); #endif alreadyCalled = GL_TRUE; @@ -860,12 +692,21 @@ alloc_shared_state( GLcontext *ctx ) goto cleanup; #endif #if FEATURE_ATI_fragment_shader - ss->DefaultFragmentShader = ctx->Driver.NewProgram(ctx, GL_FRAGMENT_SHADER_ATI, 0); + ss->ATIShaders = _mesa_NewHashTable(); + ss->DefaultFragmentShader = _mesa_new_ati_fragment_shader(ctx, 0); if (!ss->DefaultFragmentShader) goto cleanup; #endif +#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object ss->BufferObjects = _mesa_NewHashTable(); +#endif + + ss->ArrayObjects = _mesa_NewHashTable(); + +#if FEATURE_ARB_shader_objects + ss->GL2Objects = _mesa_NewHashTable (); +#endif ss->Default1D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_1D); if (!ss->Default1D) @@ -894,6 +735,20 @@ alloc_shared_state( GLcontext *ctx ) ss->DefaultCubeMap->RefCount += MAX_TEXTURE_IMAGE_UNITS; ss->DefaultRect->RefCount += MAX_TEXTURE_IMAGE_UNITS; + _glthread_INIT_MUTEX(ss->TexMutex); + ss->TextureStateStamp = 0; + + +#if FEATURE_EXT_framebuffer_object + ss->FrameBuffers = _mesa_NewHashTable(); + if (!ss->FrameBuffers) + goto cleanup; + ss->RenderBuffers = _mesa_NewHashTable(); + if (!ss->RenderBuffers) + goto cleanup; +#endif + + return GL_TRUE; cleanup: @@ -916,13 +771,28 @@ alloc_shared_state( GLcontext *ctx ) #endif #if FEATURE_ATI_fragment_shader if (ss->DefaultFragmentShader) - ctx->Driver.DeleteProgram(ctx, ss->DefaultFragmentShader); + _mesa_delete_ati_fragment_shader(ctx, ss->DefaultFragmentShader); #endif -#if FEATURE_ARB_vertex_buffer_object +#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object if (ss->BufferObjects) _mesa_DeleteHashTable(ss->BufferObjects); #endif + if (ss->ArrayObjects) + _mesa_DeleteHashTable (ss->ArrayObjects); + +#if FEATURE_ARB_shader_objects + if (ss->GL2Objects) + _mesa_DeleteHashTable (ss->GL2Objects); +#endif + +#if FEATURE_EXT_framebuffer_object + if (ss->FrameBuffers) + _mesa_DeleteHashTable(ss->FrameBuffers); + if (ss->RenderBuffers) + _mesa_DeleteHashTable(ss->RenderBuffers); +#endif + if (ss->Default1D) (*ctx->Driver.DeleteTexture)(ctx, ss->Default1D); if (ss->Default2D) @@ -938,8 +808,87 @@ alloc_shared_state( GLcontext *ctx ) return GL_FALSE; } + /** - * Deallocate a shared state context and all children structures. + * Callback for deleting a display list. Called by _mesa_HashDeleteAll(). + */ +static void +delete_displaylist_cb(GLuint id, void *data, void *userData) +{ + struct mesa_display_list *list = (struct mesa_display_list *) data; + GLcontext *ctx = (GLcontext *) userData; + _mesa_delete_list(ctx, list); +} + +/** + * Callback for deleting a texture object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_texture_cb(GLuint id, void *data, void *userData) +{ + struct gl_texture_object *texObj = (struct gl_texture_object *) data; + GLcontext *ctx = (GLcontext *) userData; + ctx->Driver.DeleteTexture(ctx, texObj); +} + +/** + * Callback for deleting a program object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_program_cb(GLuint id, void *data, void *userData) +{ + struct gl_program *prog = (struct gl_program *) data; + GLcontext *ctx = (GLcontext *) userData; + ctx->Driver.DeleteProgram(ctx, prog); +} + +/** + * Callback for deleting an ATI fragment shader object. + * Called by _mesa_HashDeleteAll(). + */ +static void +delete_fragshader_cb(GLuint id, void *data, void *userData) +{ + struct ati_fragment_shader *shader = (struct ati_fragment_shader *) data; + GLcontext *ctx = (GLcontext *) userData; + _mesa_delete_ati_fragment_shader(ctx, shader); +} + +/** + * Callback for deleting a buffer object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_bufferobj_cb(GLuint id, void *data, void *userData) +{ + struct gl_buffer_object *bufObj = (struct gl_buffer_object *) data; + GLcontext *ctx = (GLcontext *) userData; + ctx->Driver.DeleteBuffer(ctx, bufObj); +} + +/** + * Callback for deleting an array object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_arrayobj_cb(GLuint id, void *data, void *userData) +{ + struct gl_array_object *arrayObj = (struct gl_array_object *) data; + GLcontext *ctx = (GLcontext *) userData; + _mesa_delete_array_object(ctx, arrayObj); +} + +/** + * Callback for deleting an shader object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_shaderobj_cb(GLuint id, void *data, void *userData) +{ + /* XXX probably need to fix this */ + _mesa_free(data); +} + + +/** + * Deallocate a shared state object and all children structures. * * \param ctx GL context. * \param ss shared state pointer. @@ -953,57 +902,28 @@ alloc_shared_state( GLcontext *ctx ) static void free_shared_state( GLcontext *ctx, struct gl_shared_state *ss ) { - /* Free display lists */ - while (1) { - GLuint list = _mesa_HashFirstEntry(ss->DisplayList); - if (list) { - _mesa_destroy_list(ctx, list); - } - else { - break; - } - } + /* + * Free display lists + */ + _mesa_HashDeleteAll(ss->DisplayList, delete_displaylist_cb, ctx); _mesa_DeleteHashTable(ss->DisplayList); - /* Free texture objects */ + /* + * Free texture objects + */ ASSERT(ctx->Driver.DeleteTexture); /* the default textures */ - (*ctx->Driver.DeleteTexture)(ctx, ss->Default1D); - (*ctx->Driver.DeleteTexture)(ctx, ss->Default2D); - (*ctx->Driver.DeleteTexture)(ctx, ss->Default3D); - (*ctx->Driver.DeleteTexture)(ctx, ss->DefaultCubeMap); - (*ctx->Driver.DeleteTexture)(ctx, ss->DefaultRect); + ctx->Driver.DeleteTexture(ctx, ss->Default1D); + ctx->Driver.DeleteTexture(ctx, ss->Default2D); + ctx->Driver.DeleteTexture(ctx, ss->Default3D); + ctx->Driver.DeleteTexture(ctx, ss->DefaultCubeMap); + ctx->Driver.DeleteTexture(ctx, ss->DefaultRect); /* all other textures */ - while (1) { - GLuint texName = _mesa_HashFirstEntry(ss->TexObjects); - if (texName) { - struct gl_texture_object *texObj = (struct gl_texture_object *) - _mesa_HashLookup(ss->TexObjects, texName); - ASSERT(texObj); - (*ctx->Driver.DeleteTexture)(ctx, texObj); - _mesa_HashRemove(ss->TexObjects, texName); - } - else { - break; - } - } + _mesa_HashDeleteAll(ss->TexObjects, delete_texture_cb, ctx); _mesa_DeleteHashTable(ss->TexObjects); -#if FEATURE_NV_vertex_program - /* Free vertex programs */ - while (1) { - GLuint prog = _mesa_HashFirstEntry(ss->Programs); - if (prog) { - struct program *p = (struct program *) _mesa_HashLookup(ss->Programs, - prog); - ASSERT(p); - ctx->Driver.DeleteProgram(ctx, p); - _mesa_HashRemove(ss->Programs, prog); - } - else { - break; - } - } +#if defined(FEATURE_NV_vertex_program) || defined(FEATURE_NV_fragment_program) + _mesa_HashDeleteAll(ss->Programs, delete_program_cb, ctx); _mesa_DeleteHashTable(ss->Programs); #endif #if FEATURE_ARB_vertex_program @@ -1012,16 +932,34 @@ free_shared_state( GLcontext *ctx, struct gl_shared_state *ss ) #if FEATURE_ARB_fragment_program _mesa_delete_program(ctx, ss->DefaultFragmentProgram); #endif + #if FEATURE_ATI_fragment_shader - _mesa_delete_program(ctx, ss->DefaultFragmentShader); + _mesa_HashDeleteAll(ss->ATIShaders, delete_fragshader_cb, ctx); + _mesa_DeleteHashTable(ss->ATIShaders); + _mesa_delete_ati_fragment_shader(ctx, ss->DefaultFragmentShader); #endif -#if FEATURE_ARB_vertex_buffer_object +#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object + _mesa_HashDeleteAll(ss->BufferObjects, delete_bufferobj_cb, ctx); _mesa_DeleteHashTable(ss->BufferObjects); #endif + + _mesa_HashDeleteAll(ss->ArrayObjects, delete_arrayobj_cb, ctx); + _mesa_DeleteHashTable(ss->ArrayObjects); + +#if FEATURE_ARB_shader_objects + _mesa_HashDeleteAll(ss->GL2Objects, delete_shaderobj_cb, ctx); + _mesa_DeleteHashTable(ss->GL2Objects); +#endif + +#if FEATURE_EXT_framebuffer_object + _mesa_DeleteHashTable(ss->FrameBuffers); + _mesa_DeleteHashTable(ss->RenderBuffers); +#endif + _glthread_DESTROY_MUTEX(ss->Mutex); - FREE(ss); + _mesa_free(ss); } @@ -1033,22 +971,39 @@ _mesa_init_current( GLcontext *ctx ) { GLuint i; - /* Current group */ + /* Init all to (0,0,0,1) */ for (i = 0; i < VERT_ATTRIB_MAX; i++) { ASSIGN_4V( ctx->Current.Attrib[i], 0.0, 0.0, 0.0, 1.0 ); } - /* special cases: */ + + /* redo special cases: */ ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_WEIGHT], 1.0, 0.0, 0.0, 1.0 ); ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_NORMAL], 0.0, 0.0, 1.0, 1.0 ); ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR0], 1.0, 1.0, 1.0, 1.0 ); ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_COLOR1], 0.0, 0.0, 0.0, 1.0 ); ASSIGN_4V( ctx->Current.Attrib[VERT_ATTRIB_FOG], 0.0, 0.0, 0.0, 0.0 ); - - ctx->Current.Index = 1; + ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0] = 1.0; ctx->Current.EdgeFlag = GL_TRUE; } +/** + * Init vertex/fragment program native limits from logical limits. + */ +static void +init_natives(struct gl_program_constants *prog) +{ + prog->MaxNativeInstructions = prog->MaxInstructions; + prog->MaxNativeAluInstructions = prog->MaxAluInstructions; + prog->MaxNativeTexInstructions = prog->MaxTexInstructions; + prog->MaxNativeTexIndirections = prog->MaxTexIndirections; + prog->MaxNativeAttribs = prog->MaxAttribs; + prog->MaxNativeTemps = prog->MaxTemps; + prog->MaxNativeAddressRegs = prog->MaxAddressRegs; + prog->MaxNativeParameters = prog->MaxParameters; +} + + /** * Initialize fields of gl_constants (aka ctx->Const.*). * Use defaults from config.h. The device drivers will often override @@ -1062,14 +1017,18 @@ _mesa_init_constants( GLcontext *ctx ) assert(MAX_TEXTURE_LEVELS >= MAX_3D_TEXTURE_LEVELS); assert(MAX_TEXTURE_LEVELS >= MAX_CUBE_TEXTURE_LEVELS); + assert(MAX_TEXTURE_UNITS >= MAX_TEXTURE_COORD_UNITS); + assert(MAX_TEXTURE_UNITS >= MAX_TEXTURE_IMAGE_UNITS); + /* Constants, may be overriden (usually only reduced) by device drivers */ ctx->Const.MaxTextureLevels = MAX_TEXTURE_LEVELS; ctx->Const.Max3DTextureLevels = MAX_3D_TEXTURE_LEVELS; ctx->Const.MaxCubeTextureLevels = MAX_CUBE_TEXTURE_LEVELS; ctx->Const.MaxTextureRectSize = MAX_TEXTURE_RECT_SIZE; - ctx->Const.MaxTextureUnits = MAX_TEXTURE_UNITS; ctx->Const.MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS; ctx->Const.MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS; + ctx->Const.MaxTextureUnits = MIN2(ctx->Const.MaxTextureCoordUnits, + ctx->Const.MaxTextureImageUnits); ctx->Const.MaxTextureMaxAnisotropy = MAX_TEXTURE_MAX_ANISOTROPY; ctx->Const.MaxTextureLodBias = MAX_TEXTURE_LOD_BIAS; ctx->Const.MaxArrayLockSize = MAX_ARRAY_LOCK_SIZE; @@ -1094,44 +1053,96 @@ _mesa_init_constants( GLcontext *ctx ) ctx->Const.MaxViewportWidth = MAX_WIDTH; ctx->Const.MaxViewportHeight = MAX_HEIGHT; #if FEATURE_ARB_vertex_program - ctx->Const.MaxVertexProgramInstructions = MAX_NV_VERTEX_PROGRAM_INSTRUCTIONS; - ctx->Const.MaxVertexProgramAttribs = MAX_NV_VERTEX_PROGRAM_INPUTS; - ctx->Const.MaxVertexProgramTemps = MAX_NV_VERTEX_PROGRAM_TEMPS; - ctx->Const.MaxVertexProgramLocalParams = MAX_NV_VERTEX_PROGRAM_PARAMS; - ctx->Const.MaxVertexProgramEnvParams = MAX_NV_VERTEX_PROGRAM_PARAMS;/*XXX*/ - ctx->Const.MaxVertexProgramAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS; + ctx->Const.VertexProgram.MaxInstructions = MAX_NV_VERTEX_PROGRAM_INSTRUCTIONS; + ctx->Const.VertexProgram.MaxAluInstructions = 0; + ctx->Const.VertexProgram.MaxTexInstructions = 0; + ctx->Const.VertexProgram.MaxTexIndirections = 0; + ctx->Const.VertexProgram.MaxAttribs = MAX_NV_VERTEX_PROGRAM_INPUTS; + ctx->Const.VertexProgram.MaxTemps = MAX_NV_VERTEX_PROGRAM_TEMPS; + ctx->Const.VertexProgram.MaxParameters = MAX_NV_VERTEX_PROGRAM_PARAMS; + ctx->Const.VertexProgram.MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS; + ctx->Const.VertexProgram.MaxEnvParams = MAX_NV_VERTEX_PROGRAM_PARAMS; + ctx->Const.VertexProgram.MaxAddressRegs = MAX_VERTEX_PROGRAM_ADDRESS_REGS; + ctx->Const.VertexProgram.MaxUniformComponents = MAX_VERTEX_UNIFORM_COMPONENTS; + init_natives(&ctx->Const.VertexProgram); #endif #if FEATURE_ARB_fragment_program - ctx->Const.MaxFragmentProgramInstructions = MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS; - ctx->Const.MaxFragmentProgramAttribs = MAX_NV_FRAGMENT_PROGRAM_INPUTS; - ctx->Const.MaxFragmentProgramTemps = MAX_NV_FRAGMENT_PROGRAM_TEMPS; - ctx->Const.MaxFragmentProgramLocalParams = MAX_NV_FRAGMENT_PROGRAM_PARAMS; - ctx->Const.MaxFragmentProgramEnvParams = MAX_NV_FRAGMENT_PROGRAM_PARAMS;/*XXX*/ - ctx->Const.MaxFragmentProgramAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS; - ctx->Const.MaxFragmentProgramAluInstructions = MAX_FRAGMENT_PROGRAM_ALU_INSTRUCTIONS; - ctx->Const.MaxFragmentProgramTexInstructions = MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS; - ctx->Const.MaxFragmentProgramTexIndirections = MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS; + ctx->Const.FragmentProgram.MaxInstructions = MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS; + ctx->Const.FragmentProgram.MaxAluInstructions = MAX_FRAGMENT_PROGRAM_ALU_INSTRUCTIONS; + ctx->Const.FragmentProgram.MaxTexInstructions = MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS; + ctx->Const.FragmentProgram.MaxTexIndirections = MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS; + ctx->Const.FragmentProgram.MaxAttribs = MAX_NV_FRAGMENT_PROGRAM_INPUTS; + ctx->Const.FragmentProgram.MaxTemps = MAX_NV_FRAGMENT_PROGRAM_TEMPS; + ctx->Const.FragmentProgram.MaxParameters = MAX_NV_FRAGMENT_PROGRAM_PARAMS; + ctx->Const.FragmentProgram.MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS; + ctx->Const.FragmentProgram.MaxEnvParams = MAX_NV_FRAGMENT_PROGRAM_PARAMS; + ctx->Const.FragmentProgram.MaxAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS; + ctx->Const.FragmentProgram.MaxUniformComponents = MAX_FRAGMENT_UNIFORM_COMPONENTS; + init_natives(&ctx->Const.FragmentProgram); #endif - ctx->Const.MaxProgramMatrices = MAX_PROGRAM_MATRICES; ctx->Const.MaxProgramMatrixStackDepth = MAX_PROGRAM_MATRIX_STACK_DEPTH; /* If we're running in the X server, do bounds checking to prevent * segfaults and server crashes! */ -#if defined(XFree86LOADER) && defined(IN_MODULE) +#if defined(XFree86Server) ctx->Const.CheckArrayBounds = GL_TRUE; #else ctx->Const.CheckArrayBounds = GL_FALSE; #endif + /* GL_ARB_draw_buffers */ ctx->Const.MaxDrawBuffers = MAX_DRAW_BUFFERS; + /* GL_OES_read_format */ ctx->Const.ColorReadFormat = GL_RGBA; ctx->Const.ColorReadType = GL_UNSIGNED_BYTE; +#if FEATURE_EXT_framebuffer_object + ctx->Const.MaxColorAttachments = MAX_COLOR_ATTACHMENTS; + ctx->Const.MaxRenderbufferSize = MAX_WIDTH; +#endif + +#if FEATURE_ARB_vertex_shader + ctx->Const.MaxVertexTextureImageUnits = MAX_VERTEX_TEXTURE_IMAGE_UNITS; + ctx->Const.MaxVaryingFloats = MAX_VARYING_FLOATS; +#endif + /* sanity checks */ - ASSERT(ctx->Const.MaxTextureUnits == MAX2(ctx->Const.MaxTextureImageUnits, ctx->Const.MaxTextureCoordUnits)); + ASSERT(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.MaxTextureImageUnits, + ctx->Const.MaxTextureCoordUnits)); + ASSERT(ctx->Const.FragmentProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); + ASSERT(ctx->Const.VertexProgram.MaxLocalParams <= MAX_PROGRAM_LOCAL_PARAMS); +} + + +/** + * Do some sanity checks on the limits/constants for the given context. + * Only called the first time a context is bound. + */ +static void +check_context_limits(GLcontext *ctx) +{ + /* Many context limits/constants are limited by the size of + * internal arrays. + */ + assert(ctx->Const.MaxTextureImageUnits <= MAX_TEXTURE_IMAGE_UNITS); + assert(ctx->Const.MaxTextureCoordUnits <= MAX_TEXTURE_COORD_UNITS); + assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_IMAGE_UNITS); + assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_COORD_UNITS); + + assert(ctx->Const.MaxViewportWidth <= MAX_WIDTH); + assert(ctx->Const.MaxViewportHeight <= MAX_WIDTH); + + /* make sure largest texture image is <= MAX_WIDTH in size */ + assert((1 << (ctx->Const.MaxTextureLevels -1 )) <= MAX_WIDTH); + assert((1 << (ctx->Const.MaxCubeTextureLevels -1 )) <= MAX_WIDTH); + assert((1 << (ctx->Const.Max3DTextureLevels -1 )) <= MAX_WIDTH); + + assert(ctx->Const.MaxDrawBuffers <= MAX_DRAW_BUFFERS); + + /* XXX probably add more tests */ } @@ -1157,7 +1168,6 @@ init_attrib_groups( GLcontext *ctx ) /* Attribute Groups */ _mesa_init_accum( ctx ); _mesa_init_attrib( ctx ); - _mesa_init_buffers( ctx ); _mesa_init_buffer_objects( ctx ); _mesa_init_color( ctx ); _mesa_init_colortables( ctx ); @@ -1173,12 +1183,15 @@ init_attrib_groups( GLcontext *ctx ) _mesa_init_line( ctx ); _mesa_init_lighting( ctx ); _mesa_init_matrix( ctx ); - _mesa_init_occlude( ctx ); + _mesa_init_multisample( ctx ); _mesa_init_pixel( ctx ); _mesa_init_point( ctx ); _mesa_init_polygon( ctx ); _mesa_init_program( ctx ); + _mesa_init_query( ctx ); _mesa_init_rastpos( ctx ); + _mesa_init_scissor( ctx ); + _mesa_init_shaderobjects (ctx); _mesa_init_stencil( ctx ); _mesa_init_transform( ctx ); _mesa_init_varray( ctx ); @@ -1194,235 +1207,11 @@ init_attrib_groups( GLcontext *ctx ) ctx->NewState = _NEW_ALL; ctx->ErrorValue = (GLenum) GL_NO_ERROR; ctx->_Facing = 0; -#if CHAN_TYPE == GL_FLOAT - ctx->ClampFragmentColors = GL_FALSE; /* XXX temporary */ -#else - ctx->ClampFragmentColors = GL_TRUE; -#endif - ctx->ClampVertexColors = GL_TRUE; return GL_TRUE; } -/** - * If the DRI libGL.so library is old, it may not have the entrypoints for - * some recent OpenGL extensions. Dynamically add them now. - * If we're building stand-alone Mesa where libGL.so has both the dispatcher - * and driver code, this won't be an issue (and calling this function won't - * do any harm). - */ -static void -add_newer_entrypoints(void) -{ - unsigned i; - static const struct { - const char * const name; - unsigned offset; - } - newer_entrypoints[] = { - /* GL_ARB_window_pos aliases with GL_MESA_window_pos */ - { "glWindowPos2dARB", 513 }, - { "glWindowPos2dvARB", 514 }, - { "glWindowPos2fARB", 515 }, - { "glWindowPos2fvARB", 516 }, - { "glWindowPos2iARB", 517 }, - { "glWindowPos2ivARB", 518 }, - { "glWindowPos2sARB", 519 }, - { "glWindowPos2svARB", 520 }, - { "glWindowPos3dARB", 521 }, - { "glWindowPos3dvARB", 522 }, - { "glWindowPos3fARB", 523 }, - { "glWindowPos3fvARB", 524 }, - { "glWindowPos3iARB", 525 }, - { "glWindowPos3ivARB", 526 }, - { "glWindowPos3sARB", 527 }, - { "glWindowPos3svARB", 528 }, -#if FEATURE_NV_vertex_program - { "glAreProgramsResidentNV", 578 }, - { "glBindProgramNV", 579 }, - { "glDeleteProgramsNV", 580 }, - { "glExecuteProgramNV", 581 }, - { "glGenProgramsNV", 582 }, - { "glGetProgramParameterdvNV", 583 }, - { "glGetProgramParameterfvNV", 584 }, - { "glGetProgramivNV", 585 }, - { "glGetProgramStringNV", 586 }, - { "glGetTrackMatrixivNV", 587 }, - { "glGetVertexAttribdvNV", 588 }, - { "glGetVertexAttribfvNV", 589 }, - { "glGetVertexAttribivNV", 590 }, - { "glGetVertexAttribPointervNV", 591 }, - { "glIsProgramNV", 592 }, - { "glLoadProgramNV", 593 }, - { "glProgramParameter4dNV", 594 }, - { "glProgramParameter4dvNV", 595 }, - { "glProgramParameter4fNV", 596 }, - { "glProgramParameter4fvNV", 597 }, - { "glProgramParameters4dvNV", 598 }, - { "glProgramParameters4fvNV", 599 }, - { "glRequestResidentProgramsNV", 600 }, - { "glTrackMatrixNV", 601 }, - { "glVertexAttribPointerNV", 602 }, - { "glVertexAttrib1dNV", 603 }, - { "glVertexAttrib1dvNV", 604 }, - { "glVertexAttrib1fNV", 605 }, - { "glVertexAttrib1fvNV", 606 }, - { "glVertexAttrib1sNV", 607 }, - { "glVertexAttrib1svNV", 608 }, - { "glVertexAttrib2dNV", 609 }, - { "glVertexAttrib2dvNV", 610 }, - { "glVertexAttrib2fNV", 611 }, - { "glVertexAttrib2fvNV", 612 }, - { "glVertexAttrib2sNV", 613 }, - { "glVertexAttrib2svNV", 614 }, - { "glVertexAttrib3dNV", 615 }, - { "glVertexAttrib3dvNV", 616 }, - { "glVertexAttrib3fNV", 617 }, - { "glVertexAttrib3fvNV", 618 }, - { "glVertexAttrib3sNV", 619 }, - { "glVertexAttrib3svNV", 620 }, - { "glVertexAttrib4dNV", 621 }, - { "glVertexAttrib4dvNV", 622 }, - { "glVertexAttrib4fNV", 623 }, - { "glVertexAttrib4fvNV", 624 }, - { "glVertexAttrib4sNV", 625 }, - { "glVertexAttrib4svNV", 626 }, - { "glVertexAttrib4ubNV", 627 }, - { "glVertexAttrib4ubvNV", 628 }, - { "glVertexAttribs1dvNV", 629 }, - { "glVertexAttribs1fvNV", 630 }, - { "glVertexAttribs1svNV", 631 }, - { "glVertexAttribs2dvNV", 632 }, - { "glVertexAttribs2fvNV", 633 }, - { "glVertexAttribs2svNV", 634 }, - { "glVertexAttribs3dvNV", 635 }, - { "glVertexAttribs3fvNV", 636 }, - { "glVertexAttribs3svNV", 637 }, - { "glVertexAttribs4dvNV", 638 }, - { "glVertexAttribs4fvNV", 639 }, - { "glVertexAttribs4svNV", 640 }, - { "glVertexAttribs4ubvNV", 641 }, -#endif - { "glPointParameteriNV", 642 }, - { "glPointParameterivNV", 643 }, - { "glMultiDrawArraysEXT", 644 }, - { "glMultiDrawElementsEXT", 645 }, - { "glMultiDrawArraysSUN", _gloffset_MultiDrawArraysEXT }, - { "glMultiDrawElementsSUN", _gloffset_MultiDrawElementsEXT }, - { "glActiveStencilFaceEXT", 646 }, -#if FEATURE_NV_fence - { "glDeleteFencesNV", 647 }, - { "glGenFencesNV", 648 }, - { "glIsFenceNV", 649 }, - { "glTestFenceNV", 650 }, - { "glGetFenceivNV", 651 }, - { "glFinishFenceNV", 652 }, - { "glSetFenceNV", 653 }, -#endif -#if FEATURE_NV_fragment_program - { "glProgramNamedParameter4fNV", 682 }, - { "glProgramNamedParameter4dNV", 683 }, - { "glProgramNamedParameter4fvNV", 683 }, - { "glProgramNamedParameter4dvNV", 684 }, - { "glGetProgramNamedParameterfvNV", 685 }, - { "glGetProgramNamedParameterdvNV", 686 }, -#endif -#if FEATURE_ARB_vertex_program - { "glVertexAttrib1sARB", _gloffset_VertexAttrib1sNV }, - { "glVertexAttrib1fARB", _gloffset_VertexAttrib1fNV }, - { "glVertexAttrib1dARB", _gloffset_VertexAttrib1dNV }, - { "glVertexAttrib2sARB", _gloffset_VertexAttrib2sNV }, - { "glVertexAttrib2fARB", _gloffset_VertexAttrib2fNV }, - { "glVertexAttrib2dARB", _gloffset_VertexAttrib2dNV }, - { "glVertexAttrib3sARB", _gloffset_VertexAttrib3sNV }, - { "glVertexAttrib3fARB", _gloffset_VertexAttrib3fNV }, - { "glVertexAttrib3dARB", _gloffset_VertexAttrib3dNV }, - { "glVertexAttrib4sARB", _gloffset_VertexAttrib4sNV }, - { "glVertexAttrib4fARB", _gloffset_VertexAttrib4fNV }, - { "glVertexAttrib4dARB", _gloffset_VertexAttrib4dNV }, - { "glVertexAttrib4NubARB", _gloffset_VertexAttrib4ubNV }, - { "glVertexAttrib1svARB", _gloffset_VertexAttrib1svNV }, - { "glVertexAttrib1fvARB", _gloffset_VertexAttrib1fvNV }, - { "glVertexAttrib1dvARB", _gloffset_VertexAttrib1dvNV }, - { "glVertexAttrib2svARB", _gloffset_VertexAttrib2svNV }, - { "glVertexAttrib2fvARB", _gloffset_VertexAttrib2fvNV }, - { "glVertexAttrib2dvARB", _gloffset_VertexAttrib2dvNV }, - { "glVertexAttrib3svARB", _gloffset_VertexAttrib3svNV }, - { "glVertexAttrib3fvARB", _gloffset_VertexAttrib3fvNV }, - { "glVertexAttrib3dvARB", _gloffset_VertexAttrib3dvNV }, - { "glVertexAttrib4bvARB", _gloffset_VertexAttrib4bvARB }, - { "glVertexAttrib4svARB", _gloffset_VertexAttrib4svNV }, - { "glVertexAttrib4ivARB", _gloffset_VertexAttrib4ivARB }, - { "glVertexAttrib4ubvARB", _gloffset_VertexAttrib4ubvARB }, - { "glVertexAttrib4usvARB", _gloffset_VertexAttrib4usvARB }, - { "glVertexAttrib4uivARB", _gloffset_VertexAttrib4uivARB }, - { "glVertexAttrib4fvARB", _gloffset_VertexAttrib4fvNV }, - { "glVertexAttrib4dvARB", _gloffset_VertexAttrib4dvNV }, - { "glVertexAttrib4NbvARB", _gloffset_VertexAttrib4NbvARB }, - { "glVertexAttrib4NsvARB", _gloffset_VertexAttrib4NsvARB }, - { "glVertexAttrib4NivARB", _gloffset_VertexAttrib4NivARB }, - { "glVertexAttrib4NubvARB", _gloffset_VertexAttrib4ubvNV }, - { "glVertexAttrib4NusvARB", _gloffset_VertexAttrib4NusvARB }, - { "glVertexAttrib4NuivARB", _gloffset_VertexAttrib4NuivARB }, - { "glVertexAttribPointerARB", _gloffset_VertexAttribPointerARB }, - { "glEnableVertexAttribArrayARB", _gloffset_EnableVertexAttribArrayARB }, - { "glDisableVertexAttribArrayARB", _gloffset_DisableVertexAttribArrayARB }, - { "glProgramStringARB", _gloffset_ProgramStringARB }, - { "glBindProgramARB", _gloffset_BindProgramNV }, - { "glDeleteProgramsARB", _gloffset_DeleteProgramsNV }, - { "glGenProgramsARB", _gloffset_GenProgramsNV }, - { "glIsProgramARB", _gloffset_IsProgramNV }, - { "glProgramEnvParameter4dARB", _gloffset_ProgramEnvParameter4dARB }, - { "glProgramEnvParameter4dvARB", _gloffset_ProgramEnvParameter4dvARB }, - { "glProgramEnvParameter4fARB", _gloffset_ProgramEnvParameter4fARB }, - { "glProgramEnvParameter4fvARB", _gloffset_ProgramEnvParameter4fvARB }, - { "glProgramLocalParameter4dARB", _gloffset_ProgramLocalParameter4dARB }, - { "glProgramLocalParameter4dvARB", _gloffset_ProgramLocalParameter4dvARB }, - { "glProgramLocalParameter4fARB", _gloffset_ProgramLocalParameter4fARB }, - { "glProgramLocalParameter4fvARB", _gloffset_ProgramLocalParameter4fvARB }, - { "glGetProgramEnvParameterdvARB", _gloffset_GetProgramEnvParameterdvARB }, - { "glGetProgramEnvParameterfvARB", _gloffset_GetProgramEnvParameterfvARB }, - { "glGetProgramLocalParameterdvARB", _gloffset_GetProgramLocalParameterdvARB }, - { "glGetProgramLocalParameterfvARB", _gloffset_GetProgramLocalParameterfvARB }, - { "glGetProgramivARB", _gloffset_GetProgramivARB }, - { "glGetProgramStringARB", _gloffset_GetProgramStringARB }, - { "glGetVertexAttribdvARB", _gloffset_GetVertexAttribdvNV }, - { "glGetVertexAttribfvARB", _gloffset_GetVertexAttribfvNV }, - { "glGetVertexAttribivARB", _gloffset_GetVertexAttribivNV }, - { "glGetVertexAttribPointervARB", _gloffset_GetVertexAttribPointervNV }, -#endif - { "glMultiModeDrawArraysIBM", _gloffset_MultiModeDrawArraysIBM }, - { "glMultiModeDrawElementsIBM", _gloffset_MultiModeDrawElementsIBM }, - /* GL_EXT_stencil_two_side */ - { "glActiveStencilFaceEXT", _gloffset_ActiveStencilFaceEXT }, - /* GL_ARB_draw_buffers */ - { "glDrawBuffersARB", _gloffset_DrawBuffersARB }, -#if FEATURE_ATI_fragment_shader - { "glGenFragmentShadersATI", _gloffset_GenFragmentShadersATI }, - { "glBindFragmentShaderATI", _gloffset_BindFragmentShaderATI }, - { "glDeleteFragmentShaderATI", _gloffset_DeleteFragmentShaderATI }, - { "glBeginFragmentShaderATI", _gloffset_BeginFragmentShaderATI }, - { "glEndFragmentShaderATI", _gloffset_EndFragmentShaderATI }, - { "glPassTexCoordATI", _gloffset_PassTexCoordATI }, - { "glSampleMapATI", _gloffset_SampleMapATI }, - { "glColorFragmentOp1ATI", _gloffset_ColorFragmentOp1ATI }, - { "glColorFragmentOp2ATI", _gloffset_ColorFragmentOp2ATI }, - { "glColorFragmentOp3ATI", _gloffset_ColorFragmentOp3ATI }, - { "glAlphaFragmentOp1ATI", _gloffset_AlphaFragmentOp1ATI }, - { "glAlphaFragmentOp2ATI", _gloffset_AlphaFragmentOp2ATI }, - { "glAlphaFragmentOp3ATI", _gloffset_AlphaFragmentOp3ATI }, - { "glSetFragmentShaderConstantATI", _gloffset_SetFragmentShaderConstantATI }, -#endif - }; - - for (i = 0; i < Elements(newer_entrypoints); i++ ) { - _glapi_add_entrypoint( newer_entrypoints[i].name, - newer_entrypoints[i].offset ); - } -} - - /** * This is the default function we plug into all dispatch table slots * This helps prevents a segfault when someone calls a GL function without @@ -1497,6 +1286,7 @@ _mesa_initialize_context( GLcontext *ctx, { ASSERT(driverContext); assert(driverFunctions->NewTextureObject); + assert(driverFunctions->FreeTexImageData); /* If the driver wants core Mesa to use special imports, it'll have to * override these defaults. @@ -1512,6 +1302,8 @@ _mesa_initialize_context( GLcontext *ctx, ctx->Visual = *visual; ctx->DrawBuffer = NULL; ctx->ReadBuffer = NULL; + ctx->WinSysDrawBuffer = NULL; + ctx->WinSysReadBuffer = NULL; /* Plug in driver functions and context pointer here. * This is important because when we call alloc_shared_state() below @@ -1540,9 +1332,6 @@ _mesa_initialize_context( GLcontext *ctx, return GL_FALSE; } - /* libGL ABI coordination */ - add_newer_entrypoints(); - /* setup the API dispatch tables */ ctx->Exec = alloc_dispatch_table(); ctx->Save = alloc_dispatch_table(); @@ -1562,6 +1351,15 @@ _mesa_initialize_context( GLcontext *ctx, ctx->TnlModule.SwapCount = 0; #endif + ctx->_MaintainTexEnvProgram = (_mesa_getenv("MESA_TEX_PROG") != NULL); + ctx->_UseTexEnvProgram = ctx->_MaintainTexEnvProgram; + + ctx->_MaintainTnlProgram = (_mesa_getenv("MESA_TNL_PROG") != NULL); + if (ctx->_MaintainTnlProgram) + ctx->_MaintainTexEnvProgram = 1; /* this is required... */ + + ctx->FirstTimeCurrent = GL_TRUE; + return GL_TRUE; } @@ -1619,7 +1417,7 @@ _mesa_free_context_data( GLcontext *ctx ) { /* if we're destroying the current context, unbind it first */ if (ctx == _mesa_get_current_context()) { - _mesa_make_current(NULL, NULL); + _mesa_make_current(NULL, NULL, NULL); } _mesa_free_lighting_data( ctx ); @@ -1629,11 +1427,12 @@ _mesa_free_context_data( GLcontext *ctx ) _mesa_free_viewport_data( ctx ); _mesa_free_colortables_data( ctx ); _mesa_free_program_data(ctx); - _mesa_free_occlude_data(ctx); + _mesa_free_query_data(ctx); #if FEATURE_ARB_vertex_buffer_object _mesa_delete_buffer_object(ctx, ctx->Array.NullBufferObj); #endif + _mesa_delete_array_object(ctx, ctx->Array.DefaultArrayObj); /* free dispatch tables */ _mesa_free(ctx->Exec); @@ -1650,7 +1449,7 @@ _mesa_free_context_data( GLcontext *ctx ) } if (ctx->Extensions.String) - FREE((void *) ctx->Extensions.String); + _mesa_free((void *) ctx->Extensions.String); } @@ -1666,7 +1465,7 @@ _mesa_destroy_context( GLcontext *ctx ) { if (ctx) { _mesa_free_context_data(ctx); - FREE( (void *) ctx ); + _mesa_free( (void *) ctx ); } } @@ -1721,7 +1520,7 @@ _mesa_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask ) if (mask & GL_LIGHTING_BIT) { GLuint i; /* begin with memcpy */ - MEMCPY( &dst->Light, &src->Light, sizeof(struct gl_light) ); + dst->Light = src->Light; /* fixup linked lists to prevent pointer insanity */ make_empty_list( &(dst->Light.EnabledList) ); for (i = 0; i < MAX_LIGHTS; i++) { @@ -1796,6 +1595,11 @@ _mesa_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask ) /** * Check if the given context can render into the given framebuffer * by checking visual attributes. + * + * XXX this may go away someday because we're moving toward more freedom + * in binding contexts to drawables with different visual attributes. + * The GL_EXT_f_b_o extension is prompting some of that. + * * \return GL_TRUE if compatible, GL_FALSE otherwise. */ static GLboolean @@ -1809,8 +1613,11 @@ check_compatible(const GLcontext *ctx, const GLframebuffer *buffer) if (ctxvis->rgbMode != bufvis->rgbMode) return GL_FALSE; +#if 0 + /* disabling this fixes the fgl_glxgears pbuffer demo */ if (ctxvis->doubleBufferMode && !bufvis->doubleBufferMode) return GL_FALSE; +#endif if (ctxvis->stereoMode && !bufvis->stereoMode) return GL_FALSE; if (ctxvis->haveAccumBuffer && !bufvis->haveAccumBuffer) @@ -1835,65 +1642,66 @@ check_compatible(const GLcontext *ctx, const GLframebuffer *buffer) /** - * Set the current context, binding the given frame buffer to the context. - * - * \param newCtx new GL context. - * \param buffer framebuffer. - * - * Calls _mesa_make_current2() with \p buffer as read and write framebuffer. + * Do one-time initialization for the given framebuffer. Specifically, + * ask the driver for the window's current size and update the framebuffer + * object to match. + * Really, the device driver should totally take care of this. */ -void -_mesa_make_current( GLcontext *newCtx, GLframebuffer *buffer ) +static void +initialize_framebuffer_size(GLcontext *ctx, GLframebuffer *fb) { - _mesa_make_current2( newCtx, buffer, buffer ); + GLuint width, height; + if (ctx->Driver.GetBufferSize) { + ctx->Driver.GetBufferSize(fb, &width, &height); + if (ctx->Driver.ResizeBuffers) + ctx->Driver.ResizeBuffers(ctx, fb, width, height); + fb->Initialized = GL_TRUE; + } } + /** - * Bind the given context to the given draw-buffer and read-buffer and - * make it the current context for this thread. + * Bind the given context to the given drawBuffer and readBuffer and + * make it the current context for the calling thread. + * We'll render into the drawBuffer and read pixels from the + * readBuffer (i.e. glRead/CopyPixels, glCopyTexImage, etc). * - * \param newCtx new GL context. If NULL then there will be no current GL - * context. - * \param drawBuffer draw framebuffer. - * \param readBuffer read framebuffer. - * - * Check that the context's and framebuffer's visuals are compatible, returning - * immediately otherwise. Sets the glapi current context via - * _glapi_set_context(). If \p newCtx is not NULL, associates \p drawBuffer and - * \p readBuffer with it and calls dd_function_table::ResizeBuffers if the buffers size has changed. - * Calls dd_function_table::MakeCurrent callback if defined. + * We check that the context's and framebuffer's visuals are compatible + * and return immediately if they're not. * - * When a context is bound by the first time and the \c MESA_INFO environment - * variable is set it calls print_info() as an aid for remote user - * troubleshooting. + * \param newCtx the new GL context. If NULL then there will be no current GL + * context. + * \param drawBuffer the drawing framebuffer + * \param readBuffer the reading framebuffer */ void -_mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer, - GLframebuffer *readBuffer ) +_mesa_make_current( GLcontext *newCtx, GLframebuffer *drawBuffer, + GLframebuffer *readBuffer ) { - if (MESA_VERBOSE) - _mesa_debug(newCtx, "_mesa_make_current2()\n"); + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(newCtx, "_mesa_make_current()\n"); /* Check that the context's and framebuffer's visuals are compatible. */ - if (newCtx && drawBuffer && newCtx->DrawBuffer != drawBuffer) { - if (!check_compatible(newCtx, drawBuffer)) + if (newCtx && drawBuffer && newCtx->WinSysDrawBuffer != drawBuffer) { + if (!check_compatible(newCtx, drawBuffer)) { + _mesa_warning(newCtx, + "MakeCurrent: incompatible visuals for context and drawbuffer"); return; + } } - if (newCtx && readBuffer && newCtx->ReadBuffer != readBuffer) { - if (!check_compatible(newCtx, readBuffer)) + if (newCtx && readBuffer && newCtx->WinSysReadBuffer != readBuffer) { + if (!check_compatible(newCtx, readBuffer)) { + _mesa_warning(newCtx, + "MakeCurrent: incompatible visuals for context and readbuffer"); return; + } } - /* We call this function periodically (just here for now) in - * order to detect when multithreading has begun. - */ - _glapi_check_multithread(); - + /* We used to call _glapi_check_multithread() here. Now do it in drivers */ _glapi_set_context((void *) newCtx); ASSERT(_mesa_get_current_context() == newCtx); - if (!newCtx) { _glapi_set_dispatch(NULL); /* none current */ } @@ -1902,50 +1710,65 @@ _mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer, if (drawBuffer && readBuffer) { /* TODO: check if newCtx and buffer's visual match??? */ - newCtx->DrawBuffer = drawBuffer; - newCtx->ReadBuffer = readBuffer; + + ASSERT(drawBuffer->Name == 0); + ASSERT(readBuffer->Name == 0); + newCtx->WinSysDrawBuffer = drawBuffer; + newCtx->WinSysReadBuffer = readBuffer; + + /* + * Only set the context's Draw/ReadBuffer fields if they're NULL + * or not bound to a user-created FBO. + */ + if (!newCtx->DrawBuffer || newCtx->DrawBuffer->Name == 0) { + newCtx->DrawBuffer = drawBuffer; + } + if (!newCtx->ReadBuffer || newCtx->ReadBuffer->Name == 0) { + newCtx->ReadBuffer = readBuffer; + } + newCtx->NewState |= _NEW_BUFFERS; +#if 1 + /* We want to get rid of these lines: */ + #if _HAVE_FULL_GL if (!drawBuffer->Initialized) { - /* get initial window size */ - GLuint bufWidth, bufHeight; - /* ask device driver for size of the buffer */ - (*newCtx->Driver.GetBufferSize)(drawBuffer, &bufWidth, &bufHeight); - /* set initial buffer size */ - drawBuffer->Width = bufWidth; - drawBuffer->Height = bufHeight; - newCtx->Driver.ResizeBuffers( drawBuffer ); - drawBuffer->Initialized = GL_TRUE; + initialize_framebuffer_size(newCtx, drawBuffer); + } + if (readBuffer != drawBuffer && !readBuffer->Initialized) { + initialize_framebuffer_size(newCtx, readBuffer); } - if (readBuffer != drawBuffer && !readBuffer->Initialized) { - /* get initial window size */ - GLuint bufWidth, bufHeight; - /* ask device driver for size of the buffer */ - (*newCtx->Driver.GetBufferSize)(readBuffer, &bufWidth, &bufHeight); - /* set initial buffer size */ - readBuffer->Width = bufWidth; - readBuffer->Height = bufHeight; - newCtx->Driver.ResizeBuffers( readBuffer ); - readBuffer->Initialized = GL_TRUE; - } + _mesa_resizebuffers(newCtx); #endif + +#else + /* We want the drawBuffer and readBuffer to be initialized by + * the driver. + * This generally means the Width and Height match the actual + * window size and the renderbuffers (both hardware and software + * based) are allocated to match. The later can generally be + * done with a call to _mesa_resize_framebuffer(). + * + * It's theoretically possible for a buffer to have zero width + * or height, but for now, assert check that the driver did what's + * expected of it. + */ + ASSERT(drawBuffer->Width > 0); + ASSERT(drawBuffer->Height > 0); +#endif + if (newCtx->FirstTimeCurrent) { /* set initial viewport and scissor size now */ - _mesa_set_viewport(newCtx, 0, 0, drawBuffer->Width, drawBuffer->Height); - newCtx->Scissor.Width = drawBuffer->Width; - newCtx->Scissor.Height = drawBuffer->Height; + _mesa_set_viewport(newCtx, 0, 0, + drawBuffer->Width, drawBuffer->Height); + _mesa_set_scissor(newCtx, 0, 0, + drawBuffer->Width, drawBuffer->Height ); + check_context_limits(newCtx); } } - /* Alert the driver - usually passed on to the sw t&l module, - * but also used to detect threaded cases in the radeon codegen - * hw t&l module. - */ - if (newCtx->Driver.MakeCurrent) - newCtx->Driver.MakeCurrent( newCtx, drawBuffer, readBuffer ); - /* We can use this to help debug user's problems. Tell them to set * the MESA_INFO env variable before running their app. Then the * first time each context is made current we'll print some useful @@ -1960,6 +1783,32 @@ _mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer, } } + +/** + * Make context 'ctx' share the display lists, textures and programs + * that are associated with 'ctxToShare'. + * Any display lists, textures or programs associated with 'ctx' will + * be deleted if nobody else is sharing them. + */ +GLboolean +_mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare) +{ + if (ctx && ctxToShare && ctx->Shared && ctxToShare->Shared) { + ctx->Shared->RefCount--; + if (ctx->Shared->RefCount == 0) { + free_shared_state(ctx, ctx->Shared); + } + ctx->Shared = ctxToShare->Shared; + ctx->Shared->RefCount++; + return GL_TRUE; + } + else { + return GL_FALSE; + } +} + + + /** * Get current context for the calling thread. * diff --git a/src/kits/opengl/mesa/main/context.h b/src/kits/opengl/mesa/main/context.h index c59a8b2118..e7e0fda72e 100644 --- a/src/kits/opengl/mesa/main/context.h +++ b/src/kits/opengl/mesa/main/context.h @@ -1,29 +1,8 @@ -/** - * \file context.h - * Mesa context/visual/framebuffer management functions. - * - * There are three Mesa data types which are meant to be used by device - * drivers: - * - GLcontext: this contains the Mesa rendering state - * - GLvisual: this describes the color buffer (RGB vs. ci), whether or not - * there's a depth buffer, stencil buffer, etc. - * - GLframebuffer: contains pointers to the depth buffer, stencil buffer, - * accum buffer and alpha buffers. - * - * These types should be encapsulated by corresponding device driver - * data types. See xmesa.h and xmesaP.h for an example. - * - * In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes - * which the device driver must derive from. - * - * The following functions create and destroy these data types. - */ - /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -44,6 +23,28 @@ */ +/** + * \file context.h + * Mesa context and visual-related functions. + * + * There are three large Mesa data types/classes which are meant to be + * used by device drivers: + * - GLcontext: this contains the Mesa rendering state + * - GLvisual: this describes the color buffer (RGB vs. ci), whether or not + * there's a depth buffer, stencil buffer, etc. + * - GLframebuffer: contains pointers to the depth buffer, stencil buffer, + * accum buffer and alpha buffers. + * + * These types should be encapsulated by corresponding device driver + * data types. See xmesa.h and xmesaP.h for an example. + * + * In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes + * which the device driver must derive from. + * + * The following functions create and destroy these data types. + */ + + #ifndef CONTEXT_H #define CONTEXT_H @@ -53,8 +54,7 @@ #include "mtypes.h" -/**********************************************************************/ -/** \name Create/destroy a GLvisual. */ +/** \name Visual-related functions */ /*@{*/ extern GLvisual * @@ -98,36 +98,7 @@ _mesa_destroy_visual( GLvisual *vis ); /*@}*/ -/**********************************************************************/ -/** \name Create/destroy a GLframebuffer. */ -/*@{*/ - -extern GLframebuffer * -_mesa_create_framebuffer( const GLvisual *visual, - GLboolean softwareDepth, - GLboolean softwareStencil, - GLboolean softwareAccum, - GLboolean softwareAlpha ); - -extern void -_mesa_initialize_framebuffer( GLframebuffer *fb, - const GLvisual *visual, - GLboolean softwareDepth, - GLboolean softwareStencil, - GLboolean softwareAccum, - GLboolean softwareAlpha ); - -extern void -_mesa_free_framebuffer_data( GLframebuffer *buffer ); - -extern void -_mesa_destroy_framebuffer( GLframebuffer *buffer ); - -/*@}*/ - - -/**********************************************************************/ -/** \name Create/destroy a GLcontext. */ +/** \name Context-related functions */ /*@{*/ extern GLcontext * @@ -155,13 +126,11 @@ _mesa_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask); extern void -_mesa_make_current( GLcontext *ctx, GLframebuffer *buffer ); - - -extern void -_mesa_make_current2( GLcontext *ctx, GLframebuffer *drawBuffer, - GLframebuffer *readBuffer ); +_mesa_make_current( GLcontext *ctx, GLframebuffer *drawBuffer, + GLframebuffer *readBuffer ); +extern GLboolean +_mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare); extern GLcontext * _mesa_get_current_context(void); @@ -169,33 +138,7 @@ _mesa_get_current_context(void); /*@}*/ -/** - * Macro for declaration and fetching the current context. - * - * \param C local variable which will hold the current context. - * - * It should be used in the variable declaration area of a function: - * \code - * ... - * { - * GET_CURRENT_CONTEXT(ctx); - * ... - * \endcode - */ -#ifdef THREADS - -#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context()) - -#else - -#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_Context - -#endif - - - -/**********************************************************************/ -/** \name OpenGL SI-style export functions. */ +/** \name OpenGL SI-style export functions */ /*@{*/ extern GLboolean @@ -242,14 +185,12 @@ _mesa_get_dispatch(GLcontext *ctx); -/**********************************************************************/ /** \name Miscellaneous */ /*@{*/ extern void _mesa_record_error( GLcontext *ctx, GLenum error ); - extern void GLAPIENTRY _mesa_Finish( void ); @@ -260,11 +201,12 @@ _mesa_Flush( void ); -/**********************************************************************/ -/** \name Macros for contexts/flushing. */ +/** + * \name Macros for flushing buffered rendering commands before state changes, + * checking if inside glBegin/glEnd, etc. + */ /*@{*/ - /** * Flush vertices. * @@ -313,7 +255,7 @@ do { \ #define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \ do { \ if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ - _mesa_error( ctx, GL_INVALID_OPERATION, "begin/end" ); \ + _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ return retval; \ } \ } while (0) @@ -327,7 +269,7 @@ do { \ #define ASSERT_OUTSIDE_BEGIN_END(ctx) \ do { \ if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ - _mesa_error( ctx, GL_INVALID_OPERATION, "begin/end" ); \ + _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ return; \ } \ } while (0) @@ -357,17 +299,10 @@ do { \ FLUSH_VERTICES(ctx, 0); \ } while (0) - /*@}*/ -/** - * Macros to help evaluate current state conditions - */ - -/*@{*/ - /** * Is the secondary color needed? */ @@ -376,20 +311,18 @@ do { \ (CTX)->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR) \ || (CTX)->Fog.ColorSumEnabled \ || ((CTX)->VertexProgram._Enabled && \ - ((CTX)->VertexProgram.Current->InputsRead & VERT_BIT_COLOR1)) \ + ((CTX)->VertexProgram.Current->Base.InputsRead & VERT_BIT_COLOR1)) \ || ((CTX)->FragmentProgram._Enabled && \ - ((CTX)->FragmentProgram.Current->InputsRead & FRAG_BIT_COL1)) \ + ((CTX)->FragmentProgram.Current->Base.InputsRead & FRAG_BIT_COL1)) \ ) /** - * Is two-sided lighting in effect? + * Is RGBA LogicOp enabled? */ -#define NEED_TWO_SIDED_LIGHTING(CTX) \ - (ctx->Light.Enabled && ctx->Light.Model.TwoSide) +#define RGBA_LOGICOP_ENABLED(CTX) \ + ((CTX)->Color.ColorLogicOpEnabled || \ + ((CTX)->Color.BlendEnabled && (CTX)->Color.BlendEquationRGB == GL_LOGIC_OP)) -/*@}*/ - - -#endif +#endif /* CONTEXT_H */ diff --git a/src/kits/opengl/mesa/main/convolve.c b/src/kits/opengl/mesa/main/convolve.c index 6b97c7f56c..814c6a0a5a 100644 --- a/src/kits/opengl/mesa/main/convolve.c +++ b/src/kits/opengl/mesa/main/convolve.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -560,9 +560,10 @@ _mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLi void GLAPIENTRY -_mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, GLvoid *image) +_mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, + GLvoid *image) { - const struct gl_convolution_attrib *filter; + struct gl_convolution_attrib *filter; GLuint row; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -623,10 +624,9 @@ _mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, GLvoid *im GLvoid *dst = _mesa_image_address2d(&ctx->Pack, image, filter->Width, filter->Height, format, type, row, 0); - const GLfloat *src = filter->Filter + row * filter->Width * 4; - _mesa_pack_rgba_span_float(ctx, filter->Width, - (const GLfloat (*)[4]) src, - format, type, dst, &ctx->Pack, 0); + GLfloat (*src)[4] = (GLfloat (*)[4]) (filter->Filter + row * filter->Width * 4); + _mesa_pack_rgba_span_float(ctx, filter->Width, src, + format, type, dst, &ctx->Pack, 0x0); } if (ctx->Pack.BufferObj->Name) { @@ -768,10 +768,11 @@ _mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params) void GLAPIENTRY -_mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) +_mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, + GLvoid *row, GLvoid *column, GLvoid *span) { const GLint colStart = MAX_CONVOLUTION_WIDTH * 4; - const struct gl_convolution_attrib *filter; + struct gl_convolution_attrib *filter; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -785,7 +786,8 @@ _mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid *row, } if (!_mesa_is_legal_format_and_type(ctx, format, type)) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter(format or type)"); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetConvolutionFilter(format or type)"); return; } @@ -833,18 +835,17 @@ _mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *dst = _mesa_image_address1d(&ctx->Pack, row, filter->Width, format, type, 0); _mesa_pack_rgba_span_float(ctx, filter->Width, - (const GLfloat (*)[4]) filter->Filter, - format, type, dst, &ctx->Pack, 0); + (GLfloat (*)[4]) filter->Filter, + format, type, dst, &ctx->Pack, 0x0); } /* Column filter */ if (column) { GLvoid *dst = _mesa_image_address1d(&ctx->Pack, column, filter->Height, format, type, 0); - const GLfloat *src = filter->Filter + colStart; - _mesa_pack_rgba_span_float(ctx, filter->Height, - (const GLfloat (*)[4]) src, - format, type, dst, &ctx->Pack, 0); + GLfloat (*src)[4] = (GLfloat (*)[4]) (filter->Filter + colStart); + _mesa_pack_rgba_span_float(ctx, filter->Height, src, + format, type, dst, &ctx->Pack, 0x0); } (void) span; /* unused at this time */ diff --git a/src/kits/opengl/mesa/main/dd.h b/src/kits/opengl/mesa/main/dd.h index 2b1131bc41..1de2542bee 100644 --- a/src/kits/opengl/mesa/main/dd.h +++ b/src/kits/opengl/mesa/main/dd.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -34,6 +34,7 @@ /* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */ struct gl_pixelstore_attrib; +struct mesa_display_list; /** * Device driver function table. @@ -51,8 +52,7 @@ struct gl_pixelstore_attrib; struct dd_function_table { /** * Return a string as needed by glGetString(). - * - * Only the GL_RENDERER token must be implemented. Otherwise, NULL can be + * Only the GL_RENDERER query must be implemented. Otherwise, NULL can be * returned. */ const GLubyte * (*GetString)( GLcontext *ctx, GLenum name ); @@ -63,27 +63,26 @@ struct dd_function_table { * This is in addition to any state change callbacks Mesa may already have * made. */ - void (*UpdateState)( GLcontext *ctx, GLuint new_state ); + void (*UpdateState)( GLcontext *ctx, GLbitfield new_state ); /** * Get the width and height of the named buffer/window. * * Mesa uses this to determine when the driver's window size has changed. + * XXX OBSOLETE: this function will be removed in the future. */ void (*GetBufferSize)( GLframebuffer *buffer, GLuint *width, GLuint *height ); /** - * Resize the driver's depth/stencil/accum/back buffers to match the - * size given in the GLframebuffer struct. - * - * This is typically called when Mesa detects that a window size has changed. + * Resize the given framebuffer to the given size. + * XXX OBSOLETE: this function will be removed in the future. */ - void (*ResizeBuffers)( GLframebuffer *buffer ); + void (*ResizeBuffers)( GLcontext *ctx, GLframebuffer *fb, + GLuint width, GLuint height); /** * Called whenever an error is generated. - * * __GLcontextRec::ErrorValue contains the error value. */ void (*Error)( GLcontext *ctx ); @@ -100,40 +99,24 @@ struct dd_function_table { /** * Clear the color/depth/stencil/accum buffer(s). - * - * \param mask a bitmask of the DD_*_BIT values defined above that indicates - * which buffers need to be cleared. - * \param all if true then clear the whole buffer, else clear only the - * region defined by (x, y, width, height). - * - * This function must obey the glColorMask(), glIndexMask() and - * glStencilMask() settings! - * Software Mesa can do masked clears if the device driver can't. + * \param buffers a bitmask of BUFFER_BIT_* flags indicating which + * renderbuffers need to be cleared. */ - void (*Clear)( GLcontext *ctx, GLbitfield mask, GLboolean all, - GLint x, GLint y, GLint width, GLint height ); + void (*Clear)( GLcontext *ctx, GLbitfield buffers ); + + /** + * Execute glAccum command. + */ + void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value ); /** - * \name For hardware accumulation buffer - */ - /*@{*/ - /** - * Execute glAccum command within the given scissor region. - */ - void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value, - GLint xpos, GLint ypos, GLint width, GLint height ); - /*@}*/ - - - /** - * \name glDraw(), glRead(), glCopyPixels() and glBitmap() functions + * \name Image-related functions */ /*@{*/ /** - * This is called by glDrawPixels(). - * + * Called by glDrawPixels(). * \p unpack describes how to unpack the source image data. */ void (*DrawPixels)( GLcontext *ctx, @@ -152,19 +135,14 @@ struct dd_function_table { GLvoid *dest ); /** - * Do a glCopyPixels(). - * - * This function must respect all rasterization state, glPixelTransfer(), - * glPixelZoom(), etc. + * Called by glCopyPixels(). */ void (*CopyPixels)( GLcontext *ctx, GLint srcx, GLint srcy, GLsizei width, GLsizei height, GLint dstx, GLint dsty, GLenum type ); /** - * This is called by glBitmap(). - * - * Works the same as dd_function_table::DrawPixels, above. + * Called by glBitmap(). */ void (*Bitmap)( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, @@ -301,8 +279,8 @@ struct dd_function_table { */ void (*GetTexImage)( GLcontext *ctx, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels, - const struct gl_texture_object *texObj, - const struct gl_texture_image *texImage ); + struct gl_texture_object *texObj, + struct gl_texture_image *texImage ); /** * Called by glCopyTexImage1D(). @@ -510,6 +488,24 @@ struct dd_function_table { */ struct gl_texture_image * (*NewTextureImage)( GLcontext *ctx ); + /** + * Called to free tImage->Data. + */ + void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage ); + + /** + * Note: no context argument. This function doesn't initially look + * like it belongs here, except that the driver is the only entity + * that knows for sure how the texture memory is allocated - via + * the above callbacks. There is then an argument that the driver + * knows what memcpy paths might be fast. Typically this is invoked with + * + * to -- a pointer into texture memory allocated by NewTextureImage() above. + * from -- a pointer into client memory or a mesa temporary. + * sz -- nr bytes to copy. + */ + void* (*TextureMemCpy)( void *to, const void *from, size_t sz ); + /** * Called by glAreTextureResident(). */ @@ -566,20 +562,21 @@ struct dd_function_table { */ /*@{*/ /** Bind a vertex/fragment program */ - void (*BindProgram)(GLcontext *ctx, GLenum target, struct program *prog); + void (*BindProgram)(GLcontext *ctx, GLenum target, struct gl_program *prog); /** Allocate a new program */ - struct program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id); + struct gl_program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id); /** Delete a program */ - void (*DeleteProgram)(GLcontext *ctx, struct program *prog); + void (*DeleteProgram)(GLcontext *ctx, struct gl_program *prog); /** Notify driver that a program string has been specified. */ void (*ProgramStringNotify)(GLcontext *ctx, GLenum target, - struct program *prog); - - + struct gl_program *prog); + /** Get value of a fragment program register during program execution. */ + void (*GetFragmentProgramRegister)(GLcontext *ctx, enum register_file file, + GLuint index, GLfloat val[4]); /** Query if program can be loaded onto hardware */ GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, - struct program *prog); + struct gl_program *prog); /*@}*/ @@ -641,7 +638,10 @@ struct dd_function_table { void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode); /** Control the writing of individual bits in the color index buffers */ void (*IndexMask)(GLcontext *ctx, GLuint mask); - /** Set light source parameters */ + /** Set light source parameters. + * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already + * been transformed to eye-space. + */ void (*Lightfv)(GLcontext *ctx, GLenum light, GLenum pname, const GLfloat *params ); /** Set the lighting model parameters */ @@ -670,13 +670,14 @@ struct dd_function_table { void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h); /** Select flat or smooth shading */ void (*ShadeModel)(GLcontext *ctx, GLenum mode); - /** Set function and reference value for stencil testing */ - void (*StencilFunc)(GLcontext *ctx, GLenum func, GLint ref, GLuint mask); - /** Control the writing of individual bits in the stencil planes */ - void (*StencilMask)(GLcontext *ctx, GLuint mask); - /** Set stencil test actions */ - void (*StencilOp)(GLcontext *ctx, GLenum fail, GLenum zfail, GLenum zpass); - void (*ActiveStencilFace)(GLcontext *ctx, GLuint face); + /** OpenGL 2.0 two-sided StencilFunc */ + void (*StencilFuncSeparate)(GLcontext *ctx, GLenum face, GLenum func, + GLint ref, GLuint mask); + /** OpenGL 2.0 two-sided StencilMask */ + void (*StencilMaskSeparate)(GLcontext *ctx, GLenum face, GLuint mask); + /** OpenGL 2.0 two-sided StencilOp */ + void (*StencilOpSeparate)(GLcontext *ctx, GLenum face, GLenum fail, + GLenum zfail, GLenum zpass); /** Control the generation of texture coordinates */ void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname, const GLfloat *params); @@ -741,7 +742,7 @@ struct dd_function_table { /** - * \name Vertex buffer object functions + * \name Vertex/pixel buffer object functions */ #if FEATURE_ARB_vertex_buffer_object /*@{*/ @@ -773,6 +774,54 @@ struct dd_function_table { /*@}*/ #endif + /** + * \name Functions for GL_EXT_framebuffer_object + */ +#if FEATURE_EXT_framebuffer_object + /*@{*/ + struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name); + struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name); + void (*BindFramebuffer)(GLcontext *ctx, GLenum target, + struct gl_framebuffer *fb); + void (*FramebufferRenderbuffer)(GLcontext *ctx, + struct gl_framebuffer *fb, + GLenum attachment, + struct gl_renderbuffer *rb); + void (*RenderTexture)(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att); + void (*FinishRenderTexture)(GLcontext *ctx, + struct gl_renderbuffer_attachment *att); + /*@}*/ +#endif +#if FEATURE_EXT_framebuffer_blit + void (*BlitFramebuffer)(GLcontext *ctx, + GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); +#endif + + /** + * \name Query objects + */ + /*@{*/ + struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id); + void (*BeginQuery)(GLcontext *ctx, GLenum target, + struct gl_query_object *q); + void (*EndQuery)(GLcontext *ctx, GLenum target, struct gl_query_object *q); + /*@}*/ + + + /** + * \name Vertex Array objects + */ + /*@{*/ + struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id); + void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj); + void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj); + /*@}*/ + + /** * \name Support for multiple T&L engines */ @@ -856,12 +905,6 @@ struct dd_function_table { */ void (*LightingSpaceChange)( GLcontext *ctx ); - /** - * Let the T&L component know when the context becomes current. - */ - void (*MakeCurrent)( GLcontext *ctx, GLframebuffer *drawBuffer, - GLframebuffer *readBuffer ); - /** * Called by glNewList(). * @@ -877,12 +920,12 @@ struct dd_function_table { void (*EndList)( GLcontext *ctx ); /** - * Called by glCallList(s), but not recursively. + * Called by glCallList(s). * * Notify the T&L component before and after calling a display list. - * Called by glCallList(s), but not recursively. */ - void (*BeginCallList)( GLcontext *ctx, GLuint list ); + void (*BeginCallList)( GLcontext *ctx, + struct mesa_display_list *dlist ); /** * Called by glEndCallList(). * @@ -922,7 +965,6 @@ typedef struct { void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat ); void (GLAPIENTRYP Color4fv)( const GLfloat * ); void (GLAPIENTRYP EdgeFlag)( GLboolean ); - void (GLAPIENTRYP EdgeFlagv)( const GLboolean * ); void (GLAPIENTRYP EvalCoord1f)( GLfloat ); /* NOTE */ void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */ void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */ @@ -964,6 +1006,7 @@ typedef struct { void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * ); /* NOTE */ void (GLAPIENTRYP Begin)( GLenum ); void (GLAPIENTRYP End)( void ); + /* GL_NV_vertex_program */ void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x ); void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v ); void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y ); @@ -972,6 +1015,7 @@ typedef struct { void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v ); void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v ); +#if FEATURE_ARB_vertex_program void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x ); void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v ); void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y ); @@ -980,6 +1024,7 @@ typedef struct { void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v ); void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v ); +#endif /*@}*/ /* diff --git a/src/kits/opengl/mesa/main/debug.c b/src/kits/opengl/mesa/main/debug.c index 6c6bfea8e5..98ca65b96a 100644 --- a/src/kits/opengl/mesa/main/debug.c +++ b/src/kits/opengl/mesa/main/debug.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -149,7 +149,7 @@ void _mesa_print_info( void ) */ static void add_debug_flags( const char *debug ) { -#ifdef MESA_DEBUG +#ifdef DEBUG if (_mesa_strstr(debug, "varray")) MESA_VERBOSE |= VERBOSE_VARRAY; @@ -176,11 +176,26 @@ static void add_debug_flags( const char *debug ) if (_mesa_strstr(debug, "lighting")) MESA_VERBOSE |= VERBOSE_LIGHTING; + + if (_mesa_strstr(debug, "disassem")) + MESA_VERBOSE |= VERBOSE_DISASSEM; /* Debug flag: */ if (_mesa_strstr(debug, "flush")) MESA_DEBUG_FLAGS |= DEBUG_ALWAYS_FLUSH; + +#if defined(_FPU_GETCW) && defined(_FPU_SETCW) + if (_mesa_strstr(debug, "fpexceptions")) { + /* raise FP exceptions */ + fpu_control_t mask; + _FPU_GETCW(mask); + mask &= ~(_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM + | _FPU_MASK_OM | _FPU_MASK_UM); + _FPU_SETCW(mask); + } +#endif + #else (void) debug; #endif @@ -192,9 +207,6 @@ _mesa_init_debug( GLcontext *ctx ) { char *c; - /* For debug/development only */ - ctx->FirstTimeCurrent = GL_TRUE; - /* Dither disable */ ctx->NoDither = _mesa_getenv("MESA_NO_DITHER") ? GL_TRUE : GL_FALSE; if (ctx->NoDither) { diff --git a/src/kits/opengl/mesa/main/depth.c b/src/kits/opengl/mesa/main/depth.c index d92423dcee..f5511ce2fb 100644 --- a/src/kits/opengl/mesa/main/depth.c +++ b/src/kits/opengl/mesa/main/depth.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -119,7 +119,9 @@ _mesa_DepthMask( GLboolean flag ) -/* GL_EXT_depth_bounds_test */ +/** + * Specified by the GL_EXT_depth_bounds_test extension. + */ void GLAPIENTRY _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax ) { @@ -147,6 +149,10 @@ _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax ) /***** Initialization *****/ /**********************************************************************/ + +/** + * Initialize the depth buffer attribute group in the given context. + */ void _mesa_init_depth( GLcontext * ctx ) { /* Depth buffer group */ @@ -154,15 +160,16 @@ void _mesa_init_depth( GLcontext * ctx ) ctx->Depth.Clear = 1.0; ctx->Depth.Func = GL_LESS; ctx->Depth.Mask = GL_TRUE; - ctx->Depth.OcclusionTest = GL_FALSE; + /* XXX this is now per-framebuffer state */ +#if 00 /* Z buffer stuff */ if (ctx->Visual.depthBits == 0) { /* Special case. Even if we don't have a depth buffer we need * good values for DepthMax for Z vertex transformation purposes * and for per-fragment fog computation. */ - ctx->DepthMax = 1 << 16; + ctx->DepthMax = (1 << 16) - 1; ctx->DepthMaxF = (GLfloat) ctx->DepthMax; } else if (ctx->Visual.depthBits < 32) { @@ -177,4 +184,5 @@ void _mesa_init_depth( GLcontext * ctx ) ctx->DepthMaxF = (GLfloat) ctx->DepthMax; } ctx->MRD = 1.0; /* Minimum resolvable depth value, for polygon offset */ +#endif } diff --git a/src/kits/opengl/mesa/main/depth.h b/src/kits/opengl/mesa/main/depth.h index 0532a2e6d1..dcc0b4637a 100644 --- a/src/kits/opengl/mesa/main/depth.h +++ b/src/kits/opengl/mesa/main/depth.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.3 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -46,12 +46,12 @@ _mesa_DepthFunc( GLenum func ); extern void GLAPIENTRY _mesa_DepthMask( GLboolean flag ); -extern void -_mesa_init_depth( GLcontext * ctx ); - extern void GLAPIENTRY _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax ); +extern void +_mesa_init_depth( GLcontext * ctx ); + #else /** No-op */ diff --git a/src/kits/opengl/mesa/main/depthstencil.c b/src/kits/opengl/mesa/main/depthstencil.c new file mode 100644 index 0000000000..d4990bb795 --- /dev/null +++ b/src/kits/opengl/mesa/main/depthstencil.c @@ -0,0 +1,661 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "glheader.h" +#include "imports.h" +#include "context.h" +#include "fbobject.h" +#include "mtypes.h" +#include "depthstencil.h" +#include "renderbuffer.h" + + +/** + * Adaptor/wrappers for GL_DEPTH_STENCIL renderbuffers. + * + * The problem with a GL_DEPTH_STENCIL renderbuffer is that sometimes we + * want to treat it as a stencil buffer, other times we want to treat it + * as a depth/z buffer and still other times when we want to treat it as + * a combined Z+stencil buffer! That implies we need three different sets + * of Get/Put functions. + * + * We solve this by wrapping the Z24_S8 renderbuffer with depth and stencil + * adaptors, each with the right kind of depth/stencil Get/Put functions. + */ + + +static void * +nop_get_pointer(GLcontext *ctx, struct gl_renderbuffer *rb, GLint x, GLint y) +{ + (void) ctx; + (void) rb; + (void) x; + (void) y; + return NULL; +} + + +/** + * Delete a depth or stencil wrapper renderbuffer. + */ +static void +delete_wrapper(struct gl_renderbuffer *rb) +{ + struct gl_renderbuffer *dsrb = rb->Wrapped; + ASSERT(dsrb); + ASSERT(rb->_ActualFormat == GL_DEPTH_COMPONENT24 || + rb->_ActualFormat == GL_STENCIL_INDEX8_EXT); + /* decrement refcount on the wrapped buffer and delete it if necessary */ + dsrb->RefCount--; + if (dsrb->RefCount <= 0) { + dsrb->Delete(dsrb); + } + _mesa_free(rb); +} + + +/** + * Realloc storage for wrapper. + */ +static GLboolean +alloc_wrapper_storage(GLcontext *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, GLuint width, GLuint height) +{ + /* just pass this on to the wrapped renderbuffer */ + struct gl_renderbuffer *dsrb = rb->Wrapped; + GLboolean retVal; + + (void) internalFormat; + + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + + retVal = dsrb->AllocStorage(ctx, dsrb, dsrb->InternalFormat, width, height); + if (retVal) { + rb->Width = width; + rb->Height = height; + } + return retVal; +} + + + + +/*====================================================================== + * Depth wrapper around depth/stencil renderbuffer + */ + +static void +get_row_z24(GLcontext *ctx, struct gl_renderbuffer *z24rb, GLuint count, + GLint x, GLint y, void *values) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLuint *dst = (GLuint *) values; + const GLuint *src = (const GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (!src) { + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + src = temp; + } + for (i = 0; i < count; i++) { + dst[i] = src[i] >> 8; + } +} + +static void +get_values_z24(GLcontext *ctx, struct gl_renderbuffer *z24rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLuint *dst = (GLuint *) values; + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(count <= MAX_WIDTH); + /* don't bother trying direct access */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + dst[i] = temp[i] >> 8; + } +} + +static void +put_row_z24(GLcontext *ctx, struct gl_renderbuffer *z24rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + const GLuint *src = (const GLuint *) values; + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (src[i] << 8) | (dst[i] & 0xff); + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (src[i] << 8) | (temp[i] & 0xff); + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_row_z24(GLcontext *ctx, struct gl_renderbuffer *z24rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + const GLuint shiftedVal = *((GLuint *) value) << 8; + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = shiftedVal | (dst[i] & 0xff); + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = shiftedVal | (temp[i] & 0xff); + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_values_z24(GLcontext *ctx, struct gl_renderbuffer *z24rb, GLuint count, + const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + const GLubyte *src = (const GLubyte *) values; + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dsrb->GetPointer(ctx, dsrb, 0, 0)) { + /* direct access */ + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]); + *dst = (src[i] << 8) | (*dst & 0xff); + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (src[i] << 8) | (temp[i] & 0xff); + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_values_z24(GLcontext *ctx, struct gl_renderbuffer *z24rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + const GLuint shiftedVal = *((GLuint *) value) << 8; + /* get, modify, put */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = shiftedVal | (temp[i] & 0xff); + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); +} + + +/** + * Wrap the given GL_DEPTH_STENCIL renderbuffer so that it acts like + * a depth renderbuffer. + * \return new depth renderbuffer + */ +struct gl_renderbuffer * +_mesa_new_z24_renderbuffer_wrapper(GLcontext *ctx, + struct gl_renderbuffer *dsrb) +{ + struct gl_renderbuffer *z24rb; + + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + + z24rb = _mesa_new_renderbuffer(ctx, 0); + if (!z24rb) + return NULL; + + z24rb->Wrapped = dsrb; + z24rb->Name = dsrb->Name; + z24rb->RefCount = 1; + z24rb->Width = dsrb->Width; + z24rb->Height = dsrb->Height; + z24rb->InternalFormat = GL_DEPTH_COMPONENT24_ARB; + z24rb->_ActualFormat = GL_DEPTH_COMPONENT24_ARB; + z24rb->_BaseFormat = GL_DEPTH_COMPONENT; + z24rb->DataType = GL_UNSIGNED_INT; + z24rb->DepthBits = 24; + z24rb->Data = NULL; + z24rb->Delete = delete_wrapper; + z24rb->AllocStorage = alloc_wrapper_storage; + z24rb->GetPointer = nop_get_pointer; + z24rb->GetRow = get_row_z24; + z24rb->GetValues = get_values_z24; + z24rb->PutRow = put_row_z24; + z24rb->PutRowRGB = NULL; + z24rb->PutMonoRow = put_mono_row_z24; + z24rb->PutValues = put_values_z24; + z24rb->PutMonoValues = put_mono_values_z24; + + return z24rb; +} + + +/*====================================================================== + * Stencil wrapper around depth/stencil renderbuffer + */ + +static void +get_row_s8(GLcontext *ctx, struct gl_renderbuffer *s8rb, GLuint count, + GLint x, GLint y, void *values) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLubyte *dst = (GLubyte *) values; + const GLuint *src = (const GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (!src) { + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + src = temp; + } + for (i = 0; i < count; i++) { + dst[i] = src[i] & 0xff; + } +} + +static void +get_values_s8(GLcontext *ctx, struct gl_renderbuffer *s8rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLubyte *dst = (GLubyte *) values; + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(count <= MAX_WIDTH); + /* don't bother trying direct access */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + dst[i] = temp[i] & 0xff; + } +} + +static void +put_row_s8(GLcontext *ctx, struct gl_renderbuffer *s8rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + const GLubyte *src = (const GLubyte *) values; + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (dst[i] & 0xffffff00) | src[i]; + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff00) | src[i]; + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_row_s8(GLcontext *ctx, struct gl_renderbuffer *s8rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + const GLubyte val = *((GLubyte *) value); + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (dst[i] & 0xffffff00) | val; + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff00) | val; + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_values_s8(GLcontext *ctx, struct gl_renderbuffer *s8rb, GLuint count, + const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + const GLubyte *src = (const GLubyte *) values; + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dsrb->GetPointer(ctx, dsrb, 0, 0)) { + /* direct access */ + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]); + *dst = (*dst & 0xffffff00) | src[i]; + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff00) | src[i]; + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_values_s8(GLcontext *ctx, struct gl_renderbuffer *s8rb, GLuint count, + const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + const GLubyte val = *((GLubyte *) value); + /* get, modify, put */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff) | val; + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); +} + + +/** + * Wrap the given GL_DEPTH_STENCIL renderbuffer so that it acts like + * a stencil renderbuffer. + * \return new stencil renderbuffer + */ +struct gl_renderbuffer * +_mesa_new_s8_renderbuffer_wrapper(GLcontext *ctx, struct gl_renderbuffer *dsrb) +{ + struct gl_renderbuffer *s8rb; + + ASSERT(dsrb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + + s8rb = _mesa_new_renderbuffer(ctx, 0); + if (!s8rb) + return NULL; + + s8rb->Wrapped = dsrb; + s8rb->Name = dsrb->Name; + s8rb->RefCount = 1; + s8rb->Width = dsrb->Width; + s8rb->Height = dsrb->Height; + s8rb->InternalFormat = GL_STENCIL_INDEX8_EXT; + s8rb->_ActualFormat = GL_STENCIL_INDEX8_EXT; + s8rb->_BaseFormat = GL_STENCIL_INDEX; + s8rb->DataType = GL_UNSIGNED_BYTE; + s8rb->StencilBits = 8; + s8rb->Data = NULL; + s8rb->Delete = delete_wrapper; + s8rb->AllocStorage = alloc_wrapper_storage; + s8rb->GetPointer = nop_get_pointer; + s8rb->GetRow = get_row_s8; + s8rb->GetValues = get_values_s8; + s8rb->PutRow = put_row_s8; + s8rb->PutRowRGB = NULL; + s8rb->PutMonoRow = put_mono_row_s8; + s8rb->PutValues = put_values_s8; + s8rb->PutMonoValues = put_mono_values_s8; + + return s8rb; +} + + + +/** + ** The following functions are useful for hardware drivers that only + ** implement combined depth/stencil buffers. + ** The GL_EXT_framebuffer_object extension allows indepedent depth and + ** stencil buffers to be used in any combination. + ** Therefore, we sometimes have to merge separate depth and stencil + ** renderbuffers into a single depth+stencil renderbuffer. And sometimes + ** we have to split combined depth+stencil renderbuffers into separate + ** renderbuffers. + **/ + + +/** + * Extract stencil values from the combined depth/stencil renderbuffer, storing + * the values into a separate stencil renderbuffer. + * \param dsRb the source depth/stencil renderbuffer + * \param stencilRb the destination stencil renderbuffer + * (either 8-bit or 32-bit) + */ +void +_mesa_extract_stencil(GLcontext *ctx, + struct gl_renderbuffer *dsRb, + struct gl_renderbuffer *stencilRb) +{ + GLuint row, width, height; + + ASSERT(dsRb); + ASSERT(stencilRb); + + ASSERT(dsRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(stencilRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT || + stencilRb->_ActualFormat == GL_STENCIL_INDEX8_EXT); + ASSERT(dsRb->Width == stencilRb->Width); + ASSERT(dsRb->Height == stencilRb->Height); + + width = dsRb->Width; + height = dsRb->Height; + + for (row = 0; row < height; row++) { + GLuint depthStencil[MAX_WIDTH]; + dsRb->GetRow(ctx, dsRb, width, 0, row, depthStencil); + if (stencilRb->_ActualFormat == GL_STENCIL_INDEX8_EXT) { + /* 8bpp stencil */ + GLubyte stencil[MAX_WIDTH]; + GLuint i; + for (i = 0; i < width; i++) { + stencil[i] = depthStencil[i] & 0xff; + } + stencilRb->PutRow(ctx, stencilRb, width, 0, row, stencil, NULL); + } + else { + /* 32bpp stencil */ + /* the 24 depth bits will be ignored */ + ASSERT(stencilRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + stencilRb->PutRow(ctx, stencilRb, width, 0, row, depthStencil, NULL); + } + } +} + + +/** + * Copy stencil values from a stencil renderbuffer into a combined + * depth/stencil renderbuffer. + * \param dsRb the destination depth/stencil renderbuffer + * \param stencilRb the source stencil buffer (either 8-bit or 32-bit) + */ +void +_mesa_insert_stencil(GLcontext *ctx, + struct gl_renderbuffer *dsRb, + struct gl_renderbuffer *stencilRb) +{ + GLuint row, width, height; + + ASSERT(dsRb); + ASSERT(stencilRb); + + ASSERT(dsRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(dsRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(stencilRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT || + stencilRb->_ActualFormat == GL_STENCIL_INDEX8_EXT); + + ASSERT(dsRb->Width == stencilRb->Width); + ASSERT(dsRb->Height == stencilRb->Height); + + width = dsRb->Width; + height = dsRb->Height; + + for (row = 0; row < height; row++) { + GLuint depthStencil[MAX_WIDTH]; + + dsRb->GetRow(ctx, dsRb, width, 0, row, depthStencil); + + if (stencilRb->_ActualFormat == GL_STENCIL_INDEX8_EXT) { + /* 8bpp stencil */ + GLubyte stencil[MAX_WIDTH]; + GLuint i; + stencilRb->GetRow(ctx, stencilRb, width, 0, row, stencil); + for (i = 0; i < width; i++) { + depthStencil[i] = (depthStencil[i] & 0xffffff00) | stencil[i]; + } + } + else { + /* 32bpp stencil buffer */ + GLuint stencil[MAX_WIDTH], i; + ASSERT(stencilRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT); + ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + stencilRb->GetRow(ctx, stencilRb, width, 0, row, stencil); + for (i = 0; i < width; i++) { + depthStencil[i] + = (depthStencil[i] & 0xffffff00) | (stencil[i] & 0xff); + } + } + + dsRb->PutRow(ctx, dsRb, width, 0, row, depthStencil, NULL); + } +} + + +/** + * Convert the stencil buffer from 8bpp to 32bpp depth/stencil. + * \param stencilRb the stencil renderbuffer to promote + */ +void +_mesa_promote_stencil(GLcontext *ctx, struct gl_renderbuffer *stencilRb) +{ + const GLsizei width = stencilRb->Width; + const GLsizei height = stencilRb->Height; + GLubyte *data; + GLint i, j, k; + + ASSERT(stencilRb->_ActualFormat == GL_STENCIL_INDEX8_EXT); + ASSERT(stencilRb->Data); + + data = (GLubyte *) stencilRb->Data; + stencilRb->Data = NULL; + stencilRb->AllocStorage(ctx, stencilRb, GL_DEPTH24_STENCIL8_EXT, + width, height); + + ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + + k = 0; + for (i = 0; i < height; i++) { + GLuint depthStencil[MAX_WIDTH]; + for (j = 0; j < width; j++) { + depthStencil[j] = data[k++]; + } + stencilRb->PutRow(ctx, stencilRb, width, 0, i, depthStencil, NULL); + } + _mesa_free(data); + + stencilRb->_BaseFormat = GL_DEPTH_STENCIL_EXT; +} diff --git a/src/kits/opengl/mesa/main/depthstencil.h b/src/kits/opengl/mesa/main/depthstencil.h new file mode 100644 index 0000000000..3dde081f5a --- /dev/null +++ b/src/kits/opengl/mesa/main/depthstencil.h @@ -0,0 +1,56 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef DEPTHSTENCIL_H +#define DEPTHSTENCIL_H + + +extern struct gl_renderbuffer * +_mesa_new_z24_renderbuffer_wrapper(GLcontext *ctx, + struct gl_renderbuffer *dsrb); + + +extern struct gl_renderbuffer * +_mesa_new_s8_renderbuffer_wrapper(GLcontext *ctx, + struct gl_renderbuffer *dsrb); + + +extern void +_mesa_extract_stencil(GLcontext *ctx, + struct gl_renderbuffer *dsRb, + struct gl_renderbuffer *stencilRb); + + +extern void +_mesa_insert_stencil(GLcontext *ctx, + struct gl_renderbuffer *dsRb, + struct gl_renderbuffer *stencilRb); + + +extern void +_mesa_promote_stencil(GLcontext *ctx, struct gl_renderbuffer *stencilRb); + + +#endif /* DEPTHSTENCIL_H */ diff --git a/src/kits/opengl/mesa/main/dispatch.c b/src/kits/opengl/mesa/main/dispatch.c index 946f39d1f9..05c1c36c0d 100644 --- a/src/kits/opengl/mesa/main/dispatch.c +++ b/src/kits/opengl/mesa/main/dispatch.c @@ -23,16 +23,21 @@ */ -/* - * This file generates all the gl* function entrypoints. - * But if we're using X86-optimized dispatch (X86/glapi_x86.S) then - * we don't use this code. +/** + * \file dispatch.c * - * NOTE: This file should _not_ be used when compiling Mesa for a DRI- - * based device driver. + * This file generates all the gl* function entrypoints. This code is not + * used if optimized assembly stubs are available (e.g., using x86/glapi_x86.S + * on IA32 or sparc/glapi_sparc.S on SPARC). * + * \note + * This file is also used to build the client-side libGL that loads DRI-based + * device drivers. At build-time it is symlinked to src/glx/x11. + * + * \author Brian Paul */ +#ifndef GLX_USE_APPLEGL #include "glheader.h" #include "glapi.h" @@ -40,7 +45,7 @@ #include "glthread.h" -#if !(defined(USE_X86_ASM) || defined(USE_SPARC_ASM)) +#if !(defined(USE_X86_ASM) || defined(USE_X86_64_ASM) || defined(USE_SPARC_ASM)) #if defined(WIN32) #define KEYWORD1 GLAPI @@ -61,19 +66,19 @@ #define F stdout #define DISPATCH(FUNC, ARGS, MESSAGE) \ fprintf MESSAGE; \ - GL_CALL(FUNC) ARGS; + CALL_ ## FUNC(GET_DISPATCH(), ARGS); #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) \ fprintf MESSAGE; \ - return GL_CALL(FUNC) ARGS; + return CALL_ ## FUNC(GET_DISPATCH(), ARGS); #else #define DISPATCH(FUNC, ARGS, MESSAGE) \ - GL_CALL(FUNC) ARGS; + CALL_ ## FUNC(GET_DISPATCH(), ARGS); #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) \ - return GL_CALL(FUNC) ARGS; + return CALL_ ## FUNC(GET_DISPATCH(), ARGS); #endif /* logging */ @@ -82,7 +87,9 @@ #define GLAPIENTRY #endif +#include "dispatch.h" #include "glapitemp.h" - #endif /* USE_X86_ASM */ + +#endif /* !GLX_USE_APPLEGL */ diff --git a/src/kits/opengl/mesa/main/dlist.c b/src/kits/opengl/mesa/main/dlist.c index 8ef5269cd8..dca6ede6cb 100644 --- a/src/kits/opengl/mesa/main/dlist.c +++ b/src/kits/opengl/mesa/main/dlist.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -43,6 +43,7 @@ #if FEATURE_ARB_vertex_buffer_object #include "bufferobj.h" #endif +#include "arrayobj.h" #include "clip.h" #include "colormac.h" #include "colortab.h" @@ -86,6 +87,8 @@ #include "math/m_matrix.h" #include "math/m_xform.h" +#include "dispatch.h" + /** * Flush vertices. @@ -167,190 +170,194 @@ do { \ * The fact that these identifiers are assigned consecutive * integer values starting at 0 is very important, see InstSize array usage) */ -typedef enum { - OPCODE_INVALID = -1, /* Force signed enum */ - OPCODE_ACCUM, - OPCODE_ALPHA_FUNC, - OPCODE_BIND_TEXTURE, - OPCODE_BITMAP, - OPCODE_BLEND_COLOR, - OPCODE_BLEND_EQUATION, - OPCODE_BLEND_EQUATION_SEPARATE, - OPCODE_BLEND_FUNC_SEPARATE, - OPCODE_CALL_LIST, - OPCODE_CALL_LIST_OFFSET, - OPCODE_CLEAR, - OPCODE_CLEAR_ACCUM, - OPCODE_CLEAR_COLOR, - OPCODE_CLEAR_DEPTH, - OPCODE_CLEAR_INDEX, - OPCODE_CLEAR_STENCIL, - OPCODE_CLIP_PLANE, - OPCODE_COLOR_MASK, - OPCODE_COLOR_MATERIAL, - OPCODE_COLOR_TABLE, - OPCODE_COLOR_TABLE_PARAMETER_FV, - OPCODE_COLOR_TABLE_PARAMETER_IV, - OPCODE_COLOR_SUB_TABLE, - OPCODE_CONVOLUTION_FILTER_1D, - OPCODE_CONVOLUTION_FILTER_2D, - OPCODE_CONVOLUTION_PARAMETER_I, - OPCODE_CONVOLUTION_PARAMETER_IV, - OPCODE_CONVOLUTION_PARAMETER_F, - OPCODE_CONVOLUTION_PARAMETER_FV, - OPCODE_COPY_COLOR_SUB_TABLE, - OPCODE_COPY_COLOR_TABLE, - OPCODE_COPY_PIXELS, - OPCODE_COPY_TEX_IMAGE1D, - OPCODE_COPY_TEX_IMAGE2D, - OPCODE_COPY_TEX_SUB_IMAGE1D, - OPCODE_COPY_TEX_SUB_IMAGE2D, - OPCODE_COPY_TEX_SUB_IMAGE3D, - OPCODE_CULL_FACE, - OPCODE_DEPTH_FUNC, - OPCODE_DEPTH_MASK, - OPCODE_DEPTH_RANGE, - OPCODE_DISABLE, - OPCODE_DRAW_BUFFER, - OPCODE_DRAW_PIXELS, - OPCODE_ENABLE, - OPCODE_EVALMESH1, - OPCODE_EVALMESH2, - OPCODE_FOG, - OPCODE_FRONT_FACE, - OPCODE_FRUSTUM, - OPCODE_HINT, - OPCODE_HISTOGRAM, - OPCODE_INDEX_MASK, - OPCODE_INIT_NAMES, - OPCODE_LIGHT, - OPCODE_LIGHT_MODEL, - OPCODE_LINE_STIPPLE, - OPCODE_LINE_WIDTH, - OPCODE_LIST_BASE, - OPCODE_LOAD_IDENTITY, - OPCODE_LOAD_MATRIX, - OPCODE_LOAD_NAME, - OPCODE_LOGIC_OP, - OPCODE_MAP1, - OPCODE_MAP2, - OPCODE_MAPGRID1, - OPCODE_MAPGRID2, - OPCODE_MATRIX_MODE, - OPCODE_MIN_MAX, - OPCODE_MULT_MATRIX, - OPCODE_ORTHO, - OPCODE_PASSTHROUGH, - OPCODE_PIXEL_MAP, - OPCODE_PIXEL_TRANSFER, - OPCODE_PIXEL_ZOOM, - OPCODE_POINT_SIZE, - OPCODE_POINT_PARAMETERS, - OPCODE_POLYGON_MODE, - OPCODE_POLYGON_STIPPLE, - OPCODE_POLYGON_OFFSET, - OPCODE_POP_ATTRIB, - OPCODE_POP_MATRIX, - OPCODE_POP_NAME, - OPCODE_PRIORITIZE_TEXTURE, - OPCODE_PUSH_ATTRIB, - OPCODE_PUSH_MATRIX, - OPCODE_PUSH_NAME, - OPCODE_RASTER_POS, - OPCODE_READ_BUFFER, - OPCODE_RESET_HISTOGRAM, - OPCODE_RESET_MIN_MAX, - OPCODE_ROTATE, - OPCODE_SCALE, - OPCODE_SCISSOR, - OPCODE_SELECT_TEXTURE_SGIS, - OPCODE_SELECT_TEXTURE_COORD_SET, - OPCODE_SHADE_MODEL, - OPCODE_STENCIL_FUNC, - OPCODE_STENCIL_MASK, - OPCODE_STENCIL_OP, - OPCODE_TEXENV, - OPCODE_TEXGEN, - OPCODE_TEXPARAMETER, - OPCODE_TEX_IMAGE1D, - OPCODE_TEX_IMAGE2D, - OPCODE_TEX_IMAGE3D, - OPCODE_TEX_SUB_IMAGE1D, - OPCODE_TEX_SUB_IMAGE2D, - OPCODE_TEX_SUB_IMAGE3D, - OPCODE_TRANSLATE, - OPCODE_VIEWPORT, - OPCODE_WINDOW_POS, - /* GL_ARB_multitexture */ - OPCODE_ACTIVE_TEXTURE, - /* GL_SGIX/SGIS_pixel_texture */ - OPCODE_PIXEL_TEXGEN_SGIX, - OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS, - /* GL_ARB_texture_compression */ - OPCODE_COMPRESSED_TEX_IMAGE_1D, - OPCODE_COMPRESSED_TEX_IMAGE_2D, - OPCODE_COMPRESSED_TEX_IMAGE_3D, - OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D, - OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D, - OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D, - /* GL_ARB_multisample */ - OPCODE_SAMPLE_COVERAGE, - /* GL_ARB_window_pos */ - OPCODE_WINDOW_POS_ARB, - /* GL_NV_vertex_program */ - OPCODE_BIND_PROGRAM_NV, - OPCODE_EXECUTE_PROGRAM_NV, - OPCODE_REQUEST_RESIDENT_PROGRAMS_NV, - OPCODE_LOAD_PROGRAM_NV, - OPCODE_PROGRAM_PARAMETER4F_NV, - OPCODE_TRACK_MATRIX_NV, - /* GL_NV_fragment_program */ - OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, - OPCODE_PROGRAM_NAMED_PARAMETER_NV, - /* GL_EXT_stencil_two_side */ - OPCODE_ACTIVE_STENCIL_FACE_EXT, - /* GL_EXT_depth_bounds_test */ - OPCODE_DEPTH_BOUNDS_EXT, - /* GL_ARB_vertex/fragment_program */ - OPCODE_PROGRAM_STRING_ARB, - OPCODE_PROGRAM_ENV_PARAMETER_ARB, - /* GL_ARB_occlusion_query */ - OPCODE_BEGIN_QUERY_ARB, - OPCODE_END_QUERY_ARB, - /* GL_ARB_draw_buffers */ - OPCODE_DRAW_BUFFERS_ARB, - /* GL_ATI_fragment_shader */ - OPCODE_BIND_FRAGMENT_SHADER_ATI, - OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI, - - /* Vertex attributes -- fallback for when optimized display - * list build isn't active. - */ - OPCODE_ATTR_1F_NV, - OPCODE_ATTR_2F_NV, - OPCODE_ATTR_3F_NV, - OPCODE_ATTR_4F_NV, - OPCODE_ATTR_1F_ARB, - OPCODE_ATTR_2F_ARB, - OPCODE_ATTR_3F_ARB, - OPCODE_ATTR_4F_ARB, - OPCODE_MATERIAL, - OPCODE_INDEX, - OPCODE_EDGEFLAG, - OPCODE_BEGIN, - OPCODE_END, - OPCODE_RECTF, - OPCODE_EVAL_C1, - OPCODE_EVAL_C2, - OPCODE_EVAL_P1, - OPCODE_EVAL_P2, +typedef enum +{ + OPCODE_INVALID = -1, /* Force signed enum */ + OPCODE_ACCUM, + OPCODE_ALPHA_FUNC, + OPCODE_BIND_TEXTURE, + OPCODE_BITMAP, + OPCODE_BLEND_COLOR, + OPCODE_BLEND_EQUATION, + OPCODE_BLEND_EQUATION_SEPARATE, + OPCODE_BLEND_FUNC_SEPARATE, + OPCODE_CALL_LIST, + OPCODE_CALL_LIST_OFFSET, + OPCODE_CLEAR, + OPCODE_CLEAR_ACCUM, + OPCODE_CLEAR_COLOR, + OPCODE_CLEAR_DEPTH, + OPCODE_CLEAR_INDEX, + OPCODE_CLEAR_STENCIL, + OPCODE_CLIP_PLANE, + OPCODE_COLOR_MASK, + OPCODE_COLOR_MATERIAL, + OPCODE_COLOR_TABLE, + OPCODE_COLOR_TABLE_PARAMETER_FV, + OPCODE_COLOR_TABLE_PARAMETER_IV, + OPCODE_COLOR_SUB_TABLE, + OPCODE_CONVOLUTION_FILTER_1D, + OPCODE_CONVOLUTION_FILTER_2D, + OPCODE_CONVOLUTION_PARAMETER_I, + OPCODE_CONVOLUTION_PARAMETER_IV, + OPCODE_CONVOLUTION_PARAMETER_F, + OPCODE_CONVOLUTION_PARAMETER_FV, + OPCODE_COPY_COLOR_SUB_TABLE, + OPCODE_COPY_COLOR_TABLE, + OPCODE_COPY_PIXELS, + OPCODE_COPY_TEX_IMAGE1D, + OPCODE_COPY_TEX_IMAGE2D, + OPCODE_COPY_TEX_SUB_IMAGE1D, + OPCODE_COPY_TEX_SUB_IMAGE2D, + OPCODE_COPY_TEX_SUB_IMAGE3D, + OPCODE_CULL_FACE, + OPCODE_DEPTH_FUNC, + OPCODE_DEPTH_MASK, + OPCODE_DEPTH_RANGE, + OPCODE_DISABLE, + OPCODE_DRAW_BUFFER, + OPCODE_DRAW_PIXELS, + OPCODE_ENABLE, + OPCODE_EVALMESH1, + OPCODE_EVALMESH2, + OPCODE_FOG, + OPCODE_FRONT_FACE, + OPCODE_FRUSTUM, + OPCODE_HINT, + OPCODE_HISTOGRAM, + OPCODE_INDEX_MASK, + OPCODE_INIT_NAMES, + OPCODE_LIGHT, + OPCODE_LIGHT_MODEL, + OPCODE_LINE_STIPPLE, + OPCODE_LINE_WIDTH, + OPCODE_LIST_BASE, + OPCODE_LOAD_IDENTITY, + OPCODE_LOAD_MATRIX, + OPCODE_LOAD_NAME, + OPCODE_LOGIC_OP, + OPCODE_MAP1, + OPCODE_MAP2, + OPCODE_MAPGRID1, + OPCODE_MAPGRID2, + OPCODE_MATRIX_MODE, + OPCODE_MIN_MAX, + OPCODE_MULT_MATRIX, + OPCODE_ORTHO, + OPCODE_PASSTHROUGH, + OPCODE_PIXEL_MAP, + OPCODE_PIXEL_TRANSFER, + OPCODE_PIXEL_ZOOM, + OPCODE_POINT_SIZE, + OPCODE_POINT_PARAMETERS, + OPCODE_POLYGON_MODE, + OPCODE_POLYGON_STIPPLE, + OPCODE_POLYGON_OFFSET, + OPCODE_POP_ATTRIB, + OPCODE_POP_MATRIX, + OPCODE_POP_NAME, + OPCODE_PRIORITIZE_TEXTURE, + OPCODE_PUSH_ATTRIB, + OPCODE_PUSH_MATRIX, + OPCODE_PUSH_NAME, + OPCODE_RASTER_POS, + OPCODE_READ_BUFFER, + OPCODE_RESET_HISTOGRAM, + OPCODE_RESET_MIN_MAX, + OPCODE_ROTATE, + OPCODE_SCALE, + OPCODE_SCISSOR, + OPCODE_SELECT_TEXTURE_SGIS, + OPCODE_SELECT_TEXTURE_COORD_SET, + OPCODE_SHADE_MODEL, + OPCODE_STENCIL_FUNC, + OPCODE_STENCIL_MASK, + OPCODE_STENCIL_OP, + OPCODE_TEXENV, + OPCODE_TEXGEN, + OPCODE_TEXPARAMETER, + OPCODE_TEX_IMAGE1D, + OPCODE_TEX_IMAGE2D, + OPCODE_TEX_IMAGE3D, + OPCODE_TEX_SUB_IMAGE1D, + OPCODE_TEX_SUB_IMAGE2D, + OPCODE_TEX_SUB_IMAGE3D, + OPCODE_TRANSLATE, + OPCODE_VIEWPORT, + OPCODE_WINDOW_POS, + /* GL_ARB_multitexture */ + OPCODE_ACTIVE_TEXTURE, + /* GL_ARB_texture_compression */ + OPCODE_COMPRESSED_TEX_IMAGE_1D, + OPCODE_COMPRESSED_TEX_IMAGE_2D, + OPCODE_COMPRESSED_TEX_IMAGE_3D, + OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D, + OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D, + OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D, + /* GL_ARB_multisample */ + OPCODE_SAMPLE_COVERAGE, + /* GL_ARB_window_pos */ + OPCODE_WINDOW_POS_ARB, + /* GL_NV_vertex_program */ + OPCODE_BIND_PROGRAM_NV, + OPCODE_EXECUTE_PROGRAM_NV, + OPCODE_REQUEST_RESIDENT_PROGRAMS_NV, + OPCODE_LOAD_PROGRAM_NV, + OPCODE_PROGRAM_PARAMETER4F_NV, + OPCODE_TRACK_MATRIX_NV, + /* GL_NV_fragment_program */ + OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, + OPCODE_PROGRAM_NAMED_PARAMETER_NV, + /* GL_EXT_stencil_two_side */ + OPCODE_ACTIVE_STENCIL_FACE_EXT, + /* GL_EXT_depth_bounds_test */ + OPCODE_DEPTH_BOUNDS_EXT, + /* GL_ARB_vertex/fragment_program */ + OPCODE_PROGRAM_STRING_ARB, + OPCODE_PROGRAM_ENV_PARAMETER_ARB, + /* GL_ARB_occlusion_query */ + OPCODE_BEGIN_QUERY_ARB, + OPCODE_END_QUERY_ARB, + /* GL_ARB_draw_buffers */ + OPCODE_DRAW_BUFFERS_ARB, + /* GL_ATI_fragment_shader */ + OPCODE_BIND_FRAGMENT_SHADER_ATI, + OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI, + /* OpenGL 2.0 */ + OPCODE_STENCIL_FUNC_SEPARATE, + OPCODE_STENCIL_OP_SEPARATE, + OPCODE_STENCIL_MASK_SEPARATE, + /* GL_EXT_framebuffer_blit */ + OPCODE_BLIT_FRAMEBUFFER, - /* The following three are meta instructions */ - OPCODE_ERROR, /* raise compiled-in error */ - OPCODE_CONTINUE, - OPCODE_END_OF_LIST, - OPCODE_EXT_0 + /* Vertex attributes -- fallback for when optimized display + * list build isn't active. + */ + OPCODE_ATTR_1F_NV, + OPCODE_ATTR_2F_NV, + OPCODE_ATTR_3F_NV, + OPCODE_ATTR_4F_NV, + OPCODE_ATTR_1F_ARB, + OPCODE_ATTR_2F_ARB, + OPCODE_ATTR_3F_ARB, + OPCODE_ATTR_4F_ARB, + OPCODE_MATERIAL, + OPCODE_INDEX, + OPCODE_EDGEFLAG, + OPCODE_BEGIN, + OPCODE_END, + OPCODE_RECTF, + OPCODE_EVAL_C1, + OPCODE_EVAL_C2, + OPCODE_EVAL_P1, + OPCODE_EVAL_P2, + + /* The following three are meta instructions */ + OPCODE_ERROR, /* raise compiled-in error */ + OPCODE_CONTINUE, + OPCODE_END_OF_LIST, + OPCODE_EXT_0 } OpCode; @@ -366,19 +373,20 @@ typedef enum { * contiguous nodes in memory. * Each node is the union of a variety of data types. */ -union node { - OpCode opcode; - GLboolean b; - GLbitfield bf; - GLubyte ub; - GLshort s; - GLushort us; - GLint i; - GLuint ui; - GLenum e; - GLfloat f; - GLvoid *data; - void *next; /* If prev node's opcode==OPCODE_CONTINUE */ +union node +{ + OpCode opcode; + GLboolean b; + GLbitfield bf; + GLubyte ub; + GLshort s; + GLushort us; + GLint i; + GLuint ui; + GLenum e; + GLfloat f; + GLvoid *data; + void *next; /* If prev node's opcode==OPCODE_CONTINUE */ }; @@ -395,42 +403,54 @@ union node { * Number of nodes of storage needed for each instruction. * Sizes for dynamically allocated opcodes are stored in the context struct. */ -static GLuint InstSize[ OPCODE_END_OF_LIST+1 ]; +static GLuint InstSize[OPCODE_END_OF_LIST + 1]; -void mesa_print_display_list( GLuint list ); +void mesa_print_display_list(GLuint list); /**********************************************************************/ /***** Private *****/ /**********************************************************************/ -/* + +/** * Make an empty display list. This is used by glGenLists() to - * reserver display list IDs. + * reserve display list IDs. */ -static Node *make_empty_list( void ) +static struct mesa_display_list * +make_list(GLuint list, GLuint count) { - Node *n = (Node *) MALLOC( sizeof(Node) ); - n[0].opcode = OPCODE_END_OF_LIST; - return n; + struct mesa_display_list *dlist = CALLOC_STRUCT(mesa_display_list); + dlist->id = list; + dlist->node = (Node *) _mesa_malloc(sizeof(Node) * count); + dlist->node[0].opcode = OPCODE_END_OF_LIST; + return dlist; +} + + +/** + * Lookup function to just encapsulate casting. + */ +static INLINE struct mesa_display_list * +lookup_list(GLcontext *ctx, GLuint list) +{ + return (struct mesa_display_list *) + _mesa_HashLookup(ctx->Shared->DisplayList, list); } -/* - * Destroy all nodes in a display list. - * \param list - display list number +/** + * Delete the named display list, but don't remove from hash table. + * \param dlist - display list pointer */ -void _mesa_destroy_list( GLcontext *ctx, GLuint list ) +void +_mesa_delete_list(GLcontext *ctx, struct mesa_display_list *dlist) { Node *n, *block; GLboolean done; - if (list==0) - return; - - block = (Node *) _mesa_HashLookup(ctx->Shared->DisplayList, list); - n = block; + n = block = dlist->node; done = block ? GL_FALSE : GL_TRUE; while (!done) { @@ -439,144 +459,165 @@ void _mesa_destroy_list( GLcontext *ctx, GLuint list ) GLint i = (GLint) n[0].opcode - (GLint) OPCODE_EXT_0; if (i >= 0 && i < (GLint) ctx->ListExt.NumOpcodes) { - ctx->ListExt.Opcode[i].Destroy(ctx, &n[1]); - n += ctx->ListExt.Opcode[i].Size; + ctx->ListExt.Opcode[i].Destroy(ctx, &n[1]); + n += ctx->ListExt.Opcode[i].Size; } else { - switch (n[0].opcode) { - /* for some commands, we need to free malloc'd memory */ - case OPCODE_MAP1: - FREE(n[6].data); - n += InstSize[n[0].opcode]; - break; - case OPCODE_MAP2: - FREE(n[10].data); - n += InstSize[n[0].opcode]; - break; - case OPCODE_DRAW_PIXELS: - FREE( n[5].data ); - n += InstSize[n[0].opcode]; - break; - case OPCODE_BITMAP: - FREE( n[7].data ); - n += InstSize[n[0].opcode]; - break; + switch (n[0].opcode) { + /* for some commands, we need to free malloc'd memory */ + case OPCODE_MAP1: + _mesa_free(n[6].data); + n += InstSize[n[0].opcode]; + break; + case OPCODE_MAP2: + _mesa_free(n[10].data); + n += InstSize[n[0].opcode]; + break; + case OPCODE_DRAW_PIXELS: + _mesa_free(n[5].data); + n += InstSize[n[0].opcode]; + break; + case OPCODE_BITMAP: + _mesa_free(n[7].data); + n += InstSize[n[0].opcode]; + break; case OPCODE_COLOR_TABLE: - FREE( n[6].data ); + _mesa_free(n[6].data); n += InstSize[n[0].opcode]; break; case OPCODE_COLOR_SUB_TABLE: - FREE( n[6].data ); + _mesa_free(n[6].data); n += InstSize[n[0].opcode]; break; case OPCODE_CONVOLUTION_FILTER_1D: - FREE( n[6].data ); + _mesa_free(n[6].data); n += InstSize[n[0].opcode]; break; case OPCODE_CONVOLUTION_FILTER_2D: - FREE( n[7].data ); + _mesa_free(n[7].data); n += InstSize[n[0].opcode]; break; case OPCODE_POLYGON_STIPPLE: - FREE( n[1].data ); - n += InstSize[n[0].opcode]; + _mesa_free(n[1].data); + n += InstSize[n[0].opcode]; break; - case OPCODE_TEX_IMAGE1D: - FREE(n[8].data); + case OPCODE_TEX_IMAGE1D: + _mesa_free(n[8].data); n += InstSize[n[0].opcode]; - break; - case OPCODE_TEX_IMAGE2D: - FREE( n[9]. data ); + break; + case OPCODE_TEX_IMAGE2D: + _mesa_free(n[9].data); n += InstSize[n[0].opcode]; - break; - case OPCODE_TEX_IMAGE3D: - FREE( n[10]. data ); + break; + case OPCODE_TEX_IMAGE3D: + _mesa_free(n[10].data); n += InstSize[n[0].opcode]; - break; + break; case OPCODE_TEX_SUB_IMAGE1D: - FREE(n[7].data); + _mesa_free(n[7].data); n += InstSize[n[0].opcode]; break; case OPCODE_TEX_SUB_IMAGE2D: - FREE(n[9].data); + _mesa_free(n[9].data); n += InstSize[n[0].opcode]; break; case OPCODE_TEX_SUB_IMAGE3D: - FREE(n[11].data); + _mesa_free(n[11].data); n += InstSize[n[0].opcode]; break; case OPCODE_COMPRESSED_TEX_IMAGE_1D: - FREE(n[7].data); + _mesa_free(n[7].data); n += InstSize[n[0].opcode]; break; case OPCODE_COMPRESSED_TEX_IMAGE_2D: - FREE(n[8].data); + _mesa_free(n[8].data); n += InstSize[n[0].opcode]; break; case OPCODE_COMPRESSED_TEX_IMAGE_3D: - FREE(n[9].data); + _mesa_free(n[9].data); n += InstSize[n[0].opcode]; break; case OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D: - FREE(n[7].data); + _mesa_free(n[7].data); n += InstSize[n[0].opcode]; break; case OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D: - FREE(n[9].data); + _mesa_free(n[9].data); n += InstSize[n[0].opcode]; break; case OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D: - FREE(n[11].data); + _mesa_free(n[11].data); n += InstSize[n[0].opcode]; break; #if FEATURE_NV_vertex_program case OPCODE_LOAD_PROGRAM_NV: - FREE(n[4].data); /* program string */ + _mesa_free(n[4].data); /* program string */ n += InstSize[n[0].opcode]; break; case OPCODE_REQUEST_RESIDENT_PROGRAMS_NV: - FREE(n[2].data); /* array of program ids */ + _mesa_free(n[2].data); /* array of program ids */ n += InstSize[n[0].opcode]; break; #endif #if FEATURE_NV_fragment_program case OPCODE_PROGRAM_NAMED_PARAMETER_NV: - FREE(n[3].data); /* parameter name */ + _mesa_free(n[3].data); /* parameter name */ n += InstSize[n[0].opcode]; break; #endif #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program case OPCODE_PROGRAM_STRING_ARB: - FREE(n[4].data); /* program string */ + _mesa_free(n[4].data); /* program string */ n += InstSize[n[0].opcode]; break; #endif - case OPCODE_CONTINUE: - n = (Node *) n[1].next; - FREE( block ); - block = n; - break; - case OPCODE_END_OF_LIST: - FREE( block ); - done = GL_TRUE; - break; - default: - /* Most frequent case */ - n += InstSize[n[0].opcode]; - break; - } + case OPCODE_CONTINUE: + n = (Node *) n[1].next; + _mesa_free(block); + block = n; + break; + case OPCODE_END_OF_LIST: + _mesa_free(block); + done = GL_TRUE; + break; + default: + /* Most frequent case */ + n += InstSize[n[0].opcode]; + break; + } } } - _mesa_HashRemove(ctx->Shared->DisplayList, list); + _mesa_free(dlist); } +/** + * Destroy a display list and remove from hash table. + * \param list - display list number + */ +static void +destroy_list(GLcontext *ctx, GLuint list) +{ + struct mesa_display_list *dlist; + + if (list == 0) + return; + + dlist = lookup_list(ctx, list); + if (!dlist) + return; + + _mesa_delete_list(ctx, dlist); + _mesa_HashRemove(ctx->Shared->DisplayList, list); +} + /* * Translate the nth element of list from type to GLuint. */ -static GLuint translate_id( GLsizei n, GLenum type, const GLvoid *list ) +static GLuint +translate_id(GLsizei n, GLenum type, const GLvoid * list) { GLbyte *bptr; GLubyte *ubptr; @@ -587,43 +628,41 @@ static GLuint translate_id( GLsizei n, GLenum type, const GLvoid *list ) GLfloat *fptr; switch (type) { - case GL_BYTE: - bptr = (GLbyte *) list; - return (GLuint) *(bptr+n); - case GL_UNSIGNED_BYTE: - ubptr = (GLubyte *) list; - return (GLuint) *(ubptr+n); - case GL_SHORT: - sptr = (GLshort *) list; - return (GLuint) *(sptr+n); - case GL_UNSIGNED_SHORT: - usptr = (GLushort *) list; - return (GLuint) *(usptr+n); - case GL_INT: - iptr = (GLint *) list; - return (GLuint) *(iptr+n); - case GL_UNSIGNED_INT: - uiptr = (GLuint *) list; - return (GLuint) *(uiptr+n); - case GL_FLOAT: - fptr = (GLfloat *) list; - return (GLuint) *(fptr+n); - case GL_2_BYTES: - ubptr = ((GLubyte *) list) + 2*n; - return (GLuint) *ubptr * 256 + (GLuint) *(ubptr+1); - case GL_3_BYTES: - ubptr = ((GLubyte *) list) + 3*n; - return (GLuint) *ubptr * 65536 - + (GLuint) *(ubptr+1) * 256 - + (GLuint) *(ubptr+2); - case GL_4_BYTES: - ubptr = ((GLubyte *) list) + 4*n; - return (GLuint) *ubptr * 16777216 - + (GLuint) *(ubptr+1) * 65536 - + (GLuint) *(ubptr+2) * 256 - + (GLuint) *(ubptr+3); - default: - return 0; + case GL_BYTE: + bptr = (GLbyte *) list; + return (GLuint) *(bptr + n); + case GL_UNSIGNED_BYTE: + ubptr = (GLubyte *) list; + return (GLuint) *(ubptr + n); + case GL_SHORT: + sptr = (GLshort *) list; + return (GLuint) *(sptr + n); + case GL_UNSIGNED_SHORT: + usptr = (GLushort *) list; + return (GLuint) *(usptr + n); + case GL_INT: + iptr = (GLint *) list; + return (GLuint) *(iptr + n); + case GL_UNSIGNED_INT: + uiptr = (GLuint *) list; + return (GLuint) *(uiptr + n); + case GL_FLOAT: + fptr = (GLfloat *) list; + return (GLuint) *(fptr + n); + case GL_2_BYTES: + ubptr = ((GLubyte *) list) + 2 * n; + return (GLuint) *ubptr * 256 + (GLuint) * (ubptr + 1); + case GL_3_BYTES: + ubptr = ((GLubyte *) list) + 3 * n; + return (GLuint) * ubptr * 65536 + + (GLuint) *(ubptr + 1) * 256 + (GLuint) * (ubptr + 2); + case GL_4_BYTES: + ubptr = ((GLubyte *) list) + 4 * n; + return (GLuint) *ubptr * 16777216 + + (GLuint) *(ubptr + 1) * 65536 + + (GLuint) *(ubptr + 2) * 256 + (GLuint) * (ubptr + 3); + default: + return 0; } } @@ -634,246 +673,64 @@ static GLuint translate_id( GLsizei n, GLenum type, const GLvoid *list ) /***** Public *****/ /**********************************************************************/ -/** - * Do one-time initialiazations for display lists. - */ -void -_mesa_init_lists( void ) -{ - static int init_flag = 0; - - if (init_flag==0) { - InstSize[OPCODE_ACCUM] = 3; - InstSize[OPCODE_ALPHA_FUNC] = 3; - InstSize[OPCODE_BIND_TEXTURE] = 3; - InstSize[OPCODE_BITMAP] = 8; - InstSize[OPCODE_BLEND_COLOR] = 5; - InstSize[OPCODE_BLEND_EQUATION] = 2; - InstSize[OPCODE_BLEND_EQUATION_SEPARATE] = 3; - InstSize[OPCODE_BLEND_FUNC_SEPARATE] = 5; - InstSize[OPCODE_CALL_LIST] = 2; - InstSize[OPCODE_CALL_LIST_OFFSET] = 3; - InstSize[OPCODE_CLEAR] = 2; - InstSize[OPCODE_CLEAR_ACCUM] = 5; - InstSize[OPCODE_CLEAR_COLOR] = 5; - InstSize[OPCODE_CLEAR_DEPTH] = 2; - InstSize[OPCODE_CLEAR_INDEX] = 2; - InstSize[OPCODE_CLEAR_STENCIL] = 2; - InstSize[OPCODE_CLIP_PLANE] = 6; - InstSize[OPCODE_COLOR_MASK] = 5; - InstSize[OPCODE_COLOR_MATERIAL] = 3; - InstSize[OPCODE_COLOR_TABLE] = 7; - InstSize[OPCODE_COLOR_TABLE_PARAMETER_FV] = 7; - InstSize[OPCODE_COLOR_TABLE_PARAMETER_IV] = 7; - InstSize[OPCODE_COLOR_SUB_TABLE] = 7; - InstSize[OPCODE_CONVOLUTION_FILTER_1D] = 7; - InstSize[OPCODE_CONVOLUTION_FILTER_2D] = 8; - InstSize[OPCODE_CONVOLUTION_PARAMETER_I] = 4; - InstSize[OPCODE_CONVOLUTION_PARAMETER_IV] = 7; - InstSize[OPCODE_CONVOLUTION_PARAMETER_F] = 4; - InstSize[OPCODE_CONVOLUTION_PARAMETER_FV] = 7; - InstSize[OPCODE_COPY_PIXELS] = 6; - InstSize[OPCODE_COPY_COLOR_SUB_TABLE] = 6; - InstSize[OPCODE_COPY_COLOR_TABLE] = 6; - InstSize[OPCODE_COPY_TEX_IMAGE1D] = 8; - InstSize[OPCODE_COPY_TEX_IMAGE2D] = 9; - InstSize[OPCODE_COPY_TEX_SUB_IMAGE1D] = 7; - InstSize[OPCODE_COPY_TEX_SUB_IMAGE2D] = 9; - InstSize[OPCODE_COPY_TEX_SUB_IMAGE3D] = 10; - InstSize[OPCODE_CULL_FACE] = 2; - InstSize[OPCODE_DEPTH_FUNC] = 2; - InstSize[OPCODE_DEPTH_MASK] = 2; - InstSize[OPCODE_DEPTH_RANGE] = 3; - InstSize[OPCODE_DISABLE] = 2; - InstSize[OPCODE_DRAW_BUFFER] = 2; - InstSize[OPCODE_DRAW_PIXELS] = 6; - InstSize[OPCODE_ENABLE] = 2; - InstSize[OPCODE_EVALMESH1] = 4; - InstSize[OPCODE_EVALMESH2] = 6; - InstSize[OPCODE_FOG] = 6; - InstSize[OPCODE_FRONT_FACE] = 2; - InstSize[OPCODE_FRUSTUM] = 7; - InstSize[OPCODE_HINT] = 3; - InstSize[OPCODE_HISTOGRAM] = 5; - InstSize[OPCODE_INDEX_MASK] = 2; - InstSize[OPCODE_INIT_NAMES] = 1; - InstSize[OPCODE_LIGHT] = 7; - InstSize[OPCODE_LIGHT_MODEL] = 6; - InstSize[OPCODE_LINE_STIPPLE] = 3; - InstSize[OPCODE_LINE_WIDTH] = 2; - InstSize[OPCODE_LIST_BASE] = 2; - InstSize[OPCODE_LOAD_IDENTITY] = 1; - InstSize[OPCODE_LOAD_MATRIX] = 17; - InstSize[OPCODE_LOAD_NAME] = 2; - InstSize[OPCODE_LOGIC_OP] = 2; - InstSize[OPCODE_MAP1] = 7; - InstSize[OPCODE_MAP2] = 11; - InstSize[OPCODE_MAPGRID1] = 4; - InstSize[OPCODE_MAPGRID2] = 7; - InstSize[OPCODE_MATRIX_MODE] = 2; - InstSize[OPCODE_MIN_MAX] = 4; - InstSize[OPCODE_MULT_MATRIX] = 17; - InstSize[OPCODE_ORTHO] = 7; - InstSize[OPCODE_PASSTHROUGH] = 2; - InstSize[OPCODE_PIXEL_MAP] = 4; - InstSize[OPCODE_PIXEL_TRANSFER] = 3; - InstSize[OPCODE_PIXEL_ZOOM] = 3; - InstSize[OPCODE_POINT_SIZE] = 2; - InstSize[OPCODE_POINT_PARAMETERS] = 5; - InstSize[OPCODE_POLYGON_MODE] = 3; - InstSize[OPCODE_POLYGON_STIPPLE] = 2; - InstSize[OPCODE_POLYGON_OFFSET] = 3; - InstSize[OPCODE_POP_ATTRIB] = 1; - InstSize[OPCODE_POP_MATRIX] = 1; - InstSize[OPCODE_POP_NAME] = 1; - InstSize[OPCODE_PRIORITIZE_TEXTURE] = 3; - InstSize[OPCODE_PUSH_ATTRIB] = 2; - InstSize[OPCODE_PUSH_MATRIX] = 1; - InstSize[OPCODE_PUSH_NAME] = 2; - InstSize[OPCODE_RASTER_POS] = 5; - InstSize[OPCODE_READ_BUFFER] = 2; - InstSize[OPCODE_RESET_HISTOGRAM] = 2; - InstSize[OPCODE_RESET_MIN_MAX] = 2; - InstSize[OPCODE_ROTATE] = 5; - InstSize[OPCODE_SCALE] = 4; - InstSize[OPCODE_SCISSOR] = 5; - InstSize[OPCODE_STENCIL_FUNC] = 4; - InstSize[OPCODE_STENCIL_MASK] = 2; - InstSize[OPCODE_STENCIL_OP] = 4; - InstSize[OPCODE_SHADE_MODEL] = 2; - InstSize[OPCODE_TEXENV] = 7; - InstSize[OPCODE_TEXGEN] = 7; - InstSize[OPCODE_TEXPARAMETER] = 7; - InstSize[OPCODE_TEX_IMAGE1D] = 9; - InstSize[OPCODE_TEX_IMAGE2D] = 10; - InstSize[OPCODE_TEX_IMAGE3D] = 11; - InstSize[OPCODE_TEX_SUB_IMAGE1D] = 8; - InstSize[OPCODE_TEX_SUB_IMAGE2D] = 10; - InstSize[OPCODE_TEX_SUB_IMAGE3D] = 12; - InstSize[OPCODE_TRANSLATE] = 4; - InstSize[OPCODE_VIEWPORT] = 5; - InstSize[OPCODE_WINDOW_POS] = 5; - InstSize[OPCODE_CONTINUE] = 2; - InstSize[OPCODE_ERROR] = 3; - InstSize[OPCODE_END_OF_LIST] = 1; - /* GL_SGIX/SGIS_pixel_texture */ - InstSize[OPCODE_PIXEL_TEXGEN_SGIX] = 2; - InstSize[OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS] = 3; - /* GL_ARB_texture_compression */ - InstSize[OPCODE_COMPRESSED_TEX_IMAGE_1D] = 8; - InstSize[OPCODE_COMPRESSED_TEX_IMAGE_2D] = 9; - InstSize[OPCODE_COMPRESSED_TEX_IMAGE_3D] = 10; - InstSize[OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D] = 8; - InstSize[OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D] = 10; - InstSize[OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D] = 12; - /* GL_ARB_multisample */ - InstSize[OPCODE_SAMPLE_COVERAGE] = 3; - /* GL_ARB_multitexture */ - InstSize[OPCODE_ACTIVE_TEXTURE] = 2; - /* GL_ARB_window_pos */ - InstSize[OPCODE_WINDOW_POS_ARB] = 4; - /* GL_NV_vertex_program */ - InstSize[OPCODE_BIND_PROGRAM_NV] = 3; - InstSize[OPCODE_EXECUTE_PROGRAM_NV] = 7; - InstSize[OPCODE_REQUEST_RESIDENT_PROGRAMS_NV] = 2; - InstSize[OPCODE_LOAD_PROGRAM_NV] = 5; - InstSize[OPCODE_PROGRAM_PARAMETER4F_NV] = 7; - InstSize[OPCODE_TRACK_MATRIX_NV] = 5; - /* GL_NV_fragment_program */ - InstSize[OPCODE_PROGRAM_LOCAL_PARAMETER_ARB] = 7; - InstSize[OPCODE_PROGRAM_NAMED_PARAMETER_NV] = 8; - /* GL_EXT_stencil_two_side */ - InstSize[OPCODE_ACTIVE_STENCIL_FACE_EXT] = 2; - /* GL_EXT_depth_bounds_test */ - InstSize[OPCODE_DEPTH_BOUNDS_EXT] = 3; -#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program - InstSize[OPCODE_PROGRAM_STRING_ARB] = 5; - InstSize[OPCODE_PROGRAM_ENV_PARAMETER_ARB] = 7; -#endif -#if FEATURE_ARB_occlusion_query - InstSize[OPCODE_BEGIN_QUERY_ARB] = 3; - InstSize[OPCODE_END_QUERY_ARB] = 2; -#endif - InstSize[OPCODE_DRAW_BUFFERS_ARB] = 2 + MAX_DRAW_BUFFERS; -#if FEATURE_ATI_fragment_shader - InstSize[OPCODE_BIND_FRAGMENT_SHADER_ATI] = 2; - InstSize[OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI] = 6; -#endif - InstSize[OPCODE_ATTR_1F_NV] = 3; - InstSize[OPCODE_ATTR_2F_NV] = 4; - InstSize[OPCODE_ATTR_3F_NV] = 5; - InstSize[OPCODE_ATTR_4F_NV] = 6; - InstSize[OPCODE_ATTR_1F_ARB] = 3; - InstSize[OPCODE_ATTR_2F_ARB] = 4; - InstSize[OPCODE_ATTR_3F_ARB] = 5; - InstSize[OPCODE_ATTR_4F_ARB] = 6; - InstSize[OPCODE_MATERIAL] = 7; - InstSize[OPCODE_INDEX] = 2; - InstSize[OPCODE_EDGEFLAG] = 2; - InstSize[OPCODE_BEGIN] = 2; - InstSize[OPCODE_END] = 1; - InstSize[OPCODE_RECTF] = 5; - InstSize[OPCODE_EVAL_C1] = 2; - InstSize[OPCODE_EVAL_C2] = 3; - InstSize[OPCODE_EVAL_P1] = 2; - InstSize[OPCODE_EVAL_P2] = 3; - } - init_flag = 1; -} - - - /** * Wrapper for _mesa_unpack_image() that handles pixel buffer objects. * \todo This won't suffice when the PBO is really in VRAM/GPU memory. */ static GLvoid * -unpack_image( GLuint dimensions, GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const GLvoid *pixels, - const struct gl_pixelstore_attrib *unpack ) +unpack_image(GLuint dimensions, GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, const GLvoid * pixels, + const struct gl_pixelstore_attrib *unpack) { if (unpack->BufferObj->Name == 0) { /* no PBO */ - return _mesa_unpack_image(dimensions, width, height, depth, format, type, - pixels, unpack); + return _mesa_unpack_image(dimensions, width, height, depth, format, + type, pixels, unpack); } - else if (_mesa_validate_pbo_access(dimensions, unpack, width, height, depth, - format, type, pixels)) { + else + if (_mesa_validate_pbo_access + (dimensions, unpack, width, height, depth, format, type, pixels)) { const GLubyte *src = ADD_POINTERS(unpack->BufferObj->Data, pixels); - return _mesa_unpack_image(dimensions, width, height, depth, format, type, - src, unpack); + return _mesa_unpack_image(dimensions, width, height, depth, format, + type, src, unpack); } /* bad access! */ return NULL; } -/* +/** * Allocate space for a display list instruction. - * \param opcode - type of instruction - * argcount - size in bytes of data required. + * \param opcode the instruction opcode (OPCODE_* value) + * \param size instruction size in bytes, not counting opcode. * \return pointer to the usable data area (not including the internal * opcode). */ void * -_mesa_alloc_instruction( GLcontext *ctx, int opcode, GLint sz ) +_mesa_alloc_instruction(GLcontext *ctx, GLuint opcode, GLuint bytes) { - Node *n, *newblock; - GLuint count = 1 + (sz + sizeof(Node) - 1) / sizeof(Node); + const GLuint numNodes = 1 + (bytes + sizeof(Node) - 1) / sizeof(Node); + Node *n; -#ifdef DEBUG - if (opcode < (int) OPCODE_EXT_0) { - assert( count == InstSize[opcode] ); + if (opcode < (GLuint) OPCODE_EXT_0) { + if (InstSize[opcode] == 0) { + /* save instruction size now */ + InstSize[opcode] = numNodes; + } + else { + /* make sure instruction size agrees */ + ASSERT(numNodes == InstSize[opcode]); + } } -#endif - if (ctx->ListState.CurrentPos + count + 2 > BLOCK_SIZE) { + if (ctx->ListState.CurrentPos + numNodes + 2 > BLOCK_SIZE) { /* This block is full. Allocate a new block and chain to it */ + Node *newblock; n = ctx->ListState.CurrentBlock + ctx->ListState.CurrentPos; n[0].opcode = OPCODE_CONTINUE; - newblock = (Node *) MALLOC( sizeof(Node) * BLOCK_SIZE ); + newblock = (Node *) _mesa_malloc(sizeof(Node) * BLOCK_SIZE); if (!newblock) { - _mesa_error( ctx, GL_OUT_OF_MEMORY, "Building display list" ); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Building display list"); return NULL; } n[1].next = (Node *) newblock; @@ -882,11 +739,11 @@ _mesa_alloc_instruction( GLcontext *ctx, int opcode, GLint sz ) } n = ctx->ListState.CurrentBlock + ctx->ListState.CurrentPos; - ctx->ListState.CurrentPos += count; + ctx->ListState.CurrentPos += numNodes; n[0].opcode = (OpCode) opcode; - return (void *)&n[1]; + return (void *) (n + 1); /* return ptr to node following opcode */ } @@ -901,15 +758,16 @@ _mesa_alloc_instruction( GLcontext *ctx, int opcode, GLint sz ) * \return the new opcode number or -1 if error */ GLint -_mesa_alloc_opcode( GLcontext *ctx, - GLuint size, - void (*execute)( GLcontext *, void * ), - void (*destroy)( GLcontext *, void * ), - void (*print)( GLcontext *, void * ) ) +_mesa_alloc_opcode(GLcontext *ctx, + GLuint size, + void (*execute) (GLcontext *, void *), + void (*destroy) (GLcontext *, void *), + void (*print) (GLcontext *, void *)) { if (ctx->ListExt.NumOpcodes < MAX_DLIST_EXT_OPCODES) { const GLuint i = ctx->ListExt.NumOpcodes++; - ctx->ListExt.Opcode[i].Size = 1 + (size + sizeof(Node) - 1)/sizeof(Node); + ctx->ListExt.Opcode[i].Size = + 1 + (size + sizeof(Node) - 1) / sizeof(Node); ctx->ListExt.Opcode[i].Execute = execute; ctx->ListExt.Opcode[i].Destroy = destroy; ctx->ListExt.Opcode[i].Print = print; @@ -920,77 +778,82 @@ _mesa_alloc_opcode( GLcontext *ctx, -/* Mimic the old behaviour of alloc_instruction: - * - sz is in units of sizeof(Node) +/** + * Allocate display list instruction. Returns Node ptr to where the opcode + * is stored. + * - nParams is the number of function parameters * - return value a pointer to sizeof(Node) before the actual * usable data area. */ -#define ALLOC_INSTRUCTION(ctx, opcode, sz) \ - ((Node *)_mesa_alloc_instruction(ctx, opcode, sz*sizeof(Node)) - 1) +#define ALLOC_INSTRUCTION(CTX, OPCODE, NPARAMS) \ + ((Node *)_mesa_alloc_instruction(CTX, OPCODE, (NPARAMS)*sizeof(Node)) - 1) /* * Display List compilation functions */ -static void GLAPIENTRY save_Accum( GLenum op, GLfloat value ) +static void GLAPIENTRY +save_Accum(GLenum op, GLfloat value) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ACCUM, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ACCUM, 2); if (n) { n[1].e = op; n[2].f = value; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Accum)( op, value ); + CALL_Accum(ctx->Exec, (op, value)); } } -static void GLAPIENTRY save_AlphaFunc( GLenum func, GLclampf ref ) +static void GLAPIENTRY +save_AlphaFunc(GLenum func, GLclampf ref) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ALPHA_FUNC, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ALPHA_FUNC, 2); if (n) { n[1].e = func; n[2].f = (GLfloat) ref; } if (ctx->ExecuteFlag) { - (*ctx->Exec->AlphaFunc)( func, ref ); + CALL_AlphaFunc(ctx->Exec, (func, ref)); } } -static void GLAPIENTRY save_BindTexture( GLenum target, GLuint texture ) +static void GLAPIENTRY +save_BindTexture(GLenum target, GLuint texture) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BIND_TEXTURE, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BIND_TEXTURE, 2); if (n) { n[1].e = target; n[2].ui = texture; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BindTexture)( target, texture ); + CALL_BindTexture(ctx->Exec, (target, texture)); } } -static void GLAPIENTRY save_Bitmap( GLsizei width, GLsizei height, - GLfloat xorig, GLfloat yorig, - GLfloat xmove, GLfloat ymove, - const GLubyte *pixels ) +static void GLAPIENTRY +save_Bitmap(GLsizei width, GLsizei height, + GLfloat xorig, GLfloat yorig, + GLfloat xmove, GLfloat ymove, const GLubyte * pixels) { GET_CURRENT_CONTEXT(ctx); - GLvoid *image = _mesa_unpack_bitmap( width, height, pixels, &ctx->Unpack ); + GLvoid *image = _mesa_unpack_bitmap(width, height, pixels, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BITMAP, 7 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BITMAP, 7); if (n) { n[1].i = (GLint) width; n[2].i = (GLint) height; @@ -1001,54 +864,56 @@ static void GLAPIENTRY save_Bitmap( GLsizei width, GLsizei height, n[7].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->Bitmap)( width, height, - xorig, yorig, xmove, ymove, pixels ); + CALL_Bitmap(ctx->Exec, (width, height, + xorig, yorig, xmove, ymove, pixels)); } } -static void GLAPIENTRY save_BlendEquation( GLenum mode ) +static void GLAPIENTRY +save_BlendEquation(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BLEND_EQUATION, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BLEND_EQUATION, 1); if (n) { n[1].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BlendEquation)( mode ); + CALL_BlendEquation(ctx->Exec, (mode)); } } -static void GLAPIENTRY save_BlendEquationSeparateEXT( GLenum modeRGB, - GLenum modeA ) +static void GLAPIENTRY +save_BlendEquationSeparateEXT(GLenum modeRGB, GLenum modeA) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BLEND_EQUATION_SEPARATE, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BLEND_EQUATION_SEPARATE, 2); if (n) { n[1].e = modeRGB; n[2].e = modeA; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BlendEquationSeparateEXT)( modeRGB, modeA ); + CALL_BlendEquationSeparateEXT(ctx->Exec, (modeRGB, modeA)); } } -static void GLAPIENTRY save_BlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB, - GLenum sfactorA, GLenum dfactorA) +static void GLAPIENTRY +save_BlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB, + GLenum sfactorA, GLenum dfactorA) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BLEND_FUNC_SEPARATE, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BLEND_FUNC_SEPARATE, 4); if (n) { n[1].e = sfactorRGB; n[2].e = dfactorRGB; @@ -1056,19 +921,19 @@ static void GLAPIENTRY save_BlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfact n[4].e = dfactorA; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BlendFuncSeparateEXT)( sfactorRGB, dfactorRGB, - sfactorA, dfactorA); + CALL_BlendFuncSeparateEXT(ctx->Exec, + (sfactorRGB, dfactorRGB, sfactorA, dfactorA)); } } -static void GLAPIENTRY save_BlendColor( GLfloat red, GLfloat green, - GLfloat blue, GLfloat alpha ) +static void GLAPIENTRY +save_BlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BLEND_COLOR, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BLEND_COLOR, 4); if (n) { n[1].f = red; n[2].f = green; @@ -1076,33 +941,35 @@ static void GLAPIENTRY save_BlendColor( GLfloat red, GLfloat green, n[4].f = alpha; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BlendColor)( red, green, blue, alpha ); + CALL_BlendColor(ctx->Exec, (red, green, blue, alpha)); } } -void GLAPIENTRY _mesa_save_CallList( GLuint list ) +void GLAPIENTRY +_mesa_save_CallList(GLuint list) { GET_CURRENT_CONTEXT(ctx); Node *n; SAVE_FLUSH_VERTICES(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CALL_LIST, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CALL_LIST, 1); if (n) { n[1].ui = list; } - + /* After this, we don't know what begin/end state we're in: */ ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN; if (ctx->ExecuteFlag) { - (*ctx->Exec->CallList)( list ); + CALL_CallList(ctx->Exec, (list)); } } -void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists ) +void GLAPIENTRY +_mesa_save_CallLists(GLsizei n, GLenum type, const GLvoid * lists) { GET_CURRENT_CONTEXT(ctx); GLint i; @@ -1111,25 +978,25 @@ void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *list SAVE_FLUSH_VERTICES(ctx); switch (type) { - case GL_BYTE: - case GL_UNSIGNED_BYTE: - case GL_SHORT: - case GL_UNSIGNED_SHORT: - case GL_INT: - case GL_UNSIGNED_INT: - case GL_FLOAT: - case GL_2_BYTES: - case GL_3_BYTES: - case GL_4_BYTES: - typeErrorFlag = GL_FALSE; - break; - default: - typeErrorFlag = GL_TRUE; + case GL_BYTE: + case GL_UNSIGNED_BYTE: + case GL_SHORT: + case GL_UNSIGNED_SHORT: + case GL_INT: + case GL_UNSIGNED_INT: + case GL_FLOAT: + case GL_2_BYTES: + case GL_3_BYTES: + case GL_4_BYTES: + typeErrorFlag = GL_FALSE; + break; + default: + typeErrorFlag = GL_TRUE; } - for (i=0;iDriver.CurrentSavePrimitive = PRIM_UNKNOWN; if (ctx->ExecuteFlag) { - (*ctx->Exec->CallLists)( n, type, lists ); + CALL_CallLists(ctx->Exec, (n, type, lists)); } } -static void GLAPIENTRY save_Clear( GLbitfield mask ) +static void GLAPIENTRY +save_Clear(GLbitfield mask) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CLEAR, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CLEAR, 1); if (n) { n[1].bf = mask; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Clear)( mask ); + CALL_Clear(ctx->Exec, (mask)); } } -static void GLAPIENTRY save_ClearAccum( GLfloat red, GLfloat green, - GLfloat blue, GLfloat alpha ) +static void GLAPIENTRY +save_ClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CLEAR_ACCUM, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CLEAR_ACCUM, 4); if (n) { n[1].f = red; n[2].f = green; @@ -1175,18 +1043,18 @@ static void GLAPIENTRY save_ClearAccum( GLfloat red, GLfloat green, n[4].f = alpha; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ClearAccum)( red, green, blue, alpha ); + CALL_ClearAccum(ctx->Exec, (red, green, blue, alpha)); } } -static void GLAPIENTRY save_ClearColor( GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha ) +static void GLAPIENTRY +save_ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CLEAR_COLOR, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CLEAR_COLOR, 4); if (n) { n[1].f = red; n[2].f = green; @@ -1194,62 +1062,66 @@ static void GLAPIENTRY save_ClearColor( GLclampf red, GLclampf green, n[4].f = alpha; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ClearColor)( red, green, blue, alpha ); + CALL_ClearColor(ctx->Exec, (red, green, blue, alpha)); } } -static void GLAPIENTRY save_ClearDepth( GLclampd depth ) +static void GLAPIENTRY +save_ClearDepth(GLclampd depth) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CLEAR_DEPTH, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CLEAR_DEPTH, 1); if (n) { n[1].f = (GLfloat) depth; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ClearDepth)( depth ); + CALL_ClearDepth(ctx->Exec, (depth)); } } -static void GLAPIENTRY save_ClearIndex( GLfloat c ) +static void GLAPIENTRY +save_ClearIndex(GLfloat c) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CLEAR_INDEX, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CLEAR_INDEX, 1); if (n) { n[1].f = c; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ClearIndex)( c ); + CALL_ClearIndex(ctx->Exec, (c)); } } -static void GLAPIENTRY save_ClearStencil( GLint s ) +static void GLAPIENTRY +save_ClearStencil(GLint s) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CLEAR_STENCIL, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CLEAR_STENCIL, 1); if (n) { n[1].i = s; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ClearStencil)( s ); + CALL_ClearStencil(ctx->Exec, (s)); } } -static void GLAPIENTRY save_ClipPlane( GLenum plane, const GLdouble *equ ) +static void GLAPIENTRY +save_ClipPlane(GLenum plane, const GLdouble * equ) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CLIP_PLANE, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CLIP_PLANE, 5); if (n) { n[1].e = plane; n[2].f = (GLfloat) equ[0]; @@ -1258,19 +1130,20 @@ static void GLAPIENTRY save_ClipPlane( GLenum plane, const GLdouble *equ ) n[5].f = (GLfloat) equ[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ClipPlane)( plane, equ ); + CALL_ClipPlane(ctx->Exec, (plane, equ)); } } -static void GLAPIENTRY save_ColorMask( GLboolean red, GLboolean green, - GLboolean blue, GLboolean alpha ) +static void GLAPIENTRY +save_ColorMask(GLboolean red, GLboolean green, + GLboolean blue, GLboolean alpha) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COLOR_MASK, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COLOR_MASK, 4); if (n) { n[1].b = red; n[2].b = green; @@ -1278,47 +1151,46 @@ static void GLAPIENTRY save_ColorMask( GLboolean red, GLboolean green, n[4].b = alpha; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ColorMask)( red, green, blue, alpha ); + CALL_ColorMask(ctx->Exec, (red, green, blue, alpha)); } } -static void GLAPIENTRY save_ColorMaterial( GLenum face, GLenum mode ) +static void GLAPIENTRY +save_ColorMaterial(GLenum face, GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COLOR_MATERIAL, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COLOR_MATERIAL, 2); if (n) { n[1].e = face; n[2].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ColorMaterial)( face, mode ); + CALL_ColorMaterial(ctx->Exec, (face, mode)); } } -static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat, - GLsizei width, GLenum format, GLenum type, - const GLvoid *table ) +static void GLAPIENTRY +save_ColorTable(GLenum target, GLenum internalFormat, + GLsizei width, GLenum format, GLenum type, + const GLvoid * table) { GET_CURRENT_CONTEXT(ctx); - if (target == GL_PROXY_TEXTURE_1D || - target == GL_PROXY_TEXTURE_2D || - target == GL_PROXY_TEXTURE_3D || - target == GL_PROXY_TEXTURE_CUBE_MAP_ARB) { + if (_mesa_is_proxy_texture(target)) { /* execute immediately */ - (*ctx->Exec->ColorTable)( target, internalFormat, width, - format, type, table ); + CALL_ColorTable(ctx->Exec, (target, internalFormat, width, + format, type, table)); } else { GLvoid *image = unpack_image(1, width, 1, 1, format, type, table, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COLOR_TABLE, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COLOR_TABLE, 6); if (n) { n[1].e = target; n[2].e = internalFormat; @@ -1328,11 +1200,11 @@ static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat, n[6].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->ColorTable)( target, internalFormat, width, - format, type, table ); + CALL_ColorTable(ctx->Exec, (target, internalFormat, width, + format, type, table)); } } } @@ -1340,14 +1212,15 @@ static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat, static void GLAPIENTRY -save_ColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params) +save_ColorTableParameterfv(GLenum target, GLenum pname, + const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COLOR_TABLE_PARAMETER_FV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COLOR_TABLE_PARAMETER_FV, 6); if (n) { n[1].e = target; n[2].e = pname; @@ -1363,7 +1236,7 @@ save_ColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params) } if (ctx->ExecuteFlag) { - (*ctx->Exec->ColorTableParameterfv)( target, pname, params ); + CALL_ColorTableParameterfv(ctx->Exec, (target, pname, params)); } } @@ -1376,7 +1249,7 @@ save_ColorTableParameteriv(GLenum target, GLenum pname, const GLint *params) ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COLOR_TABLE_PARAMETER_IV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COLOR_TABLE_PARAMETER_IV, 6); if (n) { n[1].e = target; n[2].e = pname; @@ -1392,22 +1265,22 @@ save_ColorTableParameteriv(GLenum target, GLenum pname, const GLint *params) } if (ctx->ExecuteFlag) { - (*ctx->Exec->ColorTableParameteriv)( target, pname, params ); + CALL_ColorTableParameteriv(ctx->Exec, (target, pname, params)); } } -static void GLAPIENTRY save_ColorSubTable( GLenum target, GLsizei start, GLsizei count, - GLenum format, GLenum type, - const GLvoid *table) +static void GLAPIENTRY +save_ColorSubTable(GLenum target, GLsizei start, GLsizei count, + GLenum format, GLenum type, const GLvoid * table) { GET_CURRENT_CONTEXT(ctx); GLvoid *image = unpack_image(1, count, 1, 1, format, type, table, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COLOR_SUB_TABLE, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COLOR_SUB_TABLE, 6); if (n) { n[1].e = target; n[2].i = start; @@ -1417,10 +1290,11 @@ static void GLAPIENTRY save_ColorSubTable( GLenum target, GLsizei start, GLsizei n[6].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->ColorSubTable)(target, start, count, format, type, table); + CALL_ColorSubTable(ctx->Exec, + (target, start, count, format, type, table)); } } @@ -1433,7 +1307,7 @@ save_CopyColorSubTable(GLenum target, GLsizei start, Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_COLOR_SUB_TABLE, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_COLOR_SUB_TABLE, 5); if (n) { n[1].e = target; n[2].i = start; @@ -1442,7 +1316,7 @@ save_CopyColorSubTable(GLenum target, GLsizei start, n[5].i = width; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyColorSubTable)(target, start, x, y, width); + CALL_CopyColorSubTable(ctx->Exec, (target, start, x, y, width)); } } @@ -1455,7 +1329,7 @@ save_CopyColorTable(GLenum target, GLenum internalformat, Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_COLOR_TABLE, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_COLOR_TABLE, 5); if (n) { n[1].e = target; n[2].e = internalformat; @@ -1464,21 +1338,21 @@ save_CopyColorTable(GLenum target, GLenum internalformat, n[5].i = width; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyColorTable)(target, internalformat, x, y, width); + CALL_CopyColorTable(ctx->Exec, (target, internalformat, x, y, width)); } } static void GLAPIENTRY save_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, - GLenum format, GLenum type, const GLvoid *filter) + GLenum format, GLenum type, const GLvoid * filter) { GET_CURRENT_CONTEXT(ctx); GLvoid *image = unpack_image(1, width, 1, 1, format, type, filter, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CONVOLUTION_FILTER_1D, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CONVOLUTION_FILTER_1D, 6); if (n) { n[1].e = target; n[2].e = internalFormat; @@ -1488,11 +1362,11 @@ save_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, n[6].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->ConvolutionFilter1D)( target, internalFormat, width, - format, type, filter ); + CALL_ConvolutionFilter1D(ctx->Exec, (target, internalFormat, width, + format, type, filter)); } } @@ -1500,14 +1374,14 @@ save_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, static void GLAPIENTRY save_ConvolutionFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *filter) + GLenum type, const GLvoid * filter) { GET_CURRENT_CONTEXT(ctx); GLvoid *image = unpack_image(2, width, height, 1, format, type, filter, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CONVOLUTION_FILTER_2D, 7 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CONVOLUTION_FILTER_2D, 7); if (n) { n[1].e = target; n[2].e = internalFormat; @@ -1518,11 +1392,12 @@ save_ConvolutionFilter2D(GLenum target, GLenum internalFormat, n[7].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->ConvolutionFilter2D)( target, internalFormat, width, height, - format, type, filter ); + CALL_ConvolutionFilter2D(ctx->Exec, + (target, internalFormat, width, height, format, + type, filter)); } } @@ -1533,14 +1408,14 @@ save_ConvolutionParameteri(GLenum target, GLenum pname, GLint param) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CONVOLUTION_PARAMETER_I, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CONVOLUTION_PARAMETER_I, 3); if (n) { n[1].e = target; n[2].e = pname; n[3].i = param; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ConvolutionParameteri)( target, pname, param ); + CALL_ConvolutionParameteri(ctx->Exec, (target, pname, param)); } } @@ -1551,7 +1426,7 @@ save_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CONVOLUTION_PARAMETER_IV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CONVOLUTION_PARAMETER_IV, 6); if (n) { n[1].e = target; n[2].e = pname; @@ -1568,7 +1443,7 @@ save_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params) } } if (ctx->ExecuteFlag) { - (*ctx->Exec->ConvolutionParameteriv)( target, pname, params ); + CALL_ConvolutionParameteriv(ctx->Exec, (target, pname, params)); } } @@ -1579,25 +1454,26 @@ save_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CONVOLUTION_PARAMETER_F, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CONVOLUTION_PARAMETER_F, 3); if (n) { n[1].e = target; n[2].e = pname; n[3].f = param; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ConvolutionParameterf)( target, pname, param ); + CALL_ConvolutionParameterf(ctx->Exec, (target, pname, param)); } } static void GLAPIENTRY -save_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params) +save_ConvolutionParameterfv(GLenum target, GLenum pname, + const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CONVOLUTION_PARAMETER_FV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CONVOLUTION_PARAMETER_FV, 6); if (n) { n[1].e = target; n[2].e = pname; @@ -1614,19 +1490,18 @@ save_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params) } } if (ctx->ExecuteFlag) { - (*ctx->Exec->ConvolutionParameterfv)( target, pname, params ); + CALL_ConvolutionParameterfv(ctx->Exec, (target, pname, params)); } } static void GLAPIENTRY -save_CopyPixels( GLint x, GLint y, - GLsizei width, GLsizei height, GLenum type ) +save_CopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_PIXELS, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_PIXELS, 5); if (n) { n[1].i = x; n[2].i = y; @@ -1635,20 +1510,20 @@ save_CopyPixels( GLint x, GLint y, n[5].e = type; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyPixels)( x, y, width, height, type ); + CALL_CopyPixels(ctx->Exec, (x, y, width, height, type)); } } static void GLAPIENTRY -save_CopyTexImage1D( GLenum target, GLint level, GLenum internalformat, - GLint x, GLint y, GLsizei width, GLint border ) +save_CopyTexImage1D(GLenum target, GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, GLint border) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_TEX_IMAGE1D, 7 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_TEX_IMAGE1D, 7); if (n) { n[1].e = target; n[2].i = level; @@ -1659,22 +1534,22 @@ save_CopyTexImage1D( GLenum target, GLint level, GLenum internalformat, n[7].i = border; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyTexImage1D)( target, level, internalformat, - x, y, width, border ); + CALL_CopyTexImage1D(ctx->Exec, (target, level, internalformat, + x, y, width, border)); } } static void GLAPIENTRY -save_CopyTexImage2D( GLenum target, GLint level, - GLenum internalformat, - GLint x, GLint y, GLsizei width, - GLsizei height, GLint border ) +save_CopyTexImage2D(GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, GLsizei width, + GLsizei height, GLint border) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_TEX_IMAGE2D, 8 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_TEX_IMAGE2D, 8); if (n) { n[1].e = target; n[2].i = level; @@ -1686,22 +1561,21 @@ save_CopyTexImage2D( GLenum target, GLint level, n[8].i = border; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyTexImage2D)( target, level, internalformat, - x, y, width, height, border ); + CALL_CopyTexImage2D(ctx->Exec, (target, level, internalformat, + x, y, width, height, border)); } } static void GLAPIENTRY -save_CopyTexSubImage1D( GLenum target, GLint level, - GLint xoffset, GLint x, GLint y, - GLsizei width ) +save_CopyTexSubImage1D(GLenum target, GLint level, + GLint xoffset, GLint x, GLint y, GLsizei width) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_TEX_SUB_IMAGE1D, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_TEX_SUB_IMAGE1D, 6); if (n) { n[1].e = target; n[2].i = level; @@ -1711,21 +1585,21 @@ save_CopyTexSubImage1D( GLenum target, GLint level, n[6].i = width; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyTexSubImage1D)( target, level, xoffset, x, y, width ); + CALL_CopyTexSubImage1D(ctx->Exec, + (target, level, xoffset, x, y, width)); } } static void GLAPIENTRY -save_CopyTexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint x, GLint y, - GLsizei width, GLint height ) +save_CopyTexSubImage2D(GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint x, GLint y, GLsizei width, GLint height) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_TEX_SUB_IMAGE2D, 8 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_TEX_SUB_IMAGE2D, 8); if (n) { n[1].e = target; n[2].i = level; @@ -1737,22 +1611,21 @@ save_CopyTexSubImage2D( GLenum target, GLint level, n[8].i = height; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyTexSubImage2D)( target, level, xoffset, yoffset, - x, y, width, height ); + CALL_CopyTexSubImage2D(ctx->Exec, (target, level, xoffset, yoffset, + x, y, width, height)); } } static void GLAPIENTRY -save_CopyTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, GLint zoffset, - GLint x, GLint y, - GLsizei width, GLint height ) +save_CopyTexSubImage3D(GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLint x, GLint y, GLsizei width, GLint height) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COPY_TEX_SUB_IMAGE3D, 9 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COPY_TEX_SUB_IMAGE3D, 9); if (n) { n[1].e = target; n[2].i = level; @@ -1765,114 +1638,120 @@ save_CopyTexSubImage3D( GLenum target, GLint level, n[9].i = height; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CopyTexSubImage3D)( target, level, - xoffset, yoffset, zoffset, - x, y, width, height ); + CALL_CopyTexSubImage3D(ctx->Exec, (target, level, + xoffset, yoffset, zoffset, + x, y, width, height)); } } -static void GLAPIENTRY save_CullFace( GLenum mode ) +static void GLAPIENTRY +save_CullFace(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_CULL_FACE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_CULL_FACE, 1); if (n) { n[1].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->CullFace)( mode ); + CALL_CullFace(ctx->Exec, (mode)); } } -static void GLAPIENTRY save_DepthFunc( GLenum func ) +static void GLAPIENTRY +save_DepthFunc(GLenum func) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_DEPTH_FUNC, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DEPTH_FUNC, 1); if (n) { n[1].e = func; } if (ctx->ExecuteFlag) { - (*ctx->Exec->DepthFunc)( func ); + CALL_DepthFunc(ctx->Exec, (func)); } } -static void GLAPIENTRY save_DepthMask( GLboolean mask ) +static void GLAPIENTRY +save_DepthMask(GLboolean mask) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_DEPTH_MASK, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DEPTH_MASK, 1); if (n) { n[1].b = mask; } if (ctx->ExecuteFlag) { - (*ctx->Exec->DepthMask)( mask ); + CALL_DepthMask(ctx->Exec, (mask)); } } -static void GLAPIENTRY save_DepthRange( GLclampd nearval, GLclampd farval ) +static void GLAPIENTRY +save_DepthRange(GLclampd nearval, GLclampd farval) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_DEPTH_RANGE, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DEPTH_RANGE, 2); if (n) { n[1].f = (GLfloat) nearval; n[2].f = (GLfloat) farval; } if (ctx->ExecuteFlag) { - (*ctx->Exec->DepthRange)( nearval, farval ); + CALL_DepthRange(ctx->Exec, (nearval, farval)); } } -static void GLAPIENTRY save_Disable( GLenum cap ) +static void GLAPIENTRY +save_Disable(GLenum cap) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_DISABLE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DISABLE, 1); if (n) { n[1].e = cap; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Disable)( cap ); + CALL_Disable(ctx->Exec, (cap)); } } -static void GLAPIENTRY save_DrawBuffer( GLenum mode ) +static void GLAPIENTRY +save_DrawBuffer(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_DRAW_BUFFER, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DRAW_BUFFER, 1); if (n) { n[1].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->DrawBuffer)( mode ); + CALL_DrawBuffer(ctx->Exec, (mode)); } } -static void GLAPIENTRY save_DrawPixels( GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ) +static void GLAPIENTRY +save_DrawPixels(GLsizei width, GLsizei height, + GLenum format, GLenum type, const GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); GLvoid *image = unpack_image(2, width, height, 1, format, type, pixels, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_DRAW_PIXELS, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DRAW_PIXELS, 5); if (n) { n[1].i = width; n[2].i = height; @@ -1881,54 +1760,57 @@ static void GLAPIENTRY save_DrawPixels( GLsizei width, GLsizei height, n[5].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->DrawPixels)( width, height, format, type, pixels ); + CALL_DrawPixels(ctx->Exec, (width, height, format, type, pixels)); } } -static void GLAPIENTRY save_Enable( GLenum cap ) +static void GLAPIENTRY +save_Enable(GLenum cap) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ENABLE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ENABLE, 1); if (n) { n[1].e = cap; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Enable)( cap ); + CALL_Enable(ctx->Exec, (cap)); } } -void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) +static void GLAPIENTRY +_mesa_save_EvalMesh1(GLenum mode, GLint i1, GLint i2) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EVALMESH1, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EVALMESH1, 3); if (n) { n[1].e = mode; n[2].i = i1; n[3].i = i2; } if (ctx->ExecuteFlag) { - (*ctx->Exec->EvalMesh1)( mode, i1, i2 ); + CALL_EvalMesh1(ctx->Exec, (mode, i1, i2)); } } -void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) +static void GLAPIENTRY +_mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EVALMESH2, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EVALMESH2, 5); if (n) { n[1].e = mode; n[2].i = i1; @@ -1937,19 +1819,20 @@ void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, n[5].i = j2; } if (ctx->ExecuteFlag) { - (*ctx->Exec->EvalMesh2)( mode, i1, i2, j1, j2 ); + CALL_EvalMesh2(ctx->Exec, (mode, i1, i2, j1, j2)); } } -static void GLAPIENTRY save_Fogfv( GLenum pname, const GLfloat *params ) +static void GLAPIENTRY +save_Fogfv(GLenum pname, const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_FOG, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_FOG, 5); if (n) { n[1].e = pname; n[2].f = params[0]; @@ -1958,71 +1841,75 @@ static void GLAPIENTRY save_Fogfv( GLenum pname, const GLfloat *params ) n[5].f = params[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Fogfv)( pname, params ); + CALL_Fogfv(ctx->Exec, (pname, params)); } } -static void GLAPIENTRY save_Fogf( GLenum pname, GLfloat param ) +static void GLAPIENTRY +save_Fogf(GLenum pname, GLfloat param) { save_Fogfv(pname, ¶m); } -static void GLAPIENTRY save_Fogiv(GLenum pname, const GLint *params ) +static void GLAPIENTRY +save_Fogiv(GLenum pname, const GLint *params) { GLfloat p[4]; 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 */ - ; + 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 */ + ; } save_Fogfv(pname, p); } -static void GLAPIENTRY save_Fogi(GLenum pname, GLint param ) +static void GLAPIENTRY +save_Fogi(GLenum pname, GLint param) { save_Fogiv(pname, ¶m); } -static void GLAPIENTRY save_FrontFace( GLenum mode ) +static void GLAPIENTRY +save_FrontFace(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_FRONT_FACE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_FRONT_FACE, 1); if (n) { n[1].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->FrontFace)( mode ); + CALL_FrontFace(ctx->Exec, (mode)); } } -static void GLAPIENTRY save_Frustum( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble nearval, GLdouble farval ) +static void GLAPIENTRY +save_Frustum(GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, GLdouble nearval, GLdouble farval) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_FRUSTUM, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_FRUSTUM, 6); if (n) { n[1].f = (GLfloat) left; n[2].f = (GLfloat) right; @@ -2032,35 +1919,37 @@ static void GLAPIENTRY save_Frustum( GLdouble left, GLdouble right, n[6].f = (GLfloat) farval; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Frustum)( left, right, bottom, top, nearval, farval ); - } -} - - -static void GLAPIENTRY save_Hint( GLenum target, GLenum mode ) -{ - GET_CURRENT_CONTEXT(ctx); - Node *n; - ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_HINT, 2 ); - if (n) { - n[1].e = target; - n[2].e = mode; - } - if (ctx->ExecuteFlag) { - (*ctx->Exec->Hint)( target, mode ); + CALL_Frustum(ctx->Exec, (left, right, bottom, top, nearval, farval)); } } static void GLAPIENTRY -save_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) +save_Hint(GLenum target, GLenum mode) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_HINT, 2); + if (n) { + n[1].e = target; + n[2].e = mode; + } + if (ctx->ExecuteFlag) { + CALL_Hint(ctx->Exec, (target, mode)); + } +} + + +static void GLAPIENTRY +save_Histogram(GLenum target, GLsizei width, GLenum internalFormat, + GLboolean sink) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_HISTOGRAM, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_HISTOGRAM, 4); if (n) { n[1].e = target; n[2].i = width; @@ -2068,147 +1957,154 @@ save_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean si n[4].b = sink; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Histogram)( target, width, internalFormat, sink ); + CALL_Histogram(ctx->Exec, (target, width, internalFormat, sink)); } } -static void GLAPIENTRY save_IndexMask( GLuint mask ) +static void GLAPIENTRY +save_IndexMask(GLuint mask) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_INDEX_MASK, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_INDEX_MASK, 1); if (n) { n[1].ui = mask; } if (ctx->ExecuteFlag) { - (*ctx->Exec->IndexMask)( mask ); + CALL_IndexMask(ctx->Exec, (mask)); } } -static void GLAPIENTRY save_InitNames( void ) +static void GLAPIENTRY +save_InitNames(void) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - (void) ALLOC_INSTRUCTION( ctx, OPCODE_INIT_NAMES, 0 ); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_INIT_NAMES, 0); if (ctx->ExecuteFlag) { - (*ctx->Exec->InitNames)(); + CALL_InitNames(ctx->Exec, ()); } } -static void GLAPIENTRY save_Lightfv( GLenum light, GLenum pname, const GLfloat *params ) +static void GLAPIENTRY +save_Lightfv(GLenum light, GLenum pname, const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LIGHT, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LIGHT, 6); if (OPCODE_LIGHT) { GLint i, nParams; n[1].e = light; n[2].e = pname; switch (pname) { - case GL_AMBIENT: - nParams = 4; - break; - case GL_DIFFUSE: - nParams = 4; - break; - case GL_SPECULAR: - nParams = 4; - break; - case GL_POSITION: - nParams = 4; - break; - case GL_SPOT_DIRECTION: - nParams = 3; - break; - case GL_SPOT_EXPONENT: - nParams = 1; - break; - case GL_SPOT_CUTOFF: - nParams = 1; - break; - case GL_CONSTANT_ATTENUATION: - nParams = 1; - break; - case GL_LINEAR_ATTENUATION: - nParams = 1; - break; - case GL_QUADRATIC_ATTENUATION: - nParams = 1; - break; - default: - nParams = 0; + case GL_AMBIENT: + nParams = 4; + break; + case GL_DIFFUSE: + nParams = 4; + break; + case GL_SPECULAR: + nParams = 4; + break; + case GL_POSITION: + nParams = 4; + break; + case GL_SPOT_DIRECTION: + nParams = 3; + break; + case GL_SPOT_EXPONENT: + nParams = 1; + break; + case GL_SPOT_CUTOFF: + nParams = 1; + break; + case GL_CONSTANT_ATTENUATION: + nParams = 1; + break; + case GL_LINEAR_ATTENUATION: + nParams = 1; + break; + case GL_QUADRATIC_ATTENUATION: + nParams = 1; + break; + default: + nParams = 0; } for (i = 0; i < nParams; i++) { - n[3+i].f = params[i]; + n[3 + i].f = params[i]; } } if (ctx->ExecuteFlag) { - (*ctx->Exec->Lightfv)( light, pname, params ); + CALL_Lightfv(ctx->Exec, (light, pname, params)); } } -static void GLAPIENTRY save_Lightf( GLenum light, GLenum pname, GLfloat params ) +static void GLAPIENTRY +save_Lightf(GLenum light, GLenum pname, GLfloat params) { save_Lightfv(light, pname, ¶ms); } -static void GLAPIENTRY save_Lightiv( GLenum light, GLenum pname, const GLint *params ) +static void GLAPIENTRY +save_Lightiv(GLenum light, GLenum pname, const GLint *params) { GLfloat fparam[4]; 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 */ - ; + 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 */ + ; } - save_Lightfv( light, pname, fparam ); + save_Lightfv(light, pname, fparam); } -static void GLAPIENTRY save_Lighti( GLenum light, GLenum pname, GLint param ) +static void GLAPIENTRY +save_Lighti(GLenum light, GLenum pname, GLint param) { - save_Lightiv( light, pname, ¶m ); + save_Lightiv(light, pname, ¶m); } -static void GLAPIENTRY save_LightModelfv( GLenum pname, const GLfloat *params ) +static void GLAPIENTRY +save_LightModelfv(GLenum pname, const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LIGHT_MODEL, 5 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LIGHT_MODEL, 5); if (n) { n[1].e = pname; n[2].f = params[0]; @@ -2217,122 +2113,131 @@ static void GLAPIENTRY save_LightModelfv( GLenum pname, const GLfloat *params ) n[5].f = params[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->LightModelfv)( pname, params ); + CALL_LightModelfv(ctx->Exec, (pname, params)); } } -static void GLAPIENTRY save_LightModelf( GLenum pname, GLfloat param ) +static void GLAPIENTRY +save_LightModelf(GLenum pname, GLfloat param) { save_LightModelfv(pname, ¶m); } -static void GLAPIENTRY save_LightModeliv( GLenum pname, const GLint *params ) +static void GLAPIENTRY +save_LightModeliv(GLenum pname, const GLint *params) { GLfloat fparam[4]; 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: - case GL_LIGHT_MODEL_COLOR_CONTROL: - fparam[0] = (GLfloat) params[0]; - break; - default: - /* Error will be caught later in gl_LightModelfv */ - ; + 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: + case GL_LIGHT_MODEL_COLOR_CONTROL: + fparam[0] = (GLfloat) params[0]; + break; + default: + /* Error will be caught later in gl_LightModelfv */ + ; } save_LightModelfv(pname, fparam); } -static void GLAPIENTRY save_LightModeli( GLenum pname, GLint param ) +static void GLAPIENTRY +save_LightModeli(GLenum pname, GLint param) { save_LightModeliv(pname, ¶m); } -static void GLAPIENTRY save_LineStipple( GLint factor, GLushort pattern ) +static void GLAPIENTRY +save_LineStipple(GLint factor, GLushort pattern) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LINE_STIPPLE, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LINE_STIPPLE, 2); if (n) { n[1].i = factor; n[2].us = pattern; } if (ctx->ExecuteFlag) { - (*ctx->Exec->LineStipple)( factor, pattern ); + CALL_LineStipple(ctx->Exec, (factor, pattern)); } } -static void GLAPIENTRY save_LineWidth( GLfloat width ) +static void GLAPIENTRY +save_LineWidth(GLfloat width) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LINE_WIDTH, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LINE_WIDTH, 1); if (n) { n[1].f = width; } if (ctx->ExecuteFlag) { - (*ctx->Exec->LineWidth)( width ); + CALL_LineWidth(ctx->Exec, (width)); } } -static void GLAPIENTRY save_ListBase( GLuint base ) +static void GLAPIENTRY +save_ListBase(GLuint base) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LIST_BASE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LIST_BASE, 1); if (n) { n[1].ui = base; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ListBase)( base ); + CALL_ListBase(ctx->Exec, (base)); } } -static void GLAPIENTRY save_LoadIdentity( void ) +static void GLAPIENTRY +save_LoadIdentity(void) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - (void) ALLOC_INSTRUCTION( ctx, OPCODE_LOAD_IDENTITY, 0 ); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_LOAD_IDENTITY, 0); if (ctx->ExecuteFlag) { - (*ctx->Exec->LoadIdentity)(); + CALL_LoadIdentity(ctx->Exec, ()); } } -static void GLAPIENTRY save_LoadMatrixf( const GLfloat *m ) +static void GLAPIENTRY +save_LoadMatrixf(const GLfloat * m) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LOAD_MATRIX, 16 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LOAD_MATRIX, 16); if (n) { GLuint i; - for (i=0;i<16;i++) { - n[1+i].f = m[i]; + for (i = 0; i < 16; i++) { + n[1 + i].f = m[i]; } } if (ctx->ExecuteFlag) { - (*ctx->Exec->LoadMatrixf)( m ); + CALL_LoadMatrixf(ctx->Exec, (m)); } } -static void GLAPIENTRY save_LoadMatrixd( const GLdouble *m ) +static void GLAPIENTRY +save_LoadMatrixd(const GLdouble * m) { GLfloat f[16]; GLint i; @@ -2343,172 +2248,181 @@ static void GLAPIENTRY save_LoadMatrixd( const GLdouble *m ) } -static void GLAPIENTRY save_LoadName( GLuint name ) +static void GLAPIENTRY +save_LoadName(GLuint name) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LOAD_NAME, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LOAD_NAME, 1); if (n) { n[1].ui = name; } if (ctx->ExecuteFlag) { - (*ctx->Exec->LoadName)( name ); + CALL_LoadName(ctx->Exec, (name)); } } -static void GLAPIENTRY save_LogicOp( GLenum opcode ) +static void GLAPIENTRY +save_LogicOp(GLenum opcode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LOGIC_OP, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LOGIC_OP, 1); if (n) { n[1].e = opcode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->LogicOp)( opcode ); + CALL_LogicOp(ctx->Exec, (opcode)); } } -static void GLAPIENTRY save_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, - GLint order, const GLdouble *points) +static void GLAPIENTRY +save_Map1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, + GLint order, const GLdouble * points) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MAP1, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MAP1, 6); if (n) { - GLfloat *pnts = _mesa_copy_map_points1d( target, stride, order, points ); + GLfloat *pnts = _mesa_copy_map_points1d(target, stride, order, points); n[1].e = target; n[2].f = (GLfloat) u1; n[3].f = (GLfloat) u2; - n[4].i = _mesa_evaluator_components(target); /* stride */ + n[4].i = _mesa_evaluator_components(target); /* stride */ n[5].i = order; n[6].data = (void *) pnts; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Map1d)( target, u1, u2, stride, order, points ); + CALL_Map1d(ctx->Exec, (target, u1, u2, stride, order, points)); } } -static void GLAPIENTRY save_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, - GLint order, const GLfloat *points) +static void GLAPIENTRY +save_Map1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, + GLint order, const GLfloat * points) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MAP1, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MAP1, 6); if (n) { - GLfloat *pnts = _mesa_copy_map_points1f( target, stride, order, points ); + GLfloat *pnts = _mesa_copy_map_points1f(target, stride, order, points); n[1].e = target; n[2].f = u1; n[3].f = u2; - n[4].i = _mesa_evaluator_components(target); /* stride */ + n[4].i = _mesa_evaluator_components(target); /* stride */ n[5].i = order; n[6].data = (void *) pnts; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Map1f)( target, u1, u2, stride, order, points ); + CALL_Map1f(ctx->Exec, (target, u1, u2, stride, order, points)); } } -static void GLAPIENTRY save_Map2d( GLenum target, - GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, - GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, - const GLdouble *points ) +static void GLAPIENTRY +save_Map2d(GLenum target, + GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, + GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, + const GLdouble * points) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MAP2, 10 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MAP2, 10); if (n) { - GLfloat *pnts = _mesa_copy_map_points2d( target, ustride, uorder, - vstride, vorder, points ); + GLfloat *pnts = _mesa_copy_map_points2d(target, ustride, uorder, + vstride, vorder, points); n[1].e = target; n[2].f = (GLfloat) u1; n[3].f = (GLfloat) u2; n[4].f = (GLfloat) v1; n[5].f = (GLfloat) v2; /* XXX verify these strides are correct */ - n[6].i = _mesa_evaluator_components(target) * vorder; /*ustride*/ - n[7].i = _mesa_evaluator_components(target); /*vstride*/ + n[6].i = _mesa_evaluator_components(target) * vorder; /*ustride */ + n[7].i = _mesa_evaluator_components(target); /*vstride */ n[8].i = uorder; n[9].i = vorder; n[10].data = (void *) pnts; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Map2d)( target, - u1, u2, ustride, uorder, - v1, v2, vstride, vorder, points ); + CALL_Map2d(ctx->Exec, (target, + u1, u2, ustride, uorder, + v1, v2, vstride, vorder, points)); } } -static void GLAPIENTRY save_Map2f( GLenum target, - GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, - GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, - const GLfloat *points ) +static void GLAPIENTRY +save_Map2f(GLenum target, + GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLfloat * points) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MAP2, 10 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MAP2, 10); if (n) { - GLfloat *pnts = _mesa_copy_map_points2f( target, ustride, uorder, - vstride, vorder, points ); + GLfloat *pnts = _mesa_copy_map_points2f(target, ustride, uorder, + vstride, vorder, points); n[1].e = target; n[2].f = u1; n[3].f = u2; n[4].f = v1; n[5].f = v2; /* XXX verify these strides are correct */ - n[6].i = _mesa_evaluator_components(target) * vorder; /*ustride*/ - n[7].i = _mesa_evaluator_components(target); /*vstride*/ + n[6].i = _mesa_evaluator_components(target) * vorder; /*ustride */ + n[7].i = _mesa_evaluator_components(target); /*vstride */ n[8].i = uorder; n[9].i = vorder; n[10].data = (void *) pnts; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Map2f)( target, u1, u2, ustride, uorder, - v1, v2, vstride, vorder, points ); + CALL_Map2f(ctx->Exec, (target, u1, u2, ustride, uorder, + v1, v2, vstride, vorder, points)); } } -static void GLAPIENTRY save_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 ) +static void GLAPIENTRY +save_MapGrid1f(GLint un, GLfloat u1, GLfloat u2) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MAPGRID1, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MAPGRID1, 3); if (n) { n[1].i = un; n[2].f = u1; n[3].f = u2; } if (ctx->ExecuteFlag) { - (*ctx->Exec->MapGrid1f)( un, u1, u2 ); + CALL_MapGrid1f(ctx->Exec, (un, u1, u2)); } } -static void GLAPIENTRY save_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 ) +static void GLAPIENTRY +save_MapGrid1d(GLint un, GLdouble u1, GLdouble u2) { save_MapGrid1f(un, (GLfloat) u1, (GLfloat) u2); } -static void GLAPIENTRY save_MapGrid2f( GLint un, GLfloat u1, GLfloat u2, - GLint vn, GLfloat v1, GLfloat v2 ) +static void GLAPIENTRY +save_MapGrid2f(GLint un, GLfloat u1, GLfloat u2, + GLint vn, GLfloat v1, GLfloat v2) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MAPGRID2, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MAPGRID2, 6); if (n) { n[1].i = un; n[2].f = u1; @@ -2518,31 +2432,33 @@ static void GLAPIENTRY save_MapGrid2f( GLint un, GLfloat u1, GLfloat u2, n[6].f = v2; } if (ctx->ExecuteFlag) { - (*ctx->Exec->MapGrid2f)( un, u1, u2, vn, v1, v2 ); + CALL_MapGrid2f(ctx->Exec, (un, u1, u2, vn, v1, v2)); } } -static void GLAPIENTRY save_MapGrid2d( GLint un, GLdouble u1, GLdouble u2, - GLint vn, GLdouble v1, GLdouble v2 ) +static void GLAPIENTRY +save_MapGrid2d(GLint un, GLdouble u1, GLdouble u2, + GLint vn, GLdouble v1, GLdouble v2) { save_MapGrid2f(un, (GLfloat) u1, (GLfloat) u2, - vn, (GLfloat) v1, (GLfloat) v2); + vn, (GLfloat) v1, (GLfloat) v2); } -static void GLAPIENTRY save_MatrixMode( GLenum mode ) +static void GLAPIENTRY +save_MatrixMode(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MATRIX_MODE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MATRIX_MODE, 1); if (n) { n[1].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->MatrixMode)( mode ); + CALL_MatrixMode(ctx->Exec, (mode)); } } @@ -2554,37 +2470,39 @@ save_Minmax(GLenum target, GLenum internalFormat, GLboolean sink) Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MIN_MAX, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MIN_MAX, 3); if (n) { n[1].e = target; n[2].e = internalFormat; n[3].b = sink; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Minmax)( target, internalFormat, sink ); + CALL_Minmax(ctx->Exec, (target, internalFormat, sink)); } } -static void GLAPIENTRY save_MultMatrixf( const GLfloat *m ) +static void GLAPIENTRY +save_MultMatrixf(const GLfloat * m) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_MULT_MATRIX, 16 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MULT_MATRIX, 16); if (n) { GLuint i; - for (i=0;i<16;i++) { - n[1+i].f = m[i]; + for (i = 0; i < 16; i++) { + n[1 + i].f = m[i]; } } if (ctx->ExecuteFlag) { - (*ctx->Exec->MultMatrixf)( m ); + CALL_MultMatrixf(ctx->Exec, (m)); } } -static void GLAPIENTRY save_MultMatrixd( const GLdouble *m ) +static void GLAPIENTRY +save_MultMatrixd(const GLdouble * m) { GLfloat f[16]; GLint i; @@ -2595,25 +2513,26 @@ static void GLAPIENTRY save_MultMatrixd( const GLdouble *m ) } -static void GLAPIENTRY save_NewList( GLuint list, GLenum mode ) +static void GLAPIENTRY +save_NewList(GLuint list, GLenum mode) { GET_CURRENT_CONTEXT(ctx); /* It's an error to call this function while building a display list */ - _mesa_error( ctx, GL_INVALID_OPERATION, "glNewList" ); + _mesa_error(ctx, GL_INVALID_OPERATION, "glNewList"); (void) list; (void) mode; } -static void GLAPIENTRY save_Ortho( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble nearval, GLdouble farval ) +static void GLAPIENTRY +save_Ortho(GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, GLdouble nearval, GLdouble farval) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ORTHO, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ORTHO, 6); if (n) { n[1].f = (GLfloat) left; n[2].f = (GLfloat) right; @@ -2623,43 +2542,43 @@ static void GLAPIENTRY save_Ortho( GLdouble left, GLdouble right, n[6].f = (GLfloat) farval; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Ortho)( left, right, bottom, top, nearval, farval ); + CALL_Ortho(ctx->Exec, (left, right, bottom, top, nearval, farval)); } } static void GLAPIENTRY -save_PixelMapfv( GLenum map, GLint mapsize, const GLfloat *values ) +save_PixelMapfv(GLenum map, GLint mapsize, const GLfloat *values) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PIXEL_MAP, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PIXEL_MAP, 3); if (n) { n[1].e = map; n[2].i = mapsize; - n[3].data = (void *) MALLOC( mapsize * sizeof(GLfloat) ); - MEMCPY( n[3].data, (void *) values, mapsize * sizeof(GLfloat) ); + n[3].data = (void *) _mesa_malloc(mapsize * sizeof(GLfloat)); + MEMCPY(n[3].data, (void *) values, mapsize * sizeof(GLfloat)); } if (ctx->ExecuteFlag) { - (*ctx->Exec->PixelMapfv)( map, mapsize, values ); + CALL_PixelMapfv(ctx->Exec, (map, mapsize, values)); } } static void GLAPIENTRY -save_PixelMapuiv(GLenum map, GLint mapsize, const GLuint *values ) +save_PixelMapuiv(GLenum map, GLint mapsize, const GLuint *values) { GLfloat fvalues[MAX_PIXEL_MAP_TABLE]; GLint i; - if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) { - for (i=0;iExecuteFlag) { - (*ctx->Exec->PixelTransferf)( pname, param ); + CALL_PixelTransferf(ctx->Exec, (pname, param)); } } static void GLAPIENTRY -save_PixelTransferi( GLenum pname, GLint param ) +save_PixelTransferi(GLenum pname, GLint param) { - save_PixelTransferf( pname, (GLfloat) param ); + save_PixelTransferf(pname, (GLfloat) param); } static void GLAPIENTRY -save_PixelZoom( GLfloat xfactor, GLfloat yfactor ) +save_PixelZoom(GLfloat xfactor, GLfloat yfactor) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PIXEL_ZOOM, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PIXEL_ZOOM, 2); if (n) { n[1].f = xfactor; n[2].f = yfactor; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PixelZoom)( xfactor, yfactor ); + CALL_PixelZoom(ctx->Exec, (xfactor, yfactor)); } } static void GLAPIENTRY -save_PointParameterfvEXT( GLenum pname, const GLfloat *params ) +save_PointParameterfvEXT(GLenum pname, const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_POINT_PARAMETERS, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_POINT_PARAMETERS, 4); if (n) { n[1].e = pname; n[2].f = params[0]; @@ -2740,56 +2659,61 @@ save_PointParameterfvEXT( GLenum pname, const GLfloat *params ) n[4].f = params[2]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PointParameterfvEXT)( pname, params ); + CALL_PointParameterfvEXT(ctx->Exec, (pname, params)); } } -static void GLAPIENTRY save_PointParameterfEXT( GLenum pname, GLfloat param ) +static void GLAPIENTRY +save_PointParameterfEXT(GLenum pname, GLfloat param) { save_PointParameterfvEXT(pname, ¶m); } -static void GLAPIENTRY save_PointParameteriNV( GLenum pname, GLint param ) +static void GLAPIENTRY +save_PointParameteriNV(GLenum pname, GLint param) { GLfloat p = (GLfloat) param; save_PointParameterfvEXT(pname, &p); } -static void GLAPIENTRY save_PointParameterivNV( GLenum pname, const GLint *param ) +static void GLAPIENTRY +save_PointParameterivNV(GLenum pname, const GLint * param) { GLfloat p = (GLfloat) param[0]; save_PointParameterfvEXT(pname, &p); } -static void GLAPIENTRY save_PointSize( GLfloat size ) +static void GLAPIENTRY +save_PointSize(GLfloat size) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_POINT_SIZE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_POINT_SIZE, 1); if (n) { n[1].f = size; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PointSize)( size ); + CALL_PointSize(ctx->Exec, (size)); } } -static void GLAPIENTRY save_PolygonMode( GLenum face, GLenum mode ) +static void GLAPIENTRY +save_PolygonMode(GLenum face, GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_POLYGON_MODE, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_POLYGON_MODE, 2); if (n) { n[1].e = face; n[2].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PolygonMode)( face, mode ); + CALL_PolygonMode(ctx->Exec, (face, mode)); } } @@ -2797,148 +2721,160 @@ static void GLAPIENTRY save_PolygonMode( GLenum face, GLenum mode ) /* * Polygon stipple must have been upacked already! */ -static void GLAPIENTRY save_PolygonStipple( const GLubyte *pattern ) +static void GLAPIENTRY +save_PolygonStipple(const GLubyte * pattern) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_POLYGON_STIPPLE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_POLYGON_STIPPLE, 1); if (n) { void *data; - n[1].data = MALLOC( 32 * 4 ); - data = n[1].data; /* This needed for Acorn compiler */ - MEMCPY( data, pattern, 32 * 4 ); + n[1].data = _mesa_malloc(32 * 4); + data = n[1].data; /* This needed for Acorn compiler */ + MEMCPY(data, pattern, 32 * 4); } if (ctx->ExecuteFlag) { - (*ctx->Exec->PolygonStipple)( (GLubyte*) pattern ); + CALL_PolygonStipple(ctx->Exec, ((GLubyte *) pattern)); } } -static void GLAPIENTRY save_PolygonOffset( GLfloat factor, GLfloat units ) +static void GLAPIENTRY +save_PolygonOffset(GLfloat factor, GLfloat units) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_POLYGON_OFFSET, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_POLYGON_OFFSET, 2); if (n) { n[1].f = factor; n[2].f = units; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PolygonOffset)( factor, units ); + CALL_PolygonOffset(ctx->Exec, (factor, units)); } } -static void GLAPIENTRY save_PolygonOffsetEXT( GLfloat factor, GLfloat bias ) +static void GLAPIENTRY +save_PolygonOffsetEXT(GLfloat factor, GLfloat bias) { GET_CURRENT_CONTEXT(ctx); - save_PolygonOffset(factor, ctx->DepthMaxF * bias); + /* XXX mult by DepthMaxF here??? */ + save_PolygonOffset(factor, ctx->DrawBuffer->_DepthMaxF * bias); } -static void GLAPIENTRY save_PopAttrib( void ) +static void GLAPIENTRY +save_PopAttrib(void) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - (void) ALLOC_INSTRUCTION( ctx, OPCODE_POP_ATTRIB, 0 ); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_POP_ATTRIB, 0); if (ctx->ExecuteFlag) { - (*ctx->Exec->PopAttrib)(); + CALL_PopAttrib(ctx->Exec, ()); } } -static void GLAPIENTRY save_PopMatrix( void ) +static void GLAPIENTRY +save_PopMatrix(void) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - (void) ALLOC_INSTRUCTION( ctx, OPCODE_POP_MATRIX, 0 ); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_POP_MATRIX, 0); if (ctx->ExecuteFlag) { - (*ctx->Exec->PopMatrix)(); + CALL_PopMatrix(ctx->Exec, ()); } } -static void GLAPIENTRY save_PopName( void ) +static void GLAPIENTRY +save_PopName(void) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - (void) ALLOC_INSTRUCTION( ctx, OPCODE_POP_NAME, 0 ); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_POP_NAME, 0); if (ctx->ExecuteFlag) { - (*ctx->Exec->PopName)(); + CALL_PopName(ctx->Exec, ()); } } -static void GLAPIENTRY save_PrioritizeTextures( GLsizei num, const GLuint *textures, - const GLclampf *priorities ) +static void GLAPIENTRY +save_PrioritizeTextures(GLsizei num, const GLuint * textures, + const GLclampf * priorities) { GET_CURRENT_CONTEXT(ctx); GLint i; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - for (i=0;iExecuteFlag) { - (*ctx->Exec->PrioritizeTextures)( num, textures, priorities ); + CALL_PrioritizeTextures(ctx->Exec, (num, textures, priorities)); } } -static void GLAPIENTRY save_PushAttrib( GLbitfield mask ) +static void GLAPIENTRY +save_PushAttrib(GLbitfield mask) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PUSH_ATTRIB, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PUSH_ATTRIB, 1); if (n) { n[1].bf = mask; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PushAttrib)( mask ); + CALL_PushAttrib(ctx->Exec, (mask)); } } -static void GLAPIENTRY save_PushMatrix( void ) +static void GLAPIENTRY +save_PushMatrix(void) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - (void) ALLOC_INSTRUCTION( ctx, OPCODE_PUSH_MATRIX, 0 ); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_PUSH_MATRIX, 0); if (ctx->ExecuteFlag) { - (*ctx->Exec->PushMatrix)(); + CALL_PushMatrix(ctx->Exec, ()); } } -static void GLAPIENTRY save_PushName( GLuint name ) +static void GLAPIENTRY +save_PushName(GLuint name) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PUSH_NAME, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PUSH_NAME, 1); if (n) { n[1].ui = name; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PushName)( name ); + CALL_PushName(ctx->Exec, (name)); } } -static void GLAPIENTRY save_RasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) +static void GLAPIENTRY +save_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_RASTER_POS, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_RASTER_POS, 4); if (n) { n[1].f = x; n[2].f = y; @@ -2946,154 +2882,179 @@ static void GLAPIENTRY save_RasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloa n[4].f = w; } if (ctx->ExecuteFlag) { - (*ctx->Exec->RasterPos4f)( x, y, z, w ); + CALL_RasterPos4f(ctx->Exec, (x, y, z, w)); } } -static void GLAPIENTRY save_RasterPos2d(GLdouble x, GLdouble y) +static void GLAPIENTRY +save_RasterPos2d(GLdouble x, GLdouble y) { save_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos2f(GLfloat x, GLfloat y) +static void GLAPIENTRY +save_RasterPos2f(GLfloat x, GLfloat y) { save_RasterPos4f(x, y, 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos2i(GLint x, GLint y) +static void GLAPIENTRY +save_RasterPos2i(GLint x, GLint y) { save_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos2s(GLshort x, GLshort y) +static void GLAPIENTRY +save_RasterPos2s(GLshort x, GLshort y) { save_RasterPos4f(x, y, 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos3d(GLdouble x, GLdouble y, GLdouble z) +static void GLAPIENTRY +save_RasterPos3d(GLdouble x, GLdouble y, GLdouble z) { save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F); } -static void GLAPIENTRY save_RasterPos3f(GLfloat x, GLfloat y, GLfloat z) +static void GLAPIENTRY +save_RasterPos3f(GLfloat x, GLfloat y, GLfloat z) { save_RasterPos4f(x, y, z, 1.0F); } -static void GLAPIENTRY save_RasterPos3i(GLint x, GLint y, GLint z) +static void GLAPIENTRY +save_RasterPos3i(GLint x, GLint y, GLint z) { save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F); } -static void GLAPIENTRY save_RasterPos3s(GLshort x, GLshort y, GLshort z) +static void GLAPIENTRY +save_RasterPos3s(GLshort x, GLshort y, GLshort z) { save_RasterPos4f(x, y, z, 1.0F); } -static void GLAPIENTRY save_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) +static void GLAPIENTRY +save_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) { save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); } -static void GLAPIENTRY save_RasterPos4i(GLint x, GLint y, GLint z, GLint w) +static void GLAPIENTRY +save_RasterPos4i(GLint x, GLint y, GLint z, GLint w) { save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); } -static void GLAPIENTRY save_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w) +static void GLAPIENTRY +save_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w) { save_RasterPos4f(x, y, z, w); } -static void GLAPIENTRY save_RasterPos2dv(const GLdouble *v) +static void GLAPIENTRY +save_RasterPos2dv(const GLdouble * v) { save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos2fv(const GLfloat *v) +static void GLAPIENTRY +save_RasterPos2fv(const GLfloat * v) { save_RasterPos4f(v[0], v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos2iv(const GLint *v) +static void GLAPIENTRY +save_RasterPos2iv(const GLint * v) { save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos2sv(const GLshort *v) +static void GLAPIENTRY +save_RasterPos2sv(const GLshort * v) { save_RasterPos4f(v[0], v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_RasterPos3dv(const GLdouble *v) +static void GLAPIENTRY +save_RasterPos3dv(const GLdouble * v) { save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F); } -static void GLAPIENTRY save_RasterPos3fv(const GLfloat *v) +static void GLAPIENTRY +save_RasterPos3fv(const GLfloat * v) { save_RasterPos4f(v[0], v[1], v[2], 1.0F); } -static void GLAPIENTRY save_RasterPos3iv(const GLint *v) +static void GLAPIENTRY +save_RasterPos3iv(const GLint * v) { save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F); } -static void GLAPIENTRY save_RasterPos3sv(const GLshort *v) +static void GLAPIENTRY +save_RasterPos3sv(const GLshort * v) { save_RasterPos4f(v[0], v[1], v[2], 1.0F); } -static void GLAPIENTRY save_RasterPos4dv(const GLdouble *v) +static void GLAPIENTRY +save_RasterPos4dv(const GLdouble * v) { save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + (GLfloat) v[2], (GLfloat) v[3]); } -static void GLAPIENTRY save_RasterPos4fv(const GLfloat *v) +static void GLAPIENTRY +save_RasterPos4fv(const GLfloat * v) { save_RasterPos4f(v[0], v[1], v[2], v[3]); } -static void GLAPIENTRY save_RasterPos4iv(const GLint *v) +static void GLAPIENTRY +save_RasterPos4iv(const GLint * v) { save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + (GLfloat) v[2], (GLfloat) v[3]); } -static void GLAPIENTRY save_RasterPos4sv(const GLshort *v) +static void GLAPIENTRY +save_RasterPos4sv(const GLshort * v) { save_RasterPos4f(v[0], v[1], v[2], v[3]); } -static void GLAPIENTRY save_PassThrough( GLfloat token ) +static void GLAPIENTRY +save_PassThrough(GLfloat token) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PASSTHROUGH, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PASSTHROUGH, 1); if (n) { n[1].f = token; } if (ctx->ExecuteFlag) { - (*ctx->Exec->PassThrough)( token ); + CALL_PassThrough(ctx->Exec, (token)); } } -static void GLAPIENTRY save_ReadBuffer( GLenum mode ) +static void GLAPIENTRY +save_ReadBuffer(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_READ_BUFFER, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_READ_BUFFER, 1); if (n) { n[1].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ReadBuffer)( mode ); + CALL_ReadBuffer(ctx->Exec, (mode)); } } @@ -3104,12 +3065,12 @@ save_ResetHistogram(GLenum target) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_RESET_HISTOGRAM, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_RESET_HISTOGRAM, 1); if (n) { n[1].e = target; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ResetHistogram)( target ); + CALL_ResetHistogram(ctx->Exec, (target)); } } @@ -3120,22 +3081,23 @@ save_ResetMinmax(GLenum target) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_RESET_MIN_MAX, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_RESET_MIN_MAX, 1); if (n) { n[1].e = target; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ResetMinmax)( target ); + CALL_ResetMinmax(ctx->Exec, (target)); } } -static void GLAPIENTRY save_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_Rotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ROTATE, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ROTATE, 4); if (n) { n[1].f = angle; n[2].f = x; @@ -3143,46 +3105,50 @@ static void GLAPIENTRY save_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloa n[4].f = z; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Rotatef)( angle, x, y, z ); + CALL_Rotatef(ctx->Exec, (angle, x, y, z)); } } -static void GLAPIENTRY save_Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ) +static void GLAPIENTRY +save_Rotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) { save_Rotatef((GLfloat) angle, (GLfloat) x, (GLfloat) y, (GLfloat) z); } -static void GLAPIENTRY save_Scalef( GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_Scalef(GLfloat x, GLfloat y, GLfloat z) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_SCALE, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_SCALE, 3); if (n) { n[1].f = x; n[2].f = y; n[3].f = z; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Scalef)( x, y, z ); + CALL_Scalef(ctx->Exec, (x, y, z)); } } -static void GLAPIENTRY save_Scaled( GLdouble x, GLdouble y, GLdouble z ) +static void GLAPIENTRY +save_Scaled(GLdouble x, GLdouble y, GLdouble z) { save_Scalef((GLfloat) x, (GLfloat) y, (GLfloat) z); } -static void GLAPIENTRY save_Scissor( GLint x, GLint y, GLsizei width, GLsizei height ) +static void GLAPIENTRY +save_Scissor(GLint x, GLint y, GLsizei width, GLsizei height) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_SCISSOR, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_SCISSOR, 4); if (n) { n[1].i = x; n[2].i = y; @@ -3190,81 +3156,141 @@ static void GLAPIENTRY save_Scissor( GLint x, GLint y, GLsizei width, GLsizei he n[4].i = height; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Scissor)( x, y, width, height ); + CALL_Scissor(ctx->Exec, (x, y, width, height)); } } -static void GLAPIENTRY save_ShadeModel( GLenum mode ) +static void GLAPIENTRY +save_ShadeModel(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_SHADE_MODEL, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_SHADE_MODEL, 1); if (n) { n[1].e = mode; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ShadeModel)( mode ); + CALL_ShadeModel(ctx->Exec, (mode)); } } -static void GLAPIENTRY save_StencilFunc( GLenum func, GLint ref, GLuint mask ) +static void GLAPIENTRY +save_StencilFunc(GLenum func, GLint ref, GLuint mask) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_STENCIL_FUNC, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_STENCIL_FUNC, 3); if (n) { n[1].e = func; n[2].i = ref; n[3].ui = mask; } if (ctx->ExecuteFlag) { - (*ctx->Exec->StencilFunc)( func, ref, mask ); + CALL_StencilFunc(ctx->Exec, (func, ref, mask)); } } -static void GLAPIENTRY save_StencilMask( GLuint mask ) +static void GLAPIENTRY +save_StencilMask(GLuint mask) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_STENCIL_MASK, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_STENCIL_MASK, 1); if (n) { n[1].ui = mask; } if (ctx->ExecuteFlag) { - (*ctx->Exec->StencilMask)( mask ); + CALL_StencilMask(ctx->Exec, (mask)); } } -static void GLAPIENTRY save_StencilOp( GLenum fail, GLenum zfail, GLenum zpass ) +static void GLAPIENTRY +save_StencilOp(GLenum fail, GLenum zfail, GLenum zpass) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_STENCIL_OP, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_STENCIL_OP, 3); if (n) { n[1].e = fail; n[2].e = zfail; n[3].e = zpass; } if (ctx->ExecuteFlag) { - (*ctx->Exec->StencilOp)( fail, zfail, zpass ); + CALL_StencilOp(ctx->Exec, (fail, zfail, zpass)); } } -static void GLAPIENTRY save_TexEnvfv( GLenum target, GLenum pname, const GLfloat *params ) +static void GLAPIENTRY +save_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEXENV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_STENCIL_FUNC_SEPARATE, 4); + if (n) { + n[1].e = face; + n[2].e = func; + n[3].i = ref; + n[4].ui = mask; + } + if (ctx->ExecuteFlag) { + CALL_StencilFuncSeparate(ctx->Exec, (face, func, ref, mask)); + } +} + + +static void GLAPIENTRY +save_StencilMaskSeparate(GLenum face, GLuint mask) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_STENCIL_MASK_SEPARATE, 2); + if (n) { + n[1].e = face; + n[2].ui = mask; + } + if (ctx->ExecuteFlag) { + CALL_StencilMaskSeparate(ctx->Exec, (face, mask)); + } +} + + +static void GLAPIENTRY +save_StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_STENCIL_OP_SEPARATE, 4); + if (n) { + n[1].e = face; + n[2].e = fail; + n[3].e = zfail; + n[4].e = zpass; + } + if (ctx->ExecuteFlag) { + CALL_StencilOpSeparate(ctx->Exec, (face, fail, zfail, zpass)); + } +} + + +static void GLAPIENTRY +save_TexEnvfv(GLenum target, GLenum pname, const GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEXENV, 6); if (n) { n[1].e = target; n[2].e = pname; @@ -3280,49 +3306,53 @@ static void GLAPIENTRY save_TexEnvfv( GLenum target, GLenum pname, const GLfloat } } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexEnvfv)( target, pname, params ); + CALL_TexEnvfv(ctx->Exec, (target, pname, params)); } } -static void GLAPIENTRY save_TexEnvf( GLenum target, GLenum pname, GLfloat param ) +static void GLAPIENTRY +save_TexEnvf(GLenum target, GLenum pname, GLfloat param) { - save_TexEnvfv( target, pname, ¶m ); + save_TexEnvfv(target, pname, ¶m); } -static void GLAPIENTRY save_TexEnvi( GLenum target, GLenum pname, GLint param ) +static void GLAPIENTRY +save_TexEnvi(GLenum target, GLenum pname, GLint param) { GLfloat p[4]; p[0] = (GLfloat) param; p[1] = p[2] = p[3] = 0.0; - save_TexEnvfv( target, pname, p ); + save_TexEnvfv(target, pname, p); } -static void GLAPIENTRY save_TexEnviv( GLenum target, GLenum pname, const GLint *param ) +static void GLAPIENTRY +save_TexEnviv(GLenum target, GLenum pname, const GLint * param) { GLfloat p[4]; if (pname == GL_TEXTURE_ENV_COLOR) { - 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] ); + 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]); } else { p[0] = (GLfloat) param[0]; p[1] = p[2] = p[3] = 0.0F; } - save_TexEnvfv( target, pname, p ); + save_TexEnvfv(target, pname, p); } -static void GLAPIENTRY save_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) +static void GLAPIENTRY +save_TexGenfv(GLenum coord, GLenum pname, const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEXGEN, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEXGEN, 6); if (n) { n[1].e = coord; n[2].e = pname; @@ -3332,12 +3362,13 @@ static void GLAPIENTRY save_TexGenfv( GLenum coord, GLenum pname, const GLfloat n[6].f = params[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexGenfv)( coord, pname, params ); + CALL_TexGenfv(ctx->Exec, (coord, pname, params)); } } -static void GLAPIENTRY save_TexGeniv(GLenum coord, GLenum pname, const GLint *params ) +static void GLAPIENTRY +save_TexGeniv(GLenum coord, GLenum pname, const GLint *params) { GLfloat p[4]; p[0] = (GLfloat) params[0]; @@ -3348,43 +3379,47 @@ static void GLAPIENTRY save_TexGeniv(GLenum coord, GLenum pname, const GLint *pa } -static void GLAPIENTRY save_TexGend(GLenum coord, GLenum pname, GLdouble param ) +static void GLAPIENTRY +save_TexGend(GLenum coord, GLenum pname, GLdouble param) { GLfloat p = (GLfloat) param; - save_TexGenfv( coord, pname, &p ); + save_TexGenfv(coord, pname, &p); } -static void GLAPIENTRY save_TexGendv(GLenum coord, GLenum pname, const GLdouble *params ) +static void GLAPIENTRY +save_TexGendv(GLenum coord, GLenum pname, const GLdouble *params) { GLfloat p[4]; p[0] = (GLfloat) params[0]; p[1] = (GLfloat) params[1]; p[2] = (GLfloat) params[2]; p[3] = (GLfloat) params[3]; - save_TexGenfv( coord, pname, p ); + save_TexGenfv(coord, pname, p); } -static void GLAPIENTRY save_TexGenf( GLenum coord, GLenum pname, GLfloat param ) +static void GLAPIENTRY +save_TexGenf(GLenum coord, GLenum pname, GLfloat param) { save_TexGenfv(coord, pname, ¶m); } -static void GLAPIENTRY save_TexGeni( GLenum coord, GLenum pname, GLint param ) +static void GLAPIENTRY +save_TexGeni(GLenum coord, GLenum pname, GLint param) { - save_TexGeniv( coord, pname, ¶m ); + save_TexGeniv(coord, pname, ¶m); } -static void GLAPIENTRY save_TexParameterfv( GLenum target, - GLenum pname, const GLfloat *params ) +static void GLAPIENTRY +save_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEXPARAMETER, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEXPARAMETER, 6); if (n) { n[1].e = target; n[2].e = pname; @@ -3394,18 +3429,20 @@ static void GLAPIENTRY save_TexParameterfv( GLenum target, n[6].f = params[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexParameterfv)( target, pname, params ); + CALL_TexParameterfv(ctx->Exec, (target, pname, params)); } } -static void GLAPIENTRY save_TexParameterf( GLenum target, GLenum pname, GLfloat param ) +static void GLAPIENTRY +save_TexParameterf(GLenum target, GLenum pname, GLfloat param) { save_TexParameterfv(target, pname, ¶m); } -static void GLAPIENTRY save_TexParameteri( GLenum target, GLenum pname, GLint param ) +static void GLAPIENTRY +save_TexParameteri(GLenum target, GLenum pname, GLint param) { GLfloat fparam[4]; fparam[0] = (GLfloat) param; @@ -3414,7 +3451,8 @@ static void GLAPIENTRY save_TexParameteri( GLenum target, GLenum pname, GLint pa } -static void GLAPIENTRY save_TexParameteriv( GLenum target, GLenum pname, const GLint *params ) +static void GLAPIENTRY +save_TexParameteriv(GLenum target, GLenum pname, const GLint *params) { GLfloat fparam[4]; fparam[0] = (GLfloat) params[0]; @@ -3423,24 +3461,24 @@ static void GLAPIENTRY save_TexParameteriv( GLenum target, GLenum pname, const G } -static void GLAPIENTRY save_TexImage1D( GLenum target, - GLint level, GLint components, - GLsizei width, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ) +static void GLAPIENTRY +save_TexImage1D(GLenum target, + GLint level, GLint components, + GLsizei width, GLint border, + GLenum format, GLenum type, const GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); if (target == GL_PROXY_TEXTURE_1D) { /* don't compile, execute immediately */ - (*ctx->Exec->TexImage1D)( target, level, components, width, - border, format, type, pixels ); + CALL_TexImage1D(ctx->Exec, (target, level, components, width, + border, format, type, pixels)); } else { GLvoid *image = unpack_image(1, width, 1, 1, format, type, pixels, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEX_IMAGE1D, 8 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEX_IMAGE1D, 8); if (n) { n[1].e = target; n[2].i = level; @@ -3452,34 +3490,34 @@ static void GLAPIENTRY save_TexImage1D( GLenum target, n[8].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexImage1D)( target, level, components, width, - border, format, type, pixels ); + CALL_TexImage1D(ctx->Exec, (target, level, components, width, + border, format, type, pixels)); } } } -static void GLAPIENTRY save_TexImage2D( GLenum target, - GLint level, GLint components, - GLsizei width, GLsizei height, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels) +static void GLAPIENTRY +save_TexImage2D(GLenum target, + GLint level, GLint components, + GLsizei width, GLsizei height, GLint border, + GLenum format, GLenum type, const GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); if (target == GL_PROXY_TEXTURE_2D) { /* don't compile, execute immediately */ - (*ctx->Exec->TexImage2D)( target, level, components, width, - height, border, format, type, pixels ); + CALL_TexImage2D(ctx->Exec, (target, level, components, width, + height, border, format, type, pixels)); } else { GLvoid *image = unpack_image(2, width, height, 1, format, type, pixels, &ctx->Unpack); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEX_IMAGE2D, 9 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEX_IMAGE2D, 9); if (n) { n[1].e = target; n[2].i = level; @@ -3492,35 +3530,36 @@ static void GLAPIENTRY save_TexImage2D( GLenum target, n[9].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexImage2D)( target, level, components, width, - height, border, format, type, pixels ); + CALL_TexImage2D(ctx->Exec, (target, level, components, width, + height, border, format, type, pixels)); } } } -static void GLAPIENTRY save_TexImage3D( GLenum target, - GLint level, GLint internalFormat, - GLsizei width, GLsizei height, GLsizei depth, - GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ) +static void GLAPIENTRY +save_TexImage3D(GLenum target, + GLint level, GLint internalFormat, + GLsizei width, GLsizei height, GLsizei depth, + GLint border, + GLenum format, GLenum type, const GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); if (target == GL_PROXY_TEXTURE_3D) { /* don't compile, execute immediately */ - (*ctx->Exec->TexImage3D)( target, level, internalFormat, width, - height, depth, border, format, type, pixels ); + CALL_TexImage3D(ctx->Exec, (target, level, internalFormat, width, + height, depth, border, format, type, + pixels)); } else { Node *n; GLvoid *image = unpack_image(3, width, height, depth, format, type, pixels, &ctx->Unpack); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEX_IMAGE3D, 10 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEX_IMAGE3D, 10); if (n) { n[1].e = target; n[2].i = level; @@ -3534,26 +3573,28 @@ static void GLAPIENTRY save_TexImage3D( GLenum target, n[10].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexImage3D)( target, level, internalFormat, width, - height, depth, border, format, type, pixels ); + CALL_TexImage3D(ctx->Exec, (target, level, internalFormat, width, + height, depth, border, format, type, + pixels)); } } } -static void GLAPIENTRY save_TexSubImage1D( GLenum target, GLint level, GLint xoffset, - GLsizei width, GLenum format, GLenum type, - const GLvoid *pixels ) +static void GLAPIENTRY +save_TexSubImage1D(GLenum target, GLint level, GLint xoffset, + GLsizei width, GLenum format, GLenum type, + const GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); Node *n; GLvoid *image = unpack_image(1, width, 1, 1, format, type, pixels, &ctx->Unpack); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEX_SUB_IMAGE1D, 7 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEX_SUB_IMAGE1D, 7); if (n) { n[1].e = target; n[2].i = level; @@ -3564,27 +3605,27 @@ static void GLAPIENTRY save_TexSubImage1D( GLenum target, GLint level, GLint xof n[7].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexSubImage1D)( target, level, xoffset, width, - format, type, pixels ); + CALL_TexSubImage1D(ctx->Exec, (target, level, xoffset, width, + format, type, pixels)); } } -static void GLAPIENTRY save_TexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ) +static void GLAPIENTRY +save_TexSubImage2D(GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, const GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); Node *n; GLvoid *image = unpack_image(2, width, height, 1, format, type, pixels, &ctx->Unpack); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEX_SUB_IMAGE2D, 9 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEX_SUB_IMAGE2D, 9); if (n) { n[1].e = target; n[2].i = level; @@ -3597,27 +3638,27 @@ static void GLAPIENTRY save_TexSubImage2D( GLenum target, GLint level, n[9].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexSubImage2D)( target, level, xoffset, yoffset, - width, height, format, type, pixels ); + CALL_TexSubImage2D(ctx->Exec, (target, level, xoffset, yoffset, + width, height, format, type, pixels)); } } -static void GLAPIENTRY save_TexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset,GLint zoffset, - GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, - const GLvoid *pixels ) +static void GLAPIENTRY +save_TexSubImage3D(GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, const GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); Node *n; GLvoid *image = unpack_image(3, width, height, depth, format, type, pixels, &ctx->Unpack); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TEX_SUB_IMAGE3D, 11 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEX_SUB_IMAGE3D, 11); if (n) { n[1].e = target; n[2].i = level; @@ -3632,46 +3673,50 @@ static void GLAPIENTRY save_TexSubImage3D( GLenum target, GLint level, n[11].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->TexSubImage3D)( target, level, - xoffset, yoffset, zoffset, - width, height, depth, format, type, pixels ); + CALL_TexSubImage3D(ctx->Exec, (target, level, + xoffset, yoffset, zoffset, + width, height, depth, format, type, + pixels)); } } -static void GLAPIENTRY save_Translatef( GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_Translatef(GLfloat x, GLfloat y, GLfloat z) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TRANSLATE, 3 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TRANSLATE, 3); if (n) { n[1].f = x; n[2].f = y; n[3].f = z; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Translatef)( x, y, z ); + CALL_Translatef(ctx->Exec, (x, y, z)); } } -static void GLAPIENTRY save_Translated( GLdouble x, GLdouble y, GLdouble z ) +static void GLAPIENTRY +save_Translated(GLdouble x, GLdouble y, GLdouble z) { save_Translatef((GLfloat) x, (GLfloat) y, (GLfloat) z); } -static void GLAPIENTRY save_Viewport( GLint x, GLint y, GLsizei width, GLsizei height ) +static void GLAPIENTRY +save_Viewport(GLint x, GLint y, GLsizei width, GLsizei height) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_VIEWPORT, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_VIEWPORT, 4); if (n) { n[1].i = x; n[2].i = y; @@ -3679,17 +3724,18 @@ static void GLAPIENTRY save_Viewport( GLint x, GLint y, GLsizei width, GLsizei h n[4].i = (GLint) height; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Viewport)( x, y, width, height ); + CALL_Viewport(ctx->Exec, (x, y, width, height)); } } -static void GLAPIENTRY save_WindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) +static void GLAPIENTRY +save_WindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_WINDOW_POS, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_WINDOW_POS, 4); if (n) { n[1].f = x; n[2].f = y; @@ -3697,123 +3743,146 @@ static void GLAPIENTRY save_WindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GL n[4].f = w; } if (ctx->ExecuteFlag) { - (*ctx->Exec->WindowPos4fMESA)( x, y, z, w ); + CALL_WindowPos4fMESA(ctx->Exec, (x, y, z, w)); } } -static void GLAPIENTRY save_WindowPos2dMESA(GLdouble x, GLdouble y) +static void GLAPIENTRY +save_WindowPos2dMESA(GLdouble x, GLdouble y) { save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos2fMESA(GLfloat x, GLfloat y) +static void GLAPIENTRY +save_WindowPos2fMESA(GLfloat x, GLfloat y) { save_WindowPos4fMESA(x, y, 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos2iMESA(GLint x, GLint y) +static void GLAPIENTRY +save_WindowPos2iMESA(GLint x, GLint y) { save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos2sMESA(GLshort x, GLshort y) +static void GLAPIENTRY +save_WindowPos2sMESA(GLshort x, GLshort y) { save_WindowPos4fMESA(x, y, 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z) +static void GLAPIENTRY +save_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z) { save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F); } -static void GLAPIENTRY save_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z) +static void GLAPIENTRY +save_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z) { save_WindowPos4fMESA(x, y, z, 1.0F); } -static void GLAPIENTRY save_WindowPos3iMESA(GLint x, GLint y, GLint z) +static void GLAPIENTRY +save_WindowPos3iMESA(GLint x, GLint y, GLint z) { save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F); } -static void GLAPIENTRY save_WindowPos3sMESA(GLshort x, GLshort y, GLshort z) +static void GLAPIENTRY +save_WindowPos3sMESA(GLshort x, GLshort y, GLshort z) { save_WindowPos4fMESA(x, y, z, 1.0F); } -static void GLAPIENTRY save_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w) +static void GLAPIENTRY +save_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w) { save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); } -static void GLAPIENTRY save_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w) +static void GLAPIENTRY +save_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w) { save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); } -static void GLAPIENTRY save_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w) +static void GLAPIENTRY +save_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w) { save_WindowPos4fMESA(x, y, z, w); } -static void GLAPIENTRY save_WindowPos2dvMESA(const GLdouble *v) +static void GLAPIENTRY +save_WindowPos2dvMESA(const GLdouble * v) { save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos2fvMESA(const GLfloat *v) +static void GLAPIENTRY +save_WindowPos2fvMESA(const GLfloat * v) { save_WindowPos4fMESA(v[0], v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos2ivMESA(const GLint *v) +static void GLAPIENTRY +save_WindowPos2ivMESA(const GLint * v) { save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos2svMESA(const GLshort *v) +static void GLAPIENTRY +save_WindowPos2svMESA(const GLshort * v) { save_WindowPos4fMESA(v[0], v[1], 0.0F, 1.0F); } -static void GLAPIENTRY save_WindowPos3dvMESA(const GLdouble *v) +static void GLAPIENTRY +save_WindowPos3dvMESA(const GLdouble * v) { save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F); } -static void GLAPIENTRY save_WindowPos3fvMESA(const GLfloat *v) +static void GLAPIENTRY +save_WindowPos3fvMESA(const GLfloat * v) { save_WindowPos4fMESA(v[0], v[1], v[2], 1.0F); } -static void GLAPIENTRY save_WindowPos3ivMESA(const GLint *v) +static void GLAPIENTRY +save_WindowPos3ivMESA(const GLint * v) { save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F); } -static void GLAPIENTRY save_WindowPos3svMESA(const GLshort *v) +static void GLAPIENTRY +save_WindowPos3svMESA(const GLshort * v) { save_WindowPos4fMESA(v[0], v[1], v[2], 1.0F); } -static void GLAPIENTRY save_WindowPos4dvMESA(const GLdouble *v) +static void GLAPIENTRY +save_WindowPos4dvMESA(const GLdouble * v) { save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + (GLfloat) v[2], (GLfloat) v[3]); } -static void GLAPIENTRY save_WindowPos4fvMESA(const GLfloat *v) +static void GLAPIENTRY +save_WindowPos4fvMESA(const GLfloat * v) { save_WindowPos4fMESA(v[0], v[1], v[2], v[3]); } -static void GLAPIENTRY save_WindowPos4ivMESA(const GLint *v) +static void GLAPIENTRY +save_WindowPos4ivMESA(const GLint * v) { save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + (GLfloat) v[2], (GLfloat) v[3]); } -static void GLAPIENTRY save_WindowPos4svMESA(const GLshort *v) +static void GLAPIENTRY +save_WindowPos4svMESA(const GLshort * v) { save_WindowPos4fMESA(v[0], v[1], v[2], v[3]); } @@ -3821,24 +3890,26 @@ static void GLAPIENTRY save_WindowPos4svMESA(const GLshort *v) /* GL_ARB_multitexture */ -static void GLAPIENTRY save_ActiveTextureARB( GLenum target ) +static void GLAPIENTRY +save_ActiveTextureARB(GLenum target) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ACTIVE_TEXTURE, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ACTIVE_TEXTURE, 1); if (n) { n[1].e = target; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ActiveTextureARB)( target ); + CALL_ActiveTextureARB(ctx->Exec, (target)); } } /* GL_ARB_transpose_matrix */ -static void GLAPIENTRY save_LoadTransposeMatrixdARB( const GLdouble m[16] ) +static void GLAPIENTRY +save_LoadTransposeMatrixdARB(const GLdouble m[16]) { GLfloat tm[16]; _math_transposefd(tm, m); @@ -3846,7 +3917,8 @@ static void GLAPIENTRY save_LoadTransposeMatrixdARB( const GLdouble m[16] ) } -static void GLAPIENTRY save_LoadTransposeMatrixfARB( const GLfloat m[16] ) +static void GLAPIENTRY +save_LoadTransposeMatrixfARB(const GLfloat m[16]) { GLfloat tm[16]; _math_transposef(tm, m); @@ -3855,7 +3927,7 @@ static void GLAPIENTRY save_LoadTransposeMatrixfARB( const GLfloat m[16] ) static void GLAPIENTRY -save_MultTransposeMatrixdARB( const GLdouble m[16] ) +save_MultTransposeMatrixdARB(const GLdouble m[16]) { GLfloat tm[16]; _math_transposefd(tm, m); @@ -3864,7 +3936,7 @@ save_MultTransposeMatrixdARB( const GLdouble m[16] ) static void GLAPIENTRY -save_MultTransposeMatrixfARB( const GLfloat m[16] ) +save_MultTransposeMatrixfARB(const GLfloat m[16]) { GLfloat tm[16]; _math_transposef(tm, m); @@ -3872,47 +3944,32 @@ save_MultTransposeMatrixfARB( const GLfloat m[16] ) } -static void GLAPIENTRY -save_PixelTexGenSGIX(GLenum mode) -{ - GET_CURRENT_CONTEXT(ctx); - Node *n; - ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PIXEL_TEXGEN_SGIX, 1 ); - if (n) { - n[1].e = mode; - } - if (ctx->ExecuteFlag) { - (*ctx->Exec->PixelTexGenSGIX)( mode ); - } -} - - /* GL_ARB_texture_compression */ static void GLAPIENTRY save_CompressedTexImage1DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, - const GLvoid *data) + const GLvoid * data) { GET_CURRENT_CONTEXT(ctx); if (target == GL_PROXY_TEXTURE_1D) { /* don't compile, execute immediately */ - (*ctx->Exec->CompressedTexImage1DARB)(target, level, internalFormat, - width, border, imageSize, data); + CALL_CompressedTexImage1DARB(ctx->Exec, (target, level, internalFormat, + width, border, imageSize, + data)); } else { Node *n; GLvoid *image; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); /* make copy of image */ - image = MALLOC(imageSize); + image = _mesa_malloc(imageSize); if (!image) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage1DARB"); return; } MEMCPY(image, data, imageSize); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COMPRESSED_TEX_IMAGE_1D, 7 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COMPRESSED_TEX_IMAGE_1D, 7); if (n) { n[1].e = target; n[2].i = level; @@ -3923,11 +3980,12 @@ save_CompressedTexImage1DARB(GLenum target, GLint level, n[7].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->CompressedTexImage1DARB)(target, level, internalFormat, - width, border, imageSize, data); + CALL_CompressedTexImage1DARB(ctx->Exec, + (target, level, internalFormat, width, + border, imageSize, data)); } } } @@ -3937,26 +3995,27 @@ static void GLAPIENTRY save_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, - const GLvoid *data) + const GLvoid * data) { GET_CURRENT_CONTEXT(ctx); if (target == GL_PROXY_TEXTURE_2D) { /* don't compile, execute immediately */ - (*ctx->Exec->CompressedTexImage2DARB)(target, level, internalFormat, - width, height, border, imageSize, data); + CALL_CompressedTexImage2DARB(ctx->Exec, (target, level, internalFormat, + width, height, border, + imageSize, data)); } else { Node *n; GLvoid *image; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); /* make copy of image */ - image = MALLOC(imageSize); + image = _mesa_malloc(imageSize); if (!image) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2DARB"); return; } MEMCPY(image, data, imageSize); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COMPRESSED_TEX_IMAGE_2D, 8 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COMPRESSED_TEX_IMAGE_2D, 8); if (n) { n[1].e = target; n[2].i = level; @@ -3968,11 +4027,12 @@ save_CompressedTexImage2DARB(GLenum target, GLint level, n[8].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->CompressedTexImage2DARB)(target, level, internalFormat, - width, height, border, imageSize, data); + CALL_CompressedTexImage2DARB(ctx->Exec, + (target, level, internalFormat, width, + height, border, imageSize, data)); } } } @@ -3982,26 +4042,27 @@ static void GLAPIENTRY save_CompressedTexImage3DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, - GLsizei imageSize, const GLvoid *data) + GLsizei imageSize, const GLvoid * data) { GET_CURRENT_CONTEXT(ctx); if (target == GL_PROXY_TEXTURE_3D) { /* don't compile, execute immediately */ - (*ctx->Exec->CompressedTexImage3DARB)(target, level, internalFormat, - width, height, depth, border, imageSize, data); + CALL_CompressedTexImage3DARB(ctx->Exec, (target, level, internalFormat, + width, height, depth, border, + imageSize, data)); } else { Node *n; GLvoid *image; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); /* make copy of image */ - image = MALLOC(imageSize); + image = _mesa_malloc(imageSize); if (!image) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage3DARB"); return; } MEMCPY(image, data, imageSize); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COMPRESSED_TEX_IMAGE_3D, 9 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COMPRESSED_TEX_IMAGE_3D, 9); if (n) { n[1].e = target; n[2].i = level; @@ -4014,11 +4075,13 @@ save_CompressedTexImage3DARB(GLenum target, GLint level, n[9].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->CompressedTexImage3DARB)(target, level, internalFormat, - width, height, depth, border, imageSize, data); + CALL_CompressedTexImage3DARB(ctx->Exec, + (target, level, internalFormat, width, + height, depth, border, imageSize, + data)); } } } @@ -4027,7 +4090,7 @@ save_CompressedTexImage3DARB(GLenum target, GLint level, static void GLAPIENTRY save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, - GLsizei imageSize, const GLvoid *data) + GLsizei imageSize, const GLvoid * data) { Node *n; GLvoid *image; @@ -4036,13 +4099,13 @@ save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); /* make copy of image */ - image = MALLOC(imageSize); + image = _mesa_malloc(imageSize); if (!image) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexSubImage1DARB"); return; } MEMCPY(image, data, imageSize); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D, 7 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D, 7); if (n) { n[1].e = target; n[2].i = level; @@ -4053,11 +4116,12 @@ save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, n[7].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->CompressedTexSubImage1DARB)(target, level, xoffset, - width, format, imageSize, data); + CALL_CompressedTexSubImage1DARB(ctx->Exec, (target, level, xoffset, + width, format, imageSize, + data)); } } @@ -4066,7 +4130,7 @@ static void GLAPIENTRY save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, - const GLvoid *data) + const GLvoid * data) { Node *n; GLvoid *image; @@ -4075,13 +4139,13 @@ save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); /* make copy of image */ - image = MALLOC(imageSize); + image = _mesa_malloc(imageSize); if (!image) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexSubImage2DARB"); return; } MEMCPY(image, data, imageSize); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D, 9 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D, 9); if (n) { n[1].e = target; n[2].i = level; @@ -4094,11 +4158,12 @@ save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, n[9].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->CompressedTexSubImage2DARB)(target, level, xoffset, yoffset, - width, height, format, imageSize, data); + CALL_CompressedTexSubImage2DARB(ctx->Exec, + (target, level, xoffset, yoffset, width, + height, format, imageSize, data)); } } @@ -4107,7 +4172,7 @@ static void GLAPIENTRY save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, - GLsizei imageSize, const GLvoid *data) + GLsizei imageSize, const GLvoid * data) { Node *n; GLvoid *image; @@ -4116,13 +4181,13 @@ save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); /* make copy of image */ - image = MALLOC(imageSize); + image = _mesa_malloc(imageSize); if (!image) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexSubImage3DARB"); return; } MEMCPY(image, data, imageSize); - n = ALLOC_INSTRUCTION( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D, 11 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D, 11); if (n) { n[1].e = target; n[2].i = level; @@ -4137,11 +4202,13 @@ save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, n[11].data = image; } else if (image) { - FREE(image); + _mesa_free(image); } if (ctx->ExecuteFlag) { - (*ctx->Exec->CompressedTexSubImage3DARB)(target, level, xoffset, yoffset, - zoffset, width, height, depth, format, imageSize, data); + CALL_CompressedTexSubImage3DARB(ctx->Exec, + (target, level, xoffset, yoffset, + zoffset, width, height, depth, format, + imageSize, data)); } } @@ -4153,57 +4220,17 @@ save_SampleCoverageARB(GLclampf value, GLboolean invert) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_SAMPLE_COVERAGE, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_SAMPLE_COVERAGE, 2); if (n) { n[1].f = value; n[2].b = invert; } if (ctx->ExecuteFlag) { - (*ctx->Exec->SampleCoverageARB)( value, invert ); + CALL_SampleCoverageARB(ctx->Exec, (value, invert)); } } -/* GL_SGIS_pixel_texture */ - -static void GLAPIENTRY -save_PixelTexGenParameteriSGIS(GLenum target, GLint value) -{ - GET_CURRENT_CONTEXT(ctx); - Node *n; - ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS, 2 ); - if (n) { - n[1].e = target; - n[2].i = value; - } - if (ctx->ExecuteFlag) { - (*ctx->Exec->PixelTexGenParameteriSGIS)( target, value ); - } -} - - -static void GLAPIENTRY -save_PixelTexGenParameterfSGIS(GLenum target, GLfloat value) -{ - save_PixelTexGenParameteriSGIS(target, (GLint) value); -} - - -static void GLAPIENTRY -save_PixelTexGenParameterivSGIS(GLenum target, const GLint *value) -{ - save_PixelTexGenParameteriSGIS(target, *value); -} - - -static void GLAPIENTRY -save_PixelTexGenParameterfvSGIS(GLenum target, const GLfloat *value) -{ - save_PixelTexGenParameteriSGIS(target, (GLint) *value); -} - - /* * GL_NV_vertex_program */ @@ -4214,13 +4241,13 @@ save_BindProgramNV(GLenum target, GLuint id) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BIND_PROGRAM_NV, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BIND_PROGRAM_NV, 2); if (n) { n[1].e = target; n[2].ui = id; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BindProgramNV)( target, id ); + CALL_BindProgramNV(ctx->Exec, (target, id)); } } #endif /* FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program */ @@ -4232,7 +4259,7 @@ save_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EXECUTE_PROGRAM_NV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EXECUTE_PROGRAM_NV, 6); if (n) { n[1].e = target; n[2].ui = id; @@ -4242,20 +4269,19 @@ save_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params) n[6].f = params[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ExecuteProgramNV)(target, id, params); + CALL_ExecuteProgramNV(ctx->Exec, (target, id, params)); } } static void GLAPIENTRY save_ProgramParameter4fNV(GLenum target, GLuint index, - GLfloat x, GLfloat y, - GLfloat z, GLfloat w) + GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_PARAMETER4F_NV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_PARAMETER4F_NV, 6); if (n) { n[1].e = target; n[2].ui = index; @@ -4265,13 +4291,14 @@ save_ProgramParameter4fNV(GLenum target, GLuint index, n[6].f = w; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramParameter4fNV)(target, index, x, y, z, w); + CALL_ProgramParameter4fNV(ctx->Exec, (target, index, x, y, z, w)); } } static void GLAPIENTRY -save_ProgramParameter4fvNV(GLenum target, GLuint index, const GLfloat *params) +save_ProgramParameter4fvNV(GLenum target, GLuint index, + const GLfloat *params) { save_ProgramParameter4fNV(target, index, params[0], params[1], params[2], params[3]); @@ -4280,8 +4307,7 @@ save_ProgramParameter4fvNV(GLenum target, GLuint index, const GLfloat *params) static void GLAPIENTRY save_ProgramParameter4dNV(GLenum target, GLuint index, - GLdouble x, GLdouble y, - GLdouble z, GLdouble w) + GLdouble x, GLdouble y, GLdouble z, GLdouble w) { save_ProgramParameter4fNV(target, index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); @@ -4322,7 +4348,7 @@ save_ProgramParameters4fvNV(GLenum target, GLuint index, static void GLAPIENTRY save_LoadProgramNV(GLenum target, GLuint id, GLsizei len, - const GLubyte *program) + const GLubyte * program) { GET_CURRENT_CONTEXT(ctx); Node *n; @@ -4336,7 +4362,7 @@ save_LoadProgramNV(GLenum target, GLuint id, GLsizei len, _mesa_memcpy(programCopy, program, len); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_LOAD_PROGRAM_NV, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_LOAD_PROGRAM_NV, 4); if (n) { n[1].e = target; n[2].ui = id; @@ -4344,13 +4370,13 @@ save_LoadProgramNV(GLenum target, GLuint id, GLsizei len, n[4].data = programCopy; } if (ctx->ExecuteFlag) { - (*ctx->Exec->LoadProgramNV)(target, id, len, program); + CALL_LoadProgramNV(ctx->Exec, (target, id, len, program)); } } static void GLAPIENTRY -save_RequestResidentProgramsNV(GLsizei num, const GLuint *ids) +save_RequestResidentProgramsNV(GLsizei num, const GLuint * ids) { GET_CURRENT_CONTEXT(ctx); Node *n; @@ -4361,13 +4387,13 @@ save_RequestResidentProgramsNV(GLsizei num, const GLuint *ids) } _mesa_memcpy(idCopy, ids, num * sizeof(GLuint)); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TRACK_MATRIX_NV, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TRACK_MATRIX_NV, 2); if (n) { n[1].i = num; n[2].data = idCopy; } if (ctx->ExecuteFlag) { - (*ctx->Exec->RequestResidentProgramsNV)(num, ids); + CALL_RequestResidentProgramsNV(ctx->Exec, (num, ids)); } } @@ -4379,7 +4405,7 @@ save_TrackMatrixNV(GLenum target, GLuint address, GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_TRACK_MATRIX_NV, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_TRACK_MATRIX_NV, 4); if (n) { n[1].e = target; n[2].ui = address; @@ -4387,7 +4413,7 @@ save_TrackMatrixNV(GLenum target, GLuint address, n[4].e = transform; } if (ctx->ExecuteFlag) { - (*ctx->Exec->TrackMatrixNV)(target, address, matrix, transform); + CALL_TrackMatrixNV(ctx->Exec, (target, address, matrix, transform)); } } #endif /* FEATURE_NV_vertex_program */ @@ -4404,7 +4430,7 @@ save_ProgramLocalParameter4fARB(GLenum target, GLuint index, GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6); if (n) { n[1].e = target; n[2].ui = index; @@ -4414,7 +4440,7 @@ save_ProgramLocalParameter4fARB(GLenum target, GLuint index, n[6].f = w; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramLocalParameter4fARB)(target, index, x, y, z, w); + CALL_ProgramLocalParameter4fARB(ctx->Exec, (target, index, x, y, z, w)); } } @@ -4426,7 +4452,7 @@ save_ProgramLocalParameter4fvARB(GLenum target, GLuint index, GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6); if (n) { n[1].e = target; n[2].ui = index; @@ -4436,7 +4462,39 @@ save_ProgramLocalParameter4fvARB(GLenum target, GLuint index, n[6].f = params[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramLocalParameter4fvARB)(target, index, params); + CALL_ProgramLocalParameter4fvARB(ctx->Exec, (target, index, params)); + } +} + + +static void GLAPIENTRY +save_ProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, + const GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + + if (count > 0) { + unsigned i; + const GLfloat * p = params; + + for (i = 0 ; i < count ; i++) { + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6); + if (n) { + n[1].e = target; + n[2].ui = index; + n[3].f = p[0]; + n[4].f = p[1]; + n[5].f = p[2]; + n[6].f = p[3]; + p += 4; + } + } + } + + if (ctx->ExecuteFlag) { + CALL_ProgramLocalParameters4fvEXT(ctx->Exec, (target, index, count, params)); } } @@ -4449,7 +4507,7 @@ save_ProgramLocalParameter4dARB(GLenum target, GLuint index, GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6); if (n) { n[1].e = target; n[2].ui = index; @@ -4459,7 +4517,7 @@ save_ProgramLocalParameter4dARB(GLenum target, GLuint index, n[6].f = (GLfloat) w; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramLocalParameter4dARB)(target, index, x, y, z, w); + CALL_ProgramLocalParameter4dARB(ctx->Exec, (target, index, x, y, z, w)); } } @@ -4471,7 +4529,7 @@ save_ProgramLocalParameter4dvARB(GLenum target, GLuint index, GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_LOCAL_PARAMETER_ARB, 6); if (n) { n[1].e = target; n[2].ui = index; @@ -4481,12 +4539,12 @@ save_ProgramLocalParameter4dvARB(GLenum target, GLuint index, n[6].f = (GLfloat) params[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramLocalParameter4dvARB)(target, index, params); + CALL_ProgramLocalParameter4dvARB(ctx->Exec, (target, index, params)); } } static void GLAPIENTRY -save_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name, +save_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); @@ -4499,7 +4557,7 @@ save_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name, _mesa_memcpy(nameCopy, name, len); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_NAMED_PARAMETER_NV, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_NAMED_PARAMETER_NV, 6); if (n) { n[1].ui = id; n[2].i = len; @@ -4510,13 +4568,13 @@ save_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name, n[7].f = w; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramNamedParameter4fNV)(id, len, name, x, y, z, w); + CALL_ProgramNamedParameter4fNV(ctx->Exec, (id, len, name, x, y, z, w)); } } static void GLAPIENTRY -save_ProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte *name, +save_ProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte * name, const float v[]) { save_ProgramNamedParameter4fNV(id, len, name, v[0], v[1], v[2], v[3]); @@ -4524,16 +4582,16 @@ save_ProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte *name, static void GLAPIENTRY -save_ProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte *name, +save_ProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { save_ProgramNamedParameter4fNV(id, len, name, (GLfloat) x, (GLfloat) y, - (GLfloat) z,(GLfloat) w); + (GLfloat) z, (GLfloat) w); } static void GLAPIENTRY -save_ProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte *name, +save_ProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte * name, const double v[]) { save_ProgramNamedParameter4fNV(id, len, name, (GLfloat) v[0], @@ -4546,34 +4604,36 @@ save_ProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte *name, /* GL_EXT_stencil_two_side */ -static void GLAPIENTRY save_ActiveStencilFaceEXT( GLenum face ) +static void GLAPIENTRY +save_ActiveStencilFaceEXT(GLenum face) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ACTIVE_STENCIL_FACE_EXT, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ACTIVE_STENCIL_FACE_EXT, 1); if (n) { n[1].e = face; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ActiveStencilFaceEXT)( face ); + CALL_ActiveStencilFaceEXT(ctx->Exec, (face)); } } /* GL_EXT_depth_bounds_test */ -static void GLAPIENTRY save_DepthBoundsEXT( GLclampd zmin, GLclampd zmax ) +static void GLAPIENTRY +save_DepthBoundsEXT(GLclampd zmin, GLclampd zmax) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ACTIVE_STENCIL_FACE_EXT, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DEPTH_BOUNDS_EXT, 2); if (n) { n[1].f = (GLfloat) zmin; n[2].f = (GLfloat) zmax; } if (ctx->ExecuteFlag) { - (*ctx->Exec->DepthBoundsEXT)( zmin, zmax ); + CALL_DepthBoundsEXT(ctx->Exec, (zmin, zmax)); } } @@ -4583,7 +4643,7 @@ static void GLAPIENTRY save_DepthBoundsEXT( GLclampd zmin, GLclampd zmax ) static void GLAPIENTRY save_ProgramStringARB(GLenum target, GLenum format, GLsizei len, - const GLvoid *string) + const GLvoid * string) { GET_CURRENT_CONTEXT(ctx); Node *n; @@ -4597,7 +4657,7 @@ save_ProgramStringARB(GLenum target, GLenum format, GLsizei len, _mesa_memcpy(programCopy, string, len); ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_STRING_ARB, 4 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_STRING_ARB, 4); if (n) { n[1].e = target; n[2].e = format; @@ -4605,7 +4665,7 @@ save_ProgramStringARB(GLenum target, GLenum format, GLsizei len, n[4].data = programCopy; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramStringARB)(target, format, len, string); + CALL_ProgramStringARB(ctx->Exec, (target, format, len, string)); } } @@ -4617,7 +4677,7 @@ save_ProgramEnvParameter4fARB(GLenum target, GLuint index, GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_PROGRAM_ENV_PARAMETER_ARB, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_ENV_PARAMETER_ARB, 6); if (n) { n[1].e = target; n[2].ui = index; @@ -4627,7 +4687,7 @@ save_ProgramEnvParameter4fARB(GLenum target, GLuint index, n[6].f = w; } if (ctx->ExecuteFlag) { - (*ctx->Exec->ProgramEnvParameter4fARB)( target, index, x, y, z, w); + CALL_ProgramEnvParameter4fARB(ctx->Exec, (target, index, x, y, z, w)); } } @@ -4641,15 +4701,45 @@ save_ProgramEnvParameter4fvARB(GLenum target, GLuint index, } +static void GLAPIENTRY +save_ProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, + const GLfloat * params) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + + if (count > 0) { + unsigned i; + const GLfloat * p = params; + + for (i = 0 ; i < count ; i++) { + n = ALLOC_INSTRUCTION(ctx, OPCODE_PROGRAM_ENV_PARAMETER_ARB, 6); + if (n) { + n[1].e = target; + n[2].ui = index; + n[3].f = p[0]; + n[4].f = p[1]; + n[5].f = p[2]; + n[6].f = p[3]; + p += 4; + } + } + } + + if (ctx->ExecuteFlag) { + CALL_ProgramEnvParameters4fvEXT(ctx->Exec, (target, index, count, params)); + } +} + + static void GLAPIENTRY save_ProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { save_ProgramEnvParameter4fARB(target, index, (GLfloat) x, - (GLfloat) y, - (GLfloat) z, - (GLfloat) w); + (GLfloat) y, (GLfloat) z, (GLfloat) w); } @@ -4660,14 +4750,13 @@ save_ProgramEnvParameter4dvARB(GLenum target, GLuint index, save_ProgramEnvParameter4fARB(target, index, (GLfloat) params[0], (GLfloat) params[1], - (GLfloat) params[2], - (GLfloat) params[3]); + (GLfloat) params[2], (GLfloat) params[3]); } #endif /* FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program */ -#ifdef FEATURE_ARB_occlusion_query +#if FEATURE_ARB_occlusion_query static void GLAPIENTRY save_BeginQueryARB(GLenum target, GLuint id) @@ -4675,13 +4764,13 @@ save_BeginQueryARB(GLenum target, GLuint id) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BEGIN_QUERY_ARB, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BEGIN_QUERY_ARB, 2); if (n) { n[1].e = target; n[2].ui = id; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BeginQueryARB)( target, id ); + CALL_BeginQueryARB(ctx->Exec, (target, id)); } } @@ -4692,12 +4781,12 @@ save_EndQueryARB(GLenum target) GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_END_QUERY_ARB, 1 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_END_QUERY_ARB, 1); if (n) { n[1].e = target; } if (ctx->ExecuteFlag) { - (*ctx->Exec->EndQueryARB)( target ); + CALL_EndQueryARB(ctx->Exec, (target)); } } @@ -4705,23 +4794,23 @@ save_EndQueryARB(GLenum target) static void GLAPIENTRY -save_DrawBuffersARB(GLsizei count, const GLenum *buffers) +save_DrawBuffersARB(GLsizei count, const GLenum * buffers) { GET_CURRENT_CONTEXT(ctx); Node *n; ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); - n = ALLOC_INSTRUCTION( ctx, OPCODE_DRAW_BUFFERS_ARB, 1 + MAX_DRAW_BUFFERS ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_DRAW_BUFFERS_ARB, 1 + MAX_DRAW_BUFFERS); if (n) { GLint i; n[1].i = count; if (count > MAX_DRAW_BUFFERS) - count = MAX_DRAW_BUFFERS; + count = MAX_DRAW_BUFFERS; for (i = 0; i < count; i++) { - n[2 + i].e = buffers[i]; + n[2 + i].e = buffers[i]; } } if (ctx->ExecuteFlag) { - (*ctx->Exec->DrawBuffersARB)(count, buffers); + CALL_DrawBuffersARB(ctx->Exec, (count, buffers)); } } @@ -4731,13 +4820,13 @@ save_BindFragmentShaderATI(GLuint id) { GET_CURRENT_CONTEXT(ctx); Node *n; - - n = ALLOC_INSTRUCTION( ctx, OPCODE_BIND_FRAGMENT_SHADER_ATI, 1); + + n = ALLOC_INSTRUCTION(ctx, OPCODE_BIND_FRAGMENT_SHADER_ATI, 1); if (n) { - n[1].ui = id; + n[1].ui = id; } if (ctx->ExecuteFlag) { - (*ctx->Exec->BindFragmentShaderATI)(id); + CALL_BindFragmentShaderATI(ctx->Exec, (id)); } } @@ -4746,68 +4835,71 @@ save_SetFragmentShaderConstantATI(GLuint dst, const GLfloat *value) { GET_CURRENT_CONTEXT(ctx); Node *n; - - n = ALLOC_INSTRUCTION( ctx, OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI, 5); + + n = ALLOC_INSTRUCTION(ctx, OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI, 5); if (n) { - n[1].ui = dst; - n[2].f = value[0]; - n[3].f = value[1]; - n[4].f = value[2]; - n[5].f = value[3]; + n[1].ui = dst; + n[2].f = value[0]; + n[3].f = value[1]; + n[4].f = value[2]; + n[5].f = value[3]; } if (ctx->ExecuteFlag) { - (*ctx->Exec->SetFragmentShaderConstantATI)(dst, value); + CALL_SetFragmentShaderConstantATI(ctx->Exec, (dst, value)); } } #endif -static void save_Attr1fNV( GLenum attr, GLfloat x ) +static void +save_Attr1fNV(GLenum attr, GLfloat x) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_1F_NV, 2 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_1F_NV, 2); if (n) { n[1].e = attr; n[2].f = x; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_PROGRAM_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 1; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, 0, 0, 1); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, 0, 0, 1); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib1fNV)( attr, x ); + CALL_VertexAttrib1fNV(ctx->Exec, (attr, x)); } } -static void save_Attr2fNV( GLenum attr, GLfloat x, GLfloat y ) +static void +save_Attr2fNV(GLenum attr, GLfloat x, GLfloat y) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_2F_NV, 3 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_2F_NV, 3); if (n) { n[1].e = attr; n[2].f = x; n[3].f = y; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_PROGRAM_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 2; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, 0, 1); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, y, 0, 1); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib2fNV)( attr, x, y ); + CALL_VertexAttrib2fNV(ctx->Exec, (attr, x, y)); } } -static void save_Attr3fNV( GLenum attr, GLfloat x, GLfloat y, GLfloat z ) +static void +save_Attr3fNV(GLenum attr, GLfloat x, GLfloat y, GLfloat z) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_3F_NV, 4 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_3F_NV, 4); if (n) { n[1].e = attr; n[2].f = x; @@ -4815,22 +4907,22 @@ static void save_Attr3fNV( GLenum attr, GLfloat x, GLfloat y, GLfloat z ) n[4].f = z; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_PROGRAM_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 3; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, 1); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, y, z, 1); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib3fNV)( attr, x, y, z ); + CALL_VertexAttrib3fNV(ctx->Exec, (attr, x, y, z)); } } -static void save_Attr4fNV( GLenum attr, GLfloat x, GLfloat y, GLfloat z, - GLfloat w ) +static void +save_Attr4fNV(GLenum attr, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_4F_NV, 5 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_4F_NV, 5); if (n) { n[1].e = attr; n[2].f = x; @@ -4839,63 +4931,66 @@ static void save_Attr4fNV( GLenum attr, GLfloat x, GLfloat y, GLfloat z, n[5].f = w; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_PROGRAM_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 4; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, w); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, y, z, w); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib4fNV)( attr, x, y, z, w ); + CALL_VertexAttrib4fNV(ctx->Exec, (attr, x, y, z, w)); } } -static void save_Attr1fARB( GLenum attr, GLfloat x ) +static void +save_Attr1fARB(GLenum attr, GLfloat x) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_1F_ARB, 2 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_1F_ARB, 2); if (n) { n[1].e = attr; n[2].f = x; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 1; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, 0, 0, 1); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, 0, 0, 1); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib1fARB)( attr, x ); + CALL_VertexAttrib1fARB(ctx->Exec, (attr, x)); } } -static void save_Attr2fARB( GLenum attr, GLfloat x, GLfloat y ) +static void +save_Attr2fARB(GLenum attr, GLfloat x, GLfloat y) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_2F_ARB, 3 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_2F_ARB, 3); if (n) { n[1].e = attr; n[2].f = x; n[3].f = y; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 2; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, 0, 1); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, y, 0, 1); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib2fARB)( attr, x, y ); + CALL_VertexAttrib2fARB(ctx->Exec, (attr, x, y)); } } -static void save_Attr3fARB( GLenum attr, GLfloat x, GLfloat y, GLfloat z ) +static void +save_Attr3fARB(GLenum attr, GLfloat x, GLfloat y, GLfloat z) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_3F_ARB, 4 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_3F_ARB, 4); if (n) { n[1].e = attr; n[2].f = x; @@ -4903,22 +4998,22 @@ static void save_Attr3fARB( GLenum attr, GLfloat x, GLfloat y, GLfloat z ) n[4].f = z; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 3; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, 1); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, y, z, 1); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib3fARB)( attr, x, y, z ); + CALL_VertexAttrib3fARB(ctx->Exec, (attr, x, y, z)); } } -static void save_Attr4fARB( GLenum attr, GLfloat x, GLfloat y, GLfloat z, - GLfloat w ) +static void +save_Attr4fARB(GLenum attr, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_ATTR_4F_ARB, 5 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ATTR_4F_ARB, 5); if (n) { n[1].e = attr; n[2].f = x; @@ -4927,91 +5022,98 @@ static void save_Attr4fARB( GLenum attr, GLfloat x, GLfloat y, GLfloat z, n[5].f = w; } - ASSERT(attr < VERT_ATTRIB_MAX); + ASSERT(attr < MAX_VERTEX_ATTRIBS); ctx->ListState.ActiveAttribSize[attr] = 4; - ASSIGN_4V( ctx->ListState.CurrentAttrib[attr], x, y, z, w); + ASSIGN_4V(ctx->ListState.CurrentAttrib[attr], x, y, z, w); if (ctx->ExecuteFlag) { - (*ctx->Exec->VertexAttrib4fARB)( attr, x, y, z, w ); + CALL_VertexAttrib4fARB(ctx->Exec, (attr, x, y, z, w)); } } -static void GLAPIENTRY save_EvalCoord1f( GLfloat x ) +static void GLAPIENTRY +save_EvalCoord1f(GLfloat x) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EVAL_C1, 1 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EVAL_C1, 1); if (n) { n[1].f = x; } if (ctx->ExecuteFlag) { - (*ctx->Exec->EvalCoord1f)( x ); + CALL_EvalCoord1f(ctx->Exec, (x)); } } -static void GLAPIENTRY save_EvalCoord1fv( const GLfloat *v ) +static void GLAPIENTRY +save_EvalCoord1fv(const GLfloat * v) { - save_EvalCoord1f( v[0] ); + save_EvalCoord1f(v[0]); } -static void GLAPIENTRY save_EvalCoord2f( GLfloat x, GLfloat y ) +static void GLAPIENTRY +save_EvalCoord2f(GLfloat x, GLfloat y) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EVAL_C2, 2 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EVAL_C2, 2); if (n) { n[1].f = x; n[2].f = y; } if (ctx->ExecuteFlag) { - (*ctx->Exec->EvalCoord2f)( x, y ); + CALL_EvalCoord2f(ctx->Exec, (x, y)); } } -static void GLAPIENTRY save_EvalCoord2fv( const GLfloat *v ) +static void GLAPIENTRY +save_EvalCoord2fv(const GLfloat * v) { - save_EvalCoord2f( v[0], v[1] ); + save_EvalCoord2f(v[0], v[1]); } -static void GLAPIENTRY save_EvalPoint1( GLint x ) +static void GLAPIENTRY +save_EvalPoint1(GLint x) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EVAL_P1, 1 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EVAL_P1, 1); if (n) { n[1].i = x; } if (ctx->ExecuteFlag) { - (*ctx->Exec->EvalPoint1)( x ); + CALL_EvalPoint1(ctx->Exec, (x)); } } -static void GLAPIENTRY save_EvalPoint2( GLint x, GLint y ) +static void GLAPIENTRY +save_EvalPoint2(GLint x, GLint y) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EVAL_P2, 2 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EVAL_P2, 2); if (n) { n[1].i = x; n[2].i = y; } if (ctx->ExecuteFlag) { - (*ctx->Exec->EvalPoint2)( x, y ); + CALL_EvalPoint2(ctx->Exec, (x, y)); } } -static void GLAPIENTRY save_Indexf( GLfloat x ) +static void GLAPIENTRY +save_Indexf(GLfloat x) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_INDEX, 1 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_INDEX, 1); if (n) { n[1].f = x; } @@ -5020,21 +5122,23 @@ static void GLAPIENTRY save_Indexf( GLfloat x ) ctx->ListState.CurrentIndex = x; if (ctx->ExecuteFlag) { - (*ctx->Exec->Indexi)( (GLint) x ); + CALL_Indexf(ctx->Exec, (x)); } } -static void GLAPIENTRY save_Indexfv( const GLfloat *v ) +static void GLAPIENTRY +save_Indexfv(const GLfloat * v) { - save_Indexf( v[0] ); + save_Indexf(v[0]); } -static void GLAPIENTRY save_EdgeFlag( GLboolean x ) +static void GLAPIENTRY +save_EdgeFlag(GLboolean x) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_EDGEFLAG, 1 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_EDGEFLAG, 1); if (n) { n[1].b = x; } @@ -5043,22 +5147,18 @@ static void GLAPIENTRY save_EdgeFlag( GLboolean x ) ctx->ListState.CurrentEdgeFlag = x; if (ctx->ExecuteFlag) { - (*ctx->Exec->EdgeFlag)( x ); + CALL_EdgeFlag(ctx->Exec, (x)); } } -static void GLAPIENTRY save_EdgeFlagv( const GLboolean *v ) -{ - save_EdgeFlag( v[0] ); -} - -static void GLAPIENTRY save_Materialfv( GLenum face, GLenum pname, const GLfloat *param ) +static void GLAPIENTRY +save_Materialfv(GLenum face, GLenum pname, const GLfloat * param) { GET_CURRENT_CONTEXT(ctx); Node *n; int args, i; - SAVE_FLUSH_VERTICES( ctx ); + SAVE_FLUSH_VERTICES(ctx); switch (face) { case GL_BACK: @@ -5066,7 +5166,7 @@ static void GLAPIENTRY save_Materialfv( GLenum face, GLenum pname, const GLfloat case GL_FRONT_AND_BACK: break; default: - _mesa_compile_error( ctx, GL_INVALID_ENUM, "material(face)" ); + _mesa_compile_error(ctx, GL_INVALID_ENUM, "material(face)"); return; } @@ -5085,40 +5185,41 @@ static void GLAPIENTRY save_Materialfv( GLenum face, GLenum pname, const GLfloat args = 3; break; default: - _mesa_compile_error( ctx, GL_INVALID_ENUM, "material(pname)" ); + _mesa_compile_error(ctx, GL_INVALID_ENUM, "material(pname)"); return; } - n = ALLOC_INSTRUCTION( ctx, OPCODE_MATERIAL, 6 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_MATERIAL, 6); if (n) { n[1].e = face; n[2].e = pname; - for (i = 0 ; i < args ; i++) - n[3+i].f = param[i]; + for (i = 0; i < args; i++) + n[3 + i].f = param[i]; } { - GLuint bitmask = _mesa_material_bitmask( ctx, face, pname, ~0, 0 ); - for (i = 0 ; i < MAT_ATTRIB_MAX ; i++) - if (bitmask & (1<ListState.ActiveMaterialSize[i] = args; - COPY_SZ_4V( ctx->ListState.CurrentMaterial[i], args, param ); - } + GLuint bitmask = _mesa_material_bitmask(ctx, face, pname, ~0, NULL); + for (i = 0; i < MAT_ATTRIB_MAX; i++) + if (bitmask & (1 << i)) { + ctx->ListState.ActiveMaterialSize[i] = args; + COPY_SZ_4V(ctx->ListState.CurrentMaterial[i], args, param); + } } if (ctx->ExecuteFlag) { - (*ctx->Exec->Materialfv)( face, pname, param ); + CALL_Materialfv(ctx->Exec, (face, pname, param)); } } -static void GLAPIENTRY save_Begin( GLenum mode ) +static void GLAPIENTRY +save_Begin(GLenum mode) { GET_CURRENT_CONTEXT(ctx); Node *n; GLboolean error = GL_FALSE; - if (/*mode < GL_POINTS ||*/ mode > GL_POLYGON) { - _mesa_compile_error( ctx, GL_INVALID_ENUM, "Begin (mode)"); + if ( /*mode < GL_POINTS || */ mode > GL_POLYGON) { + _mesa_compile_error(ctx, GL_INVALID_ENUM, "Begin (mode)"); error = GL_TRUE; } else if (ctx->Driver.CurrentSavePrimitive == PRIM_UNKNOWN) { @@ -5132,7 +5233,7 @@ static void GLAPIENTRY save_Begin( GLenum mode ) ctx->Driver.CurrentSavePrimitive = mode; } else { - _mesa_compile_error( ctx, GL_INVALID_OPERATION, "recursive begin" ); + _mesa_compile_error(ctx, GL_INVALID_OPERATION, "recursive begin"); error = GL_TRUE; } @@ -5140,38 +5241,40 @@ static void GLAPIENTRY save_Begin( GLenum mode ) /* Give the driver an opportunity to hook in an optimized * display list compiler. */ - if (ctx->Driver.NotifySaveBegin( ctx, mode )) - return; + if (ctx->Driver.NotifySaveBegin(ctx, mode)) + return; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_BEGIN, 1 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BEGIN, 1); if (n) { - n[1].e = mode; + n[1].e = mode; } } if (ctx->ExecuteFlag) { - (*ctx->Exec->Begin)( mode ); + CALL_Begin(ctx->Exec, (mode)); } } -static void GLAPIENTRY save_End( void ) +static void GLAPIENTRY +save_End(void) { GET_CURRENT_CONTEXT(ctx); - SAVE_FLUSH_VERTICES( ctx ); - (void) ALLOC_INSTRUCTION( ctx, OPCODE_END, 0 ); + SAVE_FLUSH_VERTICES(ctx); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_END, 0); ctx->Driver.CurrentSavePrimitive = PRIM_OUTSIDE_BEGIN_END; if (ctx->ExecuteFlag) { - (*ctx->Exec->End)( ); + CALL_End(ctx->Exec, ()); } } -static void GLAPIENTRY save_Rectf( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) +static void GLAPIENTRY +save_Rectf(GLfloat a, GLfloat b, GLfloat c, GLfloat d) { GET_CURRENT_CONTEXT(ctx); Node *n; - SAVE_FLUSH_VERTICES( ctx ); - n = ALLOC_INSTRUCTION( ctx, OPCODE_RECTF, 4 ); + SAVE_FLUSH_VERTICES(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_RECTF, 4); if (n) { n[1].f = a; n[2].f = b; @@ -5179,377 +5282,451 @@ static void GLAPIENTRY save_Rectf( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) n[4].f = d; } if (ctx->ExecuteFlag) { - (*ctx->Exec->Rectf)( a, b, c, d ); + CALL_Rectf(ctx->Exec, (a, b, c, d)); } } -static void GLAPIENTRY save_Vertex2f( GLfloat x, GLfloat y ) +static void GLAPIENTRY +save_Vertex2f(GLfloat x, GLfloat y) { - save_Attr2fNV( VERT_ATTRIB_POS, x, y ); + save_Attr2fNV(VERT_ATTRIB_POS, x, y); } -static void GLAPIENTRY save_Vertex2fv( const GLfloat *v ) +static void GLAPIENTRY +save_Vertex2fv(const GLfloat * v) { - save_Attr2fNV( VERT_ATTRIB_POS, v[0], v[1] ); + save_Attr2fNV(VERT_ATTRIB_POS, v[0], v[1]); } -static void GLAPIENTRY save_Vertex3f( GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_Vertex3f(GLfloat x, GLfloat y, GLfloat z) { - save_Attr3fNV( VERT_ATTRIB_POS, x, y, z ); + save_Attr3fNV(VERT_ATTRIB_POS, x, y, z); } -static void GLAPIENTRY save_Vertex3fv( const GLfloat *v ) +static void GLAPIENTRY +save_Vertex3fv(const GLfloat * v) { - save_Attr3fNV( VERT_ATTRIB_POS, v[0], v[1], v[2] ); + save_Attr3fNV(VERT_ATTRIB_POS, v[0], v[1], v[2]); } -static void GLAPIENTRY save_Vertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) +static void GLAPIENTRY +save_Vertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { - save_Attr4fNV( VERT_ATTRIB_POS, x, y, z, w ); + save_Attr4fNV(VERT_ATTRIB_POS, x, y, z, w); } -static void GLAPIENTRY save_Vertex4fv( const GLfloat *v ) +static void GLAPIENTRY +save_Vertex4fv(const GLfloat * v) { - save_Attr4fNV( VERT_ATTRIB_POS, v[0], v[1], v[2], v[3] ); + save_Attr4fNV(VERT_ATTRIB_POS, v[0], v[1], v[2], v[3]); } -static void GLAPIENTRY save_TexCoord1f( GLfloat x ) +static void GLAPIENTRY +save_TexCoord1f(GLfloat x) { - save_Attr1fNV( VERT_ATTRIB_TEX0, x ); + save_Attr1fNV(VERT_ATTRIB_TEX0, x); } -static void GLAPIENTRY save_TexCoord1fv( const GLfloat *v ) +static void GLAPIENTRY +save_TexCoord1fv(const GLfloat * v) { - save_Attr1fNV( VERT_ATTRIB_TEX0, v[0] ); + save_Attr1fNV(VERT_ATTRIB_TEX0, v[0]); } -static void GLAPIENTRY save_TexCoord2f( GLfloat x, GLfloat y ) +static void GLAPIENTRY +save_TexCoord2f(GLfloat x, GLfloat y) { - save_Attr2fNV( VERT_ATTRIB_TEX0, x, y ); + save_Attr2fNV(VERT_ATTRIB_TEX0, x, y); } -static void GLAPIENTRY save_TexCoord2fv( const GLfloat *v ) +static void GLAPIENTRY +save_TexCoord2fv(const GLfloat * v) { - save_Attr2fNV( VERT_ATTRIB_TEX0, v[0], v[1] ); + save_Attr2fNV(VERT_ATTRIB_TEX0, v[0], v[1]); } -static void GLAPIENTRY save_TexCoord3f( GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_TexCoord3f(GLfloat x, GLfloat y, GLfloat z) { - save_Attr3fNV( VERT_ATTRIB_TEX0, x, y, z ); + save_Attr3fNV(VERT_ATTRIB_TEX0, x, y, z); } -static void GLAPIENTRY save_TexCoord3fv( const GLfloat *v ) +static void GLAPIENTRY +save_TexCoord3fv(const GLfloat * v) { - save_Attr3fNV( VERT_ATTRIB_TEX0, v[0], v[1], v[2] ); + save_Attr3fNV(VERT_ATTRIB_TEX0, v[0], v[1], v[2]); } -static void GLAPIENTRY save_TexCoord4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) +static void GLAPIENTRY +save_TexCoord4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { - save_Attr4fNV( VERT_ATTRIB_TEX0, x, y, z, w ); + save_Attr4fNV(VERT_ATTRIB_TEX0, x, y, z, w); } -static void GLAPIENTRY save_TexCoord4fv( const GLfloat *v ) +static void GLAPIENTRY +save_TexCoord4fv(const GLfloat * v) { - save_Attr4fNV( VERT_ATTRIB_TEX0, v[0], v[1], v[2], v[3] ); + save_Attr4fNV(VERT_ATTRIB_TEX0, v[0], v[1], v[2], v[3]); } -static void GLAPIENTRY save_Normal3f( GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_Normal3f(GLfloat x, GLfloat y, GLfloat z) { - save_Attr3fNV( VERT_ATTRIB_NORMAL, x, y, z ); + save_Attr3fNV(VERT_ATTRIB_NORMAL, x, y, z); } -static void GLAPIENTRY save_Normal3fv( const GLfloat *v ) +static void GLAPIENTRY +save_Normal3fv(const GLfloat * v) { - save_Attr3fNV( VERT_ATTRIB_NORMAL, v[0], v[1], v[2] ); + save_Attr3fNV(VERT_ATTRIB_NORMAL, v[0], v[1], v[2]); } -static void GLAPIENTRY save_FogCoordfEXT( GLfloat x ) +static void GLAPIENTRY +save_FogCoordfEXT(GLfloat x) { - save_Attr1fNV( VERT_ATTRIB_FOG, x ); + save_Attr1fNV(VERT_ATTRIB_FOG, x); } -static void GLAPIENTRY save_FogCoordfvEXT( const GLfloat *v ) +static void GLAPIENTRY +save_FogCoordfvEXT(const GLfloat * v) { - save_Attr1fNV( VERT_ATTRIB_FOG, v[0] ); + save_Attr1fNV(VERT_ATTRIB_FOG, v[0]); } -static void GLAPIENTRY save_Color3f( GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_Color3f(GLfloat x, GLfloat y, GLfloat z) { - save_Attr3fNV( VERT_ATTRIB_COLOR0, x, y, z ); + save_Attr3fNV(VERT_ATTRIB_COLOR0, x, y, z); } -static void GLAPIENTRY save_Color3fv( const GLfloat *v ) +static void GLAPIENTRY +save_Color3fv(const GLfloat * v) { - save_Attr3fNV( VERT_ATTRIB_COLOR0, v[0], v[1], v[2] ); + save_Attr3fNV(VERT_ATTRIB_COLOR0, v[0], v[1], v[2]); } -static void GLAPIENTRY save_Color4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) +static void GLAPIENTRY +save_Color4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { - save_Attr4fNV( VERT_ATTRIB_COLOR0, x, y, z, w ); + save_Attr4fNV(VERT_ATTRIB_COLOR0, x, y, z, w); } -static void GLAPIENTRY save_Color4fv( const GLfloat *v ) +static void GLAPIENTRY +save_Color4fv(const GLfloat * v) { - save_Attr4fNV( VERT_ATTRIB_COLOR0, v[0], v[1], v[2], v[3] ); + save_Attr4fNV(VERT_ATTRIB_COLOR0, v[0], v[1], v[2], v[3]); } -static void GLAPIENTRY save_SecondaryColor3fEXT( GLfloat x, GLfloat y, GLfloat z ) +static void GLAPIENTRY +save_SecondaryColor3fEXT(GLfloat x, GLfloat y, GLfloat z) { - save_Attr3fNV( VERT_ATTRIB_COLOR1, x, y, z ); + save_Attr3fNV(VERT_ATTRIB_COLOR1, x, y, z); } -static void GLAPIENTRY save_SecondaryColor3fvEXT( const GLfloat *v ) +static void GLAPIENTRY +save_SecondaryColor3fvEXT(const GLfloat * v) { - save_Attr3fNV( VERT_ATTRIB_COLOR1, v[0], v[1], v[2] ); + save_Attr3fNV(VERT_ATTRIB_COLOR1, v[0], v[1], v[2]); } /* Just call the respective ATTR for texcoord */ -static void GLAPIENTRY save_MultiTexCoord1f( GLenum target, GLfloat x ) +static void GLAPIENTRY +save_MultiTexCoord1f(GLenum target, GLfloat x) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr1fNV( attr, x ); + save_Attr1fNV(attr, x); } -static void GLAPIENTRY save_MultiTexCoord1fv( GLenum target, const GLfloat *v ) +static void GLAPIENTRY +save_MultiTexCoord1fv(GLenum target, const GLfloat * v) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr1fNV( attr, v[0] ); + save_Attr1fNV(attr, v[0]); } -static void GLAPIENTRY save_MultiTexCoord2f( GLenum target, GLfloat x, GLfloat y ) +static void GLAPIENTRY +save_MultiTexCoord2f(GLenum target, GLfloat x, GLfloat y) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr2fNV( attr, x, y ); + save_Attr2fNV(attr, x, y); } -static void GLAPIENTRY save_MultiTexCoord2fv( GLenum target, const GLfloat *v ) +static void GLAPIENTRY +save_MultiTexCoord2fv(GLenum target, const GLfloat * v) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr2fNV( attr, v[0], v[1] ); + save_Attr2fNV(attr, v[0], v[1]); } -static void GLAPIENTRY save_MultiTexCoord3f( GLenum target, GLfloat x, GLfloat y, - GLfloat z) +static void GLAPIENTRY +save_MultiTexCoord3f(GLenum target, GLfloat x, GLfloat y, GLfloat z) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr3fNV( attr, x, y, z ); + save_Attr3fNV(attr, x, y, z); } -static void GLAPIENTRY save_MultiTexCoord3fv( GLenum target, const GLfloat *v ) +static void GLAPIENTRY +save_MultiTexCoord3fv(GLenum target, const GLfloat * v) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr3fNV( attr, v[0], v[1], v[2] ); + save_Attr3fNV(attr, v[0], v[1], v[2]); } -static void GLAPIENTRY save_MultiTexCoord4f( GLenum target, GLfloat x, GLfloat y, - GLfloat z, GLfloat w ) +static void GLAPIENTRY +save_MultiTexCoord4f(GLenum target, GLfloat x, GLfloat y, + GLfloat z, GLfloat w) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr4fNV( attr, x, y, z, w ); + save_Attr4fNV(attr, x, y, z, w); } -static void GLAPIENTRY save_MultiTexCoord4fv( GLenum target, const GLfloat *v ) +static void GLAPIENTRY +save_MultiTexCoord4fv(GLenum target, const GLfloat * v) { GLuint attr = (target & 0x7) + VERT_ATTRIB_TEX0; - save_Attr4fNV( attr, v[0], v[1], v[2], v[3] ); + save_Attr4fNV(attr, v[0], v[1], v[2], v[3]); } -static void enum_error( void ) +/** + * Record a GL_INVALID_VALUE error when a invalid vertex attribute + * index is found. + */ +static void +index_error(void) { - GET_CURRENT_CONTEXT( ctx ); - _mesa_error( ctx, GL_INVALID_ENUM, "VertexAttribfNV" ); + GET_CURRENT_CONTEXT(ctx); + _mesa_error(ctx, GL_INVALID_VALUE, "VertexAttribf(index)"); } + /* First level for NV_vertex_program: * * Check for errors at compile time?. */ -static void GLAPIENTRY save_VertexAttrib1fNV( GLuint index, GLfloat x ) +static void GLAPIENTRY +save_VertexAttrib1fNV(GLuint index, GLfloat x) { - if (index < VERT_ATTRIB_MAX) - save_Attr1fNV( index, x ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr1fNV(index, x); else - enum_error(); + index_error(); } -static void GLAPIENTRY save_VertexAttrib1fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY +save_VertexAttrib1fvNV(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr1fNV( index, v[0] ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr1fNV(index, v[0]); else - enum_error(); + index_error(); } -static void GLAPIENTRY save_VertexAttrib2fNV( GLuint index, GLfloat x, GLfloat y ) +static void GLAPIENTRY +save_VertexAttrib2fNV(GLuint index, GLfloat x, GLfloat y) { - if (index < VERT_ATTRIB_MAX) - save_Attr2fNV( index, x, y ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr2fNV(index, x, y); else - enum_error(); + index_error(); } -static void GLAPIENTRY save_VertexAttrib2fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY +save_VertexAttrib2fvNV(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr2fNV( index, v[0], v[1] ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr2fNV(index, v[0], v[1]); else - enum_error(); + index_error(); } -static void GLAPIENTRY save_VertexAttrib3fNV( GLuint index, GLfloat x, GLfloat y, - GLfloat z ) +static void GLAPIENTRY +save_VertexAttrib3fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z) { - if (index < VERT_ATTRIB_MAX) - save_Attr3fNV( index, x, y, z ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr3fNV(index, x, y, z); else - enum_error(); + index_error(); } -static void GLAPIENTRY save_VertexAttrib3fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY +save_VertexAttrib3fvNV(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr3fNV( index, v[0], v[1], v[2] ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr3fNV(index, v[0], v[1], v[2]); else - enum_error(); + index_error(); } -static void GLAPIENTRY save_VertexAttrib4fNV( GLuint index, GLfloat x, GLfloat y, - GLfloat z, GLfloat w ) +static void GLAPIENTRY +save_VertexAttrib4fNV(GLuint index, GLfloat x, GLfloat y, + GLfloat z, GLfloat w) { - if (index < VERT_ATTRIB_MAX) - save_Attr4fNV( index, x, y, z, w ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr4fNV(index, x, y, z, w); else - enum_error(); + index_error(); } -static void GLAPIENTRY save_VertexAttrib4fvNV( GLuint index, const GLfloat *v ) +static void GLAPIENTRY +save_VertexAttrib4fvNV(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr4fNV( index, v[0], v[1], v[2], v[3] ); + if (index < MAX_VERTEX_PROGRAM_ATTRIBS) + save_Attr4fNV(index, v[0], v[1], v[2], v[3]); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib1fARB( GLuint index, GLfloat x ) +save_VertexAttrib1fARB(GLuint index, GLfloat x) { - if (index < VERT_ATTRIB_MAX) - save_Attr1fARB( index, x ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr1fARB(index, x); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib1fvARB( GLuint index, const GLfloat *v ) +save_VertexAttrib1fvARB(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr1fARB( index, v[0] ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr1fARB(index, v[0]); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib2fARB( GLuint index, GLfloat x, GLfloat y ) +save_VertexAttrib2fARB(GLuint index, GLfloat x, GLfloat y) { - if (index < VERT_ATTRIB_MAX) - save_Attr2fARB( index, x, y ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr2fARB(index, x, y); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib2fvARB( GLuint index, const GLfloat *v ) +save_VertexAttrib2fvARB(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr2fARB( index, v[0], v[1] ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr2fARB(index, v[0], v[1]); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib3fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z ) +save_VertexAttrib3fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z) { - if (index < VERT_ATTRIB_MAX) - save_Attr3fARB( index, x, y, z ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr3fARB(index, x, y, z); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib3fvARB( GLuint index, const GLfloat *v ) +save_VertexAttrib3fvARB(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr3fARB( index, v[0], v[1], v[2] ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr3fARB(index, v[0], v[1], v[2]); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib4fARB( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) +save_VertexAttrib4fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z, + GLfloat w) { - if (index < VERT_ATTRIB_MAX) - save_Attr4fARB( index, x, y, z, w ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr4fARB(index, x, y, z, w); else - enum_error(); + index_error(); } static void GLAPIENTRY -save_VertexAttrib4fvARB( GLuint index, const GLfloat *v ) +save_VertexAttrib4fvARB(GLuint index, const GLfloat * v) { - if (index < VERT_ATTRIB_MAX) - save_Attr4fARB( index, v[0], v[1], v[2], v[3] ); + if (index < MAX_VERTEX_ATTRIBS) + save_Attr4fARB(index, v[0], v[1], v[2], v[3]); else - enum_error(); + index_error(); } +#if FEATURE_EXT_framebuffer_blit +static void GLAPIENTRY +save_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = ALLOC_INSTRUCTION(ctx, OPCODE_BLIT_FRAMEBUFFER, 10); + if (n) { + n[1].i = srcX0; + n[2].i = srcY0; + n[3].i = srcX1; + n[4].i = srcY1; + n[5].i = dstX0; + n[6].i = dstY0; + n[7].i = dstX1; + n[8].i = dstY1; + n[9].i = mask; + n[10].e = filter; + } + if (ctx->ExecuteFlag) { + CALL_BlitFramebufferEXT(ctx->Exec, (srcX0, srcY0, srcX1, srcY1, + dstX0, dstY0, dstX1, dstY1, + mask, filter)); + } +} +#endif - -/* KW: Compile commands +/** + * Save an error-generating command into display list. * - * Will appear in the list before the vertex buffer containing the + * KW: Will appear in the list before the vertex buffer containing the * command that provoked the error. I don't see this as a problem. */ -void -_mesa_save_error( GLcontext *ctx, GLenum error, const char *s ) +static void +save_error(GLcontext *ctx, GLenum error, const char *s) { Node *n; - n = ALLOC_INSTRUCTION( ctx, OPCODE_ERROR, 2 ); + n = ALLOC_INSTRUCTION(ctx, OPCODE_ERROR, 2); if (n) { n[1].e = error; n[2].data = (void *) s; } - /* execute already done */ } -/* +/** * Compile an error into current display list. */ void -_mesa_compile_error( GLcontext *ctx, GLenum error, const char *s ) +_mesa_compile_error(GLcontext *ctx, GLenum error, const char *s) { if (ctx->CompileFlag) - _mesa_save_error( ctx, error, s ); - + save_error(ctx, error, s); if (ctx->ExecuteFlag) - _mesa_error( ctx, error, s ); + _mesa_error(ctx, error, s); } - +/** + * Test if ID names a display list. + */ static GLboolean islist(GLcontext *ctx, GLuint list) { - if (list > 0 && _mesa_HashLookup(ctx->Shared->DisplayList, list)) { + if (list > 0 && lookup_list(ctx, list)) { return GL_TRUE; } else { @@ -5570,101 +5747,113 @@ islist(GLcontext *ctx, GLuint list) * the absolute list number, not relative to ListBase. * \param list - display list number */ -static void GLAPIENTRY -execute_list( GLcontext *ctx, GLuint list ) +static void +execute_list(GLcontext *ctx, GLuint list) { + struct mesa_display_list *dlist; Node *n; GLboolean done; - if (list == 0 || !islist(ctx,list)) + if (list == 0 || !islist(ctx, list)) return; + if (ctx->ListState.CallDepth == MAX_LIST_NESTING) { + /* raise an error? */ + return; + } + + dlist = lookup_list(ctx, list); + if (!dlist) + return; + + ctx->ListState.CallStack[ctx->ListState.CallDepth++] = dlist; + if (ctx->Driver.BeginCallList) - ctx->Driver.BeginCallList( ctx, list ); + ctx->Driver.BeginCallList(ctx, dlist); - ctx->ListState.CallDepth++; - - n = (Node *) _mesa_HashLookup(ctx->Shared->DisplayList, list); + n = dlist->node; done = GL_FALSE; while (!done) { OpCode opcode = n[0].opcode; - int i = (int)n[0].opcode - (int)OPCODE_EXT_0; + int i = (int) n[0].opcode - (int) OPCODE_EXT_0; if (i >= 0 && i < (GLint) ctx->ListExt.NumOpcodes) { /* this is a driver-extended opcode */ - ctx->ListExt.Opcode[i].Execute(ctx, &n[1]); - n += ctx->ListExt.Opcode[i].Size; + ctx->ListExt.Opcode[i].Execute(ctx, &n[1]); + n += ctx->ListExt.Opcode[i].Size; } else { - switch (opcode) { - case OPCODE_ERROR: - _mesa_error( ctx, n[1].e, (const char *) n[2].data ); - break; - case OPCODE_ACCUM: - (*ctx->Exec->Accum)( n[1].e, n[2].f ); - break; - case OPCODE_ALPHA_FUNC: - (*ctx->Exec->AlphaFunc)( n[1].e, n[2].f ); - break; - case OPCODE_BIND_TEXTURE: - (*ctx->Exec->BindTexture)( n[1].e, n[2].ui ); + switch (opcode) { + case OPCODE_ERROR: + _mesa_error(ctx, n[1].e, (const char *) n[2].data); break; - case OPCODE_BITMAP: + case OPCODE_ACCUM: + CALL_Accum(ctx->Exec, (n[1].e, n[2].f)); + break; + case OPCODE_ALPHA_FUNC: + CALL_AlphaFunc(ctx->Exec, (n[1].e, n[2].f)); + break; + case OPCODE_BIND_TEXTURE: + CALL_BindTexture(ctx->Exec, (n[1].e, n[2].ui)); + break; + case OPCODE_BITMAP: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->Bitmap)( (GLsizei) n[1].i, (GLsizei) n[2].i, - n[3].f, n[4].f, n[5].f, n[6].f, (const GLubyte *) n[7].data ); - ctx->Unpack = save; /* restore */ + CALL_Bitmap(ctx->Exec, ((GLsizei) n[1].i, (GLsizei) n[2].i, + n[3].f, n[4].f, n[5].f, n[6].f, + (const GLubyte *) n[7].data)); + ctx->Unpack = save; /* restore */ } - break; - case OPCODE_BLEND_COLOR: - (*ctx->Exec->BlendColor)( n[1].f, n[2].f, n[3].f, n[4].f ); - break; - case OPCODE_BLEND_EQUATION: - (*ctx->Exec->BlendEquation)( n[1].e ); - break; - case OPCODE_BLEND_EQUATION_SEPARATE: - (*ctx->Exec->BlendEquationSeparateEXT)( n[1].e, n[2].e ); - break; - case OPCODE_BLEND_FUNC_SEPARATE: - (*ctx->Exec->BlendFuncSeparateEXT)(n[1].e, n[2].e, n[3].e, n[4].e); - break; + break; + case OPCODE_BLEND_COLOR: + CALL_BlendColor(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f)); + break; + case OPCODE_BLEND_EQUATION: + CALL_BlendEquation(ctx->Exec, (n[1].e)); + break; + case OPCODE_BLEND_EQUATION_SEPARATE: + CALL_BlendEquationSeparateEXT(ctx->Exec, (n[1].e, n[2].e)); + break; + case OPCODE_BLEND_FUNC_SEPARATE: + CALL_BlendFuncSeparateEXT(ctx->Exec, + (n[1].e, n[2].e, n[3].e, n[4].e)); + break; case OPCODE_CALL_LIST: - /* Generated by glCallList(), don't add ListBase */ - if (ctx->ListState.CallDepthListState.CallDepth < MAX_LIST_NESTING) { + execute_list(ctx, n[1].ui); } break; case OPCODE_CALL_LIST_OFFSET: - /* Generated by glCallLists() so we must add ListBase */ + /* Generated by glCallLists() so we must add ListBase */ if (n[2].b) { /* user specified a bad data type at compile time */ _mesa_error(ctx, GL_INVALID_ENUM, "glCallLists(type)"); } else if (ctx->ListState.CallDepth < MAX_LIST_NESTING) { - execute_list( ctx, ctx->List.ListBase + n[1].ui ); + execute_list(ctx, ctx->List.ListBase + n[1].ui); } break; - case OPCODE_CLEAR: - (*ctx->Exec->Clear)( n[1].bf ); - break; - case OPCODE_CLEAR_COLOR: - (*ctx->Exec->ClearColor)( n[1].f, n[2].f, n[3].f, n[4].f ); - break; - case OPCODE_CLEAR_ACCUM: - (*ctx->Exec->ClearAccum)( n[1].f, n[2].f, n[3].f, n[4].f ); - break; - case OPCODE_CLEAR_DEPTH: - (*ctx->Exec->ClearDepth)( (GLclampd) n[1].f ); - break; - case OPCODE_CLEAR_INDEX: - (*ctx->Exec->ClearIndex)( (GLfloat) n[1].ui ); - break; - case OPCODE_CLEAR_STENCIL: - (*ctx->Exec->ClearStencil)( n[1].i ); - break; + case OPCODE_CLEAR: + CALL_Clear(ctx->Exec, (n[1].bf)); + break; + case OPCODE_CLEAR_COLOR: + CALL_ClearColor(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f)); + break; + case OPCODE_CLEAR_ACCUM: + CALL_ClearAccum(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f)); + break; + case OPCODE_CLEAR_DEPTH: + CALL_ClearDepth(ctx->Exec, ((GLclampd) n[1].f)); + break; + case OPCODE_CLEAR_INDEX: + CALL_ClearIndex(ctx->Exec, ((GLfloat) n[1].ui)); + break; + case OPCODE_CLEAR_STENCIL: + CALL_ClearStencil(ctx->Exec, (n[1].i)); + break; case OPCODE_CLIP_PLANE: { GLdouble eq[4]; @@ -5672,22 +5861,22 @@ execute_list( GLcontext *ctx, GLuint list ) eq[1] = n[3].f; eq[2] = n[4].f; eq[3] = n[5].f; - (*ctx->Exec->ClipPlane)( n[1].e, eq ); + CALL_ClipPlane(ctx->Exec, (n[1].e, eq)); } break; - case OPCODE_COLOR_MASK: - (*ctx->Exec->ColorMask)( n[1].b, n[2].b, n[3].b, n[4].b ); - break; - case OPCODE_COLOR_MATERIAL: - (*ctx->Exec->ColorMaterial)( n[1].e, n[2].e ); - break; + case OPCODE_COLOR_MASK: + CALL_ColorMask(ctx->Exec, (n[1].b, n[2].b, n[3].b, n[4].b)); + break; + case OPCODE_COLOR_MATERIAL: + CALL_ColorMaterial(ctx->Exec, (n[1].e, n[2].e)); + break; case OPCODE_COLOR_TABLE: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->ColorTable)( n[1].e, n[2].e, n[3].i, n[4].e, - n[5].e, n[6].data ); - ctx->Unpack = save; /* restore */ + CALL_ColorTable(ctx->Exec, (n[1].e, n[2].e, n[3].i, n[4].e, + n[5].e, n[6].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_COLOR_TABLE_PARAMETER_FV: @@ -5697,7 +5886,8 @@ execute_list( GLcontext *ctx, GLuint list ) params[1] = n[4].f; params[2] = n[5].f; params[3] = n[6].f; - (*ctx->Exec->ColorTableParameterfv)( n[1].e, n[2].e, params ); + CALL_ColorTableParameterfv(ctx->Exec, + (n[1].e, n[2].e, params)); } break; case OPCODE_COLOR_TABLE_PARAMETER_IV: @@ -5707,38 +5897,41 @@ execute_list( GLcontext *ctx, GLuint list ) params[1] = n[4].i; params[2] = n[5].i; params[3] = n[6].i; - (*ctx->Exec->ColorTableParameteriv)( n[1].e, n[2].e, params ); + CALL_ColorTableParameteriv(ctx->Exec, + (n[1].e, n[2].e, params)); } break; case OPCODE_COLOR_SUB_TABLE: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->ColorSubTable)( n[1].e, n[2].i, n[3].i, - n[4].e, n[5].e, n[6].data ); - ctx->Unpack = save; /* restore */ + CALL_ColorSubTable(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].e, n[5].e, n[6].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_CONVOLUTION_FILTER_1D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->ConvolutionFilter1D)( n[1].e, n[2].i, n[3].i, - n[4].e, n[5].e, n[6].data ); - ctx->Unpack = save; /* restore */ + CALL_ConvolutionFilter1D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].e, n[5].e, + n[6].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_CONVOLUTION_FILTER_2D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->ConvolutionFilter2D)( n[1].e, n[2].i, n[3].i, - n[4].i, n[5].e, n[6].e, n[7].data ); - ctx->Unpack = save; /* restore */ + CALL_ConvolutionFilter2D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].i, n[5].e, n[6].e, + n[7].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_CONVOLUTION_PARAMETER_I: - (*ctx->Exec->ConvolutionParameteri)( n[1].e, n[2].e, n[3].i ); + CALL_ConvolutionParameteri(ctx->Exec, (n[1].e, n[2].e, n[3].i)); break; case OPCODE_CONVOLUTION_PARAMETER_IV: { @@ -5747,11 +5940,12 @@ execute_list( GLcontext *ctx, GLuint list ) params[1] = n[4].i; params[2] = n[5].i; params[3] = n[6].i; - (*ctx->Exec->ConvolutionParameteriv)( n[1].e, n[2].e, params ); + CALL_ConvolutionParameteriv(ctx->Exec, + (n[1].e, n[2].e, params)); } break; case OPCODE_CONVOLUTION_PARAMETER_F: - (*ctx->Exec->ConvolutionParameterf)( n[1].e, n[2].e, n[3].f ); + CALL_ConvolutionParameterf(ctx->Exec, (n[1].e, n[2].e, n[3].f)); break; case OPCODE_CONVOLUTION_PARAMETER_FV: { @@ -5760,168 +5954,175 @@ execute_list( GLcontext *ctx, GLuint list ) params[1] = n[4].f; params[2] = n[5].f; params[3] = n[6].f; - (*ctx->Exec->ConvolutionParameterfv)( n[1].e, n[2].e, params ); + CALL_ConvolutionParameterfv(ctx->Exec, + (n[1].e, n[2].e, params)); } break; case OPCODE_COPY_COLOR_SUB_TABLE: - (*ctx->Exec->CopyColorSubTable)( n[1].e, n[2].i, - n[3].i, n[4].i, n[5].i ); + CALL_CopyColorSubTable(ctx->Exec, (n[1].e, n[2].i, + n[3].i, n[4].i, n[5].i)); break; case OPCODE_COPY_COLOR_TABLE: - (*ctx->Exec->CopyColorSubTable)( n[1].e, n[2].i, - n[3].i, n[4].i, n[5].i ); + CALL_CopyColorSubTable(ctx->Exec, (n[1].e, n[2].i, + n[3].i, n[4].i, n[5].i)); + break; + case OPCODE_COPY_PIXELS: + CALL_CopyPixels(ctx->Exec, (n[1].i, n[2].i, + (GLsizei) n[3].i, (GLsizei) n[4].i, + n[5].e)); break; - case OPCODE_COPY_PIXELS: - (*ctx->Exec->CopyPixels)( n[1].i, n[2].i, - (GLsizei) n[3].i, (GLsizei) n[4].i, n[5].e ); - break; case OPCODE_COPY_TEX_IMAGE1D: - (*ctx->Exec->CopyTexImage1D)( n[1].e, n[2].i, n[3].e, n[4].i, - n[5].i, n[6].i, n[7].i ); + CALL_CopyTexImage1D(ctx->Exec, (n[1].e, n[2].i, n[3].e, n[4].i, + n[5].i, n[6].i, n[7].i)); break; case OPCODE_COPY_TEX_IMAGE2D: - (*ctx->Exec->CopyTexImage2D)( n[1].e, n[2].i, n[3].e, n[4].i, - n[5].i, n[6].i, n[7].i, n[8].i ); + CALL_CopyTexImage2D(ctx->Exec, (n[1].e, n[2].i, n[3].e, n[4].i, + n[5].i, n[6].i, n[7].i, n[8].i)); break; case OPCODE_COPY_TEX_SUB_IMAGE1D: - (*ctx->Exec->CopyTexSubImage1D)( n[1].e, n[2].i, n[3].i, - n[4].i, n[5].i, n[6].i ); + CALL_CopyTexSubImage1D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].i, n[5].i, n[6].i)); break; case OPCODE_COPY_TEX_SUB_IMAGE2D: - (*ctx->Exec->CopyTexSubImage2D)( n[1].e, n[2].i, n[3].i, - n[4].i, n[5].i, n[6].i, n[7].i, n[8].i ); + CALL_CopyTexSubImage2D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].i, n[5].i, n[6].i, n[7].i, + n[8].i)); break; case OPCODE_COPY_TEX_SUB_IMAGE3D: - (*ctx->Exec->CopyTexSubImage3D)( n[1].e, n[2].i, n[3].i, - n[4].i, n[5].i, n[6].i, n[7].i, n[8].i , n[9].i); + CALL_CopyTexSubImage3D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].i, n[5].i, n[6].i, n[7].i, + n[8].i, n[9].i)); break; - case OPCODE_CULL_FACE: - (*ctx->Exec->CullFace)( n[1].e ); - break; - case OPCODE_DEPTH_FUNC: - (*ctx->Exec->DepthFunc)( n[1].e ); - break; - case OPCODE_DEPTH_MASK: - (*ctx->Exec->DepthMask)( n[1].b ); - break; - case OPCODE_DEPTH_RANGE: - (*ctx->Exec->DepthRange)( (GLclampd) n[1].f, (GLclampd) n[2].f ); - break; - case OPCODE_DISABLE: - (*ctx->Exec->Disable)( n[1].e ); - break; - case OPCODE_DRAW_BUFFER: - (*ctx->Exec->DrawBuffer)( n[1].e ); - break; - case OPCODE_DRAW_PIXELS: + case OPCODE_CULL_FACE: + CALL_CullFace(ctx->Exec, (n[1].e)); + break; + case OPCODE_DEPTH_FUNC: + CALL_DepthFunc(ctx->Exec, (n[1].e)); + break; + case OPCODE_DEPTH_MASK: + CALL_DepthMask(ctx->Exec, (n[1].b)); + break; + case OPCODE_DEPTH_RANGE: + CALL_DepthRange(ctx->Exec, + ((GLclampd) n[1].f, (GLclampd) n[2].f)); + break; + case OPCODE_DISABLE: + CALL_Disable(ctx->Exec, (n[1].e)); + break; + case OPCODE_DRAW_BUFFER: + CALL_DrawBuffer(ctx->Exec, (n[1].e)); + break; + case OPCODE_DRAW_PIXELS: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->DrawPixels)( n[1].i, n[2].i, n[3].e, n[4].e, - n[5].data ); - ctx->Unpack = save; /* restore */ + CALL_DrawPixels(ctx->Exec, (n[1].i, n[2].i, n[3].e, n[4].e, + n[5].data)); + ctx->Unpack = save; /* restore */ } - break; - case OPCODE_ENABLE: - (*ctx->Exec->Enable)( n[1].e ); - break; - case OPCODE_EVALMESH1: - (*ctx->Exec->EvalMesh1)( n[1].e, n[2].i, n[3].i ); - break; - case OPCODE_EVALMESH2: - (*ctx->Exec->EvalMesh2)( n[1].e, n[2].i, n[3].i, n[4].i, n[5].i ); - break; - case OPCODE_FOG: - { - GLfloat p[4]; - p[0] = n[2].f; - p[1] = n[3].f; - p[2] = n[4].f; - p[3] = n[5].f; - (*ctx->Exec->Fogfv)( n[1].e, p ); - } - break; - case OPCODE_FRONT_FACE: - (*ctx->Exec->FrontFace)( n[1].e ); - break; + break; + case OPCODE_ENABLE: + CALL_Enable(ctx->Exec, (n[1].e)); + break; + case OPCODE_EVALMESH1: + CALL_EvalMesh1(ctx->Exec, (n[1].e, n[2].i, n[3].i)); + break; + case OPCODE_EVALMESH2: + CALL_EvalMesh2(ctx->Exec, + (n[1].e, n[2].i, n[3].i, n[4].i, n[5].i)); + break; + case OPCODE_FOG: + { + GLfloat p[4]; + p[0] = n[2].f; + p[1] = n[3].f; + p[2] = n[4].f; + p[3] = n[5].f; + CALL_Fogfv(ctx->Exec, (n[1].e, p)); + } + break; + case OPCODE_FRONT_FACE: + CALL_FrontFace(ctx->Exec, (n[1].e)); + break; case OPCODE_FRUSTUM: - (*ctx->Exec->Frustum)( n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f ); + CALL_Frustum(ctx->Exec, + (n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f)); + break; + case OPCODE_HINT: + CALL_Hint(ctx->Exec, (n[1].e, n[2].e)); + break; + case OPCODE_HISTOGRAM: + CALL_Histogram(ctx->Exec, (n[1].e, n[2].i, n[3].e, n[4].b)); + break; + case OPCODE_INDEX_MASK: + CALL_IndexMask(ctx->Exec, (n[1].ui)); + break; + case OPCODE_INIT_NAMES: + CALL_InitNames(ctx->Exec, ()); break; - case OPCODE_HINT: - (*ctx->Exec->Hint)( n[1].e, n[2].e ); - break; - case OPCODE_HISTOGRAM: - (*ctx->Exec->Histogram)( n[1].e, n[2].i, n[3].e, n[4].b ); - break; - case OPCODE_INDEX_MASK: - (*ctx->Exec->IndexMask)( n[1].ui ); - break; - case OPCODE_INIT_NAMES: - (*ctx->Exec->InitNames)(); - break; case OPCODE_LIGHT: - { - GLfloat p[4]; - p[0] = n[3].f; - p[1] = n[4].f; - p[2] = n[5].f; - p[3] = n[6].f; - (*ctx->Exec->Lightfv)( n[1].e, n[2].e, p ); - } - break; - case OPCODE_LIGHT_MODEL: - { - GLfloat p[4]; - p[0] = n[2].f; - p[1] = n[3].f; - p[2] = n[4].f; - p[3] = n[5].f; - (*ctx->Exec->LightModelfv)( n[1].e, p ); - } - break; - case OPCODE_LINE_STIPPLE: - (*ctx->Exec->LineStipple)( n[1].i, n[2].us ); - break; - case OPCODE_LINE_WIDTH: - (*ctx->Exec->LineWidth)( n[1].f ); - break; - case OPCODE_LIST_BASE: - (*ctx->Exec->ListBase)( n[1].ui ); - break; - case OPCODE_LOAD_IDENTITY: - (*ctx->Exec->LoadIdentity)(); + { + GLfloat p[4]; + p[0] = n[3].f; + p[1] = n[4].f; + p[2] = n[5].f; + p[3] = n[6].f; + CALL_Lightfv(ctx->Exec, (n[1].e, n[2].e, p)); + } break; - case OPCODE_LOAD_MATRIX: - if (sizeof(Node)==sizeof(GLfloat)) { - (*ctx->Exec->LoadMatrixf)( &n[1].f ); - } - else { - GLfloat m[16]; - GLuint i; - for (i=0;i<16;i++) { - m[i] = n[1+i].f; - } - (*ctx->Exec->LoadMatrixf)( m ); - } - break; - case OPCODE_LOAD_NAME: - (*ctx->Exec->LoadName)( n[1].ui ); - break; - case OPCODE_LOGIC_OP: - (*ctx->Exec->LogicOp)( n[1].e ); - break; - case OPCODE_MAP1: + case OPCODE_LIGHT_MODEL: + { + GLfloat p[4]; + p[0] = n[2].f; + p[1] = n[3].f; + p[2] = n[4].f; + p[3] = n[5].f; + CALL_LightModelfv(ctx->Exec, (n[1].e, p)); + } + break; + case OPCODE_LINE_STIPPLE: + CALL_LineStipple(ctx->Exec, (n[1].i, n[2].us)); + break; + case OPCODE_LINE_WIDTH: + CALL_LineWidth(ctx->Exec, (n[1].f)); + break; + case OPCODE_LIST_BASE: + CALL_ListBase(ctx->Exec, (n[1].ui)); + break; + case OPCODE_LOAD_IDENTITY: + CALL_LoadIdentity(ctx->Exec, ()); + break; + case OPCODE_LOAD_MATRIX: + if (sizeof(Node) == sizeof(GLfloat)) { + CALL_LoadMatrixf(ctx->Exec, (&n[1].f)); + } + else { + GLfloat m[16]; + GLuint i; + for (i = 0; i < 16; i++) { + m[i] = n[1 + i].f; + } + CALL_LoadMatrixf(ctx->Exec, (m)); + } + break; + case OPCODE_LOAD_NAME: + CALL_LoadName(ctx->Exec, (n[1].ui)); + break; + case OPCODE_LOGIC_OP: + CALL_LogicOp(ctx->Exec, (n[1].e)); + break; + case OPCODE_MAP1: { GLenum target = n[1].e; GLint ustride = _mesa_evaluator_components(target); GLint uorder = n[5].i; GLfloat u1 = n[2].f; GLfloat u2 = n[3].f; - (*ctx->Exec->Map1f)( target, u1, u2, ustride, uorder, - (GLfloat *) n[6].data ); + CALL_Map1f(ctx->Exec, (target, u1, u2, ustride, uorder, + (GLfloat *) n[6].data)); } - break; - case OPCODE_MAP2: + break; + case OPCODE_MAP2: { GLenum target = n[1].e; GLfloat u1 = n[2].f; @@ -5932,126 +6133,140 @@ execute_list( GLcontext *ctx, GLuint list ) GLint vstride = n[7].i; GLint uorder = n[8].i; GLint vorder = n[9].i; - (*ctx->Exec->Map2f)( target, u1, u2, ustride, uorder, - v1, v2, vstride, vorder, - (GLfloat *) n[10].data ); + CALL_Map2f(ctx->Exec, (target, u1, u2, ustride, uorder, + v1, v2, vstride, vorder, + (GLfloat *) n[10].data)); } - break; - case OPCODE_MAPGRID1: - (*ctx->Exec->MapGrid1f)( n[1].i, n[2].f, n[3].f ); - break; - case OPCODE_MAPGRID2: - (*ctx->Exec->MapGrid2f)( n[1].i, n[2].f, n[3].f, n[4].i, n[5].f, n[6].f); - break; + break; + case OPCODE_MAPGRID1: + CALL_MapGrid1f(ctx->Exec, (n[1].i, n[2].f, n[3].f)); + break; + case OPCODE_MAPGRID2: + CALL_MapGrid2f(ctx->Exec, + (n[1].i, n[2].f, n[3].f, n[4].i, n[5].f, n[6].f)); + break; case OPCODE_MATRIX_MODE: - (*ctx->Exec->MatrixMode)( n[1].e ); + CALL_MatrixMode(ctx->Exec, (n[1].e)); break; case OPCODE_MIN_MAX: - (*ctx->Exec->Minmax)(n[1].e, n[2].e, n[3].b); + CALL_Minmax(ctx->Exec, (n[1].e, n[2].e, n[3].b)); + break; + case OPCODE_MULT_MATRIX: + if (sizeof(Node) == sizeof(GLfloat)) { + CALL_MultMatrixf(ctx->Exec, (&n[1].f)); + } + else { + GLfloat m[16]; + GLuint i; + for (i = 0; i < 16; i++) { + m[i] = n[1 + i].f; + } + CALL_MultMatrixf(ctx->Exec, (m)); + } break; - case OPCODE_MULT_MATRIX: - if (sizeof(Node)==sizeof(GLfloat)) { - (*ctx->Exec->MultMatrixf)( &n[1].f ); - } - else { - GLfloat m[16]; - GLuint i; - for (i=0;i<16;i++) { - m[i] = n[1+i].f; - } - (*ctx->Exec->MultMatrixf)( m ); - } - break; case OPCODE_ORTHO: - (*ctx->Exec->Ortho)( n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f ); + CALL_Ortho(ctx->Exec, + (n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f)); + break; + case OPCODE_PASSTHROUGH: + CALL_PassThrough(ctx->Exec, (n[1].f)); + break; + case OPCODE_PIXEL_MAP: + CALL_PixelMapfv(ctx->Exec, + (n[1].e, n[2].i, (GLfloat *) n[3].data)); + break; + case OPCODE_PIXEL_TRANSFER: + CALL_PixelTransferf(ctx->Exec, (n[1].e, n[2].f)); + break; + case OPCODE_PIXEL_ZOOM: + CALL_PixelZoom(ctx->Exec, (n[1].f, n[2].f)); + break; + case OPCODE_POINT_SIZE: + CALL_PointSize(ctx->Exec, (n[1].f)); + break; + case OPCODE_POINT_PARAMETERS: + { + GLfloat params[3]; + params[0] = n[2].f; + params[1] = n[3].f; + params[2] = n[4].f; + CALL_PointParameterfvEXT(ctx->Exec, (n[1].e, params)); + } + break; + case OPCODE_POLYGON_MODE: + CALL_PolygonMode(ctx->Exec, (n[1].e, n[2].e)); + break; + case OPCODE_POLYGON_STIPPLE: + CALL_PolygonStipple(ctx->Exec, ((GLubyte *) n[1].data)); + break; + case OPCODE_POLYGON_OFFSET: + CALL_PolygonOffset(ctx->Exec, (n[1].f, n[2].f)); + break; + case OPCODE_POP_ATTRIB: + CALL_PopAttrib(ctx->Exec, ()); + break; + case OPCODE_POP_MATRIX: + CALL_PopMatrix(ctx->Exec, ()); + break; + case OPCODE_POP_NAME: + CALL_PopName(ctx->Exec, ()); + break; + case OPCODE_PRIORITIZE_TEXTURE: + CALL_PrioritizeTextures(ctx->Exec, (1, &n[1].ui, &n[2].f)); + break; + case OPCODE_PUSH_ATTRIB: + CALL_PushAttrib(ctx->Exec, (n[1].bf)); + break; + case OPCODE_PUSH_MATRIX: + CALL_PushMatrix(ctx->Exec, ()); + break; + case OPCODE_PUSH_NAME: + CALL_PushName(ctx->Exec, (n[1].ui)); + break; + case OPCODE_RASTER_POS: + CALL_RasterPos4f(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f)); + break; + case OPCODE_READ_BUFFER: + CALL_ReadBuffer(ctx->Exec, (n[1].e)); break; - case OPCODE_PASSTHROUGH: - (*ctx->Exec->PassThrough)( n[1].f ); - break; - case OPCODE_PIXEL_MAP: - (*ctx->Exec->PixelMapfv)( n[1].e, n[2].i, (GLfloat *) n[3].data ); - break; - case OPCODE_PIXEL_TRANSFER: - (*ctx->Exec->PixelTransferf)( n[1].e, n[2].f ); - break; - case OPCODE_PIXEL_ZOOM: - (*ctx->Exec->PixelZoom)( n[1].f, n[2].f ); - break; - case OPCODE_POINT_SIZE: - (*ctx->Exec->PointSize)( n[1].f ); - break; - case OPCODE_POINT_PARAMETERS: - { - GLfloat params[3]; - params[0] = n[2].f; - params[1] = n[3].f; - params[2] = n[4].f; - (*ctx->Exec->PointParameterfvEXT)( n[1].e, params ); - } - break; - case OPCODE_POLYGON_MODE: - (*ctx->Exec->PolygonMode)( n[1].e, n[2].e ); - break; - case OPCODE_POLYGON_STIPPLE: - (*ctx->Exec->PolygonStipple)( (GLubyte *) n[1].data ); - break; - case OPCODE_POLYGON_OFFSET: - (*ctx->Exec->PolygonOffset)( n[1].f, n[2].f ); - break; - case OPCODE_POP_ATTRIB: - (*ctx->Exec->PopAttrib)(); - break; - case OPCODE_POP_MATRIX: - (*ctx->Exec->PopMatrix)(); - break; - case OPCODE_POP_NAME: - (*ctx->Exec->PopName)(); - break; - case OPCODE_PRIORITIZE_TEXTURE: - (*ctx->Exec->PrioritizeTextures)( 1, &n[1].ui, &n[2].f ); - break; - case OPCODE_PUSH_ATTRIB: - (*ctx->Exec->PushAttrib)( n[1].bf ); - break; - case OPCODE_PUSH_MATRIX: - (*ctx->Exec->PushMatrix)(); - break; - case OPCODE_PUSH_NAME: - (*ctx->Exec->PushName)( n[1].ui ); - break; - case OPCODE_RASTER_POS: - (*ctx->Exec->RasterPos4f)( n[1].f, n[2].f, n[3].f, n[4].f ); - break; - case OPCODE_READ_BUFFER: - (*ctx->Exec->ReadBuffer)( n[1].e ); - break; case OPCODE_RESET_HISTOGRAM: - (*ctx->Exec->ResetHistogram)( n[1].e ); + CALL_ResetHistogram(ctx->Exec, (n[1].e)); break; case OPCODE_RESET_MIN_MAX: - (*ctx->Exec->ResetMinmax)( n[1].e ); + CALL_ResetMinmax(ctx->Exec, (n[1].e)); break; case OPCODE_ROTATE: - (*ctx->Exec->Rotatef)( n[1].f, n[2].f, n[3].f, n[4].f ); + CALL_Rotatef(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f)); break; case OPCODE_SCALE: - (*ctx->Exec->Scalef)( n[1].f, n[2].f, n[3].f ); + CALL_Scalef(ctx->Exec, (n[1].f, n[2].f, n[3].f)); + break; + case OPCODE_SCISSOR: + CALL_Scissor(ctx->Exec, (n[1].i, n[2].i, n[3].i, n[4].i)); + break; + case OPCODE_SHADE_MODEL: + CALL_ShadeModel(ctx->Exec, (n[1].e)); + break; + case OPCODE_STENCIL_FUNC: + CALL_StencilFunc(ctx->Exec, (n[1].e, n[2].i, n[3].ui)); + break; + case OPCODE_STENCIL_MASK: + CALL_StencilMask(ctx->Exec, (n[1].ui)); + break; + case OPCODE_STENCIL_OP: + CALL_StencilOp(ctx->Exec, (n[1].e, n[2].e, n[3].e)); + break; + case OPCODE_STENCIL_FUNC_SEPARATE: + CALL_StencilFuncSeparate(ctx->Exec, + (n[1].e, n[2].e, n[3].i, n[4].ui)); + break; + case OPCODE_STENCIL_MASK_SEPARATE: + CALL_StencilMaskSeparate(ctx->Exec, (n[1].e, n[2].ui)); + break; + case OPCODE_STENCIL_OP_SEPARATE: + CALL_StencilOpSeparate(ctx->Exec, + (n[1].e, n[2].e, n[3].e, n[4].e)); break; - case OPCODE_SCISSOR: - (*ctx->Exec->Scissor)( n[1].i, n[2].i, n[3].i, n[4].i ); - break; - case OPCODE_SHADE_MODEL: - (*ctx->Exec->ShadeModel)( n[1].e ); - break; - case OPCODE_STENCIL_FUNC: - (*ctx->Exec->StencilFunc)( n[1].e, n[2].i, n[3].ui ); - break; - case OPCODE_STENCIL_MASK: - (*ctx->Exec->StencilMask)( n[1].ui ); - break; - case OPCODE_STENCIL_OP: - (*ctx->Exec->StencilOp)( n[1].e, n[2].e, n[3].e ); - break; case OPCODE_TEXENV: { GLfloat params[4]; @@ -6059,7 +6274,7 @@ execute_list( GLcontext *ctx, GLuint list ) params[1] = n[4].f; params[2] = n[5].f; params[3] = n[6].f; - (*ctx->Exec->TexEnvfv)( n[1].e, n[2].e, params ); + CALL_TexEnvfv(ctx->Exec, (n[1].e, n[2].e, params)); } break; case OPCODE_TEXGEN: @@ -6069,7 +6284,7 @@ execute_list( GLcontext *ctx, GLuint list ) params[1] = n[4].f; params[2] = n[5].f; params[3] = n[6].f; - (*ctx->Exec->TexGenfv)( n[1].e, n[2].e, params ); + CALL_TexGenfv(ctx->Exec, (n[1].e, n[2].e, params)); } break; case OPCODE_TEXPARAMETER: @@ -6079,144 +6294,144 @@ execute_list( GLcontext *ctx, GLuint list ) params[1] = n[4].f; params[2] = n[5].f; params[3] = n[6].f; - (*ctx->Exec->TexParameterfv)( n[1].e, n[2].e, params ); + CALL_TexParameterfv(ctx->Exec, (n[1].e, n[2].e, params)); } break; - case OPCODE_TEX_IMAGE1D: + case OPCODE_TEX_IMAGE1D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->TexImage1D)( - n[1].e, /* target */ - n[2].i, /* level */ - n[3].i, /* components */ - n[4].i, /* width */ - n[5].e, /* border */ - n[6].e, /* format */ - n[7].e, /* type */ - n[8].data ); - ctx->Unpack = save; /* restore */ + CALL_TexImage1D(ctx->Exec, (n[1].e, /* target */ + n[2].i, /* level */ + n[3].i, /* components */ + n[4].i, /* width */ + n[5].e, /* border */ + n[6].e, /* format */ + n[7].e, /* type */ + n[8].data)); + ctx->Unpack = save; /* restore */ } - break; - case OPCODE_TEX_IMAGE2D: + break; + case OPCODE_TEX_IMAGE2D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->TexImage2D)( - n[1].e, /* target */ - n[2].i, /* level */ - n[3].i, /* components */ - n[4].i, /* width */ - n[5].i, /* height */ - n[6].e, /* border */ - n[7].e, /* format */ - n[8].e, /* type */ - n[9].data ); - ctx->Unpack = save; /* restore */ + CALL_TexImage2D(ctx->Exec, (n[1].e, /* target */ + n[2].i, /* level */ + n[3].i, /* components */ + n[4].i, /* width */ + n[5].i, /* height */ + n[6].e, /* border */ + n[7].e, /* format */ + n[8].e, /* type */ + n[9].data)); + ctx->Unpack = save; /* restore */ } - break; + break; case OPCODE_TEX_IMAGE3D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->TexImage3D)( - n[1].e, /* target */ - n[2].i, /* level */ - n[3].i, /* components */ - n[4].i, /* width */ - n[5].i, /* height */ - n[6].i, /* depth */ - n[7].e, /* border */ - n[8].e, /* format */ - n[9].e, /* type */ - n[10].data ); - ctx->Unpack = save; /* restore */ + CALL_TexImage3D(ctx->Exec, (n[1].e, /* target */ + n[2].i, /* level */ + n[3].i, /* components */ + n[4].i, /* width */ + n[5].i, /* height */ + n[6].i, /* depth */ + n[7].e, /* border */ + n[8].e, /* format */ + n[9].e, /* type */ + n[10].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_TEX_SUB_IMAGE1D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->TexSubImage1D)( n[1].e, n[2].i, n[3].i, - n[4].i, n[5].e, - n[6].e, n[7].data ); - ctx->Unpack = save; /* restore */ + CALL_TexSubImage1D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].i, n[5].e, + n[6].e, n[7].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_TEX_SUB_IMAGE2D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->TexSubImage2D)( n[1].e, n[2].i, n[3].i, - n[4].i, n[5].e, - n[6].i, n[7].e, n[8].e, n[9].data ); - ctx->Unpack = save; /* restore */ + CALL_TexSubImage2D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].i, n[5].e, + n[6].i, n[7].e, n[8].e, + n[9].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_TEX_SUB_IMAGE3D: { const struct gl_pixelstore_attrib save = ctx->Unpack; ctx->Unpack = ctx->DefaultPacking; - (*ctx->Exec->TexSubImage3D)( n[1].e, n[2].i, n[3].i, - n[4].i, n[5].i, n[6].i, n[7].i, - n[8].i, n[9].e, n[10].e, - n[11].data ); - ctx->Unpack = save; /* restore */ + CALL_TexSubImage3D(ctx->Exec, (n[1].e, n[2].i, n[3].i, + n[4].i, n[5].i, n[6].i, n[7].i, + n[8].i, n[9].e, n[10].e, + n[11].data)); + ctx->Unpack = save; /* restore */ } break; case OPCODE_TRANSLATE: - (*ctx->Exec->Translatef)( n[1].f, n[2].f, n[3].f ); + CALL_Translatef(ctx->Exec, (n[1].f, n[2].f, n[3].f)); break; - case OPCODE_VIEWPORT: - (*ctx->Exec->Viewport)(n[1].i, n[2].i, - (GLsizei) n[3].i, (GLsizei) n[4].i); - break; - case OPCODE_WINDOW_POS: - (*ctx->Exec->WindowPos4fMESA)( n[1].f, n[2].f, n[3].f, n[4].f ); - break; - case OPCODE_ACTIVE_TEXTURE: /* GL_ARB_multitexture */ - (*ctx->Exec->ActiveTextureARB)( n[1].e ); + case OPCODE_VIEWPORT: + CALL_Viewport(ctx->Exec, (n[1].i, n[2].i, + (GLsizei) n[3].i, (GLsizei) n[4].i)); break; - case OPCODE_PIXEL_TEXGEN_SGIX: /* GL_SGIX_pixel_texture */ - (*ctx->Exec->PixelTexGenSGIX)( n[1].e ); + case OPCODE_WINDOW_POS: + CALL_WindowPos4fMESA(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f)); break; - case OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS: /* GL_SGIS_pixel_texture */ - (*ctx->Exec->PixelTexGenParameteriSGIS)( n[1].e, n[2].i ); + case OPCODE_ACTIVE_TEXTURE: /* GL_ARB_multitexture */ + CALL_ActiveTextureARB(ctx->Exec, (n[1].e)); break; - case OPCODE_COMPRESSED_TEX_IMAGE_1D: /* GL_ARB_texture_compression */ - (*ctx->Exec->CompressedTexImage1DARB)(n[1].e, n[2].i, n[3].e, - n[4].i, n[5].i, n[6].i, n[7].data); + case OPCODE_COMPRESSED_TEX_IMAGE_1D: /* GL_ARB_texture_compression */ + CALL_CompressedTexImage1DARB(ctx->Exec, (n[1].e, n[2].i, n[3].e, + n[4].i, n[5].i, n[6].i, + n[7].data)); break; - case OPCODE_COMPRESSED_TEX_IMAGE_2D: /* GL_ARB_texture_compression */ - (*ctx->Exec->CompressedTexImage2DARB)(n[1].e, n[2].i, n[3].e, - n[4].i, n[5].i, n[6].i, n[7].i, n[8].data); + case OPCODE_COMPRESSED_TEX_IMAGE_2D: /* GL_ARB_texture_compression */ + CALL_CompressedTexImage2DARB(ctx->Exec, (n[1].e, n[2].i, n[3].e, + n[4].i, n[5].i, n[6].i, + n[7].i, n[8].data)); break; - case OPCODE_COMPRESSED_TEX_IMAGE_3D: /* GL_ARB_texture_compression */ - (*ctx->Exec->CompressedTexImage3DARB)(n[1].e, n[2].i, n[3].e, - n[4].i, n[5].i, n[6].i, n[7].i, n[8].i, n[9].data); + case OPCODE_COMPRESSED_TEX_IMAGE_3D: /* GL_ARB_texture_compression */ + CALL_CompressedTexImage3DARB(ctx->Exec, (n[1].e, n[2].i, n[3].e, + n[4].i, n[5].i, n[6].i, + n[7].i, n[8].i, + n[9].data)); break; - case OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D: /* GL_ARB_texture_compress */ - (*ctx->Exec->CompressedTexSubImage1DARB)(n[1].e, n[2].i, n[3].i, - n[4].i, n[5].e, n[6].i, n[7].data); + case OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D: /* GL_ARB_texture_compress */ + CALL_CompressedTexSubImage1DARB(ctx->Exec, + (n[1].e, n[2].i, n[3].i, n[4].i, + n[5].e, n[6].i, n[7].data)); break; - case OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D: /* GL_ARB_texture_compress */ - (*ctx->Exec->CompressedTexSubImage2DARB)(n[1].e, n[2].i, n[3].i, - n[4].i, n[5].i, n[6].i, n[7].e, n[8].i, n[9].data); + case OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D: /* GL_ARB_texture_compress */ + CALL_CompressedTexSubImage2DARB(ctx->Exec, + (n[1].e, n[2].i, n[3].i, n[4].i, + n[5].i, n[6].i, n[7].e, n[8].i, + n[9].data)); break; - case OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D: /* GL_ARB_texture_compress */ - (*ctx->Exec->CompressedTexSubImage3DARB)(n[1].e, n[2].i, n[3].i, - n[4].i, n[5].i, n[6].i, n[7].i, n[8].i, - n[9].e, n[10].i, n[11].data); + case OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D: /* GL_ARB_texture_compress */ + CALL_CompressedTexSubImage3DARB(ctx->Exec, + (n[1].e, n[2].i, n[3].i, n[4].i, + n[5].i, n[6].i, n[7].i, n[8].i, + n[9].e, n[10].i, n[11].data)); break; - case OPCODE_SAMPLE_COVERAGE: /* GL_ARB_multisample */ - (*ctx->Exec->SampleCoverageARB)(n[1].f, n[2].b); + case OPCODE_SAMPLE_COVERAGE: /* GL_ARB_multisample */ + CALL_SampleCoverageARB(ctx->Exec, (n[1].f, n[2].b)); + break; + case OPCODE_WINDOW_POS_ARB: /* GL_ARB_window_pos */ + CALL_WindowPos3fMESA(ctx->Exec, (n[1].f, n[2].f, n[3].f)); break; - case OPCODE_WINDOW_POS_ARB: /* GL_ARB_window_pos */ - (*ctx->Exec->WindowPos3fMESA)( n[1].f, n[2].f, n[3].f ); - break; #if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program - case OPCODE_BIND_PROGRAM_NV: /* GL_NV_vertex_program */ - (*ctx->Exec->BindProgramNV)( n[1].e, n[2].ui ); + case OPCODE_BIND_PROGRAM_NV: /* GL_NV_vertex_program */ + CALL_BindProgramNV(ctx->Exec, (n[1].e, n[2].ui)); break; #endif #if FEATURE_NV_vertex_program @@ -6227,276 +6442,283 @@ execute_list( GLcontext *ctx, GLuint list ) v[1] = n[4].f; v[2] = n[5].f; v[3] = n[6].f; - (*ctx->Exec->ExecuteProgramNV)(n[1].e, n[2].ui, v); + CALL_ExecuteProgramNV(ctx->Exec, (n[1].e, n[2].ui, v)); } break; case OPCODE_REQUEST_RESIDENT_PROGRAMS_NV: - (*ctx->Exec->RequestResidentProgramsNV)(n[1].ui, - (GLuint *) n[2].data); + CALL_RequestResidentProgramsNV(ctx->Exec, (n[1].ui, + (GLuint *) n[2].data)); break; case OPCODE_LOAD_PROGRAM_NV: - (*ctx->Exec->LoadProgramNV)(n[1].e, n[2].ui, n[3].i, - (const GLubyte *) n[4].data); + CALL_LoadProgramNV(ctx->Exec, (n[1].e, n[2].ui, n[3].i, + (const GLubyte *) n[4].data)); break; case OPCODE_PROGRAM_PARAMETER4F_NV: - (*ctx->Exec->ProgramParameter4fNV)(n[1].e, n[2].ui, n[3].f, - n[4].f, n[5].f, n[6].f); + CALL_ProgramParameter4fNV(ctx->Exec, (n[1].e, n[2].ui, n[3].f, + n[4].f, n[5].f, n[6].f)); break; case OPCODE_TRACK_MATRIX_NV: - (*ctx->Exec->TrackMatrixNV)(n[1].e, n[2].ui, n[3].e, n[4].e); + CALL_TrackMatrixNV(ctx->Exec, (n[1].e, n[2].ui, n[3].e, n[4].e)); break; #endif #if FEATURE_NV_fragment_program case OPCODE_PROGRAM_LOCAL_PARAMETER_ARB: - (*ctx->Exec->ProgramLocalParameter4fARB)(n[1].e, n[2].ui, n[3].f, - n[4].f, n[5].f, n[6].f); + CALL_ProgramLocalParameter4fARB(ctx->Exec, + (n[1].e, n[2].ui, n[3].f, n[4].f, + n[5].f, n[6].f)); break; case OPCODE_PROGRAM_NAMED_PARAMETER_NV: - (*ctx->Exec->ProgramNamedParameter4fNV)(n[1].ui, n[2].i, - (const GLubyte *) n[3].data, - n[4].f, n[5].f, n[6].f, n[7].f); + CALL_ProgramNamedParameter4fNV(ctx->Exec, (n[1].ui, n[2].i, + (const GLubyte *) n[3]. + data, n[4].f, n[5].f, + n[6].f, n[7].f)); break; #endif case OPCODE_ACTIVE_STENCIL_FACE_EXT: - (*ctx->Exec->ActiveStencilFaceEXT)(n[1].e); + CALL_ActiveStencilFaceEXT(ctx->Exec, (n[1].e)); break; case OPCODE_DEPTH_BOUNDS_EXT: - (*ctx->Exec->DepthBoundsEXT)(n[1].f, n[2].f); + CALL_DepthBoundsEXT(ctx->Exec, (n[1].f, n[2].f)); break; #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program case OPCODE_PROGRAM_STRING_ARB: - (*ctx->Exec->ProgramStringARB)(n[1].e, n[2].e, n[3].i, n[4].data); + CALL_ProgramStringARB(ctx->Exec, + (n[1].e, n[2].e, n[3].i, n[4].data)); break; case OPCODE_PROGRAM_ENV_PARAMETER_ARB: - (*ctx->Exec->ProgramEnvParameter4fARB)(n[1].e, n[2].ui, n[3].f, - n[4].f, n[5].f, n[6].f); + CALL_ProgramEnvParameter4fARB(ctx->Exec, (n[1].e, n[2].ui, n[3].f, + n[4].f, n[5].f, + n[6].f)); break; #endif #if FEATURE_ARB_occlusion_query case OPCODE_BEGIN_QUERY_ARB: - ctx->Exec->BeginQueryARB(n[1].e, n[2].ui); + CALL_BeginQueryARB(ctx->Exec, (n[1].e, n[2].ui)); break; case OPCODE_END_QUERY_ARB: - ctx->Exec->EndQueryARB(n[1].e); + CALL_EndQueryARB(ctx->Exec, (n[1].e)); break; #endif case OPCODE_DRAW_BUFFERS_ARB: - { - GLenum buffers[MAX_DRAW_BUFFERS]; - GLint i, count = MIN2(n[1].i, MAX_DRAW_BUFFERS); - for (i = 0; i < count; i++) - buffers[i] = n[2 + i].e; - ctx->Exec->DrawBuffersARB(n[1].i, buffers); - } + { + GLenum buffers[MAX_DRAW_BUFFERS]; + GLint i, count = MIN2(n[1].i, MAX_DRAW_BUFFERS); + for (i = 0; i < count; i++) + buffers[i] = n[2 + i].e; + CALL_DrawBuffersARB(ctx->Exec, (n[1].i, buffers)); + } break; -#if FEATURE_ATI_fragment_shader - case OPCODE_BIND_FRAGMENT_SHADER_ATI: - ctx->Exec->BindFragmentShaderATI(n[1].i); +#if FEATURE_EXT_framebuffer_blit + case OPCODE_BLIT_FRAMEBUFFER: + CALL_BlitFramebufferEXT(ctx->Exec, (n[1].i, n[2].i, n[3].i, n[4].i, + n[5].i, n[6].i, n[7].i, n[8].i, + n[9].i, n[10].e)); break; - case OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI: - { - GLfloat values[4]; - GLuint i, dst = n[1].ui; - - for (i = 0; i < 4; i++) - values[i] = n[1+i].f; - ctx->Exec->SetFragmentShaderConstantATI(dst, values); - } - break; #endif - case OPCODE_ATTR_1F_NV: - (*ctx->Exec->VertexAttrib1fNV)(n[1].e, n[2].f); - break; - case OPCODE_ATTR_2F_NV: - /* Really shouldn't have to do this - the Node structure - * is convenient, but it would be better to store the data - * packed appropriately so that it can be sent directly - * on. With x86_64 becoming common, this will start to - * matter more. - */ - if (sizeof(Node)==sizeof(GLfloat)) - (*ctx->Exec->VertexAttrib2fvNV)(n[1].e, &n[2].f); - else - (*ctx->Exec->VertexAttrib2fNV)(n[1].e, n[2].f, n[3].f); - break; - case OPCODE_ATTR_3F_NV: - if (sizeof(Node)==sizeof(GLfloat)) - (*ctx->Exec->VertexAttrib3fvNV)(n[1].e, &n[2].f); - else - (*ctx->Exec->VertexAttrib3fNV)(n[1].e, n[2].f, n[3].f, - n[4].f); - break; - case OPCODE_ATTR_4F_NV: - if (sizeof(Node)==sizeof(GLfloat)) - (*ctx->Exec->VertexAttrib4fvNV)(n[1].e, &n[2].f); - else - (*ctx->Exec->VertexAttrib4fNV)(n[1].e, n[2].f, n[3].f, - n[4].f, n[5].f); - break; - case OPCODE_ATTR_1F_ARB: - (*ctx->Exec->VertexAttrib1fARB)(n[1].e, n[2].f); - break; - case OPCODE_ATTR_2F_ARB: - /* Really shouldn't have to do this - the Node structure - * is convenient, but it would be better to store the data - * packed appropriately so that it can be sent directly - * on. With x86_64 becoming common, this will start to - * matter more. - */ - if (sizeof(Node)==sizeof(GLfloat)) - (*ctx->Exec->VertexAttrib2fvARB)(n[1].e, &n[2].f); - else - (*ctx->Exec->VertexAttrib2fARB)(n[1].e, n[2].f, n[3].f); - break; - case OPCODE_ATTR_3F_ARB: - if (sizeof(Node)==sizeof(GLfloat)) - (*ctx->Exec->VertexAttrib3fvARB)(n[1].e, &n[2].f); - else - (*ctx->Exec->VertexAttrib3fARB)(n[1].e, n[2].f, n[3].f, - n[4].f); - break; - case OPCODE_ATTR_4F_ARB: - if (sizeof(Node)==sizeof(GLfloat)) - (*ctx->Exec->VertexAttrib4fvARB)(n[1].e, &n[2].f); - else - (*ctx->Exec->VertexAttrib4fARB)(n[1].e, n[2].f, n[3].f, - n[4].f, n[5].f); - break; - case OPCODE_MATERIAL: - if (sizeof(Node)==sizeof(GLfloat)) - (*ctx->Exec->Materialfv)(n[1].e, n[2].e, &n[3].f); - else { - GLfloat f[4]; - f[0] = n[3].f; - f[1] = n[4].f; - f[2] = n[5].f; - f[3] = n[6].f; - (*ctx->Exec->Materialfv)(n[1].e, n[2].e, f); - } - break; - case OPCODE_INDEX: - (*ctx->Exec->Indexi)(n[1].i); - break; - case OPCODE_EDGEFLAG: - (*ctx->Exec->EdgeFlag)(n[1].b); - break; - case OPCODE_BEGIN: - (*ctx->Exec->Begin)(n[1].e); - break; - case OPCODE_END: - (*ctx->Exec->End)(); - break; - case OPCODE_RECTF: - (*ctx->Exec->Rectf)(n[1].f, n[2].f, n[3].f, n[4].f); - break; - case OPCODE_EVAL_C1: - (*ctx->Exec->EvalCoord1f)(n[1].f); - break; - case OPCODE_EVAL_C2: - (*ctx->Exec->EvalCoord2f)(n[1].f, n[2].f); - break; - case OPCODE_EVAL_P1: - (*ctx->Exec->EvalPoint1)(n[1].i); - break; - case OPCODE_EVAL_P2: - (*ctx->Exec->EvalPoint2)(n[1].i, n[2].i); - break; +#if FEATURE_ATI_fragment_shader + case OPCODE_BIND_FRAGMENT_SHADER_ATI: + CALL_BindFragmentShaderATI(ctx->Exec, (n[1].i)); + break; + case OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI: + { + GLfloat values[4]; + GLuint i, dst = n[1].ui; + + for (i = 0; i < 4; i++) + values[i] = n[1 + i].f; + CALL_SetFragmentShaderConstantATI(ctx->Exec, (dst, values)); + } + break; +#endif + case OPCODE_ATTR_1F_NV: + CALL_VertexAttrib1fNV(ctx->Exec, (n[1].e, n[2].f)); + break; + case OPCODE_ATTR_2F_NV: + /* Really shouldn't have to do this - the Node structure + * is convenient, but it would be better to store the data + * packed appropriately so that it can be sent directly + * on. With x86_64 becoming common, this will start to + * matter more. + */ + if (sizeof(Node) == sizeof(GLfloat)) + CALL_VertexAttrib2fvNV(ctx->Exec, (n[1].e, &n[2].f)); + else + CALL_VertexAttrib2fNV(ctx->Exec, (n[1].e, n[2].f, n[3].f)); + break; + case OPCODE_ATTR_3F_NV: + if (sizeof(Node) == sizeof(GLfloat)) + CALL_VertexAttrib3fvNV(ctx->Exec, (n[1].e, &n[2].f)); + else + CALL_VertexAttrib3fNV(ctx->Exec, (n[1].e, n[2].f, n[3].f, + n[4].f)); + break; + case OPCODE_ATTR_4F_NV: + if (sizeof(Node) == sizeof(GLfloat)) + CALL_VertexAttrib4fvNV(ctx->Exec, (n[1].e, &n[2].f)); + else + CALL_VertexAttrib4fNV(ctx->Exec, (n[1].e, n[2].f, n[3].f, + n[4].f, n[5].f)); + break; + case OPCODE_ATTR_1F_ARB: + CALL_VertexAttrib1fARB(ctx->Exec, (n[1].e, n[2].f)); + break; + case OPCODE_ATTR_2F_ARB: + /* Really shouldn't have to do this - the Node structure + * is convenient, but it would be better to store the data + * packed appropriately so that it can be sent directly + * on. With x86_64 becoming common, this will start to + * matter more. + */ + if (sizeof(Node) == sizeof(GLfloat)) + CALL_VertexAttrib2fvARB(ctx->Exec, (n[1].e, &n[2].f)); + else + CALL_VertexAttrib2fARB(ctx->Exec, (n[1].e, n[2].f, n[3].f)); + break; + case OPCODE_ATTR_3F_ARB: + if (sizeof(Node) == sizeof(GLfloat)) + CALL_VertexAttrib3fvARB(ctx->Exec, (n[1].e, &n[2].f)); + else + CALL_VertexAttrib3fARB(ctx->Exec, (n[1].e, n[2].f, n[3].f, + n[4].f)); + break; + case OPCODE_ATTR_4F_ARB: + if (sizeof(Node) == sizeof(GLfloat)) + CALL_VertexAttrib4fvARB(ctx->Exec, (n[1].e, &n[2].f)); + else + CALL_VertexAttrib4fARB(ctx->Exec, (n[1].e, n[2].f, n[3].f, + n[4].f, n[5].f)); + break; + case OPCODE_MATERIAL: + if (sizeof(Node) == sizeof(GLfloat)) + CALL_Materialfv(ctx->Exec, (n[1].e, n[2].e, &n[3].f)); + else { + GLfloat f[4]; + f[0] = n[3].f; + f[1] = n[4].f; + f[2] = n[5].f; + f[3] = n[6].f; + CALL_Materialfv(ctx->Exec, (n[1].e, n[2].e, f)); + } + break; + case OPCODE_INDEX: + CALL_Indexf(ctx->Exec, (n[1].f)); + break; + case OPCODE_EDGEFLAG: + CALL_EdgeFlag(ctx->Exec, (n[1].b)); + break; + case OPCODE_BEGIN: + CALL_Begin(ctx->Exec, (n[1].e)); + break; + case OPCODE_END: + CALL_End(ctx->Exec, ()); + break; + case OPCODE_RECTF: + CALL_Rectf(ctx->Exec, (n[1].f, n[2].f, n[3].f, n[4].f)); + break; + case OPCODE_EVAL_C1: + CALL_EvalCoord1f(ctx->Exec, (n[1].f)); + break; + case OPCODE_EVAL_C2: + CALL_EvalCoord2f(ctx->Exec, (n[1].f, n[2].f)); + break; + case OPCODE_EVAL_P1: + CALL_EvalPoint1(ctx->Exec, (n[1].i)); + break; + case OPCODE_EVAL_P2: + CALL_EvalPoint2(ctx->Exec, (n[1].i, n[2].i)); + break; - case OPCODE_CONTINUE: - n = (Node *) n[1].next; - break; - case OPCODE_END_OF_LIST: - done = GL_TRUE; - break; - default: + case OPCODE_CONTINUE: + n = (Node *) n[1].next; + break; + case OPCODE_END_OF_LIST: + done = GL_TRUE; + break; + default: { char msg[1000]; - _mesa_sprintf(msg, "Error in execute_list: opcode=%d", (int) opcode); + _mesa_sprintf(msg, "Error in execute_list: opcode=%d", + (int) opcode); _mesa_problem(ctx, msg); } done = GL_TRUE; - } + } - /* increment n to point to next compiled command */ - if (opcode!=OPCODE_CONTINUE) { - n += InstSize[opcode]; - } + /* increment n to point to next compiled command */ + if (opcode != OPCODE_CONTINUE) { + n += InstSize[opcode]; + } } } - ctx->ListState.CallDepth--; if (ctx->Driver.EndCallList) - ctx->Driver.EndCallList( ctx ); + ctx->Driver.EndCallList(ctx); + + ctx->ListState.CallStack[ctx->ListState.CallDepth--] = NULL; } - - /**********************************************************************/ /* GL functions */ /**********************************************************************/ - - - -/* +/** * Test if a display list number is valid. */ GLboolean GLAPIENTRY -_mesa_IsList( GLuint list ) +_mesa_IsList(GLuint list) { GET_CURRENT_CONTEXT(ctx); - FLUSH_VERTICES(ctx, 0); /* must be called before assert */ + FLUSH_VERTICES(ctx, 0); /* must be called before assert */ ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); return islist(ctx, list); } -/* +/** * Delete a sequence of consecutive display lists. */ void GLAPIENTRY -_mesa_DeleteLists( GLuint list, GLsizei range ) +_mesa_DeleteLists(GLuint list, GLsizei range) { GET_CURRENT_CONTEXT(ctx); GLuint i; - FLUSH_VERTICES(ctx, 0); /* must be called before assert */ + FLUSH_VERTICES(ctx, 0); /* must be called before assert */ ASSERT_OUTSIDE_BEGIN_END(ctx); - if (range<0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glDeleteLists" ); + if (range < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteLists"); return; } - for (i=list;iShared->DisplayList, base+i, make_empty_list()); + for (i = 0; i < range; i++) { + _mesa_HashInsert(ctx->Shared->DisplayList, base + i, + make_list(base + i, 1)); } } @@ -6520,36 +6743,35 @@ _mesa_GenLists(GLsizei range ) } - -/* +/** * Begin a new display list. */ void GLAPIENTRY -_mesa_NewList( GLuint list, GLenum mode ) +_mesa_NewList(GLuint list, GLenum mode) { GET_CURRENT_CONTEXT(ctx); GLint i; - FLUSH_CURRENT(ctx, 0); /* must be called before assert */ + FLUSH_CURRENT(ctx, 0); /* must be called before assert */ ASSERT_OUTSIDE_BEGIN_END(ctx); - if (MESA_VERBOSE&VERBOSE_API) + if (MESA_VERBOSE & VERBOSE_API) _mesa_debug(ctx, "glNewList %u %s\n", list, _mesa_lookup_enum_by_nr(mode)); - if (list==0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glNewList" ); + if (list == 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glNewList"); return; } - if (mode!=GL_COMPILE && mode!=GL_COMPILE_AND_EXECUTE) { - _mesa_error( ctx, GL_INVALID_ENUM, "glNewList" ); + if (mode != GL_COMPILE && mode != GL_COMPILE_AND_EXECUTE) { + _mesa_error(ctx, GL_INVALID_ENUM, "glNewList"); return; } if (ctx->ListState.CurrentListPtr) { /* already compiling a display list */ - _mesa_error( ctx, GL_INVALID_OPERATION, "glNewList" ); + _mesa_error(ctx, GL_INVALID_OPERATION, "glNewList"); return; } @@ -6558,7 +6780,8 @@ _mesa_NewList( GLuint list, GLenum mode ) /* Allocate new display list */ ctx->ListState.CurrentListNum = list; - ctx->ListState.CurrentBlock = (Node *) CALLOC( sizeof(Node) * BLOCK_SIZE ); + ctx->ListState.CurrentList = make_list(list, BLOCK_SIZE); + ctx->ListState.CurrentBlock = ctx->ListState.CurrentList->node; ctx->ListState.CurrentListPtr = ctx->ListState.CurrentBlock; ctx->ListState.CurrentPos = 0; @@ -6569,64 +6792,64 @@ _mesa_NewList( GLuint list, GLenum mode ) for (i = 0; i < MAT_ATTRIB_MAX; i++) ctx->ListState.ActiveMaterialSize[i] = 0; - + ctx->ListState.ActiveIndex = 0; ctx->ListState.ActiveEdgeFlag = 0; ctx->Driver.CurrentSavePrimitive = PRIM_UNKNOWN; - ctx->Driver.NewList( ctx, list, mode ); + ctx->Driver.NewList(ctx, list, mode); ctx->CurrentDispatch = ctx->Save; - _glapi_set_dispatch( ctx->CurrentDispatch ); + _glapi_set_dispatch(ctx->CurrentDispatch); } - -/* +/** * End definition of current display list. */ void GLAPIENTRY -_mesa_EndList( void ) +_mesa_EndList(void) { GET_CURRENT_CONTEXT(ctx); SAVE_FLUSH_VERTICES(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - if (MESA_VERBOSE&VERBOSE_API) + if (MESA_VERBOSE & VERBOSE_API) _mesa_debug(ctx, "glEndList\n"); /* Check that a list is under construction */ if (!ctx->ListState.CurrentListPtr) { - _mesa_error( ctx, GL_INVALID_OPERATION, "glEndList" ); + _mesa_error(ctx, GL_INVALID_OPERATION, "glEndList"); return; } - (void) ALLOC_INSTRUCTION( ctx, OPCODE_END_OF_LIST, 0 ); + (void) ALLOC_INSTRUCTION(ctx, OPCODE_END_OF_LIST, 0); /* Destroy old list, if any */ - _mesa_destroy_list(ctx, ctx->ListState.CurrentListNum); + destroy_list(ctx, ctx->ListState.CurrentListNum); /* Install the list */ - _mesa_HashInsert(ctx->Shared->DisplayList, ctx->ListState.CurrentListNum, ctx->ListState.CurrentListPtr); + _mesa_HashInsert(ctx->Shared->DisplayList, ctx->ListState.CurrentListNum, + ctx->ListState.CurrentList); if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST) mesa_print_display_list(ctx->ListState.CurrentListNum); + ctx->Driver.EndList(ctx); + + ctx->ListState.CurrentList = NULL; ctx->ListState.CurrentListNum = 0; ctx->ListState.CurrentListPtr = NULL; ctx->ExecuteFlag = GL_TRUE; ctx->CompileFlag = GL_FALSE; - ctx->Driver.EndList( ctx ); - ctx->CurrentDispatch = ctx->Exec; - _glapi_set_dispatch( ctx->CurrentDispatch ); + _glapi_set_dispatch(ctx->CurrentDispatch); } - void GLAPIENTRY -_mesa_CallList( GLuint list ) +_mesa_CallList(GLuint list) { GLboolean save_compile_flag; GET_CURRENT_CONTEXT(ctx); @@ -6649,23 +6872,22 @@ _mesa_CallList( GLuint list ) ctx->CompileFlag = GL_FALSE; } - execute_list( ctx, list ); + execute_list(ctx, list); ctx->CompileFlag = save_compile_flag; /* also restore API function pointers to point to "save" versions */ if (save_compile_flag) { ctx->CurrentDispatch = ctx->Save; - _glapi_set_dispatch( ctx->CurrentDispatch ); + _glapi_set_dispatch(ctx->CurrentDispatch); } } - -/* +/** * Execute glCallLists: call multiple display lists. */ void GLAPIENTRY -_mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists ) +_mesa_CallLists(GLsizei n, GLenum type, const GLvoid * lists) { GET_CURRENT_CONTEXT(ctx); GLuint list; @@ -6676,21 +6898,21 @@ _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists ) _mesa_debug(ctx, "glCallLists %d\n", n); switch (type) { - case GL_BYTE: - case GL_UNSIGNED_BYTE: - case GL_SHORT: - case GL_UNSIGNED_SHORT: - case GL_INT: - case GL_UNSIGNED_INT: - case GL_FLOAT: - case GL_2_BYTES: - case GL_3_BYTES: - case GL_4_BYTES: - /* OK */ - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glCallLists(type)"); - return; + case GL_BYTE: + case GL_UNSIGNED_BYTE: + case GL_SHORT: + case GL_UNSIGNED_SHORT: + case GL_INT: + case GL_UNSIGNED_INT: + case GL_FLOAT: + case GL_2_BYTES: + case GL_3_BYTES: + case GL_4_BYTES: + /* OK */ + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glCallLists(type)"); + return; } /* Save the CompileFlag status, turn it off, execute display list, @@ -6699,9 +6921,9 @@ _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists ) save_compile_flag = ctx->CompileFlag; ctx->CompileFlag = GL_FALSE; - for (i=0;iList.ListBase + list ); + for (i = 0; i < n; i++) { + list = translate_id(i, type, lists); + execute_list(ctx, ctx->List.ListBase + list); } ctx->CompileFlag = save_compile_flag; @@ -6709,20 +6931,19 @@ _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists ) /* also restore API function pointers to point to "save" versions */ if (save_compile_flag) { ctx->CurrentDispatch = ctx->Save; - _glapi_set_dispatch( ctx->CurrentDispatch ); + _glapi_set_dispatch(ctx->CurrentDispatch); } } - -/* +/** * Set the offset added to list numbers in glCallLists. */ void GLAPIENTRY -_mesa_ListBase( GLuint base ) +_mesa_ListBase(GLuint base) { GET_CURRENT_CONTEXT(ctx); - FLUSH_VERTICES(ctx, 0); /* must be called before assert */ + FLUSH_VERTICES(ctx, 0); /* must be called before assert */ ASSERT_OUTSIDE_BEGIN_END(ctx); ctx->List.ListBase = base; } @@ -6730,680 +6951,732 @@ _mesa_ListBase( GLuint base ) /* Can no longer assume ctx->Exec->Func is equal to _mesa_Func. */ -static void GLAPIENTRY exec_Finish( void ) +static void GLAPIENTRY +exec_Finish(void) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->Finish(); + CALL_Finish(ctx->Exec, ()); } -static void GLAPIENTRY exec_Flush( void ) +static void GLAPIENTRY +exec_Flush(void) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->Flush( ); + CALL_Flush(ctx->Exec, ()); } -static void GLAPIENTRY exec_GetBooleanv( GLenum pname, GLboolean *params ) +static void GLAPIENTRY +exec_GetBooleanv(GLenum pname, GLboolean *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetBooleanv( pname, params ); + CALL_GetBooleanv(ctx->Exec, (pname, params)); } -static void GLAPIENTRY exec_GetClipPlane( GLenum plane, GLdouble *equation ) +static void GLAPIENTRY +exec_GetClipPlane(GLenum plane, GLdouble * equation) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetClipPlane( plane, equation ); + CALL_GetClipPlane(ctx->Exec, (plane, equation)); } -static void GLAPIENTRY exec_GetDoublev( GLenum pname, GLdouble *params ) +static void GLAPIENTRY +exec_GetDoublev(GLenum pname, GLdouble *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetDoublev( pname, params ); + CALL_GetDoublev(ctx->Exec, (pname, params)); } -static GLenum GLAPIENTRY exec_GetError( void ) +static GLenum GLAPIENTRY +exec_GetError(void) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - return ctx->Exec->GetError( ); + return CALL_GetError(ctx->Exec, ()); } -static void GLAPIENTRY exec_GetFloatv( GLenum pname, GLfloat *params ) +static void GLAPIENTRY +exec_GetFloatv(GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetFloatv( pname, params ); + CALL_GetFloatv(ctx->Exec, (pname, params)); } -static void GLAPIENTRY exec_GetIntegerv( GLenum pname, GLint *params ) +static void GLAPIENTRY +exec_GetIntegerv(GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetIntegerv( pname, params ); + CALL_GetIntegerv(ctx->Exec, (pname, params)); } -static void GLAPIENTRY exec_GetLightfv( GLenum light, GLenum pname, GLfloat *params ) +static void GLAPIENTRY +exec_GetLightfv(GLenum light, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetLightfv( light, pname, params ); + CALL_GetLightfv(ctx->Exec, (light, pname, params)); } -static void GLAPIENTRY exec_GetLightiv( GLenum light, GLenum pname, GLint *params ) +static void GLAPIENTRY +exec_GetLightiv(GLenum light, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetLightiv( light, pname, params ); + CALL_GetLightiv(ctx->Exec, (light, pname, params)); } -static void GLAPIENTRY exec_GetMapdv( GLenum target, GLenum query, GLdouble *v ) +static void GLAPIENTRY +exec_GetMapdv(GLenum target, GLenum query, GLdouble * v) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMapdv( target, query, v ); + CALL_GetMapdv(ctx->Exec, (target, query, v)); } -static void GLAPIENTRY exec_GetMapfv( GLenum target, GLenum query, GLfloat *v ) +static void GLAPIENTRY +exec_GetMapfv(GLenum target, GLenum query, GLfloat * v) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMapfv( target, query, v ); + CALL_GetMapfv(ctx->Exec, (target, query, v)); } -static void GLAPIENTRY exec_GetMapiv( GLenum target, GLenum query, GLint *v ) +static void GLAPIENTRY +exec_GetMapiv(GLenum target, GLenum query, GLint * v) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMapiv( target, query, v ); + CALL_GetMapiv(ctx->Exec, (target, query, v)); } -static void GLAPIENTRY exec_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params ) +static void GLAPIENTRY +exec_GetMaterialfv(GLenum face, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMaterialfv( face, pname, params ); + CALL_GetMaterialfv(ctx->Exec, (face, pname, params)); } -static void GLAPIENTRY exec_GetMaterialiv( GLenum face, GLenum pname, GLint *params ) +static void GLAPIENTRY +exec_GetMaterialiv(GLenum face, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMaterialiv( face, pname, params ); + CALL_GetMaterialiv(ctx->Exec, (face, pname, params)); } -static void GLAPIENTRY exec_GetPixelMapfv( GLenum map, GLfloat *values ) +static void GLAPIENTRY +exec_GetPixelMapfv(GLenum map, GLfloat *values) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetPixelMapfv( map, values ); + CALL_GetPixelMapfv(ctx->Exec, (map, values)); } -static void GLAPIENTRY exec_GetPixelMapuiv( GLenum map, GLuint *values ) +static void GLAPIENTRY +exec_GetPixelMapuiv(GLenum map, GLuint *values) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetPixelMapuiv( map, values ); + CALL_GetPixelMapuiv(ctx->Exec, (map, values)); } -static void GLAPIENTRY exec_GetPixelMapusv( GLenum map, GLushort *values ) +static void GLAPIENTRY +exec_GetPixelMapusv(GLenum map, GLushort *values) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetPixelMapusv( map, values ); + CALL_GetPixelMapusv(ctx->Exec, (map, values)); } -static void GLAPIENTRY exec_GetPolygonStipple( GLubyte *dest ) +static void GLAPIENTRY +exec_GetPolygonStipple(GLubyte * dest) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetPolygonStipple( dest ); + CALL_GetPolygonStipple(ctx->Exec, (dest)); } -static const GLubyte * GLAPIENTRY exec_GetString( GLenum name ) +static const GLubyte *GLAPIENTRY +exec_GetString(GLenum name) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - return ctx->Exec->GetString( name ); + return CALL_GetString(ctx->Exec, (name)); } -static void GLAPIENTRY exec_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) +static void GLAPIENTRY +exec_GetTexEnvfv(GLenum target, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexEnvfv( target, pname, params ); + CALL_GetTexEnvfv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) +static void GLAPIENTRY +exec_GetTexEnviv(GLenum target, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexEnviv( target, pname, params ); + CALL_GetTexEnviv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params ) +static void GLAPIENTRY +exec_GetTexGendv(GLenum coord, GLenum pname, GLdouble *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexGendv( coord, pname, params ); + CALL_GetTexGendv(ctx->Exec, (coord, pname, params)); } -static void GLAPIENTRY exec_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) +static void GLAPIENTRY +exec_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexGenfv( coord, pname, params ); + CALL_GetTexGenfv(ctx->Exec, (coord, pname, params)); } -static void GLAPIENTRY exec_GetTexGeniv( GLenum coord, GLenum pname, GLint *params ) +static void GLAPIENTRY +exec_GetTexGeniv(GLenum coord, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexGeniv( coord, pname, params ); + CALL_GetTexGeniv(ctx->Exec, (coord, pname, params)); } -static void GLAPIENTRY exec_GetTexImage( GLenum target, GLint level, GLenum format, - GLenum type, GLvoid *pixels ) +static void GLAPIENTRY +exec_GetTexImage(GLenum target, GLint level, GLenum format, + GLenum type, GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexImage( target, level, format, type, pixels ); + CALL_GetTexImage(ctx->Exec, (target, level, format, type, pixels)); } -static void GLAPIENTRY exec_GetTexLevelParameterfv( GLenum target, GLint level, - GLenum pname, GLfloat *params ) +static void GLAPIENTRY +exec_GetTexLevelParameterfv(GLenum target, GLint level, + GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexLevelParameterfv( target, level, pname, params ); + CALL_GetTexLevelParameterfv(ctx->Exec, (target, level, pname, params)); } -static void GLAPIENTRY exec_GetTexLevelParameteriv( GLenum target, GLint level, - GLenum pname, GLint *params ) +static void GLAPIENTRY +exec_GetTexLevelParameteriv(GLenum target, GLint level, + GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexLevelParameteriv( target, level, pname, params ); + CALL_GetTexLevelParameteriv(ctx->Exec, (target, level, pname, params)); } -static void GLAPIENTRY exec_GetTexParameterfv( GLenum target, GLenum pname, - GLfloat *params ) +static void GLAPIENTRY +exec_GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexParameterfv( target, pname, params ); + CALL_GetTexParameterfv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetTexParameteriv( GLenum target, GLenum pname, GLint *params ) +static void GLAPIENTRY +exec_GetTexParameteriv(GLenum target, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetTexParameteriv( target, pname, params ); + CALL_GetTexParameteriv(ctx->Exec, (target, pname, params)); } -static GLboolean GLAPIENTRY exec_IsEnabled( GLenum cap ) +static GLboolean GLAPIENTRY +exec_IsEnabled(GLenum cap) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - return ctx->Exec->IsEnabled( cap ); + return CALL_IsEnabled(ctx->Exec, (cap)); } -static void GLAPIENTRY exec_PixelStoref( GLenum pname, GLfloat param ) +static void GLAPIENTRY +exec_PixelStoref(GLenum pname, GLfloat param) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->PixelStoref( pname, param ); + CALL_PixelStoref(ctx->Exec, (pname, param)); } -static void GLAPIENTRY exec_PixelStorei( GLenum pname, GLint param ) +static void GLAPIENTRY +exec_PixelStorei(GLenum pname, GLint param) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->PixelStorei( pname, param ); + CALL_PixelStorei(ctx->Exec, (pname, param)); } -static void GLAPIENTRY exec_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, - GLenum format, GLenum type, GLvoid *pixels ) +static void GLAPIENTRY +exec_ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLvoid * pixels) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->ReadPixels( x, y, width, height, format, type, pixels ); + CALL_ReadPixels(ctx->Exec, (x, y, width, height, format, type, pixels)); } -static GLint GLAPIENTRY exec_RenderMode( GLenum mode ) +static GLint GLAPIENTRY +exec_RenderMode(GLenum mode) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - return ctx->Exec->RenderMode( mode ); + return CALL_RenderMode(ctx->Exec, (mode)); } -static void GLAPIENTRY exec_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ) +static void GLAPIENTRY +exec_FeedbackBuffer(GLsizei size, GLenum type, GLfloat * buffer) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->FeedbackBuffer( size, type, buffer ); + CALL_FeedbackBuffer(ctx->Exec, (size, type, buffer)); } -static void GLAPIENTRY exec_SelectBuffer( GLsizei size, GLuint *buffer ) +static void GLAPIENTRY +exec_SelectBuffer(GLsizei size, GLuint * buffer) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->SelectBuffer( size, buffer ); + CALL_SelectBuffer(ctx->Exec, (size, buffer)); } -static GLboolean GLAPIENTRY exec_AreTexturesResident(GLsizei n, const GLuint *texName, - GLboolean *residences) +static GLboolean GLAPIENTRY +exec_AreTexturesResident(GLsizei n, const GLuint * texName, + GLboolean * residences) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - return ctx->Exec->AreTexturesResident( n, texName, residences); + return CALL_AreTexturesResident(ctx->Exec, (n, texName, residences)); } -static void GLAPIENTRY exec_ColorPointer(GLint size, GLenum type, GLsizei stride, - const GLvoid *ptr) +static void GLAPIENTRY +exec_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->ColorPointer( size, type, stride, ptr); + CALL_ColorPointer(ctx->Exec, (size, type, stride, ptr)); } -static void GLAPIENTRY exec_DeleteTextures( GLsizei n, const GLuint *texName) +static void GLAPIENTRY +exec_DeleteTextures(GLsizei n, const GLuint * texName) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->DeleteTextures( n, texName); + CALL_DeleteTextures(ctx->Exec, (n, texName)); } -static void GLAPIENTRY exec_DisableClientState( GLenum cap ) +static void GLAPIENTRY +exec_DisableClientState(GLenum cap) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->DisableClientState( cap ); + CALL_DisableClientState(ctx->Exec, (cap)); } -static void GLAPIENTRY exec_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr) +static void GLAPIENTRY +exec_EdgeFlagPointer(GLsizei stride, const GLvoid * vptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->EdgeFlagPointer( stride, vptr); + CALL_EdgeFlagPointer(ctx->Exec, (stride, vptr)); } -static void GLAPIENTRY exec_EnableClientState( GLenum cap ) +static void GLAPIENTRY +exec_EnableClientState(GLenum cap) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->EnableClientState( cap ); + CALL_EnableClientState(ctx->Exec, (cap)); } -static void GLAPIENTRY exec_GenTextures( GLsizei n, GLuint *texName ) +static void GLAPIENTRY +exec_GenTextures(GLsizei n, GLuint * texName) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GenTextures( n, texName ); + CALL_GenTextures(ctx->Exec, (n, texName)); } -static void GLAPIENTRY exec_GetPointerv( GLenum pname, GLvoid **params ) +static void GLAPIENTRY +exec_GetPointerv(GLenum pname, GLvoid **params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetPointerv( pname, params ); + CALL_GetPointerv(ctx->Exec, (pname, params)); } -static void GLAPIENTRY exec_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr) +static void GLAPIENTRY +exec_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->IndexPointer( type, stride, ptr); + CALL_IndexPointer(ctx->Exec, (type, stride, ptr)); } -static void GLAPIENTRY exec_InterleavedArrays(GLenum format, GLsizei stride, - const GLvoid *pointer) +static void GLAPIENTRY +exec_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid * pointer) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->InterleavedArrays( format, stride, pointer); + CALL_InterleavedArrays(ctx->Exec, (format, stride, pointer)); } -static GLboolean GLAPIENTRY exec_IsTexture( GLuint texture ) +static GLboolean GLAPIENTRY +exec_IsTexture(GLuint texture) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - return ctx->Exec->IsTexture( texture ); + return CALL_IsTexture(ctx->Exec, (texture)); } -static void GLAPIENTRY exec_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr ) +static void GLAPIENTRY +exec_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->NormalPointer( type, stride, ptr ); + CALL_NormalPointer(ctx->Exec, (type, stride, ptr)); } -static void GLAPIENTRY exec_PopClientAttrib(void) +static void GLAPIENTRY +exec_PopClientAttrib(void) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->PopClientAttrib(); + CALL_PopClientAttrib(ctx->Exec, ()); } -static void GLAPIENTRY exec_PushClientAttrib(GLbitfield mask) +static void GLAPIENTRY +exec_PushClientAttrib(GLbitfield mask) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->PushClientAttrib( mask); + CALL_PushClientAttrib(ctx->Exec, (mask)); } -static void GLAPIENTRY exec_TexCoordPointer(GLint size, GLenum type, GLsizei stride, - const GLvoid *ptr) +static void GLAPIENTRY +exec_TexCoordPointer(GLint size, GLenum type, GLsizei stride, + const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->TexCoordPointer( size, type, stride, ptr); + CALL_TexCoordPointer(ctx->Exec, (size, type, stride, ptr)); } -static void GLAPIENTRY exec_GetCompressedTexImageARB(GLenum target, GLint level, - GLvoid *img) +static void GLAPIENTRY +exec_GetCompressedTexImageARB(GLenum target, GLint level, GLvoid * img) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetCompressedTexImageARB( target, level, img); + CALL_GetCompressedTexImageARB(ctx->Exec, (target, level, img)); } -static void GLAPIENTRY exec_VertexPointer(GLint size, GLenum type, GLsizei stride, - const GLvoid *ptr) +static void GLAPIENTRY +exec_VertexPointer(GLint size, GLenum type, GLsizei stride, + const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->VertexPointer( size, type, stride, ptr); + CALL_VertexPointer(ctx->Exec, (size, type, stride, ptr)); } -static void GLAPIENTRY exec_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, - GLint x, GLint y, GLsizei width) +static void GLAPIENTRY +exec_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, + GLint x, GLint y, GLsizei width) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->CopyConvolutionFilter1D( target, internalFormat, x, y, width); + CALL_CopyConvolutionFilter1D(ctx->Exec, + (target, internalFormat, x, y, width)); } -static void GLAPIENTRY exec_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, - GLint x, GLint y, GLsizei width, - GLsizei height) +static void GLAPIENTRY +exec_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, + GLint x, GLint y, GLsizei width, GLsizei height) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->CopyConvolutionFilter2D( target, internalFormat, x, y, width, - height); + CALL_CopyConvolutionFilter2D(ctx->Exec, + (target, internalFormat, x, y, width, + height)); } -static void GLAPIENTRY exec_GetColorTable( GLenum target, GLenum format, - GLenum type, GLvoid *data ) +static void GLAPIENTRY +exec_GetColorTable(GLenum target, GLenum format, GLenum type, GLvoid * data) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetColorTable( target, format, type, data ); + CALL_GetColorTable(ctx->Exec, (target, format, type, data)); } -static void GLAPIENTRY exec_GetColorTableParameterfv( GLenum target, GLenum pname, - GLfloat *params ) +static void GLAPIENTRY +exec_GetColorTableParameterfv(GLenum target, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetColorTableParameterfv( target, pname, params ); + CALL_GetColorTableParameterfv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetColorTableParameteriv( GLenum target, GLenum pname, - GLint *params ) +static void GLAPIENTRY +exec_GetColorTableParameteriv(GLenum target, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetColorTableParameteriv( target, pname, params ); + CALL_GetColorTableParameteriv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, - GLvoid *image) +static void GLAPIENTRY +exec_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, + GLvoid * image) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetConvolutionFilter( target, format, type, image); + CALL_GetConvolutionFilter(ctx->Exec, (target, format, type, image)); } -static void GLAPIENTRY exec_GetConvolutionParameterfv(GLenum target, GLenum pname, - GLfloat *params) +static void GLAPIENTRY +exec_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetConvolutionParameterfv( target, pname, params); + CALL_GetConvolutionParameterfv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetConvolutionParameteriv(GLenum target, GLenum pname, - GLint *params) +static void GLAPIENTRY +exec_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetConvolutionParameteriv( target, pname, params); + CALL_GetConvolutionParameteriv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetHistogram(GLenum target, GLboolean reset, GLenum format, - GLenum type, GLvoid *values) +static void GLAPIENTRY +exec_GetHistogram(GLenum target, GLboolean reset, GLenum format, + GLenum type, GLvoid *values) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetHistogram( target, reset, format, type, values); + CALL_GetHistogram(ctx->Exec, (target, reset, format, type, values)); } -static void GLAPIENTRY exec_GetHistogramParameterfv(GLenum target, GLenum pname, - GLfloat *params) +static void GLAPIENTRY +exec_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetHistogramParameterfv( target, pname, params); + CALL_GetHistogramParameterfv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetHistogramParameteriv(GLenum target, GLenum pname, - GLint *params) +static void GLAPIENTRY +exec_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetHistogramParameteriv( target, pname, params); + CALL_GetHistogramParameteriv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetMinmax(GLenum target, GLboolean reset, GLenum format, - GLenum type, GLvoid *values) +static void GLAPIENTRY +exec_GetMinmax(GLenum target, GLboolean reset, GLenum format, + GLenum type, GLvoid *values) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMinmax( target, reset, format, type, values); + CALL_GetMinmax(ctx->Exec, (target, reset, format, type, values)); } -static void GLAPIENTRY exec_GetMinmaxParameterfv(GLenum target, GLenum pname, - GLfloat *params) +static void GLAPIENTRY +exec_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMinmaxParameterfv( target, pname, params); + CALL_GetMinmaxParameterfv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetMinmaxParameteriv(GLenum target, GLenum pname, - GLint *params) +static void GLAPIENTRY +exec_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetMinmaxParameteriv( target, pname, params); + CALL_GetMinmaxParameteriv(ctx->Exec, (target, pname, params)); } -static void GLAPIENTRY exec_GetSeparableFilter(GLenum target, GLenum format, GLenum type, - GLvoid *row, GLvoid *column, GLvoid *span) +static void GLAPIENTRY +exec_GetSeparableFilter(GLenum target, GLenum format, GLenum type, + GLvoid *row, GLvoid *column, GLvoid *span) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetSeparableFilter( target, format, type, row, column, span); + CALL_GetSeparableFilter(ctx->Exec, + (target, format, type, row, column, span)); } -static void GLAPIENTRY exec_SeparableFilter2D(GLenum target, GLenum internalFormat, - GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *row, - const GLvoid *column) +static void GLAPIENTRY +exec_SeparableFilter2D(GLenum target, GLenum internalFormat, + GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *row, const GLvoid *column) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->SeparableFilter2D( target, internalFormat, width, height, format, - type, row, column); + CALL_SeparableFilter2D(ctx->Exec, + (target, internalFormat, width, height, format, + type, row, column)); } -static void GLAPIENTRY exec_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value) +static void GLAPIENTRY +exec_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, + GLsizei count, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetPixelTexGenParameterivSGIS( target, value); + CALL_ColorPointerEXT(ctx->Exec, (size, type, stride, count, ptr)); } -static void GLAPIENTRY exec_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value) +static void GLAPIENTRY +exec_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->GetPixelTexGenParameterfvSGIS( target, value); + CALL_EdgeFlagPointerEXT(ctx->Exec, (stride, count, ptr)); } -static void GLAPIENTRY exec_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, - GLsizei count, const GLvoid *ptr) +static void GLAPIENTRY +exec_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, + const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->ColorPointerEXT( size, type, stride, count, ptr); + CALL_IndexPointerEXT(ctx->Exec, (type, stride, count, ptr)); } -static void GLAPIENTRY exec_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, - const GLboolean *ptr) -{ - GET_CURRENT_CONTEXT(ctx); - FLUSH_VERTICES(ctx, 0); - ctx->Exec->EdgeFlagPointerEXT( stride, count, ptr); -} - -static void GLAPIENTRY exec_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, +static void GLAPIENTRY +exec_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->IndexPointerEXT( type, stride, count, ptr); + CALL_NormalPointerEXT(ctx->Exec, (type, stride, count, ptr)); } -static void GLAPIENTRY exec_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, - const GLvoid *ptr) +static void GLAPIENTRY +exec_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, + GLsizei count, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->NormalPointerEXT( type, stride, count, ptr); + CALL_TexCoordPointerEXT(ctx->Exec, (size, type, stride, count, ptr)); } -static void GLAPIENTRY exec_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, - GLsizei count, const GLvoid *ptr) +static void GLAPIENTRY +exec_VertexPointerEXT(GLint size, GLenum type, GLsizei stride, + GLsizei count, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->TexCoordPointerEXT( size, type, stride, count, ptr); + CALL_VertexPointerEXT(ctx->Exec, (size, type, stride, count, ptr)); } -static void GLAPIENTRY exec_VertexPointerEXT(GLint size, GLenum type, GLsizei stride, - GLsizei count, const GLvoid *ptr) +static void GLAPIENTRY +exec_LockArraysEXT(GLint first, GLsizei count) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->VertexPointerEXT( size, type, stride, count, ptr); + CALL_LockArraysEXT(ctx->Exec, (first, count)); } -static void GLAPIENTRY exec_LockArraysEXT(GLint first, GLsizei count) +static void GLAPIENTRY +exec_UnlockArraysEXT(void) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->LockArraysEXT( first, count); + CALL_UnlockArraysEXT(ctx->Exec, ()); } -static void GLAPIENTRY exec_UnlockArraysEXT( void ) +static void GLAPIENTRY +exec_ClientActiveTextureARB(GLenum target) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->UnlockArraysEXT( ); + CALL_ClientActiveTextureARB(ctx->Exec, (target)); } -static void GLAPIENTRY exec_ResizeBuffersMESA( void ) +static void GLAPIENTRY +exec_SecondaryColorPointerEXT(GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->ResizeBuffersMESA( ); + CALL_SecondaryColorPointerEXT(ctx->Exec, (size, type, stride, ptr)); } - -static void GLAPIENTRY exec_ClientActiveTextureARB( GLenum target ) +static void GLAPIENTRY +exec_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->ClientActiveTextureARB(target); -} - -static void GLAPIENTRY exec_SecondaryColorPointerEXT(GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr) -{ - GET_CURRENT_CONTEXT(ctx); - FLUSH_VERTICES(ctx, 0); - ctx->Exec->SecondaryColorPointerEXT( size, type, stride, ptr); -} - -static void GLAPIENTRY exec_FogCoordPointerEXT(GLenum type, GLsizei stride, - const GLvoid *ptr) -{ - GET_CURRENT_CONTEXT(ctx); - FLUSH_VERTICES(ctx, 0); - ctx->Exec->FogCoordPointerEXT( type, stride, ptr); + CALL_FogCoordPointerEXT(ctx->Exec, (type, stride, ptr)); } /* GL_EXT_multi_draw_arrays */ -static void GLAPIENTRY exec_MultiDrawArraysEXT(GLenum mode, GLint *first, - GLsizei *count, GLsizei primcount) +static void GLAPIENTRY +exec_MultiDrawArraysEXT(GLenum mode, GLint * first, + GLsizei * count, GLsizei primcount) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->MultiDrawArraysEXT( mode, first, count, primcount ); + CALL_MultiDrawArraysEXT(ctx->Exec, (mode, first, count, primcount)); } /* GL_EXT_multi_draw_arrays */ -static void GLAPIENTRY exec_MultiDrawElementsEXT(GLenum mode, const GLsizei *count, - GLenum type, const GLvoid **indices, - GLsizei primcount) +static void GLAPIENTRY +exec_MultiDrawElementsEXT(GLenum mode, const GLsizei * count, + GLenum type, const GLvoid ** indices, + GLsizei primcount) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->MultiDrawElementsEXT(mode, count, type, indices, primcount); + CALL_MultiDrawElementsEXT(ctx->Exec, + (mode, count, type, indices, primcount)); } /* GL_IBM_multimode_draw_arrays */ -static void GLAPIENTRY exec_MultiModeDrawArraysIBM(const GLenum *mode, const GLint *first, - const GLsizei *count, GLsizei primcount, - GLint modestride) +static void GLAPIENTRY +exec_MultiModeDrawArraysIBM(const GLenum * mode, const GLint * first, + const GLsizei * count, GLsizei primcount, + GLint modestride) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->MultiModeDrawArraysIBM(mode, first, count, primcount, modestride); + CALL_MultiModeDrawArraysIBM(ctx->Exec, + (mode, first, count, primcount, modestride)); } /* GL_IBM_multimode_draw_arrays */ -static void GLAPIENTRY exec_MultiModeDrawElementsIBM(const GLenum *mode, - const GLsizei *count, - GLenum type, - const GLvoid * const *indices, - GLsizei primcount, GLint modestride) +static void GLAPIENTRY +exec_MultiModeDrawElementsIBM(const GLenum * mode, + const GLsizei * count, + GLenum type, + const GLvoid * const *indices, + GLsizei primcount, GLint modestride) { GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, 0); - ctx->Exec->MultiModeDrawElementsIBM(mode, count, type, indices, primcount, - modestride); + CALL_MultiModeDrawElementsIBM(ctx->Exec, + (mode, count, type, indices, primcount, + modestride)); } - /** * Setup the given dispatch table to point to Mesa's display list * building functions. @@ -7413,372 +7686,350 @@ static void GLAPIENTRY exec_MultiModeDrawElementsIBM(const GLenum *mode, * struct. */ void -_mesa_init_dlist_table( struct _glapi_table *table ) +_mesa_init_dlist_table(struct _glapi_table *table) { - _mesa_loopback_init_api_table( table ); + _mesa_loopback_init_api_table(table); /* GL 1.0 */ - table->Accum = save_Accum; - table->AlphaFunc = save_AlphaFunc; - table->Bitmap = save_Bitmap; - table->BlendFunc = _mesa_BlendFunc; /* loops-back to BlendFuncSeparate */ - table->CallList = _mesa_save_CallList; - table->CallLists = _mesa_save_CallLists; - table->Clear = save_Clear; - table->ClearAccum = save_ClearAccum; - table->ClearColor = save_ClearColor; - table->ClearDepth = save_ClearDepth; - table->ClearIndex = save_ClearIndex; - table->ClearStencil = save_ClearStencil; - table->ClipPlane = save_ClipPlane; - table->ColorMask = save_ColorMask; - table->ColorMaterial = save_ColorMaterial; - table->CopyPixels = save_CopyPixels; - table->CullFace = save_CullFace; - table->DeleteLists = _mesa_DeleteLists; - table->DepthFunc = save_DepthFunc; - table->DepthMask = save_DepthMask; - table->DepthRange = save_DepthRange; - table->Disable = save_Disable; - table->DrawBuffer = save_DrawBuffer; - table->DrawPixels = save_DrawPixels; - table->Enable = save_Enable; - table->EndList = _mesa_EndList; - table->EvalMesh1 = _mesa_save_EvalMesh1; - table->EvalMesh2 = _mesa_save_EvalMesh2; - table->Finish = exec_Finish; - table->Flush = exec_Flush; - table->Fogf = save_Fogf; - table->Fogfv = save_Fogfv; - table->Fogi = save_Fogi; - table->Fogiv = save_Fogiv; - table->FrontFace = save_FrontFace; - table->Frustum = save_Frustum; - table->GenLists = _mesa_GenLists; - table->GetBooleanv = exec_GetBooleanv; - table->GetClipPlane = exec_GetClipPlane; - table->GetDoublev = exec_GetDoublev; - table->GetError = exec_GetError; - table->GetFloatv = exec_GetFloatv; - table->GetIntegerv = exec_GetIntegerv; - table->GetLightfv = exec_GetLightfv; - table->GetLightiv = exec_GetLightiv; - table->GetMapdv = exec_GetMapdv; - table->GetMapfv = exec_GetMapfv; - table->GetMapiv = exec_GetMapiv; - table->GetMaterialfv = exec_GetMaterialfv; - table->GetMaterialiv = exec_GetMaterialiv; - table->GetPixelMapfv = exec_GetPixelMapfv; - table->GetPixelMapuiv = exec_GetPixelMapuiv; - table->GetPixelMapusv = exec_GetPixelMapusv; - table->GetPolygonStipple = exec_GetPolygonStipple; - table->GetString = exec_GetString; - table->GetTexEnvfv = exec_GetTexEnvfv; - table->GetTexEnviv = exec_GetTexEnviv; - table->GetTexGendv = exec_GetTexGendv; - table->GetTexGenfv = exec_GetTexGenfv; - table->GetTexGeniv = exec_GetTexGeniv; - table->GetTexImage = exec_GetTexImage; - table->GetTexLevelParameterfv = exec_GetTexLevelParameterfv; - table->GetTexLevelParameteriv = exec_GetTexLevelParameteriv; - table->GetTexParameterfv = exec_GetTexParameterfv; - table->GetTexParameteriv = exec_GetTexParameteriv; - table->Hint = save_Hint; - table->IndexMask = save_IndexMask; - table->InitNames = save_InitNames; - table->IsEnabled = exec_IsEnabled; - table->IsList = _mesa_IsList; - table->LightModelf = save_LightModelf; - table->LightModelfv = save_LightModelfv; - table->LightModeli = save_LightModeli; - table->LightModeliv = save_LightModeliv; - table->Lightf = save_Lightf; - table->Lightfv = save_Lightfv; - table->Lighti = save_Lighti; - table->Lightiv = save_Lightiv; - table->LineStipple = save_LineStipple; - table->LineWidth = save_LineWidth; - table->ListBase = save_ListBase; - table->LoadIdentity = save_LoadIdentity; - table->LoadMatrixd = save_LoadMatrixd; - table->LoadMatrixf = save_LoadMatrixf; - table->LoadName = save_LoadName; - table->LogicOp = save_LogicOp; - table->Map1d = save_Map1d; - table->Map1f = save_Map1f; - table->Map2d = save_Map2d; - table->Map2f = save_Map2f; - table->MapGrid1d = save_MapGrid1d; - table->MapGrid1f = save_MapGrid1f; - table->MapGrid2d = save_MapGrid2d; - table->MapGrid2f = save_MapGrid2f; - table->MatrixMode = save_MatrixMode; - table->MultMatrixd = save_MultMatrixd; - table->MultMatrixf = save_MultMatrixf; - table->NewList = save_NewList; - table->Ortho = save_Ortho; - table->PassThrough = save_PassThrough; - table->PixelMapfv = save_PixelMapfv; - table->PixelMapuiv = save_PixelMapuiv; - table->PixelMapusv = save_PixelMapusv; - table->PixelStoref = exec_PixelStoref; - table->PixelStorei = exec_PixelStorei; - table->PixelTransferf = save_PixelTransferf; - table->PixelTransferi = save_PixelTransferi; - table->PixelZoom = save_PixelZoom; - table->PointSize = save_PointSize; - table->PolygonMode = save_PolygonMode; - table->PolygonOffset = save_PolygonOffset; - table->PolygonStipple = save_PolygonStipple; - table->PopAttrib = save_PopAttrib; - table->PopMatrix = save_PopMatrix; - table->PopName = save_PopName; - table->PushAttrib = save_PushAttrib; - table->PushMatrix = save_PushMatrix; - table->PushName = save_PushName; - table->RasterPos2d = save_RasterPos2d; - table->RasterPos2dv = save_RasterPos2dv; - table->RasterPos2f = save_RasterPos2f; - table->RasterPos2fv = save_RasterPos2fv; - table->RasterPos2i = save_RasterPos2i; - table->RasterPos2iv = save_RasterPos2iv; - table->RasterPos2s = save_RasterPos2s; - table->RasterPos2sv = save_RasterPos2sv; - table->RasterPos3d = save_RasterPos3d; - table->RasterPos3dv = save_RasterPos3dv; - table->RasterPos3f = save_RasterPos3f; - table->RasterPos3fv = save_RasterPos3fv; - table->RasterPos3i = save_RasterPos3i; - table->RasterPos3iv = save_RasterPos3iv; - table->RasterPos3s = save_RasterPos3s; - table->RasterPos3sv = save_RasterPos3sv; - table->RasterPos4d = save_RasterPos4d; - table->RasterPos4dv = save_RasterPos4dv; - table->RasterPos4f = save_RasterPos4f; - table->RasterPos4fv = save_RasterPos4fv; - table->RasterPos4i = save_RasterPos4i; - table->RasterPos4iv = save_RasterPos4iv; - table->RasterPos4s = save_RasterPos4s; - table->RasterPos4sv = save_RasterPos4sv; - table->ReadBuffer = save_ReadBuffer; - table->ReadPixels = exec_ReadPixels; - table->RenderMode = exec_RenderMode; - table->Rotated = save_Rotated; - table->Rotatef = save_Rotatef; - table->Scaled = save_Scaled; - table->Scalef = save_Scalef; - table->Scissor = save_Scissor; - table->FeedbackBuffer = exec_FeedbackBuffer; - table->SelectBuffer = exec_SelectBuffer; - table->ShadeModel = save_ShadeModel; - table->StencilFunc = save_StencilFunc; - table->StencilMask = save_StencilMask; - table->StencilOp = save_StencilOp; - table->TexEnvf = save_TexEnvf; - table->TexEnvfv = save_TexEnvfv; - table->TexEnvi = save_TexEnvi; - table->TexEnviv = save_TexEnviv; - table->TexGend = save_TexGend; - table->TexGendv = save_TexGendv; - table->TexGenf = save_TexGenf; - table->TexGenfv = save_TexGenfv; - table->TexGeni = save_TexGeni; - table->TexGeniv = save_TexGeniv; - table->TexImage1D = save_TexImage1D; - table->TexImage2D = save_TexImage2D; - table->TexParameterf = save_TexParameterf; - table->TexParameterfv = save_TexParameterfv; - table->TexParameteri = save_TexParameteri; - table->TexParameteriv = save_TexParameteriv; - table->Translated = save_Translated; - table->Translatef = save_Translatef; - table->Viewport = save_Viewport; + SET_Accum(table, save_Accum); + SET_AlphaFunc(table, save_AlphaFunc); + SET_Bitmap(table, save_Bitmap); + SET_BlendFunc(table, _mesa_BlendFunc); /* loops-back to BlendFuncSeparate */ + SET_CallList(table, _mesa_save_CallList); + SET_CallLists(table, _mesa_save_CallLists); + SET_Clear(table, save_Clear); + SET_ClearAccum(table, save_ClearAccum); + SET_ClearColor(table, save_ClearColor); + SET_ClearDepth(table, save_ClearDepth); + SET_ClearIndex(table, save_ClearIndex); + SET_ClearStencil(table, save_ClearStencil); + SET_ClipPlane(table, save_ClipPlane); + SET_ColorMask(table, save_ColorMask); + SET_ColorMaterial(table, save_ColorMaterial); + SET_CopyPixels(table, save_CopyPixels); + SET_CullFace(table, save_CullFace); + SET_DeleteLists(table, _mesa_DeleteLists); + SET_DepthFunc(table, save_DepthFunc); + SET_DepthMask(table, save_DepthMask); + SET_DepthRange(table, save_DepthRange); + SET_Disable(table, save_Disable); + SET_DrawBuffer(table, save_DrawBuffer); + SET_DrawPixels(table, save_DrawPixels); + SET_Enable(table, save_Enable); + SET_EndList(table, _mesa_EndList); + SET_EvalMesh1(table, _mesa_save_EvalMesh1); + SET_EvalMesh2(table, _mesa_save_EvalMesh2); + SET_Finish(table, exec_Finish); + SET_Flush(table, exec_Flush); + SET_Fogf(table, save_Fogf); + SET_Fogfv(table, save_Fogfv); + SET_Fogi(table, save_Fogi); + SET_Fogiv(table, save_Fogiv); + SET_FrontFace(table, save_FrontFace); + SET_Frustum(table, save_Frustum); + SET_GenLists(table, _mesa_GenLists); + SET_GetBooleanv(table, exec_GetBooleanv); + SET_GetClipPlane(table, exec_GetClipPlane); + SET_GetDoublev(table, exec_GetDoublev); + SET_GetError(table, exec_GetError); + SET_GetFloatv(table, exec_GetFloatv); + SET_GetIntegerv(table, exec_GetIntegerv); + SET_GetLightfv(table, exec_GetLightfv); + SET_GetLightiv(table, exec_GetLightiv); + SET_GetMapdv(table, exec_GetMapdv); + SET_GetMapfv(table, exec_GetMapfv); + SET_GetMapiv(table, exec_GetMapiv); + SET_GetMaterialfv(table, exec_GetMaterialfv); + SET_GetMaterialiv(table, exec_GetMaterialiv); + SET_GetPixelMapfv(table, exec_GetPixelMapfv); + SET_GetPixelMapuiv(table, exec_GetPixelMapuiv); + SET_GetPixelMapusv(table, exec_GetPixelMapusv); + SET_GetPolygonStipple(table, exec_GetPolygonStipple); + SET_GetString(table, exec_GetString); + SET_GetTexEnvfv(table, exec_GetTexEnvfv); + SET_GetTexEnviv(table, exec_GetTexEnviv); + SET_GetTexGendv(table, exec_GetTexGendv); + SET_GetTexGenfv(table, exec_GetTexGenfv); + SET_GetTexGeniv(table, exec_GetTexGeniv); + SET_GetTexImage(table, exec_GetTexImage); + SET_GetTexLevelParameterfv(table, exec_GetTexLevelParameterfv); + SET_GetTexLevelParameteriv(table, exec_GetTexLevelParameteriv); + SET_GetTexParameterfv(table, exec_GetTexParameterfv); + SET_GetTexParameteriv(table, exec_GetTexParameteriv); + SET_Hint(table, save_Hint); + SET_IndexMask(table, save_IndexMask); + SET_InitNames(table, save_InitNames); + SET_IsEnabled(table, exec_IsEnabled); + SET_IsList(table, _mesa_IsList); + SET_LightModelf(table, save_LightModelf); + SET_LightModelfv(table, save_LightModelfv); + SET_LightModeli(table, save_LightModeli); + SET_LightModeliv(table, save_LightModeliv); + SET_Lightf(table, save_Lightf); + SET_Lightfv(table, save_Lightfv); + SET_Lighti(table, save_Lighti); + SET_Lightiv(table, save_Lightiv); + SET_LineStipple(table, save_LineStipple); + SET_LineWidth(table, save_LineWidth); + SET_ListBase(table, save_ListBase); + SET_LoadIdentity(table, save_LoadIdentity); + SET_LoadMatrixd(table, save_LoadMatrixd); + SET_LoadMatrixf(table, save_LoadMatrixf); + SET_LoadName(table, save_LoadName); + SET_LogicOp(table, save_LogicOp); + SET_Map1d(table, save_Map1d); + SET_Map1f(table, save_Map1f); + SET_Map2d(table, save_Map2d); + SET_Map2f(table, save_Map2f); + SET_MapGrid1d(table, save_MapGrid1d); + SET_MapGrid1f(table, save_MapGrid1f); + SET_MapGrid2d(table, save_MapGrid2d); + SET_MapGrid2f(table, save_MapGrid2f); + SET_MatrixMode(table, save_MatrixMode); + SET_MultMatrixd(table, save_MultMatrixd); + SET_MultMatrixf(table, save_MultMatrixf); + SET_NewList(table, save_NewList); + SET_Ortho(table, save_Ortho); + SET_PassThrough(table, save_PassThrough); + SET_PixelMapfv(table, save_PixelMapfv); + SET_PixelMapuiv(table, save_PixelMapuiv); + SET_PixelMapusv(table, save_PixelMapusv); + SET_PixelStoref(table, exec_PixelStoref); + SET_PixelStorei(table, exec_PixelStorei); + SET_PixelTransferf(table, save_PixelTransferf); + SET_PixelTransferi(table, save_PixelTransferi); + SET_PixelZoom(table, save_PixelZoom); + SET_PointSize(table, save_PointSize); + SET_PolygonMode(table, save_PolygonMode); + SET_PolygonOffset(table, save_PolygonOffset); + SET_PolygonStipple(table, save_PolygonStipple); + SET_PopAttrib(table, save_PopAttrib); + SET_PopMatrix(table, save_PopMatrix); + SET_PopName(table, save_PopName); + SET_PushAttrib(table, save_PushAttrib); + SET_PushMatrix(table, save_PushMatrix); + SET_PushName(table, save_PushName); + SET_RasterPos2d(table, save_RasterPos2d); + SET_RasterPos2dv(table, save_RasterPos2dv); + SET_RasterPos2f(table, save_RasterPos2f); + SET_RasterPos2fv(table, save_RasterPos2fv); + SET_RasterPos2i(table, save_RasterPos2i); + SET_RasterPos2iv(table, save_RasterPos2iv); + SET_RasterPos2s(table, save_RasterPos2s); + SET_RasterPos2sv(table, save_RasterPos2sv); + SET_RasterPos3d(table, save_RasterPos3d); + SET_RasterPos3dv(table, save_RasterPos3dv); + SET_RasterPos3f(table, save_RasterPos3f); + SET_RasterPos3fv(table, save_RasterPos3fv); + SET_RasterPos3i(table, save_RasterPos3i); + SET_RasterPos3iv(table, save_RasterPos3iv); + SET_RasterPos3s(table, save_RasterPos3s); + SET_RasterPos3sv(table, save_RasterPos3sv); + SET_RasterPos4d(table, save_RasterPos4d); + SET_RasterPos4dv(table, save_RasterPos4dv); + SET_RasterPos4f(table, save_RasterPos4f); + SET_RasterPos4fv(table, save_RasterPos4fv); + SET_RasterPos4i(table, save_RasterPos4i); + SET_RasterPos4iv(table, save_RasterPos4iv); + SET_RasterPos4s(table, save_RasterPos4s); + SET_RasterPos4sv(table, save_RasterPos4sv); + SET_ReadBuffer(table, save_ReadBuffer); + SET_ReadPixels(table, exec_ReadPixels); + SET_RenderMode(table, exec_RenderMode); + SET_Rotated(table, save_Rotated); + SET_Rotatef(table, save_Rotatef); + SET_Scaled(table, save_Scaled); + SET_Scalef(table, save_Scalef); + SET_Scissor(table, save_Scissor); + SET_FeedbackBuffer(table, exec_FeedbackBuffer); + SET_SelectBuffer(table, exec_SelectBuffer); + SET_ShadeModel(table, save_ShadeModel); + SET_StencilFunc(table, save_StencilFunc); + SET_StencilMask(table, save_StencilMask); + SET_StencilOp(table, save_StencilOp); + SET_TexEnvf(table, save_TexEnvf); + SET_TexEnvfv(table, save_TexEnvfv); + SET_TexEnvi(table, save_TexEnvi); + SET_TexEnviv(table, save_TexEnviv); + SET_TexGend(table, save_TexGend); + SET_TexGendv(table, save_TexGendv); + SET_TexGenf(table, save_TexGenf); + SET_TexGenfv(table, save_TexGenfv); + SET_TexGeni(table, save_TexGeni); + SET_TexGeniv(table, save_TexGeniv); + SET_TexImage1D(table, save_TexImage1D); + SET_TexImage2D(table, save_TexImage2D); + SET_TexParameterf(table, save_TexParameterf); + SET_TexParameterfv(table, save_TexParameterfv); + SET_TexParameteri(table, save_TexParameteri); + SET_TexParameteriv(table, save_TexParameteriv); + SET_Translated(table, save_Translated); + SET_Translatef(table, save_Translatef); + SET_Viewport(table, save_Viewport); /* GL 1.1 */ - table->AreTexturesResident = exec_AreTexturesResident; - table->AreTexturesResidentEXT = exec_AreTexturesResident; - table->BindTexture = save_BindTexture; - table->ColorPointer = exec_ColorPointer; - table->CopyTexImage1D = save_CopyTexImage1D; - table->CopyTexImage2D = save_CopyTexImage2D; - table->CopyTexSubImage1D = save_CopyTexSubImage1D; - table->CopyTexSubImage2D = save_CopyTexSubImage2D; - table->DeleteTextures = exec_DeleteTextures; - table->DisableClientState = exec_DisableClientState; - table->EdgeFlagPointer = exec_EdgeFlagPointer; - table->EnableClientState = exec_EnableClientState; - table->GenTextures = exec_GenTextures; - table->GenTexturesEXT = exec_GenTextures; - table->GetPointerv = exec_GetPointerv; - table->IndexPointer = exec_IndexPointer; - table->InterleavedArrays = exec_InterleavedArrays; - table->IsTexture = exec_IsTexture; - table->IsTextureEXT = exec_IsTexture; - table->NormalPointer = exec_NormalPointer; - table->PopClientAttrib = exec_PopClientAttrib; - table->PrioritizeTextures = save_PrioritizeTextures; - table->PushClientAttrib = exec_PushClientAttrib; - table->TexCoordPointer = exec_TexCoordPointer; - table->TexSubImage1D = save_TexSubImage1D; - table->TexSubImage2D = save_TexSubImage2D; - table->VertexPointer = exec_VertexPointer; + SET_AreTexturesResident(table, exec_AreTexturesResident); + SET_BindTexture(table, save_BindTexture); + SET_ColorPointer(table, exec_ColorPointer); + SET_CopyTexImage1D(table, save_CopyTexImage1D); + SET_CopyTexImage2D(table, save_CopyTexImage2D); + SET_CopyTexSubImage1D(table, save_CopyTexSubImage1D); + SET_CopyTexSubImage2D(table, save_CopyTexSubImage2D); + SET_DeleteTextures(table, exec_DeleteTextures); + SET_DisableClientState(table, exec_DisableClientState); + SET_EdgeFlagPointer(table, exec_EdgeFlagPointer); + SET_EnableClientState(table, exec_EnableClientState); + SET_GenTextures(table, exec_GenTextures); + SET_GetPointerv(table, exec_GetPointerv); + SET_IndexPointer(table, exec_IndexPointer); + SET_InterleavedArrays(table, exec_InterleavedArrays); + SET_IsTexture(table, exec_IsTexture); + SET_NormalPointer(table, exec_NormalPointer); + SET_PopClientAttrib(table, exec_PopClientAttrib); + SET_PrioritizeTextures(table, save_PrioritizeTextures); + SET_PushClientAttrib(table, exec_PushClientAttrib); + SET_TexCoordPointer(table, exec_TexCoordPointer); + SET_TexSubImage1D(table, save_TexSubImage1D); + SET_TexSubImage2D(table, save_TexSubImage2D); + SET_VertexPointer(table, exec_VertexPointer); /* GL 1.2 */ - table->CopyTexSubImage3D = save_CopyTexSubImage3D; - table->TexImage3D = save_TexImage3D; - table->TexSubImage3D = save_TexSubImage3D; + SET_CopyTexSubImage3D(table, save_CopyTexSubImage3D); + SET_TexImage3D(table, save_TexImage3D); + SET_TexSubImage3D(table, save_TexSubImage3D); + + /* GL 2.0 */ + SET_StencilFuncSeparate(table, save_StencilFuncSeparate); + SET_StencilMaskSeparate(table, save_StencilMaskSeparate); + SET_StencilOpSeparate(table, save_StencilOpSeparate); /* GL_ARB_imaging */ /* Not all are supported */ - table->BlendColor = save_BlendColor; - table->BlendEquation = save_BlendEquation; - table->ColorSubTable = save_ColorSubTable; - table->ColorTable = save_ColorTable; - table->ColorTableParameterfv = save_ColorTableParameterfv; - table->ColorTableParameteriv = save_ColorTableParameteriv; - table->ConvolutionFilter1D = save_ConvolutionFilter1D; - table->ConvolutionFilter2D = save_ConvolutionFilter2D; - table->ConvolutionParameterf = save_ConvolutionParameterf; - table->ConvolutionParameterfv = save_ConvolutionParameterfv; - table->ConvolutionParameteri = save_ConvolutionParameteri; - table->ConvolutionParameteriv = save_ConvolutionParameteriv; - table->CopyColorSubTable = save_CopyColorSubTable; - table->CopyColorTable = save_CopyColorTable; - table->CopyConvolutionFilter1D = exec_CopyConvolutionFilter1D; - table->CopyConvolutionFilter2D = exec_CopyConvolutionFilter2D; - table->GetColorTable = exec_GetColorTable; - table->GetColorTableEXT = exec_GetColorTable; - table->GetColorTableParameterfv = exec_GetColorTableParameterfv; - table->GetColorTableParameterfvEXT = exec_GetColorTableParameterfv; - table->GetColorTableParameteriv = exec_GetColorTableParameteriv; - table->GetColorTableParameterivEXT = exec_GetColorTableParameteriv; - table->GetConvolutionFilter = exec_GetConvolutionFilter; - table->GetConvolutionFilterEXT = exec_GetConvolutionFilter; - table->GetConvolutionParameterfv = exec_GetConvolutionParameterfv; - table->GetConvolutionParameterfvEXT = exec_GetConvolutionParameterfv; - table->GetConvolutionParameteriv = exec_GetConvolutionParameteriv; - table->GetConvolutionParameterivEXT = exec_GetConvolutionParameteriv; - table->GetHistogram = exec_GetHistogram; - table->GetHistogramEXT = exec_GetHistogram; - table->GetHistogramParameterfv = exec_GetHistogramParameterfv; - table->GetHistogramParameterfvEXT = exec_GetHistogramParameterfv; - table->GetHistogramParameteriv = exec_GetHistogramParameteriv; - table->GetHistogramParameterivEXT = exec_GetHistogramParameteriv; - table->GetMinmax = exec_GetMinmax; - table->GetMinmaxEXT = exec_GetMinmax; - table->GetMinmaxParameterfv = exec_GetMinmaxParameterfv; - table->GetMinmaxParameterfvEXT = exec_GetMinmaxParameterfv; - table->GetMinmaxParameteriv = exec_GetMinmaxParameteriv; - table->GetMinmaxParameterivEXT = exec_GetMinmaxParameteriv; - table->GetSeparableFilter = exec_GetSeparableFilter; - table->GetSeparableFilterEXT = exec_GetSeparableFilter; - table->Histogram = save_Histogram; - table->Minmax = save_Minmax; - table->ResetHistogram = save_ResetHistogram; - table->ResetMinmax = save_ResetMinmax; - table->SeparableFilter2D = exec_SeparableFilter2D; + SET_BlendColor(table, save_BlendColor); + SET_BlendEquation(table, save_BlendEquation); + SET_ColorSubTable(table, save_ColorSubTable); + SET_ColorTable(table, save_ColorTable); + SET_ColorTableParameterfv(table, save_ColorTableParameterfv); + SET_ColorTableParameteriv(table, save_ColorTableParameteriv); + SET_ConvolutionFilter1D(table, save_ConvolutionFilter1D); + SET_ConvolutionFilter2D(table, save_ConvolutionFilter2D); + SET_ConvolutionParameterf(table, save_ConvolutionParameterf); + SET_ConvolutionParameterfv(table, save_ConvolutionParameterfv); + SET_ConvolutionParameteri(table, save_ConvolutionParameteri); + SET_ConvolutionParameteriv(table, save_ConvolutionParameteriv); + SET_CopyColorSubTable(table, save_CopyColorSubTable); + SET_CopyColorTable(table, save_CopyColorTable); + SET_CopyConvolutionFilter1D(table, exec_CopyConvolutionFilter1D); + SET_CopyConvolutionFilter2D(table, exec_CopyConvolutionFilter2D); + SET_GetColorTable(table, exec_GetColorTable); + SET_GetColorTableParameterfv(table, exec_GetColorTableParameterfv); + SET_GetColorTableParameteriv(table, exec_GetColorTableParameteriv); + SET_GetConvolutionFilter(table, exec_GetConvolutionFilter); + SET_GetConvolutionParameterfv(table, exec_GetConvolutionParameterfv); + SET_GetConvolutionParameteriv(table, exec_GetConvolutionParameteriv); + SET_GetHistogram(table, exec_GetHistogram); + SET_GetHistogramParameterfv(table, exec_GetHistogramParameterfv); + SET_GetHistogramParameteriv(table, exec_GetHistogramParameteriv); + SET_GetMinmax(table, exec_GetMinmax); + SET_GetMinmaxParameterfv(table, exec_GetMinmaxParameterfv); + SET_GetMinmaxParameteriv(table, exec_GetMinmaxParameteriv); + SET_GetSeparableFilter(table, exec_GetSeparableFilter); + SET_Histogram(table, save_Histogram); + SET_Minmax(table, save_Minmax); + SET_ResetHistogram(table, save_ResetHistogram); + SET_ResetMinmax(table, save_ResetMinmax); + SET_SeparableFilter2D(table, exec_SeparableFilter2D); /* 2. GL_EXT_blend_color */ #if 0 - table->BlendColorEXT = save_BlendColorEXT; + SET_BlendColorEXT(table, save_BlendColorEXT); #endif /* 3. GL_EXT_polygon_offset */ - table->PolygonOffsetEXT = save_PolygonOffsetEXT; + SET_PolygonOffsetEXT(table, save_PolygonOffsetEXT); /* 6. GL_EXT_texture3d */ #if 0 - table->CopyTexSubImage3DEXT = save_CopyTexSubImage3D; - table->TexImage3DEXT = save_TexImage3DEXT; - table->TexSubImage3DEXT = save_TexSubImage3D; + SET_CopyTexSubImage3DEXT(table, save_CopyTexSubImage3D); + SET_TexImage3DEXT(table, save_TexImage3DEXT); + SET_TexSubImage3DEXT(table, save_TexSubImage3D); #endif - /* 15. GL_SGIX_pixel_texture */ - table->PixelTexGenSGIX = save_PixelTexGenSGIX; - - /* 15. GL_SGIS_pixel_texture */ - table->PixelTexGenParameteriSGIS = save_PixelTexGenParameteriSGIS; - table->PixelTexGenParameterfSGIS = save_PixelTexGenParameterfSGIS; - table->PixelTexGenParameterivSGIS = save_PixelTexGenParameterivSGIS; - table->PixelTexGenParameterfvSGIS = save_PixelTexGenParameterfvSGIS; - table->GetPixelTexGenParameterivSGIS = exec_GetPixelTexGenParameterivSGIS; - table->GetPixelTexGenParameterfvSGIS = exec_GetPixelTexGenParameterfvSGIS; + /* 14. GL_SGI_color_table */ +#if 0 + SET_ColorTableSGI(table, save_ColorTable); + SET_ColorSubTableSGI(table, save_ColorSubTable); + SET_GetColorTableSGI(table, exec_GetColorTable); + SET_GetColorTableParameterfvSGI(table, exec_GetColorTableParameterfv); + SET_GetColorTableParameterivSGI(table, exec_GetColorTableParameteriv); +#endif /* 30. GL_EXT_vertex_array */ - table->ColorPointerEXT = exec_ColorPointerEXT; - table->EdgeFlagPointerEXT = exec_EdgeFlagPointerEXT; - table->IndexPointerEXT = exec_IndexPointerEXT; - table->NormalPointerEXT = exec_NormalPointerEXT; - table->TexCoordPointerEXT = exec_TexCoordPointerEXT; - table->VertexPointerEXT = exec_VertexPointerEXT; + SET_ColorPointerEXT(table, exec_ColorPointerEXT); + SET_EdgeFlagPointerEXT(table, exec_EdgeFlagPointerEXT); + SET_IndexPointerEXT(table, exec_IndexPointerEXT); + SET_NormalPointerEXT(table, exec_NormalPointerEXT); + SET_TexCoordPointerEXT(table, exec_TexCoordPointerEXT); + SET_VertexPointerEXT(table, exec_VertexPointerEXT); /* 37. GL_EXT_blend_minmax */ #if 0 - table->BlendEquationEXT = save_BlendEquationEXT; + SET_BlendEquationEXT(table, save_BlendEquationEXT); #endif /* 54. GL_EXT_point_parameters */ - table->PointParameterfEXT = save_PointParameterfEXT; - table->PointParameterfvEXT = save_PointParameterfvEXT; - - /* 78. GL_EXT_paletted_texture */ -#if 0 - table->ColorTableEXT = save_ColorTable; - table->ColorSubTableEXT = save_ColorSubTable; -#endif - table->GetColorTableEXT = exec_GetColorTable; - table->GetColorTableParameterfvEXT = exec_GetColorTableParameterfv; - table->GetColorTableParameterivEXT = exec_GetColorTableParameteriv; + SET_PointParameterfEXT(table, save_PointParameterfEXT); + SET_PointParameterfvEXT(table, save_PointParameterfvEXT); /* 97. GL_EXT_compiled_vertex_array */ - table->LockArraysEXT = exec_LockArraysEXT; - table->UnlockArraysEXT = exec_UnlockArraysEXT; + SET_LockArraysEXT(table, exec_LockArraysEXT); + SET_UnlockArraysEXT(table, exec_UnlockArraysEXT); /* 145. GL_EXT_secondary_color */ - table->SecondaryColorPointerEXT = exec_SecondaryColorPointerEXT; + SET_SecondaryColorPointerEXT(table, exec_SecondaryColorPointerEXT); /* 148. GL_EXT_multi_draw_arrays */ - table->MultiDrawArraysEXT = exec_MultiDrawArraysEXT; - table->MultiDrawElementsEXT = exec_MultiDrawElementsEXT; + SET_MultiDrawArraysEXT(table, exec_MultiDrawArraysEXT); + SET_MultiDrawElementsEXT(table, exec_MultiDrawElementsEXT); /* 149. GL_EXT_fog_coord */ - table->FogCoordPointerEXT = exec_FogCoordPointerEXT; + SET_FogCoordPointerEXT(table, exec_FogCoordPointerEXT); /* 173. GL_EXT_blend_func_separate */ - table->BlendFuncSeparateEXT = save_BlendFuncSeparateEXT; + SET_BlendFuncSeparateEXT(table, save_BlendFuncSeparateEXT); /* 196. GL_MESA_resize_buffers */ - table->ResizeBuffersMESA = exec_ResizeBuffersMESA; + SET_ResizeBuffersMESA(table, _mesa_ResizeBuffersMESA); /* 197. GL_MESA_window_pos */ - table->WindowPos2dMESA = save_WindowPos2dMESA; - table->WindowPos2dvMESA = save_WindowPos2dvMESA; - table->WindowPos2fMESA = save_WindowPos2fMESA; - table->WindowPos2fvMESA = save_WindowPos2fvMESA; - table->WindowPos2iMESA = save_WindowPos2iMESA; - table->WindowPos2ivMESA = save_WindowPos2ivMESA; - table->WindowPos2sMESA = save_WindowPos2sMESA; - table->WindowPos2svMESA = save_WindowPos2svMESA; - table->WindowPos3dMESA = save_WindowPos3dMESA; - table->WindowPos3dvMESA = save_WindowPos3dvMESA; - table->WindowPos3fMESA = save_WindowPos3fMESA; - table->WindowPos3fvMESA = save_WindowPos3fvMESA; - table->WindowPos3iMESA = save_WindowPos3iMESA; - table->WindowPos3ivMESA = save_WindowPos3ivMESA; - table->WindowPos3sMESA = save_WindowPos3sMESA; - table->WindowPos3svMESA = save_WindowPos3svMESA; - table->WindowPos4dMESA = save_WindowPos4dMESA; - table->WindowPos4dvMESA = save_WindowPos4dvMESA; - table->WindowPos4fMESA = save_WindowPos4fMESA; - table->WindowPos4fvMESA = save_WindowPos4fvMESA; - table->WindowPos4iMESA = save_WindowPos4iMESA; - table->WindowPos4ivMESA = save_WindowPos4ivMESA; - table->WindowPos4sMESA = save_WindowPos4sMESA; - table->WindowPos4svMESA = save_WindowPos4svMESA; + SET_WindowPos2dMESA(table, save_WindowPos2dMESA); + SET_WindowPos2dvMESA(table, save_WindowPos2dvMESA); + SET_WindowPos2fMESA(table, save_WindowPos2fMESA); + SET_WindowPos2fvMESA(table, save_WindowPos2fvMESA); + SET_WindowPos2iMESA(table, save_WindowPos2iMESA); + SET_WindowPos2ivMESA(table, save_WindowPos2ivMESA); + SET_WindowPos2sMESA(table, save_WindowPos2sMESA); + SET_WindowPos2svMESA(table, save_WindowPos2svMESA); + SET_WindowPos3dMESA(table, save_WindowPos3dMESA); + SET_WindowPos3dvMESA(table, save_WindowPos3dvMESA); + SET_WindowPos3fMESA(table, save_WindowPos3fMESA); + SET_WindowPos3fvMESA(table, save_WindowPos3fvMESA); + SET_WindowPos3iMESA(table, save_WindowPos3iMESA); + SET_WindowPos3ivMESA(table, save_WindowPos3ivMESA); + SET_WindowPos3sMESA(table, save_WindowPos3sMESA); + SET_WindowPos3svMESA(table, save_WindowPos3svMESA); + SET_WindowPos4dMESA(table, save_WindowPos4dMESA); + SET_WindowPos4dvMESA(table, save_WindowPos4dvMESA); + SET_WindowPos4fMESA(table, save_WindowPos4fMESA); + SET_WindowPos4fvMESA(table, save_WindowPos4fvMESA); + SET_WindowPos4iMESA(table, save_WindowPos4iMESA); + SET_WindowPos4ivMESA(table, save_WindowPos4ivMESA); + SET_WindowPos4sMESA(table, save_WindowPos4sMESA); + SET_WindowPos4svMESA(table, save_WindowPos4svMESA); /* 200. GL_IBM_multimode_draw_arrays */ - table->MultiModeDrawArraysIBM = exec_MultiModeDrawArraysIBM; - table->MultiModeDrawElementsIBM = exec_MultiModeDrawElementsIBM; + SET_MultiModeDrawArraysIBM(table, exec_MultiModeDrawArraysIBM); + SET_MultiModeDrawElementsIBM(table, exec_MultiModeDrawElementsIBM); #if FEATURE_NV_vertex_program /* 233. GL_NV_vertex_program */ @@ -7786,86 +8037,96 @@ _mesa_init_dlist_table( struct _glapi_table *table ) * AreProgramsResidentNV, IsProgramNV, GenProgramsNV, DeleteProgramsNV, * VertexAttribPointerNV, GetProgram*, GetVertexAttrib* */ - table->BindProgramNV = save_BindProgramNV; - table->DeleteProgramsNV = _mesa_DeletePrograms; - table->ExecuteProgramNV = save_ExecuteProgramNV; - table->GenProgramsNV = _mesa_GenPrograms; - table->AreProgramsResidentNV = _mesa_AreProgramsResidentNV; - table->RequestResidentProgramsNV = save_RequestResidentProgramsNV; - table->GetProgramParameterfvNV = _mesa_GetProgramParameterfvNV; - table->GetProgramParameterdvNV = _mesa_GetProgramParameterdvNV; - table->GetProgramivNV = _mesa_GetProgramivNV; - table->GetProgramStringNV = _mesa_GetProgramStringNV; - table->GetTrackMatrixivNV = _mesa_GetTrackMatrixivNV; - table->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV; - table->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV; - table->GetVertexAttribivNV = _mesa_GetVertexAttribivNV; - table->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV; - table->IsProgramNV = _mesa_IsProgram; - table->LoadProgramNV = save_LoadProgramNV; - table->ProgramParameter4dNV = save_ProgramParameter4dNV; - table->ProgramParameter4dvNV = save_ProgramParameter4dvNV; - table->ProgramParameter4fNV = save_ProgramParameter4fNV; - table->ProgramParameter4fvNV = save_ProgramParameter4fvNV; - table->ProgramParameters4dvNV = save_ProgramParameters4dvNV; - table->ProgramParameters4fvNV = save_ProgramParameters4fvNV; - table->TrackMatrixNV = save_TrackMatrixNV; - table->VertexAttribPointerNV = _mesa_VertexAttribPointerNV; + SET_BindProgramNV(table, save_BindProgramNV); + SET_DeleteProgramsNV(table, _mesa_DeletePrograms); + SET_ExecuteProgramNV(table, save_ExecuteProgramNV); + SET_GenProgramsNV(table, _mesa_GenPrograms); + SET_AreProgramsResidentNV(table, _mesa_AreProgramsResidentNV); + SET_RequestResidentProgramsNV(table, save_RequestResidentProgramsNV); + SET_GetProgramParameterfvNV(table, _mesa_GetProgramParameterfvNV); + SET_GetProgramParameterdvNV(table, _mesa_GetProgramParameterdvNV); + SET_GetProgramivNV(table, _mesa_GetProgramivNV); + SET_GetProgramStringNV(table, _mesa_GetProgramStringNV); + SET_GetTrackMatrixivNV(table, _mesa_GetTrackMatrixivNV); + SET_GetVertexAttribdvNV(table, _mesa_GetVertexAttribdvNV); + SET_GetVertexAttribfvNV(table, _mesa_GetVertexAttribfvNV); + SET_GetVertexAttribivNV(table, _mesa_GetVertexAttribivNV); + SET_GetVertexAttribPointervNV(table, _mesa_GetVertexAttribPointervNV); + SET_IsProgramNV(table, _mesa_IsProgramARB); + SET_LoadProgramNV(table, save_LoadProgramNV); + SET_ProgramParameter4dNV(table, save_ProgramParameter4dNV); + SET_ProgramParameter4dvNV(table, save_ProgramParameter4dvNV); + SET_ProgramParameter4fNV(table, save_ProgramParameter4fNV); + SET_ProgramParameter4fvNV(table, save_ProgramParameter4fvNV); + SET_ProgramParameters4dvNV(table, save_ProgramParameters4dvNV); + SET_ProgramParameters4fvNV(table, save_ProgramParameters4fvNV); + SET_TrackMatrixNV(table, save_TrackMatrixNV); + SET_VertexAttribPointerNV(table, _mesa_VertexAttribPointerNV); #endif /* 245. GL_ATI_fragment_shader */ #if FEATURE_ATI_fragment_shader - table->BindFragmentShaderATI = save_BindFragmentShaderATI; - table->SetFragmentShaderConstantATI = save_SetFragmentShaderConstantATI; + SET_BindFragmentShaderATI(table, save_BindFragmentShaderATI); + SET_SetFragmentShaderConstantATI(table, save_SetFragmentShaderConstantATI); #endif /* 282. GL_NV_fragment_program */ #if FEATURE_NV_fragment_program - table->ProgramNamedParameter4fNV = save_ProgramNamedParameter4fNV; - table->ProgramNamedParameter4dNV = save_ProgramNamedParameter4dNV; - table->ProgramNamedParameter4fvNV = save_ProgramNamedParameter4fvNV; - table->ProgramNamedParameter4dvNV = save_ProgramNamedParameter4dvNV; - table->GetProgramNamedParameterfvNV = _mesa_GetProgramNamedParameterfvNV; - table->GetProgramNamedParameterdvNV = _mesa_GetProgramNamedParameterdvNV; - table->ProgramLocalParameter4dARB = save_ProgramLocalParameter4dARB; - table->ProgramLocalParameter4dvARB = save_ProgramLocalParameter4dvARB; - table->ProgramLocalParameter4fARB = save_ProgramLocalParameter4fARB; - table->ProgramLocalParameter4fvARB = save_ProgramLocalParameter4fvARB; - table->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB; - table->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB; + SET_ProgramNamedParameter4fNV(table, save_ProgramNamedParameter4fNV); + SET_ProgramNamedParameter4dNV(table, save_ProgramNamedParameter4dNV); + SET_ProgramNamedParameter4fvNV(table, save_ProgramNamedParameter4fvNV); + SET_ProgramNamedParameter4dvNV(table, save_ProgramNamedParameter4dvNV); + SET_GetProgramNamedParameterfvNV(table, + _mesa_GetProgramNamedParameterfvNV); + SET_GetProgramNamedParameterdvNV(table, + _mesa_GetProgramNamedParameterdvNV); + SET_ProgramLocalParameter4dARB(table, save_ProgramLocalParameter4dARB); + SET_ProgramLocalParameter4dvARB(table, save_ProgramLocalParameter4dvARB); + SET_ProgramLocalParameter4fARB(table, save_ProgramLocalParameter4fARB); + SET_ProgramLocalParameter4fvARB(table, save_ProgramLocalParameter4fvARB); + SET_GetProgramLocalParameterdvARB(table, + _mesa_GetProgramLocalParameterdvARB); + SET_GetProgramLocalParameterfvARB(table, + _mesa_GetProgramLocalParameterfvARB); #endif /* 262. GL_NV_point_sprite */ - table->PointParameteriNV = save_PointParameteriNV; - table->PointParameterivNV = save_PointParameterivNV; + SET_PointParameteriNV(table, save_PointParameteriNV); + SET_PointParameterivNV(table, save_PointParameterivNV); /* 268. GL_EXT_stencil_two_side */ - table->ActiveStencilFaceEXT = save_ActiveStencilFaceEXT; + SET_ActiveStencilFaceEXT(table, save_ActiveStencilFaceEXT); + + /* 273. GL_APPLE_vertex_array_object */ + SET_BindVertexArrayAPPLE(table, _mesa_BindVertexArrayAPPLE); + SET_DeleteVertexArraysAPPLE(table, _mesa_DeleteVertexArraysAPPLE); + SET_GenVertexArraysAPPLE(table, _mesa_GenVertexArraysAPPLE); + SET_IsVertexArrayAPPLE(table, _mesa_IsVertexArrayAPPLE); /* ???. GL_EXT_depth_bounds_test */ - table->DepthBoundsEXT = save_DepthBoundsEXT; + SET_DepthBoundsEXT(table, save_DepthBoundsEXT); /* ARB 1. GL_ARB_multitexture */ - table->ActiveTextureARB = save_ActiveTextureARB; - table->ClientActiveTextureARB = exec_ClientActiveTextureARB; + SET_ActiveTextureARB(table, save_ActiveTextureARB); + SET_ClientActiveTextureARB(table, exec_ClientActiveTextureARB); /* ARB 3. GL_ARB_transpose_matrix */ - table->LoadTransposeMatrixdARB = save_LoadTransposeMatrixdARB; - table->LoadTransposeMatrixfARB = save_LoadTransposeMatrixfARB; - table->MultTransposeMatrixdARB = save_MultTransposeMatrixdARB; - table->MultTransposeMatrixfARB = save_MultTransposeMatrixfARB; + SET_LoadTransposeMatrixdARB(table, save_LoadTransposeMatrixdARB); + SET_LoadTransposeMatrixfARB(table, save_LoadTransposeMatrixfARB); + SET_MultTransposeMatrixdARB(table, save_MultTransposeMatrixdARB); + SET_MultTransposeMatrixfARB(table, save_MultTransposeMatrixfARB); /* ARB 5. GL_ARB_multisample */ - table->SampleCoverageARB = save_SampleCoverageARB; + SET_SampleCoverageARB(table, save_SampleCoverageARB); /* ARB 12. GL_ARB_texture_compression */ - table->CompressedTexImage3DARB = save_CompressedTexImage3DARB; - table->CompressedTexImage2DARB = save_CompressedTexImage2DARB; - table->CompressedTexImage1DARB = save_CompressedTexImage1DARB; - table->CompressedTexSubImage3DARB = save_CompressedTexSubImage3DARB; - table->CompressedTexSubImage2DARB = save_CompressedTexSubImage2DARB; - table->CompressedTexSubImage1DARB = save_CompressedTexSubImage1DARB; - table->GetCompressedTexImageARB = exec_GetCompressedTexImageARB; + SET_CompressedTexImage3DARB(table, save_CompressedTexImage3DARB); + SET_CompressedTexImage2DARB(table, save_CompressedTexImage2DARB); + SET_CompressedTexImage1DARB(table, save_CompressedTexImage1DARB); + SET_CompressedTexSubImage3DARB(table, save_CompressedTexSubImage3DARB); + SET_CompressedTexSubImage2DARB(table, save_CompressedTexSubImage2DARB); + SET_CompressedTexSubImage1DARB(table, save_CompressedTexSubImage1DARB); + SET_GetCompressedTexImageARB(table, exec_GetCompressedTexImageARB); /* ARB 14. GL_ARB_point_parameters */ /* aliased with EXT_point_parameters functions */ @@ -7877,94 +8138,110 @@ _mesa_init_dlist_table( struct _glapi_table *table ) /* ARB 27. GL_ARB_fragment_program */ #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program /* glVertexAttrib* functions alias the NV ones, handled elsewhere */ - table->VertexAttribPointerARB = _mesa_VertexAttribPointerARB; - table->EnableVertexAttribArrayARB = _mesa_EnableVertexAttribArrayARB; - table->DisableVertexAttribArrayARB = _mesa_DisableVertexAttribArrayARB; - table->ProgramStringARB = save_ProgramStringARB; - table->BindProgramNV = save_BindProgramNV; - table->DeleteProgramsNV = _mesa_DeletePrograms; - table->GenProgramsNV = _mesa_GenPrograms; - table->IsProgramNV = _mesa_IsProgram; - table->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV; - table->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV; - table->GetVertexAttribivNV = _mesa_GetVertexAttribivNV; - table->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV; - table->ProgramEnvParameter4dARB = save_ProgramEnvParameter4dARB; - table->ProgramEnvParameter4dvARB = save_ProgramEnvParameter4dvARB; - table->ProgramEnvParameter4fARB = save_ProgramEnvParameter4fARB; - table->ProgramEnvParameter4fvARB = save_ProgramEnvParameter4fvARB; - table->ProgramLocalParameter4dARB = save_ProgramLocalParameter4dARB; - table->ProgramLocalParameter4dvARB = save_ProgramLocalParameter4dvARB; - table->ProgramLocalParameter4fARB = save_ProgramLocalParameter4fARB; - table->ProgramLocalParameter4fvARB = save_ProgramLocalParameter4fvARB; - table->GetProgramEnvParameterdvARB = _mesa_GetProgramEnvParameterdvARB; - table->GetProgramEnvParameterfvARB = _mesa_GetProgramEnvParameterfvARB; - table->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB; - table->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB; - table->GetProgramivARB = _mesa_GetProgramivARB; - table->GetProgramStringARB = _mesa_GetProgramStringARB; + SET_VertexAttribPointerARB(table, _mesa_VertexAttribPointerARB); + SET_EnableVertexAttribArrayARB(table, _mesa_EnableVertexAttribArrayARB); + SET_DisableVertexAttribArrayARB(table, _mesa_DisableVertexAttribArrayARB); + SET_ProgramStringARB(table, save_ProgramStringARB); + SET_BindProgramNV(table, save_BindProgramNV); + SET_DeleteProgramsNV(table, _mesa_DeletePrograms); + SET_GenProgramsNV(table, _mesa_GenPrograms); + SET_IsProgramNV(table, _mesa_IsProgramARB); + SET_GetVertexAttribdvNV(table, _mesa_GetVertexAttribdvNV); + SET_GetVertexAttribfvNV(table, _mesa_GetVertexAttribfvNV); + SET_GetVertexAttribivNV(table, _mesa_GetVertexAttribivNV); + SET_GetVertexAttribPointervNV(table, _mesa_GetVertexAttribPointervNV); + SET_ProgramEnvParameter4dARB(table, save_ProgramEnvParameter4dARB); + SET_ProgramEnvParameter4dvARB(table, save_ProgramEnvParameter4dvARB); + SET_ProgramEnvParameter4fARB(table, save_ProgramEnvParameter4fARB); + SET_ProgramEnvParameter4fvARB(table, save_ProgramEnvParameter4fvARB); + SET_ProgramLocalParameter4dARB(table, save_ProgramLocalParameter4dARB); + SET_ProgramLocalParameter4dvARB(table, save_ProgramLocalParameter4dvARB); + SET_ProgramLocalParameter4fARB(table, save_ProgramLocalParameter4fARB); + SET_ProgramLocalParameter4fvARB(table, save_ProgramLocalParameter4fvARB); + SET_GetProgramEnvParameterdvARB(table, _mesa_GetProgramEnvParameterdvARB); + SET_GetProgramEnvParameterfvARB(table, _mesa_GetProgramEnvParameterfvARB); + SET_GetProgramLocalParameterdvARB(table, + _mesa_GetProgramLocalParameterdvARB); + SET_GetProgramLocalParameterfvARB(table, + _mesa_GetProgramLocalParameterfvARB); + SET_GetProgramivARB(table, _mesa_GetProgramivARB); + SET_GetProgramStringARB(table, _mesa_GetProgramStringARB); #endif /* ARB 28. GL_ARB_vertex_buffer_object */ #if FEATURE_ARB_vertex_buffer_object /* None of the extension's functions get compiled */ - table->BindBufferARB = _mesa_BindBufferARB; - table->BufferDataARB = _mesa_BufferDataARB; - table->BufferSubDataARB = _mesa_BufferSubDataARB; - table->DeleteBuffersARB = _mesa_DeleteBuffersARB; - table->GenBuffersARB = _mesa_GenBuffersARB; - table->GetBufferParameterivARB = _mesa_GetBufferParameterivARB; - table->GetBufferPointervARB = _mesa_GetBufferPointervARB; - table->GetBufferSubDataARB = _mesa_GetBufferSubDataARB; - table->IsBufferARB = _mesa_IsBufferARB; - table->MapBufferARB = _mesa_MapBufferARB; - table->UnmapBufferARB = _mesa_UnmapBufferARB; + SET_BindBufferARB(table, _mesa_BindBufferARB); + SET_BufferDataARB(table, _mesa_BufferDataARB); + SET_BufferSubDataARB(table, _mesa_BufferSubDataARB); + SET_DeleteBuffersARB(table, _mesa_DeleteBuffersARB); + SET_GenBuffersARB(table, _mesa_GenBuffersARB); + SET_GetBufferParameterivARB(table, _mesa_GetBufferParameterivARB); + SET_GetBufferPointervARB(table, _mesa_GetBufferPointervARB); + SET_GetBufferSubDataARB(table, _mesa_GetBufferSubDataARB); + SET_IsBufferARB(table, _mesa_IsBufferARB); + SET_MapBufferARB(table, _mesa_MapBufferARB); + SET_UnmapBufferARB(table, _mesa_UnmapBufferARB); #endif #if FEATURE_ARB_occlusion_query - table->BeginQueryARB = save_BeginQueryARB; - table->EndQueryARB = save_EndQueryARB; - table->GenQueriesARB = _mesa_GenQueriesARB; - table->DeleteQueriesARB = _mesa_DeleteQueriesARB; - table->IsQueryARB = _mesa_IsQueryARB; - table->GetQueryivARB = _mesa_GetQueryivARB; - table->GetQueryObjectivARB = _mesa_GetQueryObjectivARB; - table->GetQueryObjectuivARB = _mesa_GetQueryObjectuivARB; + SET_BeginQueryARB(table, save_BeginQueryARB); + SET_EndQueryARB(table, save_EndQueryARB); + SET_GenQueriesARB(table, _mesa_GenQueriesARB); + SET_DeleteQueriesARB(table, _mesa_DeleteQueriesARB); + SET_IsQueryARB(table, _mesa_IsQueryARB); + SET_GetQueryivARB(table, _mesa_GetQueryivARB); + SET_GetQueryObjectivARB(table, _mesa_GetQueryObjectivARB); + SET_GetQueryObjectuivARB(table, _mesa_GetQueryObjectuivARB); +#endif + SET_DrawBuffersARB(table, save_DrawBuffersARB); + +#if FEATURE_EXT_framebuffer_blit + SET_BlitFramebufferEXT(table, save_BlitFramebufferEXT); #endif - table->DrawBuffersARB = save_DrawBuffersARB; /* 299. GL_EXT_blend_equation_separate */ - table->BlendEquationSeparateEXT = save_BlendEquationSeparateEXT; + SET_BlendEquationSeparateEXT(table, save_BlendEquationSeparateEXT); + + /* GL_EXT_gpu_program_parmaeters */ +#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program + SET_ProgramEnvParameters4fvEXT(table, save_ProgramEnvParameters4fvEXT); + SET_ProgramLocalParameters4fvEXT(table, save_ProgramLocalParameters4fvEXT); +#endif } -/*** - *** Debugging code - ***/ -static const char *enum_string( GLenum k ) +static const char * +enum_string(GLenum k) { - return _mesa_lookup_enum_by_nr( k ); + return _mesa_lookup_enum_by_nr(k); } -/* +/** * Print the commands in a display list. For debugging only. * TODO: many commands aren't handled yet. */ -static void GLAPIENTRY print_list( GLcontext *ctx, GLuint list ) +static void GLAPIENTRY +print_list(GLcontext *ctx, GLuint list) { + struct mesa_display_list *dlist; Node *n; GLboolean done; - if (!GL_CALL(IsList)(list)) { + if (!islist(ctx, list)) { _mesa_printf("%u is not a display list ID\n", list); return; } - n = (Node *) _mesa_HashLookup(ctx->Shared->DisplayList, list); + dlist = lookup_list(ctx, list); + if (!dlist) + return; - _mesa_printf("START-LIST %u, address %p\n", list, (void*)n ); + n = dlist->node; + + _mesa_printf("START-LIST %u, address %p\n", list, (void *) n); done = n ? GL_FALSE : GL_TRUE; while (!done) { @@ -7973,256 +8250,255 @@ static void GLAPIENTRY print_list( GLcontext *ctx, GLuint list ) if (i >= 0 && i < (GLint) ctx->ListExt.NumOpcodes) { /* this is a driver-extended opcode */ - ctx->ListExt.Opcode[i].Print(ctx, &n[1]); - n += ctx->ListExt.Opcode[i].Size; + ctx->ListExt.Opcode[i].Print(ctx, &n[1]); + n += ctx->ListExt.Opcode[i].Size; } else { - switch (opcode) { + switch (opcode) { case OPCODE_ACCUM: - _mesa_printf("accum %s %g\n", enum_string(n[1].e), n[2].f ); - break; - case OPCODE_BITMAP: + _mesa_printf("Accum %s %g\n", enum_string(n[1].e), n[2].f); + break; + case OPCODE_BITMAP: _mesa_printf("Bitmap %d %d %g %g %g %g %p\n", n[1].i, n[2].i, - n[3].f, n[4].f, n[5].f, n[6].f, (void *) n[7].data ); - break; + n[3].f, n[4].f, n[5].f, n[6].f, (void *) n[7].data); + break; case OPCODE_CALL_LIST: - _mesa_printf("CallList %d\n", (int) n[1].ui ); + _mesa_printf("CallList %d\n", (int) n[1].ui); break; case OPCODE_CALL_LIST_OFFSET: _mesa_printf("CallList %d + offset %u = %u\n", (int) n[1].ui, - ctx->List.ListBase, ctx->List.ListBase + n[1].ui ); + ctx->List.ListBase, ctx->List.ListBase + n[1].ui); break; case OPCODE_COLOR_TABLE_PARAMETER_FV: _mesa_printf("ColorTableParameterfv %s %s %f %f %f %f\n", - enum_string(n[1].e), enum_string(n[2].e), - n[3].f, n[4].f, n[5].f, n[6].f); + enum_string(n[1].e), enum_string(n[2].e), + n[3].f, n[4].f, n[5].f, n[6].f); break; case OPCODE_COLOR_TABLE_PARAMETER_IV: _mesa_printf("ColorTableParameteriv %s %s %d %d %d %d\n", - enum_string(n[1].e), enum_string(n[2].e), - n[3].i, n[4].i, n[5].i, n[6].i); + enum_string(n[1].e), enum_string(n[2].e), + n[3].i, n[4].i, n[5].i, n[6].i); break; - case OPCODE_DISABLE: + case OPCODE_DISABLE: _mesa_printf("Disable %s\n", enum_string(n[1].e)); - break; - case OPCODE_ENABLE: + break; + case OPCODE_ENABLE: _mesa_printf("Enable %s\n", enum_string(n[1].e)); - break; + break; case OPCODE_FRUSTUM: _mesa_printf("Frustum %g %g %g %g %g %g\n", - n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f ); + n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f); break; - case OPCODE_LINE_STIPPLE: - _mesa_printf("LineStipple %d %x\n", n[1].i, (int) n[2].us ); - break; - case OPCODE_LOAD_IDENTITY: + case OPCODE_LINE_STIPPLE: + _mesa_printf("LineStipple %d %x\n", n[1].i, (int) n[2].us); + break; + case OPCODE_LOAD_IDENTITY: _mesa_printf("LoadIdentity\n"); - break; - case OPCODE_LOAD_MATRIX: + break; + case OPCODE_LOAD_MATRIX: _mesa_printf("LoadMatrix\n"); _mesa_printf(" %8f %8f %8f %8f\n", - n[1].f, n[5].f, n[9].f, n[13].f); + n[1].f, n[5].f, n[9].f, n[13].f); _mesa_printf(" %8f %8f %8f %8f\n", n[2].f, n[6].f, n[10].f, n[14].f); _mesa_printf(" %8f %8f %8f %8f\n", n[3].f, n[7].f, n[11].f, n[15].f); _mesa_printf(" %8f %8f %8f %8f\n", n[4].f, n[8].f, n[12].f, n[16].f); - break; - case OPCODE_MULT_MATRIX: + break; + case OPCODE_MULT_MATRIX: _mesa_printf("MultMatrix (or Rotate)\n"); _mesa_printf(" %8f %8f %8f %8f\n", - n[1].f, n[5].f, n[9].f, n[13].f); + n[1].f, n[5].f, n[9].f, n[13].f); _mesa_printf(" %8f %8f %8f %8f\n", n[2].f, n[6].f, n[10].f, n[14].f); _mesa_printf(" %8f %8f %8f %8f\n", n[3].f, n[7].f, n[11].f, n[15].f); _mesa_printf(" %8f %8f %8f %8f\n", n[4].f, n[8].f, n[12].f, n[16].f); - break; + break; case OPCODE_ORTHO: _mesa_printf("Ortho %g %g %g %g %g %g\n", - n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f ); + n[1].f, n[2].f, n[3].f, n[4].f, n[5].f, n[6].f); break; - case OPCODE_POP_ATTRIB: + case OPCODE_POP_ATTRIB: _mesa_printf("PopAttrib\n"); - break; - case OPCODE_POP_MATRIX: + break; + case OPCODE_POP_MATRIX: _mesa_printf("PopMatrix\n"); - break; - case OPCODE_POP_NAME: + break; + case OPCODE_POP_NAME: _mesa_printf("PopName\n"); - break; - case OPCODE_PUSH_ATTRIB: - _mesa_printf("PushAttrib %x\n", n[1].bf ); - break; - case OPCODE_PUSH_MATRIX: + break; + case OPCODE_PUSH_ATTRIB: + _mesa_printf("PushAttrib %x\n", n[1].bf); + break; + case OPCODE_PUSH_MATRIX: _mesa_printf("PushMatrix\n"); - break; - case OPCODE_PUSH_NAME: - _mesa_printf("PushName %d\n", (int) n[1].ui ); - break; - case OPCODE_RASTER_POS: + break; + case OPCODE_PUSH_NAME: + _mesa_printf("PushName %d\n", (int) n[1].ui); + break; + case OPCODE_RASTER_POS: _mesa_printf("RasterPos %g %g %g %g\n", - n[1].f, n[2].f,n[3].f,n[4].f); - break; + n[1].f, n[2].f, n[3].f, n[4].f); + break; case OPCODE_ROTATE: _mesa_printf("Rotate %g %g %g %g\n", - n[1].f, n[2].f, n[3].f, n[4].f ); + n[1].f, n[2].f, n[3].f, n[4].f); break; case OPCODE_SCALE: - _mesa_printf("Scale %g %g %g\n", n[1].f, n[2].f, n[3].f ); + _mesa_printf("Scale %g %g %g\n", n[1].f, n[2].f, n[3].f); break; case OPCODE_TRANSLATE: - _mesa_printf("Translate %g %g %g\n", n[1].f, n[2].f, n[3].f ); + _mesa_printf("Translate %g %g %g\n", n[1].f, n[2].f, n[3].f); break; case OPCODE_BIND_TEXTURE: - _mesa_printf("BindTexture %s %d\n", + _mesa_printf("BindTexture %s %d\n", _mesa_lookup_enum_by_nr(n[1].ui), n[2].ui); - break; + break; case OPCODE_SHADE_MODEL: - _mesa_printf("ShadeModel %s\n", - _mesa_lookup_enum_by_nr(n[1].ui)); - break; - case OPCODE_MAP1: - _mesa_printf("Map1 %s %.3f %.3f %d %d\n", - _mesa_lookup_enum_by_nr(n[1].ui), - n[2].f, n[3].f, n[4].i, n[5].i); - break; - case OPCODE_MAP2: - _mesa_printf("Map2 %s %.3f %.3f %.3f %.3f %d %d %d %d\n", + _mesa_printf("ShadeModel %s\n", _mesa_lookup_enum_by_nr(n[1].ui)); + break; + case OPCODE_MAP1: + _mesa_printf("Map1 %s %.3f %.3f %d %d\n", + _mesa_lookup_enum_by_nr(n[1].ui), + n[2].f, n[3].f, n[4].i, n[5].i); + break; + case OPCODE_MAP2: + _mesa_printf("Map2 %s %.3f %.3f %.3f %.3f %d %d %d %d\n", _mesa_lookup_enum_by_nr(n[1].ui), n[2].f, n[3].f, n[4].f, n[5].f, n[6].i, n[7].i, n[8].i, n[9].i); - break; - case OPCODE_MAPGRID1: - _mesa_printf("MapGrid1 %d %.3f %.3f\n", - n[1].i, n[2].f, n[3].f); - break; - case OPCODE_MAPGRID2: - _mesa_printf("MapGrid2 %d %.3f %.3f, %d %.3f %.3f\n", - n[1].i, n[2].f, n[3].f, - n[4].i, n[5].f, n[6].f); - break; - case OPCODE_EVALMESH1: - _mesa_printf("EvalMesh1 %d %d\n", n[1].i, n[2].i); - break; - case OPCODE_EVALMESH2: - _mesa_printf("EvalMesh2 %d %d %d %d\n", + break; + case OPCODE_MAPGRID1: + _mesa_printf("MapGrid1 %d %.3f %.3f\n", n[1].i, n[2].f, n[3].f); + break; + case OPCODE_MAPGRID2: + _mesa_printf("MapGrid2 %d %.3f %.3f, %d %.3f %.3f\n", + n[1].i, n[2].f, n[3].f, n[4].i, n[5].f, n[6].f); + break; + case OPCODE_EVALMESH1: + _mesa_printf("EvalMesh1 %d %d\n", n[1].i, n[2].i); + break; + case OPCODE_EVALMESH2: + _mesa_printf("EvalMesh2 %d %d %d %d\n", n[1].i, n[2].i, n[3].i, n[4].i); - break; + break; - case OPCODE_ATTR_1F_NV: - _mesa_printf("ATTR_1F_NV attr %d: %f\n", - n[1].i, n[2].f); - break; - case OPCODE_ATTR_2F_NV: - _mesa_printf("ATTR_2F_NV attr %d: %f %f\n", - n[1].i, n[2].f, n[3].f); - break; - case OPCODE_ATTR_3F_NV: - _mesa_printf("ATTR_3F_NV attr %d: %f %f %f\n", - n[1].i, n[2].f, n[3].f, n[4].f); - break; - case OPCODE_ATTR_4F_NV: - _mesa_printf("ATTR_4F_NV attr %d: %f %f %f %f\n", - n[1].i, n[2].f, n[3].f, n[4].f, n[5].f); - break; - case OPCODE_ATTR_1F_ARB: - _mesa_printf("ATTR_1F_ARB attr %d: %f\n", - n[1].i, n[2].f); - break; - case OPCODE_ATTR_2F_ARB: - _mesa_printf("ATTR_2F_ARB attr %d: %f %f\n", - n[1].i, n[2].f, n[3].f); - break; - case OPCODE_ATTR_3F_ARB: - _mesa_printf("ATTR_3F_ARB attr %d: %f %f %f\n", - n[1].i, n[2].f, n[3].f, n[4].f); - break; - case OPCODE_ATTR_4F_ARB: - _mesa_printf("ATTR_4F_ARB attr %d: %f %f %f %f\n", - n[1].i, n[2].f, n[3].f, n[4].f, n[5].f); - break; + case OPCODE_ATTR_1F_NV: + _mesa_printf("ATTR_1F_NV attr %d: %f\n", n[1].i, n[2].f); + break; + case OPCODE_ATTR_2F_NV: + _mesa_printf("ATTR_2F_NV attr %d: %f %f\n", + n[1].i, n[2].f, n[3].f); + break; + case OPCODE_ATTR_3F_NV: + _mesa_printf("ATTR_3F_NV attr %d: %f %f %f\n", + n[1].i, n[2].f, n[3].f, n[4].f); + break; + case OPCODE_ATTR_4F_NV: + _mesa_printf("ATTR_4F_NV attr %d: %f %f %f %f\n", + n[1].i, n[2].f, n[3].f, n[4].f, n[5].f); + break; + case OPCODE_ATTR_1F_ARB: + _mesa_printf("ATTR_1F_ARB attr %d: %f\n", n[1].i, n[2].f); + break; + case OPCODE_ATTR_2F_ARB: + _mesa_printf("ATTR_2F_ARB attr %d: %f %f\n", + n[1].i, n[2].f, n[3].f); + break; + case OPCODE_ATTR_3F_ARB: + _mesa_printf("ATTR_3F_ARB attr %d: %f %f %f\n", + n[1].i, n[2].f, n[3].f, n[4].f); + break; + case OPCODE_ATTR_4F_ARB: + _mesa_printf("ATTR_4F_ARB attr %d: %f %f %f %f\n", + n[1].i, n[2].f, n[3].f, n[4].f, n[5].f); + break; - case OPCODE_MATERIAL: - _mesa_printf("MATERIAL %x %x: %f %f %f %f\n", - n[1].i, n[2].i, n[3].f, n[4].f, n[5].f, n[6].f); - break; - case OPCODE_INDEX: - _mesa_printf("INDEX: %f\n", n[1].f); - break; - case OPCODE_EDGEFLAG: - _mesa_printf("EDGEFLAG: %d\n", n[1].i); - break; - case OPCODE_BEGIN: - _mesa_printf("BEGIN %x\n", n[1].i); - break; - case OPCODE_END: - _mesa_printf("END\n"); - break; - case OPCODE_RECTF: - _mesa_printf("RECTF %f %f %f %f\n", n[1].f, n[2].f, n[3].f, n[4].f); - break; - case OPCODE_EVAL_C1: - _mesa_printf("EVAL_C1 %f\n", n[1].f); - break; - case OPCODE_EVAL_C2: - _mesa_printf("EVAL_C2 %f %f\n", n[1].f, n[2].f); - break; - case OPCODE_EVAL_P1: - _mesa_printf("EVAL_P1 %d\n", n[1].i); - break; - case OPCODE_EVAL_P2: - _mesa_printf("EVAL_P2 %d %d\n", n[1].i, n[2].i); - break; + case OPCODE_MATERIAL: + _mesa_printf("MATERIAL %x %x: %f %f %f %f\n", + n[1].i, n[2].i, n[3].f, n[4].f, n[5].f, n[6].f); + break; + case OPCODE_INDEX: + _mesa_printf("INDEX: %f\n", n[1].f); + break; + case OPCODE_EDGEFLAG: + _mesa_printf("EDGEFLAG: %d\n", n[1].i); + break; + case OPCODE_BEGIN: + _mesa_printf("BEGIN %x\n", n[1].i); + break; + case OPCODE_END: + _mesa_printf("END\n"); + break; + case OPCODE_RECTF: + _mesa_printf("RECTF %f %f %f %f\n", n[1].f, n[2].f, n[3].f, + n[4].f); + break; + case OPCODE_EVAL_C1: + _mesa_printf("EVAL_C1 %f\n", n[1].f); + break; + case OPCODE_EVAL_C2: + _mesa_printf("EVAL_C2 %f %f\n", n[1].f, n[2].f); + break; + case OPCODE_EVAL_P1: + _mesa_printf("EVAL_P1 %d\n", n[1].i); + break; + case OPCODE_EVAL_P2: + _mesa_printf("EVAL_P2 %d %d\n", n[1].i, n[2].i); + break; - /* - * meta opcodes/commands - */ + /* + * meta opcodes/commands + */ case OPCODE_ERROR: _mesa_printf("Error: %s %s\n", - enum_string(n[1].e), (const char *)n[2].data ); + enum_string(n[1].e), (const char *) n[2].data); break; - case OPCODE_CONTINUE: + case OPCODE_CONTINUE: _mesa_printf("DISPLAY-LIST-CONTINUE\n"); - n = (Node *) n[1].next; - break; - case OPCODE_END_OF_LIST: + n = (Node *) n[1].next; + break; + case OPCODE_END_OF_LIST: _mesa_printf("END-LIST %u\n", list); - done = GL_TRUE; - break; + done = GL_TRUE; + break; default: if (opcode < 0 || opcode > OPCODE_END_OF_LIST) { - _mesa_printf("ERROR IN DISPLAY LIST: opcode = %d, address = %p\n", - opcode, (void*) n); + _mesa_printf + ("ERROR IN DISPLAY LIST: opcode = %d, address = %p\n", + opcode, (void *) n); return; } else { - _mesa_printf("command %d, %u operands\n", opcode, InstSize[opcode]); + _mesa_printf("command %d, %u operands\n", opcode, + InstSize[opcode]); } - } - /* increment n to point to next compiled command */ - if (opcode!=OPCODE_CONTINUE) { - n += InstSize[opcode]; - } + } + /* increment n to point to next compiled command */ + if (opcode != OPCODE_CONTINUE) { + n += InstSize[opcode]; + } } } } -/* +/** * Clients may call this function to help debug display list problems. * This function is _ONLY_FOR_DEBUGGING_PURPOSES_. It may be removed, * changed, or break in the future without notice. */ -void mesa_print_display_list( GLuint list ) +void +mesa_print_display_list(GLuint list) { GET_CURRENT_CONTEXT(ctx); - print_list( ctx, list ); + print_list(ctx, list); } @@ -8230,10 +8506,10 @@ void mesa_print_display_list( GLuint list ) /***** Initialization *****/ /**********************************************************************/ - -void _mesa_save_vtxfmt_init( GLvertexformat *vfmt ) +void +_mesa_save_vtxfmt_init(GLvertexformat * vfmt) { - vfmt->ArrayElement = _ae_loopback_array_elt; /* generic helper */ + vfmt->ArrayElement = _ae_loopback_array_elt; /* generic helper */ vfmt->Begin = save_Begin; vfmt->CallList = _mesa_save_CallList; vfmt->CallLists = _mesa_save_CallLists; @@ -8242,7 +8518,6 @@ void _mesa_save_vtxfmt_init( GLvertexformat *vfmt ) vfmt->Color4f = save_Color4f; vfmt->Color4fv = save_Color4fv; vfmt->EdgeFlag = save_EdgeFlag; - vfmt->EdgeFlagv = save_EdgeFlagv; vfmt->End = save_End; vfmt->EvalCoord1f = save_EvalCoord1f; vfmt->EvalCoord1fv = save_EvalCoord1fv; @@ -8316,9 +8591,20 @@ void _mesa_save_vtxfmt_init( GLvertexformat *vfmt ) } - -void _mesa_init_display_list( GLcontext * ctx ) +/** + * Initialize display list state for given context. + */ +void +_mesa_init_display_list(GLcontext *ctx) { + static GLboolean tableInitialized = GL_FALSE; + + /* zero-out the instruction size table, just once */ + if (!tableInitialized) { + _mesa_bzero(InstSize, sizeof(InstSize)); + tableInitialized = GL_TRUE; + } + /* Display list */ ctx->ListState.CallDepth = 0; ctx->ExecuteFlag = GL_TRUE; @@ -8331,5 +8617,5 @@ void _mesa_init_display_list( GLcontext * ctx ) /* Display List group */ ctx->List.ListBase = 0; - _mesa_save_vtxfmt_init( &ctx->ListState.ListVtxfmt ); + _mesa_save_vtxfmt_init(&ctx->ListState.ListVtxfmt); } diff --git a/src/kits/opengl/mesa/main/dlist.h b/src/kits/opengl/mesa/main/dlist.h index 1a5b391e76..ef6a10af83 100644 --- a/src/kits/opengl/mesa/main/dlist.h +++ b/src/kits/opengl/mesa/main/dlist.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -38,9 +38,8 @@ #if _HAVE_FULL_GL -extern void _mesa_init_lists( void ); - -extern void _mesa_destroy_list( GLcontext *ctx, GLuint list ); +extern void +_mesa_delete_list(GLcontext *ctx, struct mesa_display_list *dlist); extern void GLAPIENTRY _mesa_CallList( GLuint list ); @@ -58,37 +57,31 @@ extern void GLAPIENTRY _mesa_ListBase( GLuint base ); extern void GLAPIENTRY _mesa_NewList( GLuint list, GLenum mode ); -extern void _mesa_init_dlist_table( struct _glapi_table *table ); +extern void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists ); -extern void _mesa_save_error( GLcontext *ctx, GLenum error, const char *s ); +extern void GLAPIENTRY _mesa_save_CallList( GLuint list ); + + + +extern void _mesa_init_dlist_table( struct _glapi_table *table ); extern void _mesa_compile_error( GLcontext *ctx, GLenum error, const char *s ); -extern void *_mesa_alloc_instruction( GLcontext *ctx, int opcode, GLint sz ); +extern void *_mesa_alloc_instruction(GLcontext *ctx, GLuint opcode, GLuint sz); extern GLint _mesa_alloc_opcode( GLcontext *ctx, GLuint sz, void (*execute)( GLcontext *, void * ), void (*destroy)( GLcontext *, void * ), void (*print)( GLcontext *, void * ) ); -extern void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, - GLint j1, GLint j2 ); -extern void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 ); -extern void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists ); -extern void GLAPIENTRY _mesa_save_CallList( GLuint list ); extern void _mesa_init_display_list( GLcontext * ctx ); + extern void _mesa_save_vtxfmt_init( GLvertexformat *vfmt ); #else -/** No-op */ -#define _mesa_init_lists() ((void)0) - -/** No-op */ -#define _mesa_destroy_list(c,l) ((void)0) - /** No-op */ #define _mesa_init_dlist_table(t,ts) ((void)0) diff --git a/src/kits/opengl/mesa/main/drawpix.c b/src/kits/opengl/mesa/main/drawpix.c index 6f7cae9ef5..c82abccc41 100644 --- a/src/kits/opengl/mesa/main/drawpix.c +++ b/src/kits/opengl/mesa/main/drawpix.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -24,13 +24,117 @@ #include "glheader.h" #include "imports.h" -#include "colormac.h" #include "context.h" #include "drawpix.h" #include "feedback.h" -#include "macros.h" +#include "framebuffer.h" +#include "image.h" #include "state.h" -#include "mtypes.h" + + +/** + * Do error checking of the format/type parameters to glReadPixels and + * glDrawPixels. + * \param drawing if GL_TRUE do checking for DrawPixels, else do checking + * for ReadPixels. + * \return GL_TRUE if error detected, GL_FALSE if no errors + */ +static GLboolean +error_check_format_type(GLcontext *ctx, GLenum format, GLenum type, + GLboolean drawing) +{ + const char *readDraw = drawing ? "Draw" : "Read"; + + if (ctx->Extensions.EXT_packed_depth_stencil + && type == GL_UNSIGNED_INT_24_8_EXT + && format != GL_DEPTH_STENCIL_EXT) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(format is not GL_DEPTH_STENCIL_EXT)", readDraw); + return GL_TRUE; + } + + /* basic combinations test */ + if (!_mesa_is_legal_format_and_type(ctx, format, type)) { + _mesa_error(ctx, GL_INVALID_ENUM, + "gl%sPixels(format or type)", readDraw); + return GL_TRUE; + } + + /* additional checks */ + switch (format) { + case GL_RED: + case GL_GREEN: + case GL_BLUE: + case GL_ALPHA: + case GL_LUMINANCE: + case GL_LUMINANCE_ALPHA: + case GL_RGB: + case GL_BGR: + case GL_RGBA: + case GL_BGRA: + case GL_ABGR_EXT: + if (drawing && !ctx->Visual.rgbMode) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glDrawPixels(drawing RGB pixels into color index buffer)"); + return GL_TRUE; + } + if (!drawing && !_mesa_dest_buffer_exists(ctx, GL_COLOR)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(no color buffer)"); + return GL_TRUE; + } + break; + case GL_COLOR_INDEX: + if (!drawing && ctx->Visual.rgbMode) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(reading color index format from RGB buffer)"); + return GL_TRUE; + } + if (!drawing && !_mesa_dest_buffer_exists(ctx, GL_COLOR)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(no color buffer)"); + return GL_TRUE; + } + break; + case GL_STENCIL_INDEX: + if ((drawing && !_mesa_dest_buffer_exists(ctx, format)) || + (!drawing && !_mesa_source_buffer_exists(ctx, format))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(no stencil buffer)", readDraw); + return GL_TRUE; + } + break; + case GL_DEPTH_COMPONENT: + if ((drawing && !_mesa_dest_buffer_exists(ctx, format)) || + (!drawing && !_mesa_source_buffer_exists(ctx, format))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(no depth buffer)", readDraw); + return GL_TRUE; + } + break; + case GL_DEPTH_STENCIL_EXT: + if (!ctx->Extensions.EXT_packed_depth_stencil || + type != GL_UNSIGNED_INT_24_8_EXT) { + _mesa_error(ctx, GL_INVALID_ENUM, "gl%sPixels(type)", readDraw); + return GL_TRUE; + } + if ((drawing && !_mesa_dest_buffer_exists(ctx, format)) || + (!drawing && !_mesa_source_buffer_exists(ctx, format))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(no depth or stencil buffer)", readDraw); + return GL_TRUE; + } + break; + default: + /* this should have been caught in _mesa_is_legal_format_type() */ + _mesa_problem(ctx, "unexpected format in _mesa_%sPixels", readDraw); + return GL_TRUE; + } + + /* no errors */ + return GL_FALSE; +} + #if _HAVE_FULL_GL @@ -45,51 +149,56 @@ _mesa_DrawPixels( GLsizei width, GLsizei height, GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + if (width < 0 || height < 0) { + _mesa_error( ctx, GL_INVALID_VALUE, "glDrawPixels(width or height < 0" ); + return; + } + + if (ctx->NewState) { + _mesa_update_state(ctx); + } + if (ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled) { _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawPixels (invalid fragment program)"); return; } - if (width < 0 || height < 0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glDrawPixels(width or height < 0" ); + if (error_check_format_type(ctx, format, type, GL_TRUE)) { + /* found an error */ return; } - if (ctx->RenderMode==GL_RENDER) { - GLint x, y; - if (!ctx->Current.RasterPosValid) { - return; - } + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glDrawPixels(incomplete framebuffer)" ); + return; + } - if (ctx->NewState) { - _mesa_update_state(ctx); - } + if (!ctx->Current.RasterPosValid) { + return; + } + if (ctx->RenderMode == GL_RENDER) { /* Round, to satisfy conformance tests (matches SGI's OpenGL) */ - x = IROUND(ctx->Current.RasterPos[0]); - y = IROUND(ctx->Current.RasterPos[1]); - - ctx->OcclusionResult = GL_TRUE; + GLint x = IROUND(ctx->Current.RasterPos[0]); + GLint y = IROUND(ctx->Current.RasterPos[1]); ctx->Driver.DrawPixels(ctx, x, y, width, height, format, type, &ctx->Unpack, pixels); } - else if (ctx->RenderMode==GL_FEEDBACK) { + else if (ctx->RenderMode == GL_FEEDBACK) { /* Feedback the current raster pos info */ - if (ctx->Current.RasterPosValid) { - FLUSH_CURRENT( ctx, 0 ); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); - _mesa_feedback_vertex( ctx, - ctx->Current.RasterPos, - ctx->Current.RasterColor, - ctx->Current.RasterIndex, - ctx->Current.RasterTexCoords[0] ); - } + FLUSH_CURRENT( ctx, 0 ); + FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); + _mesa_feedback_vertex( ctx, + ctx->Current.RasterPos, + ctx->Current.RasterColor, + ctx->Current.RasterIndex, + ctx->Current.RasterTexCoords[0] ); } - else if (ctx->RenderMode==GL_SELECT) { - if (ctx->Current.RasterPosValid) { - _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] ); - } + else { + ASSERT(ctx->RenderMode == GL_SELECT); + /* Do nothing. See OpenGL Spec, Appendix B, Corollary 6. */ } } @@ -99,9 +208,12 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height, GLenum type ) { GET_CURRENT_CONTEXT(ctx); - GLint destx, desty; ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + if (ctx->NewState) { + _mesa_update_state(ctx); + } + if (ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled) { _mesa_error(ctx, GL_INVALID_OPERATION, "glCopyPixels (invalid fragment program)"); @@ -109,42 +221,47 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height, } if (width < 0 || height < 0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glCopyPixels(width or height < 0)" ); + _mesa_error(ctx, GL_INVALID_VALUE, "glCopyPixels(width or height < 0)"); return; } - if (ctx->NewState) { - _mesa_update_state(ctx); + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT || + ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glCopyPixels(incomplete framebuffer)" ); + return; } - if (ctx->RenderMode==GL_RENDER) { - /* Destination of copy: */ - if (!ctx->Current.RasterPosValid) { - return; - } + if (!_mesa_source_buffer_exists(ctx, type) || + !_mesa_dest_buffer_exists(ctx, type)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyPixels(missing source or dest buffer)"); + return; + } - /* Round, to satisfy conformance tests (matches SGI's OpenGL) */ - destx = IROUND(ctx->Current.RasterPos[0]); - desty = IROUND(ctx->Current.RasterPos[1]); - - ctx->OcclusionResult = GL_TRUE; + if (!ctx->Current.RasterPosValid) { + return; + } + if (ctx->RenderMode == GL_RENDER) { + /* Round to satisfy conformance tests (matches SGI's OpenGL) */ + GLint destx = IROUND(ctx->Current.RasterPos[0]); + GLint desty = IROUND(ctx->Current.RasterPos[1]); ctx->Driver.CopyPixels( ctx, srcx, srcy, width, height, destx, desty, type ); } else if (ctx->RenderMode == GL_FEEDBACK) { - if (ctx->Current.RasterPosValid) { - FLUSH_CURRENT( ctx, 0 ); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_COPY_PIXEL_TOKEN ); - _mesa_feedback_vertex( ctx, - ctx->Current.RasterPos, - ctx->Current.RasterColor, - ctx->Current.RasterIndex, - ctx->Current.RasterTexCoords[0] ); - } + FLUSH_CURRENT( ctx, 0 ); + FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_COPY_PIXEL_TOKEN ); + _mesa_feedback_vertex( ctx, + ctx->Current.RasterPos, + ctx->Current.RasterColor, + ctx->Current.RasterIndex, + ctx->Current.RasterTexCoords[0] ); } - else if (ctx->RenderMode == GL_SELECT) { - _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] ); + else { + ASSERT(ctx->RenderMode == GL_SELECT); + /* Do nothing. See OpenGL Spec, Appendix B, Corollary 6. */ } } @@ -168,6 +285,22 @@ _mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, if (ctx->NewState) _mesa_update_state(ctx); + if (error_check_format_type(ctx, format, type, GL_FALSE)) { + /* found an error */ + return; + } + + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glReadPixels(incomplete framebuffer)" ); + return; + } + + if (!_mesa_source_buffer_exists(ctx, format)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(no readbuffer)"); + return; + } + ctx->Driver.ReadPixels(ctx, x, y, width, height, format, type, &ctx->Pack, pixels); } @@ -182,48 +315,52 @@ _mesa_Bitmap( GLsizei width, GLsizei height, GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + if (width < 0 || height < 0) { + _mesa_error( ctx, GL_INVALID_VALUE, "glBitmap(width or height < 0)" ); + return; + } + + if (!ctx->Current.RasterPosValid) { + return; /* do nothing */ + } + + if (ctx->NewState) { + _mesa_update_state(ctx); + } + if (ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBitmap (invalid fragment program)"); return; } - if (width < 0 || height < 0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glBitmap(width or height < 0)" ); + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glBitmap(incomplete framebuffer)"); return; } - if (ctx->Current.RasterPosValid == GL_FALSE) { - return; /* do nothing */ - } - - if (ctx->RenderMode==GL_RENDER) { - /* Truncate, to satisfy conformance tests (matches SGI's OpenGL). */ - GLint x = IFLOOR(ctx->Current.RasterPos[0] - xorig); - GLint y = IFLOOR(ctx->Current.RasterPos[1] - yorig); - - if (ctx->NewState) { - _mesa_update_state(ctx); + if (ctx->RenderMode == GL_RENDER) { + if (bitmap) { + /* Truncate, to satisfy conformance tests (matches SGI's OpenGL). */ + GLint x = IFLOOR(ctx->Current.RasterPos[0] - xorig); + GLint y = IFLOOR(ctx->Current.RasterPos[1] - yorig); + ctx->Driver.Bitmap( ctx, x, y, width, height, &ctx->Unpack, bitmap ); } - - ctx->OcclusionResult = GL_TRUE; - ctx->Driver.Bitmap( ctx, x, y, width, height, &ctx->Unpack, bitmap ); } #if _HAVE_FULL_GL - else if (ctx->RenderMode==GL_FEEDBACK) { - if (ctx->Current.RasterPosValid) { - FLUSH_CURRENT(ctx, 0); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_BITMAP_TOKEN ); - _mesa_feedback_vertex( ctx, - ctx->Current.RasterPos, - ctx->Current.RasterColor, - ctx->Current.RasterIndex, - ctx->Current.RasterTexCoords[0] ); - } + else if (ctx->RenderMode == GL_FEEDBACK) { + FLUSH_CURRENT(ctx, 0); + FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_BITMAP_TOKEN ); + _mesa_feedback_vertex( ctx, + ctx->Current.RasterPos, + ctx->Current.RasterColor, + ctx->Current.RasterIndex, + ctx->Current.RasterTexCoords[0] ); } else { ASSERT(ctx->RenderMode == GL_SELECT); - /* Bitmaps don't generate selection hits. See appendix B of 1.1 spec. */ + /* Do nothing. See OpenGL Spec, Appendix B, Corollary 6. */ } #endif @@ -257,41 +394,41 @@ _mesa_DrawDepthPixelsMESA( GLsizei width, GLsizei height, return; } - if (ctx->RenderMode==GL_RENDER) { - GLint x, y; - if (!colors || !depths || !ctx->Current.RasterPosValid) { - return; - } + if (!ctx->Current.RasterPosValid) { + return; + } - if (ctx->NewState) { - _mesa_update_state(ctx); - } + if (ctx->NewState) { + _mesa_update_state(ctx); + } + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glDrawDepthPixelsMESA(incomplete framebuffer)"); + return; + } + + if (ctx->RenderMode == GL_RENDER) { /* Round, to satisfy conformance tests (matches SGI's OpenGL) */ - x = IROUND(ctx->Current.RasterPos[0]); - y = IROUND(ctx->Current.RasterPos[1]); - - ctx->OcclusionResult = GL_TRUE; + GLint x = IROUND(ctx->Current.RasterPos[0]); + GLint y = IROUND(ctx->Current.RasterPos[1]); ctx->Driver.DrawDepthPixelsMESA(ctx, x, y, width, height, colorFormat, colorType, colors, depthType, depths, &ctx->Unpack); } - else if (ctx->RenderMode==GL_FEEDBACK) { + else if (ctx->RenderMode == GL_FEEDBACK) { /* Feedback the current raster pos info */ - if (ctx->Current.RasterPosValid) { - FLUSH_CURRENT( ctx, 0 ); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); - _mesa_feedback_vertex( ctx, - ctx->Current.RasterPos, - ctx->Current.RasterColor, - ctx->Current.RasterIndex, - ctx->Current.RasterTexCoords[0] ); - } + FLUSH_CURRENT( ctx, 0 ); + FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); + _mesa_feedback_vertex( ctx, + ctx->Current.RasterPos, + ctx->Current.RasterColor, + ctx->Current.RasterIndex, + ctx->Current.RasterTexCoords[0] ); } - else if (ctx->RenderMode==GL_SELECT) { - if (ctx->Current.RasterPosValid) { - _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] ); - } + else { + ASSERT(ctx->RenderMode == GL_SELECT); + /* Do nothing. See OpenGL Spec, Appendix B, Corollary 6. */ } } diff --git a/src/kits/opengl/mesa/main/enable.c b/src/kits/opengl/mesa/main/enable.c index f53ae05d17..91268b596d 100644 --- a/src/kits/opengl/mesa/main/enable.c +++ b/src/kits/opengl/mesa/main/enable.c @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -57,35 +57,35 @@ client_state( GLcontext *ctx, GLenum cap, GLboolean state ) switch (cap) { case GL_VERTEX_ARRAY: - var = &ctx->Array.Vertex.Enabled; + var = &ctx->Array.ArrayObj->Vertex.Enabled; flag = _NEW_ARRAY_VERTEX; break; case GL_NORMAL_ARRAY: - var = &ctx->Array.Normal.Enabled; + var = &ctx->Array.ArrayObj->Normal.Enabled; flag = _NEW_ARRAY_NORMAL; break; case GL_COLOR_ARRAY: - var = &ctx->Array.Color.Enabled; + var = &ctx->Array.ArrayObj->Color.Enabled; flag = _NEW_ARRAY_COLOR0; break; case GL_INDEX_ARRAY: - var = &ctx->Array.Index.Enabled; + var = &ctx->Array.ArrayObj->Index.Enabled; flag = _NEW_ARRAY_INDEX; break; case GL_TEXTURE_COORD_ARRAY: - var = &ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled; + var = &ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled; flag = _NEW_ARRAY_TEXCOORD(ctx->Array.ActiveTexture); break; case GL_EDGE_FLAG_ARRAY: - var = &ctx->Array.EdgeFlag.Enabled; + var = &ctx->Array.ArrayObj->EdgeFlag.Enabled; flag = _NEW_ARRAY_EDGEFLAG; break; case GL_FOG_COORDINATE_ARRAY_EXT: - var = &ctx->Array.FogCoord.Enabled; + var = &ctx->Array.ArrayObj->FogCoord.Enabled; flag = _NEW_ARRAY_FOGCOORD; break; case GL_SECONDARY_COLOR_ARRAY_EXT: - var = &ctx->Array.SecondaryColor.Enabled; + var = &ctx->Array.ArrayObj->SecondaryColor.Enabled; flag = _NEW_ARRAY_COLOR1; break; @@ -109,7 +109,7 @@ client_state( GLcontext *ctx, GLenum cap, GLboolean state ) CHECK_EXTENSION(NV_vertex_program, cap); { GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV; - var = &ctx->Array.VertexAttrib[n].Enabled; + var = &ctx->Array.ArrayObj->VertexAttrib[n].Enabled; flag = _NEW_ARRAY_ATTRIB(n); } break; @@ -129,9 +129,9 @@ client_state( GLcontext *ctx, GLenum cap, GLboolean state ) *var = state; if (state) - ctx->Array._Enabled |= flag; + ctx->Array.ArrayObj->_Enabled |= flag; else - ctx->Array._Enabled &= ~flag; + ctx->Array.ArrayObj->_Enabled &= ~flag; if (ctx->Driver.Enable) { (*ctx->Driver.Enable)( ctx, cap, state ); @@ -232,12 +232,6 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) return; FLUSH_VERTICES(ctx, _NEW_COLOR); ctx->Color.BlendEnabled = state; - /* This is needed to support 1.1's RGB logic ops AND - * 1.0's blending logicops. - */ - ctx->Color._LogicOpEnabled = - (ctx->Color.ColorLogicOpEnabled || - (state && ctx->Color.BlendEquationRGB == GL_LOGIC_OP)); break; #if FEATURE_userclip case GL_CLIP_PLANE0: @@ -257,7 +251,7 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) if (state) { ctx->Transform.ClipPlanesEnabled |= (1 << p); - if (ctx->ProjectionMatrixStack.Top->flags & MAT_DIRTY) + if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top)) _math_matrix_analyse( ctx->ProjectionMatrixStack.Top ); /* This derived state also calculated in clip.c and @@ -301,7 +295,7 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) break; case GL_DEPTH_TEST: - if (state && ctx->Visual.depthBits==0) { + if (state && ctx->DrawBuffer->Visual.depthBits == 0) { _mesa_warning(ctx,"glEnable(GL_DEPTH_TEST) but no depth buffer"); return; } @@ -389,12 +383,6 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) return; FLUSH_VERTICES(ctx, _NEW_COLOR); ctx->Color.ColorLogicOpEnabled = state; - /* This is needed to support 1.1's RGB logic ops AND - * 1.0's blending logicops. - */ - ctx->Color._LogicOpEnabled = - (state || (ctx->Color.BlendEnabled && - ctx->Color.BlendEquationRGB == GL_LOGIC_OP)); break; case GL_MAP1_COLOR_4: if (ctx->Eval.Map1Color4 == state) @@ -575,7 +563,7 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) ctx->Texture.SharedPalette = state; break; case GL_STENCIL_TEST: - if (state && ctx->Visual.stencilBits==0) { + if (state && ctx->DrawBuffer->Visual.stencilBits == 0) { _mesa_warning(ctx, "glEnable(GL_STENCIL_TEST) but no stencil buffer"); return; @@ -591,7 +579,8 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) GLuint newenabled = texUnit->Enabled & ~TEXTURE_1D_BIT; if (state) newenabled |= TEXTURE_1D_BIT; - if (!ctx->Visual.rgbMode || texUnit->Enabled == newenabled) + if (!ctx->DrawBuffer->Visual.rgbMode + || texUnit->Enabled == newenabled) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); texUnit->Enabled = newenabled; @@ -603,7 +592,8 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) GLuint newenabled = texUnit->Enabled & ~TEXTURE_2D_BIT; if (state) newenabled |= TEXTURE_2D_BIT; - if (!ctx->Visual.rgbMode || texUnit->Enabled == newenabled) + if (!ctx->DrawBuffer->Visual.rgbMode + || texUnit->Enabled == newenabled) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); texUnit->Enabled = newenabled; @@ -615,7 +605,8 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) GLuint newenabled = texUnit->Enabled & ~TEXTURE_3D_BIT; if (state) newenabled |= TEXTURE_3D_BIT; - if (!ctx->Visual.rgbMode || texUnit->Enabled == newenabled) + if (!ctx->DrawBuffer->Visual.rgbMode + || texUnit->Enabled == newenabled) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); texUnit->Enabled = newenabled; @@ -684,37 +675,6 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) client_state( ctx, cap, state ); return; - /* GL_HP_occlusion_test */ - case GL_OCCLUSION_TEST_HP: - CHECK_EXTENSION(HP_occlusion_test, cap); - if (ctx->Depth.OcclusionTest == state) - return; - FLUSH_VERTICES(ctx, _NEW_DEPTH); - ctx->Depth.OcclusionTest = state; - if (state) - ctx->OcclusionResult = ctx->OcclusionResultSaved; - else - ctx->OcclusionResultSaved = ctx->OcclusionResult; - break; - - /* GL_SGIS_pixel_texture */ - case GL_PIXEL_TEXTURE_SGIS: - CHECK_EXTENSION(SGIS_pixel_texture, cap); - if (ctx->Pixel.PixelTextureEnabled == state) - return; - FLUSH_VERTICES(ctx, _NEW_PIXEL); - ctx->Pixel.PixelTextureEnabled = state; - break; - - /* GL_SGIX_pixel_texture */ - case GL_PIXEL_TEX_GEN_SGIX: - CHECK_EXTENSION(SGIX_pixel_texture, cap); - if (ctx->Pixel.PixelTextureEnabled == state) - return; - FLUSH_VERTICES(ctx, _NEW_PIXEL); - ctx->Pixel.PixelTextureEnabled = state; - break; - /* GL_SGI_color_table */ case GL_COLOR_TABLE_SGI: CHECK_EXTENSION(SGI_color_table, cap); @@ -777,7 +737,8 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) CHECK_EXTENSION(ARB_texture_cube_map, cap); if (state) newenabled |= TEXTURE_CUBE_BIT; - if (!ctx->Visual.rgbMode || texUnit->Enabled == newenabled) + if (!ctx->DrawBuffer->Visual.rgbMode + || texUnit->Enabled == newenabled) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); texUnit->Enabled = newenabled; @@ -786,7 +747,7 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) /* GL_EXT_secondary_color */ case GL_COLOR_SUM_EXT: - CHECK_EXTENSION(EXT_secondary_color, cap); + CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program, cap); if (ctx->Fog.ColorSumEnabled == state) return; FLUSH_VERTICES(ctx, _NEW_FOG); @@ -848,28 +809,30 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) ctx->Point.PointSprite = state; break; -#if FEATURE_NV_vertex_program - case GL_VERTEX_PROGRAM_NV: - CHECK_EXTENSION2(NV_vertex_program, ARB_vertex_program, cap); +#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program + case GL_VERTEX_PROGRAM_ARB: + CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap); if (ctx->VertexProgram.Enabled == state) return; FLUSH_VERTICES(ctx, _NEW_PROGRAM); ctx->VertexProgram.Enabled = state; break; - case GL_VERTEX_PROGRAM_POINT_SIZE_NV: - CHECK_EXTENSION2(NV_vertex_program, ARB_vertex_program, cap); + case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: + CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap); if (ctx->VertexProgram.PointSizeEnabled == state) return; FLUSH_VERTICES(ctx, _NEW_PROGRAM); ctx->VertexProgram.PointSizeEnabled = state; break; - case GL_VERTEX_PROGRAM_TWO_SIDE_NV: - CHECK_EXTENSION2(NV_vertex_program, ARB_vertex_program, cap); + case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: + CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap); if (ctx->VertexProgram.TwoSideEnabled == state) return; FLUSH_VERTICES(ctx, _NEW_PROGRAM); ctx->VertexProgram.TwoSideEnabled = state; break; +#endif +#if FEATURE_NV_vertex_program case GL_MAP1_VERTEX_ATTRIB0_4_NV: case GL_MAP1_VERTEX_ATTRIB1_4_NV: case GL_MAP1_VERTEX_ATTRIB2_4_NV: @@ -938,7 +901,8 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) CHECK_EXTENSION(NV_texture_rectangle, cap); if (state) newenabled |= TEXTURE_RECT_BIT; - if (!ctx->Visual.rgbMode || texUnit->Enabled == newenabled) + if (!ctx->DrawBuffer->Visual.rgbMode + || texUnit->Enabled == newenabled) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); texUnit->Enabled = newenabled; @@ -972,7 +936,7 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) /* GL_EXT_depth_bounds_test */ case GL_DEPTH_BOUNDS_TEST_EXT: CHECK_EXTENSION(EXT_depth_bounds_test, cap); - if (state && ctx->Visual.depthBits==0) { + if (state && ctx->DrawBuffer->Visual.depthBits == 0) { _mesa_warning(ctx, "glEnable(GL_DEPTH_BOUNDS_TEST_EXT) but no depth buffer"); return; @@ -1061,6 +1025,12 @@ _mesa_Disable( GLenum cap ) return GL_FALSE; \ } +#undef CHECK_EXTENSION2 +#define CHECK_EXTENSION2(EXT1, EXT2) \ + if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) { \ + _mesa_error(ctx, GL_INVALID_ENUM, "glIsEnabled"); \ + return GL_FALSE; \ + } /** * Test whether a capability is enabled. @@ -1224,23 +1194,23 @@ _mesa_IsEnabled( GLenum cap ) * CLIENT STATE!!! */ case GL_VERTEX_ARRAY: - return (ctx->Array.Vertex.Enabled != 0); + return (ctx->Array.ArrayObj->Vertex.Enabled != 0); case GL_NORMAL_ARRAY: - return (ctx->Array.Normal.Enabled != 0); + return (ctx->Array.ArrayObj->Normal.Enabled != 0); case GL_COLOR_ARRAY: - return (ctx->Array.Color.Enabled != 0); + return (ctx->Array.ArrayObj->Color.Enabled != 0); case GL_INDEX_ARRAY: - return (ctx->Array.Index.Enabled != 0); + return (ctx->Array.ArrayObj->Index.Enabled != 0); case GL_TEXTURE_COORD_ARRAY: - return (ctx->Array.TexCoord[ctx->Array.ActiveTexture].Enabled != 0); + return (ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled != 0); case GL_EDGE_FLAG_ARRAY: - return (ctx->Array.EdgeFlag.Enabled != 0); + return (ctx->Array.ArrayObj->EdgeFlag.Enabled != 0); case GL_FOG_COORDINATE_ARRAY_EXT: CHECK_EXTENSION(EXT_fog_coord); - return (ctx->Array.FogCoord.Enabled != 0); + return (ctx->Array.ArrayObj->FogCoord.Enabled != 0); case GL_SECONDARY_COLOR_ARRAY_EXT: CHECK_EXTENSION(EXT_secondary_color); - return (ctx->Array.SecondaryColor.Enabled != 0); + return (ctx->Array.ArrayObj->SecondaryColor.Enabled != 0); /* GL_EXT_histogram */ case GL_HISTOGRAM: @@ -1250,21 +1220,6 @@ _mesa_IsEnabled( GLenum cap ) CHECK_EXTENSION(EXT_histogram); return ctx->Pixel.MinMaxEnabled; - /* GL_HP_occlusion_test */ - case GL_OCCLUSION_TEST_HP: - CHECK_EXTENSION(HP_occlusion_test); - return ctx->Depth.OcclusionTest; - - /* GL_SGIS_pixel_texture */ - case GL_PIXEL_TEXTURE_SGIS: - CHECK_EXTENSION(SGIS_pixel_texture); - return ctx->Pixel.PixelTextureEnabled; - - /* GL_SGIX_pixel_texture */ - case GL_PIXEL_TEX_GEN_SGIX: - CHECK_EXTENSION(SGIX_pixel_texture); - return ctx->Pixel.PixelTextureEnabled; - /* GL_SGI_color_table */ case GL_COLOR_TABLE_SGI: CHECK_EXTENSION(SGI_color_table); @@ -1301,6 +1256,11 @@ _mesa_IsEnabled( GLenum cap ) return (texUnit->Enabled & TEXTURE_CUBE_BIT) ? GL_TRUE : GL_FALSE; } + /* GL_EXT_secondary_color */ + case GL_COLOR_SUM_EXT: + CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program); + return ctx->Fog.ColorSumEnabled; + /* GL_ARB_multisample */ case GL_MULTISAMPLE_ARB: CHECK_EXTENSION(ARB_multisample); @@ -1325,18 +1285,21 @@ _mesa_IsEnabled( GLenum cap ) /* GL_NV_point_sprite */ case GL_POINT_SPRITE_NV: + CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite) return ctx->Point.PointSprite; -#if FEATURE_NV_vertex_program - case GL_VERTEX_PROGRAM_NV: - CHECK_EXTENSION(NV_vertex_program); +#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program + case GL_VERTEX_PROGRAM_ARB: + CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program); return ctx->VertexProgram.Enabled; - case GL_VERTEX_PROGRAM_POINT_SIZE_NV: - CHECK_EXTENSION(NV_vertex_program); + case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: + CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program); return ctx->VertexProgram.PointSizeEnabled; - case GL_VERTEX_PROGRAM_TWO_SIDE_NV: - CHECK_EXTENSION(NV_vertex_program); + case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: + CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program); return ctx->VertexProgram.TwoSideEnabled; +#endif +#if FEATURE_NV_vertex_program case GL_VERTEX_ATTRIB_ARRAY0_NV: case GL_VERTEX_ATTRIB_ARRAY1_NV: case GL_VERTEX_ATTRIB_ARRAY2_NV: @@ -1356,7 +1319,7 @@ _mesa_IsEnabled( GLenum cap ) CHECK_EXTENSION(NV_vertex_program); { GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV; - return (ctx->Array.VertexAttrib[n].Enabled != 0); + return (ctx->Array.ArrayObj->VertexAttrib[n].Enabled != 0); } case GL_MAP1_VERTEX_ATTRIB0_4_NV: case GL_MAP1_VERTEX_ATTRIB1_4_NV: diff --git a/src/kits/opengl/mesa/main/enums.c b/src/kits/opengl/mesa/main/enums.c index 6fb57b2657..fc56809e97 100644 --- a/src/kits/opengl/mesa/main/enums.c +++ b/src/kits/opengl/mesa/main/enums.c @@ -1,989 +1,4833 @@ +/* DO NOT EDIT - This file generated automatically by gl_enums.py (from Mesa) script */ + /* - * Mesa 3-D graphics library - * Version: 6.3 - * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. - * + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. + * All Rights Reserved. + * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * the rights to use, copy, modify, merge, publish, distribute, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Author: - * Keith Whitwell + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL, + * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. */ - #include "glheader.h" #include "enums.h" #include "imports.h" - typedef struct { - const char *c; + size_t offset; int n; } enum_elt; -/** - * XXX We should auto-generate this with a Python script someday. - */ -static enum_elt all_enums[] = +LONGSTRING static const char enum_string_table[] = + "GL_2D\0" + "GL_2_BYTES\0" + "GL_3D\0" + "GL_3D_COLOR\0" + "GL_3D_COLOR_TEXTURE\0" + "GL_3_BYTES\0" + "GL_4D_COLOR_TEXTURE\0" + "GL_4_BYTES\0" + "GL_ACCUM\0" + "GL_ACCUM_ALPHA_BITS\0" + "GL_ACCUM_BLUE_BITS\0" + "GL_ACCUM_BUFFER_BIT\0" + "GL_ACCUM_CLEAR_VALUE\0" + "GL_ACCUM_GREEN_BITS\0" + "GL_ACCUM_RED_BITS\0" + "GL_ACTIVE_ATTRIBUTES\0" + "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH\0" + "GL_ACTIVE_STENCIL_FACE_EXT\0" + "GL_ACTIVE_TEXTURE\0" + "GL_ACTIVE_TEXTURE_ARB\0" + "GL_ACTIVE_UNIFORMS\0" + "GL_ACTIVE_UNIFORM_MAX_LENGTH\0" + "GL_ACTIVE_VERTEX_UNITS_ARB\0" + "GL_ADD\0" + "GL_ADD_SIGNED\0" + "GL_ADD_SIGNED_ARB\0" + "GL_ADD_SIGNED_EXT\0" + "GL_ALIASED_LINE_WIDTH_RANGE\0" + "GL_ALIASED_POINT_SIZE_RANGE\0" + "GL_ALL_ATTRIB_BITS\0" + "GL_ALL_CLIENT_ATTRIB_BITS\0" + "GL_ALPHA\0" + "GL_ALPHA12\0" + "GL_ALPHA12_EXT\0" + "GL_ALPHA16\0" + "GL_ALPHA16_EXT\0" + "GL_ALPHA4\0" + "GL_ALPHA4_EXT\0" + "GL_ALPHA8\0" + "GL_ALPHA8_EXT\0" + "GL_ALPHA_BIAS\0" + "GL_ALPHA_BITS\0" + "GL_ALPHA_SCALE\0" + "GL_ALPHA_TEST\0" + "GL_ALPHA_TEST_FUNC\0" + "GL_ALPHA_TEST_REF\0" + "GL_ALWAYS\0" + "GL_AMBIENT\0" + "GL_AMBIENT_AND_DIFFUSE\0" + "GL_AND\0" + "GL_AND_INVERTED\0" + "GL_AND_REVERSE\0" + "GL_ARRAY_BUFFER\0" + "GL_ARRAY_BUFFER_ARB\0" + "GL_ARRAY_BUFFER_BINDING\0" + "GL_ARRAY_BUFFER_BINDING_ARB\0" + "GL_ATTACHED_SHADERS\0" + "GL_ATTRIB_ARRAY_POINTER_NV\0" + "GL_ATTRIB_ARRAY_SIZE_NV\0" + "GL_ATTRIB_ARRAY_STRIDE_NV\0" + "GL_ATTRIB_ARRAY_TYPE_NV\0" + "GL_ATTRIB_STACK_DEPTH\0" + "GL_AUTO_NORMAL\0" + "GL_AUX0\0" + "GL_AUX1\0" + "GL_AUX2\0" + "GL_AUX3\0" + "GL_AUX_BUFFERS\0" + "GL_BACK\0" + "GL_BACK_LEFT\0" + "GL_BACK_RIGHT\0" + "GL_BGR\0" + "GL_BGRA\0" + "GL_BITMAP\0" + "GL_BITMAP_TOKEN\0" + "GL_BLEND\0" + "GL_BLEND_COLOR\0" + "GL_BLEND_COLOR_EXT\0" + "GL_BLEND_DST\0" + "GL_BLEND_DST_ALPHA\0" + "GL_BLEND_DST_RGB\0" + "GL_BLEND_EQUATION\0" + "GL_BLEND_EQUATION_ALPHA\0" + "GL_BLEND_EQUATION_ALPHA_EXT\0" + "GL_BLEND_EQUATION_EXT\0" + "GL_BLEND_EQUATION_RGB_EXT\0" + "GL_BLEND_SRC\0" + "GL_BLEND_SRC_ALPHA\0" + "GL_BLEND_SRC_RGB\0" + "GL_BLUE\0" + "GL_BLUE_BIAS\0" + "GL_BLUE_BITS\0" + "GL_BLUE_SCALE\0" + "GL_BOOL\0" + "GL_BOOL_ARB\0" + "GL_BOOL_VEC2\0" + "GL_BOOL_VEC2_ARB\0" + "GL_BOOL_VEC3\0" + "GL_BOOL_VEC3_ARB\0" + "GL_BOOL_VEC4\0" + "GL_BOOL_VEC4_ARB\0" + "GL_BUFFER_ACCESS\0" + "GL_BUFFER_ACCESS_ARB\0" + "GL_BUFFER_MAPPED\0" + "GL_BUFFER_MAPPED_ARB\0" + "GL_BUFFER_MAP_POINTER\0" + "GL_BUFFER_MAP_POINTER_ARB\0" + "GL_BUFFER_SIZE\0" + "GL_BUFFER_SIZE_ARB\0" + "GL_BUFFER_USAGE\0" + "GL_BUFFER_USAGE_ARB\0" + "GL_BYTE\0" + "GL_C3F_V3F\0" + "GL_C4F_N3F_V3F\0" + "GL_C4UB_V2F\0" + "GL_C4UB_V3F\0" + "GL_CCW\0" + "GL_CLAMP\0" + "GL_CLAMP_TO_BORDER\0" + "GL_CLAMP_TO_BORDER_ARB\0" + "GL_CLAMP_TO_BORDER_SGIS\0" + "GL_CLAMP_TO_EDGE\0" + "GL_CLAMP_TO_EDGE_SGIS\0" + "GL_CLEAR\0" + "GL_CLIENT_ACTIVE_TEXTURE\0" + "GL_CLIENT_ACTIVE_TEXTURE_ARB\0" + "GL_CLIENT_ALL_ATTRIB_BITS\0" + "GL_CLIENT_ATTRIB_STACK_DEPTH\0" + "GL_CLIENT_PIXEL_STORE_BIT\0" + "GL_CLIENT_VERTEX_ARRAY_BIT\0" + "GL_CLIP_PLANE0\0" + "GL_CLIP_PLANE1\0" + "GL_CLIP_PLANE2\0" + "GL_CLIP_PLANE3\0" + "GL_CLIP_PLANE4\0" + "GL_CLIP_PLANE5\0" + "GL_CLIP_VOLUME_CLIPPING_HINT_EXT\0" + "GL_COEFF\0" + "GL_COLOR\0" + "GL_COLOR_ARRAY\0" + "GL_COLOR_ARRAY_BUFFER_BINDING\0" + "GL_COLOR_ARRAY_BUFFER_BINDING_ARB\0" + "GL_COLOR_ARRAY_POINTER\0" + "GL_COLOR_ARRAY_SIZE\0" + "GL_COLOR_ARRAY_STRIDE\0" + "GL_COLOR_ARRAY_TYPE\0" + "GL_COLOR_ATTACHMENT0_EXT\0" + "GL_COLOR_ATTACHMENT10_EXT\0" + "GL_COLOR_ATTACHMENT11_EXT\0" + "GL_COLOR_ATTACHMENT12_EXT\0" + "GL_COLOR_ATTACHMENT13_EXT\0" + "GL_COLOR_ATTACHMENT14_EXT\0" + "GL_COLOR_ATTACHMENT15_EXT\0" + "GL_COLOR_ATTACHMENT1_EXT\0" + "GL_COLOR_ATTACHMENT2_EXT\0" + "GL_COLOR_ATTACHMENT3_EXT\0" + "GL_COLOR_ATTACHMENT4_EXT\0" + "GL_COLOR_ATTACHMENT5_EXT\0" + "GL_COLOR_ATTACHMENT6_EXT\0" + "GL_COLOR_ATTACHMENT7_EXT\0" + "GL_COLOR_ATTACHMENT8_EXT\0" + "GL_COLOR_ATTACHMENT9_EXT\0" + "GL_COLOR_BUFFER_BIT\0" + "GL_COLOR_CLEAR_VALUE\0" + "GL_COLOR_INDEX\0" + "GL_COLOR_INDEXES\0" + "GL_COLOR_LOGIC_OP\0" + "GL_COLOR_MATERIAL\0" + "GL_COLOR_MATERIAL_FACE\0" + "GL_COLOR_MATERIAL_PARAMETER\0" + "GL_COLOR_MATRIX\0" + "GL_COLOR_MATRIX_SGI\0" + "GL_COLOR_MATRIX_STACK_DEPTH\0" + "GL_COLOR_MATRIX_STACK_DEPTH_SGI\0" + "GL_COLOR_SUM\0" + "GL_COLOR_SUM_ARB\0" + "GL_COLOR_TABLE\0" + "GL_COLOR_TABLE_ALPHA_SIZE\0" + "GL_COLOR_TABLE_ALPHA_SIZE_EXT\0" + "GL_COLOR_TABLE_ALPHA_SIZE_SGI\0" + "GL_COLOR_TABLE_BIAS\0" + "GL_COLOR_TABLE_BIAS_SGI\0" + "GL_COLOR_TABLE_BLUE_SIZE\0" + "GL_COLOR_TABLE_BLUE_SIZE_EXT\0" + "GL_COLOR_TABLE_BLUE_SIZE_SGI\0" + "GL_COLOR_TABLE_FORMAT\0" + "GL_COLOR_TABLE_FORMAT_EXT\0" + "GL_COLOR_TABLE_FORMAT_SGI\0" + "GL_COLOR_TABLE_GREEN_SIZE\0" + "GL_COLOR_TABLE_GREEN_SIZE_EXT\0" + "GL_COLOR_TABLE_GREEN_SIZE_SGI\0" + "GL_COLOR_TABLE_INTENSITY_SIZE\0" + "GL_COLOR_TABLE_INTENSITY_SIZE_EXT\0" + "GL_COLOR_TABLE_INTENSITY_SIZE_SGI\0" + "GL_COLOR_TABLE_LUMINANCE_SIZE\0" + "GL_COLOR_TABLE_LUMINANCE_SIZE_EXT\0" + "GL_COLOR_TABLE_LUMINANCE_SIZE_SGI\0" + "GL_COLOR_TABLE_RED_SIZE\0" + "GL_COLOR_TABLE_RED_SIZE_EXT\0" + "GL_COLOR_TABLE_RED_SIZE_SGI\0" + "GL_COLOR_TABLE_SCALE\0" + "GL_COLOR_TABLE_SCALE_SGI\0" + "GL_COLOR_TABLE_WIDTH\0" + "GL_COLOR_TABLE_WIDTH_EXT\0" + "GL_COLOR_TABLE_WIDTH_SGI\0" + "GL_COLOR_WRITEMASK\0" + "GL_COMBINE\0" + "GL_COMBINE4\0" + "GL_COMBINE_ALPHA\0" + "GL_COMBINE_ALPHA_ARB\0" + "GL_COMBINE_ALPHA_EXT\0" + "GL_COMBINE_ARB\0" + "GL_COMBINE_EXT\0" + "GL_COMBINE_RGB\0" + "GL_COMBINE_RGB_ARB\0" + "GL_COMBINE_RGB_EXT\0" + "GL_COMPARE_R_TO_TEXTURE\0" + "GL_COMPARE_R_TO_TEXTURE_ARB\0" + "GL_COMPILE\0" + "GL_COMPILE_AND_EXECUTE\0" + "GL_COMPILE_STATUS\0" + "GL_COMPRESSED_ALPHA\0" + "GL_COMPRESSED_ALPHA_ARB\0" + "GL_COMPRESSED_INTENSITY\0" + "GL_COMPRESSED_INTENSITY_ARB\0" + "GL_COMPRESSED_LUMINANCE\0" + "GL_COMPRESSED_LUMINANCE_ALPHA\0" + "GL_COMPRESSED_LUMINANCE_ALPHA_ARB\0" + "GL_COMPRESSED_LUMINANCE_ARB\0" + "GL_COMPRESSED_RGB\0" + "GL_COMPRESSED_RGBA\0" + "GL_COMPRESSED_RGBA_ARB\0" + "GL_COMPRESSED_RGBA_FXT1_3DFX\0" + "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT\0" + "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT\0" + "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT\0" + "GL_COMPRESSED_RGB_ARB\0" + "GL_COMPRESSED_RGB_FXT1_3DFX\0" + "GL_COMPRESSED_RGB_S3TC_DXT1_EXT\0" + "GL_COMPRESSED_TEXTURE_FORMATS\0" + "GL_CONSTANT\0" + "GL_CONSTANT_ALPHA\0" + "GL_CONSTANT_ALPHA_EXT\0" + "GL_CONSTANT_ARB\0" + "GL_CONSTANT_ATTENUATION\0" + "GL_CONSTANT_BORDER_HP\0" + "GL_CONSTANT_COLOR\0" + "GL_CONSTANT_COLOR_EXT\0" + "GL_CONSTANT_EXT\0" + "GL_CONVOLUTION_1D\0" + "GL_CONVOLUTION_2D\0" + "GL_CONVOLUTION_BORDER_COLOR\0" + "GL_CONVOLUTION_BORDER_COLOR_HP\0" + "GL_CONVOLUTION_BORDER_MODE\0" + "GL_CONVOLUTION_BORDER_MODE_EXT\0" + "GL_CONVOLUTION_FILTER_BIAS\0" + "GL_CONVOLUTION_FILTER_BIAS_EXT\0" + "GL_CONVOLUTION_FILTER_SCALE\0" + "GL_CONVOLUTION_FILTER_SCALE_EXT\0" + "GL_CONVOLUTION_FORMAT\0" + "GL_CONVOLUTION_FORMAT_EXT\0" + "GL_CONVOLUTION_HEIGHT\0" + "GL_CONVOLUTION_HEIGHT_EXT\0" + "GL_CONVOLUTION_WIDTH\0" + "GL_CONVOLUTION_WIDTH_EXT\0" + "GL_COORD_REPLACE\0" + "GL_COORD_REPLACE_ARB\0" + "GL_COORD_REPLACE_NV\0" + "GL_COPY\0" + "GL_COPY_INVERTED\0" + "GL_COPY_PIXEL_TOKEN\0" + "GL_CULL_FACE\0" + "GL_CULL_FACE_MODE\0" + "GL_CULL_VERTEX_EXT\0" + "GL_CULL_VERTEX_EYE_POSITION_EXT\0" + "GL_CULL_VERTEX_OBJECT_POSITION_EXT\0" + "GL_CURRENT_ATTRIB_NV\0" + "GL_CURRENT_BIT\0" + "GL_CURRENT_COLOR\0" + "GL_CURRENT_FOG_COORD\0" + "GL_CURRENT_FOG_COORDINATE\0" + "GL_CURRENT_INDEX\0" + "GL_CURRENT_MATRIX_ARB\0" + "GL_CURRENT_MATRIX_INDEX_ARB\0" + "GL_CURRENT_MATRIX_NV\0" + "GL_CURRENT_MATRIX_STACK_DEPTH_ARB\0" + "GL_CURRENT_MATRIX_STACK_DEPTH_NV\0" + "GL_CURRENT_NORMAL\0" + "GL_CURRENT_PALETTE_MATRIX_ARB\0" + "GL_CURRENT_PROGRAM\0" + "GL_CURRENT_QUERY\0" + "GL_CURRENT_QUERY_ARB\0" + "GL_CURRENT_RASTER_COLOR\0" + "GL_CURRENT_RASTER_DISTANCE\0" + "GL_CURRENT_RASTER_INDEX\0" + "GL_CURRENT_RASTER_POSITION\0" + "GL_CURRENT_RASTER_POSITION_VALID\0" + "GL_CURRENT_RASTER_TEXTURE_COORDS\0" + "GL_CURRENT_SECONDARY_COLOR\0" + "GL_CURRENT_TEXTURE_COORDS\0" + "GL_CURRENT_VERTEX_ATTRIB\0" + "GL_CURRENT_VERTEX_ATTRIB_ARB\0" + "GL_CURRENT_WEIGHT_ARB\0" + "GL_CW\0" + "GL_DEBUG_ASSERT_MESA\0" + "GL_DEBUG_OBJECT_MESA\0" + "GL_DEBUG_PRINT_MESA\0" + "GL_DECAL\0" + "GL_DECR\0" + "GL_DECR_WRAP\0" + "GL_DECR_WRAP_EXT\0" + "GL_DELETE_STATUS\0" + "GL_DEPTH\0" + "GL_DEPTH_ATTACHMENT_EXT\0" + "GL_DEPTH_BIAS\0" + "GL_DEPTH_BITS\0" + "GL_DEPTH_BOUNDS_EXT\0" + "GL_DEPTH_BOUNDS_TEST_EXT\0" + "GL_DEPTH_BUFFER_BIT\0" + "GL_DEPTH_CLAMP_NV\0" + "GL_DEPTH_CLEAR_VALUE\0" + "GL_DEPTH_COMPONENT\0" + "GL_DEPTH_COMPONENT16\0" + "GL_DEPTH_COMPONENT16_ARB\0" + "GL_DEPTH_COMPONENT16_SGIX\0" + "GL_DEPTH_COMPONENT24\0" + "GL_DEPTH_COMPONENT24_ARB\0" + "GL_DEPTH_COMPONENT24_SGIX\0" + "GL_DEPTH_COMPONENT32\0" + "GL_DEPTH_COMPONENT32_ARB\0" + "GL_DEPTH_COMPONENT32_SGIX\0" + "GL_DEPTH_FUNC\0" + "GL_DEPTH_RANGE\0" + "GL_DEPTH_SCALE\0" + "GL_DEPTH_STENCIL_NV\0" + "GL_DEPTH_STENCIL_TO_BGRA_NV\0" + "GL_DEPTH_STENCIL_TO_RGBA_NV\0" + "GL_DEPTH_TEST\0" + "GL_DEPTH_TEXTURE_MODE\0" + "GL_DEPTH_TEXTURE_MODE_ARB\0" + "GL_DEPTH_WRITEMASK\0" + "GL_DIFFUSE\0" + "GL_DITHER\0" + "GL_DOMAIN\0" + "GL_DONT_CARE\0" + "GL_DOT3_RGB\0" + "GL_DOT3_RGBA\0" + "GL_DOT3_RGBA_ARB\0" + "GL_DOT3_RGBA_EXT\0" + "GL_DOT3_RGB_ARB\0" + "GL_DOT3_RGB_EXT\0" + "GL_DOUBLE\0" + "GL_DOUBLEBUFFER\0" + "GL_DRAW_BUFFER\0" + "GL_DRAW_BUFFER0\0" + "GL_DRAW_BUFFER0_ARB\0" + "GL_DRAW_BUFFER0_ATI\0" + "GL_DRAW_BUFFER1\0" + "GL_DRAW_BUFFER10\0" + "GL_DRAW_BUFFER10_ARB\0" + "GL_DRAW_BUFFER10_ATI\0" + "GL_DRAW_BUFFER11\0" + "GL_DRAW_BUFFER11_ARB\0" + "GL_DRAW_BUFFER11_ATI\0" + "GL_DRAW_BUFFER12\0" + "GL_DRAW_BUFFER12_ARB\0" + "GL_DRAW_BUFFER12_ATI\0" + "GL_DRAW_BUFFER13\0" + "GL_DRAW_BUFFER13_ARB\0" + "GL_DRAW_BUFFER13_ATI\0" + "GL_DRAW_BUFFER14\0" + "GL_DRAW_BUFFER14_ARB\0" + "GL_DRAW_BUFFER14_ATI\0" + "GL_DRAW_BUFFER15\0" + "GL_DRAW_BUFFER15_ARB\0" + "GL_DRAW_BUFFER15_ATI\0" + "GL_DRAW_BUFFER1_ARB\0" + "GL_DRAW_BUFFER1_ATI\0" + "GL_DRAW_BUFFER2\0" + "GL_DRAW_BUFFER2_ARB\0" + "GL_DRAW_BUFFER2_ATI\0" + "GL_DRAW_BUFFER3\0" + "GL_DRAW_BUFFER3_ARB\0" + "GL_DRAW_BUFFER3_ATI\0" + "GL_DRAW_BUFFER4\0" + "GL_DRAW_BUFFER4_ARB\0" + "GL_DRAW_BUFFER4_ATI\0" + "GL_DRAW_BUFFER5\0" + "GL_DRAW_BUFFER5_ARB\0" + "GL_DRAW_BUFFER5_ATI\0" + "GL_DRAW_BUFFER6\0" + "GL_DRAW_BUFFER6_ARB\0" + "GL_DRAW_BUFFER6_ATI\0" + "GL_DRAW_BUFFER7\0" + "GL_DRAW_BUFFER7_ARB\0" + "GL_DRAW_BUFFER7_ATI\0" + "GL_DRAW_BUFFER8\0" + "GL_DRAW_BUFFER8_ARB\0" + "GL_DRAW_BUFFER8_ATI\0" + "GL_DRAW_BUFFER9\0" + "GL_DRAW_BUFFER9_ARB\0" + "GL_DRAW_BUFFER9_ATI\0" + "GL_DRAW_FRAMEBUFFER_BINDING_EXT\0" + "GL_DRAW_FRAMEBUFFER_EXT\0" + "GL_DRAW_PIXEL_TOKEN\0" + "GL_DST_ALPHA\0" + "GL_DST_COLOR\0" + "GL_DYNAMIC_COPY\0" + "GL_DYNAMIC_COPY_ARB\0" + "GL_DYNAMIC_DRAW\0" + "GL_DYNAMIC_DRAW_ARB\0" + "GL_DYNAMIC_READ\0" + "GL_DYNAMIC_READ_ARB\0" + "GL_EDGE_FLAG\0" + "GL_EDGE_FLAG_ARRAY\0" + "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING\0" + "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB\0" + "GL_EDGE_FLAG_ARRAY_POINTER\0" + "GL_EDGE_FLAG_ARRAY_STRIDE\0" + "GL_ELEMENT_ARRAY_BUFFER\0" + "GL_ELEMENT_ARRAY_BUFFER_ARB\0" + "GL_ELEMENT_ARRAY_BUFFER_BINDING\0" + "GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB\0" + "GL_EMISSION\0" + "GL_ENABLE_BIT\0" + "GL_EQUAL\0" + "GL_EQUIV\0" + "GL_EVAL_BIT\0" + "GL_EXP\0" + "GL_EXP2\0" + "GL_EXTENSIONS\0" + "GL_EYE_LINEAR\0" + "GL_EYE_PLANE\0" + "GL_EYE_PLANE_ABSOLUTE_NV\0" + "GL_EYE_RADIAL_NV\0" + "GL_FALSE\0" + "GL_FASTEST\0" + "GL_FEEDBACK\0" + "GL_FEEDBACK_BUFFER_POINTER\0" + "GL_FEEDBACK_BUFFER_SIZE\0" + "GL_FEEDBACK_BUFFER_TYPE\0" + "GL_FILL\0" + "GL_FLAT\0" + "GL_FLOAT\0" + "GL_FLOAT_MAT2\0" + "GL_FLOAT_MAT2_ARB\0" + "GL_FLOAT_MAT3\0" + "GL_FLOAT_MAT3_ARB\0" + "GL_FLOAT_MAT4\0" + "GL_FLOAT_MAT4_ARB\0" + "GL_FLOAT_VEC2\0" + "GL_FLOAT_VEC2_ARB\0" + "GL_FLOAT_VEC3\0" + "GL_FLOAT_VEC3_ARB\0" + "GL_FLOAT_VEC4\0" + "GL_FLOAT_VEC4_ARB\0" + "GL_FOG\0" + "GL_FOG_BIT\0" + "GL_FOG_COLOR\0" + "GL_FOG_COORD\0" + "GL_FOG_COORDINATE\0" + "GL_FOG_COORDINATE_ARRAY\0" + "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING\0" + "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB\0" + "GL_FOG_COORDINATE_ARRAY_POINTER\0" + "GL_FOG_COORDINATE_ARRAY_STRIDE\0" + "GL_FOG_COORDINATE_ARRAY_TYPE\0" + "GL_FOG_COORDINATE_SOURCE\0" + "GL_FOG_COORD_ARRAY\0" + "GL_FOG_COORD_ARRAY_BUFFER_BINDING\0" + "GL_FOG_COORD_ARRAY_POINTER\0" + "GL_FOG_COORD_ARRAY_STRIDE\0" + "GL_FOG_COORD_ARRAY_TYPE\0" + "GL_FOG_COORD_SRC\0" + "GL_FOG_DENSITY\0" + "GL_FOG_DISTANCE_MODE_NV\0" + "GL_FOG_END\0" + "GL_FOG_HINT\0" + "GL_FOG_INDEX\0" + "GL_FOG_MODE\0" + "GL_FOG_OFFSET_SGIX\0" + "GL_FOG_OFFSET_VALUE_SGIX\0" + "GL_FOG_START\0" + "GL_FRAGMENT_DEPTH\0" + "GL_FRAGMENT_PROGRAM_ARB\0" + "GL_FRAGMENT_SHADER\0" + "GL_FRAGMENT_SHADER_ARB\0" + "GL_FRAGMENT_SHADER_DERIVATIVE_HINT\0" + "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT\0" + "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT\0" + "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT\0" + "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT\0" + "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT\0" + "GL_FRAMEBUFFER_BINDING_EXT\0" + "GL_FRAMEBUFFER_COMPLETE_EXT\0" + "GL_FRAMEBUFFER_EXT\0" + "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT\0" + "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT\0" + "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT\0" + "GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT\0" + "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT\0" + "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT\0" + "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT\0" + "GL_FRAMEBUFFER_STATUS_ERROR_EXT\0" + "GL_FRAMEBUFFER_UNSUPPORTED_EXT\0" + "GL_FRONT\0" + "GL_FRONT_AND_BACK\0" + "GL_FRONT_FACE\0" + "GL_FRONT_LEFT\0" + "GL_FRONT_RIGHT\0" + "GL_FUNC_ADD\0" + "GL_FUNC_ADD_EXT\0" + "GL_FUNC_REVERSE_SUBTRACT\0" + "GL_FUNC_REVERSE_SUBTRACT_EXT\0" + "GL_FUNC_SUBTRACT\0" + "GL_FUNC_SUBTRACT_EXT\0" + "GL_GENERATE_MIPMAP\0" + "GL_GENERATE_MIPMAP_HINT\0" + "GL_GENERATE_MIPMAP_HINT_SGIS\0" + "GL_GENERATE_MIPMAP_SGIS\0" + "GL_GEQUAL\0" + "GL_GL_BLEND_EQUATION_RGB\0" + "GL_GL_COMPRESSED_SLUMINANCE\0" + "GL_GL_COMPRESSED_SLUMINANCE_ALPHA\0" + "GL_GL_COMPRESSED_SRGB\0" + "GL_GL_COMPRESSED_SRGB_ALPHA\0" + "GL_GL_CURRENT_RASTER_SECONDARY_COLOR\0" + "GL_GL_FLOAT_MAT2x3\0" + "GL_GL_FLOAT_MAT2x4\0" + "GL_GL_FLOAT_MAT3x2\0" + "GL_GL_FLOAT_MAT3x4\0" + "GL_GL_FLOAT_MAT4x2\0" + "GL_GL_FLOAT_MAT4x3\0" + "GL_GL_PIXEL_PACK_BUFFER\0" + "GL_GL_PIXEL_PACK_BUFFER_BINDING\0" + "GL_GL_PIXEL_UNPACK_BUFFER\0" + "GL_GL_PIXEL_UNPACK_BUFFER_BINDING\0" + "GL_GL_SLUMINANCE\0" + "GL_GL_SLUMINANCE8\0" + "GL_GL_SLUMINANCE8_ALPHA8\0" + "GL_GL_SLUMINANCE_ALPHA\0" + "GL_GL_SRGB\0" + "GL_GL_SRGB8\0" + "GL_GL_SRGB8_ALPHA8\0" + "GL_GL_SRGB_ALPHA\0" + "GL_GREATER\0" + "GL_GREEN\0" + "GL_GREEN_BIAS\0" + "GL_GREEN_BITS\0" + "GL_GREEN_SCALE\0" + "GL_HINT_BIT\0" + "GL_HISTOGRAM\0" + "GL_HISTOGRAM_ALPHA_SIZE\0" + "GL_HISTOGRAM_ALPHA_SIZE_EXT\0" + "GL_HISTOGRAM_BLUE_SIZE\0" + "GL_HISTOGRAM_BLUE_SIZE_EXT\0" + "GL_HISTOGRAM_EXT\0" + "GL_HISTOGRAM_FORMAT\0" + "GL_HISTOGRAM_FORMAT_EXT\0" + "GL_HISTOGRAM_GREEN_SIZE\0" + "GL_HISTOGRAM_GREEN_SIZE_EXT\0" + "GL_HISTOGRAM_LUMINANCE_SIZE\0" + "GL_HISTOGRAM_LUMINANCE_SIZE_EXT\0" + "GL_HISTOGRAM_RED_SIZE\0" + "GL_HISTOGRAM_RED_SIZE_EXT\0" + "GL_HISTOGRAM_SINK\0" + "GL_HISTOGRAM_SINK_EXT\0" + "GL_HISTOGRAM_WIDTH\0" + "GL_HISTOGRAM_WIDTH_EXT\0" + "GL_IDENTITY_NV\0" + "GL_IGNORE_BORDER_HP\0" + "GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES\0" + "GL_IMPLEMENTATION_COLOR_READ_TYPE_OES\0" + "GL_INCR\0" + "GL_INCR_WRAP\0" + "GL_INCR_WRAP_EXT\0" + "GL_INDEX_ARRAY\0" + "GL_INDEX_ARRAY_BUFFER_BINDING\0" + "GL_INDEX_ARRAY_BUFFER_BINDING_ARB\0" + "GL_INDEX_ARRAY_POINTER\0" + "GL_INDEX_ARRAY_STRIDE\0" + "GL_INDEX_ARRAY_TYPE\0" + "GL_INDEX_BITS\0" + "GL_INDEX_CLEAR_VALUE\0" + "GL_INDEX_LOGIC_OP\0" + "GL_INDEX_MODE\0" + "GL_INDEX_OFFSET\0" + "GL_INDEX_SHIFT\0" + "GL_INDEX_WRITEMASK\0" + "GL_INFO_LOG_LENGTH\0" + "GL_INT\0" + "GL_INTENSITY\0" + "GL_INTENSITY12\0" + "GL_INTENSITY12_EXT\0" + "GL_INTENSITY16\0" + "GL_INTENSITY16_EXT\0" + "GL_INTENSITY4\0" + "GL_INTENSITY4_EXT\0" + "GL_INTENSITY8\0" + "GL_INTENSITY8_EXT\0" + "GL_INTENSITY_EXT\0" + "GL_INTERPOLATE\0" + "GL_INTERPOLATE_ARB\0" + "GL_INTERPOLATE_EXT\0" + "GL_INT_VEC2\0" + "GL_INT_VEC2_ARB\0" + "GL_INT_VEC3\0" + "GL_INT_VEC3_ARB\0" + "GL_INT_VEC4\0" + "GL_INT_VEC4_ARB\0" + "GL_INVALID_ENUM\0" + "GL_INVALID_FRAMEBUFFER_OPERATION_EXT\0" + "GL_INVALID_OPERATION\0" + "GL_INVALID_VALUE\0" + "GL_INVERSE_NV\0" + "GL_INVERSE_TRANSPOSE_NV\0" + "GL_INVERT\0" + "GL_KEEP\0" + "GL_LEFT\0" + "GL_LEQUAL\0" + "GL_LESS\0" + "GL_LIGHT0\0" + "GL_LIGHT1\0" + "GL_LIGHT2\0" + "GL_LIGHT3\0" + "GL_LIGHT4\0" + "GL_LIGHT5\0" + "GL_LIGHT6\0" + "GL_LIGHT7\0" + "GL_LIGHTING\0" + "GL_LIGHTING_BIT\0" + "GL_LIGHT_MODEL_AMBIENT\0" + "GL_LIGHT_MODEL_COLOR_CONTROL\0" + "GL_LIGHT_MODEL_COLOR_CONTROL_EXT\0" + "GL_LIGHT_MODEL_LOCAL_VIEWER\0" + "GL_LIGHT_MODEL_TWO_SIDE\0" + "GL_LINE\0" + "GL_LINEAR\0" + "GL_LINEAR_ATTENUATION\0" + "GL_LINEAR_CLIPMAP_LINEAR_SGIX\0" + "GL_LINEAR_CLIPMAP_NEAREST_SGIX\0" + "GL_LINEAR_MIPMAP_LINEAR\0" + "GL_LINEAR_MIPMAP_NEAREST\0" + "GL_LINES\0" + "GL_LINE_BIT\0" + "GL_LINE_LOOP\0" + "GL_LINE_RESET_TOKEN\0" + "GL_LINE_SMOOTH\0" + "GL_LINE_SMOOTH_HINT\0" + "GL_LINE_STIPPLE\0" + "GL_LINE_STIPPLE_PATTERN\0" + "GL_LINE_STIPPLE_REPEAT\0" + "GL_LINE_STRIP\0" + "GL_LINE_TOKEN\0" + "GL_LINE_WIDTH\0" + "GL_LINE_WIDTH_GRANULARITY\0" + "GL_LINE_WIDTH_RANGE\0" + "GL_LINK_STATUS\0" + "GL_LIST_BASE\0" + "GL_LIST_BIT\0" + "GL_LIST_INDEX\0" + "GL_LIST_MODE\0" + "GL_LOAD\0" + "GL_LOGIC_OP\0" + "GL_LOGIC_OP_MODE\0" + "GL_LOWER_LEFT\0" + "GL_LUMINANCE\0" + "GL_LUMINANCE12\0" + "GL_LUMINANCE12_ALPHA12\0" + "GL_LUMINANCE12_ALPHA12_EXT\0" + "GL_LUMINANCE12_ALPHA4\0" + "GL_LUMINANCE12_ALPHA4_EXT\0" + "GL_LUMINANCE12_EXT\0" + "GL_LUMINANCE16\0" + "GL_LUMINANCE16_ALPHA16\0" + "GL_LUMINANCE16_ALPHA16_EXT\0" + "GL_LUMINANCE16_EXT\0" + "GL_LUMINANCE4\0" + "GL_LUMINANCE4_ALPHA4\0" + "GL_LUMINANCE4_ALPHA4_EXT\0" + "GL_LUMINANCE4_EXT\0" + "GL_LUMINANCE6_ALPHA2\0" + "GL_LUMINANCE6_ALPHA2_EXT\0" + "GL_LUMINANCE8\0" + "GL_LUMINANCE8_ALPHA8\0" + "GL_LUMINANCE8_ALPHA8_EXT\0" + "GL_LUMINANCE8_EXT\0" + "GL_LUMINANCE_ALPHA\0" + "GL_MAP1_COLOR_4\0" + "GL_MAP1_GRID_DOMAIN\0" + "GL_MAP1_GRID_SEGMENTS\0" + "GL_MAP1_INDEX\0" + "GL_MAP1_NORMAL\0" + "GL_MAP1_TEXTURE_COORD_1\0" + "GL_MAP1_TEXTURE_COORD_2\0" + "GL_MAP1_TEXTURE_COORD_3\0" + "GL_MAP1_TEXTURE_COORD_4\0" + "GL_MAP1_VERTEX_3\0" + "GL_MAP1_VERTEX_4\0" + "GL_MAP1_VERTEX_ATTRIB0_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB10_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB11_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB12_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB13_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB14_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB15_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB1_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB2_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB3_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB4_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB5_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB6_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB7_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB8_4_NV\0" + "GL_MAP1_VERTEX_ATTRIB9_4_NV\0" + "GL_MAP2_COLOR_4\0" + "GL_MAP2_GRID_DOMAIN\0" + "GL_MAP2_GRID_SEGMENTS\0" + "GL_MAP2_INDEX\0" + "GL_MAP2_NORMAL\0" + "GL_MAP2_TEXTURE_COORD_1\0" + "GL_MAP2_TEXTURE_COORD_2\0" + "GL_MAP2_TEXTURE_COORD_3\0" + "GL_MAP2_TEXTURE_COORD_4\0" + "GL_MAP2_VERTEX_3\0" + "GL_MAP2_VERTEX_4\0" + "GL_MAP2_VERTEX_ATTRIB0_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB10_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB11_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB12_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB13_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB14_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB15_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB1_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB2_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB3_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB4_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB5_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB6_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB7_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB8_4_NV\0" + "GL_MAP2_VERTEX_ATTRIB9_4_NV\0" + "GL_MAP_COLOR\0" + "GL_MAP_STENCIL\0" + "GL_MATRIX0_ARB\0" + "GL_MATRIX0_NV\0" + "GL_MATRIX10_ARB\0" + "GL_MATRIX11_ARB\0" + "GL_MATRIX12_ARB\0" + "GL_MATRIX13_ARB\0" + "GL_MATRIX14_ARB\0" + "GL_MATRIX15_ARB\0" + "GL_MATRIX16_ARB\0" + "GL_MATRIX17_ARB\0" + "GL_MATRIX18_ARB\0" + "GL_MATRIX19_ARB\0" + "GL_MATRIX1_ARB\0" + "GL_MATRIX1_NV\0" + "GL_MATRIX20_ARB\0" + "GL_MATRIX21_ARB\0" + "GL_MATRIX22_ARB\0" + "GL_MATRIX23_ARB\0" + "GL_MATRIX24_ARB\0" + "GL_MATRIX25_ARB\0" + "GL_MATRIX26_ARB\0" + "GL_MATRIX27_ARB\0" + "GL_MATRIX28_ARB\0" + "GL_MATRIX29_ARB\0" + "GL_MATRIX2_ARB\0" + "GL_MATRIX2_NV\0" + "GL_MATRIX30_ARB\0" + "GL_MATRIX31_ARB\0" + "GL_MATRIX3_ARB\0" + "GL_MATRIX3_NV\0" + "GL_MATRIX4_ARB\0" + "GL_MATRIX4_NV\0" + "GL_MATRIX5_ARB\0" + "GL_MATRIX5_NV\0" + "GL_MATRIX6_ARB\0" + "GL_MATRIX6_NV\0" + "GL_MATRIX7_ARB\0" + "GL_MATRIX7_NV\0" + "GL_MATRIX8_ARB\0" + "GL_MATRIX9_ARB\0" + "GL_MATRIX_INDEX_ARRAY_ARB\0" + "GL_MATRIX_INDEX_ARRAY_POINTER_ARB\0" + "GL_MATRIX_INDEX_ARRAY_SIZE_ARB\0" + "GL_MATRIX_INDEX_ARRAY_STRIDE_ARB\0" + "GL_MATRIX_INDEX_ARRAY_TYPE_ARB\0" + "GL_MATRIX_MODE\0" + "GL_MATRIX_PALETTE_ARB\0" + "GL_MAX\0" + "GL_MAX_3D_TEXTURE_SIZE\0" + "GL_MAX_ATTRIB_STACK_DEPTH\0" + "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH\0" + "GL_MAX_CLIPMAP_DEPTH_SGIX\0" + "GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX\0" + "GL_MAX_CLIP_PLANES\0" + "GL_MAX_COLOR_ATTACHMENTS_EXT\0" + "GL_MAX_COLOR_MATRIX_STACK_DEPTH\0" + "GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI\0" + "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS\0" + "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB\0" + "GL_MAX_CONVOLUTION_HEIGHT\0" + "GL_MAX_CONVOLUTION_HEIGHT_EXT\0" + "GL_MAX_CONVOLUTION_WIDTH\0" + "GL_MAX_CONVOLUTION_WIDTH_EXT\0" + "GL_MAX_CUBE_MAP_TEXTURE_SIZE\0" + "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB\0" + "GL_MAX_DRAW_BUFFERS\0" + "GL_MAX_DRAW_BUFFERS_ARB\0" + "GL_MAX_DRAW_BUFFERS_ATI\0" + "GL_MAX_ELEMENTS_INDICES\0" + "GL_MAX_ELEMENTS_VERTICES\0" + "GL_MAX_EVAL_ORDER\0" + "GL_MAX_EXT\0" + "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS\0" + "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB\0" + "GL_MAX_LIGHTS\0" + "GL_MAX_LIST_NESTING\0" + "GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB\0" + "GL_MAX_MODELVIEW_STACK_DEPTH\0" + "GL_MAX_NAME_STACK_DEPTH\0" + "GL_MAX_PALETTE_MATRICES_ARB\0" + "GL_MAX_PIXEL_MAP_TABLE\0" + "GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB\0" + "GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB\0" + "GL_MAX_PROGRAM_ATTRIBS_ARB\0" + "GL_MAX_PROGRAM_CALL_DEPTH_NV\0" + "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB\0" + "GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV\0" + "GL_MAX_PROGRAM_IF_DEPTH_NV\0" + "GL_MAX_PROGRAM_INSTRUCTIONS_ARB\0" + "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB\0" + "GL_MAX_PROGRAM_LOOP_COUNT_NV\0" + "GL_MAX_PROGRAM_LOOP_DEPTH_NV\0" + "GL_MAX_PROGRAM_MATRICES_ARB\0" + "GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB\0" + "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB\0" + "GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB\0" + "GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB\0" + "GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB\0" + "GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB\0" + "GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB\0" + "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB\0" + "GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB\0" + "GL_MAX_PROGRAM_PARAMETERS_ARB\0" + "GL_MAX_PROGRAM_TEMPORARIES_ARB\0" + "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB\0" + "GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB\0" + "GL_MAX_PROJECTION_STACK_DEPTH\0" + "GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB\0" + "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV\0" + "GL_MAX_RENDERBUFFER_SIZE_EXT\0" + "GL_MAX_SHININESS_NV\0" + "GL_MAX_SPOT_EXPONENT_NV\0" + "GL_MAX_TEXTURE_COORDS\0" + "GL_MAX_TEXTURE_COORDS_ARB\0" + "GL_MAX_TEXTURE_IMAGE_UNITS\0" + "GL_MAX_TEXTURE_IMAGE_UNITS_ARB\0" + "GL_MAX_TEXTURE_LOD_BIAS\0" + "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT\0" + "GL_MAX_TEXTURE_SIZE\0" + "GL_MAX_TEXTURE_STACK_DEPTH\0" + "GL_MAX_TEXTURE_UNITS\0" + "GL_MAX_TEXTURE_UNITS_ARB\0" + "GL_MAX_TRACK_MATRICES_NV\0" + "GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV\0" + "GL_MAX_VARYING_FLOATS\0" + "GL_MAX_VARYING_FLOATS_ARB\0" + "GL_MAX_VERTEX_ATTRIBS\0" + "GL_MAX_VERTEX_ATTRIBS_ARB\0" + "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS\0" + "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB\0" + "GL_MAX_VERTEX_UNIFORM_COMPONENTS\0" + "GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB\0" + "GL_MAX_VERTEX_UNITS_ARB\0" + "GL_MAX_VIEWPORT_DIMS\0" + "GL_MIN\0" + "GL_MINMAX\0" + "GL_MINMAX_EXT\0" + "GL_MINMAX_FORMAT\0" + "GL_MINMAX_FORMAT_EXT\0" + "GL_MINMAX_SINK\0" + "GL_MINMAX_SINK_EXT\0" + "GL_MIN_EXT\0" + "GL_MIRRORED_REPEAT\0" + "GL_MIRRORED_REPEAT_ARB\0" + "GL_MIRRORED_REPEAT_IBM\0" + "GL_MIRROR_CLAMP_ATI\0" + "GL_MIRROR_CLAMP_EXT\0" + "GL_MIRROR_CLAMP_TO_BORDER_EXT\0" + "GL_MIRROR_CLAMP_TO_EDGE_ATI\0" + "GL_MIRROR_CLAMP_TO_EDGE_EXT\0" + "GL_MODELVIEW\0" + "GL_MODELVIEW0_ARB\0" + "GL_MODELVIEW10_ARB\0" + "GL_MODELVIEW11_ARB\0" + "GL_MODELVIEW12_ARB\0" + "GL_MODELVIEW13_ARB\0" + "GL_MODELVIEW14_ARB\0" + "GL_MODELVIEW15_ARB\0" + "GL_MODELVIEW16_ARB\0" + "GL_MODELVIEW17_ARB\0" + "GL_MODELVIEW18_ARB\0" + "GL_MODELVIEW19_ARB\0" + "GL_MODELVIEW1_ARB\0" + "GL_MODELVIEW20_ARB\0" + "GL_MODELVIEW21_ARB\0" + "GL_MODELVIEW22_ARB\0" + "GL_MODELVIEW23_ARB\0" + "GL_MODELVIEW24_ARB\0" + "GL_MODELVIEW25_ARB\0" + "GL_MODELVIEW26_ARB\0" + "GL_MODELVIEW27_ARB\0" + "GL_MODELVIEW28_ARB\0" + "GL_MODELVIEW29_ARB\0" + "GL_MODELVIEW2_ARB\0" + "GL_MODELVIEW30_ARB\0" + "GL_MODELVIEW31_ARB\0" + "GL_MODELVIEW3_ARB\0" + "GL_MODELVIEW4_ARB\0" + "GL_MODELVIEW5_ARB\0" + "GL_MODELVIEW6_ARB\0" + "GL_MODELVIEW7_ARB\0" + "GL_MODELVIEW8_ARB\0" + "GL_MODELVIEW9_ARB\0" + "GL_MODELVIEW_MATRIX\0" + "GL_MODELVIEW_PROJECTION_NV\0" + "GL_MODELVIEW_STACK_DEPTH\0" + "GL_MODULATE\0" + "GL_MODULATE_ADD_ATI\0" + "GL_MODULATE_SIGNED_ADD_ATI\0" + "GL_MODULATE_SUBTRACT_ATI\0" + "GL_MULT\0" + "GL_MULTISAMPLE\0" + "GL_MULTISAMPLE_3DFX\0" + "GL_MULTISAMPLE_ARB\0" + "GL_MULTISAMPLE_BIT\0" + "GL_MULTISAMPLE_BIT_3DFX\0" + "GL_MULTISAMPLE_BIT_ARB\0" + "GL_MULTISAMPLE_FILTER_HINT_NV\0" + "GL_N3F_V3F\0" + "GL_NAME_STACK_DEPTH\0" + "GL_NAND\0" + "GL_NEAREST\0" + "GL_NEAREST_CLIPMAP_LINEAR_SGIX\0" + "GL_NEAREST_CLIPMAP_NEAREST_SGIX\0" + "GL_NEAREST_MIPMAP_LINEAR\0" + "GL_NEAREST_MIPMAP_NEAREST\0" + "GL_NEVER\0" + "GL_NICEST\0" + "GL_NONE\0" + "GL_NOOP\0" + "GL_NOR\0" + "GL_NORMALIZE\0" + "GL_NORMAL_ARRAY\0" + "GL_NORMAL_ARRAY_BUFFER_BINDING\0" + "GL_NORMAL_ARRAY_BUFFER_BINDING_ARB\0" + "GL_NORMAL_ARRAY_POINTER\0" + "GL_NORMAL_ARRAY_STRIDE\0" + "GL_NORMAL_ARRAY_TYPE\0" + "GL_NORMAL_MAP\0" + "GL_NORMAL_MAP_ARB\0" + "GL_NORMAL_MAP_NV\0" + "GL_NOTEQUAL\0" + "GL_NO_ERROR\0" + "GL_NUM_COMPRESSED_TEXTURE_FORMATS\0" + "GL_NUM_TEXTURE_COMPRESSED_FORMATS_ARB\0" + "GL_OBJECT_ACTIVE_ATTRIBUTES_ARB\0" + "GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB\0" + "GL_OBJECT_ACTIVE_UNIFORMS_ARB\0" + "GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB\0" + "GL_OBJECT_ATTACHED_OBJECTS_ARB\0" + "GL_OBJECT_COMPILE_STATUS_ARB\0" + "GL_OBJECT_DELETE_STATUS_ARB\0" + "GL_OBJECT_INFO_LOG_LENGTH_ARB\0" + "GL_OBJECT_LINEAR\0" + "GL_OBJECT_LINK_STATUS_ARB\0" + "GL_OBJECT_PLANE\0" + "GL_OBJECT_SHADER_SOURCE_LENGTH_ARB\0" + "GL_OBJECT_SUBTYPE_ARB\0" + "GL_OBJECT_TYPE_ARB\0" + "GL_OBJECT_VALIDATE_STATUS_ARB\0" + "GL_OCCLUSION_TEST_HP\0" + "GL_OCCLUSION_TEST_RESULT_HP\0" + "GL_ONE\0" + "GL_ONE_MINUS_CONSTANT_ALPHA\0" + "GL_ONE_MINUS_CONSTANT_ALPHA_EXT\0" + "GL_ONE_MINUS_CONSTANT_COLOR\0" + "GL_ONE_MINUS_CONSTANT_COLOR_EXT\0" + "GL_ONE_MINUS_DST_ALPHA\0" + "GL_ONE_MINUS_DST_COLOR\0" + "GL_ONE_MINUS_SRC_ALPHA\0" + "GL_ONE_MINUS_SRC_COLOR\0" + "GL_OPERAND0_ALPHA\0" + "GL_OPERAND0_ALPHA_ARB\0" + "GL_OPERAND0_ALPHA_EXT\0" + "GL_OPERAND0_RGB\0" + "GL_OPERAND0_RGB_ARB\0" + "GL_OPERAND0_RGB_EXT\0" + "GL_OPERAND1_ALPHA\0" + "GL_OPERAND1_ALPHA_ARB\0" + "GL_OPERAND1_ALPHA_EXT\0" + "GL_OPERAND1_RGB\0" + "GL_OPERAND1_RGB_ARB\0" + "GL_OPERAND1_RGB_EXT\0" + "GL_OPERAND2_ALPHA\0" + "GL_OPERAND2_ALPHA_ARB\0" + "GL_OPERAND2_ALPHA_EXT\0" + "GL_OPERAND2_RGB\0" + "GL_OPERAND2_RGB_ARB\0" + "GL_OPERAND2_RGB_EXT\0" + "GL_OPERAND3_ALPHA_NV\0" + "GL_OPERAND3_RGB_NV\0" + "GL_OR\0" + "GL_ORDER\0" + "GL_OR_INVERTED\0" + "GL_OR_REVERSE\0" + "GL_OUT_OF_MEMORY\0" + "GL_PACK_ALIGNMENT\0" + "GL_PACK_IMAGE_HEIGHT\0" + "GL_PACK_INVERT_MESA\0" + "GL_PACK_LSB_FIRST\0" + "GL_PACK_ROW_LENGTH\0" + "GL_PACK_SKIP_IMAGES\0" + "GL_PACK_SKIP_PIXELS\0" + "GL_PACK_SKIP_ROWS\0" + "GL_PACK_SWAP_BYTES\0" + "GL_PALETTE4_R5_G6_B5_OES\0" + "GL_PALETTE4_RGB5_A1_OES\0" + "GL_PALETTE4_RGB8_OES\0" + "GL_PALETTE4_RGBA4_OES\0" + "GL_PALETTE4_RGBA8_OES\0" + "GL_PALETTE8_R5_G6_B5_OES\0" + "GL_PALETTE8_RGB5_A1_OES\0" + "GL_PALETTE8_RGB8_OES\0" + "GL_PALETTE8_RGBA4_OES\0" + "GL_PALETTE8_RGBA8_OES\0" + "GL_PASS_THROUGH_TOKEN\0" + "GL_PERSPECTIVE_CORRECTION_HINT\0" + "GL_PIXEL_MAP_A_TO_A\0" + "GL_PIXEL_MAP_A_TO_A_SIZE\0" + "GL_PIXEL_MAP_B_TO_B\0" + "GL_PIXEL_MAP_B_TO_B_SIZE\0" + "GL_PIXEL_MAP_G_TO_G\0" + "GL_PIXEL_MAP_G_TO_G_SIZE\0" + "GL_PIXEL_MAP_I_TO_A\0" + "GL_PIXEL_MAP_I_TO_A_SIZE\0" + "GL_PIXEL_MAP_I_TO_B\0" + "GL_PIXEL_MAP_I_TO_B_SIZE\0" + "GL_PIXEL_MAP_I_TO_G\0" + "GL_PIXEL_MAP_I_TO_G_SIZE\0" + "GL_PIXEL_MAP_I_TO_I\0" + "GL_PIXEL_MAP_I_TO_I_SIZE\0" + "GL_PIXEL_MAP_I_TO_R\0" + "GL_PIXEL_MAP_I_TO_R_SIZE\0" + "GL_PIXEL_MAP_R_TO_R\0" + "GL_PIXEL_MAP_R_TO_R_SIZE\0" + "GL_PIXEL_MAP_S_TO_S\0" + "GL_PIXEL_MAP_S_TO_S_SIZE\0" + "GL_PIXEL_MODE_BIT\0" + "GL_PIXEL_PACK_BUFFER_BINDING_EXT\0" + "GL_PIXEL_PACK_BUFFER_EXT\0" + "GL_PIXEL_UNPACK_BUFFER_BINDING_EXT\0" + "GL_PIXEL_UNPACK_BUFFER_EXT\0" + "GL_POINT\0" + "GL_POINTS\0" + "GL_POINT_BIT\0" + "GL_POINT_DISTANCE_ATTENUATION\0" + "GL_POINT_DISTANCE_ATTENUATION_ARB\0" + "GL_POINT_DISTANCE_ATTENUATION_EXT\0" + "GL_POINT_DISTANCE_ATTENUATION_SGIS\0" + "GL_POINT_FADE_THRESHOLD_SIZE\0" + "GL_POINT_FADE_THRESHOLD_SIZE_ARB\0" + "GL_POINT_FADE_THRESHOLD_SIZE_EXT\0" + "GL_POINT_FADE_THRESHOLD_SIZE_SGIS\0" + "GL_POINT_SIZE\0" + "GL_POINT_SIZE_GRANULARITY\0" + "GL_POINT_SIZE_MAX\0" + "GL_POINT_SIZE_MAX_ARB\0" + "GL_POINT_SIZE_MAX_EXT\0" + "GL_POINT_SIZE_MAX_SGIS\0" + "GL_POINT_SIZE_MIN\0" + "GL_POINT_SIZE_MIN_ARB\0" + "GL_POINT_SIZE_MIN_EXT\0" + "GL_POINT_SIZE_MIN_SGIS\0" + "GL_POINT_SIZE_RANGE\0" + "GL_POINT_SMOOTH\0" + "GL_POINT_SMOOTH_HINT\0" + "GL_POINT_SPRITE\0" + "GL_POINT_SPRITE_ARB\0" + "GL_POINT_SPRITE_COORD_ORIGIN\0" + "GL_POINT_SPRITE_NV\0" + "GL_POINT_SPRITE_R_MODE_NV\0" + "GL_POINT_TOKEN\0" + "GL_POLYGON\0" + "GL_POLYGON_BIT\0" + "GL_POLYGON_MODE\0" + "GL_POLYGON_OFFSET_BIAS\0" + "GL_POLYGON_OFFSET_FACTOR\0" + "GL_POLYGON_OFFSET_FILL\0" + "GL_POLYGON_OFFSET_LINE\0" + "GL_POLYGON_OFFSET_POINT\0" + "GL_POLYGON_OFFSET_UNITS\0" + "GL_POLYGON_SMOOTH\0" + "GL_POLYGON_SMOOTH_HINT\0" + "GL_POLYGON_STIPPLE\0" + "GL_POLYGON_STIPPLE_BIT\0" + "GL_POLYGON_TOKEN\0" + "GL_POSITION\0" + "GL_POST_COLOR_MATRIX_ALPHA_BIAS\0" + "GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI\0" + "GL_POST_COLOR_MATRIX_ALPHA_SCALE\0" + "GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI\0" + "GL_POST_COLOR_MATRIX_BLUE_BIAS\0" + "GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI\0" + "GL_POST_COLOR_MATRIX_BLUE_SCALE\0" + "GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI\0" + "GL_POST_COLOR_MATRIX_COLOR_TABLE\0" + "GL_POST_COLOR_MATRIX_GREEN_BIAS\0" + "GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI\0" + "GL_POST_COLOR_MATRIX_GREEN_SCALE\0" + "GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI\0" + "GL_POST_COLOR_MATRIX_RED_BIAS\0" + "GL_POST_COLOR_MATRIX_RED_BIAS_SGI\0" + "GL_POST_COLOR_MATRIX_RED_SCALE\0" + "GL_POST_COLOR_MATRIX_RED_SCALE_SGI\0" + "GL_POST_CONVOLUTION_ALPHA_BIAS\0" + "GL_POST_CONVOLUTION_ALPHA_BIAS_EXT\0" + "GL_POST_CONVOLUTION_ALPHA_SCALE\0" + "GL_POST_CONVOLUTION_ALPHA_SCALE_EXT\0" + "GL_POST_CONVOLUTION_BLUE_BIAS\0" + "GL_POST_CONVOLUTION_BLUE_BIAS_EXT\0" + "GL_POST_CONVOLUTION_BLUE_SCALE\0" + "GL_POST_CONVOLUTION_BLUE_SCALE_EXT\0" + "GL_POST_CONVOLUTION_COLOR_TABLE\0" + "GL_POST_CONVOLUTION_GREEN_BIAS\0" + "GL_POST_CONVOLUTION_GREEN_BIAS_EXT\0" + "GL_POST_CONVOLUTION_GREEN_SCALE\0" + "GL_POST_CONVOLUTION_GREEN_SCALE_EXT\0" + "GL_POST_CONVOLUTION_RED_BIAS\0" + "GL_POST_CONVOLUTION_RED_BIAS_EXT\0" + "GL_POST_CONVOLUTION_RED_SCALE\0" + "GL_POST_CONVOLUTION_RED_SCALE_EXT\0" + "GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX\0" + "GL_POST_TEXTURE_FILTER_BIAS_SGIX\0" + "GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX\0" + "GL_POST_TEXTURE_FILTER_SCALE_SGIX\0" + "GL_PREVIOUS\0" + "GL_PREVIOUS_ARB\0" + "GL_PREVIOUS_EXT\0" + "GL_PRIMARY_COLOR\0" + "GL_PRIMARY_COLOR_ARB\0" + "GL_PRIMARY_COLOR_EXT\0" + "GL_PROGRAM_ADDRESS_REGISTERS_ARB\0" + "GL_PROGRAM_ALU_INSTRUCTIONS_ARB\0" + "GL_PROGRAM_ATTRIBS_ARB\0" + "GL_PROGRAM_BINDING_ARB\0" + "GL_PROGRAM_ERROR_POSITION_ARB\0" + "GL_PROGRAM_ERROR_POSITION_NV\0" + "GL_PROGRAM_ERROR_STRING_ARB\0" + "GL_PROGRAM_FORMAT_ARB\0" + "GL_PROGRAM_FORMAT_ASCII_ARB\0" + "GL_PROGRAM_INSTRUCTIONS_ARB\0" + "GL_PROGRAM_LENGTH_ARB\0" + "GL_PROGRAM_LENGTH_NV\0" + "GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB\0" + "GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB\0" + "GL_PROGRAM_NATIVE_ATTRIBS_ARB\0" + "GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB\0" + "GL_PROGRAM_NATIVE_PARAMETERS_ARB\0" + "GL_PROGRAM_NATIVE_TEMPORARIES_ARB\0" + "GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB\0" + "GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB\0" + "GL_PROGRAM_OBJECT_ARB\0" + "GL_PROGRAM_PARAMETERS_ARB\0" + "GL_PROGRAM_PARAMETER_NV\0" + "GL_PROGRAM_RESIDENT_NV\0" + "GL_PROGRAM_STRING_ARB\0" + "GL_PROGRAM_STRING_NV\0" + "GL_PROGRAM_TARGET_NV\0" + "GL_PROGRAM_TEMPORARIES_ARB\0" + "GL_PROGRAM_TEX_INDIRECTIONS_ARB\0" + "GL_PROGRAM_TEX_INSTRUCTIONS_ARB\0" + "GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB\0" + "GL_PROJECTION\0" + "GL_PROJECTION_MATRIX\0" + "GL_PROJECTION_STACK_DEPTH\0" + "GL_PROXY_COLOR_TABLE\0" + "GL_PROXY_HISTOGRAM\0" + "GL_PROXY_HISTOGRAM_EXT\0" + "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE\0" + "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE\0" + "GL_PROXY_TEXTURE_1D\0" + "GL_PROXY_TEXTURE_1D_EXT\0" + "GL_PROXY_TEXTURE_2D\0" + "GL_PROXY_TEXTURE_2D_EXT\0" + "GL_PROXY_TEXTURE_3D\0" + "GL_PROXY_TEXTURE_COLOR_TABLE_SGI\0" + "GL_PROXY_TEXTURE_CUBE_MAP\0" + "GL_PROXY_TEXTURE_CUBE_MAP_ARB\0" + "GL_PROXY_TEXTURE_RECTANGLE_ARB\0" + "GL_PROXY_TEXTURE_RECTANGLE_NV\0" + "GL_Q\0" + "GL_QUADRATIC_ATTENUATION\0" + "GL_QUADS\0" + "GL_QUAD_MESH_SUN\0" + "GL_QUAD_STRIP\0" + "GL_QUERY_COUNTER_BITS\0" + "GL_QUERY_COUNTER_BITS_ARB\0" + "GL_QUERY_RESULT\0" + "GL_QUERY_RESULT_ARB\0" + "GL_QUERY_RESULT_AVAILABLE\0" + "GL_QUERY_RESULT_AVAILABLE_ARB\0" + "GL_R\0" + "GL_R3_G3_B2\0" + "GL_RASTER_POSITION_UNCLIPPED_IBM\0" + "GL_READ_BUFFER\0" + "GL_READ_FRAMEBUFFER_BINDING_EXT\0" + "GL_READ_FRAMEBUFFER_EXT\0" + "GL_READ_ONLY\0" + "GL_READ_ONLY_ARB\0" + "GL_READ_WRITE\0" + "GL_READ_WRITE_ARB\0" + "GL_RED\0" + "GL_REDUCE\0" + "GL_REDUCE_EXT\0" + "GL_RED_BIAS\0" + "GL_RED_BITS\0" + "GL_RED_SCALE\0" + "GL_REFLECTION_MAP\0" + "GL_REFLECTION_MAP_ARB\0" + "GL_REFLECTION_MAP_NV\0" + "GL_RENDER\0" + "GL_RENDERBUFFER_BINDING_EXT\0" + "GL_RENDERBUFFER_EXT\0" + "GL_RENDERBUFFER_HEIGHT_EXT\0" + "GL_RENDERBUFFER_INTERNAL_FORMAT_EXT\0" + "GL_RENDERBUFFER_WIDTH_EXT\0" + "GL_RENDERER\0" + "GL_RENDER_MODE\0" + "GL_REPEAT\0" + "GL_REPLACE\0" + "GL_REPLACE_EXT\0" + "GL_REPLICATE_BORDER_HP\0" + "GL_RESCALE_NORMAL\0" + "GL_RESCALE_NORMAL_EXT\0" + "GL_RETURN\0" + "GL_RGB\0" + "GL_RGB10\0" + "GL_RGB10_A2\0" + "GL_RGB10_A2_EXT\0" + "GL_RGB10_EXT\0" + "GL_RGB12\0" + "GL_RGB12_EXT\0" + "GL_RGB16\0" + "GL_RGB16_EXT\0" + "GL_RGB2_EXT\0" + "GL_RGB4\0" + "GL_RGB4_EXT\0" + "GL_RGB4_S3TC\0" + "GL_RGB5\0" + "GL_RGB5_A1\0" + "GL_RGB5_A1_EXT\0" + "GL_RGB5_EXT\0" + "GL_RGB8\0" + "GL_RGB8_EXT\0" + "GL_RGBA\0" + "GL_RGBA12\0" + "GL_RGBA12_EXT\0" + "GL_RGBA16\0" + "GL_RGBA16_EXT\0" + "GL_RGBA2\0" + "GL_RGBA2_EXT\0" + "GL_RGBA4\0" + "GL_RGBA4_DXT5_S3TC\0" + "GL_RGBA4_EXT\0" + "GL_RGBA4_S3TC\0" + "GL_RGBA8\0" + "GL_RGBA8_EXT\0" + "GL_RGBA_DXT5_S3TC\0" + "GL_RGBA_MODE\0" + "GL_RGBA_S3TC\0" + "GL_RGB_S3TC\0" + "GL_RGB_SCALE\0" + "GL_RGB_SCALE_ARB\0" + "GL_RGB_SCALE_EXT\0" + "GL_RIGHT\0" + "GL_S\0" + "GL_SAMPLER_1D\0" + "GL_SAMPLER_1D_SHADOW\0" + "GL_SAMPLER_2D\0" + "GL_SAMPLER_2D_SHADOW\0" + "GL_SAMPLER_3D\0" + "GL_SAMPLER_CUBE\0" + "GL_SAMPLES\0" + "GL_SAMPLES_3DFX\0" + "GL_SAMPLES_ARB\0" + "GL_SAMPLES_PASSED\0" + "GL_SAMPLES_PASSED_ARB\0" + "GL_SAMPLE_ALPHA_TO_COVERAGE\0" + "GL_SAMPLE_ALPHA_TO_COVERAGE_ARB\0" + "GL_SAMPLE_ALPHA_TO_ONE\0" + "GL_SAMPLE_ALPHA_TO_ONE_ARB\0" + "GL_SAMPLE_BUFFERS\0" + "GL_SAMPLE_BUFFERS_3DFX\0" + "GL_SAMPLE_BUFFERS_ARB\0" + "GL_SAMPLE_COVERAGE\0" + "GL_SAMPLE_COVERAGE_ARB\0" + "GL_SAMPLE_COVERAGE_INVERT\0" + "GL_SAMPLE_COVERAGE_INVERT_ARB\0" + "GL_SAMPLE_COVERAGE_VALUE\0" + "GL_SAMPLE_COVERAGE_VALUE_ARB\0" + "GL_SCISSOR_BIT\0" + "GL_SCISSOR_BOX\0" + "GL_SCISSOR_TEST\0" + "GL_SECONDARY_COLOR_ARRAY\0" + "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING\0" + "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB\0" + "GL_SECONDARY_COLOR_ARRAY_POINTER\0" + "GL_SECONDARY_COLOR_ARRAY_SIZE\0" + "GL_SECONDARY_COLOR_ARRAY_STRIDE\0" + "GL_SECONDARY_COLOR_ARRAY_TYPE\0" + "GL_SELECT\0" + "GL_SELECTION_BUFFER_POINTER\0" + "GL_SELECTION_BUFFER_SIZE\0" + "GL_SEPARABLE_2D\0" + "GL_SEPARATE_SPECULAR_COLOR\0" + "GL_SEPARATE_SPECULAR_COLOR_EXT\0" + "GL_SET\0" + "GL_SHADER_OBJECT_ARB\0" + "GL_SHADER_SOURCE_LENGTH\0" + "GL_SHADER_TYPE\0" + "GL_SHADE_MODEL\0" + "GL_SHADING_LANGUAGE_VERSION\0" + "GL_SHADOW_AMBIENT_SGIX\0" + "GL_SHARED_TEXTURE_PALETTE_EXT\0" + "GL_SHININESS\0" + "GL_SHORT\0" + "GL_SINGLE_COLOR\0" + "GL_SINGLE_COLOR_EXT\0" + "GL_SLICE_ACCUM_SUN\0" + "GL_SMOOTH\0" + "GL_SMOOTH_LINE_WIDTH_GRANULARITY\0" + "GL_SMOOTH_LINE_WIDTH_RANGE\0" + "GL_SMOOTH_POINT_SIZE_GRANULARITY\0" + "GL_SMOOTH_POINT_SIZE_RANGE\0" + "GL_SOURCE0_ALPHA\0" + "GL_SOURCE0_ALPHA_ARB\0" + "GL_SOURCE0_ALPHA_EXT\0" + "GL_SOURCE0_RGB\0" + "GL_SOURCE0_RGB_ARB\0" + "GL_SOURCE0_RGB_EXT\0" + "GL_SOURCE1_ALPHA\0" + "GL_SOURCE1_ALPHA_ARB\0" + "GL_SOURCE1_ALPHA_EXT\0" + "GL_SOURCE1_RGB\0" + "GL_SOURCE1_RGB_ARB\0" + "GL_SOURCE1_RGB_EXT\0" + "GL_SOURCE2_ALPHA\0" + "GL_SOURCE2_ALPHA_ARB\0" + "GL_SOURCE2_ALPHA_EXT\0" + "GL_SOURCE2_RGB\0" + "GL_SOURCE2_RGB_ARB\0" + "GL_SOURCE2_RGB_EXT\0" + "GL_SOURCE3_ALPHA_NV\0" + "GL_SOURCE3_RGB_NV\0" + "GL_SPECULAR\0" + "GL_SPHERE_MAP\0" + "GL_SPOT_CUTOFF\0" + "GL_SPOT_DIRECTION\0" + "GL_SPOT_EXPONENT\0" + "GL_SRC0_ALPHA\0" + "GL_SRC0_RGB\0" + "GL_SRC1_ALPHA\0" + "GL_SRC1_RGB\0" + "GL_SRC2_ALPHA\0" + "GL_SRC2_RGB\0" + "GL_SRC_ALPHA\0" + "GL_SRC_ALPHA_SATURATE\0" + "GL_SRC_COLOR\0" + "GL_STACK_OVERFLOW\0" + "GL_STACK_UNDERFLOW\0" + "GL_STATIC_COPY\0" + "GL_STATIC_COPY_ARB\0" + "GL_STATIC_DRAW\0" + "GL_STATIC_DRAW_ARB\0" + "GL_STATIC_READ\0" + "GL_STATIC_READ_ARB\0" + "GL_STENCIL\0" + "GL_STENCIL_ATTACHMENT_EXT\0" + "GL_STENCIL_BACK_FAIL\0" + "GL_STENCIL_BACK_FUNC\0" + "GL_STENCIL_BACK_PASS_DEPTH_FAIL\0" + "GL_STENCIL_BACK_PASS_DEPTH_PASS\0" + "GL_STENCIL_BACK_REF\0" + "GL_STENCIL_BACK_VALUE_MASK\0" + "GL_STENCIL_BACK_WRITEMASK\0" + "GL_STENCIL_BITS\0" + "GL_STENCIL_BUFFER_BIT\0" + "GL_STENCIL_CLEAR_VALUE\0" + "GL_STENCIL_FAIL\0" + "GL_STENCIL_FUNC\0" + "GL_STENCIL_INDEX\0" + "GL_STENCIL_INDEX16_EXT\0" + "GL_STENCIL_INDEX1_EXT\0" + "GL_STENCIL_INDEX4_EXT\0" + "GL_STENCIL_INDEX8_EXT\0" + "GL_STENCIL_INDEX_EXT\0" + "GL_STENCIL_PASS_DEPTH_FAIL\0" + "GL_STENCIL_PASS_DEPTH_PASS\0" + "GL_STENCIL_REF\0" + "GL_STENCIL_TEST\0" + "GL_STENCIL_TEST_TWO_SIDE_EXT\0" + "GL_STENCIL_VALUE_MASK\0" + "GL_STENCIL_WRITEMASK\0" + "GL_STEREO\0" + "GL_STREAM_COPY\0" + "GL_STREAM_COPY_ARB\0" + "GL_STREAM_DRAW\0" + "GL_STREAM_DRAW_ARB\0" + "GL_STREAM_READ\0" + "GL_STREAM_READ_ARB\0" + "GL_SUBPIXEL_BITS\0" + "GL_SUBTRACT\0" + "GL_SUBTRACT_ARB\0" + "GL_T\0" + "GL_T2F_C3F_V3F\0" + "GL_T2F_C4F_N3F_V3F\0" + "GL_T2F_C4UB_V3F\0" + "GL_T2F_N3F_V3F\0" + "GL_T2F_V3F\0" + "GL_T4F_C4F_N3F_V4F\0" + "GL_T4F_V4F\0" + "GL_TABLE_TOO_LARGE_EXT\0" + "GL_TEXTURE\0" + "GL_TEXTURE0\0" + "GL_TEXTURE0_ARB\0" + "GL_TEXTURE1\0" + "GL_TEXTURE10\0" + "GL_TEXTURE10_ARB\0" + "GL_TEXTURE11\0" + "GL_TEXTURE11_ARB\0" + "GL_TEXTURE12\0" + "GL_TEXTURE12_ARB\0" + "GL_TEXTURE13\0" + "GL_TEXTURE13_ARB\0" + "GL_TEXTURE14\0" + "GL_TEXTURE14_ARB\0" + "GL_TEXTURE15\0" + "GL_TEXTURE15_ARB\0" + "GL_TEXTURE16\0" + "GL_TEXTURE16_ARB\0" + "GL_TEXTURE17\0" + "GL_TEXTURE17_ARB\0" + "GL_TEXTURE18\0" + "GL_TEXTURE18_ARB\0" + "GL_TEXTURE19\0" + "GL_TEXTURE19_ARB\0" + "GL_TEXTURE1_ARB\0" + "GL_TEXTURE2\0" + "GL_TEXTURE20\0" + "GL_TEXTURE20_ARB\0" + "GL_TEXTURE21\0" + "GL_TEXTURE21_ARB\0" + "GL_TEXTURE22\0" + "GL_TEXTURE22_ARB\0" + "GL_TEXTURE23\0" + "GL_TEXTURE23_ARB\0" + "GL_TEXTURE24\0" + "GL_TEXTURE24_ARB\0" + "GL_TEXTURE25\0" + "GL_TEXTURE25_ARB\0" + "GL_TEXTURE26\0" + "GL_TEXTURE26_ARB\0" + "GL_TEXTURE27\0" + "GL_TEXTURE27_ARB\0" + "GL_TEXTURE28\0" + "GL_TEXTURE28_ARB\0" + "GL_TEXTURE29\0" + "GL_TEXTURE29_ARB\0" + "GL_TEXTURE2_ARB\0" + "GL_TEXTURE3\0" + "GL_TEXTURE30\0" + "GL_TEXTURE30_ARB\0" + "GL_TEXTURE31\0" + "GL_TEXTURE31_ARB\0" + "GL_TEXTURE3_ARB\0" + "GL_TEXTURE4\0" + "GL_TEXTURE4_ARB\0" + "GL_TEXTURE5\0" + "GL_TEXTURE5_ARB\0" + "GL_TEXTURE6\0" + "GL_TEXTURE6_ARB\0" + "GL_TEXTURE7\0" + "GL_TEXTURE7_ARB\0" + "GL_TEXTURE8\0" + "GL_TEXTURE8_ARB\0" + "GL_TEXTURE9\0" + "GL_TEXTURE9_ARB\0" + "GL_TEXTURE_1D\0" + "GL_TEXTURE_2D\0" + "GL_TEXTURE_3D\0" + "GL_TEXTURE_ALPHA_SIZE\0" + "GL_TEXTURE_ALPHA_SIZE_EXT\0" + "GL_TEXTURE_BASE_LEVEL\0" + "GL_TEXTURE_BINDING_1D\0" + "GL_TEXTURE_BINDING_2D\0" + "GL_TEXTURE_BINDING_3D\0" + "GL_TEXTURE_BINDING_CUBE_MAP\0" + "GL_TEXTURE_BINDING_CUBE_MAP_ARB\0" + "GL_TEXTURE_BINDING_RECTANGLE_ARB\0" + "GL_TEXTURE_BINDING_RECTANGLE_NV\0" + "GL_TEXTURE_BIT\0" + "GL_TEXTURE_BLUE_SIZE\0" + "GL_TEXTURE_BLUE_SIZE_EXT\0" + "GL_TEXTURE_BORDER\0" + "GL_TEXTURE_BORDER_COLOR\0" + "GL_TEXTURE_CLIPMAP_CENTER_SGIX\0" + "GL_TEXTURE_CLIPMAP_DEPTH_SGIX\0" + "GL_TEXTURE_CLIPMAP_FRAME_SGIX\0" + "GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX\0" + "GL_TEXTURE_CLIPMAP_OFFSET_SGIX\0" + "GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX\0" + "GL_TEXTURE_COLOR_TABLE_SGI\0" + "GL_TEXTURE_COLOR_WRITEMASK_SGIS\0" + "GL_TEXTURE_COMPARE_FAIL_VALUE_ARB\0" + "GL_TEXTURE_COMPARE_FUNC\0" + "GL_TEXTURE_COMPARE_FUNC_ARB\0" + "GL_TEXTURE_COMPARE_MODE\0" + "GL_TEXTURE_COMPARE_MODE_ARB\0" + "GL_TEXTURE_COMPARE_OPERATOR_SGIX\0" + "GL_TEXTURE_COMPARE_SGIX\0" + "GL_TEXTURE_COMPONENTS\0" + "GL_TEXTURE_COMPRESSED\0" + "GL_TEXTURE_COMPRESSED_ARB\0" + "GL_TEXTURE_COMPRESSED_FORMATS_ARB\0" + "GL_TEXTURE_COMPRESSED_IMAGE_SIZE\0" + "GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB\0" + "GL_TEXTURE_COMPRESSION_HINT\0" + "GL_TEXTURE_COMPRESSION_HINT_ARB\0" + "GL_TEXTURE_COORD_ARRAY\0" + "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING\0" + "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB\0" + "GL_TEXTURE_COORD_ARRAY_POINTER\0" + "GL_TEXTURE_COORD_ARRAY_SIZE\0" + "GL_TEXTURE_COORD_ARRAY_STRIDE\0" + "GL_TEXTURE_COORD_ARRAY_TYPE\0" + "GL_TEXTURE_CUBE_MAP\0" + "GL_TEXTURE_CUBE_MAP_ARB\0" + "GL_TEXTURE_CUBE_MAP_NEGATIVE_X\0" + "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB\0" + "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y\0" + "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB\0" + "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z\0" + "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB\0" + "GL_TEXTURE_CUBE_MAP_POSITIVE_X\0" + "GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB\0" + "GL_TEXTURE_CUBE_MAP_POSITIVE_Y\0" + "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB\0" + "GL_TEXTURE_CUBE_MAP_POSITIVE_Z\0" + "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB\0" + "GL_TEXTURE_DEPTH\0" + "GL_TEXTURE_DEPTH_SIZE\0" + "GL_TEXTURE_DEPTH_SIZE_ARB\0" + "GL_TEXTURE_ENV\0" + "GL_TEXTURE_ENV_COLOR\0" + "GL_TEXTURE_ENV_MODE\0" + "GL_TEXTURE_FILTER_CONTROL\0" + "GL_TEXTURE_GEN_MODE\0" + "GL_TEXTURE_GEN_Q\0" + "GL_TEXTURE_GEN_R\0" + "GL_TEXTURE_GEN_S\0" + "GL_TEXTURE_GEN_T\0" + "GL_TEXTURE_GEQUAL_R_SGIX\0" + "GL_TEXTURE_GREEN_SIZE\0" + "GL_TEXTURE_GREEN_SIZE_EXT\0" + "GL_TEXTURE_HEIGHT\0" + "GL_TEXTURE_INDEX_SIZE_EXT\0" + "GL_TEXTURE_INTENSITY_SIZE\0" + "GL_TEXTURE_INTENSITY_SIZE_EXT\0" + "GL_TEXTURE_INTERNAL_FORMAT\0" + "GL_TEXTURE_LEQUAL_R_SGIX\0" + "GL_TEXTURE_LOD_BIAS\0" + "GL_TEXTURE_LOD_BIAS_EXT\0" + "GL_TEXTURE_LOD_BIAS_R_SGIX\0" + "GL_TEXTURE_LOD_BIAS_S_SGIX\0" + "GL_TEXTURE_LOD_BIAS_T_SGIX\0" + "GL_TEXTURE_LUMINANCE_SIZE\0" + "GL_TEXTURE_LUMINANCE_SIZE_EXT\0" + "GL_TEXTURE_MAG_FILTER\0" + "GL_TEXTURE_MATRIX\0" + "GL_TEXTURE_MAX_ANISOTROPY_EXT\0" + "GL_TEXTURE_MAX_CLAMP_R_SGIX\0" + "GL_TEXTURE_MAX_CLAMP_S_SGIX\0" + "GL_TEXTURE_MAX_CLAMP_T_SGIX\0" + "GL_TEXTURE_MAX_LEVEL\0" + "GL_TEXTURE_MAX_LOD\0" + "GL_TEXTURE_MIN_FILTER\0" + "GL_TEXTURE_MIN_LOD\0" + "GL_TEXTURE_PRIORITY\0" + "GL_TEXTURE_RECTANGLE_ARB\0" + "GL_TEXTURE_RECTANGLE_NV\0" + "GL_TEXTURE_RED_SIZE\0" + "GL_TEXTURE_RED_SIZE_EXT\0" + "GL_TEXTURE_RESIDENT\0" + "GL_TEXTURE_STACK_DEPTH\0" + "GL_TEXTURE_TOO_LARGE_EXT\0" + "GL_TEXTURE_UNSIGNED_REMAP_MODE_NV\0" + "GL_TEXTURE_WIDTH\0" + "GL_TEXTURE_WRAP_R\0" + "GL_TEXTURE_WRAP_S\0" + "GL_TEXTURE_WRAP_T\0" + "GL_TIME_ELAPSED_EXT\0" + "GL_TRACK_MATRIX_NV\0" + "GL_TRACK_MATRIX_TRANSFORM_NV\0" + "GL_TRANSFORM_BIT\0" + "GL_TRANSPOSE_COLOR_MATRIX\0" + "GL_TRANSPOSE_COLOR_MATRIX_ARB\0" + "GL_TRANSPOSE_CURRENT_MATRIX_ARB\0" + "GL_TRANSPOSE_MODELVIEW_MATRIX\0" + "GL_TRANSPOSE_MODELVIEW_MATRIX_ARB\0" + "GL_TRANSPOSE_NV\0" + "GL_TRANSPOSE_PROJECTION_MATRIX\0" + "GL_TRANSPOSE_PROJECTION_MATRIX_ARB\0" + "GL_TRANSPOSE_TEXTURE_MATRIX\0" + "GL_TRANSPOSE_TEXTURE_MATRIX_ARB\0" + "GL_TRIANGLES\0" + "GL_TRIANGLE_FAN\0" + "GL_TRIANGLE_MESH_SUN\0" + "GL_TRIANGLE_STRIP\0" + "GL_TRUE\0" + "GL_UNPACK_ALIGNMENT\0" + "GL_UNPACK_IMAGE_HEIGHT\0" + "GL_UNPACK_LSB_FIRST\0" + "GL_UNPACK_ROW_LENGTH\0" + "GL_UNPACK_SKIP_IMAGES\0" + "GL_UNPACK_SKIP_PIXELS\0" + "GL_UNPACK_SKIP_ROWS\0" + "GL_UNPACK_SWAP_BYTES\0" + "GL_UNSIGNED_BYTE\0" + "GL_UNSIGNED_BYTE_2_3_3_REV\0" + "GL_UNSIGNED_BYTE_3_3_2\0" + "GL_UNSIGNED_INT\0" + "GL_UNSIGNED_INT_10_10_10_2\0" + "GL_UNSIGNED_INT_24_8_NV\0" + "GL_UNSIGNED_INT_2_10_10_10_REV\0" + "GL_UNSIGNED_INT_8_8_8_8\0" + "GL_UNSIGNED_INT_8_8_8_8_REV\0" + "GL_UNSIGNED_SHORT\0" + "GL_UNSIGNED_SHORT_1_5_5_5_REV\0" + "GL_UNSIGNED_SHORT_4_4_4_4\0" + "GL_UNSIGNED_SHORT_4_4_4_4_REV\0" + "GL_UNSIGNED_SHORT_5_5_5_1\0" + "GL_UNSIGNED_SHORT_5_6_5\0" + "GL_UNSIGNED_SHORT_5_6_5_REV\0" + "GL_UNSIGNED_SHORT_8_8_APPLE\0" + "GL_UNSIGNED_SHORT_8_8_MESA\0" + "GL_UNSIGNED_SHORT_8_8_REV_APPLE\0" + "GL_UNSIGNED_SHORT_8_8_REV_MESA\0" + "GL_UPPER_LEFT\0" + "GL_V2F\0" + "GL_V3F\0" + "GL_VALIDATE_STATUS\0" + "GL_VENDOR\0" + "GL_VERSION\0" + "GL_VERTEX_ARRAY\0" + "GL_VERTEX_ARRAY_BINDING_APPLE\0" + "GL_VERTEX_ARRAY_BUFFER_BINDING\0" + "GL_VERTEX_ARRAY_BUFFER_BINDING_ARB\0" + "GL_VERTEX_ARRAY_POINTER\0" + "GL_VERTEX_ARRAY_SIZE\0" + "GL_VERTEX_ARRAY_STRIDE\0" + "GL_VERTEX_ARRAY_TYPE\0" + "GL_VERTEX_ATTRIB_ARRAY0_NV\0" + "GL_VERTEX_ATTRIB_ARRAY10_NV\0" + "GL_VERTEX_ATTRIB_ARRAY11_NV\0" + "GL_VERTEX_ATTRIB_ARRAY12_NV\0" + "GL_VERTEX_ATTRIB_ARRAY13_NV\0" + "GL_VERTEX_ATTRIB_ARRAY14_NV\0" + "GL_VERTEX_ATTRIB_ARRAY15_NV\0" + "GL_VERTEX_ATTRIB_ARRAY1_NV\0" + "GL_VERTEX_ATTRIB_ARRAY2_NV\0" + "GL_VERTEX_ATTRIB_ARRAY3_NV\0" + "GL_VERTEX_ATTRIB_ARRAY4_NV\0" + "GL_VERTEX_ATTRIB_ARRAY5_NV\0" + "GL_VERTEX_ATTRIB_ARRAY6_NV\0" + "GL_VERTEX_ATTRIB_ARRAY7_NV\0" + "GL_VERTEX_ATTRIB_ARRAY8_NV\0" + "GL_VERTEX_ATTRIB_ARRAY9_NV\0" + "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\0" + "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB\0" + "GL_VERTEX_ATTRIB_ARRAY_ENABLED\0" + "GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB\0" + "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED\0" + "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB\0" + "GL_VERTEX_ATTRIB_ARRAY_POINTER\0" + "GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB\0" + "GL_VERTEX_ATTRIB_ARRAY_SIZE\0" + "GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB\0" + "GL_VERTEX_ATTRIB_ARRAY_STRIDE\0" + "GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB\0" + "GL_VERTEX_ATTRIB_ARRAY_TYPE\0" + "GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB\0" + "GL_VERTEX_BLEND_ARB\0" + "GL_VERTEX_PROGRAM_ARB\0" + "GL_VERTEX_PROGRAM_BINDING_NV\0" + "GL_VERTEX_PROGRAM_NV\0" + "GL_VERTEX_PROGRAM_POINT_SIZE\0" + "GL_VERTEX_PROGRAM_POINT_SIZE_ARB\0" + "GL_VERTEX_PROGRAM_POINT_SIZE_NV\0" + "GL_VERTEX_PROGRAM_TWO_SIDE\0" + "GL_VERTEX_PROGRAM_TWO_SIDE_ARB\0" + "GL_VERTEX_PROGRAM_TWO_SIDE_NV\0" + "GL_VERTEX_SHADER\0" + "GL_VERTEX_SHADER_ARB\0" + "GL_VERTEX_STATE_PROGRAM_NV\0" + "GL_VIEWPORT\0" + "GL_VIEWPORT_BIT\0" + "GL_WEIGHT_ARRAY_ARB\0" + "GL_WEIGHT_ARRAY_BUFFER_BINDING\0" + "GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB\0" + "GL_WEIGHT_ARRAY_POINTER_ARB\0" + "GL_WEIGHT_ARRAY_SIZE_ARB\0" + "GL_WEIGHT_ARRAY_STRIDE_ARB\0" + "GL_WEIGHT_ARRAY_TYPE_ARB\0" + "GL_WEIGHT_SUM_UNITY_ARB\0" + "GL_WRAP_BORDER_SUN\0" + "GL_WRITE_ONLY\0" + "GL_WRITE_ONLY_ARB\0" + "GL_XOR\0" + "GL_YCBCR_422_APPLE\0" + "GL_YCBCR_MESA\0" + "GL_ZERO\0" + "GL_ZOOM_X\0" + "GL_ZOOM_Y\0" + ; + +static const enum_elt all_enums[1737] = { - /* Boolean values */ - { "GL_FALSE", 0 }, - { "GL_TRUE", 1 }, - - /* Data types */ - { "GL_BYTE", 0x1400 }, - { "GL_UNSIGNED_BYTE", 0x1401 }, - { "GL_SHORT", 0x1402 }, - { "GL_UNSIGNED_SHORT", 0x1403 }, - { "GL_INT", 0x1404 }, - { "GL_UNSIGNED_INT", 0x1405 }, - { "GL_FLOAT", 0x1406 }, - { "GL_DOUBLE", 0x140A }, - { "GL_2_BYTES", 0x1407 }, - { "GL_3_BYTES", 0x1408 }, - { "GL_4_BYTES", 0x1409 }, - - /* Primitives */ - { "GL_LINES", 0x0001 }, - { "GL_POINTS", 0x0000 }, - { "GL_LINE_STRIP", 0x0003 }, - { "GL_LINE_LOOP", 0x0002 }, - { "GL_TRIANGLES", 0x0004 }, - { "GL_TRIANGLE_STRIP", 0x0005 }, - { "GL_TRIANGLE_FAN", 0x0006 }, - { "GL_QUADS", 0x0007 }, - { "GL_QUAD_STRIP", 0x0008 }, - { "GL_POLYGON", 0x0009 }, - { "GL_EDGE_FLAG", 0x0B43 }, - - /* Vertex Arrays */ - { "GL_VERTEX_ARRAY", 0x8074 }, - { "GL_NORMAL_ARRAY", 0x8075 }, - { "GL_COLOR_ARRAY", 0x8076 }, - { "GL_INDEX_ARRAY", 0x8077 }, - { "GL_TEXTURE_COORD_ARRAY", 0x8078 }, - { "GL_EDGE_FLAG_ARRAY", 0x8079 }, - { "GL_VERTEX_ARRAY_SIZE", 0x807A }, - { "GL_VERTEX_ARRAY_TYPE", 0x807B }, - { "GL_VERTEX_ARRAY_STRIDE", 0x807C }, - { "GL_NORMAL_ARRAY_TYPE", 0x807E }, - { "GL_NORMAL_ARRAY_STRIDE", 0x807F }, - { "GL_COLOR_ARRAY_SIZE", 0x8081 }, - { "GL_COLOR_ARRAY_TYPE", 0x8082 }, - { "GL_COLOR_ARRAY_STRIDE", 0x8083 }, - { "GL_INDEX_ARRAY_TYPE", 0x8085 }, - { "GL_INDEX_ARRAY_STRIDE", 0x8086 }, - { "GL_TEXTURE_COORD_ARRAY_SIZE", 0x8088 }, - { "GL_TEXTURE_COORD_ARRAY_TYPE", 0x8089 }, - { "GL_TEXTURE_COORD_ARRAY_STRIDE", 0x808A }, - { "GL_EDGE_FLAG_ARRAY_STRIDE", 0x808C }, - { "GL_VERTEX_ARRAY_POINTER", 0x808E }, - { "GL_NORMAL_ARRAY_POINTER", 0x808F }, - { "GL_COLOR_ARRAY_POINTER", 0x8090 }, - { "GL_INDEX_ARRAY_POINTER", 0x8091 }, - { "GL_TEXTURE_COORD_ARRAY_POINTER", 0x8092 }, - { "GL_EDGE_FLAG_ARRAY_POINTER", 0x8093 }, - { "GL_V2F", 0x2A20 }, - { "GL_V3F", 0x2A21 }, - { "GL_C4UB_V2F", 0x2A22 }, - { "GL_C4UB_V3F", 0x2A23 }, - { "GL_C3F_V3F", 0x2A24 }, - { "GL_N3F_V3F", 0x2A25 }, - { "GL_C4F_N3F_V3F", 0x2A26 }, - { "GL_T2F_V3F", 0x2A27 }, - { "GL_T4F_V4F", 0x2A28 }, - { "GL_T2F_C4UB_V3F", 0x2A29 }, - { "GL_T2F_C3F_V3F", 0x2A2A }, - { "GL_T2F_N3F_V3F", 0x2A2B }, - { "GL_T2F_C4F_N3F_V3F", 0x2A2C }, - { "GL_T4F_C4F_N3F_V4F", 0x2A2D }, - - /* Matrix Mode */ - { "GL_MATRIX_MODE", 0x0BA0 }, - { "GL_MODELVIEW", 0x1700 }, - { "GL_PROJECTION", 0x1701 }, - { "GL_TEXTURE", 0x1702 }, - - /* Points */ - { "GL_POINT_SMOOTH", 0x0B10 }, - { "GL_POINT_SIZE", 0x0B11 }, - { "GL_POINT_SIZE_GRANULARITY ", 0x0B13 }, - { "GL_POINT_SIZE_RANGE", 0x0B12 }, - - /* Lines */ - { "GL_LINE_SMOOTH", 0x0B20 }, - { "GL_LINE_STIPPLE", 0x0B24 }, - { "GL_LINE_STIPPLE_PATTERN", 0x0B25 }, - { "GL_LINE_STIPPLE_REPEAT", 0x0B26 }, - { "GL_LINE_WIDTH", 0x0B21 }, - { "GL_LINE_WIDTH_GRANULARITY", 0x0B23 }, - { "GL_LINE_WIDTH_RANGE", 0x0B22 }, - - /* Polygons */ - { "GL_POINT", 0x1B00 }, - { "GL_LINE", 0x1B01 }, - { "GL_FILL", 0x1B02 }, - { "GL_CCW", 0x0901 }, - { "GL_CW", 0x0900 }, - { "GL_FRONT", 0x0404 }, - { "GL_BACK", 0x0405 }, - { "GL_CULL_FACE", 0x0B44 }, - { "GL_CULL_FACE_MODE", 0x0B45 }, - { "GL_POLYGON_SMOOTH", 0x0B41 }, - { "GL_POLYGON_STIPPLE", 0x0B42 }, - { "GL_FRONT_FACE", 0x0B46 }, - { "GL_POLYGON_MODE", 0x0B40 }, - { "GL_POLYGON_OFFSET_FACTOR", 0x8038 }, - { "GL_POLYGON_OFFSET_UNITS", 0x2A00 }, - { "GL_POLYGON_OFFSET_POINT", 0x2A01 }, - { "GL_POLYGON_OFFSET_LINE", 0x2A02 }, - { "GL_POLYGON_OFFSET_FILL", 0x8037 }, - - /* Display Lists */ - { "GL_COMPILE", 0x1300 }, - { "GL_COMPILE_AND_EXECUTE", 0x1301 }, - { "GL_LIST_BASE", 0x0B32 }, - { "GL_LIST_INDEX", 0x0B33 }, - { "GL_LIST_MODE", 0x0B30 }, - - /* Depth buffer */ - { "GL_NEVER", 0x0200 }, - { "GL_LESS", 0x0201 }, - { "GL_GEQUAL", 0x0206 }, - { "GL_LEQUAL", 0x0203 }, - { "GL_GREATER", 0x0204 }, - { "GL_NOTEQUAL", 0x0205 }, - { "GL_EQUAL", 0x0202 }, - { "GL_ALWAYS", 0x0207 }, - { "GL_DEPTH_TEST", 0x0B71 }, - { "GL_DEPTH_BITS", 0x0D56 }, - { "GL_DEPTH_CLEAR_VALUE", 0x0B73 }, - { "GL_DEPTH_FUNC", 0x0B74 }, - { "GL_DEPTH_RANGE", 0x0B70 }, - { "GL_DEPTH_WRITEMASK", 0x0B72 }, - { "GL_DEPTH_COMPONENT", 0x1902 }, - - /* Lighting */ - { "GL_LIGHTING", 0x0B50 }, - { "GL_LIGHT0", 0x4000 }, - { "GL_LIGHT1", 0x4001 }, - { "GL_LIGHT2", 0x4002 }, - { "GL_LIGHT3", 0x4003 }, - { "GL_LIGHT4", 0x4004 }, - { "GL_LIGHT5", 0x4005 }, - { "GL_LIGHT6", 0x4006 }, - { "GL_LIGHT7", 0x4007 }, - { "GL_SPOT_EXPONENT", 0x1205 }, - { "GL_SPOT_CUTOFF", 0x1206 }, - { "GL_CONSTANT_ATTENUATION", 0x1207 }, - { "GL_LINEAR_ATTENUATION", 0x1208 }, - { "GL_QUADRATIC_ATTENUATION", 0x1209 }, - { "GL_AMBIENT", 0x1200 }, - { "GL_DIFFUSE", 0x1201 }, - { "GL_SPECULAR", 0x1202 }, - { "GL_SHININESS", 0x1601 }, - { "GL_EMISSION", 0x1600 }, - { "GL_POSITION", 0x1203 }, - { "GL_SPOT_DIRECTION", 0x1204 }, - { "GL_AMBIENT_AND_DIFFUSE", 0x1602 }, - { "GL_COLOR_INDEXES", 0x1603 }, - { "GL_LIGHT_MODEL_TWO_SIDE", 0x0B52 }, - { "GL_LIGHT_MODEL_LOCAL_VIEWER", 0x0B51 }, - { "GL_LIGHT_MODEL_AMBIENT", 0x0B53 }, - { "GL_FRONT_AND_BACK", 0x0408 }, - { "GL_SHADE_MODEL", 0x0B54 }, - { "GL_FLAT", 0x1D00 }, - { "GL_SMOOTH", 0x1D01 }, - { "GL_COLOR_MATERIAL", 0x0B57 }, - { "GL_COLOR_MATERIAL_FACE", 0x0B55 }, - { "GL_COLOR_MATERIAL_PARAMETER", 0x0B56 }, - { "GL_NORMALIZE", 0x0BA1 }, - - /* User clipping planes */ - { "GL_CLIP_PLANE0", 0x3000 }, - { "GL_CLIP_PLANE1", 0x3001 }, - { "GL_CLIP_PLANE2", 0x3002 }, - { "GL_CLIP_PLANE3", 0x3003 }, - { "GL_CLIP_PLANE4", 0x3004 }, - { "GL_CLIP_PLANE5", 0x3005 }, - - /* Accumulation buffer */ - { "GL_ACCUM_RED_BITS", 0x0D58 }, - { "GL_ACCUM_GREEN_BITS", 0x0D59 }, - { "GL_ACCUM_BLUE_BITS", 0x0D5A }, - { "GL_ACCUM_ALPHA_BITS", 0x0D5B }, - { "GL_ACCUM_CLEAR_VALUE", 0x0B80 }, - { "GL_ACCUM", 0x0100 }, - { "GL_ADD", 0x0104 }, - { "GL_LOAD", 0x0101 }, - { "GL_MULT", 0x0103 }, - { "GL_RETURN", 0x0102 }, - - /* Alpha testing */ - { "GL_ALPHA_TEST", 0x0BC0 }, - { "GL_ALPHA_TEST_REF", 0x0BC2 }, - { "GL_ALPHA_TEST_FUNC", 0x0BC1 }, - - /* Blending */ - { "GL_BLEND", 0x0BE2 }, - { "GL_BLEND_SRC", 0x0BE1 }, - { "GL_BLEND_DST", 0x0BE0 }, - { "GL_ZERO", 0 }, - { "GL_ONE", 1 }, - { "GL_SRC_COLOR", 0x0300 }, - { "GL_ONE_MINUS_SRC_COLOR", 0x0301 }, - { "GL_DST_COLOR", 0x0306 }, - { "GL_ONE_MINUS_DST_COLOR", 0x0307 }, - { "GL_SRC_ALPHA", 0x0302 }, - { "GL_ONE_MINUS_SRC_ALPHA", 0x0303 }, - { "GL_DST_ALPHA", 0x0304 }, - { "GL_ONE_MINUS_DST_ALPHA", 0x0305 }, - { "GL_SRC_ALPHA_SATURATE", 0x0308 }, - { "GL_CONSTANT_COLOR", 0x8001 }, - { "GL_ONE_MINUS_CONSTANT_COLOR", 0x8002 }, - { "GL_CONSTANT_ALPHA", 0x8003 }, - { "GL_ONE_MINUS_CONSTANT_ALPHA", 0x8004 }, - - /* Render Mode */ - { "GL_FEEDBACK", 0x1C01 }, - { "GL_RENDER", 0x1C00 }, - { "GL_SELECT", 0x1C02 }, - - /* Feedback */ - { "GL_2D", 0x0600 }, - { "GL_3D", 0x0601 }, - { "GL_3D_COLOR", 0x0602 }, - { "GL_3D_COLOR_TEXTURE", 0x0603 }, - { "GL_4D_COLOR_TEXTURE", 0x0604 }, - { "GL_POINT_TOKEN", 0x0701 }, - { "GL_LINE_TOKEN", 0x0702 }, - { "GL_LINE_RESET_TOKEN", 0x0707 }, - { "GL_POLYGON_TOKEN", 0x0703 }, - { "GL_BITMAP_TOKEN", 0x0704 }, - { "GL_DRAW_PIXEL_TOKEN", 0x0705 }, - { "GL_COPY_PIXEL_TOKEN", 0x0706 }, - { "GL_PASS_THROUGH_TOKEN", 0x0700 }, - { "GL_FEEDBACK_BUFFER_POINTER", 0x0DF0 }, - { "GL_FEEDBACK_BUFFER_SIZE", 0x0DF1 }, - { "GL_FEEDBACK_BUFFER_TYPE", 0x0DF2 }, - - /* Selection */ - { "GL_SELECTION_BUFFER_POINTER", 0x0DF3 }, - { "GL_SELECTION_BUFFER_SIZE", 0x0DF4 }, - - /* Fog */ - { "GL_FOG", 0x0B60 }, - { "GL_FOG_MODE", 0x0B65 }, - { "GL_FOG_DENSITY", 0x0B62 }, - { "GL_FOG_COLOR", 0x0B66 }, - { "GL_FOG_INDEX", 0x0B61 }, - { "GL_FOG_START", 0x0B63 }, - { "GL_FOG_END", 0x0B64 }, - { "GL_LINEAR", 0x2601 }, - { "GL_EXP", 0x0800 }, - { "GL_EXP2", 0x0801 }, - - /* Logic Ops */ - { "GL_LOGIC_OP", 0x0BF1 }, - { "GL_INDEX_LOGIC_OP", 0x0BF1 }, - { "GL_COLOR_LOGIC_OP", 0x0BF2 }, - { "GL_LOGIC_OP_MODE", 0x0BF0 }, - { "GL_CLEAR", 0x1500 }, - { "GL_SET", 0x150F }, - { "GL_COPY", 0x1503 }, - { "GL_COPY_INVERTED", 0x150C }, - { "GL_NOOP", 0x1505 }, - { "GL_INVERT", 0x150A }, - { "GL_AND", 0x1501 }, - { "GL_NAND", 0x150E }, - { "GL_OR", 0x1507 }, - { "GL_NOR", 0x1508 }, - { "GL_XOR", 0x1506 }, - { "GL_EQUIV", 0x1509 }, - { "GL_AND_REVERSE", 0x1502 }, - { "GL_AND_INVERTED", 0x1504 }, - { "GL_OR_REVERSE", 0x150B }, - { "GL_OR_INVERTED", 0x150D }, - - /* Stencil */ - { "GL_STENCIL_TEST", 0x0B90 }, - { "GL_STENCIL_WRITEMASK", 0x0B98 }, - { "GL_STENCIL_BITS", 0x0D57 }, - { "GL_STENCIL_FUNC", 0x0B92 }, - { "GL_STENCIL_VALUE_MASK", 0x0B93 }, - { "GL_STENCIL_REF", 0x0B97 }, - { "GL_STENCIL_FAIL", 0x0B94 }, - { "GL_STENCIL_PASS_DEPTH_PASS", 0x0B96 }, - { "GL_STENCIL_PASS_DEPTH_FAIL", 0x0B95 }, - { "GL_STENCIL_CLEAR_VALUE", 0x0B91 }, - { "GL_STENCIL_INDEX", 0x1901 }, - { "GL_KEEP", 0x1E00 }, - { "GL_REPLACE", 0x1E01 }, - { "GL_INCR", 0x1E02 }, - { "GL_DECR", 0x1E03 }, - - /* Buffers, Pixel Drawing/Reading */ - { "GL_NONE", 0 }, - { "GL_LEFT", 0x0406 }, - { "GL_RIGHT", 0x0407 }, - { "GL_FRONT_LEFT", 0x0400 }, - { "GL_FRONT_RIGHT", 0x0401 }, - { "GL_BACK_LEFT", 0x0402 }, - { "GL_BACK_RIGHT", 0x0403 }, - { "GL_AUX0", 0x0409 }, - { "GL_AUX1", 0x040A }, - { "GL_AUX2", 0x040B }, - { "GL_AUX3", 0x040C }, - { "GL_COLOR_INDEX", 0x1900 }, - { "GL_RED", 0x1903 }, - { "GL_GREEN", 0x1904 }, - { "GL_BLUE", 0x1905 }, - { "GL_ALPHA", 0x1906 }, - { "GL_LUMINANCE", 0x1909 }, - { "GL_LUMINANCE_ALPHA", 0x190A }, - { "GL_ALPHA_BITS", 0x0D55 }, - { "GL_RED_BITS", 0x0D52 }, - { "GL_GREEN_BITS", 0x0D53 }, - { "GL_BLUE_BITS", 0x0D54 }, - { "GL_INDEX_BITS", 0x0D51 }, - { "GL_SUBPIXEL_BITS", 0x0D50 }, - { "GL_AUX_BUFFERS", 0x0C00 }, - { "GL_READ_BUFFER", 0x0C02 }, - { "GL_DRAW_BUFFER", 0x0C01 }, - { "GL_DOUBLEBUFFER", 0x0C32 }, - { "GL_STEREO", 0x0C33 }, - { "GL_BITMAP", 0x1A00 }, - { "GL_COLOR", 0x1800 }, - { "GL_DEPTH", 0x1801 }, - { "GL_STENCIL", 0x1802 }, - { "GL_DITHER", 0x0BD0 }, - { "GL_RGB", 0x1907 }, - { "GL_RGBA", 0x1908 }, - - /* Implementation limits */ - { "GL_MAX_LIST_NESTING", 0x0B31 }, - { "GL_MAX_ATTRIB_STACK_DEPTH", 0x0D35 }, - { "GL_MAX_MODELVIEW_STACK_DEPTH", 0x0D36 }, - { "GL_MAX_NAME_STACK_DEPTH", 0x0D37 }, - { "GL_MAX_PROJECTION_STACK_DEPTH", 0x0D38 }, - { "GL_MAX_TEXTURE_STACK_DEPTH", 0x0D39 }, - { "GL_MAX_EVAL_ORDER", 0x0D30 }, - { "GL_MAX_LIGHTS", 0x0D31 }, - { "GL_MAX_CLIP_PLANES", 0x0D32 }, - { "GL_MAX_TEXTURE_SIZE", 0x0D33 }, - { "GL_MAX_PIXEL_MAP_TABLE", 0x0D34 }, - { "GL_MAX_VIEWPORT_DIMS", 0x0D3A }, - { "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH", 0x0D3B }, - - - { "GL_ATTRIB_STACK_DEPTH", 0x0BB0 }, - { "GL_CLIENT_ATTRIB_STACK_DEPTH", 0x0BB1 }, - { "GL_COLOR_CLEAR_VALUE", 0x0C22 }, - { "GL_COLOR_WRITEMASK", 0x0C23 }, - { "GL_CURRENT_INDEX", 0x0B01 }, - { "GL_CURRENT_COLOR", 0x0B00 }, - { "GL_CURRENT_NORMAL", 0x0B02 }, - { "GL_CURRENT_RASTER_COLOR", 0x0B04 }, - { "GL_CURRENT_RASTER_DISTANCE", 0x0B09 }, - { "GL_CURRENT_RASTER_INDEX", 0x0B05 }, - { "GL_CURRENT_RASTER_POSITION", 0x0B07 }, - { "GL_CURRENT_RASTER_TEXTURE_COORDS", 0x0B06}, - { "GL_CURRENT_RASTER_POSITION_VALID", 0x0B08 }, - { "GL_CURRENT_TEXTURE_COORDS", 0x0B03 }, - { "GL_INDEX_CLEAR_VALUE", 0x0C20 }, - { "GL_INDEX_MODE", 0x0C30 }, - { "GL_INDEX_WRITEMASK", 0x0C21 }, - { "GL_MODELVIEW_MATRIX", 0x0BA6 }, - { "GL_MODELVIEW_STACK_DEPTH", 0x0BA3 }, - { "GL_NAME_STACK_DEPTH", 0x0D70 }, - { "GL_PROJECTION_MATRIX", 0x0BA7 }, - { "GL_PROJECTION_STACK_DEPTH", 0x0BA4 }, - { "GL_RENDER_MODE", 0x0C40 }, - { "GL_RGBA_MODE", 0x0C31 }, - { "GL_TEXTURE_MATRIX", 0x0BA8 }, - { "GL_TEXTURE_STACK_DEPTH", 0x0BA5 }, - { "GL_VIEWPORT", 0x0BA2 }, - - - /* Evaluators */ - { "GL_AUTO_NORMAL", 0x0D80 }, - { "GL_MAP1_COLOR_4", 0x0D90 }, - { "GL_MAP1_GRID_DOMAIN", 0x0DD0 }, - { "GL_MAP1_GRID_SEGMENTS", 0x0DD1 }, - { "GL_MAP1_INDEX", 0x0D91 }, - { "GL_MAP1_NORMAL", 0x0D92 }, - { "GL_MAP1_TEXTURE_COORD_1", 0x0D93 }, - { "GL_MAP1_TEXTURE_COORD_2", 0x0D94 }, - { "GL_MAP1_TEXTURE_COORD_3", 0x0D95 }, - { "GL_MAP1_TEXTURE_COORD_4", 0x0D96 }, - { "GL_MAP1_VERTEX_3", 0x0D97 }, - { "GL_MAP1_VERTEX_4", 0x0D98 }, - { "GL_MAP2_COLOR_4", 0x0DB0 }, - { "GL_MAP2_GRID_DOMAIN", 0x0DD2 }, - { "GL_MAP2_GRID_SEGMENTS", 0x0DD3 }, - { "GL_MAP2_INDEX", 0x0DB1 }, - { "GL_MAP2_NORMAL", 0x0DB2 }, - { "GL_MAP2_TEXTURE_COORD_1", 0x0DB3 }, - { "GL_MAP2_TEXTURE_COORD_2", 0x0DB4 }, - { "GL_MAP2_TEXTURE_COORD_3", 0x0DB5 }, - { "GL_MAP2_TEXTURE_COORD_4", 0x0DB6 }, - { "GL_MAP2_VERTEX_3", 0x0DB7 }, - { "GL_MAP2_VERTEX_4", 0x0DB8 }, - { "GL_COEFF", 0x0A00 }, - { "GL_DOMAIN", 0x0A02 }, - { "GL_ORDER", 0x0A01 }, - - /* Hints */ - { "GL_FOG_HINT", 0x0C54 }, - { "GL_LINE_SMOOTH_HINT", 0x0C52 }, - { "GL_PERSPECTIVE_CORRECTION_HINT", 0x0C50 }, - { "GL_POINT_SMOOTH_HINT", 0x0C51 }, - { "GL_POLYGON_SMOOTH_HINT", 0x0C53 }, - { "GL_DONT_CARE", 0x1100 }, - { "GL_FASTEST", 0x1101 }, - { "GL_NICEST", 0x1102 }, - - /* Scissor box */ - { "GL_SCISSOR_TEST", 0x0C11 }, - { "GL_SCISSOR_BOX", 0x0C10 }, - - /* Pixel Mode / Transfer */ - { "GL_MAP_COLOR", 0x0D10 }, - { "GL_MAP_STENCIL", 0x0D11 }, - { "GL_INDEX_SHIFT", 0x0D12 }, - { "GL_INDEX_OFFSET", 0x0D13 }, - { "GL_RED_SCALE", 0x0D14 }, - { "GL_RED_BIAS", 0x0D15 }, - { "GL_GREEN_SCALE", 0x0D18 }, - { "GL_GREEN_BIAS", 0x0D19 }, - { "GL_BLUE_SCALE", 0x0D1A }, - { "GL_BLUE_BIAS", 0x0D1B }, - { "GL_ALPHA_SCALE", 0x0D1C }, - { "GL_ALPHA_BIAS", 0x0D1D }, - { "GL_DEPTH_SCALE", 0x0D1E }, - { "GL_DEPTH_BIAS", 0x0D1F }, - { "GL_PIXEL_MAP_S_TO_S_SIZE", 0x0CB1 }, - { "GL_PIXEL_MAP_I_TO_I_SIZE", 0x0CB0 }, - { "GL_PIXEL_MAP_I_TO_R_SIZE", 0x0CB2 }, - { "GL_PIXEL_MAP_I_TO_G_SIZE", 0x0CB3 }, - { "GL_PIXEL_MAP_I_TO_B_SIZE", 0x0CB4 }, - { "GL_PIXEL_MAP_I_TO_A_SIZE", 0x0CB5 }, - { "GL_PIXEL_MAP_R_TO_R_SIZE", 0x0CB6 }, - { "GL_PIXEL_MAP_G_TO_G_SIZE", 0x0CB7 }, - { "GL_PIXEL_MAP_B_TO_B_SIZE", 0x0CB8 }, - { "GL_PIXEL_MAP_A_TO_A_SIZE", 0x0CB9 }, - { "GL_PIXEL_MAP_S_TO_S", 0x0C71 }, - { "GL_PIXEL_MAP_I_TO_I", 0x0C70 }, - { "GL_PIXEL_MAP_I_TO_R", 0x0C72 }, - { "GL_PIXEL_MAP_I_TO_G", 0x0C73 }, - { "GL_PIXEL_MAP_I_TO_B", 0x0C74 }, - { "GL_PIXEL_MAP_I_TO_A", 0x0C75 }, - { "GL_PIXEL_MAP_R_TO_R", 0x0C76 }, - { "GL_PIXEL_MAP_G_TO_G", 0x0C77 }, - { "GL_PIXEL_MAP_B_TO_B", 0x0C78 }, - { "GL_PIXEL_MAP_A_TO_A", 0x0C79 }, - { "GL_PACK_ALIGNMENT", 0x0D05 }, - { "GL_PACK_LSB_FIRST", 0x0D01 }, - { "GL_PACK_ROW_LENGTH", 0x0D02 }, - { "GL_PACK_SKIP_PIXELS", 0x0D04 }, - { "GL_PACK_SKIP_ROWS", 0x0D03 }, - { "GL_PACK_SWAP_BYTES", 0x0D00 }, - { "GL_UNPACK_ALIGNMENT", 0x0CF5 }, - { "GL_UNPACK_LSB_FIRST", 0x0CF1 }, - { "GL_UNPACK_ROW_LENGTH", 0x0CF2 }, - { "GL_UNPACK_SKIP_PIXELS", 0x0CF4 }, - { "GL_UNPACK_SKIP_ROWS", 0x0CF3 }, - { "GL_UNPACK_SWAP_BYTES", 0x0CF0 }, - { "GL_ZOOM_X", 0x0D16 }, - { "GL_ZOOM_Y", 0x0D17 }, - - /* Texture mapping */ - { "GL_TEXTURE_ENV", 0x2300 }, - { "GL_TEXTURE_ENV_MODE", 0x2200 }, - { "GL_TEXTURE_1D", 0x0DE0 }, - { "GL_TEXTURE_2D", 0x0DE1 }, - { "GL_TEXTURE_WRAP_S", 0x2802 }, - { "GL_TEXTURE_WRAP_T", 0x2803 }, - { "GL_TEXTURE_MAG_FILTER", 0x2800 }, - { "GL_TEXTURE_MIN_FILTER", 0x2801 }, - { "GL_TEXTURE_ENV_COLOR", 0x2201 }, - { "GL_TEXTURE_GEN_S", 0x0C60 }, - { "GL_TEXTURE_GEN_T", 0x0C61 }, - { "GL_TEXTURE_GEN_MODE", 0x2500 }, - { "GL_TEXTURE_BORDER_COLOR", 0x1004 }, - { "GL_TEXTURE_WIDTH", 0x1000 }, - { "GL_TEXTURE_HEIGHT", 0x1001 }, - { "GL_TEXTURE_BORDER", 0x1005 }, - { "GL_TEXTURE_COMPONENTS", 0x1003 }, - { "GL_TEXTURE_RED_SIZE", 0x805C }, - { "GL_TEXTURE_GREEN_SIZE", 0x805D }, - { "GL_TEXTURE_BLUE_SIZE", 0x805E }, - { "GL_TEXTURE_ALPHA_SIZE", 0x805F }, - { "GL_TEXTURE_LUMINANCE_SIZE", 0x8060 }, - { "GL_TEXTURE_INTENSITY_SIZE", 0x8061 }, - { "GL_NEAREST_MIPMAP_NEAREST", 0x2700 }, - { "GL_NEAREST_MIPMAP_LINEAR", 0x2702 }, - { "GL_LINEAR_MIPMAP_NEAREST", 0x2701 }, - { "GL_LINEAR_MIPMAP_LINEAR", 0x2703 }, - { "GL_OBJECT_LINEAR", 0x2401 }, - { "GL_OBJECT_PLANE", 0x2501 }, - { "GL_EYE_LINEAR", 0x2400 }, - { "GL_EYE_PLANE", 0x2502 }, - { "GL_SPHERE_MAP", 0x2402 }, - { "GL_DECAL", 0x2101 }, - { "GL_MODULATE", 0x2100 }, - { "GL_NEAREST", 0x2600 }, - { "GL_REPEAT", 0x2901 }, - { "GL_CLAMP", 0x2900 }, - { "GL_S", 0x2000 }, - { "GL_T", 0x2001 }, - { "GL_R", 0x2002 }, - { "GL_Q", 0x2003 }, - { "GL_TEXTURE_GEN_R", 0x0C62 }, - { "GL_TEXTURE_GEN_Q", 0x0C63 }, - - /* GL 1.1 texturing */ - { "GL_PROXY_TEXTURE_1D", 0x8063 }, - { "GL_PROXY_TEXTURE_2D", 0x8064 }, - { "GL_TEXTURE_PRIORITY", 0x8066 }, - { "GL_TEXTURE_RESIDENT", 0x8067 }, - { "GL_TEXTURE_BINDING_1D", 0x8068 }, - { "GL_TEXTURE_BINDING_2D", 0x8069 }, - { "GL_TEXTURE_INTERNAL_FORMAT", 0x1003 }, - - /* GL 1.2 texturing */ - { "GL_PACK_SKIP_IMAGES", 0x806B }, - { "GL_PACK_IMAGE_HEIGHT", 0x806C }, - { "GL_UNPACK_SKIP_IMAGES", 0x806D }, - { "GL_UNPACK_IMAGE_HEIGHT", 0x806E }, - { "GL_TEXTURE_3D", 0x806F }, - { "GL_PROXY_TEXTURE_3D", 0x8070 }, - { "GL_TEXTURE_DEPTH", 0x8071 }, - { "GL_TEXTURE_WRAP_R", 0x8072 }, - { "GL_MAX_3D_TEXTURE_SIZE", 0x8073 }, - { "GL_TEXTURE_BINDING_3D", 0x806A }, - - /* Internal texture formats (GL 1.1) */ - { "GL_ALPHA4", 0x803B }, - { "GL_ALPHA8", 0x803C }, - { "GL_ALPHA12", 0x803D }, - { "GL_ALPHA16", 0x803E }, - { "GL_LUMINANCE4", 0x803F }, - { "GL_LUMINANCE8", 0x8040 }, - { "GL_LUMINANCE12", 0x8041 }, - { "GL_LUMINANCE16", 0x8042 }, - { "GL_LUMINANCE4_ALPHA4", 0x8043 }, - { "GL_LUMINANCE6_ALPHA2", 0x8044 }, - { "GL_LUMINANCE8_ALPHA8", 0x8045 }, - { "GL_LUMINANCE12_ALPHA4", 0x8046 }, - { "GL_LUMINANCE12_ALPHA12", 0x8047 }, - { "GL_LUMINANCE16_ALPHA16", 0x8048 }, - { "GL_INTENSITY", 0x8049 }, - { "GL_INTENSITY4", 0x804A }, - { "GL_INTENSITY8", 0x804B }, - { "GL_INTENSITY12", 0x804C }, - { "GL_INTENSITY16", 0x804D }, - { "GL_R3_G3_B2", 0x2A10 }, - { "GL_RGB4", 0x804F }, - { "GL_RGB5", 0x8050 }, - { "GL_RGB8", 0x8051 }, - { "GL_RGB10", 0x8052 }, - { "GL_RGB12", 0x8053 }, - { "GL_RGB16", 0x8054 }, - { "GL_RGBA2", 0x8055 }, - { "GL_RGBA4", 0x8056 }, - { "GL_RGB5_A1", 0x8057 }, - { "GL_RGBA8", 0x8058 }, - { "GL_RGB10_A2", 0x8059 }, - { "GL_RGBA12", 0x805A }, - { "GL_RGBA16", 0x805B }, - - /* Utility */ - { "GL_VENDOR", 0x1F00 }, - { "GL_RENDERER", 0x1F01 }, - { "GL_VERSION", 0x1F02 }, - { "GL_EXTENSIONS", 0x1F03 }, - - /* Errors */ - { "GL_INVALID_VALUE", 0x0501 }, - { "GL_INVALID_ENUM", 0x0500 }, - { "GL_INVALID_OPERATION", 0x0502 }, - { "GL_STACK_OVERFLOW", 0x0503 }, - { "GL_STACK_UNDERFLOW", 0x0504 }, - { "GL_OUT_OF_MEMORY", 0x0505 }, - - /* - * Extensions - */ - - { "GL_CONSTANT_COLOR_EXT", 0x8001 }, - { "GL_ONE_MINUS_CONSTANT_COLOR_EXT", 0x8002 }, - { "GL_CONSTANT_ALPHA_EXT", 0x8003 }, - { "GL_ONE_MINUS_CONSTANT_ALPHA_EXT", 0x8004 }, - { "GL_BLEND_EQUATION_EXT", 0x8009 }, - { "GL_MIN_EXT", 0x8007 }, - { "GL_MAX_EXT", 0x8008 }, - { "GL_FUNC_ADD_EXT", 0x8006 }, - { "GL_FUNC_SUBTRACT_EXT", 0x800A }, - { "GL_FUNC_REVERSE_SUBTRACT_EXT", 0x800B }, - { "GL_BLEND_COLOR_EXT", 0x8005 }, - - { "GL_POLYGON_OFFSET_EXT", 0x8037 }, - { "GL_POLYGON_OFFSET_FACTOR_EXT", 0x8038 }, - { "GL_POLYGON_OFFSET_BIAS_EXT", 0x8039 }, - - - { "GL_VERTEX_ARRAY_EXT", 0x8074 }, - { "GL_NORMAL_ARRAY_EXT", 0x8075 }, - { "GL_COLOR_ARRAY_EXT", 0x8076 }, - { "GL_INDEX_ARRAY_EXT", 0x8077 }, - { "GL_TEXTURE_COORD_ARRAY_EXT", 0x8078 }, - { "GL_EDGE_FLAG_ARRAY_EXT", 0x8079 }, - { "GL_VERTEX_ARRAY_SIZE_EXT", 0x807A }, - { "GL_VERTEX_ARRAY_TYPE_EXT", 0x807B }, - { "GL_VERTEX_ARRAY_STRIDE_EXT", 0x807C }, - { "GL_VERTEX_ARRAY_COUNT_EXT", 0x807D }, - { "GL_NORMAL_ARRAY_TYPE_EXT", 0x807E }, - { "GL_NORMAL_ARRAY_STRIDE_EXT", 0x807F }, - { "GL_NORMAL_ARRAY_COUNT_EXT", 0x8080 }, - { "GL_COLOR_ARRAY_SIZE_EXT", 0x8081 }, - { "GL_COLOR_ARRAY_TYPE_EXT", 0x8082 }, - { "GL_COLOR_ARRAY_STRIDE_EXT", 0x8083 }, - { "GL_COLOR_ARRAY_COUNT_EXT", 0x8084 }, - { "GL_INDEX_ARRAY_TYPE_EXT", 0x8085 }, - { "GL_INDEX_ARRAY_STRIDE_EXT", 0x8086 }, - { "GL_INDEX_ARRAY_COUNT_EXT", 0x8087 }, - { "GL_TEXTURE_COORD_ARRAY_SIZE_EXT", 0x8088 }, - { "GL_TEXTURE_COORD_ARRAY_TYPE_EXT", 0x8089 }, - { "GL_TEXTURE_COORD_ARRAY_STRIDE_EXT", 0x808A }, - { "GL_TEXTURE_COORD_ARRAY_COUNT_EXT", 0x808B }, - { "GL_EDGE_FLAG_ARRAY_STRIDE_EXT", 0x808C }, - { "GL_EDGE_FLAG_ARRAY_COUNT_EXT", 0x808D }, - { "GL_VERTEX_ARRAY_POINTER_EXT", 0x808E }, - { "GL_NORMAL_ARRAY_POINTER_EXT", 0x808F }, - { "GL_COLOR_ARRAY_POINTER_EXT", 0x8090 }, - { "GL_INDEX_ARRAY_POINTER_EXT", 0x8091 }, - { "GL_TEXTURE_COORD_ARRAY_POINTER_EXT", 0x8092 }, - { "GL_EDGE_FLAG_ARRAY_POINTER_EXT", 0x8093 }, - - { "GL_TEXTURE_PRIORITY_EXT", 0x8066 }, - { "GL_TEXTURE_RESIDENT_EXT", 0x8067 }, - { "GL_TEXTURE_1D_BINDING_EXT", 0x8068 }, - { "GL_TEXTURE_2D_BINDING_EXT", 0x8069 }, - - { "GL_PACK_SKIP_IMAGES_EXT", 0x806B }, - { "GL_PACK_IMAGE_HEIGHT_EXT", 0x806C }, - { "GL_UNPACK_SKIP_IMAGES_EXT", 0x806D }, - { "GL_UNPACK_IMAGE_HEIGHT_EXT", 0x806E }, - { "GL_TEXTURE_3D_EXT", 0x806F }, - { "GL_PROXY_TEXTURE_3D_EXT", 0x8070 }, - { "GL_TEXTURE_DEPTH_EXT", 0x8071 }, - { "GL_TEXTURE_WRAP_R_EXT", 0x8072 }, - { "GL_MAX_3D_TEXTURE_SIZE_EXT", 0x8073 }, - { "GL_TEXTURE_3D_BINDING_EXT", 0x806A }, - - { "GL_TABLE_TOO_LARGE_EXT", 0x8031 }, - { "GL_COLOR_TABLE_FORMAT_EXT", 0x80D8 }, - { "GL_COLOR_TABLE_WIDTH_EXT", 0x80D9 }, - { "GL_COLOR_TABLE_RED_SIZE_EXT", 0x80DA }, - { "GL_COLOR_TABLE_GREEN_SIZE_EXT", 0x80DB }, - { "GL_COLOR_TABLE_BLUE_SIZE_EXT", 0x80DC }, - { "GL_COLOR_TABLE_ALPHA_SIZE_EXT", 0x80DD }, - { "GL_COLOR_TABLE_LUMINANCE_SIZE_EXT", 0x80DE }, - { "GL_COLOR_TABLE_INTENSITY_SIZE_EXT", 0x80DF }, - { "GL_TEXTURE_INDEX_SIZE_EXT", 0x80ED }, - { "GL_COLOR_INDEX1_EXT", 0x80E2 }, - { "GL_COLOR_INDEX2_EXT", 0x80E3 }, - { "GL_COLOR_INDEX4_EXT", 0x80E4 }, - { "GL_COLOR_INDEX8_EXT", 0x80E5 }, - { "GL_COLOR_INDEX12_EXT", 0x80E6 }, - { "GL_COLOR_INDEX16_EXT", 0x80E7 }, - - { "GL_SHARED_TEXTURE_PALETTE_EXT", 0x81FB }, - - { "GL_POINT_SIZE_MIN_EXT", 0x8126 }, - { "GL_POINT_SIZE_MAX_EXT", 0x8127 }, - { "GL_POINT_FADE_THRESHOLD_SIZE_EXT", 0x8128 }, - { "GL_DISTANCE_ATTENUATION_EXT", 0x8129 }, - - { "GL_RESCALE_NORMAL_EXT", 0x803A }, - - { "GL_ABGR_EXT", 0x8000 }, - - { "GL_INCR_WRAP_EXT", 0x8507 }, - { "GL_DECR_WRAP_EXT", 0x8508 }, - - { "GL_CLAMP_TO_EDGE_SGIS", 0x812F }, - - { "GL_BLEND_DST_RGB_INGR", 0x80C8 }, - { "GL_BLEND_SRC_RGB_INGR", 0x80C9 }, - { "GL_BLEND_DST_ALPHA_INGR", 0x80CA }, - { "GL_BLEND_SRC_ALPHA_INGR", 0x80CB }, - - { "GL_RESCALE_NORMAL", 0x803A }, - { "GL_CLAMP_TO_EDGE", 0x812F }, - { "GL_MAX_ELEMENTS_VERTICES", 0xF0E8 }, - { "GL_MAX_ELEMENTS_INDICES", 0xF0E9 }, - { "GL_BGR", 0x80E0 }, - { "GL_BGRA", 0x80E1 }, - { "GL_UNSIGNED_BYTE_3_3_2", 0x8032 }, - { "GL_UNSIGNED_BYTE_2_3_3_REV", 0x8362 }, - { "GL_UNSIGNED_SHORT_5_6_5", 0x8363 }, - { "GL_UNSIGNED_SHORT_5_6_5_REV", 0x8364 }, - { "GL_UNSIGNED_SHORT_4_4_4_4", 0x8033 }, - { "GL_UNSIGNED_SHORT_4_4_4_4_REV", 0x8365 }, - { "GL_UNSIGNED_SHORT_5_5_5_1", 0x8034 }, - { "GL_UNSIGNED_SHORT_1_5_5_5_REV", 0x8366 }, - { "GL_UNSIGNED_INT_8_8_8_8", 0x8035 }, - { "GL_UNSIGNED_INT_8_8_8_8_REV", 0x8367 }, - { "GL_UNSIGNED_INT_10_10_10_2", 0x8036 }, - { "GL_UNSIGNED_INT_2_10_10_10_REV", 0x8368 }, - { "GL_LIGHT_MODEL_COLOR_CONTROL", 0x81F8 }, - { "GL_SINGLE_COLOR", 0x81F9 }, - { "GL_SEPARATE_SPECULAR_COLOR", 0x81FA }, - { "GL_TEXTURE_MIN_LOD", 0x813A }, - { "GL_TEXTURE_MAX_LOD", 0x813B }, - { "GL_TEXTURE_BASE_LEVEL", 0x813C }, - { "GL_TEXTURE_MAX_LEVEL", 0x813D }, - - { "GL_TEXTURE0_ARB", 0x84C0 }, - { "GL_TEXTURE1_ARB", 0x84C1 }, - { "GL_TEXTURE2_ARB", 0x84C2 }, - { "GL_TEXTURE3_ARB", 0x84C3 }, - { "GL_TEXTURE4_ARB", 0x84C4 }, - { "GL_TEXTURE5_ARB", 0x84C5 }, - { "GL_ACTIVE_TEXTURE_ARB", 0x84E0 }, - { "GL_CLIENT_ACTIVE_TEXTURE_ARB", 0x84E1 }, - { "GL_MAX_TEXTURE_UNITS_ARB", 0x84E2 }, - - { "GL_OCCLUSION_TEST_HP", 0x8165 }, - { "GL_OCCLUSION_TEST_RESULT_HP", 0x8166 }, - - { "GL_TEXTURE_FILTER_CONTROL_EXT", 0x8500 }, - { "GL_TEXTURE_LOD_BIAS_EXT", 0x8501 }, - - /* GL_ARB_texture_cube_map */ - { "GL_NORMAL_MAP_ARB", 0x8511 }, - { "GL_REFLECTION_MAP_ARB", 0x8512 }, - { "GL_TEXTURE_CUBE_MAP_ARB", 0x8513 }, - { "GL_TEXTURE_BINDING_CUBE_MAP_ARB", 0x8514 }, - { "GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB", 0x8515 }, - { "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB", 0x8516 }, - { "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB", 0x8517 }, - { "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB", 0x8518 }, - { "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB", 0x8519 }, - { "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB", 0x851a }, - { "GL_PROXY_TEXTURE_CUBE_MAP_ARB", 0x851b }, - { "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB", 0x851c }, - - { "GL_PREFER_DOUBLEBUFFER_HINT_PGI", 107000 }, - { "GL_STRICT_DEPTHFUNC_HINT_PGI", 107030 }, - { "GL_STRICT_LIGHTING_HINT_PGI", 107031 }, - { "GL_STRICT_SCISSOR_HINT_PGI", 107032 }, - { "GL_FULL_STIPPLE_HINT_PGI", 107033 }, - { "GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI", 107011 }, - { "GL_NATIVE_GRAPHICS_END_HINT_PGI", 107012 }, - { "GL_CONSERVE_MEMORY_HINT_PGI", 107005 }, - { "GL_RECLAIM_MEMORY_HINT_PGI", 107006 }, - { "GL_ALWAYS_FAST_HINT_PGI", 107020 }, - { "GL_ALWAYS_SOFT_HINT_PGI", 107021 }, - { "GL_ALLOW_DRAW_OBJ_HINT_PGI", 107022 }, - { "GL_ALLOW_DRAW_WIN_HINT_PGI", 107023 }, - { "GL_ALLOW_DRAW_FRG_HINT_PGI", 107024 }, - { "GL_ALLOW_DRAW_SPN_HINT_PGI", 107024 }, - { "GL_ALLOW_DRAW_MEM_HINT_PGI", 107025 }, - { "GL_CLIP_NEAR_HINT_PGI", 107040 }, - { "GL_CLIP_FAR_HINT_PGI", 107041 }, - { "GL_WIDE_LINE_HINT_PGI", 107042 }, - { "GL_BACK_NORMALS_HINT_PGI", 107043 }, - { "GL_NATIVE_GRAPHICS_HANDLE_PGI", 107010 }, - - /* GL_EXT_compiled_vertex_array */ - { "GL_ARRAY_ELEMENT_LOCK_FIRST_EXT", 0x81A8}, - { "GL_ARRAY_ELEMENT_LOCK_COUNT_EXT", 0x81A9}, - - /* GL_EXT_clip_volume_hint */ - { "GL_CLIP_VOLUME_CLIPPING_HINT_EXT", 0x80F0}, - - /* GL_EXT_texture_env_combine */ - { "GL_COMBINE_EXT", 0x8570 }, - { "GL_COMBINE_RGB_EXT", 0x8571 }, - { "GL_COMBINE_ALPHA_EXT", 0x8572 }, - { "GL_SOURCE0_RGB_EXT", 0x8580 }, - { "GL_SOURCE1_RGB_EXT", 0x8581 }, - { "GL_SOURCE2_RGB_EXT", 0x8582 }, - { "GL_SOURCE0_ALPHA_EXT", 0x8588 }, - { "GL_SOURCE1_ALPHA_EXT", 0x8589 }, - { "GL_SOURCE2_ALPHA_EXT", 0x858A }, - { "GL_OPERAND0_RGB_EXT", 0x8590 }, - { "GL_OPERAND1_RGB_EXT", 0x8591 }, - { "GL_OPERAND2_RGB_EXT", 0x8592 }, - { "GL_OPERAND0_ALPHA_EXT", 0x8598 }, - { "GL_OPERAND1_ALPHA_EXT", 0x8599 }, - { "GL_OPERAND2_ALPHA_EXT", 0x859A }, - { "GL_RGB_SCALE_EXT", 0x8573 }, - { "GL_ADD_SIGNED_EXT", 0x8574 }, - { "GL_INTERPOLATE_EXT", 0x8575 }, - { "GL_CONSTANT_EXT", 0x8576 }, - { "GL_PRIMARY_COLOR_EXT", 0x8577 }, - { "GL_PREVIOUS_EXT", 0x8578 }, - - /* GL_ARB_texture_env_combine */ - { "GL_SUBTRACT_ARB", 0x84E7 }, - - /* GL_EXT_texture_env_dot3 */ - { "GL_DOT3_RGB_EXT", 0x8740 }, - { "GL_DOT3_RGBA_EXT", 0x8741 }, - - /* GL_ARB_texture_env_dot3 */ - { "GL_DOT3_RGB_ARB", 0x86ae }, - { "GL_DOT3_RGBA_ARB", 0x86af }, - - /* GL_ARB_texture_border_clamp */ - { "GL_CLAMP_TO_BORDER_ARB", 0x812D }, - - /* GL_ATI_texture_env_combine3 */ - { "GL_MODULATE_ADD_ATI", 0x8744 }, - { "GL_MODULATE_SIGNED_ADD_ATI", 0x8745 }, - { "GL_MODULATE_SUBTRACT_ATI", 0x8746 }, - - /* GL_ARB_texture_compression */ - { "GL_COMPRESSED_ALPHA_ARB", 0x84E9 }, - { "GL_COMPRESSED_LUMINANCE_ARB", 0x84EA }, - { "GL_COMPRESSED_LUMINANCE_ALPHA_ARB", 0x84EB }, - { "GL_COMPRESSED_INTENSITY_ARB", 0x84EC }, - { "GL_COMPRESSED_RGB_ARB", 0x84ED }, - { "GL_COMPRESSED_RGBA_ARB", 0x84EE }, - { "GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB", 0x86A0 }, - { "GL_TEXTURE_COMPRESSED_ARB", 0x86A1 }, - { "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB", 0x86A2 }, - { "GL_COMPRESSED_TEXTURE_FORMATS_ARB", 0x86A3 }, - - /* GL_EXT_texture_compression_s3tc */ - { "GL_COMPRESSED_RGB_S3TC_DXT1_EXT", 0x83F0 }, - { "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT", 0x83F1 }, - { "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT", 0x83F2 }, - { "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT", 0x83F3 }, - - /* GL_S3_s3tc */ - { "GL_RGB_S3TC", 0x83A0 }, - { "GL_RGB4_S3TC", 0x83A1 }, - { "GL_RGBA_S3TC", 0x83A2 }, - { "GL_RGBA4_S3TC", 0x83A3 }, - - /* GL_3DFX_texture_compression_FXT1 */ - { "GL_COMPRESSED_RGB_FXT1_3DFX", 0x86B0 }, - { "GL_COMPRESSED_RGBA_FXT1_3DFX", 0x86B1 }, - - /* GL_ATI_fragment_shader */ - { "GL_REG_0_ATI", 0x8921 }, - { "GL_REG_1_ATI", 0x8922 }, - { "GL_REG_2_ATI", 0x8923 }, - { "GL_REG_3_ATI", 0x8924 }, - { "GL_REG_4_ATI", 0x8925 }, - { "GL_REG_5_ATI", 0x8926 }, - - { "GL_CON_0_ATI", 0x8941 }, - { "GL_CON_1_ATI", 0x8942 }, - { "GL_CON_2_ATI", 0x8943 }, - { "GL_CON_3_ATI", 0x8944 }, - { "GL_CON_4_ATI", 0x8945 }, - { "GL_CON_5_ATI", 0x8946 }, - { "GL_CON_6_ATI", 0x8947 }, - { "GL_CON_7_ATI", 0x8948 }, - - { "GL_MOV_ATI", 0x8961 }, - { "GL_ADD_ATI", 0x8963 }, - { "GL_MUL_ATI", 0x8964 }, - { "GL_SUB_ATI", 0x8965 }, - { "GL_DOT3_ATI", 0x8966 }, - { "GL_DOT4_ATI", 0x8967 }, - - { "GL_MAD_ATI", 0x8968 }, - { "GL_LERP_ATI", 0x8969 }, - { "GL_CND_ATI", 0x896A }, - { "GL_CND0_ATI", 0x896B }, - { "GL_DOT2_ADD_ATI", 0x896C }, - { "GL_SECONDARY_INTERPOLATER_ATI", 0x896D }, - - { "SWIZZLE_STR_ATI", 0x8976 }, - { "SWIZZLE_STQ_ATI", 0x8977 }, - { "SWIZZLE_STR_DR_ATI", 0x8978 }, - { "SWIZZLE_STQ_DQ_ATI", 0x8979 }, + { 0, 0x00000600 }, /* GL_2D */ + { 6, 0x00001407 }, /* GL_2_BYTES */ + { 17, 0x00000601 }, /* GL_3D */ + { 23, 0x00000602 }, /* GL_3D_COLOR */ + { 35, 0x00000603 }, /* GL_3D_COLOR_TEXTURE */ + { 55, 0x00001408 }, /* GL_3_BYTES */ + { 66, 0x00000604 }, /* GL_4D_COLOR_TEXTURE */ + { 86, 0x00001409 }, /* GL_4_BYTES */ + { 97, 0x00000100 }, /* GL_ACCUM */ + { 106, 0x00000D5B }, /* GL_ACCUM_ALPHA_BITS */ + { 126, 0x00000D5A }, /* GL_ACCUM_BLUE_BITS */ + { 145, 0x00000200 }, /* GL_ACCUM_BUFFER_BIT */ + { 165, 0x00000B80 }, /* GL_ACCUM_CLEAR_VALUE */ + { 186, 0x00000D59 }, /* GL_ACCUM_GREEN_BITS */ + { 206, 0x00000D58 }, /* GL_ACCUM_RED_BITS */ + { 224, 0x00008B89 }, /* GL_ACTIVE_ATTRIBUTES */ + { 245, 0x00008B8A }, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */ + { 276, 0x00008911 }, /* GL_ACTIVE_STENCIL_FACE_EXT */ + { 303, 0x000084E0 }, /* GL_ACTIVE_TEXTURE */ + { 321, 0x000084E0 }, /* GL_ACTIVE_TEXTURE_ARB */ + { 343, 0x00008B86 }, /* GL_ACTIVE_UNIFORMS */ + { 362, 0x00008B87 }, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */ + { 391, 0x000086A5 }, /* GL_ACTIVE_VERTEX_UNITS_ARB */ + { 418, 0x00000104 }, /* GL_ADD */ + { 425, 0x00008574 }, /* GL_ADD_SIGNED */ + { 439, 0x00008574 }, /* GL_ADD_SIGNED_ARB */ + { 457, 0x00008574 }, /* GL_ADD_SIGNED_EXT */ + { 475, 0x0000846E }, /* GL_ALIASED_LINE_WIDTH_RANGE */ + { 503, 0x0000846D }, /* GL_ALIASED_POINT_SIZE_RANGE */ + { 531, 0x000FFFFF }, /* GL_ALL_ATTRIB_BITS */ + { 550, 0xFFFFFFFF }, /* GL_ALL_CLIENT_ATTRIB_BITS */ + { 576, 0x00001906 }, /* GL_ALPHA */ + { 585, 0x0000803D }, /* GL_ALPHA12 */ + { 596, 0x0000803D }, /* GL_ALPHA12_EXT */ + { 611, 0x0000803E }, /* GL_ALPHA16 */ + { 622, 0x0000803E }, /* GL_ALPHA16_EXT */ + { 637, 0x0000803B }, /* GL_ALPHA4 */ + { 647, 0x0000803B }, /* GL_ALPHA4_EXT */ + { 661, 0x0000803C }, /* GL_ALPHA8 */ + { 671, 0x0000803C }, /* GL_ALPHA8_EXT */ + { 685, 0x00000D1D }, /* GL_ALPHA_BIAS */ + { 699, 0x00000D55 }, /* GL_ALPHA_BITS */ + { 713, 0x00000D1C }, /* GL_ALPHA_SCALE */ + { 728, 0x00000BC0 }, /* GL_ALPHA_TEST */ + { 742, 0x00000BC1 }, /* GL_ALPHA_TEST_FUNC */ + { 761, 0x00000BC2 }, /* GL_ALPHA_TEST_REF */ + { 779, 0x00000207 }, /* GL_ALWAYS */ + { 789, 0x00001200 }, /* GL_AMBIENT */ + { 800, 0x00001602 }, /* GL_AMBIENT_AND_DIFFUSE */ + { 823, 0x00001501 }, /* GL_AND */ + { 830, 0x00001504 }, /* GL_AND_INVERTED */ + { 846, 0x00001502 }, /* GL_AND_REVERSE */ + { 861, 0x00008892 }, /* GL_ARRAY_BUFFER */ + { 877, 0x00008892 }, /* GL_ARRAY_BUFFER_ARB */ + { 897, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING */ + { 921, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING_ARB */ + { 949, 0x00008B85 }, /* GL_ATTACHED_SHADERS */ + { 969, 0x00008645 }, /* GL_ATTRIB_ARRAY_POINTER_NV */ + { 996, 0x00008623 }, /* GL_ATTRIB_ARRAY_SIZE_NV */ + { 1020, 0x00008624 }, /* GL_ATTRIB_ARRAY_STRIDE_NV */ + { 1046, 0x00008625 }, /* GL_ATTRIB_ARRAY_TYPE_NV */ + { 1070, 0x00000BB0 }, /* GL_ATTRIB_STACK_DEPTH */ + { 1092, 0x00000D80 }, /* GL_AUTO_NORMAL */ + { 1107, 0x00000409 }, /* GL_AUX0 */ + { 1115, 0x0000040A }, /* GL_AUX1 */ + { 1123, 0x0000040B }, /* GL_AUX2 */ + { 1131, 0x0000040C }, /* GL_AUX3 */ + { 1139, 0x00000C00 }, /* GL_AUX_BUFFERS */ + { 1154, 0x00000405 }, /* GL_BACK */ + { 1162, 0x00000402 }, /* GL_BACK_LEFT */ + { 1175, 0x00000403 }, /* GL_BACK_RIGHT */ + { 1189, 0x000080E0 }, /* GL_BGR */ + { 1196, 0x000080E1 }, /* GL_BGRA */ + { 1204, 0x00001A00 }, /* GL_BITMAP */ + { 1214, 0x00000704 }, /* GL_BITMAP_TOKEN */ + { 1230, 0x00000BE2 }, /* GL_BLEND */ + { 1239, 0x00008005 }, /* GL_BLEND_COLOR */ + { 1254, 0x00008005 }, /* GL_BLEND_COLOR_EXT */ + { 1273, 0x00000BE0 }, /* GL_BLEND_DST */ + { 1286, 0x000080CA }, /* GL_BLEND_DST_ALPHA */ + { 1305, 0x000080C8 }, /* GL_BLEND_DST_RGB */ + { 1322, 0x00008009 }, /* GL_BLEND_EQUATION */ + { 1340, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA */ + { 1364, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA_EXT */ + { 1392, 0x00008009 }, /* GL_BLEND_EQUATION_EXT */ + { 1414, 0x00008009 }, /* GL_BLEND_EQUATION_RGB_EXT */ + { 1440, 0x00000BE1 }, /* GL_BLEND_SRC */ + { 1453, 0x000080CB }, /* GL_BLEND_SRC_ALPHA */ + { 1472, 0x000080C9 }, /* GL_BLEND_SRC_RGB */ + { 1489, 0x00001905 }, /* GL_BLUE */ + { 1497, 0x00000D1B }, /* GL_BLUE_BIAS */ + { 1510, 0x00000D54 }, /* GL_BLUE_BITS */ + { 1523, 0x00000D1A }, /* GL_BLUE_SCALE */ + { 1537, 0x00008B56 }, /* GL_BOOL */ + { 1545, 0x00008B56 }, /* GL_BOOL_ARB */ + { 1557, 0x00008B57 }, /* GL_BOOL_VEC2 */ + { 1570, 0x00008B57 }, /* GL_BOOL_VEC2_ARB */ + { 1587, 0x00008B58 }, /* GL_BOOL_VEC3 */ + { 1600, 0x00008B58 }, /* GL_BOOL_VEC3_ARB */ + { 1617, 0x00008B59 }, /* GL_BOOL_VEC4 */ + { 1630, 0x00008B59 }, /* GL_BOOL_VEC4_ARB */ + { 1647, 0x000088BB }, /* GL_BUFFER_ACCESS */ + { 1664, 0x000088BB }, /* GL_BUFFER_ACCESS_ARB */ + { 1685, 0x000088BC }, /* GL_BUFFER_MAPPED */ + { 1702, 0x000088BC }, /* GL_BUFFER_MAPPED_ARB */ + { 1723, 0x000088BD }, /* GL_BUFFER_MAP_POINTER */ + { 1745, 0x000088BD }, /* GL_BUFFER_MAP_POINTER_ARB */ + { 1771, 0x00008764 }, /* GL_BUFFER_SIZE */ + { 1786, 0x00008764 }, /* GL_BUFFER_SIZE_ARB */ + { 1805, 0x00008765 }, /* GL_BUFFER_USAGE */ + { 1821, 0x00008765 }, /* GL_BUFFER_USAGE_ARB */ + { 1841, 0x00001400 }, /* GL_BYTE */ + { 1849, 0x00002A24 }, /* GL_C3F_V3F */ + { 1860, 0x00002A26 }, /* GL_C4F_N3F_V3F */ + { 1875, 0x00002A22 }, /* GL_C4UB_V2F */ + { 1887, 0x00002A23 }, /* GL_C4UB_V3F */ + { 1899, 0x00000901 }, /* GL_CCW */ + { 1906, 0x00002900 }, /* GL_CLAMP */ + { 1915, 0x0000812D }, /* GL_CLAMP_TO_BORDER */ + { 1934, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */ + { 1957, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */ + { 1981, 0x0000812F }, /* GL_CLAMP_TO_EDGE */ + { 1998, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */ + { 2020, 0x00001500 }, /* GL_CLEAR */ + { 2029, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */ + { 2054, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */ + { 2083, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */ + { 2109, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */ + { 2138, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */ + { 2164, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */ + { 2191, 0x00003000 }, /* GL_CLIP_PLANE0 */ + { 2206, 0x00003001 }, /* GL_CLIP_PLANE1 */ + { 2221, 0x00003002 }, /* GL_CLIP_PLANE2 */ + { 2236, 0x00003003 }, /* GL_CLIP_PLANE3 */ + { 2251, 0x00003004 }, /* GL_CLIP_PLANE4 */ + { 2266, 0x00003005 }, /* GL_CLIP_PLANE5 */ + { 2281, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */ + { 2314, 0x00000A00 }, /* GL_COEFF */ + { 2323, 0x00001800 }, /* GL_COLOR */ + { 2332, 0x00008076 }, /* GL_COLOR_ARRAY */ + { 2347, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */ + { 2377, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */ + { 2411, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */ + { 2434, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */ + { 2454, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */ + { 2476, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */ + { 2496, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */ + { 2521, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */ + { 2547, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */ + { 2573, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */ + { 2599, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */ + { 2625, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */ + { 2651, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */ + { 2677, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */ + { 2702, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */ + { 2727, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */ + { 2752, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */ + { 2777, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */ + { 2802, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */ + { 2827, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */ + { 2852, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */ + { 2877, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */ + { 2902, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */ + { 2922, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */ + { 2943, 0x00001900 }, /* GL_COLOR_INDEX */ + { 2958, 0x00001603 }, /* GL_COLOR_INDEXES */ + { 2975, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */ + { 2993, 0x00000B57 }, /* GL_COLOR_MATERIAL */ + { 3011, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */ + { 3034, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */ + { 3062, 0x000080B1 }, /* GL_COLOR_MATRIX */ + { 3078, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */ + { 3098, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */ + { 3126, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */ + { 3158, 0x00008458 }, /* GL_COLOR_SUM */ + { 3171, 0x00008458 }, /* GL_COLOR_SUM_ARB */ + { 3188, 0x000080D0 }, /* GL_COLOR_TABLE */ + { 3203, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */ + { 3229, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */ + { 3259, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */ + { 3289, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */ + { 3309, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */ + { 3333, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */ + { 3358, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */ + { 3387, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */ + { 3416, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */ + { 3438, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */ + { 3464, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */ + { 3490, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */ + { 3516, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */ + { 3546, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */ + { 3576, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */ + { 3606, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */ + { 3640, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */ + { 3674, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */ + { 3704, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */ + { 3738, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */ + { 3772, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */ + { 3796, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */ + { 3824, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */ + { 3852, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */ + { 3873, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */ + { 3898, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */ + { 3919, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */ + { 3944, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */ + { 3969, 0x00000C23 }, /* GL_COLOR_WRITEMASK */ + { 3988, 0x00008570 }, /* GL_COMBINE */ + { 3999, 0x00008503 }, /* GL_COMBINE4 */ + { 4011, 0x00008572 }, /* GL_COMBINE_ALPHA */ + { 4028, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */ + { 4049, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */ + { 4070, 0x00008570 }, /* GL_COMBINE_ARB */ + { 4085, 0x00008570 }, /* GL_COMBINE_EXT */ + { 4100, 0x00008571 }, /* GL_COMBINE_RGB */ + { 4115, 0x00008571 }, /* GL_COMBINE_RGB_ARB */ + { 4134, 0x00008571 }, /* GL_COMBINE_RGB_EXT */ + { 4153, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */ + { 4177, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */ + { 4205, 0x00001300 }, /* GL_COMPILE */ + { 4216, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */ + { 4239, 0x00008B81 }, /* GL_COMPILE_STATUS */ + { 4257, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */ + { 4277, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */ + { 4301, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */ + { 4325, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */ + { 4353, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */ + { 4377, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */ + { 4407, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */ + { 4441, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */ + { 4469, 0x000084ED }, /* GL_COMPRESSED_RGB */ + { 4487, 0x000084EE }, /* GL_COMPRESSED_RGBA */ + { 4506, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */ + { 4529, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */ + { 4558, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */ + { 4591, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */ + { 4624, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */ + { 4657, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */ + { 4679, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */ + { 4707, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */ + { 4739, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */ + { 4769, 0x00008576 }, /* GL_CONSTANT */ + { 4781, 0x00008003 }, /* GL_CONSTANT_ALPHA */ + { 4799, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */ + { 4821, 0x00008576 }, /* GL_CONSTANT_ARB */ + { 4837, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */ + { 4861, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */ + { 4883, 0x00008001 }, /* GL_CONSTANT_COLOR */ + { 4901, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */ + { 4923, 0x00008576 }, /* GL_CONSTANT_EXT */ + { 4939, 0x00008010 }, /* GL_CONVOLUTION_1D */ + { 4957, 0x00008011 }, /* GL_CONVOLUTION_2D */ + { 4975, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */ + { 5003, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */ + { 5034, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */ + { 5061, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */ + { 5092, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */ + { 5119, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */ + { 5150, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */ + { 5178, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */ + { 5210, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */ + { 5232, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */ + { 5258, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */ + { 5280, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */ + { 5306, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */ + { 5327, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */ + { 5352, 0x00008862 }, /* GL_COORD_REPLACE */ + { 5369, 0x00008862 }, /* GL_COORD_REPLACE_ARB */ + { 5390, 0x00008862 }, /* GL_COORD_REPLACE_NV */ + { 5410, 0x00001503 }, /* GL_COPY */ + { 5418, 0x0000150C }, /* GL_COPY_INVERTED */ + { 5435, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */ + { 5455, 0x00000B44 }, /* GL_CULL_FACE */ + { 5468, 0x00000B45 }, /* GL_CULL_FACE_MODE */ + { 5486, 0x000081AA }, /* GL_CULL_VERTEX_EXT */ + { 5505, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ + { 5537, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ + { 5572, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */ + { 5593, 0x00000001 }, /* GL_CURRENT_BIT */ + { 5608, 0x00000B00 }, /* GL_CURRENT_COLOR */ + { 5625, 0x00008453 }, /* GL_CURRENT_FOG_COORD */ + { 5646, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */ + { 5672, 0x00000B01 }, /* GL_CURRENT_INDEX */ + { 5689, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */ + { 5711, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */ + { 5739, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */ + { 5760, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ + { 5794, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */ + { 5827, 0x00000B02 }, /* GL_CURRENT_NORMAL */ + { 5845, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */ + { 5875, 0x00008B8D }, /* GL_CURRENT_PROGRAM */ + { 5894, 0x00008865 }, /* GL_CURRENT_QUERY */ + { 5911, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */ + { 5932, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */ + { 5956, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */ + { 5983, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */ + { 6007, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */ + { 6034, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */ + { 6067, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ + { 6100, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */ + { 6127, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */ + { 6153, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */ + { 6178, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */ + { 6207, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */ + { 6229, 0x00000900 }, /* GL_CW */ + { 6235, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */ + { 6256, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */ + { 6277, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */ + { 6297, 0x00002101 }, /* GL_DECAL */ + { 6306, 0x00001E03 }, /* GL_DECR */ + { 6314, 0x00008508 }, /* GL_DECR_WRAP */ + { 6327, 0x00008508 }, /* GL_DECR_WRAP_EXT */ + { 6344, 0x00008B80 }, /* GL_DELETE_STATUS */ + { 6361, 0x00001801 }, /* GL_DEPTH */ + { 6370, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */ + { 6394, 0x00000D1F }, /* GL_DEPTH_BIAS */ + { 6408, 0x00000D56 }, /* GL_DEPTH_BITS */ + { 6422, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */ + { 6442, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */ + { 6467, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */ + { 6487, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */ + { 6505, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */ + { 6526, 0x00001902 }, /* GL_DEPTH_COMPONENT */ + { 6545, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */ + { 6566, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */ + { 6591, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */ + { 6617, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */ + { 6638, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */ + { 6663, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */ + { 6689, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */ + { 6710, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */ + { 6735, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */ + { 6761, 0x00000B74 }, /* GL_DEPTH_FUNC */ + { 6775, 0x00000B70 }, /* GL_DEPTH_RANGE */ + { 6790, 0x00000D1E }, /* GL_DEPTH_SCALE */ + { 6805, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */ + { 6825, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ + { 6853, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ + { 6881, 0x00000B71 }, /* GL_DEPTH_TEST */ + { 6895, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */ + { 6917, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */ + { 6943, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */ + { 6962, 0x00001201 }, /* GL_DIFFUSE */ + { 6973, 0x00000BD0 }, /* GL_DITHER */ + { 6983, 0x00000A02 }, /* GL_DOMAIN */ + { 6993, 0x00001100 }, /* GL_DONT_CARE */ + { 7006, 0x000086AE }, /* GL_DOT3_RGB */ + { 7018, 0x000086AF }, /* GL_DOT3_RGBA */ + { 7031, 0x000086AF }, /* GL_DOT3_RGBA_ARB */ + { 7048, 0x00008741 }, /* GL_DOT3_RGBA_EXT */ + { 7065, 0x000086AE }, /* GL_DOT3_RGB_ARB */ + { 7081, 0x00008740 }, /* GL_DOT3_RGB_EXT */ + { 7097, 0x0000140A }, /* GL_DOUBLE */ + { 7107, 0x00000C32 }, /* GL_DOUBLEBUFFER */ + { 7123, 0x00000C01 }, /* GL_DRAW_BUFFER */ + { 7138, 0x00008825 }, /* GL_DRAW_BUFFER0 */ + { 7154, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */ + { 7174, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */ + { 7194, 0x00008826 }, /* GL_DRAW_BUFFER1 */ + { 7210, 0x0000882F }, /* GL_DRAW_BUFFER10 */ + { 7227, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */ + { 7248, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */ + { 7269, 0x00008830 }, /* GL_DRAW_BUFFER11 */ + { 7286, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */ + { 7307, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */ + { 7328, 0x00008831 }, /* GL_DRAW_BUFFER12 */ + { 7345, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */ + { 7366, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */ + { 7387, 0x00008832 }, /* GL_DRAW_BUFFER13 */ + { 7404, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */ + { 7425, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */ + { 7446, 0x00008833 }, /* GL_DRAW_BUFFER14 */ + { 7463, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */ + { 7484, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */ + { 7505, 0x00008834 }, /* GL_DRAW_BUFFER15 */ + { 7522, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */ + { 7543, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */ + { 7564, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */ + { 7584, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */ + { 7604, 0x00008827 }, /* GL_DRAW_BUFFER2 */ + { 7620, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */ + { 7640, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */ + { 7660, 0x00008828 }, /* GL_DRAW_BUFFER3 */ + { 7676, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */ + { 7696, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */ + { 7716, 0x00008829 }, /* GL_DRAW_BUFFER4 */ + { 7732, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */ + { 7752, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */ + { 7772, 0x0000882A }, /* GL_DRAW_BUFFER5 */ + { 7788, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */ + { 7808, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */ + { 7828, 0x0000882B }, /* GL_DRAW_BUFFER6 */ + { 7844, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */ + { 7864, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */ + { 7884, 0x0000882C }, /* GL_DRAW_BUFFER7 */ + { 7900, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */ + { 7920, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */ + { 7940, 0x0000882D }, /* GL_DRAW_BUFFER8 */ + { 7956, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */ + { 7976, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */ + { 7996, 0x0000882E }, /* GL_DRAW_BUFFER9 */ + { 8012, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */ + { 8032, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */ + { 8052, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ + { 8084, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */ + { 8108, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */ + { 8128, 0x00000304 }, /* GL_DST_ALPHA */ + { 8141, 0x00000306 }, /* GL_DST_COLOR */ + { 8154, 0x000088EA }, /* GL_DYNAMIC_COPY */ + { 8170, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */ + { 8190, 0x000088E8 }, /* GL_DYNAMIC_DRAW */ + { 8206, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */ + { 8226, 0x000088E9 }, /* GL_DYNAMIC_READ */ + { 8242, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */ + { 8262, 0x00000B43 }, /* GL_EDGE_FLAG */ + { 8275, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */ + { 8294, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ + { 8328, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */ + { 8366, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */ + { 8393, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */ + { 8419, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */ + { 8443, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER_ARB */ + { 8471, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ + { 8503, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */ + { 8539, 0x00001600 }, /* GL_EMISSION */ + { 8551, 0x00002000 }, /* GL_ENABLE_BIT */ + { 8565, 0x00000202 }, /* GL_EQUAL */ + { 8574, 0x00001509 }, /* GL_EQUIV */ + { 8583, 0x00010000 }, /* GL_EVAL_BIT */ + { 8595, 0x00000800 }, /* GL_EXP */ + { 8602, 0x00000801 }, /* GL_EXP2 */ + { 8610, 0x00001F03 }, /* GL_EXTENSIONS */ + { 8624, 0x00002400 }, /* GL_EYE_LINEAR */ + { 8638, 0x00002502 }, /* GL_EYE_PLANE */ + { 8651, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */ + { 8676, 0x0000855B }, /* GL_EYE_RADIAL_NV */ + { 8693, 0x00000000 }, /* GL_FALSE */ + { 8702, 0x00001101 }, /* GL_FASTEST */ + { 8713, 0x00001C01 }, /* GL_FEEDBACK */ + { 8725, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */ + { 8752, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */ + { 8776, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */ + { 8800, 0x00001B02 }, /* GL_FILL */ + { 8808, 0x00001D00 }, /* GL_FLAT */ + { 8816, 0x00001406 }, /* GL_FLOAT */ + { 8825, 0x00008B5A }, /* GL_FLOAT_MAT2 */ + { 8839, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */ + { 8857, 0x00008B5B }, /* GL_FLOAT_MAT3 */ + { 8871, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */ + { 8889, 0x00008B5C }, /* GL_FLOAT_MAT4 */ + { 8903, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */ + { 8921, 0x00008B50 }, /* GL_FLOAT_VEC2 */ + { 8935, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */ + { 8953, 0x00008B51 }, /* GL_FLOAT_VEC3 */ + { 8967, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */ + { 8985, 0x00008B52 }, /* GL_FLOAT_VEC4 */ + { 8999, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */ + { 9017, 0x00000B60 }, /* GL_FOG */ + { 9024, 0x00000080 }, /* GL_FOG_BIT */ + { 9035, 0x00000B66 }, /* GL_FOG_COLOR */ + { 9048, 0x00008451 }, /* GL_FOG_COORD */ + { 9061, 0x00008451 }, /* GL_FOG_COORDINATE */ + { 9079, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */ + { 9103, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ + { 9142, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */ + { 9185, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */ + { 9217, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ + { 9248, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */ + { 9277, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */ + { 9302, 0x00008457 }, /* GL_FOG_COORD_ARRAY */ + { 9321, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */ + { 9355, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */ + { 9382, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */ + { 9408, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */ + { 9432, 0x00008450 }, /* GL_FOG_COORD_SRC */ + { 9449, 0x00000B62 }, /* GL_FOG_DENSITY */ + { 9464, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */ + { 9488, 0x00000B64 }, /* GL_FOG_END */ + { 9499, 0x00000C54 }, /* GL_FOG_HINT */ + { 9511, 0x00000B61 }, /* GL_FOG_INDEX */ + { 9524, 0x00000B65 }, /* GL_FOG_MODE */ + { 9536, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */ + { 9555, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */ + { 9580, 0x00000B63 }, /* GL_FOG_START */ + { 9593, 0x00008452 }, /* GL_FRAGMENT_DEPTH */ + { 9611, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */ + { 9635, 0x00008B30 }, /* GL_FRAGMENT_SHADER */ + { 9654, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */ + { 9677, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ + { 9712, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */ + { 9754, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */ + { 9796, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */ + { 9845, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */ + { 9897, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */ + { 9941, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */ + { 9968, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */ + { 9996, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */ + { 10015, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */ + { 10056, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ + { 10097, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ + { 10139, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ + { 10190, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ + { 10228, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */ + { 10277, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ + { 10319, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ + { 10351, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */ + { 10382, 0x00000404 }, /* GL_FRONT */ + { 10391, 0x00000408 }, /* GL_FRONT_AND_BACK */ + { 10409, 0x00000B46 }, /* GL_FRONT_FACE */ + { 10423, 0x00000400 }, /* GL_FRONT_LEFT */ + { 10437, 0x00000401 }, /* GL_FRONT_RIGHT */ + { 10452, 0x00008006 }, /* GL_FUNC_ADD */ + { 10464, 0x00008006 }, /* GL_FUNC_ADD_EXT */ + { 10480, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */ + { 10505, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */ + { 10534, 0x0000800A }, /* GL_FUNC_SUBTRACT */ + { 10551, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */ + { 10572, 0x00008191 }, /* GL_GENERATE_MIPMAP */ + { 10591, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */ + { 10615, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */ + { 10644, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */ + { 10668, 0x00000206 }, /* GL_GEQUAL */ + { 10678, 0x00008009 }, /* GL_GL_BLEND_EQUATION_RGB */ + { 10703, 0x00008C4A }, /* GL_GL_COMPRESSED_SLUMINANCE */ + { 10731, 0x00008C4B }, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */ + { 10765, 0x00008C48 }, /* GL_GL_COMPRESSED_SRGB */ + { 10787, 0x00008C49 }, /* GL_GL_COMPRESSED_SRGB_ALPHA */ + { 10815, 0x0000845F }, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */ + { 10852, 0x00008B65 }, /* GL_GL_FLOAT_MAT2x3 */ + { 10871, 0x00008B66 }, /* GL_GL_FLOAT_MAT2x4 */ + { 10890, 0x00008B67 }, /* GL_GL_FLOAT_MAT3x2 */ + { 10909, 0x00008B68 }, /* GL_GL_FLOAT_MAT3x4 */ + { 10928, 0x00008B69 }, /* GL_GL_FLOAT_MAT4x2 */ + { 10947, 0x00008B6A }, /* GL_GL_FLOAT_MAT4x3 */ + { 10966, 0x000088EB }, /* GL_GL_PIXEL_PACK_BUFFER */ + { 10990, 0x000088ED }, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */ + { 11022, 0x000088EC }, /* GL_GL_PIXEL_UNPACK_BUFFER */ + { 11048, 0x000088EF }, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */ + { 11082, 0x00008C46 }, /* GL_GL_SLUMINANCE */ + { 11099, 0x00008C47 }, /* GL_GL_SLUMINANCE8 */ + { 11117, 0x00008C45 }, /* GL_GL_SLUMINANCE8_ALPHA8 */ + { 11142, 0x00008C44 }, /* GL_GL_SLUMINANCE_ALPHA */ + { 11165, 0x00008C40 }, /* GL_GL_SRGB */ + { 11176, 0x00008C41 }, /* GL_GL_SRGB8 */ + { 11188, 0x00008C43 }, /* GL_GL_SRGB8_ALPHA8 */ + { 11207, 0x00008C42 }, /* GL_GL_SRGB_ALPHA */ + { 11224, 0x00000204 }, /* GL_GREATER */ + { 11235, 0x00001904 }, /* GL_GREEN */ + { 11244, 0x00000D19 }, /* GL_GREEN_BIAS */ + { 11258, 0x00000D53 }, /* GL_GREEN_BITS */ + { 11272, 0x00000D18 }, /* GL_GREEN_SCALE */ + { 11287, 0x00008000 }, /* GL_HINT_BIT */ + { 11299, 0x00008024 }, /* GL_HISTOGRAM */ + { 11312, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */ + { 11336, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */ + { 11364, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */ + { 11387, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */ + { 11414, 0x00008024 }, /* GL_HISTOGRAM_EXT */ + { 11431, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */ + { 11451, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */ + { 11475, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */ + { 11499, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */ + { 11527, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */ + { 11555, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */ + { 11587, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */ + { 11609, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */ + { 11635, 0x0000802D }, /* GL_HISTOGRAM_SINK */ + { 11653, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */ + { 11675, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */ + { 11694, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */ + { 11717, 0x0000862A }, /* GL_IDENTITY_NV */ + { 11732, 0x00008150 }, /* GL_IGNORE_BORDER_HP */ + { 11752, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ + { 11792, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ + { 11830, 0x00001E02 }, /* GL_INCR */ + { 11838, 0x00008507 }, /* GL_INCR_WRAP */ + { 11851, 0x00008507 }, /* GL_INCR_WRAP_EXT */ + { 11868, 0x00008077 }, /* GL_INDEX_ARRAY */ + { 11883, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */ + { 11913, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */ + { 11947, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */ + { 11970, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */ + { 11992, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */ + { 12012, 0x00000D51 }, /* GL_INDEX_BITS */ + { 12026, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */ + { 12047, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */ + { 12065, 0x00000C30 }, /* GL_INDEX_MODE */ + { 12079, 0x00000D13 }, /* GL_INDEX_OFFSET */ + { 12095, 0x00000D12 }, /* GL_INDEX_SHIFT */ + { 12110, 0x00000C21 }, /* GL_INDEX_WRITEMASK */ + { 12129, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */ + { 12148, 0x00001404 }, /* GL_INT */ + { 12155, 0x00008049 }, /* GL_INTENSITY */ + { 12168, 0x0000804C }, /* GL_INTENSITY12 */ + { 12183, 0x0000804C }, /* GL_INTENSITY12_EXT */ + { 12202, 0x0000804D }, /* GL_INTENSITY16 */ + { 12217, 0x0000804D }, /* GL_INTENSITY16_EXT */ + { 12236, 0x0000804A }, /* GL_INTENSITY4 */ + { 12250, 0x0000804A }, /* GL_INTENSITY4_EXT */ + { 12268, 0x0000804B }, /* GL_INTENSITY8 */ + { 12282, 0x0000804B }, /* GL_INTENSITY8_EXT */ + { 12300, 0x00008049 }, /* GL_INTENSITY_EXT */ + { 12317, 0x00008575 }, /* GL_INTERPOLATE */ + { 12332, 0x00008575 }, /* GL_INTERPOLATE_ARB */ + { 12351, 0x00008575 }, /* GL_INTERPOLATE_EXT */ + { 12370, 0x00008B53 }, /* GL_INT_VEC2 */ + { 12382, 0x00008B53 }, /* GL_INT_VEC2_ARB */ + { 12398, 0x00008B54 }, /* GL_INT_VEC3 */ + { 12410, 0x00008B54 }, /* GL_INT_VEC3_ARB */ + { 12426, 0x00008B55 }, /* GL_INT_VEC4 */ + { 12438, 0x00008B55 }, /* GL_INT_VEC4_ARB */ + { 12454, 0x00000500 }, /* GL_INVALID_ENUM */ + { 12470, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */ + { 12507, 0x00000502 }, /* GL_INVALID_OPERATION */ + { 12528, 0x00000501 }, /* GL_INVALID_VALUE */ + { 12545, 0x0000862B }, /* GL_INVERSE_NV */ + { 12559, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */ + { 12583, 0x0000150A }, /* GL_INVERT */ + { 12593, 0x00001E00 }, /* GL_KEEP */ + { 12601, 0x00000406 }, /* GL_LEFT */ + { 12609, 0x00000203 }, /* GL_LEQUAL */ + { 12619, 0x00000201 }, /* GL_LESS */ + { 12627, 0x00004000 }, /* GL_LIGHT0 */ + { 12637, 0x00004001 }, /* GL_LIGHT1 */ + { 12647, 0x00004002 }, /* GL_LIGHT2 */ + { 12657, 0x00004003 }, /* GL_LIGHT3 */ + { 12667, 0x00004004 }, /* GL_LIGHT4 */ + { 12677, 0x00004005 }, /* GL_LIGHT5 */ + { 12687, 0x00004006 }, /* GL_LIGHT6 */ + { 12697, 0x00004007 }, /* GL_LIGHT7 */ + { 12707, 0x00000B50 }, /* GL_LIGHTING */ + { 12719, 0x00000040 }, /* GL_LIGHTING_BIT */ + { 12735, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */ + { 12758, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */ + { 12787, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */ + { 12820, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ + { 12848, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */ + { 12872, 0x00001B01 }, /* GL_LINE */ + { 12880, 0x00002601 }, /* GL_LINEAR */ + { 12890, 0x00001208 }, /* GL_LINEAR_ATTENUATION */ + { 12912, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ + { 12942, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ + { 12973, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */ + { 12997, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */ + { 13022, 0x00000001 }, /* GL_LINES */ + { 13031, 0x00000004 }, /* GL_LINE_BIT */ + { 13043, 0x00000002 }, /* GL_LINE_LOOP */ + { 13056, 0x00000707 }, /* GL_LINE_RESET_TOKEN */ + { 13076, 0x00000B20 }, /* GL_LINE_SMOOTH */ + { 13091, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */ + { 13111, 0x00000B24 }, /* GL_LINE_STIPPLE */ + { 13127, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */ + { 13151, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */ + { 13174, 0x00000003 }, /* GL_LINE_STRIP */ + { 13188, 0x00000702 }, /* GL_LINE_TOKEN */ + { 13202, 0x00000B21 }, /* GL_LINE_WIDTH */ + { 13216, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */ + { 13242, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */ + { 13262, 0x00008B82 }, /* GL_LINK_STATUS */ + { 13277, 0x00000B32 }, /* GL_LIST_BASE */ + { 13290, 0x00020000 }, /* GL_LIST_BIT */ + { 13302, 0x00000B33 }, /* GL_LIST_INDEX */ + { 13316, 0x00000B30 }, /* GL_LIST_MODE */ + { 13329, 0x00000101 }, /* GL_LOAD */ + { 13337, 0x00000BF1 }, /* GL_LOGIC_OP */ + { 13349, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */ + { 13366, 0x00008CA1 }, /* GL_LOWER_LEFT */ + { 13380, 0x00001909 }, /* GL_LUMINANCE */ + { 13393, 0x00008041 }, /* GL_LUMINANCE12 */ + { 13408, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */ + { 13431, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */ + { 13458, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */ + { 13480, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */ + { 13506, 0x00008041 }, /* GL_LUMINANCE12_EXT */ + { 13525, 0x00008042 }, /* GL_LUMINANCE16 */ + { 13540, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */ + { 13563, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */ + { 13590, 0x00008042 }, /* GL_LUMINANCE16_EXT */ + { 13609, 0x0000803F }, /* GL_LUMINANCE4 */ + { 13623, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */ + { 13644, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */ + { 13669, 0x0000803F }, /* GL_LUMINANCE4_EXT */ + { 13687, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */ + { 13708, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */ + { 13733, 0x00008040 }, /* GL_LUMINANCE8 */ + { 13747, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */ + { 13768, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */ + { 13793, 0x00008040 }, /* GL_LUMINANCE8_EXT */ + { 13811, 0x0000190A }, /* GL_LUMINANCE_ALPHA */ + { 13830, 0x00000D90 }, /* GL_MAP1_COLOR_4 */ + { 13846, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */ + { 13866, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */ + { 13888, 0x00000D91 }, /* GL_MAP1_INDEX */ + { 13902, 0x00000D92 }, /* GL_MAP1_NORMAL */ + { 13917, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */ + { 13941, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */ + { 13965, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */ + { 13989, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */ + { 14013, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */ + { 14030, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */ + { 14047, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ + { 14075, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ + { 14104, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ + { 14133, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ + { 14162, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ + { 14191, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ + { 14220, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ + { 14249, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ + { 14277, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ + { 14305, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ + { 14333, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ + { 14361, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ + { 14389, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ + { 14417, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ + { 14445, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ + { 14473, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ + { 14501, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */ + { 14517, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */ + { 14537, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */ + { 14559, 0x00000DB1 }, /* GL_MAP2_INDEX */ + { 14573, 0x00000DB2 }, /* GL_MAP2_NORMAL */ + { 14588, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */ + { 14612, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */ + { 14636, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */ + { 14660, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */ + { 14684, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */ + { 14701, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */ + { 14718, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ + { 14746, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ + { 14775, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ + { 14804, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ + { 14833, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ + { 14862, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ + { 14891, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ + { 14920, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ + { 14948, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ + { 14976, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ + { 15004, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ + { 15032, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ + { 15060, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ + { 15088, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */ + { 15116, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ + { 15144, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ + { 15172, 0x00000D10 }, /* GL_MAP_COLOR */ + { 15185, 0x00000D11 }, /* GL_MAP_STENCIL */ + { 15200, 0x000088C0 }, /* GL_MATRIX0_ARB */ + { 15215, 0x00008630 }, /* GL_MATRIX0_NV */ + { 15229, 0x000088CA }, /* GL_MATRIX10_ARB */ + { 15245, 0x000088CB }, /* GL_MATRIX11_ARB */ + { 15261, 0x000088CC }, /* GL_MATRIX12_ARB */ + { 15277, 0x000088CD }, /* GL_MATRIX13_ARB */ + { 15293, 0x000088CE }, /* GL_MATRIX14_ARB */ + { 15309, 0x000088CF }, /* GL_MATRIX15_ARB */ + { 15325, 0x000088D0 }, /* GL_MATRIX16_ARB */ + { 15341, 0x000088D1 }, /* GL_MATRIX17_ARB */ + { 15357, 0x000088D2 }, /* GL_MATRIX18_ARB */ + { 15373, 0x000088D3 }, /* GL_MATRIX19_ARB */ + { 15389, 0x000088C1 }, /* GL_MATRIX1_ARB */ + { 15404, 0x00008631 }, /* GL_MATRIX1_NV */ + { 15418, 0x000088D4 }, /* GL_MATRIX20_ARB */ + { 15434, 0x000088D5 }, /* GL_MATRIX21_ARB */ + { 15450, 0x000088D6 }, /* GL_MATRIX22_ARB */ + { 15466, 0x000088D7 }, /* GL_MATRIX23_ARB */ + { 15482, 0x000088D8 }, /* GL_MATRIX24_ARB */ + { 15498, 0x000088D9 }, /* GL_MATRIX25_ARB */ + { 15514, 0x000088DA }, /* GL_MATRIX26_ARB */ + { 15530, 0x000088DB }, /* GL_MATRIX27_ARB */ + { 15546, 0x000088DC }, /* GL_MATRIX28_ARB */ + { 15562, 0x000088DD }, /* GL_MATRIX29_ARB */ + { 15578, 0x000088C2 }, /* GL_MATRIX2_ARB */ + { 15593, 0x00008632 }, /* GL_MATRIX2_NV */ + { 15607, 0x000088DE }, /* GL_MATRIX30_ARB */ + { 15623, 0x000088DF }, /* GL_MATRIX31_ARB */ + { 15639, 0x000088C3 }, /* GL_MATRIX3_ARB */ + { 15654, 0x00008633 }, /* GL_MATRIX3_NV */ + { 15668, 0x000088C4 }, /* GL_MATRIX4_ARB */ + { 15683, 0x00008634 }, /* GL_MATRIX4_NV */ + { 15697, 0x000088C5 }, /* GL_MATRIX5_ARB */ + { 15712, 0x00008635 }, /* GL_MATRIX5_NV */ + { 15726, 0x000088C6 }, /* GL_MATRIX6_ARB */ + { 15741, 0x00008636 }, /* GL_MATRIX6_NV */ + { 15755, 0x000088C7 }, /* GL_MATRIX7_ARB */ + { 15770, 0x00008637 }, /* GL_MATRIX7_NV */ + { 15784, 0x000088C8 }, /* GL_MATRIX8_ARB */ + { 15799, 0x000088C9 }, /* GL_MATRIX9_ARB */ + { 15814, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */ + { 15840, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ + { 15874, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ + { 15905, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ + { 15938, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ + { 15969, 0x00000BA0 }, /* GL_MATRIX_MODE */ + { 15984, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */ + { 16006, 0x00008008 }, /* GL_MAX */ + { 16013, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */ + { 16036, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */ + { 16062, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ + { 16095, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ + { 16121, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + { 16155, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */ + { 16174, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ + { 16203, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ + { 16235, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */ + { 16271, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ + { 16307, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */ + { 16347, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */ + { 16373, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */ + { 16403, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */ + { 16428, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */ + { 16457, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ + { 16486, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */ + { 16519, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */ + { 16539, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */ + { 16563, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */ + { 16587, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */ + { 16611, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */ + { 16636, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */ + { 16654, 0x00008008 }, /* GL_MAX_EXT */ + { 16665, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ + { 16700, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */ + { 16739, 0x00000D31 }, /* GL_MAX_LIGHTS */ + { 16753, 0x00000B31 }, /* GL_MAX_LIST_NESTING */ + { 16773, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ + { 16811, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */ + { 16840, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */ + { 16864, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */ + { 16892, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */ + { 16915, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ + { 16952, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ + { 16988, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ + { 17015, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ + { 17044, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ + { 17078, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ + { 17114, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ + { 17141, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ + { 17173, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ + { 17209, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ + { 17238, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ + { 17267, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */ + { 17295, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ + { 17333, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + { 17377, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + { 17420, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ + { 17454, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + { 17493, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ + { 17530, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ + { 17568, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + { 17611, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + { 17654, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ + { 17684, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ + { 17715, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ + { 17751, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ + { 17787, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */ + { 17817, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ + { 17851, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */ + { 17884, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ + { 17913, 0x00008504 }, /* GL_MAX_SHININESS_NV */ + { 17933, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */ + { 17957, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */ + { 17979, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */ + { 18005, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */ + { 18032, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */ + { 18063, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */ + { 18087, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ + { 18121, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */ + { 18141, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */ + { 18168, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */ + { 18189, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */ + { 18214, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */ + { 18239, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */ + { 18274, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */ + { 18296, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */ + { 18322, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */ + { 18344, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */ + { 18370, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ + { 18404, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ + { 18442, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ + { 18475, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */ + { 18512, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */ + { 18536, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */ + { 18557, 0x00008007 }, /* GL_MIN */ + { 18564, 0x0000802E }, /* GL_MINMAX */ + { 18574, 0x0000802E }, /* GL_MINMAX_EXT */ + { 18588, 0x0000802F }, /* GL_MINMAX_FORMAT */ + { 18605, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */ + { 18626, 0x00008030 }, /* GL_MINMAX_SINK */ + { 18641, 0x00008030 }, /* GL_MINMAX_SINK_EXT */ + { 18660, 0x00008007 }, /* GL_MIN_EXT */ + { 18671, 0x00008370 }, /* GL_MIRRORED_REPEAT */ + { 18690, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */ + { 18713, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */ + { 18736, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */ + { 18756, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */ + { 18776, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ + { 18806, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */ + { 18834, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ + { 18862, 0x00001700 }, /* GL_MODELVIEW */ + { 18875, 0x00001700 }, /* GL_MODELVIEW0_ARB */ + { 18893, 0x0000872A }, /* GL_MODELVIEW10_ARB */ + { 18912, 0x0000872B }, /* GL_MODELVIEW11_ARB */ + { 18931, 0x0000872C }, /* GL_MODELVIEW12_ARB */ + { 18950, 0x0000872D }, /* GL_MODELVIEW13_ARB */ + { 18969, 0x0000872E }, /* GL_MODELVIEW14_ARB */ + { 18988, 0x0000872F }, /* GL_MODELVIEW15_ARB */ + { 19007, 0x00008730 }, /* GL_MODELVIEW16_ARB */ + { 19026, 0x00008731 }, /* GL_MODELVIEW17_ARB */ + { 19045, 0x00008732 }, /* GL_MODELVIEW18_ARB */ + { 19064, 0x00008733 }, /* GL_MODELVIEW19_ARB */ + { 19083, 0x0000850A }, /* GL_MODELVIEW1_ARB */ + { 19101, 0x00008734 }, /* GL_MODELVIEW20_ARB */ + { 19120, 0x00008735 }, /* GL_MODELVIEW21_ARB */ + { 19139, 0x00008736 }, /* GL_MODELVIEW22_ARB */ + { 19158, 0x00008737 }, /* GL_MODELVIEW23_ARB */ + { 19177, 0x00008738 }, /* GL_MODELVIEW24_ARB */ + { 19196, 0x00008739 }, /* GL_MODELVIEW25_ARB */ + { 19215, 0x0000873A }, /* GL_MODELVIEW26_ARB */ + { 19234, 0x0000873B }, /* GL_MODELVIEW27_ARB */ + { 19253, 0x0000873C }, /* GL_MODELVIEW28_ARB */ + { 19272, 0x0000873D }, /* GL_MODELVIEW29_ARB */ + { 19291, 0x00008722 }, /* GL_MODELVIEW2_ARB */ + { 19309, 0x0000873E }, /* GL_MODELVIEW30_ARB */ + { 19328, 0x0000873F }, /* GL_MODELVIEW31_ARB */ + { 19347, 0x00008723 }, /* GL_MODELVIEW3_ARB */ + { 19365, 0x00008724 }, /* GL_MODELVIEW4_ARB */ + { 19383, 0x00008725 }, /* GL_MODELVIEW5_ARB */ + { 19401, 0x00008726 }, /* GL_MODELVIEW6_ARB */ + { 19419, 0x00008727 }, /* GL_MODELVIEW7_ARB */ + { 19437, 0x00008728 }, /* GL_MODELVIEW8_ARB */ + { 19455, 0x00008729 }, /* GL_MODELVIEW9_ARB */ + { 19473, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */ + { 19493, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */ + { 19520, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */ + { 19545, 0x00002100 }, /* GL_MODULATE */ + { 19557, 0x00008744 }, /* GL_MODULATE_ADD_ATI */ + { 19577, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */ + { 19604, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */ + { 19629, 0x00000103 }, /* GL_MULT */ + { 19637, 0x0000809D }, /* GL_MULTISAMPLE */ + { 19652, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */ + { 19672, 0x0000809D }, /* GL_MULTISAMPLE_ARB */ + { 19691, 0x20000000 }, /* GL_MULTISAMPLE_BIT */ + { 19710, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */ + { 19734, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */ + { 19757, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */ + { 19787, 0x00002A25 }, /* GL_N3F_V3F */ + { 19798, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */ + { 19818, 0x0000150E }, /* GL_NAND */ + { 19826, 0x00002600 }, /* GL_NEAREST */ + { 19837, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ + { 19868, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ + { 19900, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */ + { 19925, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */ + { 19951, 0x00000200 }, /* GL_NEVER */ + { 19960, 0x00001102 }, /* GL_NICEST */ + { 19970, 0x00000000 }, /* GL_NONE */ + { 19978, 0x00001505 }, /* GL_NOOP */ + { 19986, 0x00001508 }, /* GL_NOR */ + { 19993, 0x00000BA1 }, /* GL_NORMALIZE */ + { 20006, 0x00008075 }, /* GL_NORMAL_ARRAY */ + { 20022, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ + { 20053, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */ + { 20088, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */ + { 20112, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */ + { 20135, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */ + { 20156, 0x00008511 }, /* GL_NORMAL_MAP */ + { 20170, 0x00008511 }, /* GL_NORMAL_MAP_ARB */ + { 20188, 0x00008511 }, /* GL_NORMAL_MAP_NV */ + { 20205, 0x00000205 }, /* GL_NOTEQUAL */ + { 20217, 0x00000000 }, /* GL_NO_ERROR */ + { 20229, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ + { 20263, 0x000086A2 }, /* GL_NUM_TEXTURE_COMPRESSED_FORMATS_ARB */ + { 20301, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */ + { 20333, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */ + { 20375, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */ + { 20405, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */ + { 20445, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */ + { 20476, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */ + { 20505, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */ + { 20533, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */ + { 20563, 0x00002401 }, /* GL_OBJECT_LINEAR */ + { 20580, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */ + { 20606, 0x00002501 }, /* GL_OBJECT_PLANE */ + { 20622, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */ + { 20657, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */ + { 20679, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */ + { 20698, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */ + { 20728, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */ + { 20749, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */ + { 20777, 0x00000001 }, /* GL_ONE */ + { 20784, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */ + { 20812, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */ + { 20844, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */ + { 20872, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */ + { 20904, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */ + { 20927, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */ + { 20950, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */ + { 20973, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */ + { 20996, 0x00008598 }, /* GL_OPERAND0_ALPHA */ + { 21014, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */ + { 21036, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */ + { 21058, 0x00008590 }, /* GL_OPERAND0_RGB */ + { 21074, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */ + { 21094, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */ + { 21114, 0x00008599 }, /* GL_OPERAND1_ALPHA */ + { 21132, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */ + { 21154, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */ + { 21176, 0x00008591 }, /* GL_OPERAND1_RGB */ + { 21192, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */ + { 21212, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */ + { 21232, 0x0000859A }, /* GL_OPERAND2_ALPHA */ + { 21250, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */ + { 21272, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */ + { 21294, 0x00008592 }, /* GL_OPERAND2_RGB */ + { 21310, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */ + { 21330, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */ + { 21350, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */ + { 21371, 0x00008593 }, /* GL_OPERAND3_RGB_NV */ + { 21390, 0x00001507 }, /* GL_OR */ + { 21396, 0x00000A01 }, /* GL_ORDER */ + { 21405, 0x0000150D }, /* GL_OR_INVERTED */ + { 21420, 0x0000150B }, /* GL_OR_REVERSE */ + { 21434, 0x00000505 }, /* GL_OUT_OF_MEMORY */ + { 21451, 0x00000D05 }, /* GL_PACK_ALIGNMENT */ + { 21469, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */ + { 21490, 0x00008758 }, /* GL_PACK_INVERT_MESA */ + { 21510, 0x00000D01 }, /* GL_PACK_LSB_FIRST */ + { 21528, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */ + { 21547, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */ + { 21567, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */ + { 21587, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */ + { 21605, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */ + { 21624, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */ + { 21649, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */ + { 21673, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */ + { 21694, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */ + { 21716, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */ + { 21738, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */ + { 21763, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */ + { 21787, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */ + { 21808, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */ + { 21830, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */ + { 21852, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */ + { 21874, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */ + { 21905, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */ + { 21925, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */ + { 21950, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */ + { 21970, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */ + { 21995, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */ + { 22015, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */ + { 22040, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */ + { 22060, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */ + { 22085, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */ + { 22105, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */ + { 22130, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */ + { 22150, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */ + { 22175, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */ + { 22195, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */ + { 22220, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */ + { 22240, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */ + { 22265, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */ + { 22285, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */ + { 22310, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */ + { 22330, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */ + { 22355, 0x00000020 }, /* GL_PIXEL_MODE_BIT */ + { 22373, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */ + { 22406, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */ + { 22431, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */ + { 22466, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */ + { 22493, 0x00001B00 }, /* GL_POINT */ + { 22502, 0x00000000 }, /* GL_POINTS */ + { 22512, 0x00000002 }, /* GL_POINT_BIT */ + { 22525, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */ + { 22555, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */ + { 22589, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */ + { 22623, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */ + { 22658, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */ + { 22687, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */ + { 22720, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */ + { 22753, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */ + { 22787, 0x00000B11 }, /* GL_POINT_SIZE */ + { 22801, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */ + { 22827, 0x00008127 }, /* GL_POINT_SIZE_MAX */ + { 22845, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */ + { 22867, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */ + { 22889, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */ + { 22912, 0x00008126 }, /* GL_POINT_SIZE_MIN */ + { 22930, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */ + { 22952, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */ + { 22974, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */ + { 22997, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */ + { 23017, 0x00000B10 }, /* GL_POINT_SMOOTH */ + { 23033, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */ + { 23054, 0x00008861 }, /* GL_POINT_SPRITE */ + { 23070, 0x00008861 }, /* GL_POINT_SPRITE_ARB */ + { 23090, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */ + { 23119, 0x00008861 }, /* GL_POINT_SPRITE_NV */ + { 23138, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */ + { 23164, 0x00000701 }, /* GL_POINT_TOKEN */ + { 23179, 0x00000009 }, /* GL_POLYGON */ + { 23190, 0x00000008 }, /* GL_POLYGON_BIT */ + { 23205, 0x00000B40 }, /* GL_POLYGON_MODE */ + { 23221, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */ + { 23244, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */ + { 23269, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */ + { 23292, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */ + { 23315, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */ + { 23339, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */ + { 23363, 0x00000B41 }, /* GL_POLYGON_SMOOTH */ + { 23381, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */ + { 23404, 0x00000B42 }, /* GL_POLYGON_STIPPLE */ + { 23423, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */ + { 23446, 0x00000703 }, /* GL_POLYGON_TOKEN */ + { 23463, 0x00001203 }, /* GL_POSITION */ + { 23475, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ + { 23507, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */ + { 23543, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ + { 23576, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */ + { 23613, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ + { 23644, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */ + { 23679, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ + { 23711, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */ + { 23747, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ + { 23780, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ + { 23812, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */ + { 23848, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ + { 23881, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */ + { 23918, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */ + { 23948, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */ + { 23982, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */ + { 24013, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */ + { 24048, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ + { 24079, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */ + { 24114, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ + { 24146, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */ + { 24182, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */ + { 24212, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */ + { 24246, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */ + { 24277, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */ + { 24312, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */ + { 24344, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */ + { 24375, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */ + { 24410, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */ + { 24442, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */ + { 24478, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */ + { 24507, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */ + { 24540, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */ + { 24570, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */ + { 24604, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ + { 24643, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ + { 24676, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ + { 24716, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ + { 24750, 0x00008578 }, /* GL_PREVIOUS */ + { 24762, 0x00008578 }, /* GL_PREVIOUS_ARB */ + { 24778, 0x00008578 }, /* GL_PREVIOUS_EXT */ + { 24794, 0x00008577 }, /* GL_PRIMARY_COLOR */ + { 24811, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */ + { 24832, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */ + { 24853, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ + { 24886, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ + { 24918, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */ + { 24941, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */ + { 24964, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */ + { 24994, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */ + { 25023, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */ + { 25051, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */ + { 25073, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */ + { 25101, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */ + { 25129, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */ + { 25151, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */ + { 25172, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + { 25212, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + { 25251, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ + { 25281, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + { 25316, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ + { 25349, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ + { 25383, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + { 25422, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + { 25461, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */ + { 25483, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */ + { 25509, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */ + { 25533, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */ + { 25556, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */ + { 25578, 0x00008628 }, /* GL_PROGRAM_STRING_NV */ + { 25599, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */ + { 25620, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */ + { 25647, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ + { 25679, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ + { 25711, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ + { 25746, 0x00001701 }, /* GL_PROJECTION */ + { 25760, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */ + { 25781, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */ + { 25807, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */ + { 25828, 0x00008025 }, /* GL_PROXY_HISTOGRAM */ + { 25847, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */ + { 25870, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ + { 25909, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ + { 25947, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */ + { 25967, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */ + { 25991, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */ + { 26011, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */ + { 26035, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */ + { 26055, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ + { 26088, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */ + { 26114, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */ + { 26144, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ + { 26175, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */ + { 26205, 0x00002003 }, /* GL_Q */ + { 26210, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */ + { 26235, 0x00000007 }, /* GL_QUADS */ + { 26244, 0x00008614 }, /* GL_QUAD_MESH_SUN */ + { 26261, 0x00000008 }, /* GL_QUAD_STRIP */ + { 26275, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */ + { 26297, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */ + { 26323, 0x00008866 }, /* GL_QUERY_RESULT */ + { 26339, 0x00008866 }, /* GL_QUERY_RESULT_ARB */ + { 26359, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */ + { 26385, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */ + { 26415, 0x00002002 }, /* GL_R */ + { 26420, 0x00002A10 }, /* GL_R3_G3_B2 */ + { 26432, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ + { 26465, 0x00000C02 }, /* GL_READ_BUFFER */ + { 26480, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ + { 26512, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */ + { 26536, 0x000088B8 }, /* GL_READ_ONLY */ + { 26549, 0x000088B8 }, /* GL_READ_ONLY_ARB */ + { 26566, 0x000088BA }, /* GL_READ_WRITE */ + { 26580, 0x000088BA }, /* GL_READ_WRITE_ARB */ + { 26598, 0x00001903 }, /* GL_RED */ + { 26605, 0x00008016 }, /* GL_REDUCE */ + { 26615, 0x00008016 }, /* GL_REDUCE_EXT */ + { 26629, 0x00000D15 }, /* GL_RED_BIAS */ + { 26641, 0x00000D52 }, /* GL_RED_BITS */ + { 26653, 0x00000D14 }, /* GL_RED_SCALE */ + { 26666, 0x00008512 }, /* GL_REFLECTION_MAP */ + { 26684, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */ + { 26706, 0x00008512 }, /* GL_REFLECTION_MAP_NV */ + { 26727, 0x00001C00 }, /* GL_RENDER */ + { 26737, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */ + { 26765, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */ + { 26785, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */ + { 26812, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */ + { 26848, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */ + { 26874, 0x00001F01 }, /* GL_RENDERER */ + { 26886, 0x00000C40 }, /* GL_RENDER_MODE */ + { 26901, 0x00002901 }, /* GL_REPEAT */ + { 26911, 0x00001E01 }, /* GL_REPLACE */ + { 26922, 0x00008062 }, /* GL_REPLACE_EXT */ + { 26937, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */ + { 26960, 0x0000803A }, /* GL_RESCALE_NORMAL */ + { 26978, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */ + { 27000, 0x00000102 }, /* GL_RETURN */ + { 27010, 0x00001907 }, /* GL_RGB */ + { 27017, 0x00008052 }, /* GL_RGB10 */ + { 27026, 0x00008059 }, /* GL_RGB10_A2 */ + { 27038, 0x00008059 }, /* GL_RGB10_A2_EXT */ + { 27054, 0x00008052 }, /* GL_RGB10_EXT */ + { 27067, 0x00008053 }, /* GL_RGB12 */ + { 27076, 0x00008053 }, /* GL_RGB12_EXT */ + { 27089, 0x00008054 }, /* GL_RGB16 */ + { 27098, 0x00008054 }, /* GL_RGB16_EXT */ + { 27111, 0x0000804E }, /* GL_RGB2_EXT */ + { 27123, 0x0000804F }, /* GL_RGB4 */ + { 27131, 0x0000804F }, /* GL_RGB4_EXT */ + { 27143, 0x000083A1 }, /* GL_RGB4_S3TC */ + { 27156, 0x00008050 }, /* GL_RGB5 */ + { 27164, 0x00008057 }, /* GL_RGB5_A1 */ + { 27175, 0x00008057 }, /* GL_RGB5_A1_EXT */ + { 27190, 0x00008050 }, /* GL_RGB5_EXT */ + { 27202, 0x00008051 }, /* GL_RGB8 */ + { 27210, 0x00008051 }, /* GL_RGB8_EXT */ + { 27222, 0x00001908 }, /* GL_RGBA */ + { 27230, 0x0000805A }, /* GL_RGBA12 */ + { 27240, 0x0000805A }, /* GL_RGBA12_EXT */ + { 27254, 0x0000805B }, /* GL_RGBA16 */ + { 27264, 0x0000805B }, /* GL_RGBA16_EXT */ + { 27278, 0x00008055 }, /* GL_RGBA2 */ + { 27287, 0x00008055 }, /* GL_RGBA2_EXT */ + { 27300, 0x00008056 }, /* GL_RGBA4 */ + { 27309, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */ + { 27328, 0x00008056 }, /* GL_RGBA4_EXT */ + { 27341, 0x000083A3 }, /* GL_RGBA4_S3TC */ + { 27355, 0x00008058 }, /* GL_RGBA8 */ + { 27364, 0x00008058 }, /* GL_RGBA8_EXT */ + { 27377, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */ + { 27395, 0x00000C31 }, /* GL_RGBA_MODE */ + { 27408, 0x000083A2 }, /* GL_RGBA_S3TC */ + { 27421, 0x000083A0 }, /* GL_RGB_S3TC */ + { 27433, 0x00008573 }, /* GL_RGB_SCALE */ + { 27446, 0x00008573 }, /* GL_RGB_SCALE_ARB */ + { 27463, 0x00008573 }, /* GL_RGB_SCALE_EXT */ + { 27480, 0x00000407 }, /* GL_RIGHT */ + { 27489, 0x00002000 }, /* GL_S */ + { 27494, 0x00008B5D }, /* GL_SAMPLER_1D */ + { 27508, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */ + { 27529, 0x00008B5E }, /* GL_SAMPLER_2D */ + { 27543, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */ + { 27564, 0x00008B5F }, /* GL_SAMPLER_3D */ + { 27578, 0x00008B60 }, /* GL_SAMPLER_CUBE */ + { 27594, 0x000080A9 }, /* GL_SAMPLES */ + { 27605, 0x000086B4 }, /* GL_SAMPLES_3DFX */ + { 27621, 0x000080A9 }, /* GL_SAMPLES_ARB */ + { 27636, 0x00008914 }, /* GL_SAMPLES_PASSED */ + { 27654, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */ + { 27676, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ + { 27704, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */ + { 27736, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */ + { 27759, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */ + { 27786, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */ + { 27804, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */ + { 27827, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */ + { 27849, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */ + { 27868, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */ + { 27891, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */ + { 27917, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */ + { 27947, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */ + { 27972, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */ + { 28001, 0x00080000 }, /* GL_SCISSOR_BIT */ + { 28016, 0x00000C10 }, /* GL_SCISSOR_BOX */ + { 28031, 0x00000C11 }, /* GL_SCISSOR_TEST */ + { 28047, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */ + { 28072, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ + { 28112, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */ + { 28156, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ + { 28189, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ + { 28219, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ + { 28251, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ + { 28281, 0x00001C02 }, /* GL_SELECT */ + { 28291, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */ + { 28319, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */ + { 28344, 0x00008012 }, /* GL_SEPARABLE_2D */ + { 28360, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */ + { 28387, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */ + { 28418, 0x0000150F }, /* GL_SET */ + { 28425, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */ + { 28446, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */ + { 28470, 0x00008B4F }, /* GL_SHADER_TYPE */ + { 28485, 0x00000B54 }, /* GL_SHADE_MODEL */ + { 28500, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */ + { 28528, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */ + { 28551, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */ + { 28581, 0x00001601 }, /* GL_SHININESS */ + { 28594, 0x00001402 }, /* GL_SHORT */ + { 28603, 0x000081F9 }, /* GL_SINGLE_COLOR */ + { 28619, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */ + { 28639, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */ + { 28658, 0x00001D01 }, /* GL_SMOOTH */ + { 28668, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */ + { 28701, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */ + { 28728, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */ + { 28761, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */ + { 28788, 0x00008588 }, /* GL_SOURCE0_ALPHA */ + { 28805, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */ + { 28826, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */ + { 28847, 0x00008580 }, /* GL_SOURCE0_RGB */ + { 28862, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */ + { 28881, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */ + { 28900, 0x00008589 }, /* GL_SOURCE1_ALPHA */ + { 28917, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */ + { 28938, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */ + { 28959, 0x00008581 }, /* GL_SOURCE1_RGB */ + { 28974, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */ + { 28993, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */ + { 29012, 0x0000858A }, /* GL_SOURCE2_ALPHA */ + { 29029, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */ + { 29050, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */ + { 29071, 0x00008582 }, /* GL_SOURCE2_RGB */ + { 29086, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */ + { 29105, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */ + { 29124, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */ + { 29144, 0x00008583 }, /* GL_SOURCE3_RGB_NV */ + { 29162, 0x00001202 }, /* GL_SPECULAR */ + { 29174, 0x00002402 }, /* GL_SPHERE_MAP */ + { 29188, 0x00001206 }, /* GL_SPOT_CUTOFF */ + { 29203, 0x00001204 }, /* GL_SPOT_DIRECTION */ + { 29221, 0x00001205 }, /* GL_SPOT_EXPONENT */ + { 29238, 0x00008588 }, /* GL_SRC0_ALPHA */ + { 29252, 0x00008580 }, /* GL_SRC0_RGB */ + { 29264, 0x00008589 }, /* GL_SRC1_ALPHA */ + { 29278, 0x00008581 }, /* GL_SRC1_RGB */ + { 29290, 0x0000858A }, /* GL_SRC2_ALPHA */ + { 29304, 0x00008582 }, /* GL_SRC2_RGB */ + { 29316, 0x00000302 }, /* GL_SRC_ALPHA */ + { 29329, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */ + { 29351, 0x00000300 }, /* GL_SRC_COLOR */ + { 29364, 0x00000503 }, /* GL_STACK_OVERFLOW */ + { 29382, 0x00000504 }, /* GL_STACK_UNDERFLOW */ + { 29401, 0x000088E6 }, /* GL_STATIC_COPY */ + { 29416, 0x000088E6 }, /* GL_STATIC_COPY_ARB */ + { 29435, 0x000088E4 }, /* GL_STATIC_DRAW */ + { 29450, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */ + { 29469, 0x000088E5 }, /* GL_STATIC_READ */ + { 29484, 0x000088E5 }, /* GL_STATIC_READ_ARB */ + { 29503, 0x00001802 }, /* GL_STENCIL */ + { 29514, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */ + { 29540, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */ + { 29561, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */ + { 29582, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ + { 29614, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ + { 29646, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */ + { 29666, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */ + { 29693, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */ + { 29719, 0x00000D57 }, /* GL_STENCIL_BITS */ + { 29735, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */ + { 29757, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */ + { 29780, 0x00000B94 }, /* GL_STENCIL_FAIL */ + { 29796, 0x00000B92 }, /* GL_STENCIL_FUNC */ + { 29812, 0x00001901 }, /* GL_STENCIL_INDEX */ + { 29829, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */ + { 29852, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */ + { 29874, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */ + { 29896, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */ + { 29918, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */ + { 29939, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */ + { 29966, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */ + { 29993, 0x00000B97 }, /* GL_STENCIL_REF */ + { 30008, 0x00000B90 }, /* GL_STENCIL_TEST */ + { 30024, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ + { 30053, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */ + { 30075, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */ + { 30096, 0x00000C33 }, /* GL_STEREO */ + { 30106, 0x000088E2 }, /* GL_STREAM_COPY */ + { 30121, 0x000088E2 }, /* GL_STREAM_COPY_ARB */ + { 30140, 0x000088E0 }, /* GL_STREAM_DRAW */ + { 30155, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */ + { 30174, 0x000088E1 }, /* GL_STREAM_READ */ + { 30189, 0x000088E1 }, /* GL_STREAM_READ_ARB */ + { 30208, 0x00000D50 }, /* GL_SUBPIXEL_BITS */ + { 30225, 0x000084E7 }, /* GL_SUBTRACT */ + { 30237, 0x000084E7 }, /* GL_SUBTRACT_ARB */ + { 30253, 0x00002001 }, /* GL_T */ + { 30258, 0x00002A2A }, /* GL_T2F_C3F_V3F */ + { 30273, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */ + { 30292, 0x00002A29 }, /* GL_T2F_C4UB_V3F */ + { 30308, 0x00002A2B }, /* GL_T2F_N3F_V3F */ + { 30323, 0x00002A27 }, /* GL_T2F_V3F */ + { 30334, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */ + { 30353, 0x00002A28 }, /* GL_T4F_V4F */ + { 30364, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */ + { 30387, 0x00001702 }, /* GL_TEXTURE */ + { 30398, 0x000084C0 }, /* GL_TEXTURE0 */ + { 30410, 0x000084C0 }, /* GL_TEXTURE0_ARB */ + { 30426, 0x000084C1 }, /* GL_TEXTURE1 */ + { 30438, 0x000084CA }, /* GL_TEXTURE10 */ + { 30451, 0x000084CA }, /* GL_TEXTURE10_ARB */ + { 30468, 0x000084CB }, /* GL_TEXTURE11 */ + { 30481, 0x000084CB }, /* GL_TEXTURE11_ARB */ + { 30498, 0x000084CC }, /* GL_TEXTURE12 */ + { 30511, 0x000084CC }, /* GL_TEXTURE12_ARB */ + { 30528, 0x000084CD }, /* GL_TEXTURE13 */ + { 30541, 0x000084CD }, /* GL_TEXTURE13_ARB */ + { 30558, 0x000084CE }, /* GL_TEXTURE14 */ + { 30571, 0x000084CE }, /* GL_TEXTURE14_ARB */ + { 30588, 0x000084CF }, /* GL_TEXTURE15 */ + { 30601, 0x000084CF }, /* GL_TEXTURE15_ARB */ + { 30618, 0x000084D0 }, /* GL_TEXTURE16 */ + { 30631, 0x000084D0 }, /* GL_TEXTURE16_ARB */ + { 30648, 0x000084D1 }, /* GL_TEXTURE17 */ + { 30661, 0x000084D1 }, /* GL_TEXTURE17_ARB */ + { 30678, 0x000084D2 }, /* GL_TEXTURE18 */ + { 30691, 0x000084D2 }, /* GL_TEXTURE18_ARB */ + { 30708, 0x000084D3 }, /* GL_TEXTURE19 */ + { 30721, 0x000084D3 }, /* GL_TEXTURE19_ARB */ + { 30738, 0x000084C1 }, /* GL_TEXTURE1_ARB */ + { 30754, 0x000084C2 }, /* GL_TEXTURE2 */ + { 30766, 0x000084D4 }, /* GL_TEXTURE20 */ + { 30779, 0x000084D4 }, /* GL_TEXTURE20_ARB */ + { 30796, 0x000084D5 }, /* GL_TEXTURE21 */ + { 30809, 0x000084D5 }, /* GL_TEXTURE21_ARB */ + { 30826, 0x000084D6 }, /* GL_TEXTURE22 */ + { 30839, 0x000084D6 }, /* GL_TEXTURE22_ARB */ + { 30856, 0x000084D7 }, /* GL_TEXTURE23 */ + { 30869, 0x000084D7 }, /* GL_TEXTURE23_ARB */ + { 30886, 0x000084D8 }, /* GL_TEXTURE24 */ + { 30899, 0x000084D8 }, /* GL_TEXTURE24_ARB */ + { 30916, 0x000084D9 }, /* GL_TEXTURE25 */ + { 30929, 0x000084D9 }, /* GL_TEXTURE25_ARB */ + { 30946, 0x000084DA }, /* GL_TEXTURE26 */ + { 30959, 0x000084DA }, /* GL_TEXTURE26_ARB */ + { 30976, 0x000084DB }, /* GL_TEXTURE27 */ + { 30989, 0x000084DB }, /* GL_TEXTURE27_ARB */ + { 31006, 0x000084DC }, /* GL_TEXTURE28 */ + { 31019, 0x000084DC }, /* GL_TEXTURE28_ARB */ + { 31036, 0x000084DD }, /* GL_TEXTURE29 */ + { 31049, 0x000084DD }, /* GL_TEXTURE29_ARB */ + { 31066, 0x000084C2 }, /* GL_TEXTURE2_ARB */ + { 31082, 0x000084C3 }, /* GL_TEXTURE3 */ + { 31094, 0x000084DE }, /* GL_TEXTURE30 */ + { 31107, 0x000084DE }, /* GL_TEXTURE30_ARB */ + { 31124, 0x000084DF }, /* GL_TEXTURE31 */ + { 31137, 0x000084DF }, /* GL_TEXTURE31_ARB */ + { 31154, 0x000084C3 }, /* GL_TEXTURE3_ARB */ + { 31170, 0x000084C4 }, /* GL_TEXTURE4 */ + { 31182, 0x000084C4 }, /* GL_TEXTURE4_ARB */ + { 31198, 0x000084C5 }, /* GL_TEXTURE5 */ + { 31210, 0x000084C5 }, /* GL_TEXTURE5_ARB */ + { 31226, 0x000084C6 }, /* GL_TEXTURE6 */ + { 31238, 0x000084C6 }, /* GL_TEXTURE6_ARB */ + { 31254, 0x000084C7 }, /* GL_TEXTURE7 */ + { 31266, 0x000084C7 }, /* GL_TEXTURE7_ARB */ + { 31282, 0x000084C8 }, /* GL_TEXTURE8 */ + { 31294, 0x000084C8 }, /* GL_TEXTURE8_ARB */ + { 31310, 0x000084C9 }, /* GL_TEXTURE9 */ + { 31322, 0x000084C9 }, /* GL_TEXTURE9_ARB */ + { 31338, 0x00000DE0 }, /* GL_TEXTURE_1D */ + { 31352, 0x00000DE1 }, /* GL_TEXTURE_2D */ + { 31366, 0x0000806F }, /* GL_TEXTURE_3D */ + { 31380, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */ + { 31402, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */ + { 31428, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */ + { 31450, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */ + { 31472, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */ + { 31494, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */ + { 31516, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */ + { 31544, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */ + { 31576, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ + { 31609, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */ + { 31641, 0x00040000 }, /* GL_TEXTURE_BIT */ + { 31656, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */ + { 31677, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */ + { 31702, 0x00001005 }, /* GL_TEXTURE_BORDER */ + { 31720, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */ + { 31744, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ + { 31775, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ + { 31805, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ + { 31835, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ + { 31870, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ + { 31901, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + { 31939, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */ + { 31966, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ + { 31998, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ + { 32032, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */ + { 32056, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */ + { 32084, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */ + { 32108, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */ + { 32136, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ + { 32169, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */ + { 32193, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */ + { 32215, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */ + { 32237, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */ + { 32263, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */ + { 32297, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ + { 32330, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */ + { 32367, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */ + { 32395, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */ + { 32427, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */ + { 32450, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ + { 32488, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */ + { 32530, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */ + { 32561, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */ + { 32589, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ + { 32619, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */ + { 32647, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */ + { 32667, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */ + { 32691, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ + { 32722, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */ + { 32757, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ + { 32788, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */ + { 32823, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ + { 32854, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */ + { 32889, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ + { 32920, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */ + { 32955, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ + { 32986, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */ + { 33021, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ + { 33052, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */ + { 33087, 0x00008071 }, /* GL_TEXTURE_DEPTH */ + { 33104, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */ + { 33126, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */ + { 33152, 0x00002300 }, /* GL_TEXTURE_ENV */ + { 33167, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */ + { 33188, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */ + { 33208, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */ + { 33234, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */ + { 33254, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */ + { 33271, 0x00000C62 }, /* GL_TEXTURE_GEN_R */ + { 33288, 0x00000C60 }, /* GL_TEXTURE_GEN_S */ + { 33305, 0x00000C61 }, /* GL_TEXTURE_GEN_T */ + { 33322, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */ + { 33347, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */ + { 33369, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */ + { 33395, 0x00001001 }, /* GL_TEXTURE_HEIGHT */ + { 33413, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */ + { 33439, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */ + { 33465, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */ + { 33495, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */ + { 33522, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */ + { 33547, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */ + { 33567, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */ + { 33591, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ + { 33618, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ + { 33645, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ + { 33672, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */ + { 33698, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */ + { 33728, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */ + { 33750, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */ + { 33768, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ + { 33798, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ + { 33826, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ + { 33854, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ + { 33882, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */ + { 33903, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */ + { 33922, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */ + { 33944, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */ + { 33963, 0x00008066 }, /* GL_TEXTURE_PRIORITY */ + { 33983, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */ + { 34008, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */ + { 34032, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */ + { 34052, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */ + { 34076, 0x00008067 }, /* GL_TEXTURE_RESIDENT */ + { 34096, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */ + { 34119, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */ + { 34144, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ + { 34178, 0x00001000 }, /* GL_TEXTURE_WIDTH */ + { 34195, 0x00008072 }, /* GL_TEXTURE_WRAP_R */ + { 34213, 0x00002802 }, /* GL_TEXTURE_WRAP_S */ + { 34231, 0x00002803 }, /* GL_TEXTURE_WRAP_T */ + { 34249, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */ + { 34269, 0x00008648 }, /* GL_TRACK_MATRIX_NV */ + { 34288, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */ + { 34317, 0x00001000 }, /* GL_TRANSFORM_BIT */ + { 34334, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */ + { 34360, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */ + { 34390, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ + { 34422, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ + { 34452, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */ + { 34486, 0x0000862C }, /* GL_TRANSPOSE_NV */ + { 34502, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */ + { 34533, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */ + { 34568, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */ + { 34596, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */ + { 34628, 0x00000004 }, /* GL_TRIANGLES */ + { 34641, 0x00000006 }, /* GL_TRIANGLE_FAN */ + { 34657, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */ + { 34678, 0x00000005 }, /* GL_TRIANGLE_STRIP */ + { 34696, 0x00000001 }, /* GL_TRUE */ + { 34704, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */ + { 34724, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */ + { 34747, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */ + { 34767, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */ + { 34788, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */ + { 34810, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */ + { 34832, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */ + { 34852, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */ + { 34873, 0x00001401 }, /* GL_UNSIGNED_BYTE */ + { 34890, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */ + { 34917, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */ + { 34940, 0x00001405 }, /* GL_UNSIGNED_INT */ + { 34956, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */ + { 34983, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */ + { 35007, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */ + { 35038, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */ + { 35062, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */ + { 35090, 0x00001403 }, /* GL_UNSIGNED_SHORT */ + { 35108, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ + { 35138, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */ + { 35164, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ + { 35194, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */ + { 35220, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */ + { 35244, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */ + { 35272, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */ + { 35300, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */ + { 35327, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ + { 35359, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */ + { 35390, 0x00008CA2 }, /* GL_UPPER_LEFT */ + { 35404, 0x00002A20 }, /* GL_V2F */ + { 35411, 0x00002A21 }, /* GL_V3F */ + { 35418, 0x00008B83 }, /* GL_VALIDATE_STATUS */ + { 35437, 0x00001F00 }, /* GL_VENDOR */ + { 35447, 0x00001F02 }, /* GL_VERSION */ + { 35458, 0x00008074 }, /* GL_VERTEX_ARRAY */ + { 35474, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */ + { 35504, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ + { 35535, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */ + { 35570, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */ + { 35594, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */ + { 35615, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */ + { 35638, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */ + { 35659, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ + { 35686, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ + { 35714, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ + { 35742, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ + { 35770, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ + { 35798, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ + { 35826, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ + { 35854, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ + { 35881, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ + { 35908, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ + { 35935, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ + { 35962, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ + { 35989, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ + { 36016, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ + { 36043, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ + { 36070, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ + { 36097, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ + { 36135, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */ + { 36177, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ + { 36208, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */ + { 36243, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ + { 36277, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */ + { 36315, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ + { 36346, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */ + { 36381, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ + { 36409, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */ + { 36441, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ + { 36471, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */ + { 36505, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ + { 36533, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */ + { 36565, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */ + { 36585, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */ + { 36607, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */ + { 36636, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */ + { 36657, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */ + { 36686, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */ + { 36719, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */ + { 36751, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */ + { 36778, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */ + { 36809, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */ + { 36839, 0x00008B31 }, /* GL_VERTEX_SHADER */ + { 36856, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */ + { 36877, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */ + { 36904, 0x00000BA2 }, /* GL_VIEWPORT */ + { 36916, 0x00000800 }, /* GL_VIEWPORT_BIT */ + { 36932, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */ + { 36952, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ + { 36983, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */ + { 37018, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */ + { 37046, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */ + { 37071, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ + { 37098, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */ + { 37123, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */ + { 37147, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */ + { 37166, 0x000088B9 }, /* GL_WRITE_ONLY */ + { 37180, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */ + { 37198, 0x00001506 }, /* GL_XOR */ + { 37205, 0x000085B9 }, /* GL_YCBCR_422_APPLE */ + { 37224, 0x00008757 }, /* GL_YCBCR_MESA */ + { 37238, 0x00000000 }, /* GL_ZERO */ + { 37246, 0x00000D16 }, /* GL_ZOOM_X */ + { 37256, 0x00000D17 }, /* GL_ZOOM_Y */ +}; + +static const unsigned reduced_enums[1277] = +{ + 30, /* GL_ALL_CLIENT_ATTRIB_BITS */ + 435, /* GL_FALSE */ + 643, /* GL_LINES */ + 645, /* GL_LINE_LOOP */ + 652, /* GL_LINE_STRIP */ + 1628, /* GL_TRIANGLES */ + 1631, /* GL_TRIANGLE_STRIP */ + 1629, /* GL_TRIANGLE_FAN */ + 1206, /* GL_QUADS */ + 1208, /* GL_QUAD_STRIP */ + 1096, /* GL_POLYGON */ + 1108, /* GL_POLYGON_STIPPLE_BIT */ + 1061, /* GL_PIXEL_MODE_BIT */ + 630, /* GL_LIGHTING_BIT */ + 457, /* GL_FOG_BIT */ + 8, /* GL_ACCUM */ + 662, /* GL_LOAD */ + 1248, /* GL_RETURN */ + 934, /* GL_MULT */ + 23, /* GL_ADD */ + 950, /* GL_NEVER */ + 620, /* GL_LESS */ + 425, /* GL_EQUAL */ + 619, /* GL_LEQUAL */ + 545, /* GL_GREATER */ + 965, /* GL_NOTEQUAL */ + 520, /* GL_GEQUAL */ + 46, /* GL_ALWAYS */ + 1381, /* GL_SRC_COLOR */ + 994, /* GL_ONE_MINUS_SRC_COLOR */ + 1379, /* GL_SRC_ALPHA */ + 993, /* GL_ONE_MINUS_SRC_ALPHA */ + 405, /* GL_DST_ALPHA */ + 991, /* GL_ONE_MINUS_DST_ALPHA */ + 406, /* GL_DST_COLOR */ + 992, /* GL_ONE_MINUS_DST_COLOR */ + 1380, /* GL_SRC_ALPHA_SATURATE */ + 508, /* GL_FRONT_LEFT */ + 509, /* GL_FRONT_RIGHT */ + 69, /* GL_BACK_LEFT */ + 70, /* GL_BACK_RIGHT */ + 505, /* GL_FRONT */ + 68, /* GL_BACK */ + 618, /* GL_LEFT */ + 1288, /* GL_RIGHT */ + 506, /* GL_FRONT_AND_BACK */ + 63, /* GL_AUX0 */ + 64, /* GL_AUX1 */ + 65, /* GL_AUX2 */ + 66, /* GL_AUX3 */ + 610, /* GL_INVALID_ENUM */ + 613, /* GL_INVALID_VALUE */ + 612, /* GL_INVALID_OPERATION */ + 1382, /* GL_STACK_OVERFLOW */ + 1383, /* GL_STACK_UNDERFLOW */ + 1019, /* GL_OUT_OF_MEMORY */ + 611, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */ + 0, /* GL_2D */ + 2, /* GL_3D */ + 3, /* GL_3D_COLOR */ + 4, /* GL_3D_COLOR_TEXTURE */ + 6, /* GL_4D_COLOR_TEXTURE */ + 1039, /* GL_PASS_THROUGH_TOKEN */ + 1095, /* GL_POINT_TOKEN */ + 653, /* GL_LINE_TOKEN */ + 1109, /* GL_POLYGON_TOKEN */ + 74, /* GL_BITMAP_TOKEN */ + 404, /* GL_DRAW_PIXEL_TOKEN */ + 270, /* GL_COPY_PIXEL_TOKEN */ + 646, /* GL_LINE_RESET_TOKEN */ + 428, /* GL_EXP */ + 429, /* GL_EXP2 */ + 303, /* GL_CW */ + 116, /* GL_CCW */ + 137, /* GL_COEFF */ + 1016, /* GL_ORDER */ + 343, /* GL_DOMAIN */ + 278, /* GL_CURRENT_COLOR */ + 281, /* GL_CURRENT_INDEX */ + 287, /* GL_CURRENT_NORMAL */ + 299, /* GL_CURRENT_TEXTURE_COORDS */ + 292, /* GL_CURRENT_RASTER_COLOR */ + 294, /* GL_CURRENT_RASTER_INDEX */ + 297, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ + 295, /* GL_CURRENT_RASTER_POSITION */ + 296, /* GL_CURRENT_RASTER_POSITION_VALID */ + 293, /* GL_CURRENT_RASTER_DISTANCE */ + 1088, /* GL_POINT_SMOOTH */ + 1077, /* GL_POINT_SIZE */ + 1087, /* GL_POINT_SIZE_RANGE */ + 1078, /* GL_POINT_SIZE_GRANULARITY */ + 647, /* GL_LINE_SMOOTH */ + 654, /* GL_LINE_WIDTH */ + 656, /* GL_LINE_WIDTH_RANGE */ + 655, /* GL_LINE_WIDTH_GRANULARITY */ + 649, /* GL_LINE_STIPPLE */ + 650, /* GL_LINE_STIPPLE_PATTERN */ + 651, /* GL_LINE_STIPPLE_REPEAT */ + 661, /* GL_LIST_MODE */ + 819, /* GL_MAX_LIST_NESTING */ + 658, /* GL_LIST_BASE */ + 660, /* GL_LIST_INDEX */ + 1098, /* GL_POLYGON_MODE */ + 1105, /* GL_POLYGON_SMOOTH */ + 1107, /* GL_POLYGON_STIPPLE */ + 413, /* GL_EDGE_FLAG */ + 271, /* GL_CULL_FACE */ + 272, /* GL_CULL_FACE_MODE */ + 507, /* GL_FRONT_FACE */ + 629, /* GL_LIGHTING */ + 634, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ + 635, /* GL_LIGHT_MODEL_TWO_SIDE */ + 631, /* GL_LIGHT_MODEL_AMBIENT */ + 1334, /* GL_SHADE_MODEL */ + 168, /* GL_COLOR_MATERIAL_FACE */ + 169, /* GL_COLOR_MATERIAL_PARAMETER */ + 167, /* GL_COLOR_MATERIAL */ + 456, /* GL_FOG */ + 478, /* GL_FOG_INDEX */ + 474, /* GL_FOG_DENSITY */ + 482, /* GL_FOG_START */ + 476, /* GL_FOG_END */ + 479, /* GL_FOG_MODE */ + 458, /* GL_FOG_COLOR */ + 332, /* GL_DEPTH_RANGE */ + 337, /* GL_DEPTH_TEST */ + 340, /* GL_DEPTH_WRITEMASK */ + 320, /* GL_DEPTH_CLEAR_VALUE */ + 331, /* GL_DEPTH_FUNC */ + 12, /* GL_ACCUM_CLEAR_VALUE */ + 1413, /* GL_STENCIL_TEST */ + 1401, /* GL_STENCIL_CLEAR_VALUE */ + 1403, /* GL_STENCIL_FUNC */ + 1415, /* GL_STENCIL_VALUE_MASK */ + 1402, /* GL_STENCIL_FAIL */ + 1410, /* GL_STENCIL_PASS_DEPTH_FAIL */ + 1411, /* GL_STENCIL_PASS_DEPTH_PASS */ + 1412, /* GL_STENCIL_REF */ + 1416, /* GL_STENCIL_WRITEMASK */ + 789, /* GL_MATRIX_MODE */ + 955, /* GL_NORMALIZE */ + 1718, /* GL_VIEWPORT */ + 929, /* GL_MODELVIEW_STACK_DEPTH */ + 1188, /* GL_PROJECTION_STACK_DEPTH */ + 1607, /* GL_TEXTURE_STACK_DEPTH */ + 927, /* GL_MODELVIEW_MATRIX */ + 1187, /* GL_PROJECTION_MATRIX */ + 1592, /* GL_TEXTURE_MATRIX */ + 61, /* GL_ATTRIB_STACK_DEPTH */ + 127, /* GL_CLIENT_ATTRIB_STACK_DEPTH */ + 43, /* GL_ALPHA_TEST */ + 44, /* GL_ALPHA_TEST_FUNC */ + 45, /* GL_ALPHA_TEST_REF */ + 342, /* GL_DITHER */ + 78, /* GL_BLEND_DST */ + 86, /* GL_BLEND_SRC */ + 75, /* GL_BLEND */ + 664, /* GL_LOGIC_OP_MODE */ + 584, /* GL_INDEX_LOGIC_OP */ + 166, /* GL_COLOR_LOGIC_OP */ + 67, /* GL_AUX_BUFFERS */ + 353, /* GL_DRAW_BUFFER */ + 1218, /* GL_READ_BUFFER */ + 1315, /* GL_SCISSOR_BOX */ + 1316, /* GL_SCISSOR_TEST */ + 583, /* GL_INDEX_CLEAR_VALUE */ + 588, /* GL_INDEX_WRITEMASK */ + 163, /* GL_COLOR_CLEAR_VALUE */ + 205, /* GL_COLOR_WRITEMASK */ + 585, /* GL_INDEX_MODE */ + 1282, /* GL_RGBA_MODE */ + 352, /* GL_DOUBLEBUFFER */ + 1417, /* GL_STEREO */ + 1241, /* GL_RENDER_MODE */ + 1040, /* GL_PERSPECTIVE_CORRECTION_HINT */ + 1089, /* GL_POINT_SMOOTH_HINT */ + 648, /* GL_LINE_SMOOTH_HINT */ + 1106, /* GL_POLYGON_SMOOTH_HINT */ + 477, /* GL_FOG_HINT */ + 1573, /* GL_TEXTURE_GEN_S */ + 1574, /* GL_TEXTURE_GEN_T */ + 1572, /* GL_TEXTURE_GEN_R */ + 1571, /* GL_TEXTURE_GEN_Q */ + 1053, /* GL_PIXEL_MAP_I_TO_I */ + 1059, /* GL_PIXEL_MAP_S_TO_S */ + 1055, /* GL_PIXEL_MAP_I_TO_R */ + 1051, /* GL_PIXEL_MAP_I_TO_G */ + 1049, /* GL_PIXEL_MAP_I_TO_B */ + 1047, /* GL_PIXEL_MAP_I_TO_A */ + 1057, /* GL_PIXEL_MAP_R_TO_R */ + 1045, /* GL_PIXEL_MAP_G_TO_G */ + 1043, /* GL_PIXEL_MAP_B_TO_B */ + 1041, /* GL_PIXEL_MAP_A_TO_A */ + 1054, /* GL_PIXEL_MAP_I_TO_I_SIZE */ + 1060, /* GL_PIXEL_MAP_S_TO_S_SIZE */ + 1056, /* GL_PIXEL_MAP_I_TO_R_SIZE */ + 1052, /* GL_PIXEL_MAP_I_TO_G_SIZE */ + 1050, /* GL_PIXEL_MAP_I_TO_B_SIZE */ + 1048, /* GL_PIXEL_MAP_I_TO_A_SIZE */ + 1058, /* GL_PIXEL_MAP_R_TO_R_SIZE */ + 1046, /* GL_PIXEL_MAP_G_TO_G_SIZE */ + 1044, /* GL_PIXEL_MAP_B_TO_B_SIZE */ + 1042, /* GL_PIXEL_MAP_A_TO_A_SIZE */ + 1640, /* GL_UNPACK_SWAP_BYTES */ + 1635, /* GL_UNPACK_LSB_FIRST */ + 1636, /* GL_UNPACK_ROW_LENGTH */ + 1639, /* GL_UNPACK_SKIP_ROWS */ + 1638, /* GL_UNPACK_SKIP_PIXELS */ + 1633, /* GL_UNPACK_ALIGNMENT */ + 1028, /* GL_PACK_SWAP_BYTES */ + 1023, /* GL_PACK_LSB_FIRST */ + 1024, /* GL_PACK_ROW_LENGTH */ + 1027, /* GL_PACK_SKIP_ROWS */ + 1026, /* GL_PACK_SKIP_PIXELS */ + 1020, /* GL_PACK_ALIGNMENT */ + 742, /* GL_MAP_COLOR */ + 743, /* GL_MAP_STENCIL */ + 587, /* GL_INDEX_SHIFT */ + 586, /* GL_INDEX_OFFSET */ + 1230, /* GL_RED_SCALE */ + 1228, /* GL_RED_BIAS */ + 1735, /* GL_ZOOM_X */ + 1736, /* GL_ZOOM_Y */ + 549, /* GL_GREEN_SCALE */ + 547, /* GL_GREEN_BIAS */ + 92, /* GL_BLUE_SCALE */ + 90, /* GL_BLUE_BIAS */ + 42, /* GL_ALPHA_SCALE */ + 40, /* GL_ALPHA_BIAS */ + 333, /* GL_DEPTH_SCALE */ + 314, /* GL_DEPTH_BIAS */ + 814, /* GL_MAX_EVAL_ORDER */ + 818, /* GL_MAX_LIGHTS */ + 797, /* GL_MAX_CLIP_PLANES */ + 862, /* GL_MAX_TEXTURE_SIZE */ + 824, /* GL_MAX_PIXEL_MAP_TABLE */ + 793, /* GL_MAX_ATTRIB_STACK_DEPTH */ + 821, /* GL_MAX_MODELVIEW_STACK_DEPTH */ + 822, /* GL_MAX_NAME_STACK_DEPTH */ + 850, /* GL_MAX_PROJECTION_STACK_DEPTH */ + 863, /* GL_MAX_TEXTURE_STACK_DEPTH */ + 877, /* GL_MAX_VIEWPORT_DIMS */ + 794, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ + 1424, /* GL_SUBPIXEL_BITS */ + 582, /* GL_INDEX_BITS */ + 1229, /* GL_RED_BITS */ + 548, /* GL_GREEN_BITS */ + 91, /* GL_BLUE_BITS */ + 41, /* GL_ALPHA_BITS */ + 315, /* GL_DEPTH_BITS */ + 1399, /* GL_STENCIL_BITS */ + 14, /* GL_ACCUM_RED_BITS */ + 13, /* GL_ACCUM_GREEN_BITS */ + 10, /* GL_ACCUM_BLUE_BITS */ + 9, /* GL_ACCUM_ALPHA_BITS */ + 943, /* GL_NAME_STACK_DEPTH */ + 62, /* GL_AUTO_NORMAL */ + 688, /* GL_MAP1_COLOR_4 */ + 691, /* GL_MAP1_INDEX */ + 692, /* GL_MAP1_NORMAL */ + 693, /* GL_MAP1_TEXTURE_COORD_1 */ + 694, /* GL_MAP1_TEXTURE_COORD_2 */ + 695, /* GL_MAP1_TEXTURE_COORD_3 */ + 696, /* GL_MAP1_TEXTURE_COORD_4 */ + 697, /* GL_MAP1_VERTEX_3 */ + 698, /* GL_MAP1_VERTEX_4 */ + 715, /* GL_MAP2_COLOR_4 */ + 718, /* GL_MAP2_INDEX */ + 719, /* GL_MAP2_NORMAL */ + 720, /* GL_MAP2_TEXTURE_COORD_1 */ + 721, /* GL_MAP2_TEXTURE_COORD_2 */ + 722, /* GL_MAP2_TEXTURE_COORD_3 */ + 723, /* GL_MAP2_TEXTURE_COORD_4 */ + 724, /* GL_MAP2_VERTEX_3 */ + 725, /* GL_MAP2_VERTEX_4 */ + 689, /* GL_MAP1_GRID_DOMAIN */ + 690, /* GL_MAP1_GRID_SEGMENTS */ + 716, /* GL_MAP2_GRID_DOMAIN */ + 717, /* GL_MAP2_GRID_SEGMENTS */ + 1501, /* GL_TEXTURE_1D */ + 1502, /* GL_TEXTURE_2D */ + 438, /* GL_FEEDBACK_BUFFER_POINTER */ + 439, /* GL_FEEDBACK_BUFFER_SIZE */ + 440, /* GL_FEEDBACK_BUFFER_TYPE */ + 1325, /* GL_SELECTION_BUFFER_POINTER */ + 1326, /* GL_SELECTION_BUFFER_SIZE */ + 1610, /* GL_TEXTURE_WIDTH */ + 1578, /* GL_TEXTURE_HEIGHT */ + 1534, /* GL_TEXTURE_COMPONENTS */ + 1518, /* GL_TEXTURE_BORDER_COLOR */ + 1517, /* GL_TEXTURE_BORDER */ + 344, /* GL_DONT_CARE */ + 436, /* GL_FASTEST */ + 951, /* GL_NICEST */ + 47, /* GL_AMBIENT */ + 341, /* GL_DIFFUSE */ + 1368, /* GL_SPECULAR */ + 1110, /* GL_POSITION */ + 1371, /* GL_SPOT_DIRECTION */ + 1372, /* GL_SPOT_EXPONENT */ + 1370, /* GL_SPOT_CUTOFF */ + 244, /* GL_CONSTANT_ATTENUATION */ + 638, /* GL_LINEAR_ATTENUATION */ + 1205, /* GL_QUADRATIC_ATTENUATION */ + 218, /* GL_COMPILE */ + 219, /* GL_COMPILE_AND_EXECUTE */ + 111, /* GL_BYTE */ + 1641, /* GL_UNSIGNED_BYTE */ + 1339, /* GL_SHORT */ + 1650, /* GL_UNSIGNED_SHORT */ + 590, /* GL_INT */ + 1644, /* GL_UNSIGNED_INT */ + 443, /* GL_FLOAT */ + 1, /* GL_2_BYTES */ + 5, /* GL_3_BYTES */ + 7, /* GL_4_BYTES */ + 351, /* GL_DOUBLE */ + 123, /* GL_CLEAR */ + 49, /* GL_AND */ + 51, /* GL_AND_REVERSE */ + 268, /* GL_COPY */ + 50, /* GL_AND_INVERTED */ + 953, /* GL_NOOP */ + 1731, /* GL_XOR */ + 1015, /* GL_OR */ + 954, /* GL_NOR */ + 426, /* GL_EQUIV */ + 616, /* GL_INVERT */ + 1018, /* GL_OR_REVERSE */ + 269, /* GL_COPY_INVERTED */ + 1017, /* GL_OR_INVERTED */ + 944, /* GL_NAND */ + 1330, /* GL_SET */ + 423, /* GL_EMISSION */ + 1338, /* GL_SHININESS */ + 48, /* GL_AMBIENT_AND_DIFFUSE */ + 165, /* GL_COLOR_INDEXES */ + 894, /* GL_MODELVIEW */ + 1186, /* GL_PROJECTION */ + 1436, /* GL_TEXTURE */ + 138, /* GL_COLOR */ + 312, /* GL_DEPTH */ + 1390, /* GL_STENCIL */ + 164, /* GL_COLOR_INDEX */ + 1404, /* GL_STENCIL_INDEX */ + 321, /* GL_DEPTH_COMPONENT */ + 1225, /* GL_RED */ + 546, /* GL_GREEN */ + 89, /* GL_BLUE */ + 31, /* GL_ALPHA */ + 1249, /* GL_RGB */ + 1268, /* GL_RGBA */ + 666, /* GL_LUMINANCE */ + 687, /* GL_LUMINANCE_ALPHA */ + 73, /* GL_BITMAP */ + 1066, /* GL_POINT */ + 636, /* GL_LINE */ + 441, /* GL_FILL */ + 1234, /* GL_RENDER */ + 437, /* GL_FEEDBACK */ + 1324, /* GL_SELECT */ + 442, /* GL_FLAT */ + 1343, /* GL_SMOOTH */ + 617, /* GL_KEEP */ + 1243, /* GL_REPLACE */ + 573, /* GL_INCR */ + 308, /* GL_DECR */ + 1665, /* GL_VENDOR */ + 1240, /* GL_RENDERER */ + 1666, /* GL_VERSION */ + 430, /* GL_EXTENSIONS */ + 1289, /* GL_S */ + 1427, /* GL_T */ + 1215, /* GL_R */ + 1204, /* GL_Q */ + 930, /* GL_MODULATE */ + 307, /* GL_DECAL */ + 1568, /* GL_TEXTURE_ENV_MODE */ + 1567, /* GL_TEXTURE_ENV_COLOR */ + 1566, /* GL_TEXTURE_ENV */ + 431, /* GL_EYE_LINEAR */ + 977, /* GL_OBJECT_LINEAR */ + 1369, /* GL_SPHERE_MAP */ + 1570, /* GL_TEXTURE_GEN_MODE */ + 979, /* GL_OBJECT_PLANE */ + 432, /* GL_EYE_PLANE */ + 945, /* GL_NEAREST */ + 637, /* GL_LINEAR */ + 949, /* GL_NEAREST_MIPMAP_NEAREST */ + 642, /* GL_LINEAR_MIPMAP_NEAREST */ + 948, /* GL_NEAREST_MIPMAP_LINEAR */ + 641, /* GL_LINEAR_MIPMAP_LINEAR */ + 1591, /* GL_TEXTURE_MAG_FILTER */ + 1599, /* GL_TEXTURE_MIN_FILTER */ + 1612, /* GL_TEXTURE_WRAP_S */ + 1613, /* GL_TEXTURE_WRAP_T */ + 117, /* GL_CLAMP */ + 1242, /* GL_REPEAT */ + 1104, /* GL_POLYGON_OFFSET_UNITS */ + 1103, /* GL_POLYGON_OFFSET_POINT */ + 1102, /* GL_POLYGON_OFFSET_LINE */ + 1216, /* GL_R3_G3_B2 */ + 1662, /* GL_V2F */ + 1663, /* GL_V3F */ + 114, /* GL_C4UB_V2F */ + 115, /* GL_C4UB_V3F */ + 112, /* GL_C3F_V3F */ + 942, /* GL_N3F_V3F */ + 113, /* GL_C4F_N3F_V3F */ + 1432, /* GL_T2F_V3F */ + 1434, /* GL_T4F_V4F */ + 1430, /* GL_T2F_C4UB_V3F */ + 1428, /* GL_T2F_C3F_V3F */ + 1431, /* GL_T2F_N3F_V3F */ + 1429, /* GL_T2F_C4F_N3F_V3F */ + 1433, /* GL_T4F_C4F_N3F_V4F */ + 130, /* GL_CLIP_PLANE0 */ + 131, /* GL_CLIP_PLANE1 */ + 132, /* GL_CLIP_PLANE2 */ + 133, /* GL_CLIP_PLANE3 */ + 134, /* GL_CLIP_PLANE4 */ + 135, /* GL_CLIP_PLANE5 */ + 621, /* GL_LIGHT0 */ + 622, /* GL_LIGHT1 */ + 623, /* GL_LIGHT2 */ + 624, /* GL_LIGHT3 */ + 625, /* GL_LIGHT4 */ + 626, /* GL_LIGHT5 */ + 627, /* GL_LIGHT6 */ + 628, /* GL_LIGHT7 */ + 550, /* GL_HINT_BIT */ + 246, /* GL_CONSTANT_COLOR */ + 989, /* GL_ONE_MINUS_CONSTANT_COLOR */ + 241, /* GL_CONSTANT_ALPHA */ + 987, /* GL_ONE_MINUS_CONSTANT_ALPHA */ + 76, /* GL_BLEND_COLOR */ + 510, /* GL_FUNC_ADD */ + 878, /* GL_MIN */ + 791, /* GL_MAX */ + 81, /* GL_BLEND_EQUATION */ + 514, /* GL_FUNC_SUBTRACT */ + 512, /* GL_FUNC_REVERSE_SUBTRACT */ + 249, /* GL_CONVOLUTION_1D */ + 250, /* GL_CONVOLUTION_2D */ + 1327, /* GL_SEPARABLE_2D */ + 253, /* GL_CONVOLUTION_BORDER_MODE */ + 257, /* GL_CONVOLUTION_FILTER_SCALE */ + 255, /* GL_CONVOLUTION_FILTER_BIAS */ + 1226, /* GL_REDUCE */ + 259, /* GL_CONVOLUTION_FORMAT */ + 263, /* GL_CONVOLUTION_WIDTH */ + 261, /* GL_CONVOLUTION_HEIGHT */ + 805, /* GL_MAX_CONVOLUTION_WIDTH */ + 803, /* GL_MAX_CONVOLUTION_HEIGHT */ + 1143, /* GL_POST_CONVOLUTION_RED_SCALE */ + 1139, /* GL_POST_CONVOLUTION_GREEN_SCALE */ + 1134, /* GL_POST_CONVOLUTION_BLUE_SCALE */ + 1130, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ + 1141, /* GL_POST_CONVOLUTION_RED_BIAS */ + 1137, /* GL_POST_CONVOLUTION_GREEN_BIAS */ + 1132, /* GL_POST_CONVOLUTION_BLUE_BIAS */ + 1128, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ + 551, /* GL_HISTOGRAM */ + 1190, /* GL_PROXY_HISTOGRAM */ + 567, /* GL_HISTOGRAM_WIDTH */ + 557, /* GL_HISTOGRAM_FORMAT */ + 563, /* GL_HISTOGRAM_RED_SIZE */ + 559, /* GL_HISTOGRAM_GREEN_SIZE */ + 554, /* GL_HISTOGRAM_BLUE_SIZE */ + 552, /* GL_HISTOGRAM_ALPHA_SIZE */ + 561, /* GL_HISTOGRAM_LUMINANCE_SIZE */ + 565, /* GL_HISTOGRAM_SINK */ + 879, /* GL_MINMAX */ + 881, /* GL_MINMAX_FORMAT */ + 883, /* GL_MINMAX_SINK */ + 1435, /* GL_TABLE_TOO_LARGE_EXT */ + 1643, /* GL_UNSIGNED_BYTE_3_3_2 */ + 1652, /* GL_UNSIGNED_SHORT_4_4_4_4 */ + 1654, /* GL_UNSIGNED_SHORT_5_5_5_1 */ + 1648, /* GL_UNSIGNED_INT_8_8_8_8 */ + 1645, /* GL_UNSIGNED_INT_10_10_10_2 */ + 1101, /* GL_POLYGON_OFFSET_FILL */ + 1100, /* GL_POLYGON_OFFSET_FACTOR */ + 1099, /* GL_POLYGON_OFFSET_BIAS */ + 1246, /* GL_RESCALE_NORMAL */ + 36, /* GL_ALPHA4 */ + 38, /* GL_ALPHA8 */ + 32, /* GL_ALPHA12 */ + 34, /* GL_ALPHA16 */ + 677, /* GL_LUMINANCE4 */ + 683, /* GL_LUMINANCE8 */ + 667, /* GL_LUMINANCE12 */ + 673, /* GL_LUMINANCE16 */ + 678, /* GL_LUMINANCE4_ALPHA4 */ + 681, /* GL_LUMINANCE6_ALPHA2 */ + 684, /* GL_LUMINANCE8_ALPHA8 */ + 670, /* GL_LUMINANCE12_ALPHA4 */ + 668, /* GL_LUMINANCE12_ALPHA12 */ + 674, /* GL_LUMINANCE16_ALPHA16 */ + 591, /* GL_INTENSITY */ + 596, /* GL_INTENSITY4 */ + 598, /* GL_INTENSITY8 */ + 592, /* GL_INTENSITY12 */ + 594, /* GL_INTENSITY16 */ + 1258, /* GL_RGB2_EXT */ + 1259, /* GL_RGB4 */ + 1262, /* GL_RGB5 */ + 1266, /* GL_RGB8 */ + 1250, /* GL_RGB10 */ + 1254, /* GL_RGB12 */ + 1256, /* GL_RGB16 */ + 1273, /* GL_RGBA2 */ + 1275, /* GL_RGBA4 */ + 1263, /* GL_RGB5_A1 */ + 1279, /* GL_RGBA8 */ + 1251, /* GL_RGB10_A2 */ + 1269, /* GL_RGBA12 */ + 1271, /* GL_RGBA16 */ + 1604, /* GL_TEXTURE_RED_SIZE */ + 1576, /* GL_TEXTURE_GREEN_SIZE */ + 1515, /* GL_TEXTURE_BLUE_SIZE */ + 1504, /* GL_TEXTURE_ALPHA_SIZE */ + 1589, /* GL_TEXTURE_LUMINANCE_SIZE */ + 1580, /* GL_TEXTURE_INTENSITY_SIZE */ + 1244, /* GL_REPLACE_EXT */ + 1194, /* GL_PROXY_TEXTURE_1D */ + 1196, /* GL_PROXY_TEXTURE_2D */ + 1608, /* GL_TEXTURE_TOO_LARGE_EXT */ + 1601, /* GL_TEXTURE_PRIORITY */ + 1606, /* GL_TEXTURE_RESIDENT */ + 1507, /* GL_TEXTURE_BINDING_1D */ + 1508, /* GL_TEXTURE_BINDING_2D */ + 1509, /* GL_TEXTURE_BINDING_3D */ + 1025, /* GL_PACK_SKIP_IMAGES */ + 1021, /* GL_PACK_IMAGE_HEIGHT */ + 1637, /* GL_UNPACK_SKIP_IMAGES */ + 1634, /* GL_UNPACK_IMAGE_HEIGHT */ + 1503, /* GL_TEXTURE_3D */ + 1198, /* GL_PROXY_TEXTURE_3D */ + 1563, /* GL_TEXTURE_DEPTH */ + 1611, /* GL_TEXTURE_WRAP_R */ + 792, /* GL_MAX_3D_TEXTURE_SIZE */ + 1667, /* GL_VERTEX_ARRAY */ + 956, /* GL_NORMAL_ARRAY */ + 139, /* GL_COLOR_ARRAY */ + 576, /* GL_INDEX_ARRAY */ + 1542, /* GL_TEXTURE_COORD_ARRAY */ + 414, /* GL_EDGE_FLAG_ARRAY */ + 1672, /* GL_VERTEX_ARRAY_SIZE */ + 1674, /* GL_VERTEX_ARRAY_TYPE */ + 1673, /* GL_VERTEX_ARRAY_STRIDE */ + 961, /* GL_NORMAL_ARRAY_TYPE */ + 960, /* GL_NORMAL_ARRAY_STRIDE */ + 143, /* GL_COLOR_ARRAY_SIZE */ + 145, /* GL_COLOR_ARRAY_TYPE */ + 144, /* GL_COLOR_ARRAY_STRIDE */ + 581, /* GL_INDEX_ARRAY_TYPE */ + 580, /* GL_INDEX_ARRAY_STRIDE */ + 1546, /* GL_TEXTURE_COORD_ARRAY_SIZE */ + 1548, /* GL_TEXTURE_COORD_ARRAY_TYPE */ + 1547, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ + 418, /* GL_EDGE_FLAG_ARRAY_STRIDE */ + 1671, /* GL_VERTEX_ARRAY_POINTER */ + 959, /* GL_NORMAL_ARRAY_POINTER */ + 142, /* GL_COLOR_ARRAY_POINTER */ + 579, /* GL_INDEX_ARRAY_POINTER */ + 1545, /* GL_TEXTURE_COORD_ARRAY_POINTER */ + 417, /* GL_EDGE_FLAG_ARRAY_POINTER */ + 935, /* GL_MULTISAMPLE */ + 1301, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ + 1303, /* GL_SAMPLE_ALPHA_TO_ONE */ + 1308, /* GL_SAMPLE_COVERAGE */ + 1305, /* GL_SAMPLE_BUFFERS */ + 1296, /* GL_SAMPLES */ + 1312, /* GL_SAMPLE_COVERAGE_VALUE */ + 1310, /* GL_SAMPLE_COVERAGE_INVERT */ + 170, /* GL_COLOR_MATRIX */ + 172, /* GL_COLOR_MATRIX_STACK_DEPTH */ + 799, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ + 1126, /* GL_POST_COLOR_MATRIX_RED_SCALE */ + 1122, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ + 1117, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ + 1113, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ + 1124, /* GL_POST_COLOR_MATRIX_RED_BIAS */ + 1120, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ + 1115, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ + 1111, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ + 1525, /* GL_TEXTURE_COLOR_TABLE_SGI */ + 1199, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ + 1527, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ + 80, /* GL_BLEND_DST_RGB */ + 88, /* GL_BLEND_SRC_RGB */ + 79, /* GL_BLEND_DST_ALPHA */ + 87, /* GL_BLEND_SRC_ALPHA */ + 176, /* GL_COLOR_TABLE */ + 1136, /* GL_POST_CONVOLUTION_COLOR_TABLE */ + 1119, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ + 1189, /* GL_PROXY_COLOR_TABLE */ + 1193, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ + 1192, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ + 200, /* GL_COLOR_TABLE_SCALE */ + 180, /* GL_COLOR_TABLE_BIAS */ + 185, /* GL_COLOR_TABLE_FORMAT */ + 202, /* GL_COLOR_TABLE_WIDTH */ + 197, /* GL_COLOR_TABLE_RED_SIZE */ + 188, /* GL_COLOR_TABLE_GREEN_SIZE */ + 182, /* GL_COLOR_TABLE_BLUE_SIZE */ + 177, /* GL_COLOR_TABLE_ALPHA_SIZE */ + 194, /* GL_COLOR_TABLE_LUMINANCE_SIZE */ + 191, /* GL_COLOR_TABLE_INTENSITY_SIZE */ + 71, /* GL_BGR */ + 72, /* GL_BGRA */ + 813, /* GL_MAX_ELEMENTS_VERTICES */ + 812, /* GL_MAX_ELEMENTS_INDICES */ + 1579, /* GL_TEXTURE_INDEX_SIZE_EXT */ + 136, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */ + 1083, /* GL_POINT_SIZE_MIN */ + 1079, /* GL_POINT_SIZE_MAX */ + 1073, /* GL_POINT_FADE_THRESHOLD_SIZE */ + 1069, /* GL_POINT_DISTANCE_ATTENUATION */ + 118, /* GL_CLAMP_TO_BORDER */ + 121, /* GL_CLAMP_TO_EDGE */ + 1600, /* GL_TEXTURE_MIN_LOD */ + 1598, /* GL_TEXTURE_MAX_LOD */ + 1506, /* GL_TEXTURE_BASE_LEVEL */ + 1597, /* GL_TEXTURE_MAX_LEVEL */ + 570, /* GL_IGNORE_BORDER_HP */ + 245, /* GL_CONSTANT_BORDER_HP */ + 1245, /* GL_REPLICATE_BORDER_HP */ + 251, /* GL_CONVOLUTION_BORDER_COLOR */ + 984, /* GL_OCCLUSION_TEST_HP */ + 985, /* GL_OCCLUSION_TEST_RESULT_HP */ + 639, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ + 1519, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ + 1521, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ + 1523, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ + 1524, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + 1522, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ + 1520, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ + 795, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ + 796, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + 1146, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ + 1148, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ + 1145, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ + 1147, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ + 1587, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ + 1588, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ + 1586, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ + 516, /* GL_GENERATE_MIPMAP */ + 517, /* GL_GENERATE_MIPMAP_HINT */ + 480, /* GL_FOG_OFFSET_SGIX */ + 481, /* GL_FOG_OFFSET_VALUE_SGIX */ + 1533, /* GL_TEXTURE_COMPARE_SGIX */ + 1532, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ + 1583, /* GL_TEXTURE_LEQUAL_R_SGIX */ + 1575, /* GL_TEXTURE_GEQUAL_R_SGIX */ + 322, /* GL_DEPTH_COMPONENT16 */ + 325, /* GL_DEPTH_COMPONENT24 */ + 328, /* GL_DEPTH_COMPONENT32 */ + 273, /* GL_CULL_VERTEX_EXT */ + 275, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ + 274, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ + 1728, /* GL_WRAP_BORDER_SUN */ + 1526, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ + 632, /* GL_LIGHT_MODEL_COLOR_CONTROL */ + 1340, /* GL_SINGLE_COLOR */ + 1328, /* GL_SEPARATE_SPECULAR_COLOR */ + 1337, /* GL_SHARED_TEXTURE_PALETTE_EXT */ + 1642, /* GL_UNSIGNED_BYTE_2_3_3_REV */ + 1655, /* GL_UNSIGNED_SHORT_5_6_5 */ + 1656, /* GL_UNSIGNED_SHORT_5_6_5_REV */ + 1653, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ + 1651, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ + 1649, /* GL_UNSIGNED_INT_8_8_8_8_REV */ + 1647, /* GL_UNSIGNED_INT_2_10_10_10_REV */ + 1595, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ + 1596, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ + 1594, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ + 886, /* GL_MIRRORED_REPEAT */ + 1284, /* GL_RGB_S3TC */ + 1261, /* GL_RGB4_S3TC */ + 1283, /* GL_RGBA_S3TC */ + 1278, /* GL_RGBA4_S3TC */ + 1281, /* GL_RGBA_DXT5_S3TC */ + 1276, /* GL_RGBA4_DXT5_S3TC */ + 238, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */ + 233, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */ + 234, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */ + 235, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */ + 947, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ + 946, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ + 640, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ + 467, /* GL_FOG_COORDINATE_SOURCE */ + 459, /* GL_FOG_COORD */ + 483, /* GL_FRAGMENT_DEPTH */ + 279, /* GL_CURRENT_FOG_COORD */ + 466, /* GL_FOG_COORDINATE_ARRAY_TYPE */ + 465, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ + 464, /* GL_FOG_COORDINATE_ARRAY_POINTER */ + 461, /* GL_FOG_COORDINATE_ARRAY */ + 174, /* GL_COLOR_SUM */ + 298, /* GL_CURRENT_SECONDARY_COLOR */ + 1321, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ + 1323, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ + 1322, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ + 1320, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ + 1317, /* GL_SECONDARY_COLOR_ARRAY */ + 526, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */ + 28, /* GL_ALIASED_POINT_SIZE_RANGE */ + 27, /* GL_ALIASED_LINE_WIDTH_RANGE */ + 1437, /* GL_TEXTURE0 */ + 1439, /* GL_TEXTURE1 */ + 1461, /* GL_TEXTURE2 */ + 1483, /* GL_TEXTURE3 */ + 1489, /* GL_TEXTURE4 */ + 1491, /* GL_TEXTURE5 */ + 1493, /* GL_TEXTURE6 */ + 1495, /* GL_TEXTURE7 */ + 1497, /* GL_TEXTURE8 */ + 1499, /* GL_TEXTURE9 */ + 1440, /* GL_TEXTURE10 */ + 1442, /* GL_TEXTURE11 */ + 1444, /* GL_TEXTURE12 */ + 1446, /* GL_TEXTURE13 */ + 1448, /* GL_TEXTURE14 */ + 1450, /* GL_TEXTURE15 */ + 1452, /* GL_TEXTURE16 */ + 1454, /* GL_TEXTURE17 */ + 1456, /* GL_TEXTURE18 */ + 1458, /* GL_TEXTURE19 */ + 1462, /* GL_TEXTURE20 */ + 1464, /* GL_TEXTURE21 */ + 1466, /* GL_TEXTURE22 */ + 1468, /* GL_TEXTURE23 */ + 1470, /* GL_TEXTURE24 */ + 1472, /* GL_TEXTURE25 */ + 1474, /* GL_TEXTURE26 */ + 1476, /* GL_TEXTURE27 */ + 1478, /* GL_TEXTURE28 */ + 1480, /* GL_TEXTURE29 */ + 1484, /* GL_TEXTURE30 */ + 1486, /* GL_TEXTURE31 */ + 18, /* GL_ACTIVE_TEXTURE */ + 124, /* GL_CLIENT_ACTIVE_TEXTURE */ + 864, /* GL_MAX_TEXTURE_UNITS */ + 1621, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ + 1624, /* GL_TRANSPOSE_PROJECTION_MATRIX */ + 1626, /* GL_TRANSPOSE_TEXTURE_MATRIX */ + 1618, /* GL_TRANSPOSE_COLOR_MATRIX */ + 1425, /* GL_SUBTRACT */ + 853, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ + 221, /* GL_COMPRESSED_ALPHA */ + 225, /* GL_COMPRESSED_LUMINANCE */ + 226, /* GL_COMPRESSED_LUMINANCE_ALPHA */ + 223, /* GL_COMPRESSED_INTENSITY */ + 229, /* GL_COMPRESSED_RGB */ + 230, /* GL_COMPRESSED_RGBA */ + 1540, /* GL_TEXTURE_COMPRESSION_HINT */ + 1602, /* GL_TEXTURE_RECTANGLE_ARB */ + 1512, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ + 1202, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ + 851, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ + 334, /* GL_DEPTH_STENCIL_NV */ + 1646, /* GL_UNSIGNED_INT_24_8_NV */ + 860, /* GL_MAX_TEXTURE_LOD_BIAS */ + 1593, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ + 861, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ + 1569, /* GL_TEXTURE_FILTER_CONTROL */ + 1584, /* GL_TEXTURE_LOD_BIAS */ + 207, /* GL_COMBINE4 */ + 854, /* GL_MAX_SHININESS_NV */ + 855, /* GL_MAX_SPOT_EXPONENT_NV */ + 574, /* GL_INCR_WRAP */ + 309, /* GL_DECR_WRAP */ + 906, /* GL_MODELVIEW1_ARB */ + 962, /* GL_NORMAL_MAP */ + 1231, /* GL_REFLECTION_MAP */ + 1549, /* GL_TEXTURE_CUBE_MAP */ + 1510, /* GL_TEXTURE_BINDING_CUBE_MAP */ + 1557, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ + 1551, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ + 1559, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ + 1553, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ + 1561, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ + 1555, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ + 1200, /* GL_PROXY_TEXTURE_CUBE_MAP */ + 807, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ + 941, /* GL_MULTISAMPLE_FILTER_HINT_NV */ + 475, /* GL_FOG_DISTANCE_MODE_NV */ + 434, /* GL_EYE_RADIAL_NV */ + 433, /* GL_EYE_PLANE_ABSOLUTE_NV */ + 206, /* GL_COMBINE */ + 213, /* GL_COMBINE_RGB */ + 208, /* GL_COMBINE_ALPHA */ + 1285, /* GL_RGB_SCALE */ + 24, /* GL_ADD_SIGNED */ + 601, /* GL_INTERPOLATE */ + 240, /* GL_CONSTANT */ + 1152, /* GL_PRIMARY_COLOR */ + 1149, /* GL_PREVIOUS */ + 1351, /* GL_SOURCE0_RGB */ + 1357, /* GL_SOURCE1_RGB */ + 1363, /* GL_SOURCE2_RGB */ + 1367, /* GL_SOURCE3_RGB_NV */ + 1348, /* GL_SOURCE0_ALPHA */ + 1354, /* GL_SOURCE1_ALPHA */ + 1360, /* GL_SOURCE2_ALPHA */ + 1366, /* GL_SOURCE3_ALPHA_NV */ + 998, /* GL_OPERAND0_RGB */ + 1004, /* GL_OPERAND1_RGB */ + 1010, /* GL_OPERAND2_RGB */ + 1014, /* GL_OPERAND3_RGB_NV */ + 995, /* GL_OPERAND0_ALPHA */ + 1001, /* GL_OPERAND1_ALPHA */ + 1007, /* GL_OPERAND2_ALPHA */ + 1013, /* GL_OPERAND3_ALPHA_NV */ + 1668, /* GL_VERTEX_ARRAY_BINDING_APPLE */ + 1732, /* GL_YCBCR_422_APPLE */ + 1657, /* GL_UNSIGNED_SHORT_8_8_APPLE */ + 1659, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ + 1342, /* GL_SLICE_ACCUM_SUN */ + 1207, /* GL_QUAD_MESH_SUN */ + 1630, /* GL_TRIANGLE_MESH_SUN */ + 1706, /* GL_VERTEX_PROGRAM_ARB */ + 1717, /* GL_VERTEX_STATE_PROGRAM_NV */ + 1693, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ + 1699, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ + 1701, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ + 1703, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ + 300, /* GL_CURRENT_VERTEX_ATTRIB */ + 1165, /* GL_PROGRAM_LENGTH_ARB */ + 1179, /* GL_PROGRAM_STRING_ARB */ + 928, /* GL_MODELVIEW_PROJECTION_NV */ + 569, /* GL_IDENTITY_NV */ + 614, /* GL_INVERSE_NV */ + 1623, /* GL_TRANSPOSE_NV */ + 615, /* GL_INVERSE_TRANSPOSE_NV */ + 837, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ + 836, /* GL_MAX_PROGRAM_MATRICES_ARB */ + 745, /* GL_MATRIX0_NV */ + 757, /* GL_MATRIX1_NV */ + 769, /* GL_MATRIX2_NV */ + 773, /* GL_MATRIX3_NV */ + 775, /* GL_MATRIX4_NV */ + 777, /* GL_MATRIX5_NV */ + 779, /* GL_MATRIX6_NV */ + 781, /* GL_MATRIX7_NV */ + 285, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ + 282, /* GL_CURRENT_MATRIX_ARB */ + 1709, /* GL_VERTEX_PROGRAM_POINT_SIZE */ + 1712, /* GL_VERTEX_PROGRAM_TWO_SIDE */ + 1177, /* GL_PROGRAM_PARAMETER_NV */ + 1697, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ + 1181, /* GL_PROGRAM_TARGET_NV */ + 1178, /* GL_PROGRAM_RESIDENT_NV */ + 1615, /* GL_TRACK_MATRIX_NV */ + 1616, /* GL_TRACK_MATRIX_TRANSFORM_NV */ + 1707, /* GL_VERTEX_PROGRAM_BINDING_NV */ + 1159, /* GL_PROGRAM_ERROR_POSITION_ARB */ + 319, /* GL_DEPTH_CLAMP_NV */ + 1675, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ + 1682, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ + 1683, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ + 1684, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ + 1685, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ + 1686, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ + 1687, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ + 1688, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ + 1689, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ + 1690, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ + 1676, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ + 1677, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ + 1678, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ + 1679, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ + 1680, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ + 1681, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ + 699, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ + 706, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ + 707, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ + 708, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ + 709, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ + 710, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ + 711, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ + 712, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ + 713, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ + 714, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ + 700, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ + 701, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ + 702, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ + 703, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ + 704, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ + 705, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ + 726, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ + 733, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ + 734, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ + 735, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ + 736, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ + 737, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ + 738, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ + 1158, /* GL_PROGRAM_BINDING_ARB */ + 740, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ + 741, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ + 727, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ + 728, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ + 729, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ + 730, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ + 731, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ + 732, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ + 1538, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ + 1535, /* GL_TEXTURE_COMPRESSED */ + 967, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ + 239, /* GL_COMPRESSED_TEXTURE_FORMATS */ + 876, /* GL_MAX_VERTEX_UNITS_ARB */ + 22, /* GL_ACTIVE_VERTEX_UNITS_ARB */ + 1727, /* GL_WEIGHT_SUM_UNITY_ARB */ + 1705, /* GL_VERTEX_BLEND_ARB */ + 302, /* GL_CURRENT_WEIGHT_ARB */ + 1726, /* GL_WEIGHT_ARRAY_TYPE_ARB */ + 1725, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ + 1724, /* GL_WEIGHT_ARRAY_SIZE_ARB */ + 1723, /* GL_WEIGHT_ARRAY_POINTER_ARB */ + 1720, /* GL_WEIGHT_ARRAY_ARB */ + 345, /* GL_DOT3_RGB */ + 346, /* GL_DOT3_RGBA */ + 237, /* GL_COMPRESSED_RGB_FXT1_3DFX */ + 232, /* GL_COMPRESSED_RGBA_FXT1_3DFX */ + 936, /* GL_MULTISAMPLE_3DFX */ + 1306, /* GL_SAMPLE_BUFFERS_3DFX */ + 1297, /* GL_SAMPLES_3DFX */ + 917, /* GL_MODELVIEW2_ARB */ + 920, /* GL_MODELVIEW3_ARB */ + 921, /* GL_MODELVIEW4_ARB */ + 922, /* GL_MODELVIEW5_ARB */ + 923, /* GL_MODELVIEW6_ARB */ + 924, /* GL_MODELVIEW7_ARB */ + 925, /* GL_MODELVIEW8_ARB */ + 926, /* GL_MODELVIEW9_ARB */ + 896, /* GL_MODELVIEW10_ARB */ + 897, /* GL_MODELVIEW11_ARB */ + 898, /* GL_MODELVIEW12_ARB */ + 899, /* GL_MODELVIEW13_ARB */ + 900, /* GL_MODELVIEW14_ARB */ + 901, /* GL_MODELVIEW15_ARB */ + 902, /* GL_MODELVIEW16_ARB */ + 903, /* GL_MODELVIEW17_ARB */ + 904, /* GL_MODELVIEW18_ARB */ + 905, /* GL_MODELVIEW19_ARB */ + 907, /* GL_MODELVIEW20_ARB */ + 908, /* GL_MODELVIEW21_ARB */ + 909, /* GL_MODELVIEW22_ARB */ + 910, /* GL_MODELVIEW23_ARB */ + 911, /* GL_MODELVIEW24_ARB */ + 912, /* GL_MODELVIEW25_ARB */ + 913, /* GL_MODELVIEW26_ARB */ + 914, /* GL_MODELVIEW27_ARB */ + 915, /* GL_MODELVIEW28_ARB */ + 916, /* GL_MODELVIEW29_ARB */ + 918, /* GL_MODELVIEW30_ARB */ + 919, /* GL_MODELVIEW31_ARB */ + 350, /* GL_DOT3_RGB_EXT */ + 348, /* GL_DOT3_RGBA_EXT */ + 890, /* GL_MIRROR_CLAMP_EXT */ + 893, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ + 931, /* GL_MODULATE_ADD_ATI */ + 932, /* GL_MODULATE_SIGNED_ADD_ATI */ + 933, /* GL_MODULATE_SUBTRACT_ATI */ + 1733, /* GL_YCBCR_MESA */ + 1022, /* GL_PACK_INVERT_MESA */ + 305, /* GL_DEBUG_OBJECT_MESA */ + 306, /* GL_DEBUG_PRINT_MESA */ + 304, /* GL_DEBUG_ASSERT_MESA */ + 107, /* GL_BUFFER_SIZE */ + 109, /* GL_BUFFER_USAGE */ + 1393, /* GL_STENCIL_BACK_FUNC */ + 1392, /* GL_STENCIL_BACK_FAIL */ + 1394, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ + 1395, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ + 484, /* GL_FRAGMENT_PROGRAM_ARB */ + 1156, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ + 1184, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ + 1183, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ + 1168, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + 1174, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + 1173, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + 826, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ + 849, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ + 848, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ + 839, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + 845, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + 844, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + 809, /* GL_MAX_DRAW_BUFFERS */ + 354, /* GL_DRAW_BUFFER0 */ + 357, /* GL_DRAW_BUFFER1 */ + 378, /* GL_DRAW_BUFFER2 */ + 381, /* GL_DRAW_BUFFER3 */ + 384, /* GL_DRAW_BUFFER4 */ + 387, /* GL_DRAW_BUFFER5 */ + 390, /* GL_DRAW_BUFFER6 */ + 393, /* GL_DRAW_BUFFER7 */ + 396, /* GL_DRAW_BUFFER8 */ + 399, /* GL_DRAW_BUFFER9 */ + 358, /* GL_DRAW_BUFFER10 */ + 361, /* GL_DRAW_BUFFER11 */ + 364, /* GL_DRAW_BUFFER12 */ + 367, /* GL_DRAW_BUFFER13 */ + 370, /* GL_DRAW_BUFFER14 */ + 373, /* GL_DRAW_BUFFER15 */ + 82, /* GL_BLEND_EQUATION_ALPHA */ + 790, /* GL_MATRIX_PALETTE_ARB */ + 820, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ + 823, /* GL_MAX_PALETTE_MATRICES_ARB */ + 288, /* GL_CURRENT_PALETTE_MATRIX_ARB */ + 784, /* GL_MATRIX_INDEX_ARRAY_ARB */ + 283, /* GL_CURRENT_MATRIX_INDEX_ARB */ + 786, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ + 788, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ + 787, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ + 785, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ + 1564, /* GL_TEXTURE_DEPTH_SIZE */ + 338, /* GL_DEPTH_TEXTURE_MODE */ + 1530, /* GL_TEXTURE_COMPARE_MODE */ + 1528, /* GL_TEXTURE_COMPARE_FUNC */ + 216, /* GL_COMPARE_R_TO_TEXTURE */ + 1090, /* GL_POINT_SPRITE */ + 265, /* GL_COORD_REPLACE */ + 1094, /* GL_POINT_SPRITE_R_MODE_NV */ + 1209, /* GL_QUERY_COUNTER_BITS */ + 290, /* GL_CURRENT_QUERY */ + 1211, /* GL_QUERY_RESULT */ + 1213, /* GL_QUERY_RESULT_AVAILABLE */ + 870, /* GL_MAX_VERTEX_ATTRIBS */ + 1695, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ + 336, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ + 335, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ + 856, /* GL_MAX_TEXTURE_COORDS */ + 858, /* GL_MAX_TEXTURE_IMAGE_UNITS */ + 1161, /* GL_PROGRAM_ERROR_STRING_ARB */ + 1163, /* GL_PROGRAM_FORMAT_ASCII_ARB */ + 1162, /* GL_PROGRAM_FORMAT_ARB */ + 1609, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ + 317, /* GL_DEPTH_BOUNDS_TEST_EXT */ + 316, /* GL_DEPTH_BOUNDS_EXT */ + 52, /* GL_ARRAY_BUFFER */ + 419, /* GL_ELEMENT_ARRAY_BUFFER */ + 54, /* GL_ARRAY_BUFFER_BINDING */ + 421, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ + 1669, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ + 957, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ + 140, /* GL_COLOR_ARRAY_BUFFER_BINDING */ + 577, /* GL_INDEX_ARRAY_BUFFER_BINDING */ + 1543, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ + 415, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ + 1318, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ + 462, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ + 1721, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ + 1691, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ + 1164, /* GL_PROGRAM_INSTRUCTIONS_ARB */ + 832, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ + 1170, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + 841, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + 1182, /* GL_PROGRAM_TEMPORARIES_ARB */ + 847, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ + 1172, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ + 843, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ + 1176, /* GL_PROGRAM_PARAMETERS_ARB */ + 846, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ + 1171, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ + 842, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ + 1157, /* GL_PROGRAM_ATTRIBS_ARB */ + 827, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ + 1169, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ + 840, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ + 1155, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ + 825, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ + 1167, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + 838, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + 833, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ + 829, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ + 1185, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ + 1620, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ + 1221, /* GL_READ_ONLY */ + 1729, /* GL_WRITE_ONLY */ + 1223, /* GL_READ_WRITE */ + 101, /* GL_BUFFER_ACCESS */ + 103, /* GL_BUFFER_MAPPED */ + 105, /* GL_BUFFER_MAP_POINTER */ + 1614, /* GL_TIME_ELAPSED_EXT */ + 744, /* GL_MATRIX0_ARB */ + 756, /* GL_MATRIX1_ARB */ + 768, /* GL_MATRIX2_ARB */ + 772, /* GL_MATRIX3_ARB */ + 774, /* GL_MATRIX4_ARB */ + 776, /* GL_MATRIX5_ARB */ + 778, /* GL_MATRIX6_ARB */ + 780, /* GL_MATRIX7_ARB */ + 782, /* GL_MATRIX8_ARB */ + 783, /* GL_MATRIX9_ARB */ + 746, /* GL_MATRIX10_ARB */ + 747, /* GL_MATRIX11_ARB */ + 748, /* GL_MATRIX12_ARB */ + 749, /* GL_MATRIX13_ARB */ + 750, /* GL_MATRIX14_ARB */ + 751, /* GL_MATRIX15_ARB */ + 752, /* GL_MATRIX16_ARB */ + 753, /* GL_MATRIX17_ARB */ + 754, /* GL_MATRIX18_ARB */ + 755, /* GL_MATRIX19_ARB */ + 758, /* GL_MATRIX20_ARB */ + 759, /* GL_MATRIX21_ARB */ + 760, /* GL_MATRIX22_ARB */ + 761, /* GL_MATRIX23_ARB */ + 762, /* GL_MATRIX24_ARB */ + 763, /* GL_MATRIX25_ARB */ + 764, /* GL_MATRIX26_ARB */ + 765, /* GL_MATRIX27_ARB */ + 766, /* GL_MATRIX28_ARB */ + 767, /* GL_MATRIX29_ARB */ + 770, /* GL_MATRIX30_ARB */ + 771, /* GL_MATRIX31_ARB */ + 1420, /* GL_STREAM_DRAW */ + 1422, /* GL_STREAM_READ */ + 1418, /* GL_STREAM_COPY */ + 1386, /* GL_STATIC_DRAW */ + 1388, /* GL_STATIC_READ */ + 1384, /* GL_STATIC_COPY */ + 409, /* GL_DYNAMIC_DRAW */ + 411, /* GL_DYNAMIC_READ */ + 407, /* GL_DYNAMIC_COPY */ + 533, /* GL_GL_PIXEL_PACK_BUFFER */ + 535, /* GL_GL_PIXEL_UNPACK_BUFFER */ + 534, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */ + 536, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */ + 830, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ + 828, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ + 831, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ + 835, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ + 834, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ + 1414, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ + 17, /* GL_ACTIVE_STENCIL_FACE_EXT */ + 891, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ + 1299, /* GL_SAMPLES_PASSED */ + 485, /* GL_FRAGMENT_SHADER */ + 1715, /* GL_VERTEX_SHADER */ + 1175, /* GL_PROGRAM_OBJECT_ARB */ + 1331, /* GL_SHADER_OBJECT_ARB */ + 816, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ + 874, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ + 868, /* GL_MAX_VARYING_FLOATS */ + 872, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ + 801, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ + 982, /* GL_OBJECT_TYPE_ARB */ + 1333, /* GL_SHADER_TYPE */ + 450, /* GL_FLOAT_VEC2 */ + 452, /* GL_FLOAT_VEC3 */ + 454, /* GL_FLOAT_VEC4 */ + 604, /* GL_INT_VEC2 */ + 606, /* GL_INT_VEC3 */ + 608, /* GL_INT_VEC4 */ + 93, /* GL_BOOL */ + 95, /* GL_BOOL_VEC2 */ + 97, /* GL_BOOL_VEC3 */ + 99, /* GL_BOOL_VEC4 */ + 444, /* GL_FLOAT_MAT2 */ + 446, /* GL_FLOAT_MAT3 */ + 448, /* GL_FLOAT_MAT4 */ + 1290, /* GL_SAMPLER_1D */ + 1292, /* GL_SAMPLER_2D */ + 1294, /* GL_SAMPLER_3D */ + 1295, /* GL_SAMPLER_CUBE */ + 1291, /* GL_SAMPLER_1D_SHADOW */ + 1293, /* GL_SAMPLER_2D_SHADOW */ + 527, /* GL_GL_FLOAT_MAT2x3 */ + 528, /* GL_GL_FLOAT_MAT2x4 */ + 529, /* GL_GL_FLOAT_MAT3x2 */ + 530, /* GL_GL_FLOAT_MAT3x4 */ + 531, /* GL_GL_FLOAT_MAT4x2 */ + 532, /* GL_GL_FLOAT_MAT4x3 */ + 311, /* GL_DELETE_STATUS */ + 220, /* GL_COMPILE_STATUS */ + 657, /* GL_LINK_STATUS */ + 1664, /* GL_VALIDATE_STATUS */ + 589, /* GL_INFO_LOG_LENGTH */ + 56, /* GL_ATTACHED_SHADERS */ + 20, /* GL_ACTIVE_UNIFORMS */ + 21, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */ + 1332, /* GL_SHADER_SOURCE_LENGTH */ + 15, /* GL_ACTIVE_ATTRIBUTES */ + 16, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */ + 487, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ + 1335, /* GL_SHADING_LANGUAGE_VERSION */ + 289, /* GL_CURRENT_PROGRAM */ + 1031, /* GL_PALETTE4_RGB8_OES */ + 1033, /* GL_PALETTE4_RGBA8_OES */ + 1029, /* GL_PALETTE4_R5_G6_B5_OES */ + 1032, /* GL_PALETTE4_RGBA4_OES */ + 1030, /* GL_PALETTE4_RGB5_A1_OES */ + 1036, /* GL_PALETTE8_RGB8_OES */ + 1038, /* GL_PALETTE8_RGBA8_OES */ + 1034, /* GL_PALETTE8_R5_G6_B5_OES */ + 1037, /* GL_PALETTE8_RGBA4_OES */ + 1035, /* GL_PALETTE8_RGB5_A1_OES */ + 572, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ + 571, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ + 541, /* GL_GL_SRGB */ + 542, /* GL_GL_SRGB8 */ + 544, /* GL_GL_SRGB_ALPHA */ + 543, /* GL_GL_SRGB8_ALPHA8 */ + 540, /* GL_GL_SLUMINANCE_ALPHA */ + 539, /* GL_GL_SLUMINANCE8_ALPHA8 */ + 537, /* GL_GL_SLUMINANCE */ + 538, /* GL_GL_SLUMINANCE8 */ + 524, /* GL_GL_COMPRESSED_SRGB */ + 525, /* GL_GL_COMPRESSED_SRGB_ALPHA */ + 522, /* GL_GL_COMPRESSED_SLUMINANCE */ + 523, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */ + 1092, /* GL_POINT_SPRITE_COORD_ORIGIN */ + 665, /* GL_LOWER_LEFT */ + 1661, /* GL_UPPER_LEFT */ + 1396, /* GL_STENCIL_BACK_REF */ + 1397, /* GL_STENCIL_BACK_VALUE_MASK */ + 1398, /* GL_STENCIL_BACK_WRITEMASK */ + 402, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ + 1235, /* GL_RENDERBUFFER_BINDING_EXT */ + 1220, /* GL_READ_FRAMEBUFFER_EXT */ + 403, /* GL_DRAW_FRAMEBUFFER_EXT */ + 1219, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ + 489, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */ + 488, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */ + 492, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */ + 491, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */ + 490, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */ + 494, /* GL_FRAMEBUFFER_COMPLETE_EXT */ + 496, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */ + 501, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */ + 499, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ + 497, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ + 500, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ + 498, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ + 502, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ + 504, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */ + 503, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ + 798, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ + 146, /* GL_COLOR_ATTACHMENT0_EXT */ + 153, /* GL_COLOR_ATTACHMENT1_EXT */ + 154, /* GL_COLOR_ATTACHMENT2_EXT */ + 155, /* GL_COLOR_ATTACHMENT3_EXT */ + 156, /* GL_COLOR_ATTACHMENT4_EXT */ + 157, /* GL_COLOR_ATTACHMENT5_EXT */ + 158, /* GL_COLOR_ATTACHMENT6_EXT */ + 159, /* GL_COLOR_ATTACHMENT7_EXT */ + 160, /* GL_COLOR_ATTACHMENT8_EXT */ + 161, /* GL_COLOR_ATTACHMENT9_EXT */ + 147, /* GL_COLOR_ATTACHMENT10_EXT */ + 148, /* GL_COLOR_ATTACHMENT11_EXT */ + 149, /* GL_COLOR_ATTACHMENT12_EXT */ + 150, /* GL_COLOR_ATTACHMENT13_EXT */ + 151, /* GL_COLOR_ATTACHMENT14_EXT */ + 152, /* GL_COLOR_ATTACHMENT15_EXT */ + 313, /* GL_DEPTH_ATTACHMENT_EXT */ + 1391, /* GL_STENCIL_ATTACHMENT_EXT */ + 495, /* GL_FRAMEBUFFER_EXT */ + 1236, /* GL_RENDERBUFFER_EXT */ + 1239, /* GL_RENDERBUFFER_WIDTH_EXT */ + 1237, /* GL_RENDERBUFFER_HEIGHT_EXT */ + 1238, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */ + 1409, /* GL_STENCIL_INDEX_EXT */ + 1406, /* GL_STENCIL_INDEX1_EXT */ + 1407, /* GL_STENCIL_INDEX4_EXT */ + 1408, /* GL_STENCIL_INDEX8_EXT */ + 1405, /* GL_STENCIL_INDEX16_EXT */ + 427, /* GL_EVAL_BIT */ + 1217, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ + 659, /* GL_LIST_BIT */ + 1514, /* GL_TEXTURE_BIT */ + 1314, /* GL_SCISSOR_BIT */ + 29, /* GL_ALL_ATTRIB_BITS */ + 938, /* GL_MULTISAMPLE_BIT */ }; #define Elements(x) sizeof(x)/sizeof(*x) typedef int (*cfunc)(const void *, const void *); -static enum_elt **index1 = 0; -static int sorted = 0; - -static int compar_name( const enum_elt *a, const enum_elt *b ) -{ - return _mesa_strcmp(a->c, b->c); -} - - -/* note the extra level of indirection +/** + * Compare a key name to an element in the \c all_enums array. + * + * \c bsearch always passes the key as the first parameter and the pointer + * to the array element as the second parameter. We can elimiate some + * extra work by taking advantage of that fact. + * + * \param a Pointer to the desired enum name. + * \param b Pointer to an element of the \c all_enums array. */ -static int compar_nr( const enum_elt **a, const enum_elt **b ) +static int compar_name( const char *a, const enum_elt *b ) { - return (*a)->n - (*b)->n; + return _mesa_strcmp( a, & enum_string_table[ b->offset ] ); } - -static void sort_enums( void ) +/** + * Compare a key enum value to an element in the \c all_enums array. + * + * \c bsearch always passes the key as the first parameter and the pointer + * to the array element as the second parameter. We can elimiate some + * extra work by taking advantage of that fact. + * + * \param a Pointer to the desired enum name. + * \param b Pointer to an index into the \c all_enums array. + */ +static int compar_nr( const int *a, const unsigned *b ) { - GLuint i; - index1 = (enum_elt **)MALLOC( Elements(all_enums) * sizeof(enum_elt *) ); - sorted = 1; - - if (!index1) - return; /* what else can we do? */ - - qsort( all_enums, Elements(all_enums), sizeof(*all_enums), - (cfunc) compar_name ); - - for (i = 0 ; i < Elements(all_enums) ; i++) - index1[i] = &all_enums[i]; - - qsort( index1, Elements(all_enums), sizeof(*index1), (cfunc) compar_nr ); -} - - - -int _mesa_lookup_enum_by_name( const char *symbol ) -{ - enum_elt tmp; - enum_elt *e; - - if (!sorted) - sort_enums(); - - if (!symbol) - return 0; - - tmp.c = symbol; - e = (enum_elt *)bsearch( &tmp, all_enums, Elements(all_enums), - sizeof(*all_enums), (cfunc) compar_name ); - - return e ? e->n : -1; + return a[0] - all_enums[*b].n; } @@ -991,23 +4835,31 @@ static char token_tmp[20]; const char *_mesa_lookup_enum_by_nr( int nr ) { - enum_elt tmp, *e, **f; + unsigned * i; - if (!sorted) - sort_enums(); + i = (unsigned *)bsearch( & nr, reduced_enums, Elements(reduced_enums), + sizeof(reduced_enums[0]), (cfunc) compar_nr ); - tmp.n = nr; - e = &tmp; - - f = (enum_elt **)bsearch( &e, index1, Elements(all_enums), - sizeof(*index1), (cfunc) compar_nr ); - - if (f) { - return (*f)->c; + if ( i != NULL ) { + return & enum_string_table[ all_enums[ *i ].offset ]; } else { - /* this isn't re-entrant safe, no big deal here */ + /* this is not re-entrant safe, no big deal here */ _mesa_sprintf(token_tmp, "0x%x", nr); return token_tmp; } } + +int _mesa_lookup_enum_by_name( const char *symbol ) +{ + enum_elt * f = NULL; + + if ( symbol != NULL ) { + f = (enum_elt *)bsearch( symbol, all_enums, Elements(all_enums), + sizeof( enum_elt ), (cfunc) compar_name ); + } + + return (f != NULL) ? f->n : -1; +} + + diff --git a/src/kits/opengl/mesa/main/enums.h b/src/kits/opengl/mesa/main/enums.h index 7e8d4ee94f..23a4767f35 100644 --- a/src/kits/opengl/mesa/main/enums.h +++ b/src/kits/opengl/mesa/main/enums.h @@ -10,9 +10,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 6.5.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,7 +31,7 @@ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* $XFree86: xc/extras/Mesa/src/mesa/main/enums.h,v 1.2 2004/06/23 19:40:14 tsi Exp $ */ + #ifndef _ENUMS_H_ #define _ENUMS_H_ diff --git a/src/kits/opengl/mesa/main/execmem.c b/src/kits/opengl/mesa/main/execmem.c new file mode 100644 index 0000000000..b7cbc818c6 --- /dev/null +++ b/src/kits/opengl/mesa/main/execmem.c @@ -0,0 +1,133 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * \file exemem.c + * Functions for allocating executable memory. + * + * \author Keith Whitwell + */ + + +#include "imports.h" +#include "glthread.h" + + + +#if defined(__linux__) && !defined(XFree86Server) + +/* + * Allocate a large block of memory which can hold code then dole it out + * in pieces by means of the generic memory manager code. +*/ + +#include +#include +#include "mm.h" + +#define EXEC_HEAP_SIZE (10*1024*1024) + +_glthread_DECLARE_STATIC_MUTEX(exec_mutex); + +static struct mem_block *exec_heap = NULL; +static unsigned char *exec_mem = NULL; + + +static void +init_heap(void) +{ + if (!exec_heap) + exec_heap = mmInit( 0, EXEC_HEAP_SIZE ); + + if (!exec_mem) + exec_mem = (unsigned char *) mmap(0, EXEC_HEAP_SIZE, + PROT_EXEC | PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); +} + + +void * +_mesa_exec_malloc(GLuint size) +{ + struct mem_block *block = NULL; + void *addr = NULL; + + _glthread_LOCK_MUTEX(exec_mutex); + + init_heap(); + + if (exec_heap) { + size = (size + 31) & ~31; + block = mmAllocMem( exec_heap, size, 32, 0 ); + } + + if (block) + addr = exec_mem + block->ofs; + else + _mesa_printf("_mesa_exec_malloc failed\n"); + + _glthread_UNLOCK_MUTEX(exec_mutex); + + return addr; +} + + +void +_mesa_exec_free(void *addr) +{ + _glthread_LOCK_MUTEX(exec_mutex); + + if (exec_heap) { + struct mem_block *block = mmFindBlock(exec_heap, (unsigned char *)addr - exec_mem); + + if (block) + mmFreeMem(block); + } + + _glthread_UNLOCK_MUTEX(exec_mutex); +} + + +#else + +/* + * Just use regular memory. + */ + +void * +_mesa_exec_malloc(GLuint size) +{ + return _mesa_malloc( size ); +} + + +void +_mesa_exec_free(void *addr) +{ + _mesa_free(addr); +} + + +#endif diff --git a/src/kits/opengl/mesa/main/extensions.c b/src/kits/opengl/mesa/main/extensions.c index 43924622ff..135323f9c1 100644 --- a/src/kits/opengl/mesa/main/extensions.c +++ b/src/kits/opengl/mesa/main/extensions.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,7 +31,7 @@ #include "mtypes.h" -#define F(x) (int)(unsigned long)&(((struct gl_extensions *)0)->x) +#define F(x) (int)(uintptr_t)&(((struct gl_extensions *)0)->x) #define ON GL_TRUE #define OFF GL_FALSE @@ -48,7 +48,7 @@ static const struct { { OFF, "GL_ARB_draw_buffers", F(ARB_draw_buffers) }, { OFF, "GL_ARB_fragment_program", F(ARB_fragment_program) }, { OFF, "GL_ARB_fragment_shader", F(ARB_fragment_shader) }, - { OFF, "GL_MESAX_half_float_pixel", F(ARB_half_float_pixel) }, + { OFF, "GL_ARB_half_float_pixel", F(ARB_half_float_pixel) }, { OFF, "GL_ARB_imaging", F(ARB_imaging) }, { OFF, "GL_ARB_multisample", F(ARB_multisample) }, { OFF, "GL_ARB_multitexture", F(ARB_multitexture) }, @@ -57,6 +57,8 @@ static const struct { { OFF, "GL_ARB_point_parameters", F(EXT_point_parameters) }, { OFF, "GL_ARB_point_sprite", F(ARB_point_sprite) }, { OFF, "GL_ARB_shader_objects", F(ARB_shader_objects) }, + { OFF, "GL_ARB_shading_language_100", F(ARB_shading_language_100) }, + { OFF, "GL_ARB_shading_language_120", F(ARB_shading_language_120) }, { OFF, "GL_ARB_shadow", F(ARB_shadow) }, { OFF, "GL_ARB_shadow_ambient", F(SGIX_shadow_ambient) }, { OFF, "GL_ARB_texture_border_clamp", F(ARB_texture_border_clamp) }, @@ -90,9 +92,13 @@ static const struct { { ON, "GL_EXT_copy_texture", F(EXT_copy_texture) }, { OFF, "GL_EXT_depth_bounds_test", F(EXT_depth_bounds_test) }, { ON, "GL_EXT_draw_range_elements", F(EXT_draw_range_elements) }, + { OFF, "GL_EXT_framebuffer_object", F(EXT_framebuffer_object) }, + { OFF, "GL_EXT_framebuffer_blit", F(EXT_framebuffer_blit) }, { OFF, "GL_EXT_fog_coord", F(EXT_fog_coord) }, + { OFF, "GL_EXT_gpu_program_parameters", F(EXT_gpu_program_parameters) }, { OFF, "GL_EXT_histogram", F(EXT_histogram) }, { OFF, "GL_EXT_multi_draw_arrays", F(EXT_multi_draw_arrays) }, + { OFF, "GL_EXT_packed_depth_stencil", F(EXT_packed_depth_stencil) }, { ON, "GL_EXT_packed_pixels", F(EXT_packed_pixels) }, { OFF, "GL_EXT_paletted_texture", F(EXT_paletted_texture) }, { OFF, "GL_EXT_pixel_buffer_object", F(EXT_pixel_buffer_object) }, @@ -118,16 +124,18 @@ static const struct { { OFF, "GL_EXT_texture_mirror_clamp", F(EXT_texture_mirror_clamp) }, { ON, "GL_EXT_texture_object", F(EXT_texture_object) }, { OFF, "GL_EXT_texture_rectangle", F(NV_texture_rectangle) }, + { OFF, "GL_EXT_texture_sRGB", F(EXT_texture_sRGB) }, + { OFF, "GL_EXT_timer_query", F(EXT_timer_query) }, { ON, "GL_EXT_vertex_array", F(EXT_vertex_array) }, { OFF, "GL_EXT_vertex_array_set", F(EXT_vertex_array_set) }, { OFF, "GL_3DFX_texture_compression_FXT1", F(TDFX_texture_compression_FXT1) }, { OFF, "GL_APPLE_client_storage", F(APPLE_client_storage) }, { ON, "GL_APPLE_packed_pixels", F(APPLE_packed_pixels) }, + { OFF, "GL_APPLE_vertex_array_object", F(APPLE_vertex_array_object) }, { OFF, "GL_ATI_blend_equation_separate", F(EXT_blend_equation_separate) }, { OFF, "GL_ATI_texture_env_combine3", F(ATI_texture_env_combine3)}, { OFF, "GL_ATI_texture_mirror_once", F(ATI_texture_mirror_once)}, { OFF, "GL_ATI_fragment_shader", F(ATI_fragment_shader)}, - { OFF, "GL_HP_occlusion_test", F(HP_occlusion_test) }, { OFF, "GL_IBM_multimode_draw_arrays", F(IBM_multimode_draw_arrays) }, { ON, "GL_IBM_rasterpos_clip", F(IBM_rasterpos_clip) }, { OFF, "GL_IBM_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)}, @@ -151,12 +159,10 @@ static const struct { { OFF, "GL_SGI_color_table", F(SGI_color_table) }, { OFF, "GL_SGI_texture_color_table", F(SGI_texture_color_table) }, { OFF, "GL_SGIS_generate_mipmap", F(SGIS_generate_mipmap) }, - { OFF, "GL_SGIS_pixel_texture", F(SGIS_pixel_texture) }, { OFF, "GL_SGIS_texture_border_clamp", F(ARB_texture_border_clamp) }, { ON, "GL_SGIS_texture_edge_clamp", F(SGIS_texture_edge_clamp) }, { ON, "GL_SGIS_texture_lod", F(SGIS_texture_lod) }, { OFF, "GL_SGIX_depth_texture", F(SGIX_depth_texture) }, - { OFF, "GL_SGIX_pixel_texture", F(SGIX_pixel_texture) }, { OFF, "GL_SGIX_shadow", F(SGIX_shadow) }, { OFF, "GL_SGIX_shadow_ambient", F(SGIX_shadow_ambient) }, { OFF, "GL_SUN_multi_draw_arrays", F(EXT_multi_draw_arrays) }, @@ -177,13 +183,22 @@ _mesa_enable_sw_extensions(GLcontext *ctx) #if FEATURE_ARB_fragment_program ctx->Extensions.ARB_fragment_program = GL_TRUE; #endif - /*ctx->Extensions.ARB_half_float_pixel = GL_TRUE;*/ +#if FEATURE_ARB_fragment_shader + ctx->Extensions.ARB_fragment_shader = GL_TRUE; +#endif + ctx->Extensions.ARB_half_float_pixel = GL_TRUE; ctx->Extensions.ARB_imaging = GL_TRUE; ctx->Extensions.ARB_multitexture = GL_TRUE; #if FEATURE_ARB_occlusion_query ctx->Extensions.ARB_occlusion_query = GL_TRUE; #endif ctx->Extensions.ARB_point_sprite = GL_TRUE; +#if FEATURE_ARB_shader_objects + ctx->Extensions.ARB_shader_objects = GL_TRUE; +#endif +#if FEATURE_ARB_shading_language_100 + ctx->Extensions.ARB_shading_language_100 = GL_TRUE; +#endif ctx->Extensions.ARB_shadow = GL_TRUE; ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; ctx->Extensions.ARB_texture_cube_map = GL_TRUE; @@ -196,18 +211,13 @@ _mesa_enable_sw_extensions(GLcontext *ctx) #if FEATURE_ARB_vertex_program ctx->Extensions.ARB_vertex_program = GL_TRUE; #endif +#if FEATURE_ARB_vertex_shader + ctx->Extensions.ARB_vertex_shader = GL_TRUE; +#endif #if FEATURE_ARB_vertex_buffer_object ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE; #endif -#if FEATURE_ARB_shader_objects - ctx->Extensions.ARB_shader_objects = GL_TRUE; -#if FEATURE_ARB_fragment_shader - ctx->Extensions.ARB_fragment_shader = GL_FALSE; /*GL_TRUE;*/ -#endif -#if FEATURE_ARB_vertex_shader - ctx->Extensions.ARB_vertex_shader = GL_FALSE; /*GL_TRUE;*/ -#endif -#endif + ctx->Extensions.APPLE_vertex_array_object = GL_TRUE; #if FEATURE_ATI_fragment_shader ctx->Extensions.ATI_fragment_shader = GL_TRUE; #endif @@ -222,8 +232,15 @@ _mesa_enable_sw_extensions(GLcontext *ctx) ctx->Extensions.EXT_convolution = GL_TRUE; ctx->Extensions.EXT_depth_bounds_test = GL_TRUE; ctx->Extensions.EXT_fog_coord = GL_TRUE; +#if FEATURE_EXT_framebuffer_object + ctx->Extensions.EXT_framebuffer_object = GL_TRUE; +#endif +#if FEATURE_EXT_framebuffer_blit + ctx->Extensions.EXT_framebuffer_blit = GL_TRUE; +#endif ctx->Extensions.EXT_histogram = GL_TRUE; ctx->Extensions.EXT_multi_draw_arrays = GL_TRUE; + ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE; ctx->Extensions.EXT_paletted_texture = GL_TRUE; #if FEATURE_EXT_pixel_buffer_object ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; @@ -233,13 +250,15 @@ _mesa_enable_sw_extensions(GLcontext *ctx) ctx->Extensions.EXT_secondary_color = GL_TRUE; ctx->Extensions.EXT_shared_texture_palette = GL_TRUE; ctx->Extensions.EXT_stencil_wrap = GL_TRUE; - ctx->Extensions.EXT_stencil_two_side = GL_TRUE; + ctx->Extensions.EXT_stencil_two_side = GL_FALSE; /* obsolete */ ctx->Extensions.EXT_texture_env_add = GL_TRUE; ctx->Extensions.EXT_texture_env_combine = GL_TRUE; ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE; ctx->Extensions.EXT_texture_mirror_clamp = GL_TRUE; ctx->Extensions.EXT_texture_lod_bias = GL_TRUE; - ctx->Extensions.HP_occlusion_test = GL_TRUE; +#if FEATURE_EXT_texture_sRGB + ctx->Extensions.EXT_texture_sRGB = GL_TRUE; +#endif ctx->Extensions.IBM_multimode_draw_arrays = GL_TRUE; ctx->Extensions.MESA_pack_invert = GL_TRUE; #if FEATURE_MESA_program_debug @@ -263,12 +282,13 @@ _mesa_enable_sw_extensions(GLcontext *ctx) ctx->Extensions.SGI_color_table = GL_TRUE; ctx->Extensions.SGI_texture_color_table = GL_TRUE; ctx->Extensions.SGIS_generate_mipmap = GL_TRUE; - ctx->Extensions.SGIS_pixel_texture = GL_TRUE; ctx->Extensions.SGIS_texture_edge_clamp = GL_TRUE; ctx->Extensions.SGIX_depth_texture = GL_TRUE; - ctx->Extensions.SGIX_pixel_texture = GL_TRUE; ctx->Extensions.SGIX_shadow = GL_TRUE; ctx->Extensions.SGIX_shadow_ambient = GL_TRUE; +#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program + ctx->Extensions.EXT_gpu_program_parameters = GL_TRUE; +#endif } @@ -358,18 +378,38 @@ void _mesa_enable_2_0_extensions(GLcontext *ctx) { ctx->Extensions.ARB_draw_buffers = GL_TRUE; +#if FEATURE_ARB_fragment_shader + ctx->Extensions.ARB_fragment_shader = GL_TRUE; +#endif ctx->Extensions.ARB_point_sprite = GL_TRUE; ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE; - ctx->Extensions.EXT_stencil_two_side = GL_TRUE; #if FEATURE_ARB_shader_objects ctx->Extensions.ARB_shader_objects = GL_TRUE; -#if FEATURE_ARB_fragment_shader - ctx->Extensions.ARB_fragment_shader = GL_FALSE; /*GL_TRUE;*/ #endif +#if FEATURE_ARB_shading_language_100 + ctx->Extensions.ARB_shading_language_100 = GL_TRUE; +#endif + ctx->Extensions.EXT_stencil_two_side = GL_FALSE; /* obsolete */ #if FEATURE_ARB_vertex_shader - ctx->Extensions.ARB_vertex_shader = GL_FALSE; /*GL_TRUE;*/ + ctx->Extensions.ARB_vertex_shader = GL_TRUE; #endif +} + + +/** + * Enable all OpenGL 2.1 features and extensions. + * A convenience function to be called by drivers. + */ +void +_mesa_enable_2_1_extensions(GLcontext *ctx) +{ +#if FEATURE_EXT_pixel_buffer_object + ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; #endif +#if FEATURE_EXT_texture_sRGB + ctx->Extensions.EXT_texture_sRGB = GL_TRUE; +#endif + /* plus: shading language extensions, non-square uniform matrices */ } @@ -480,7 +520,7 @@ _mesa_make_extension_string( GLcontext *ctx ) for (i = 0 ; i < Elements(default_extensions) ; i++) { if (!default_extensions[i].flag_offset || *(base + default_extensions[i].flag_offset)) { - extStrLen += _mesa_strlen(default_extensions[i].name) + 1; + extStrLen += (GLuint)_mesa_strlen(default_extensions[i].name) + 1; } } s = (GLubyte *) _mesa_malloc(extStrLen); @@ -490,7 +530,7 @@ _mesa_make_extension_string( GLcontext *ctx ) for (i = 0 ; i < Elements(default_extensions) ; i++) { if (!default_extensions[i].flag_offset || *(base + default_extensions[i].flag_offset)) { - GLuint len = _mesa_strlen(default_extensions[i].name); + GLuint len = (GLuint)_mesa_strlen(default_extensions[i].name); _mesa_memcpy(s + extStrLen, default_extensions[i].name, len); extStrLen += len; s[extStrLen] = (GLubyte) ' '; diff --git a/src/kits/opengl/mesa/main/extensions.h b/src/kits/opengl/mesa/main/extensions.h index 9d843a8b6b..05ad859a27 100644 --- a/src/kits/opengl/mesa/main/extensions.h +++ b/src/kits/opengl/mesa/main/extensions.h @@ -10,9 +10,9 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -52,6 +52,8 @@ extern void _mesa_enable_1_5_extensions(GLcontext *ctx); extern void _mesa_enable_2_0_extensions(GLcontext *ctx); +extern void _mesa_enable_2_1_extensions(GLcontext *ctx); + extern void _mesa_enable_extension(GLcontext *ctx, const char *name); extern void _mesa_disable_extension(GLcontext *ctx, const char *name); diff --git a/src/kits/opengl/mesa/main/fbobject.c b/src/kits/opengl/mesa/main/fbobject.c new file mode 100644 index 0000000000..cf8de1e0cb --- /dev/null +++ b/src/kits/opengl/mesa/main/fbobject.c @@ -0,0 +1,1637 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.1 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* + * Authors: + * Brian Paul + */ + + +#include "context.h" +#include "fbobject.h" +#include "framebuffer.h" +#include "hash.h" +#include "mipmap.h" +#include "renderbuffer.h" +#include "state.h" +#include "teximage.h" +#include "texobj.h" +#include "texstore.h" + + +/** + * Notes: + * + * None of the GL_EXT_framebuffer_object functions are compiled into + * display lists. + */ + + + +/* + * When glGenRender/FramebuffersEXT() is called we insert pointers to + * these placeholder objects into the hash table. + * Later, when the object ID is first bound, we replace the placeholder + * with the real frame/renderbuffer. + */ +static struct gl_framebuffer DummyFramebuffer; +static struct gl_renderbuffer DummyRenderbuffer; + + +#define IS_CUBE_FACE(TARGET) \ + ((TARGET) >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && \ + (TARGET) <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) + + +/** + * Helper routine for getting a gl_renderbuffer. + */ +struct gl_renderbuffer * +_mesa_lookup_renderbuffer(GLcontext *ctx, GLuint id) +{ + struct gl_renderbuffer *rb; + + if (id == 0) + return NULL; + + rb = (struct gl_renderbuffer *) + _mesa_HashLookup(ctx->Shared->RenderBuffers, id); + return rb; +} + + +/** + * Helper routine for getting a gl_framebuffer. + */ +struct gl_framebuffer * +_mesa_lookup_framebuffer(GLcontext *ctx, GLuint id) +{ + struct gl_framebuffer *fb; + + if (id == 0) + return NULL; + + fb = (struct gl_framebuffer *) + _mesa_HashLookup(ctx->Shared->FrameBuffers, id); + return fb; +} + + +/** + * Given a GL_*_ATTACHMENTn token, return a pointer to the corresponding + * gl_renderbuffer_attachment object. + */ +struct gl_renderbuffer_attachment * +_mesa_get_attachment(GLcontext *ctx, struct gl_framebuffer *fb, + GLenum attachment) +{ + GLuint i; + + switch (attachment) { + case GL_COLOR_ATTACHMENT0_EXT: + case GL_COLOR_ATTACHMENT1_EXT: + case GL_COLOR_ATTACHMENT2_EXT: + case GL_COLOR_ATTACHMENT3_EXT: + case GL_COLOR_ATTACHMENT4_EXT: + case GL_COLOR_ATTACHMENT5_EXT: + case GL_COLOR_ATTACHMENT6_EXT: + case GL_COLOR_ATTACHMENT7_EXT: + case GL_COLOR_ATTACHMENT8_EXT: + case GL_COLOR_ATTACHMENT9_EXT: + case GL_COLOR_ATTACHMENT10_EXT: + case GL_COLOR_ATTACHMENT11_EXT: + case GL_COLOR_ATTACHMENT12_EXT: + case GL_COLOR_ATTACHMENT13_EXT: + case GL_COLOR_ATTACHMENT14_EXT: + case GL_COLOR_ATTACHMENT15_EXT: + i = attachment - GL_COLOR_ATTACHMENT0_EXT; + if (i >= ctx->Const.MaxColorAttachments) { + return NULL; + } + return &fb->Attachment[BUFFER_COLOR0 + i]; + case GL_DEPTH_ATTACHMENT_EXT: + return &fb->Attachment[BUFFER_DEPTH]; + case GL_STENCIL_ATTACHMENT_EXT: + return &fb->Attachment[BUFFER_STENCIL]; + default: + return NULL; + } +} + + +/** + * Remove any texture or renderbuffer attached to the given attachment + * point. Update reference counts, etc. + */ +void +_mesa_remove_attachment(GLcontext *ctx, struct gl_renderbuffer_attachment *att) +{ + if (att->Type == GL_TEXTURE) { + ASSERT(att->Texture); + att->Texture->RefCount--; + if (att->Texture->RefCount == 0) { + ctx->Driver.DeleteTexture(ctx, att->Texture); + } + else { + /* tell driver that we're done rendering to this texture. */ + if (ctx->Driver.FinishRenderTexture) { + ctx->Driver.FinishRenderTexture(ctx, att); + } + } + att->Texture = NULL; + } + if (att->Type == GL_TEXTURE || att->Type == GL_RENDERBUFFER_EXT) { + ASSERT(att->Renderbuffer); + ASSERT(!att->Texture); + att->Renderbuffer->RefCount--; + if (att->Renderbuffer->RefCount == 0) { + att->Renderbuffer->Delete(att->Renderbuffer); + } + att->Renderbuffer = NULL; + } + att->Type = GL_NONE; + att->Complete = GL_TRUE; +} + + +/** + * Bind a texture object to an attachment point. + * The previous binding, if any, will be removed first. + */ +void +_mesa_set_texture_attachment(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att, + struct gl_texture_object *texObj, + GLenum texTarget, GLuint level, GLuint zoffset) +{ + if (att->Texture == texObj) { + /* re-attaching same texture */ + ASSERT(att->Type == GL_TEXTURE); + } + else { + /* new attachment */ + _mesa_remove_attachment(ctx, att); + att->Type = GL_TEXTURE; + att->Texture = texObj; + texObj->RefCount++; + } + + /* always update these fields */ + att->TextureLevel = level; + if (IS_CUBE_FACE(texTarget)) { + att->CubeMapFace = texTarget - GL_TEXTURE_CUBE_MAP_POSITIVE_X; + } + else { + att->CubeMapFace = 0; + } + att->Zoffset = zoffset; + att->Complete = GL_FALSE; + + if (att->Texture->Image[att->CubeMapFace][att->TextureLevel]) { + ctx->Driver.RenderTexture(ctx, fb, att); + } +} + + +/** + * Bind a renderbuffer to an attachment point. + * The previous binding, if any, will be removed first. + */ +void +_mesa_set_renderbuffer_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att, + struct gl_renderbuffer *rb) +{ + /* XXX check if re-doing same attachment, exit early */ + _mesa_remove_attachment(ctx, att); + att->Type = GL_RENDERBUFFER_EXT; + att->Renderbuffer = rb; + att->Texture = NULL; /* just to be safe */ + att->Complete = GL_FALSE; + rb->RefCount++; +} + + +/** + * Fallback for ctx->Driver.FramebufferRenderbuffer() + * Attach a renderbuffer object to a framebuffer object. + */ +void +_mesa_framebuffer_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLenum attachment, struct gl_renderbuffer *rb) +{ + struct gl_renderbuffer_attachment *att; + + _glthread_LOCK_MUTEX(fb->Mutex); + if (rb) + _glthread_LOCK_MUTEX(rb->Mutex); + + att = _mesa_get_attachment(ctx, fb, attachment); + ASSERT(att); + + if (rb) { + _mesa_set_renderbuffer_attachment(ctx, att, rb); + } + else { + _mesa_remove_attachment(ctx, att); + } + + if (rb) + _glthread_UNLOCK_MUTEX(rb->Mutex); + _glthread_UNLOCK_MUTEX(fb->Mutex); +} + + +/** + * Test if an attachment point is complete and update its Complete field. + * \param format if GL_COLOR, this is a color attachment point, + * if GL_DEPTH, this is a depth component attachment point, + * if GL_STENCIL, this is a stencil component attachment point. + */ +static void +test_attachment_completeness(const GLcontext *ctx, GLenum format, + struct gl_renderbuffer_attachment *att) +{ + assert(format == GL_COLOR || format == GL_DEPTH || format == GL_STENCIL); + + /* assume complete */ + att->Complete = GL_TRUE; + + /* Look for reasons why the attachment might be incomplete */ + if (att->Type == GL_TEXTURE) { + const struct gl_texture_object *texObj = att->Texture; + struct gl_texture_image *texImage; + + if (!texObj) { + att->Complete = GL_FALSE; + return; + } + + texImage = texObj->Image[att->CubeMapFace][att->TextureLevel]; + if (!texImage) { + att->Complete = GL_FALSE; + return; + } + if (texImage->Width < 1 || texImage->Height < 1) { + att->Complete = GL_FALSE; + return; + } + if (texObj->Target == GL_TEXTURE_3D && att->Zoffset >= texImage->Depth) { + att->Complete = GL_FALSE; + return; + } + + if (format == GL_COLOR) { + if (texImage->TexFormat->BaseFormat != GL_RGB && + texImage->TexFormat->BaseFormat != GL_RGBA) { + att->Complete = GL_FALSE; + return; + } + } + else if (format == GL_DEPTH) { + if (texImage->TexFormat->BaseFormat == GL_DEPTH_COMPONENT) { + /* OK */ + } + else if (ctx->Extensions.EXT_packed_depth_stencil && + att->Renderbuffer->_BaseFormat == GL_DEPTH_STENCIL_EXT) { + /* OK */ + } + else { + att->Complete = GL_FALSE; + return; + } + } + else { + /* no such thing as stencil textures */ + att->Complete = GL_FALSE; + return; + } + } + else if (att->Type == GL_RENDERBUFFER_EXT) { + ASSERT(att->Renderbuffer); + if (!att->Renderbuffer->InternalFormat || + att->Renderbuffer->Width < 1 || + att->Renderbuffer->Height < 1) { + att->Complete = GL_FALSE; + return; + } + if (format == GL_COLOR) { + if (att->Renderbuffer->_BaseFormat != GL_RGB && + att->Renderbuffer->_BaseFormat != GL_RGBA) { + ASSERT(att->Renderbuffer->RedBits); + ASSERT(att->Renderbuffer->GreenBits); + ASSERT(att->Renderbuffer->BlueBits); + att->Complete = GL_FALSE; + return; + } + } + else if (format == GL_DEPTH) { + ASSERT(att->Renderbuffer->DepthBits); + if (att->Renderbuffer->_BaseFormat == GL_DEPTH_COMPONENT) { + /* OK */ + } + else if (ctx->Extensions.EXT_packed_depth_stencil && + att->Renderbuffer->_BaseFormat == GL_DEPTH_STENCIL_EXT) { + /* OK */ + } + else { + att->Complete = GL_FALSE; + return; + } + } + else { + assert(format == GL_STENCIL); + ASSERT(att->Renderbuffer->StencilBits); + if (att->Renderbuffer->_BaseFormat == GL_STENCIL_INDEX) { + /* OK */ + } + else if (ctx->Extensions.EXT_packed_depth_stencil && + att->Renderbuffer->_BaseFormat == GL_DEPTH_STENCIL_EXT) { + /* OK */ + } + else { + att->Complete = GL_FALSE; + return; + } + } + } + else { + ASSERT(att->Type == GL_NONE); + /* complete */ + return; + } +} + + +/** + * Helpful for debugging + */ +static void +fbo_incomplete(const char *msg, int index) +{ + (void) msg; + (void) index; + /* + _mesa_debug(NULL, "FBO Incomplete: %s [%d]\n", msg, index); + */ +} + + +/** + * Test if the given framebuffer object is complete and update its + * Status field with the results. + * Also update the framebuffer's Width and Height fields if the + * framebuffer is complete. + */ +void +_mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb) +{ + GLuint numImages, width = 0, height = 0; + GLenum intFormat = GL_NONE; + GLuint w = 0, h = 0; + GLint i; + GLuint j; + + assert(fb->Name != 0); + + numImages = 0; + fb->Width = 0; + fb->Height = 0; + + /* Start at -2 to more easily loop over all attachment points */ + for (i = -2; i < (GLint) ctx->Const.MaxColorAttachments; i++) { + struct gl_renderbuffer_attachment *att; + GLenum f; + + if (i == -2) { + att = &fb->Attachment[BUFFER_DEPTH]; + test_attachment_completeness(ctx, GL_DEPTH, att); + if (!att->Complete) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT; + fbo_incomplete("depth attachment incomplete", -1); + return; + } + } + else if (i == -1) { + att = &fb->Attachment[BUFFER_STENCIL]; + test_attachment_completeness(ctx, GL_STENCIL, att); + if (!att->Complete) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT; + fbo_incomplete("stencil attachment incomplete", -1); + return; + } + } + else { + att = &fb->Attachment[BUFFER_COLOR0 + i]; + test_attachment_completeness(ctx, GL_COLOR, att); + if (!att->Complete) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT; + fbo_incomplete("color attachment incomplete", i); + return; + } + } + + if (att->Type == GL_TEXTURE) { + const struct gl_texture_image *texImg + = att->Texture->Image[att->CubeMapFace][att->TextureLevel]; + w = texImg->Width; + h = texImg->Height; + f = texImg->_BaseFormat; + numImages++; + if (f != GL_RGB && f != GL_RGBA && f != GL_DEPTH_COMPONENT + && f != GL_DEPTH_STENCIL_EXT) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT; + fbo_incomplete("texture attachment incomplete", -1); + return; + } + } + else if (att->Type == GL_RENDERBUFFER_EXT) { + w = att->Renderbuffer->Width; + h = att->Renderbuffer->Height; + f = att->Renderbuffer->InternalFormat; + numImages++; + } + else { + assert(att->Type == GL_NONE); + continue; + } + + if (numImages == 1) { + /* set required width, height and format */ + width = w; + height = h; + if (i >= 0) + intFormat = f; + } + else { + /* check that width, height, format are same */ + if (w != width || h != height) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT; + fbo_incomplete("width or height mismatch", -1); + return; + } + if (intFormat != GL_NONE && f != intFormat) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT; + fbo_incomplete("format mismatch", -1); + return; + } + } + } + + /* Check that all DrawBuffers are present */ + for (j = 0; j < ctx->Const.MaxDrawBuffers; j++) { + if (fb->ColorDrawBuffer[j] != GL_NONE) { + const struct gl_renderbuffer_attachment *att + = _mesa_get_attachment(ctx, fb, fb->ColorDrawBuffer[j]); + assert(att); + if (att->Type == GL_NONE) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT; + fbo_incomplete("missing drawbuffer", j); + return; + } + } + } + + /* Check that the ReadBuffer is present */ + if (fb->ColorReadBuffer != GL_NONE) { + const struct gl_renderbuffer_attachment *att + = _mesa_get_attachment(ctx, fb, fb->ColorReadBuffer); + assert(att); + if (att->Type == GL_NONE) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT; + fbo_incomplete("missing readbuffer", -1); + return; + } + } + + if (numImages == 0) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT; + fbo_incomplete("no attachments", -1); + return; + } + + /* + * If we get here, the framebuffer is complete! + */ + fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT; + fb->Width = w; + fb->Height = h; +} + + +GLboolean GLAPIENTRY +_mesa_IsRenderbufferEXT(GLuint renderbuffer) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); + if (renderbuffer) { + struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx, renderbuffer); + if (rb != NULL && rb != &DummyRenderbuffer) + return GL_TRUE; + } + return GL_FALSE; +} + + +void GLAPIENTRY +_mesa_BindRenderbufferEXT(GLenum target, GLuint renderbuffer) +{ + struct gl_renderbuffer *newRb, *oldRb; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (target != GL_RENDERBUFFER_EXT) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glBindRenderbufferEXT(target)"); + return; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + /* The above doesn't fully flush the drivers in the way that a + * glFlush does, but that is required here: + */ + if (ctx->Driver.Flush) + ctx->Driver.Flush(ctx); + + + if (renderbuffer) { + newRb = _mesa_lookup_renderbuffer(ctx, renderbuffer); + if (newRb == &DummyRenderbuffer) { + /* ID was reserved, but no real renderbuffer object made yet */ + newRb = NULL; + } + if (!newRb) { + /* create new renderbuffer object */ + newRb = ctx->Driver.NewRenderbuffer(ctx, renderbuffer); + if (!newRb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindRenderbufferEXT"); + return; + } + ASSERT(newRb->AllocStorage); + _mesa_HashInsert(ctx->Shared->RenderBuffers, renderbuffer, newRb); + } + newRb->RefCount++; + } + else { + newRb = NULL; + } + + oldRb = ctx->CurrentRenderbuffer; + if (oldRb) { + _mesa_dereference_renderbuffer(&oldRb); + } + + ASSERT(newRb != &DummyRenderbuffer); + + ctx->CurrentRenderbuffer = newRb; +} + + +void GLAPIENTRY +_mesa_DeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers) +{ + GLint i; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + + for (i = 0; i < n; i++) { + if (renderbuffers[i] > 0) { + struct gl_renderbuffer *rb; + rb = _mesa_lookup_renderbuffer(ctx, renderbuffers[i]); + if (rb) { + /* check if deleting currently bound renderbuffer object */ + if (rb == ctx->CurrentRenderbuffer) { + /* bind default */ + ASSERT(rb->RefCount >= 2); + _mesa_BindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); + } + + /* remove from hash table immediately, to free the ID */ + _mesa_HashRemove(ctx->Shared->RenderBuffers, renderbuffers[i]); + + if (rb != &DummyRenderbuffer) { + /* But the object will not be freed until it's no longer + * bound in any context. + */ + _mesa_dereference_renderbuffer(&rb); + } + } + } + } +} + + +void GLAPIENTRY +_mesa_GenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers) +{ + GET_CURRENT_CONTEXT(ctx); + GLuint first; + GLint i; + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (n < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glGenRenderbuffersEXT(n)"); + return; + } + + if (!renderbuffers) + return; + + first = _mesa_HashFindFreeKeyBlock(ctx->Shared->RenderBuffers, n); + + for (i = 0; i < n; i++) { + GLuint name = first + i; + renderbuffers[i] = name; + /* insert dummy placeholder into hash table */ + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + _mesa_HashInsert(ctx->Shared->RenderBuffers, name, &DummyRenderbuffer); + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); + } +} + + +/** + * Given an internal format token for a render buffer, return the + * corresponding base format. + * This is very similar to _mesa_base_tex_format() but the set of valid + * internal formats is somewhat different. + * + * \return one of GL_RGB, GL_RGBA, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT + * GL_DEPTH_STENCIL_EXT or zero if error. + */ +GLenum +_mesa_base_fbo_format(GLcontext *ctx, GLenum internalFormat) +{ + switch (internalFormat) { + case GL_RGB: + case GL_R3_G3_B2: + case GL_RGB4: + case GL_RGB5: + case GL_RGB8: + case GL_RGB10: + case GL_RGB12: + case GL_RGB16: + return GL_RGB; + case GL_RGBA: + case GL_RGBA2: + case GL_RGBA4: + case GL_RGB5_A1: + case GL_RGBA8: + case GL_RGB10_A2: + case GL_RGBA12: + case GL_RGBA16: + return GL_RGBA; + case GL_STENCIL_INDEX: + case GL_STENCIL_INDEX1_EXT: + case GL_STENCIL_INDEX4_EXT: + case GL_STENCIL_INDEX8_EXT: + case GL_STENCIL_INDEX16_EXT: + return GL_STENCIL_INDEX; + case GL_DEPTH_COMPONENT: + case GL_DEPTH_COMPONENT16: + case GL_DEPTH_COMPONENT24: + case GL_DEPTH_COMPONENT32: + return GL_DEPTH_COMPONENT; + case GL_DEPTH_STENCIL_EXT: + case GL_DEPTH24_STENCIL8_EXT: + if (ctx->Extensions.EXT_packed_depth_stencil) + return GL_DEPTH_STENCIL_EXT; + else + return 0; + /* XXX add floating point formats eventually */ + default: + return 0; + } +} + + +void GLAPIENTRY +_mesa_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, + GLsizei width, GLsizei height) +{ + struct gl_renderbuffer *rb; + GLenum baseFormat; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (target != GL_RENDERBUFFER_EXT) { + _mesa_error(ctx, GL_INVALID_ENUM, "glRenderbufferStorageEXT(target)"); + return; + } + + baseFormat = _mesa_base_fbo_format(ctx, internalFormat); + if (baseFormat == 0) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glRenderbufferStorageEXT(internalFormat)"); + return; + } + + if (width < 1 || width > (GLsizei) ctx->Const.MaxRenderbufferSize) { + _mesa_error(ctx, GL_INVALID_VALUE, "glRenderbufferStorageEXT(width)"); + return; + } + + if (height < 1 || height > (GLsizei) ctx->Const.MaxRenderbufferSize) { + _mesa_error(ctx, GL_INVALID_VALUE, "glRenderbufferStorageEXT(height)"); + return; + } + + rb = ctx->CurrentRenderbuffer; + + if (!rb) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glRenderbufferStorageEXT"); + return; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + + if (rb->InternalFormat == internalFormat && + rb->Width == (GLuint) width && + rb->Height == (GLuint) height) { + /* no change in allocation needed */ + return; + } + + /* These MUST get set by the AllocStorage func */ + rb->_ActualFormat = 0; + rb->RedBits = + rb->GreenBits = + rb->BlueBits = + rb->AlphaBits = + rb->IndexBits = + rb->DepthBits = + rb->StencilBits = 0; + + /* Now allocate the storage */ + ASSERT(rb->AllocStorage); + if (rb->AllocStorage(ctx, rb, internalFormat, width, height)) { + /* No error - check/set fields now */ + assert(rb->_ActualFormat); + assert(rb->Width == (GLuint) width); + assert(rb->Height == (GLuint) height); + assert(rb->RedBits || rb->GreenBits || rb->BlueBits || rb->AlphaBits || + rb->DepthBits || rb->StencilBits || rb->IndexBits); + rb->InternalFormat = internalFormat; + rb->_BaseFormat = baseFormat; + } + else { + /* Probably ran out of memory - clear the fields */ + rb->Width = 0; + rb->Height = 0; + rb->InternalFormat = GL_NONE; + rb->_ActualFormat = GL_NONE; + rb->_BaseFormat = GL_NONE; + rb->RedBits = + rb->GreenBits = + rb->BlueBits = + rb->AlphaBits = + rb->IndexBits = + rb->DepthBits = + rb->StencilBits = 0; + } + + /* + test_framebuffer_completeness(ctx, fb); + */ + /* XXX if this renderbuffer is attached anywhere, invalidate attachment + * points??? + */ +} + + +void GLAPIENTRY +_mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params) +{ + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (target != GL_RENDERBUFFER_EXT) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetRenderbufferParameterivEXT(target)"); + return; + } + + if (!ctx->CurrentRenderbuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetRenderbufferParameterivEXT"); + return; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + + switch (pname) { + case GL_RENDERBUFFER_WIDTH_EXT: + *params = ctx->CurrentRenderbuffer->Width; + return; + case GL_RENDERBUFFER_HEIGHT_EXT: + *params = ctx->CurrentRenderbuffer->Height; + return; + case GL_RENDERBUFFER_INTERNAL_FORMAT_EXT: + *params = ctx->CurrentRenderbuffer->InternalFormat; + return; + case GL_RENDERBUFFER_RED_SIZE_EXT: + *params = ctx->CurrentRenderbuffer->RedBits; + break; + case GL_RENDERBUFFER_GREEN_SIZE_EXT: + *params = ctx->CurrentRenderbuffer->GreenBits; + break; + case GL_RENDERBUFFER_BLUE_SIZE_EXT: + *params = ctx->CurrentRenderbuffer->BlueBits; + break; + case GL_RENDERBUFFER_ALPHA_SIZE_EXT: + *params = ctx->CurrentRenderbuffer->AlphaBits; + break; + case GL_RENDERBUFFER_DEPTH_SIZE_EXT: + *params = ctx->CurrentRenderbuffer->DepthBits; + break; + case GL_RENDERBUFFER_STENCIL_SIZE_EXT: + *params = ctx->CurrentRenderbuffer->StencilBits; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetRenderbufferParameterivEXT(target)"); + return; + } +} + + +GLboolean GLAPIENTRY +_mesa_IsFramebufferEXT(GLuint framebuffer) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); + if (framebuffer) { + struct gl_framebuffer *rb = _mesa_lookup_framebuffer(ctx, framebuffer); + if (rb != NULL && rb != &DummyFramebuffer) + return GL_TRUE; + } + return GL_FALSE; +} + + +static void +check_begin_texture_render(GLcontext *ctx, struct gl_framebuffer *fb) +{ + GLuint i; + ASSERT(ctx->Driver.RenderTexture); + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = fb->Attachment + i; + struct gl_texture_object *texObj = att->Texture; + if (texObj + && att->Texture->Image[att->CubeMapFace][att->TextureLevel]) { + ctx->Driver.RenderTexture(ctx, fb, att); + } + } +} + + +/** + * Examine all the framebuffer's attachments to see if any are textures. + * If so, call ctx->Driver.FinishRenderTexture() for each texture to + * notify the device driver that the texture image may have changed. + */ +static void +check_end_texture_render(GLcontext *ctx, struct gl_framebuffer *fb) +{ + if (ctx->Driver.FinishRenderTexture) { + GLuint i; + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = fb->Attachment + i; + struct gl_texture_object *texObj = att->Texture; + if (texObj) { + ctx->Driver.FinishRenderTexture(ctx, att); + } + } + } +} + + +void GLAPIENTRY +_mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer) +{ + struct gl_framebuffer *newFb, *oldFb; + GLboolean bindReadBuf, bindDrawBuf; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (!ctx->Extensions.EXT_framebuffer_object) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBindFramebufferEXT(unsupported)"); + return; + } + + switch (target) { +#if FEATURE_EXT_framebuffer_blit + case GL_DRAW_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, "glBindFramebufferEXT(target)"); + return; + } + bindDrawBuf = GL_TRUE; + bindReadBuf = GL_FALSE; + break; + case GL_READ_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, "glBindFramebufferEXT(target)"); + return; + } + bindDrawBuf = GL_FALSE; + bindReadBuf = GL_TRUE; + break; +#endif + case GL_FRAMEBUFFER_EXT: + bindDrawBuf = GL_TRUE; + bindReadBuf = GL_TRUE; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glBindFramebufferEXT(target)"); + return; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + if (ctx->Driver.Flush) { + ctx->Driver.Flush(ctx); + } + if (framebuffer) { + /* Binding a user-created framebuffer object */ + newFb = _mesa_lookup_framebuffer(ctx, framebuffer); + if (newFb == &DummyFramebuffer) { + /* ID was reserved, but no real framebuffer object made yet */ + newFb = NULL; + } + if (!newFb) { + /* create new framebuffer object */ + newFb = ctx->Driver.NewFramebuffer(ctx, framebuffer); + if (!newFb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindFramebufferEXT"); + return; + } + _mesa_HashInsert(ctx->Shared->FrameBuffers, framebuffer, newFb); + } + _glthread_LOCK_MUTEX(newFb->Mutex); + if (bindReadBuf) + newFb->RefCount++; + if (bindDrawBuf) + newFb->RefCount++; + _glthread_UNLOCK_MUTEX(newFb->Mutex); + } + else { + /* Binding the window system framebuffer (which was originally set + * with MakeCurrent). + */ + newFb = ctx->WinSysDrawBuffer; + } + + ASSERT(newFb); + ASSERT(newFb != &DummyFramebuffer); + + /* + * XXX check if re-binding same buffer and skip some of this code. + */ + + if (bindReadBuf) { + oldFb = ctx->ReadBuffer; + if (oldFb && oldFb->Name != 0) { + _mesa_dereference_framebuffer(&oldFb); + } + ctx->ReadBuffer = newFb; + } + + if (bindDrawBuf) { + oldFb = ctx->DrawBuffer; + if (oldFb && oldFb->Name != 0) { + /* check if old FB had any texture attachments */ + check_end_texture_render(ctx, oldFb); + /* check if time to delete this framebuffer */ + _mesa_dereference_framebuffer(&oldFb); + } + ctx->DrawBuffer = newFb; + if (newFb->Name != 0) { + /* check if newly bound framebuffer has any texture attachments */ + check_begin_texture_render(ctx, newFb); + } + } + + if (ctx->Driver.BindFramebuffer) { + ctx->Driver.BindFramebuffer(ctx, target, newFb); + } +} + + +void GLAPIENTRY +_mesa_DeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers) +{ + GLint i; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + /* The above doesn't fully flush the drivers in the way that a + * glFlush does, but that is required here: + */ + if (ctx->Driver.Flush) + ctx->Driver.Flush(ctx); + + for (i = 0; i < n; i++) { + if (framebuffers[i] > 0) { + struct gl_framebuffer *fb; + fb = _mesa_lookup_framebuffer(ctx, framebuffers[i]); + if (fb) { + ASSERT(fb == &DummyFramebuffer || fb->Name == framebuffers[i]); + + /* check if deleting currently bound framebuffer object */ + if (fb == ctx->DrawBuffer) { + /* bind default */ + ASSERT(fb->RefCount >= 2); + _mesa_BindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + } + + /* remove from hash table immediately, to free the ID */ + _mesa_HashRemove(ctx->Shared->FrameBuffers, framebuffers[i]); + + if (fb != &DummyFramebuffer) { + /* But the object will not be freed until it's no longer + * bound in any context. + */ + _mesa_dereference_framebuffer(&fb); + } + } + } + } +} + + +void GLAPIENTRY +_mesa_GenFramebuffersEXT(GLsizei n, GLuint *framebuffers) +{ + GET_CURRENT_CONTEXT(ctx); + GLuint first; + GLint i; + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (n < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glGenFramebuffersEXT(n)"); + return; + } + + if (!framebuffers) + return; + + first = _mesa_HashFindFreeKeyBlock(ctx->Shared->FrameBuffers, n); + + for (i = 0; i < n; i++) { + GLuint name = first + i; + framebuffers[i] = name; + /* insert dummy placeholder into hash table */ + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + _mesa_HashInsert(ctx->Shared->FrameBuffers, name, &DummyFramebuffer); + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); + } +} + + + +GLenum GLAPIENTRY +_mesa_CheckFramebufferStatusEXT(GLenum target) +{ + struct gl_framebuffer *buffer; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); + + switch (target) { +#if FEATURE_EXT_framebuffer_blit + case GL_DRAW_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)"); + return 0; + } + buffer = ctx->DrawBuffer; + break; + case GL_READ_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)"); + return 0; + } + buffer = ctx->ReadBuffer; + break; +#endif + case GL_FRAMEBUFFER_EXT: + buffer = ctx->DrawBuffer; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)"); + return 0; /* formerly GL_FRAMEBUFFER_STATUS_ERROR_EXT */ + } + + if (buffer->Name == 0) { + /* The window system / default framebuffer is always complete */ + return GL_FRAMEBUFFER_COMPLETE_EXT; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + + _mesa_test_framebuffer_completeness(ctx, buffer); + return buffer->_Status; +} + + + +/** + * Common code called by glFramebufferTexture1D/2D/3DEXT(). + */ +static void +framebuffer_texture(GLuint dims, GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level, GLint zoffset) +{ + struct gl_renderbuffer_attachment *att; + struct gl_texture_object *texObj = NULL; + struct gl_framebuffer *fb; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (target != GL_FRAMEBUFFER_EXT) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferTexture%dDEXT(target)", dims); + return; + } + + fb = ctx->DrawBuffer; + ASSERT(fb); + + /* check framebuffer binding */ + if (fb->Name == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glFramebufferTexture%dDEXT", dims); + return; + } + + if (texture) { + texObj = _mesa_lookup_texture(ctx, texture); + } + + /* Check dimension-dependent things */ + switch (dims) { + case 1: + if (textarget != GL_TEXTURE_1D) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferTexture1DEXT(textarget)"); + return; + } + if (texObj && texObj->Target != GL_TEXTURE_1D) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glFramebufferTexture1DEXT(texture target mismatch)"); + return; + } + break; + case 2: + if (textarget != GL_TEXTURE_2D && + textarget != GL_TEXTURE_RECTANGLE_ARB && + !IS_CUBE_FACE(textarget)) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferTexture2DEXT(textarget)"); + return; + } + if (texObj) { + if ((texObj->Target == GL_TEXTURE_2D && textarget != GL_TEXTURE_2D) || + (texObj->Target == GL_TEXTURE_RECTANGLE_ARB + && textarget != GL_TEXTURE_RECTANGLE_ARB) || + (texObj->Target == GL_TEXTURE_CUBE_MAP + && !IS_CUBE_FACE(textarget))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glFramebufferTexture1DEXT(texture target mismatch)"); + return; + } + } + break; + case 3: + if (textarget != GL_TEXTURE_3D) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferTexture3DEXT(textarget)"); + return; + } + if (texObj && texObj->Target != GL_TEXTURE_3D) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glFramebufferTexture3DEXT(texture target mismatch)"); + return; + } + { + const GLint maxSize = 1 << (ctx->Const.Max3DTextureLevels - 1); + if (zoffset < 0 || zoffset >= maxSize) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glFramebufferTexture3DEXT(zoffset)"); + return; + } + } + break; + default: + _mesa_problem(ctx, "Unexpected dims in error_check_framebuffer_texture"); + return; + } + + if ((level < 0) || level >= _mesa_max_texture_levels(ctx, textarget)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glFramebufferTexture%dDEXT(level)", dims); + return; + } + + att = _mesa_get_attachment(ctx, fb, attachment); + if (att == NULL) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferTexture%dDEXT(attachment)", dims); + return; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + /* The above doesn't fully flush the drivers in the way that a + * glFlush does, but that is required here: + */ + if (ctx->Driver.Flush) + ctx->Driver.Flush(ctx); + + _glthread_LOCK_MUTEX(fb->Mutex); + if (texObj) { + _mesa_set_texture_attachment(ctx, fb, att, texObj, textarget, + level, zoffset); + } + else { + _mesa_remove_attachment(ctx, att); + } + _glthread_UNLOCK_MUTEX(fb->Mutex); +} + + + +void GLAPIENTRY +_mesa_FramebufferTexture1DEXT(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, GLint level) +{ + const GLint zoffset = 0; + framebuffer_texture(1, target, attachment, textarget, texture, + level, zoffset); +} + + +void GLAPIENTRY +_mesa_FramebufferTexture2DEXT(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, GLint level) +{ + const GLint zoffset = 0; + framebuffer_texture(2, target, attachment, textarget, texture, + level, zoffset); +} + + +void GLAPIENTRY +_mesa_FramebufferTexture3DEXT(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level, GLint zoffset) +{ + framebuffer_texture(3, target, attachment, textarget, texture, + level, zoffset); +} + + + +void GLAPIENTRY +_mesa_FramebufferRenderbufferEXT(GLenum target, GLenum attachment, + GLenum renderbufferTarget, + GLuint renderbuffer) +{ + struct gl_renderbuffer_attachment *att; + struct gl_framebuffer *fb; + struct gl_renderbuffer *rb; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + switch (target) { +#if FEATURE_EXT_framebuffer_blit + case GL_DRAW_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferRenderbufferEXT(target)"); + return; + } + fb = ctx->DrawBuffer; + break; + case GL_READ_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferRenderbufferEXT(target)"); + return; + } + fb = ctx->ReadBuffer; + break; +#endif + case GL_FRAMEBUFFER_EXT: + fb = ctx->DrawBuffer; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferRenderbufferEXT(target)"); + return; + } + + if (renderbufferTarget != GL_RENDERBUFFER_EXT) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferRenderbufferEXT(renderbufferTarget)"); + return; + } + + if (fb->Name == 0) { + /* Can't attach new renderbuffers to a window system framebuffer */ + _mesa_error(ctx, GL_INVALID_OPERATION, "glFramebufferRenderbufferEXT"); + return; + } + + att = _mesa_get_attachment(ctx, fb, attachment); + if (att == NULL) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glFramebufferRenderbufferEXT(attachment)"); + return; + } + + if (renderbuffer) { + rb = _mesa_lookup_renderbuffer(ctx, renderbuffer); + if (!rb) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glFramebufferRenderbufferEXT(renderbuffer)"); + return; + } + } + else { + /* remove renderbuffer attachment */ + rb = NULL; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + /* The above doesn't fully flush the drivers in the way that a + * glFlush does, but that is required here: + */ + if (ctx->Driver.Flush) + ctx->Driver.Flush(ctx); + + assert(ctx->Driver.FramebufferRenderbuffer); + ctx->Driver.FramebufferRenderbuffer(ctx, fb, attachment, rb); + + /* Some subsequent GL commands may depend on the framebuffer's visual + * after the binding is updated. Update visual info now. + */ + _mesa_update_framebuffer_visual(fb); +} + + +void GLAPIENTRY +_mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, + GLenum pname, GLint *params) +{ + const struct gl_renderbuffer_attachment *att; + struct gl_framebuffer *buffer; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + switch (target) { +#if FEATURE_EXT_framebuffer_blit + case GL_DRAW_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(target)"); + return; + } + buffer = ctx->DrawBuffer; + break; + case GL_READ_FRAMEBUFFER_EXT: + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(target)"); + return; + } + buffer = ctx->ReadBuffer; + break; +#endif + case GL_FRAMEBUFFER_EXT: + buffer = ctx->DrawBuffer; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(target)"); + return; + } + + if (buffer->Name == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetFramebufferAttachmentParameterivEXT"); + return; + } + + att = _mesa_get_attachment(ctx, buffer, attachment); + if (att == NULL) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(attachment)"); + return; + } + + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + /* The above doesn't fully flush the drivers in the way that a + * glFlush does, but that is required here: + */ + if (ctx->Driver.Flush) + ctx->Driver.Flush(ctx); + + switch (pname) { + case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT: + *params = att->Type; + return; + case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT: + if (att->Type == GL_RENDERBUFFER_EXT) { + *params = att->Renderbuffer->Name; + } + else if (att->Type == GL_TEXTURE) { + *params = att->Texture->Name; + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } + return; + case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT: + if (att->Type == GL_TEXTURE) { + *params = att->TextureLevel; + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } + return; + case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT: + if (att->Type == GL_TEXTURE) { + *params = GL_TEXTURE_CUBE_MAP_POSITIVE_X + att->CubeMapFace; + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } + return; + case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT: + if (att->Type == GL_TEXTURE) { + *params = att->Zoffset; + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } + return; + default: + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + return; + } +} + + +void GLAPIENTRY +_mesa_GenerateMipmapEXT(GLenum target) +{ + struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + + switch (target) { + case GL_TEXTURE_1D: + case GL_TEXTURE_2D: + case GL_TEXTURE_3D: + case GL_TEXTURE_CUBE_MAP: + /* OK, legal value */ + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glGenerateMipmapEXT(target)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + texObj = _mesa_select_tex_object(ctx, texUnit, target); + + /* XXX this might not handle cube maps correctly */ + _mesa_lock_texture(ctx, texObj); + _mesa_generate_mipmap(ctx, target, texUnit, texObj); + _mesa_unlock_texture(ctx, texObj); +} + + +#if FEATURE_EXT_framebuffer_blit +void GLAPIENTRY +_mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter) +{ + GET_CURRENT_CONTEXT(ctx); + + ASSERT_OUTSIDE_BEGIN_END(ctx); + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + + if (ctx->NewState) { + _mesa_update_state(ctx); + } + + if (!ctx->ReadBuffer) { + /* XXX */ + } + + /* check for complete framebuffers */ + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT || + ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glBlitFramebufferEXT(incomplete draw/read buffers)"); + return; + } + + if (filter != GL_NEAREST && filter != GL_LINEAR) { + _mesa_error(ctx, GL_INVALID_ENUM, "glBlitFramebufferEXT(filter)"); + return; + } + + if (mask & ~(GL_COLOR_BUFFER_BIT | + GL_DEPTH_BUFFER_BIT | + GL_STENCIL_BUFFER_BIT)) { + _mesa_error( ctx, GL_INVALID_VALUE, "glBlitFramebufferEXT(mask)"); + return; + } + + /* depth/stencil must be blitted with nearest filtering */ + if ((mask & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) + && filter != GL_NEAREST) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(depth/stencil requires GL_NEAREST filter"); + return; + } + + if (mask & GL_STENCIL_BUFFER_BIT) { + struct gl_renderbuffer *readRb = ctx->ReadBuffer->_StencilBuffer; + struct gl_renderbuffer *drawRb = ctx->DrawBuffer->_StencilBuffer; + if (readRb->StencilBits != drawRb->StencilBits) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(stencil buffer size mismatch"); + return; + } + } + + if (mask & GL_DEPTH_BUFFER_BIT) { + struct gl_renderbuffer *readRb = ctx->ReadBuffer->_DepthBuffer; + struct gl_renderbuffer *drawRb = ctx->DrawBuffer->_DepthBuffer; + if (readRb->DepthBits != drawRb->DepthBits) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(depth buffer size mismatch"); + return; + } + } + + if (!ctx->Extensions.EXT_framebuffer_blit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebufferEXT"); + return; + } + + ASSERT(ctx->Driver.BlitFramebuffer); + ctx->Driver.BlitFramebuffer(ctx, + srcX0, srcY0, srcX1, srcY1, + dstX0, dstY0, dstX1, dstY1, + mask, filter); +} +#endif /* FEATURE_EXT_framebuffer_blit */ diff --git a/src/kits/opengl/mesa/main/fbobject.h b/src/kits/opengl/mesa/main/fbobject.h new file mode 100644 index 0000000000..301e2da449 --- /dev/null +++ b/src/kits/opengl/mesa/main/fbobject.h @@ -0,0 +1,134 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef FBOBJECT_H +#define FBOBJECT_H + + +extern struct gl_renderbuffer * +_mesa_lookup_renderbuffer(GLcontext *ctx, GLuint id); + +extern struct gl_framebuffer * +_mesa_lookup_framebuffer(GLcontext *ctx, GLuint id); + +extern struct gl_renderbuffer_attachment * +_mesa_get_attachment(GLcontext *ctx, struct gl_framebuffer *fb, + GLenum attachment); + + +extern void +_mesa_remove_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att); + +extern void +_mesa_set_texture_attachment(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att, + struct gl_texture_object *texObj, + GLenum texTarget, GLuint level, GLuint zoffset); + +extern void +_mesa_set_renderbuffer_attachment(GLcontext *ctx, + struct gl_renderbuffer_attachment *att, + struct gl_renderbuffer *rb); + +extern void +_mesa_framebuffer_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLenum attachment, struct gl_renderbuffer *rb); + +extern void +_mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb); + +extern GLenum +_mesa_base_fbo_format(GLcontext *ctx, GLenum internalFormat); + +extern GLboolean GLAPIENTRY +_mesa_IsRenderbufferEXT(GLuint renderbuffer); + +extern void GLAPIENTRY +_mesa_BindRenderbufferEXT(GLenum target, GLuint renderbuffer); + +extern void GLAPIENTRY +_mesa_DeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers); + +extern void GLAPIENTRY +_mesa_GenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers); + +extern void GLAPIENTRY +_mesa_RenderbufferStorageEXT(GLenum target, GLenum internalformat, + GLsizei width, GLsizei height); + +extern void GLAPIENTRY +_mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname, + GLint *params); + +extern GLboolean GLAPIENTRY +_mesa_IsFramebufferEXT(GLuint framebuffer); + +extern void GLAPIENTRY +_mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer); + +extern void GLAPIENTRY +_mesa_DeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers); + +extern void GLAPIENTRY +_mesa_GenFramebuffersEXT(GLsizei n, GLuint *framebuffers); + +extern GLenum GLAPIENTRY +_mesa_CheckFramebufferStatusEXT(GLenum target); + +extern void GLAPIENTRY +_mesa_FramebufferTexture1DEXT(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, GLint level); + +extern void GLAPIENTRY +_mesa_FramebufferTexture2DEXT(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, GLint level); + +extern void GLAPIENTRY +_mesa_FramebufferTexture3DEXT(GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level, GLint zoffset); + +extern void GLAPIENTRY +_mesa_FramebufferRenderbufferEXT(GLenum target, GLenum attachment, + GLenum renderbuffertarget, + GLuint renderbuffer); + +extern void GLAPIENTRY +_mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, + GLenum pname, GLint *params); + +extern void GLAPIENTRY +_mesa_GenerateMipmapEXT(GLenum target); + + +extern void GLAPIENTRY +_mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); + + +#endif /* FBOBJECT_H */ diff --git a/src/kits/opengl/mesa/main/fog.c b/src/kits/opengl/mesa/main/fog.c index d3b8a923aa..50a61bd84b 100644 --- a/src/kits/opengl/mesa/main/fog.c +++ b/src/kits/opengl/mesa/main/fog.c @@ -73,6 +73,14 @@ _mesa_Fogiv(GLenum pname, const GLint *params ) } +#define UPDATE_FOG_SCALE(ctx) do {\ + if (ctx->Fog.End == ctx->Fog.Start)\ + ctx->Fog._Scale = 1.0f;\ + else\ + ctx->Fog._Scale = 1.0f / (ctx->Fog.End - ctx->Fog.Start);\ + } while(0) + + void GLAPIENTRY _mesa_Fogfv( GLenum pname, const GLfloat *params ) { @@ -108,17 +116,19 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params ) ctx->Fog.Density = *params; break; case GL_FOG_START: - if (ctx->Fog.Start == *params) - return; - FLUSH_VERTICES(ctx, _NEW_FOG); - ctx->Fog.Start = *params; - break; + if (ctx->Fog.Start == *params) + return; + FLUSH_VERTICES(ctx, _NEW_FOG); + ctx->Fog.Start = *params; + UPDATE_FOG_SCALE(ctx); + break; case GL_FOG_END: - if (ctx->Fog.End == *params) - return; - FLUSH_VERTICES(ctx, _NEW_FOG); - ctx->Fog.End = *params; - break; + if (ctx->Fog.End == *params) + return; + FLUSH_VERTICES(ctx, _NEW_FOG); + ctx->Fog.End = *params; + UPDATE_FOG_SCALE(ctx); + break; case GL_FOG_INDEX: if (ctx->Fog.Index == *params) return; @@ -174,4 +184,5 @@ void _mesa_init_fog( GLcontext * ctx ) ctx->Fog.End = 1.0; ctx->Fog.ColorSumEnabled = GL_FALSE; ctx->Fog.FogCoordinateSource = GL_FRAGMENT_DEPTH_EXT; + ctx->Fog._Scale = 1.0f; } diff --git a/src/kits/opengl/mesa/main/framebuffer.c b/src/kits/opengl/mesa/main/framebuffer.c new file mode 100644 index 0000000000..465197401b --- /dev/null +++ b/src/kits/opengl/mesa/main/framebuffer.c @@ -0,0 +1,820 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.1 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * Functions for allocating/managing framebuffers and renderbuffers. + * Also, routines for reading/writing renderbuffer data as ubytes, + * ushorts, uints, etc. + */ + + +#include "glheader.h" +#include "imports.h" +#include "context.h" +#include "depthstencil.h" +#include "mtypes.h" +#include "fbobject.h" +#include "framebuffer.h" +#include "renderbuffer.h" + + + +/** + * Compute/set the _DepthMax field for the given framebuffer. + * This value depends on the Z buffer resolution. + */ +static void +compute_depth_max(struct gl_framebuffer *fb) +{ + if (fb->Visual.depthBits == 0) { + /* Special case. Even if we don't have a depth buffer we need + * good values for DepthMax for Z vertex transformation purposes + * and for per-fragment fog computation. + */ + fb->_DepthMax = (1 << 16) - 1; + } + else if (fb->Visual.depthBits < 32) { + fb->_DepthMax = (1 << fb->Visual.depthBits) - 1; + } + else { + /* Special case since shift values greater than or equal to the + * number of bits in the left hand expression's type are undefined. + */ + fb->_DepthMax = 0xffffffff; + } + fb->_DepthMaxF = (GLfloat) fb->_DepthMax; + fb->_MRD = 1.0; /* Minimum resolvable depth value, for polygon offset */ +} + + +/** + * Set the framebuffer's _DepthBuffer field, taking care of + * reference counts, etc. + */ +static void +set_depth_renderbuffer(struct gl_framebuffer *fb, + struct gl_renderbuffer *rb) +{ + if (fb->_DepthBuffer) { + _mesa_dereference_renderbuffer(&fb->_DepthBuffer); + } + fb->_DepthBuffer = rb; + if (rb) { + rb->RefCount++; + } +} + + +/** + * Set the framebuffer's _StencilBuffer field, taking care of + * reference counts, etc. + */ +static void +set_stencil_renderbuffer(struct gl_framebuffer *fb, + struct gl_renderbuffer *rb) +{ + if (fb->_StencilBuffer) { + _mesa_dereference_renderbuffer(&fb->_StencilBuffer); + } + fb->_StencilBuffer = rb; + if (rb) { + rb->RefCount++; + } +} + + +/** + * Create and initialize a gl_framebuffer object. + * This is intended for creating _window_system_ framebuffers, not generic + * framebuffer objects ala GL_EXT_framebuffer_object. + * + * \sa _mesa_new_framebuffer + */ +struct gl_framebuffer * +_mesa_create_framebuffer(const GLvisual *visual) +{ + struct gl_framebuffer *fb = CALLOC_STRUCT(gl_framebuffer); + assert(visual); + if (fb) { + _mesa_initialize_framebuffer(fb, visual); + } + return fb; +} + + +/** + * Allocate a new gl_framebuffer object. + * This is the default function for ctx->Driver.NewFramebuffer(). + * This is for allocating user-created framebuffers, not window-system + * framebuffers! + * \sa _mesa_create_framebuffer + */ +struct gl_framebuffer * +_mesa_new_framebuffer(GLcontext *ctx, GLuint name) +{ + struct gl_framebuffer *fb; + (void) ctx; + assert(name != 0); + fb = CALLOC_STRUCT(gl_framebuffer); + if (fb) { + fb->Name = name; + fb->RefCount = 1; + fb->ColorDrawBuffer[0] = GL_COLOR_ATTACHMENT0_EXT; + fb->_ColorDrawBufferMask[0] = BUFFER_BIT_COLOR0; + fb->ColorReadBuffer = GL_COLOR_ATTACHMENT0_EXT; + fb->_ColorReadBufferIndex = BUFFER_COLOR0; + fb->Delete = _mesa_destroy_framebuffer; + } + return fb; +} + + +/** + * Initialize a gl_framebuffer object. Typically used to initialize + * window system-created framebuffers, not user-created framebuffers. + * \sa _mesa_create_framebuffer + */ +void +_mesa_initialize_framebuffer(struct gl_framebuffer *fb, const GLvisual *visual) +{ + assert(fb); + assert(visual); + + _mesa_bzero(fb, sizeof(struct gl_framebuffer)); + + _glthread_INIT_MUTEX(fb->Mutex); + + /* save the visual */ + fb->Visual = *visual; + + /* Init glRead/DrawBuffer state */ + if (visual->doubleBufferMode) { + fb->ColorDrawBuffer[0] = GL_BACK; + fb->_ColorDrawBufferMask[0] = BUFFER_BIT_BACK_LEFT; + fb->ColorReadBuffer = GL_BACK; + fb->_ColorReadBufferIndex = BUFFER_BACK_LEFT; + } + else { + fb->ColorDrawBuffer[0] = GL_FRONT; + fb->_ColorDrawBufferMask[0] = BUFFER_BIT_FRONT_LEFT; + fb->ColorReadBuffer = GL_FRONT; + fb->_ColorReadBufferIndex = BUFFER_FRONT_LEFT; + } + + fb->Delete = _mesa_destroy_framebuffer; + fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT; + + compute_depth_max(fb); +} + + +/** + * Deallocate buffer and everything attached to it. + * Typically called via the gl_framebuffer->Delete() method. + */ +void +_mesa_destroy_framebuffer(struct gl_framebuffer *fb) +{ + if (fb) { + _glthread_DESTROY_MUTEX(fb->Mutex); + _mesa_free_framebuffer_data(fb); + _mesa_free(fb); + } +} + + +/** + * Free all the data hanging off the given gl_framebuffer, but don't free + * the gl_framebuffer object itself. + */ +void +_mesa_free_framebuffer_data(struct gl_framebuffer *fb) +{ + GLuint i; + + assert(fb); + + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = &fb->Attachment[i]; + if (att->Renderbuffer) { + struct gl_renderbuffer *rb = att->Renderbuffer; + /* remove framebuffer's reference to renderbuffer */ + _mesa_dereference_renderbuffer(&rb); + if (rb && rb->Name == 0) { + /* delete window system renderbuffer */ + _mesa_dereference_renderbuffer(&rb); + } + } + att->Type = GL_NONE; + att->Renderbuffer = NULL; + } + + /* unbind depth/stencil to decr ref counts */ + set_depth_renderbuffer(fb, NULL); + set_stencil_renderbuffer(fb, NULL); +} + + +/** + * Decrement the reference count on a framebuffer and delete it when + * the refcount hits zero. + * Note: we pass the address of a pointer and set it to NULL if we delete it. + */ +void +_mesa_dereference_framebuffer(struct gl_framebuffer **fb) +{ + GLboolean deleteFlag = GL_FALSE; + + _glthread_LOCK_MUTEX((*fb)->Mutex); + { + ASSERT((*fb)->RefCount > 0); + (*fb)->RefCount--; + deleteFlag = ((*fb)->RefCount == 0); + } + _glthread_UNLOCK_MUTEX((*fb)->Mutex); + + if (deleteFlag) { + (*fb)->Delete(*fb); + *fb = NULL; + } +} + + + + +/** + * Resize the given framebuffer's renderbuffers to the new width and height. + * This should only be used for window-system framebuffers, not + * user-created renderbuffers (i.e. made with GL_EXT_framebuffer_object). + * This will typically be called via ctx->Driver.ResizeBuffers() or directly + * from a device driver. + * + * \note it's possible for ctx to be null since a window can be resized + * without a currently bound rendering context. + */ +void +_mesa_resize_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint width, GLuint height) +{ + GLuint i; + + /* XXX I think we could check if the size is not changing + * and return early. + */ + + /* For window system framebuffers, Name is zero */ + assert(fb->Name == 0); + + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = &fb->Attachment[i]; + if (att->Type == GL_RENDERBUFFER_EXT && att->Renderbuffer) { + struct gl_renderbuffer *rb = att->Renderbuffer; + /* only resize if size is changing */ + if (rb->Width != width || rb->Height != height) { + /* could just as well pass rb->_ActualFormat here */ + if (rb->AllocStorage(ctx, rb, rb->InternalFormat, width, height)) { + ASSERT(rb->Width == width); + ASSERT(rb->Height == height); + } + else { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Resizing framebuffer"); + /* no return */ + } + } + } + } + + if (fb->_DepthBuffer) { + struct gl_renderbuffer *rb = fb->_DepthBuffer; + if (rb->Width != width || rb->Height != height) { + if (!rb->AllocStorage(ctx, rb, rb->InternalFormat, width, height)) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Resizing framebuffer"); + } + } + } + + if (fb->_StencilBuffer) { + struct gl_renderbuffer *rb = fb->_StencilBuffer; + if (rb->Width != width || rb->Height != height) { + if (!rb->AllocStorage(ctx, rb, rb->InternalFormat, width, height)) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Resizing framebuffer"); + } + } + } + + fb->Width = width; + fb->Height = height; + + if (ctx) { + /* update scissor / window bounds */ + _mesa_update_draw_buffer_bounds(ctx); + /* Signal new buffer state so that swrast will update its clipping + * info (the CLIP_BIT flag). + */ + ctx->NewState |= _NEW_BUFFERS; + } +} + + +/** + * Examine all the framebuffer's renderbuffers to update the Width/Height + * fields of the framebuffer. If we have renderbuffers with different + * sizes, set the framebuffer's width and height to zero. + * Note: this is only intended for user-created framebuffers, not + * window-system framebuffes. + */ +static void +update_framebuffer_size(struct gl_framebuffer *fb) +{ + GLboolean haveSize = GL_FALSE; + GLuint i; + + /* user-created framebuffers only */ + assert(fb->Name); + + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = &fb->Attachment[i]; + const struct gl_renderbuffer *rb = att->Renderbuffer; + if (rb) { + if (haveSize) { + if (rb->Width != fb->Width && rb->Height != fb->Height) { + /* size mismatch! */ + fb->Width = 0; + fb->Height = 0; + return; + } + } + else { + fb->Width = rb->Width; + fb->Height = rb->Height; + haveSize = GL_TRUE; + } + } + } +} + + +/** + * Update the context's current drawing buffer's Xmin, Xmax, Ymin, Ymax fields. + * These values are computed from the buffer's width and height and + * the scissor box, if it's enabled. + * \param ctx the GL context. + */ +void +_mesa_update_draw_buffer_bounds(GLcontext *ctx) +{ + struct gl_framebuffer *buffer = ctx->DrawBuffer; + + if (!buffer) + return; + + if (buffer->Name) { + /* user-created framebuffer size depends on the renderbuffers */ + update_framebuffer_size(buffer); + } + + buffer->_Xmin = 0; + buffer->_Ymin = 0; + buffer->_Xmax = buffer->Width; + buffer->_Ymax = buffer->Height; + + if (ctx->Scissor.Enabled) { + if (ctx->Scissor.X > buffer->_Xmin) { + buffer->_Xmin = ctx->Scissor.X; + } + if (ctx->Scissor.Y > buffer->_Ymin) { + buffer->_Ymin = ctx->Scissor.Y; + } + if (ctx->Scissor.X + ctx->Scissor.Width < buffer->_Xmax) { + buffer->_Xmax = ctx->Scissor.X + ctx->Scissor.Width; + } + if (ctx->Scissor.Y + ctx->Scissor.Height < buffer->_Ymax) { + buffer->_Ymax = ctx->Scissor.Y + ctx->Scissor.Height; + } + /* finally, check for empty region */ + if (buffer->_Xmin > buffer->_Xmax) { + buffer->_Xmin = buffer->_Xmax; + } + if (buffer->_Ymin > buffer->_Ymax) { + buffer->_Ymin = buffer->_Ymax; + } + } + + ASSERT(buffer->_Xmin <= buffer->_Xmax); + ASSERT(buffer->_Ymin <= buffer->_Ymax); +} + + +/** + * The glGet queries of the framebuffer red/green/blue size, stencil size, + * etc. are satisfied by the fields of ctx->DrawBuffer->Visual. These can + * change depending on the renderbuffer bindings. This function updates + * the given framebuffer's Visual from the current renderbuffer bindings. + * + * This may apply to user-created framebuffers or window system framebuffers. + * + * Also note: ctx->DrawBuffer->Visual.depthBits might not equal + * ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer.DepthBits. + * The former one is used to convert floating point depth values into + * integer Z values. + */ +void +_mesa_update_framebuffer_visual(struct gl_framebuffer *fb) +{ + GLuint i; + + _mesa_bzero(&fb->Visual, sizeof(fb->Visual)); + fb->Visual.rgbMode = GL_TRUE; /* assume this */ + +#if 0 /* this _might_ be needed */ + if (fb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + /* leave visual fields zero'd */ + return; + } +#endif + + /* find first RGB or CI renderbuffer */ + for (i = 0; i < BUFFER_COUNT; i++) { + if (fb->Attachment[i].Renderbuffer) { + const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer; + if (rb->_BaseFormat == GL_RGBA || rb->_BaseFormat == GL_RGB) { + fb->Visual.redBits = rb->RedBits; + fb->Visual.greenBits = rb->GreenBits; + fb->Visual.blueBits = rb->BlueBits; + fb->Visual.alphaBits = rb->AlphaBits; + fb->Visual.rgbBits = fb->Visual.redBits + + fb->Visual.greenBits + fb->Visual.blueBits; + fb->Visual.floatMode = GL_FALSE; + break; + } + else if (rb->_BaseFormat == GL_COLOR_INDEX) { + fb->Visual.indexBits = rb->IndexBits; + fb->Visual.rgbMode = GL_FALSE; + break; + } + } + } + + if (fb->Attachment[BUFFER_DEPTH].Renderbuffer) { + fb->Visual.haveDepthBuffer = GL_TRUE; + fb->Visual.depthBits + = fb->Attachment[BUFFER_DEPTH].Renderbuffer->DepthBits; + } + + if (fb->Attachment[BUFFER_STENCIL].Renderbuffer) { + fb->Visual.haveStencilBuffer = GL_TRUE; + fb->Visual.stencilBits + = fb->Attachment[BUFFER_STENCIL].Renderbuffer->StencilBits; + } + + if (fb->Attachment[BUFFER_ACCUM].Renderbuffer) { + fb->Visual.haveAccumBuffer = GL_TRUE; + fb->Visual.accumRedBits + = fb->Attachment[BUFFER_DEPTH].Renderbuffer->RedBits; + fb->Visual.accumGreenBits + = fb->Attachment[BUFFER_DEPTH].Renderbuffer->GreenBits; + fb->Visual.accumBlueBits + = fb->Attachment[BUFFER_DEPTH].Renderbuffer->BlueBits; + fb->Visual.accumAlphaBits + = fb->Attachment[BUFFER_DEPTH].Renderbuffer->AlphaBits; + } + + compute_depth_max(fb); +} + + +/** + * Update the framebuffer's _DepthBuffer field using the renderbuffer + * found at the given attachment index. + * + * If that attachment points to a combined GL_DEPTH_STENCIL renderbuffer, + * create and install a depth wrapper/adaptor. + * + * \param fb the framebuffer whose _DepthBuffer field to update + * \param attIndex indicates the renderbuffer to possibly wrap + */ +void +_mesa_update_depth_buffer(GLcontext *ctx, + struct gl_framebuffer *fb, + GLuint attIndex) +{ + struct gl_renderbuffer *depthRb; + + /* only one possiblity for now */ + ASSERT(attIndex == BUFFER_DEPTH); + + depthRb = fb->Attachment[attIndex].Renderbuffer; + + if (depthRb && depthRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT) { + /* The attached depth buffer is a GL_DEPTH_STENCIL renderbuffer */ + if (!fb->_DepthBuffer + || fb->_DepthBuffer->Wrapped != depthRb + || fb->_DepthBuffer->_BaseFormat != GL_DEPTH_COMPONENT) { + /* need to update wrapper */ + struct gl_renderbuffer *wrapper + = _mesa_new_z24_renderbuffer_wrapper(ctx, depthRb); + set_depth_renderbuffer(fb, wrapper); + ASSERT(fb->_DepthBuffer->Wrapped == depthRb); + } + } + else { + /* depthRb may be null */ + set_depth_renderbuffer(fb, depthRb); + } +} + + +/** + * Update the framebuffer's _StencilBuffer field using the renderbuffer + * found at the given attachment index. + * + * If that attachment points to a combined GL_DEPTH_STENCIL renderbuffer, + * create and install a stencil wrapper/adaptor. + * + * \param fb the framebuffer whose _StencilBuffer field to update + * \param attIndex indicates the renderbuffer to possibly wrap + */ +void +_mesa_update_stencil_buffer(GLcontext *ctx, + struct gl_framebuffer *fb, + GLuint attIndex) +{ + struct gl_renderbuffer *stencilRb; + + ASSERT(attIndex == BUFFER_DEPTH || + attIndex == BUFFER_STENCIL); + + stencilRb = fb->Attachment[attIndex].Renderbuffer; + + if (stencilRb && stencilRb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT) { + /* The attached stencil buffer is a GL_DEPTH_STENCIL renderbuffer */ + if (!fb->_StencilBuffer + || fb->_StencilBuffer->Wrapped != stencilRb + || fb->_StencilBuffer->_BaseFormat != GL_STENCIL_INDEX) { + /* need to update wrapper */ + struct gl_renderbuffer *wrapper + = _mesa_new_s8_renderbuffer_wrapper(ctx, stencilRb); + set_stencil_renderbuffer(fb, wrapper); + ASSERT(fb->_StencilBuffer->Wrapped == stencilRb); + } + } + else { + /* stencilRb may be null */ + set_stencil_renderbuffer(fb, stencilRb); + } +} + + +/** + * Update the list of color drawing renderbuffer pointers. + * Later, when we're rendering we'll loop from 0 to _NumColorDrawBuffers + * writing colors. + */ +static void +update_color_draw_buffers(GLcontext *ctx, struct gl_framebuffer *fb) +{ + GLuint output; + + /* + * Fragment programs can write to multiple colorbuffers with + * the GL_ARB_draw_buffers extension. + */ + for (output = 0; output < ctx->Const.MaxDrawBuffers; output++) { + GLbitfield bufferMask = fb->_ColorDrawBufferMask[output]; + GLuint count = 0; + GLuint i; + /* We need the inner loop here because glDrawBuffer(GL_FRONT_AND_BACK) + * can specify writing to two or four color buffers (for example). + */ + for (i = 0; bufferMask && i < BUFFER_COUNT; i++) { + const GLuint bufferBit = 1 << i; + if (bufferBit & bufferMask) { + struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer; + if (rb) { + fb->_ColorDrawBuffers[output][count] = rb; + count++; + } + else { + /*_mesa_warning(ctx, "DrawBuffer names a missing buffer!\n");*/ + } + bufferMask &= ~bufferBit; + } + } + fb->_NumColorDrawBuffers[output] = count; + } +} + + +/** + * Update the color read renderbuffer pointer. + * Unlike the DrawBuffer, we can only read from one (or zero) color buffers. + */ +static void +update_color_read_buffer(GLcontext *ctx, struct gl_framebuffer *fb) +{ + (void) ctx; + if (fb->_ColorReadBufferIndex == -1) { + fb->_ColorReadBuffer = NULL; /* legal! */ + } + else { + ASSERT(fb->_ColorReadBufferIndex >= 0); + ASSERT(fb->_ColorReadBufferIndex < BUFFER_COUNT); + fb->_ColorReadBuffer + = fb->Attachment[fb->_ColorReadBufferIndex].Renderbuffer; + } +} + + +/** + * Update state related to the current draw/read framebuffers. + * Specifically, update these framebuffer fields: + * _ColorDrawBuffers + * _NumColorDrawBuffers + * _ColorReadBuffer + * _DepthBuffer + * _StencilBuffer + * If the current framebuffer is user-created, make sure it's complete. + * The following functions can effect this state: glReadBuffer, + * glDrawBuffer, glDrawBuffersARB, glFramebufferRenderbufferEXT, + * glRenderbufferStorageEXT. + */ +void +_mesa_update_framebuffer(GLcontext *ctx) +{ + struct gl_framebuffer *fb = ctx->DrawBuffer; + + /* Completeness only matters for user-created framebuffers */ + if (fb->Name != 0) { + _mesa_test_framebuffer_completeness(ctx, fb); + _mesa_update_framebuffer_visual(fb); + } + + update_color_draw_buffers(ctx, fb); + update_color_read_buffer(ctx, fb); + _mesa_update_depth_buffer(ctx, fb, BUFFER_DEPTH); + _mesa_update_stencil_buffer(ctx, fb, BUFFER_STENCIL); + + compute_depth_max(fb); +} + + +/** + * Check if the renderbuffer for a read operation (glReadPixels, glCopyPixels, + * glCopyTex[Sub]Image, etc. exists. + * \param format a basic image format such as GL_RGB, GL_RGBA, GL_ALPHA, + * GL_DEPTH_COMPONENT, etc. or GL_COLOR, GL_DEPTH, GL_STENCIL. + * \return GL_TRUE if buffer exists, GL_FALSE otherwise + */ +GLboolean +_mesa_source_buffer_exists(GLcontext *ctx, GLenum format) +{ + const struct gl_renderbuffer_attachment *att + = ctx->ReadBuffer->Attachment; + + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + return GL_FALSE; + } + + switch (format) { + case GL_COLOR: + case GL_RED: + case GL_GREEN: + case GL_BLUE: + case GL_ALPHA: + case GL_LUMINANCE: + case GL_LUMINANCE_ALPHA: + case GL_INTENSITY: + case GL_RGB: + case GL_BGR: + case GL_RGBA: + case GL_BGRA: + case GL_ABGR_EXT: + case GL_COLOR_INDEX: + if (ctx->ReadBuffer->_ColorReadBuffer == NULL) { + return GL_FALSE; + } + /* XXX enable this post 6.5 release: + ASSERT(ctx->ReadBuffer->_ColorReadBuffer->RedBits > 0 || + ctx->ReadBuffer->_ColorReadBuffer->IndexBits > 0); + */ + break; + case GL_DEPTH: + case GL_DEPTH_COMPONENT: + if (!att[BUFFER_DEPTH].Renderbuffer) { + return GL_FALSE; + } + ASSERT(att[BUFFER_DEPTH].Renderbuffer->DepthBits > 0); + break; + case GL_STENCIL: + case GL_STENCIL_INDEX: + if (!att[BUFFER_STENCIL].Renderbuffer) { + return GL_FALSE; + } + ASSERT(att[BUFFER_STENCIL].Renderbuffer->StencilBits > 0); + break; + case GL_DEPTH_STENCIL_EXT: + if (!att[BUFFER_DEPTH].Renderbuffer || + !att[BUFFER_STENCIL].Renderbuffer) { + return GL_FALSE; + } + ASSERT(att[BUFFER_DEPTH].Renderbuffer->DepthBits > 0); + ASSERT(att[BUFFER_STENCIL].Renderbuffer->StencilBits > 0); + break; + default: + _mesa_problem(ctx, + "Unexpected format 0x%x in _mesa_source_buffer_exists", + format); + return GL_FALSE; + } + + /* OK */ + return GL_TRUE; +} + + +/** + * As above, but for drawing operations. + * XXX code do some code merging w/ above function. + */ +GLboolean +_mesa_dest_buffer_exists(GLcontext *ctx, GLenum format) +{ + const struct gl_renderbuffer_attachment *att + = ctx->ReadBuffer->Attachment; + + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + return GL_FALSE; + } + + switch (format) { + case GL_COLOR: + case GL_RED: + case GL_GREEN: + case GL_BLUE: + case GL_ALPHA: + case GL_LUMINANCE: + case GL_LUMINANCE_ALPHA: + case GL_INTENSITY: + case GL_RGB: + case GL_BGR: + case GL_RGBA: + case GL_BGRA: + case GL_ABGR_EXT: + case GL_COLOR_INDEX: + /* nothing special */ + /* Could assert that colorbuffer has RedBits > 0 */ + break; + case GL_DEPTH: + case GL_DEPTH_COMPONENT: + if (!att[BUFFER_DEPTH].Renderbuffer) { + return GL_FALSE; + } + ASSERT(att[BUFFER_DEPTH].Renderbuffer->DepthBits > 0); + break; + case GL_STENCIL: + case GL_STENCIL_INDEX: + if (!att[BUFFER_STENCIL].Renderbuffer) { + return GL_FALSE; + } + ASSERT(att[BUFFER_STENCIL].Renderbuffer->StencilBits > 0); + break; + case GL_DEPTH_STENCIL_EXT: + if (!att[BUFFER_DEPTH].Renderbuffer || + !att[BUFFER_STENCIL].Renderbuffer) { + return GL_FALSE; + } + ASSERT(att[BUFFER_DEPTH].Renderbuffer->DepthBits > 0); + ASSERT(att[BUFFER_STENCIL].Renderbuffer->StencilBits > 0); + break; + default: + _mesa_problem(ctx, + "Unexpected format 0x%x in _mesa_source_buffer_exists", + format); + return GL_FALSE; + } + + /* OK */ + return GL_TRUE; +} diff --git a/src/kits/opengl/mesa/main/framebuffer.h b/src/kits/opengl/mesa/main/framebuffer.h new file mode 100644 index 0000000000..7f3254fe8e --- /dev/null +++ b/src/kits/opengl/mesa/main/framebuffer.h @@ -0,0 +1,76 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef FRAMEBUFFER_H +#define FRAMEBUFFER_H + + +extern struct gl_framebuffer * +_mesa_create_framebuffer(const GLvisual *visual); + +extern struct gl_framebuffer * +_mesa_new_framebuffer(GLcontext *ctx, GLuint name); + +extern void +_mesa_initialize_framebuffer(struct gl_framebuffer *fb, const GLvisual *visual); + +extern void +_mesa_destroy_framebuffer(struct gl_framebuffer *buffer); + +extern void +_mesa_free_framebuffer_data(struct gl_framebuffer *buffer); + +extern void +_mesa_dereference_framebuffer(struct gl_framebuffer **fb); + +extern void +_mesa_resize_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint width, GLuint height); + +extern void +_mesa_update_draw_buffer_bounds(GLcontext *ctx); + +extern void +_mesa_update_framebuffer_visual(struct gl_framebuffer *fb); + +extern void +_mesa_update_depth_buffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint attIndex); + +extern void +_mesa_update_stencil_buffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint attIndex); + +extern void +_mesa_update_framebuffer(GLcontext *ctx); + +extern GLboolean +_mesa_source_buffer_exists(GLcontext *ctx, GLenum format); + +extern GLboolean +_mesa_dest_buffer_exists(GLcontext *ctx, GLenum format); + + +#endif /* FRAMEBUFFER_H */ diff --git a/src/kits/opengl/mesa/main/get.c b/src/kits/opengl/mesa/main/get.c index 8f42990efe..858c822659 100644 --- a/src/kits/opengl/mesa/main/get.c +++ b/src/kits/opengl/mesa/main/get.c @@ -1,3461 +1,1926 @@ -/** - * \file get.c - * State query functions. - */ -/* - * Mesa 3-D graphics library - * Version: 6.3 - * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * Regarding GL_NV_light_max_exponent: - * - * Portions of this software may use or implement intellectual - * property owned and licensed by NVIDIA Corporation. NVIDIA disclaims - * any and all warranties with respect to such intellectual property, - * including any use thereof or modifications thereto. - */ +/*** + *** NOTE!!! DO NOT EDIT THIS FILE!!! IT IS GENERATED BY get_gen.py + ***/ #include "glheader.h" -#include "colormac.h" #include "context.h" #include "enable.h" -#include "enums.h" #include "extensions.h" +#include "fbobject.h" #include "get.h" #include "macros.h" #include "mtypes.h" +#include "state.h" #include "texcompress.h" -#include "version.h" -#include "math/m_matrix.h" -#define FLOAT_TO_BOOL(X) ( (X)==0.0F ? GL_FALSE : GL_TRUE ) -#define INT_TO_BOOL(I) ( (I)==0 ? GL_FALSE : GL_TRUE ) -#define ENUM_TO_BOOL(E) ( (E)==0 ? GL_FALSE : GL_TRUE ) +#define FLOAT_TO_BOOLEAN(X) ( (X) ? GL_TRUE : GL_FALSE ) -#ifdef SPECIALCAST -/* Needed for an Amiga compiler */ -#define ENUM_TO_FLOAT(X) ((GLfloat)(GLint)(X)) -#define ENUM_TO_DOUBLE(X) ((GLdouble)(GLint)(X)) -#else -/* all other compilers */ -#define ENUM_TO_FLOAT(X) ((GLfloat)(X)) -#define ENUM_TO_DOUBLE(X) ((GLdouble)(X)) -#endif +#define INT_TO_BOOLEAN(I) ( (I) ? GL_TRUE : GL_FALSE ) + +#define ENUM_TO_BOOLEAN(E) ( (E) ? GL_TRUE : GL_FALSE ) +#define ENUM_TO_INT(E) ( (GLint) (E) ) +#define ENUM_TO_FLOAT(E) ( (GLfloat) (E) ) + +#define BOOLEAN_TO_INT(B) ( (GLint) (B) ) +#define BOOLEAN_TO_FLOAT(B) ( (B) ? 1.0F : 0.0F ) -/* Check if named extension is enabled, if not generate error and return */ - -#define CHECK1(E1, str, PNAME) \ - if (!ctx->Extensions.E1) { \ - _mesa_error(ctx, GL_INVALID_VALUE, \ - "glGet" str "v(0x%x)", (int) PNAME); \ - return; \ - } - -#define CHECK2(E1, E2, str, PNAME) \ - if (!ctx->Extensions.E1 && !ctx->Extensions.E2) { \ - _mesa_error(ctx, GL_INVALID_VALUE, \ - "glGet" str "v(0x%x)", (int) PNAME); \ - return; \ - } - -#define CHECK_EXTENSION_B(EXTNAME, PNAME) \ - CHECK1(EXTNAME, "Boolean", PNAME ) - -#define CHECK_EXTENSION_I(EXTNAME, PNAME) \ - CHECK1(EXTNAME, "Integer", PNAME ) - -#define CHECK_EXTENSION_F(EXTNAME, PNAME) \ - CHECK1(EXTNAME, "Float", PNAME ) - -#define CHECK_EXTENSION_D(EXTNAME, PNAME) \ - CHECK1(EXTNAME, "Double", PNAME ) - -#define CHECK_EXTENSION2_B(EXT1, EXT2, PNAME) \ - CHECK2(EXT1, EXT2, "Boolean", PNAME) - -#define CHECK_EXTENSION2_I(EXT1, EXT2, PNAME) \ - CHECK2(EXT1, EXT2, "Integer", PNAME) - -#define CHECK_EXTENSION2_F(EXT1, EXT2, PNAME) \ - CHECK2(EXT1, EXT2, "Float", PNAME) - -#define CHECK_EXTENSION2_D(EXT1, EXT2, PNAME) \ - CHECK2(EXT1, EXT2, "Double", PNAME) - - - -static GLenum -pixel_texgen_mode(const GLcontext *ctx) -{ - if (ctx->Pixel.FragmentRgbSource == GL_CURRENT_RASTER_POSITION) { - if (ctx->Pixel.FragmentAlphaSource == GL_CURRENT_RASTER_POSITION) { - return GL_RGBA; - } - else { - return GL_RGB; - } - } - else { - if (ctx->Pixel.FragmentAlphaSource == GL_CURRENT_RASTER_POSITION) { - return GL_ALPHA; - } - else { - return GL_NONE; - } - } -} - - -/** - * Get the value(s) of a selected parameter. - * - * \param pname parameter to be returned. - * \param params will hold the value(s) of the speficifed parameter. - * - * \sa glGetBooleanv(). - * - * Tries to get the specified parameter via dd_function_table::GetBooleanv, - * otherwise gets the specified parameter from the current context, converting - * it value into GLboolean. +/* + * Check if named extension is enabled, if not generate error and return. */ +#define CHECK_EXT1(EXT1, FUNC) \ + if (!ctx->Extensions.EXT1) { \ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \ + return; \ + } + +/* + * Check if either of two extensions is enabled. + */ +#define CHECK_EXT2(EXT1, EXT2, FUNC) \ + if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) { \ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \ + return; \ + } + +/* + * Check if either of three extensions is enabled. + */ +#define CHECK_EXT3(EXT1, EXT2, EXT3, FUNC) \ + if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 && \ + !ctx->Extensions.EXT3) { \ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \ + return; \ + } + +/* + * Check if either of four extensions is enabled. + */ +#define CHECK_EXT4(EXT1, EXT2, EXT3, EXT4, FUNC) \ + if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 && \ + !ctx->Extensions.EXT3 && !ctx->Extensions.EXT4) { \ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \ + return; \ + } + + void GLAPIENTRY _mesa_GetBooleanv( GLenum pname, GLboolean *params ) { GET_CURRENT_CONTEXT(ctx); - GLuint i; - const GLuint clientUnit = ctx->Array.ActiveTexture; - const GLuint texUnit = ctx->Texture.CurrentUnit; - const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); if (!params) return; - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glGetBooleanv %s\n", _mesa_lookup_enum_by_nr(pname)); + if (ctx->NewState) + _mesa_update_state(ctx); - if (!ctx->_CurrentProgram) { - /* We need this in order to get correct results for - * GL_OCCLUSION_TEST_RESULT_HP. There might be other important cases. - */ - FLUSH_VERTICES(ctx, 0); - } - - if (ctx->Driver.GetBooleanv - && (*ctx->Driver.GetBooleanv)(ctx, pname, params)) + if (ctx->Driver.GetBooleanv && + ctx->Driver.GetBooleanv(ctx, pname, params)) return; switch (pname) { case GL_ACCUM_RED_BITS: - *params = INT_TO_BOOL(ctx->Visual.accumRedBits); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumRedBits); break; case GL_ACCUM_GREEN_BITS: - *params = INT_TO_BOOL(ctx->Visual.accumGreenBits); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumGreenBits); break; case GL_ACCUM_BLUE_BITS: - *params = INT_TO_BOOL(ctx->Visual.accumBlueBits); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumBlueBits); break; case GL_ACCUM_ALPHA_BITS: - *params = INT_TO_BOOL(ctx->Visual.accumAlphaBits); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.accumAlphaBits); break; case GL_ACCUM_CLEAR_VALUE: - params[0] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[0]); - params[1] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[1]); - params[2] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[2]); - params[3] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[3]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Accum.ClearColor[3]); break; case GL_ALPHA_BIAS: - *params = FLOAT_TO_BOOL(ctx->Pixel.AlphaBias); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.AlphaBias); break; case GL_ALPHA_BITS: - *params = INT_TO_BOOL(ctx->Visual.alphaBits); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.alphaBits); break; case GL_ALPHA_SCALE: - *params = FLOAT_TO_BOOL(ctx->Pixel.AlphaScale); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.AlphaScale); break; case GL_ALPHA_TEST: - *params = ctx->Color.AlphaEnabled; + params[0] = ctx->Color.AlphaEnabled; break; case GL_ALPHA_TEST_FUNC: - *params = ENUM_TO_BOOL(ctx->Color.AlphaFunc); + params[0] = ENUM_TO_BOOLEAN(ctx->Color.AlphaFunc); break; case GL_ALPHA_TEST_REF: - *params = ctx->Color.AlphaRef ? GL_TRUE : GL_FALSE; + params[0] = FLOAT_TO_BOOLEAN(ctx->Color.AlphaRef); break; case GL_ATTRIB_STACK_DEPTH: - *params = INT_TO_BOOL(ctx->AttribStackDepth); + params[0] = INT_TO_BOOLEAN(ctx->AttribStackDepth); break; case GL_AUTO_NORMAL: - *params = ctx->Eval.AutoNormal; + params[0] = ctx->Eval.AutoNormal; break; case GL_AUX_BUFFERS: - *params = (ctx->Visual.numAuxBuffers) ? GL_TRUE : GL_FALSE; + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.numAuxBuffers); break; case GL_BLEND: - *params = ctx->Color.BlendEnabled; + params[0] = ctx->Color.BlendEnabled; break; case GL_BLEND_DST: - *params = ENUM_TO_BOOL(ctx->Color.BlendDstRGB); + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstRGB); break; case GL_BLEND_SRC: - *params = ENUM_TO_BOOL(ctx->Color.BlendSrcRGB); + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcRGB); break; case GL_BLEND_SRC_RGB_EXT: - *params = ENUM_TO_BOOL(ctx->Color.BlendSrcRGB); + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcRGB); break; case GL_BLEND_DST_RGB_EXT: - *params = ENUM_TO_BOOL(ctx->Color.BlendDstRGB); + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstRGB); break; case GL_BLEND_SRC_ALPHA_EXT: - *params = ENUM_TO_BOOL(ctx->Color.BlendSrcA); + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendSrcA); break; case GL_BLEND_DST_ALPHA_EXT: - *params = ENUM_TO_BOOL(ctx->Color.BlendDstA); + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendDstA); break; case GL_BLEND_EQUATION: - *params = ENUM_TO_BOOL( ctx->Color.BlendEquationRGB ); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendEquationRGB ); + break; case GL_BLEND_EQUATION_ALPHA_EXT: - *params = ENUM_TO_BOOL( ctx->Color.BlendEquationA ); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Color.BlendEquationA ); + break; case GL_BLEND_COLOR_EXT: - params[0] = FLOAT_TO_BOOL( ctx->Color.BlendColor[0] ); - params[1] = FLOAT_TO_BOOL( ctx->Color.BlendColor[1] ); - params[2] = FLOAT_TO_BOOL( ctx->Color.BlendColor[2] ); - params[3] = FLOAT_TO_BOOL( ctx->Color.BlendColor[3] ); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Color.BlendColor[3]); + break; case GL_BLUE_BIAS: - *params = FLOAT_TO_BOOL(ctx->Pixel.BlueBias); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.BlueBias); break; case GL_BLUE_BITS: - *params = INT_TO_BOOL( ctx->Visual.blueBits ); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.blueBits); break; case GL_BLUE_SCALE: - *params = FLOAT_TO_BOOL(ctx->Pixel.BlueScale); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.BlueScale); break; case GL_CLIENT_ATTRIB_STACK_DEPTH: - *params = INT_TO_BOOL(ctx->ClientAttribStackDepth); + params[0] = INT_TO_BOOLEAN(ctx->ClientAttribStackDepth); break; case GL_CLIP_PLANE0: + params[0] = (ctx->Transform.ClipPlanesEnabled >> 0) & 1; + break; case GL_CLIP_PLANE1: + params[0] = (ctx->Transform.ClipPlanesEnabled >> 1) & 1; + break; case GL_CLIP_PLANE2: + params[0] = (ctx->Transform.ClipPlanesEnabled >> 2) & 1; + break; case GL_CLIP_PLANE3: + params[0] = (ctx->Transform.ClipPlanesEnabled >> 3) & 1; + break; case GL_CLIP_PLANE4: + params[0] = (ctx->Transform.ClipPlanesEnabled >> 4) & 1; + break; case GL_CLIP_PLANE5: - if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0))) - *params = GL_TRUE; - else - *params = GL_FALSE; + params[0] = (ctx->Transform.ClipPlanesEnabled >> 5) & 1; break; case GL_COLOR_CLEAR_VALUE: - params[0] = ctx->Color.ClearColor[0] ? GL_TRUE : GL_FALSE; - params[1] = ctx->Color.ClearColor[1] ? GL_TRUE : GL_FALSE; - params[2] = ctx->Color.ClearColor[2] ? GL_TRUE : GL_FALSE; - params[3] = ctx->Color.ClearColor[3] ? GL_TRUE : GL_FALSE; + params[0] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Color.ClearColor[3]); break; case GL_COLOR_MATERIAL: - *params = ctx->Light.ColorMaterialEnabled; + params[0] = ctx->Light.ColorMaterialEnabled; break; case GL_COLOR_MATERIAL_FACE: - *params = ENUM_TO_BOOL(ctx->Light.ColorMaterialFace); + params[0] = ENUM_TO_BOOLEAN(ctx->Light.ColorMaterialFace); break; case GL_COLOR_MATERIAL_PARAMETER: - *params = ENUM_TO_BOOL(ctx->Light.ColorMaterialMode); + params[0] = ENUM_TO_BOOLEAN(ctx->Light.ColorMaterialMode); break; case GL_COLOR_WRITEMASK: - params[0] = ctx->Color.ColorMask[RCOMP] ? GL_TRUE : GL_FALSE; - params[1] = ctx->Color.ColorMask[GCOMP] ? GL_TRUE : GL_FALSE; - params[2] = ctx->Color.ColorMask[BCOMP] ? GL_TRUE : GL_FALSE; - params[3] = ctx->Color.ColorMask[ACOMP] ? GL_TRUE : GL_FALSE; + params[0] = INT_TO_BOOLEAN(ctx->Color.ColorMask[RCOMP] ? 1 : 0); + params[1] = INT_TO_BOOLEAN(ctx->Color.ColorMask[GCOMP] ? 1 : 0); + params[2] = INT_TO_BOOLEAN(ctx->Color.ColorMask[BCOMP] ? 1 : 0); + params[3] = INT_TO_BOOLEAN(ctx->Color.ColorMask[ACOMP] ? 1 : 0); break; case GL_CULL_FACE: - *params = ctx->Polygon.CullFlag; + params[0] = ctx->Polygon.CullFlag; break; case GL_CULL_FACE_MODE: - *params = ENUM_TO_BOOL(ctx->Polygon.CullFaceMode); + params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.CullFaceMode); break; case GL_CURRENT_COLOR: - FLUSH_CURRENT(ctx, 0); - params[0] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]); - params[1] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]); - params[2] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]); - params[3] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]); + { + FLUSH_CURRENT(ctx, 0); + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]); + } break; case GL_CURRENT_INDEX: - FLUSH_CURRENT(ctx, 0); - *params = FLOAT_TO_BOOL(ctx->Current.Index); + { + FLUSH_CURRENT(ctx, 0); + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]); + } break; case GL_CURRENT_NORMAL: - FLUSH_CURRENT(ctx, 0); - params[0] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]); - params[1] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]); - params[2] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]); + { + FLUSH_CURRENT(ctx, 0); + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]); + } break; case GL_CURRENT_RASTER_COLOR: - params[0] = FLOAT_TO_BOOL(ctx->Current.RasterColor[0]); - params[1] = FLOAT_TO_BOOL(ctx->Current.RasterColor[1]); - params[2] = FLOAT_TO_BOOL(ctx->Current.RasterColor[2]); - params[3] = FLOAT_TO_BOOL(ctx->Current.RasterColor[3]); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterColor[3]); + break; case GL_CURRENT_RASTER_DISTANCE: - *params = FLOAT_TO_BOOL(ctx->Current.RasterDistance); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterDistance); + break; case GL_CURRENT_RASTER_INDEX: - *params = FLOAT_TO_BOOL(ctx->Current.RasterIndex); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterIndex); + break; case GL_CURRENT_RASTER_POSITION: - params[0] = FLOAT_TO_BOOL(ctx->Current.RasterPos[0]); - params[1] = FLOAT_TO_BOOL(ctx->Current.RasterPos[1]); - params[2] = FLOAT_TO_BOOL(ctx->Current.RasterPos[2]); - params[3] = FLOAT_TO_BOOL(ctx->Current.RasterPos[3]); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterPos[3]); + break; + case GL_CURRENT_RASTER_SECONDARY_COLOR: + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterSecondaryColor[3]); + break; case GL_CURRENT_RASTER_TEXTURE_COORDS: - params[0] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoords[texUnit][0]); - params[1] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoords[texUnit][1]); - params[2] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoords[texUnit][2]); - params[3] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoords[texUnit][3]); - break; + { + const GLuint texUnit = ctx->Texture.CurrentUnit; + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Current.RasterTexCoords[texUnit][3]); + } + break; case GL_CURRENT_RASTER_POSITION_VALID: - *params = ctx->Current.RasterPosValid; - break; + params[0] = ctx->Current.RasterPosValid; + break; case GL_CURRENT_TEXTURE_COORDS: - FLUSH_CURRENT(ctx, 0); - params[0] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]); - params[1] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]); - params[2] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]); - params[3] = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]); - break; + { + const GLuint texUnit = ctx->Texture.CurrentUnit; + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]); + } + break; case GL_DEPTH_BIAS: - *params = FLOAT_TO_BOOL(ctx->Pixel.DepthBias); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.DepthBias); + break; case GL_DEPTH_BITS: - *params = INT_TO_BOOL(ctx->Visual.depthBits); - break; + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.depthBits); + break; case GL_DEPTH_CLEAR_VALUE: - *params = FLOAT_TO_BOOL(ctx->Depth.Clear); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Depth.Clear); + break; case GL_DEPTH_FUNC: - *params = ENUM_TO_BOOL(ctx->Depth.Func); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Depth.Func); + break; case GL_DEPTH_RANGE: - params[0] = FLOAT_TO_BOOL(ctx->Viewport.Near); - params[1] = FLOAT_TO_BOOL(ctx->Viewport.Far); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Viewport.Near); + params[1] = FLOAT_TO_BOOLEAN(ctx->Viewport.Far); + break; case GL_DEPTH_SCALE: - *params = FLOAT_TO_BOOL(ctx->Pixel.DepthScale); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.DepthScale); + break; case GL_DEPTH_TEST: - *params = ctx->Depth.Test; - break; + params[0] = ctx->Depth.Test; + break; case GL_DEPTH_WRITEMASK: - *params = ctx->Depth.Mask; - break; + params[0] = ctx->Depth.Mask; + break; case GL_DITHER: - *params = ctx->Color.DitherFlag; - break; + params[0] = ctx->Color.DitherFlag; + break; case GL_DOUBLEBUFFER: - *params = ctx->Visual.doubleBufferMode; - break; + params[0] = ctx->DrawBuffer->Visual.doubleBufferMode; + break; case GL_DRAW_BUFFER: - *params = ENUM_TO_BOOL(ctx->Color.DrawBuffer[0]); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->DrawBuffer->ColorDrawBuffer[0]); + break; case GL_EDGE_FLAG: - FLUSH_CURRENT(ctx, 0); - *params = ctx->Current.EdgeFlag; - break; + { + FLUSH_CURRENT(ctx, 0); + params[0] = ctx->Current.EdgeFlag; + } + break; case GL_FEEDBACK_BUFFER_SIZE: - *params = INT_TO_BOOL(ctx->Feedback.BufferSize); + params[0] = INT_TO_BOOLEAN(ctx->Feedback.BufferSize); break; case GL_FEEDBACK_BUFFER_TYPE: - *params = INT_TO_BOOL(ctx->Feedback.Type); + params[0] = ENUM_TO_BOOLEAN(ctx->Feedback.Type); break; case GL_FOG: - *params = ctx->Fog.Enabled; - break; + params[0] = ctx->Fog.Enabled; + break; case GL_FOG_COLOR: - params[0] = FLOAT_TO_BOOL(ctx->Fog.Color[0]); - params[1] = FLOAT_TO_BOOL(ctx->Fog.Color[1]); - params[2] = FLOAT_TO_BOOL(ctx->Fog.Color[2]); - params[3] = FLOAT_TO_BOOL(ctx->Fog.Color[3]); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Fog.Color[3]); + break; case GL_FOG_DENSITY: - *params = FLOAT_TO_BOOL(ctx->Fog.Density); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Density); + break; case GL_FOG_END: - *params = FLOAT_TO_BOOL(ctx->Fog.End); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.End); + break; case GL_FOG_HINT: - *params = ENUM_TO_BOOL(ctx->Hint.Fog); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Hint.Fog); + break; case GL_FOG_INDEX: - *params = FLOAT_TO_BOOL(ctx->Fog.Index); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Index); + break; case GL_FOG_MODE: - *params = ENUM_TO_BOOL(ctx->Fog.Mode); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Fog.Mode); + break; case GL_FOG_START: - *params = FLOAT_TO_BOOL(ctx->Fog.End); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Fog.Start); + break; case GL_FRONT_FACE: - *params = ENUM_TO_BOOL(ctx->Polygon.FrontFace); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.FrontFace); + break; case GL_GREEN_BIAS: - *params = FLOAT_TO_BOOL(ctx->Pixel.GreenBias); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.GreenBias); + break; case GL_GREEN_BITS: - *params = INT_TO_BOOL( ctx->Visual.greenBits ); - break; + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.greenBits); + break; case GL_GREEN_SCALE: - *params = FLOAT_TO_BOOL(ctx->Pixel.GreenScale); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.GreenScale); + break; case GL_INDEX_BITS: - *params = INT_TO_BOOL( ctx->Visual.indexBits ); - break; + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.indexBits); + break; case GL_INDEX_CLEAR_VALUE: - *params = INT_TO_BOOL(ctx->Color.ClearIndex); - break; + params[0] = INT_TO_BOOLEAN(ctx->Color.ClearIndex); + break; case GL_INDEX_MODE: - *params = ctx->Visual.rgbMode ? GL_FALSE : GL_TRUE; - break; + params[0] = !ctx->DrawBuffer->Visual.rgbMode; + break; case GL_INDEX_OFFSET: - *params = INT_TO_BOOL(ctx->Pixel.IndexOffset); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.IndexOffset); + break; case GL_INDEX_SHIFT: - *params = INT_TO_BOOL(ctx->Pixel.IndexShift); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.IndexShift); + break; case GL_INDEX_WRITEMASK: - *params = INT_TO_BOOL(ctx->Color.IndexMask); - break; + params[0] = INT_TO_BOOLEAN(ctx->Color.IndexMask); + break; case GL_LIGHT0: + params[0] = ctx->Light.Light[0].Enabled; + break; case GL_LIGHT1: + params[0] = ctx->Light.Light[1].Enabled; + break; case GL_LIGHT2: + params[0] = ctx->Light.Light[2].Enabled; + break; case GL_LIGHT3: + params[0] = ctx->Light.Light[3].Enabled; + break; case GL_LIGHT4: + params[0] = ctx->Light.Light[4].Enabled; + break; case GL_LIGHT5: + params[0] = ctx->Light.Light[5].Enabled; + break; case GL_LIGHT6: + params[0] = ctx->Light.Light[6].Enabled; + break; case GL_LIGHT7: - *params = ctx->Light.Light[pname-GL_LIGHT0].Enabled; - break; + params[0] = ctx->Light.Light[7].Enabled; + break; case GL_LIGHTING: - *params = ctx->Light.Enabled; - break; + params[0] = ctx->Light.Enabled; + break; case GL_LIGHT_MODEL_AMBIENT: - params[0] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[0]); - params[1] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[1]); - params[2] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[2]); - params[3] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[3]); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Light.Model.Ambient[3]); + break; case GL_LIGHT_MODEL_COLOR_CONTROL: - params[0] = ENUM_TO_BOOL(ctx->Light.Model.ColorControl); + params[0] = ENUM_TO_BOOLEAN(ctx->Light.Model.ColorControl); break; case GL_LIGHT_MODEL_LOCAL_VIEWER: - *params = ctx->Light.Model.LocalViewer; - break; + params[0] = ctx->Light.Model.LocalViewer; + break; case GL_LIGHT_MODEL_TWO_SIDE: - *params = ctx->Light.Model.TwoSide; - break; + params[0] = ctx->Light.Model.TwoSide; + break; case GL_LINE_SMOOTH: - *params = ctx->Line.SmoothFlag; - break; + params[0] = ctx->Line.SmoothFlag; + break; case GL_LINE_SMOOTH_HINT: - *params = ENUM_TO_BOOL(ctx->Hint.LineSmooth); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Hint.LineSmooth); + break; case GL_LINE_STIPPLE: - *params = ctx->Line.StippleFlag; - break; + params[0] = ctx->Line.StippleFlag; + break; case GL_LINE_STIPPLE_PATTERN: - *params = INT_TO_BOOL(ctx->Line.StipplePattern); - break; + params[0] = INT_TO_BOOLEAN(ctx->Line.StipplePattern); + break; case GL_LINE_STIPPLE_REPEAT: - *params = INT_TO_BOOL(ctx->Line.StippleFactor); - break; + params[0] = INT_TO_BOOLEAN(ctx->Line.StippleFactor); + break; case GL_LINE_WIDTH: - *params = FLOAT_TO_BOOL(ctx->Line.Width); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Line.Width); + break; case GL_LINE_WIDTH_GRANULARITY: - *params = FLOAT_TO_BOOL(ctx->Const.LineWidthGranularity); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.LineWidthGranularity); + break; case GL_LINE_WIDTH_RANGE: - params[0] = FLOAT_TO_BOOL(ctx->Const.MinLineWidthAA); - params[1] = FLOAT_TO_BOOL(ctx->Const.MaxLineWidthAA); + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinLineWidthAA); + params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxLineWidthAA); break; case GL_ALIASED_LINE_WIDTH_RANGE: - params[0] = FLOAT_TO_BOOL(ctx->Const.MinLineWidth); - params[1] = FLOAT_TO_BOOL(ctx->Const.MaxLineWidth); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinLineWidth); + params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxLineWidth); + break; case GL_LIST_BASE: - *params = INT_TO_BOOL(ctx->List.ListBase); - break; + params[0] = INT_TO_BOOLEAN(ctx->List.ListBase); + break; case GL_LIST_INDEX: - *params = INT_TO_BOOL( ctx->ListState.CurrentListNum ); - break; + params[0] = INT_TO_BOOLEAN(ctx->ListState.CurrentListNum); + break; case GL_LIST_MODE: + { + GLenum mode; if (!ctx->CompileFlag) - *params = 0; + mode = 0; else if (ctx->ExecuteFlag) - *params = ENUM_TO_BOOL(GL_COMPILE_AND_EXECUTE); + mode = GL_COMPILE_AND_EXECUTE; else - *params = ENUM_TO_BOOL(GL_COMPILE); - break; + mode = GL_COMPILE; + params[0] = ENUM_TO_BOOLEAN(mode); + } + break; case GL_INDEX_LOGIC_OP: - *params = ctx->Color.IndexLogicOpEnabled; - break; + params[0] = ctx->Color.IndexLogicOpEnabled; + break; case GL_COLOR_LOGIC_OP: - *params = ctx->Color.ColorLogicOpEnabled; - break; + params[0] = ctx->Color.ColorLogicOpEnabled; + break; case GL_LOGIC_OP_MODE: - *params = ENUM_TO_BOOL(ctx->Color.LogicOp); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Color.LogicOp); + break; case GL_MAP1_COLOR_4: - *params = ctx->Eval.Map1Color4; - break; + params[0] = ctx->Eval.Map1Color4; + break; case GL_MAP1_GRID_DOMAIN: - params[0] = FLOAT_TO_BOOL(ctx->Eval.MapGrid1u1); - params[1] = FLOAT_TO_BOOL(ctx->Eval.MapGrid1u2); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid1u1); + params[1] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid1u2); + break; case GL_MAP1_GRID_SEGMENTS: - *params = INT_TO_BOOL(ctx->Eval.MapGrid1un); - break; + params[0] = INT_TO_BOOLEAN(ctx->Eval.MapGrid1un); + break; case GL_MAP1_INDEX: - *params = ctx->Eval.Map1Index; - break; + params[0] = ctx->Eval.Map1Index; + break; case GL_MAP1_NORMAL: - *params = ctx->Eval.Map1Normal; - break; + params[0] = ctx->Eval.Map1Normal; + break; case GL_MAP1_TEXTURE_COORD_1: - *params = ctx->Eval.Map1TextureCoord1; - break; + params[0] = ctx->Eval.Map1TextureCoord1; + break; case GL_MAP1_TEXTURE_COORD_2: - *params = ctx->Eval.Map1TextureCoord2; - break; + params[0] = ctx->Eval.Map1TextureCoord2; + break; case GL_MAP1_TEXTURE_COORD_3: - *params = ctx->Eval.Map1TextureCoord3; - break; + params[0] = ctx->Eval.Map1TextureCoord3; + break; case GL_MAP1_TEXTURE_COORD_4: - *params = ctx->Eval.Map1TextureCoord4; - break; + params[0] = ctx->Eval.Map1TextureCoord4; + break; case GL_MAP1_VERTEX_3: - *params = ctx->Eval.Map1Vertex3; - break; + params[0] = ctx->Eval.Map1Vertex3; + break; case GL_MAP1_VERTEX_4: - *params = ctx->Eval.Map1Vertex4; - break; + params[0] = ctx->Eval.Map1Vertex4; + break; case GL_MAP2_COLOR_4: - *params = ctx->Eval.Map2Color4; - break; + params[0] = ctx->Eval.Map2Color4; + break; case GL_MAP2_GRID_DOMAIN: - params[0] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2u1); - params[1] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2u2); - params[2] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2v1); - params[3] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2v2); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2u1); + params[1] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2u2); + params[2] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2v1); + params[3] = FLOAT_TO_BOOLEAN(ctx->Eval.MapGrid2v2); + break; case GL_MAP2_GRID_SEGMENTS: - params[0] = INT_TO_BOOL(ctx->Eval.MapGrid2un); - params[1] = INT_TO_BOOL(ctx->Eval.MapGrid2vn); - break; + params[0] = INT_TO_BOOLEAN(ctx->Eval.MapGrid2un); + params[1] = INT_TO_BOOLEAN(ctx->Eval.MapGrid2vn); + break; case GL_MAP2_INDEX: - *params = ctx->Eval.Map2Index; - break; + params[0] = ctx->Eval.Map2Index; + break; case GL_MAP2_NORMAL: - *params = ctx->Eval.Map2Normal; - break; + params[0] = ctx->Eval.Map2Normal; + break; case GL_MAP2_TEXTURE_COORD_1: - *params = ctx->Eval.Map2TextureCoord1; - break; + params[0] = ctx->Eval.Map2TextureCoord1; + break; case GL_MAP2_TEXTURE_COORD_2: - *params = ctx->Eval.Map2TextureCoord2; - break; + params[0] = ctx->Eval.Map2TextureCoord2; + break; case GL_MAP2_TEXTURE_COORD_3: - *params = ctx->Eval.Map2TextureCoord3; - break; + params[0] = ctx->Eval.Map2TextureCoord3; + break; case GL_MAP2_TEXTURE_COORD_4: - *params = ctx->Eval.Map2TextureCoord4; - break; + params[0] = ctx->Eval.Map2TextureCoord4; + break; case GL_MAP2_VERTEX_3: - *params = ctx->Eval.Map2Vertex3; - break; + params[0] = ctx->Eval.Map2Vertex3; + break; case GL_MAP2_VERTEX_4: - *params = ctx->Eval.Map2Vertex4; - break; + params[0] = ctx->Eval.Map2Vertex4; + break; case GL_MAP_COLOR: - *params = ctx->Pixel.MapColorFlag; - break; + params[0] = ctx->Pixel.MapColorFlag; + break; case GL_MAP_STENCIL: - *params = ctx->Pixel.MapStencilFlag; - break; + params[0] = ctx->Pixel.MapStencilFlag; + break; case GL_MATRIX_MODE: - *params = ENUM_TO_BOOL( ctx->Transform.MatrixMode ); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Transform.MatrixMode); + break; case GL_MAX_ATTRIB_STACK_DEPTH: - *params = INT_TO_BOOL(MAX_ATTRIB_STACK_DEPTH); - break; + params[0] = INT_TO_BOOLEAN(MAX_ATTRIB_STACK_DEPTH); + break; case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: - *params = INT_TO_BOOL( MAX_CLIENT_ATTRIB_STACK_DEPTH); + params[0] = INT_TO_BOOLEAN(MAX_CLIENT_ATTRIB_STACK_DEPTH); break; case GL_MAX_CLIP_PLANES: - *params = INT_TO_BOOL(ctx->Const.MaxClipPlanes); - break; - case GL_MAX_ELEMENTS_VERTICES: /* GL_VERSION_1_2 */ - *params = INT_TO_BOOL(ctx->Const.MaxArrayLockSize); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxClipPlanes); break; - case GL_MAX_ELEMENTS_INDICES: /* GL_VERSION_1_2 */ - *params = INT_TO_BOOL(ctx->Const.MaxArrayLockSize); + case GL_MAX_ELEMENTS_VERTICES: + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxArrayLockSize); + break; + case GL_MAX_ELEMENTS_INDICES: + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxArrayLockSize); break; case GL_MAX_EVAL_ORDER: - *params = INT_TO_BOOL(MAX_EVAL_ORDER); - break; + params[0] = INT_TO_BOOLEAN(MAX_EVAL_ORDER); + break; case GL_MAX_LIGHTS: - *params = INT_TO_BOOL(ctx->Const.MaxLights); - break; + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxLights); + break; case GL_MAX_LIST_NESTING: - *params = INT_TO_BOOL(MAX_LIST_NESTING); - break; + params[0] = INT_TO_BOOLEAN(MAX_LIST_NESTING); + break; case GL_MAX_MODELVIEW_STACK_DEPTH: - *params = INT_TO_BOOL(MAX_MODELVIEW_STACK_DEPTH); - break; + params[0] = INT_TO_BOOLEAN(MAX_MODELVIEW_STACK_DEPTH); + break; case GL_MAX_NAME_STACK_DEPTH: - *params = INT_TO_BOOL(MAX_NAME_STACK_DEPTH); - break; + params[0] = INT_TO_BOOLEAN(MAX_NAME_STACK_DEPTH); + break; case GL_MAX_PIXEL_MAP_TABLE: - *params = INT_TO_BOOL(MAX_PIXEL_MAP_TABLE); - break; + params[0] = INT_TO_BOOLEAN(MAX_PIXEL_MAP_TABLE); + break; case GL_MAX_PROJECTION_STACK_DEPTH: - *params = INT_TO_BOOL(MAX_PROJECTION_STACK_DEPTH); - break; + params[0] = INT_TO_BOOLEAN(MAX_PROJECTION_STACK_DEPTH); + break; case GL_MAX_TEXTURE_SIZE: - *params = INT_TO_BOOL(1 << (ctx->Const.MaxTextureLevels - 1)); - break; + params[0] = INT_TO_BOOLEAN(1 << (ctx->Const.MaxTextureLevels - 1)); + break; case GL_MAX_3D_TEXTURE_SIZE: - *params = INT_TO_BOOL(1 << (ctx->Const.Max3DTextureLevels - 1)); - break; + params[0] = INT_TO_BOOLEAN(1 << (ctx->Const.Max3DTextureLevels - 1)); + break; case GL_MAX_TEXTURE_STACK_DEPTH: - *params = INT_TO_BOOL(MAX_TEXTURE_STACK_DEPTH); - break; + params[0] = INT_TO_BOOLEAN(MAX_TEXTURE_STACK_DEPTH); + break; case GL_MAX_VIEWPORT_DIMS: - params[0] = INT_TO_BOOL(MAX_WIDTH); - params[1] = INT_TO_BOOL(MAX_HEIGHT); - break; + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxViewportWidth); + params[1] = INT_TO_BOOLEAN(ctx->Const.MaxViewportHeight); + break; case GL_MODELVIEW_MATRIX: - for (i=0;i<16;i++) { - params[i] = FLOAT_TO_BOOL(ctx->ModelviewMatrixStack.Top->m[i]); - } - break; + { + const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[1]); + params[2] = FLOAT_TO_BOOLEAN(matrix[2]); + params[3] = FLOAT_TO_BOOLEAN(matrix[3]); + params[4] = FLOAT_TO_BOOLEAN(matrix[4]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[6]); + params[7] = FLOAT_TO_BOOLEAN(matrix[7]); + params[8] = FLOAT_TO_BOOLEAN(matrix[8]); + params[9] = FLOAT_TO_BOOLEAN(matrix[9]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[11]); + params[12] = FLOAT_TO_BOOLEAN(matrix[12]); + params[13] = FLOAT_TO_BOOLEAN(matrix[13]); + params[14] = FLOAT_TO_BOOLEAN(matrix[14]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); + } + break; case GL_MODELVIEW_STACK_DEPTH: - *params = INT_TO_BOOL(ctx->ModelviewMatrixStack.Depth + 1); - break; + params[0] = INT_TO_BOOLEAN(ctx->ModelviewMatrixStack.Depth + 1); + break; case GL_NAME_STACK_DEPTH: - *params = INT_TO_BOOL(ctx->Select.NameStackDepth); - break; + params[0] = INT_TO_BOOLEAN(ctx->Select.NameStackDepth); + break; case GL_NORMALIZE: - *params = ctx->Transform.Normalize; - break; + params[0] = ctx->Transform.Normalize; + break; case GL_PACK_ALIGNMENT: - *params = INT_TO_BOOL(ctx->Pack.Alignment); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pack.Alignment); + break; case GL_PACK_LSB_FIRST: - *params = ctx->Pack.LsbFirst; - break; + params[0] = ctx->Pack.LsbFirst; + break; case GL_PACK_ROW_LENGTH: - *params = INT_TO_BOOL(ctx->Pack.RowLength); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pack.RowLength); + break; case GL_PACK_SKIP_PIXELS: - *params = INT_TO_BOOL(ctx->Pack.SkipPixels); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipPixels); + break; case GL_PACK_SKIP_ROWS: - *params = INT_TO_BOOL(ctx->Pack.SkipRows); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipRows); + break; case GL_PACK_SWAP_BYTES: - *params = ctx->Pack.SwapBytes; - break; + params[0] = ctx->Pack.SwapBytes; + break; case GL_PACK_SKIP_IMAGES_EXT: - *params = ctx->Pack.SkipImages; + params[0] = INT_TO_BOOLEAN(ctx->Pack.SkipImages); break; case GL_PACK_IMAGE_HEIGHT_EXT: - *params = ctx->Pack.ImageHeight; + params[0] = INT_TO_BOOLEAN(ctx->Pack.ImageHeight); break; case GL_PACK_INVERT_MESA: - *params = ctx->Pack.Invert; + params[0] = ctx->Pack.Invert; break; case GL_PERSPECTIVE_CORRECTION_HINT: - *params = ENUM_TO_BOOL(ctx->Hint.PerspectiveCorrection); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PerspectiveCorrection); + break; case GL_PIXEL_MAP_A_TO_A_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapAtoAsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapAtoAsize); + break; case GL_PIXEL_MAP_B_TO_B_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapBtoBsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapBtoBsize); + break; case GL_PIXEL_MAP_G_TO_G_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapGtoGsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapGtoGsize); + break; case GL_PIXEL_MAP_I_TO_A_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapItoAsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapItoAsize); + break; case GL_PIXEL_MAP_I_TO_B_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapItoBsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapItoBsize); + break; case GL_PIXEL_MAP_I_TO_G_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapItoGsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapItoGsize); + break; case GL_PIXEL_MAP_I_TO_I_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapItoIsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapItoIsize); + break; case GL_PIXEL_MAP_I_TO_R_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapItoRsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapItoRsize); + break; case GL_PIXEL_MAP_R_TO_R_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapRtoRsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapRtoRsize); + break; case GL_PIXEL_MAP_S_TO_S_SIZE: - *params = INT_TO_BOOL(ctx->Pixel.MapStoSsize); - break; + params[0] = INT_TO_BOOLEAN(ctx->Pixel.MapStoSsize); + break; case GL_POINT_SIZE: - *params = FLOAT_TO_BOOL(ctx->Point.Size); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Size); + break; case GL_POINT_SIZE_GRANULARITY: - *params = FLOAT_TO_BOOL(ctx->Const.PointSizeGranularity ); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.PointSizeGranularity); + break; case GL_POINT_SIZE_RANGE: - params[0] = FLOAT_TO_BOOL(ctx->Const.MinPointSizeAA); - params[1] = FLOAT_TO_BOOL(ctx->Const.MaxPointSizeAA); + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinPointSizeAA); + params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxPointSizeAA); break; case GL_ALIASED_POINT_SIZE_RANGE: - params[0] = FLOAT_TO_BOOL(ctx->Const.MinPointSize); - params[1] = FLOAT_TO_BOOL(ctx->Const.MaxPointSize); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MinPointSize); + params[1] = FLOAT_TO_BOOLEAN(ctx->Const.MaxPointSize); + break; case GL_POINT_SMOOTH: - *params = ctx->Point.SmoothFlag; - break; + params[0] = ctx->Point.SmoothFlag; + break; case GL_POINT_SMOOTH_HINT: - *params = ENUM_TO_BOOL(ctx->Hint.PointSmooth); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PointSmooth); + break; case GL_POINT_SIZE_MIN_EXT: - *params = FLOAT_TO_BOOL(ctx->Point.MinSize); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Point.MinSize); + break; case GL_POINT_SIZE_MAX_EXT: - *params = FLOAT_TO_BOOL(ctx->Point.MaxSize); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Point.MaxSize); + break; case GL_POINT_FADE_THRESHOLD_SIZE_EXT: - *params = FLOAT_TO_BOOL(ctx->Point.Threshold); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Threshold); + break; case GL_DISTANCE_ATTENUATION_EXT: - params[0] = FLOAT_TO_BOOL(ctx->Point.Params[0]); - params[1] = FLOAT_TO_BOOL(ctx->Point.Params[1]); - params[2] = FLOAT_TO_BOOL(ctx->Point.Params[2]); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Point.Params[0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Point.Params[1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Point.Params[2]); + break; case GL_POLYGON_MODE: - params[0] = ENUM_TO_BOOL(ctx->Polygon.FrontMode); - params[1] = ENUM_TO_BOOL(ctx->Polygon.BackMode); - break; - case GL_POLYGON_OFFSET_BIAS_EXT: /* GL_EXT_polygon_offset */ - *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetUnits ); + params[0] = ENUM_TO_BOOLEAN(ctx->Polygon.FrontMode); + params[1] = ENUM_TO_BOOLEAN(ctx->Polygon.BackMode); + break; + case GL_POLYGON_OFFSET_BIAS_EXT: + params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetUnits); break; case GL_POLYGON_OFFSET_FACTOR: - *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetFactor ); + params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetFactor ); break; case GL_POLYGON_OFFSET_UNITS: - *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetUnits ); + params[0] = FLOAT_TO_BOOLEAN(ctx->Polygon.OffsetUnits ); break; case GL_POLYGON_SMOOTH: - *params = ctx->Polygon.SmoothFlag; - break; + params[0] = ctx->Polygon.SmoothFlag; + break; case GL_POLYGON_SMOOTH_HINT: - *params = ENUM_TO_BOOL(ctx->Hint.PolygonSmooth); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Hint.PolygonSmooth); + break; case GL_POLYGON_STIPPLE: - *params = ctx->Polygon.StippleFlag; - break; + params[0] = ctx->Polygon.StippleFlag; + break; case GL_PROJECTION_MATRIX: - for (i=0;i<16;i++) { - params[i] = FLOAT_TO_BOOL(ctx->ProjectionMatrixStack.Top->m[i]); - } - break; + { + const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[1]); + params[2] = FLOAT_TO_BOOLEAN(matrix[2]); + params[3] = FLOAT_TO_BOOLEAN(matrix[3]); + params[4] = FLOAT_TO_BOOLEAN(matrix[4]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[6]); + params[7] = FLOAT_TO_BOOLEAN(matrix[7]); + params[8] = FLOAT_TO_BOOLEAN(matrix[8]); + params[9] = FLOAT_TO_BOOLEAN(matrix[9]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[11]); + params[12] = FLOAT_TO_BOOLEAN(matrix[12]); + params[13] = FLOAT_TO_BOOLEAN(matrix[13]); + params[14] = FLOAT_TO_BOOLEAN(matrix[14]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); + } + break; case GL_PROJECTION_STACK_DEPTH: - *params = INT_TO_BOOL(ctx->ProjectionMatrixStack.Depth + 1); - break; + params[0] = INT_TO_BOOLEAN(ctx->ProjectionMatrixStack.Depth + 1); + break; case GL_READ_BUFFER: - *params = ENUM_TO_BOOL(ctx->Pixel.ReadBuffer); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->ReadBuffer->ColorReadBuffer); + break; case GL_RED_BIAS: - *params = FLOAT_TO_BOOL(ctx->Pixel.RedBias); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedBias); + break; case GL_RED_BITS: - *params = INT_TO_BOOL( ctx->Visual.redBits ); - break; + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.redBits); + break; case GL_RED_SCALE: - *params = FLOAT_TO_BOOL(ctx->Pixel.RedScale); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.RedScale); + break; case GL_RENDER_MODE: - *params = ENUM_TO_BOOL(ctx->RenderMode); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->RenderMode); + break; case GL_RESCALE_NORMAL: - *params = ctx->Transform.RescaleNormals; + params[0] = ctx->Transform.RescaleNormals; break; case GL_RGBA_MODE: - *params = ctx->Visual.rgbMode; - break; + params[0] = ctx->DrawBuffer->Visual.rgbMode; + break; case GL_SCISSOR_BOX: - params[0] = INT_TO_BOOL(ctx->Scissor.X); - params[1] = INT_TO_BOOL(ctx->Scissor.Y); - params[2] = INT_TO_BOOL(ctx->Scissor.Width); - params[3] = INT_TO_BOOL(ctx->Scissor.Height); - break; + params[0] = INT_TO_BOOLEAN(ctx->Scissor.X); + params[1] = INT_TO_BOOLEAN(ctx->Scissor.Y); + params[2] = INT_TO_BOOLEAN(ctx->Scissor.Width); + params[3] = INT_TO_BOOLEAN(ctx->Scissor.Height); + break; case GL_SCISSOR_TEST: - *params = ctx->Scissor.Enabled; - break; + params[0] = ctx->Scissor.Enabled; + break; case GL_SELECTION_BUFFER_SIZE: - *params = INT_TO_BOOL(ctx->Select.BufferSize); + params[0] = INT_TO_BOOLEAN(ctx->Select.BufferSize); break; case GL_SHADE_MODEL: - *params = ENUM_TO_BOOL(ctx->Light.ShadeModel); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Light.ShadeModel); + break; case GL_SHARED_TEXTURE_PALETTE_EXT: - *params = ctx->Texture.SharedPalette; + params[0] = ctx->Texture.SharedPalette; break; case GL_STENCIL_BITS: - *params = INT_TO_BOOL(ctx->Visual.stencilBits); - break; + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.stencilBits); + break; case GL_STENCIL_CLEAR_VALUE: - *params = INT_TO_BOOL(ctx->Stencil.Clear); - break; + params[0] = INT_TO_BOOLEAN(ctx->Stencil.Clear); + break; case GL_STENCIL_FAIL: - *params = ENUM_TO_BOOL(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_FUNC: - *params = ENUM_TO_BOOL(ctx->Stencil.Function[ctx->Stencil.ActiveFace]); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.Function[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_PASS_DEPTH_FAIL: - *params = ENUM_TO_BOOL(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_PASS_DEPTH_PASS: - *params = ENUM_TO_BOOL(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_REF: - *params = INT_TO_BOOL(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]); - break; + params[0] = INT_TO_BOOLEAN(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_TEST: - *params = ctx->Stencil.Enabled; - break; + params[0] = ctx->Stencil.Enabled; + break; case GL_STENCIL_VALUE_MASK: - *params = INT_TO_BOOL(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]); - break; + params[0] = INT_TO_BOOLEAN(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_WRITEMASK: - *params = INT_TO_BOOL(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]); - break; + params[0] = INT_TO_BOOLEAN(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]); + break; case GL_STEREO: - *params = ctx->Visual.stereoMode; - break; + params[0] = ctx->DrawBuffer->Visual.stereoMode; + break; case GL_SUBPIXEL_BITS: - *params = INT_TO_BOOL(ctx->Const.SubPixelBits); - break; + params[0] = INT_TO_BOOLEAN(ctx->Const.SubPixelBits); + break; case GL_TEXTURE_1D: - *params = _mesa_IsEnabled(GL_TEXTURE_1D); - break; + params[0] = _mesa_IsEnabled(GL_TEXTURE_1D); + break; case GL_TEXTURE_2D: - *params = _mesa_IsEnabled(GL_TEXTURE_2D); - break; + params[0] = _mesa_IsEnabled(GL_TEXTURE_2D); + break; case GL_TEXTURE_3D: - *params = _mesa_IsEnabled(GL_TEXTURE_3D); - break; + params[0] = _mesa_IsEnabled(GL_TEXTURE_3D); + break; case GL_TEXTURE_BINDING_1D: - *params = INT_TO_BOOL(textureUnit->Current1D->Name); - break; + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name); + break; case GL_TEXTURE_BINDING_2D: - *params = INT_TO_BOOL(textureUnit->Current2D->Name); - break; + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name); + break; case GL_TEXTURE_BINDING_3D: - *params = INT_TO_BOOL(textureUnit->Current3D->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name); break; case GL_TEXTURE_ENV_COLOR: { - params[0] = FLOAT_TO_BOOL(textureUnit->EnvColor[0]); - params[1] = FLOAT_TO_BOOL(textureUnit->EnvColor[1]); - params[2] = FLOAT_TO_BOOL(textureUnit->EnvColor[2]); - params[3] = FLOAT_TO_BOOL(textureUnit->EnvColor[3]); + const GLfloat *color = ctx->Texture.Unit[ctx->Texture.CurrentUnit].EnvColor; + params[0] = FLOAT_TO_BOOLEAN(color[0]); + params[1] = FLOAT_TO_BOOLEAN(color[1]); + params[2] = FLOAT_TO_BOOLEAN(color[2]); + params[3] = FLOAT_TO_BOOLEAN(color[3]); } - break; + break; case GL_TEXTURE_ENV_MODE: - *params = ENUM_TO_BOOL(textureUnit->EnvMode); - break; + params[0] = ENUM_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].EnvMode); + break; case GL_TEXTURE_GEN_S: - *params = (textureUnit->TexGenEnabled & S_BIT) ? GL_TRUE : GL_FALSE; - break; + params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0); + break; case GL_TEXTURE_GEN_T: - *params = (textureUnit->TexGenEnabled & T_BIT) ? GL_TRUE : GL_FALSE; - break; + params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0); + break; case GL_TEXTURE_GEN_R: - *params = (textureUnit->TexGenEnabled & R_BIT) ? GL_TRUE : GL_FALSE; - break; + params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0); + break; case GL_TEXTURE_GEN_Q: - *params = (textureUnit->TexGenEnabled & Q_BIT) ? GL_TRUE : GL_FALSE; - break; + params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0); + break; case GL_TEXTURE_MATRIX: - for (i=0;i<16;i++) { - params[i] = - FLOAT_TO_BOOL(ctx->TextureMatrixStack[texUnit].Top->m[i]); - } - break; + { + const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[1]); + params[2] = FLOAT_TO_BOOLEAN(matrix[2]); + params[3] = FLOAT_TO_BOOLEAN(matrix[3]); + params[4] = FLOAT_TO_BOOLEAN(matrix[4]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[6]); + params[7] = FLOAT_TO_BOOLEAN(matrix[7]); + params[8] = FLOAT_TO_BOOLEAN(matrix[8]); + params[9] = FLOAT_TO_BOOLEAN(matrix[9]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[11]); + params[12] = FLOAT_TO_BOOLEAN(matrix[12]); + params[13] = FLOAT_TO_BOOLEAN(matrix[13]); + params[14] = FLOAT_TO_BOOLEAN(matrix[14]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); + } + break; case GL_TEXTURE_STACK_DEPTH: - *params = INT_TO_BOOL(ctx->TextureMatrixStack[texUnit].Depth + 1); - break; + params[0] = INT_TO_BOOLEAN(ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Depth + 1); + break; case GL_UNPACK_ALIGNMENT: - *params = INT_TO_BOOL(ctx->Unpack.Alignment); - break; + params[0] = INT_TO_BOOLEAN(ctx->Unpack.Alignment); + break; case GL_UNPACK_LSB_FIRST: - *params = ctx->Unpack.LsbFirst; - break; + params[0] = ctx->Unpack.LsbFirst; + break; case GL_UNPACK_ROW_LENGTH: - *params = INT_TO_BOOL(ctx->Unpack.RowLength); - break; + params[0] = INT_TO_BOOLEAN(ctx->Unpack.RowLength); + break; case GL_UNPACK_SKIP_PIXELS: - *params = INT_TO_BOOL(ctx->Unpack.SkipPixels); - break; + params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipPixels); + break; case GL_UNPACK_SKIP_ROWS: - *params = INT_TO_BOOL(ctx->Unpack.SkipRows); - break; + params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipRows); + break; case GL_UNPACK_SWAP_BYTES: - *params = ctx->Unpack.SwapBytes; - break; + params[0] = ctx->Unpack.SwapBytes; + break; case GL_UNPACK_SKIP_IMAGES_EXT: - *params = ctx->Unpack.SkipImages; + params[0] = INT_TO_BOOLEAN(ctx->Unpack.SkipImages); break; case GL_UNPACK_IMAGE_HEIGHT_EXT: - *params = ctx->Unpack.ImageHeight; + params[0] = INT_TO_BOOLEAN(ctx->Unpack.ImageHeight); break; case GL_UNPACK_CLIENT_STORAGE_APPLE: - *params = ctx->Unpack.ClientStorage; + params[0] = ctx->Unpack.ClientStorage; break; case GL_VIEWPORT: - params[0] = INT_TO_BOOL(ctx->Viewport.X); - params[1] = INT_TO_BOOL(ctx->Viewport.Y); - params[2] = INT_TO_BOOL(ctx->Viewport.Width); - params[3] = INT_TO_BOOL(ctx->Viewport.Height); - break; + params[0] = INT_TO_BOOLEAN(ctx->Viewport.X); + params[1] = INT_TO_BOOLEAN(ctx->Viewport.Y); + params[2] = INT_TO_BOOLEAN(ctx->Viewport.Width); + params[3] = INT_TO_BOOLEAN(ctx->Viewport.Height); + break; case GL_ZOOM_X: - *params = FLOAT_TO_BOOL(ctx->Pixel.ZoomX); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.ZoomX); + break; case GL_ZOOM_Y: - *params = FLOAT_TO_BOOL(ctx->Pixel.ZoomY); - break; + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.ZoomY); + break; case GL_VERTEX_ARRAY: - *params = ctx->Array.Vertex.Enabled; + params[0] = ctx->Array.ArrayObj->Vertex.Enabled; break; case GL_VERTEX_ARRAY_SIZE: - *params = INT_TO_BOOL(ctx->Array.Vertex.Size); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Size); break; case GL_VERTEX_ARRAY_TYPE: - *params = ENUM_TO_BOOL(ctx->Array.Vertex.Type); + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Type); break; case GL_VERTEX_ARRAY_STRIDE: - *params = INT_TO_BOOL(ctx->Array.Vertex.Stride); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.Stride); break; case GL_VERTEX_ARRAY_COUNT_EXT: - *params = INT_TO_BOOL(0); + params[0] = INT_TO_BOOLEAN(0); break; case GL_NORMAL_ARRAY: - *params = ctx->Array.Normal.Enabled; + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Enabled); break; case GL_NORMAL_ARRAY_TYPE: - *params = ENUM_TO_BOOL(ctx->Array.Normal.Type); + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Type); break; case GL_NORMAL_ARRAY_STRIDE: - *params = INT_TO_BOOL(ctx->Array.Normal.Stride); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.Stride); break; case GL_NORMAL_ARRAY_COUNT_EXT: - *params = INT_TO_BOOL(0); + params[0] = INT_TO_BOOLEAN(0); break; case GL_COLOR_ARRAY: - *params = ctx->Array.Color.Enabled; + params[0] = ctx->Array.ArrayObj->Color.Enabled; break; case GL_COLOR_ARRAY_SIZE: - *params = INT_TO_BOOL(ctx->Array.Color.Size); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Size); break; case GL_COLOR_ARRAY_TYPE: - *params = ENUM_TO_BOOL(ctx->Array.Color.Type); + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Type); break; case GL_COLOR_ARRAY_STRIDE: - *params = INT_TO_BOOL(ctx->Array.Color.Stride); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.Stride); break; case GL_COLOR_ARRAY_COUNT_EXT: - *params = INT_TO_BOOL(0); + params[0] = INT_TO_BOOLEAN(0); break; case GL_INDEX_ARRAY: - *params = ctx->Array.Index.Enabled; + params[0] = ctx->Array.ArrayObj->Index.Enabled; break; case GL_INDEX_ARRAY_TYPE: - *params = ENUM_TO_BOOL(ctx->Array.Index.Type); + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Type); break; case GL_INDEX_ARRAY_STRIDE: - *params = INT_TO_BOOL(ctx->Array.Index.Stride); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.Stride); break; case GL_INDEX_ARRAY_COUNT_EXT: - *params = INT_TO_BOOL(0); + params[0] = INT_TO_BOOLEAN(0); break; case GL_TEXTURE_COORD_ARRAY: - *params = ctx->Array.TexCoord[clientUnit].Enabled; + params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled; break; case GL_TEXTURE_COORD_ARRAY_SIZE: - *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].Size); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size); break; case GL_TEXTURE_COORD_ARRAY_TYPE: - *params = ENUM_TO_BOOL(ctx->Array.TexCoord[clientUnit].Type); + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type); break; case GL_TEXTURE_COORD_ARRAY_STRIDE: - *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].Stride); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride); break; case GL_TEXTURE_COORD_ARRAY_COUNT_EXT: - *params = INT_TO_BOOL(0); + params[0] = INT_TO_BOOLEAN(0); break; case GL_EDGE_FLAG_ARRAY: - *params = ctx->Array.EdgeFlag.Enabled; + params[0] = ctx->Array.ArrayObj->EdgeFlag.Enabled; break; case GL_EDGE_FLAG_ARRAY_STRIDE: - *params = INT_TO_BOOL(ctx->Array.EdgeFlag.Stride); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.Stride); break; case GL_EDGE_FLAG_ARRAY_COUNT_EXT: - *params = INT_TO_BOOL(0); + params[0] = INT_TO_BOOLEAN(0); break; - - /* GL_ARB_multitexture */ case GL_MAX_TEXTURE_UNITS_ARB: - CHECK_EXTENSION_B(ARB_multitexture, pname); - *params = INT_TO_BOOL(MIN2(ctx->Const.MaxTextureImageUnits, - ctx->Const.MaxTextureCoordUnits)); + CHECK_EXT1(ARB_multitexture, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureUnits); break; case GL_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_B(ARB_multitexture, pname); - *params = INT_TO_BOOL(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit); + CHECK_EXT1(ARB_multitexture, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit); break; case GL_CLIENT_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_B(ARB_multitexture, pname); - *params = INT_TO_BOOL(GL_TEXTURE0_ARB + clientUnit); + CHECK_EXT1(ARB_multitexture, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture); break; - - /* GL_ARB_texture_cube_map */ case GL_TEXTURE_CUBE_MAP_ARB: - CHECK_EXTENSION_B(ARB_texture_cube_map, pname); - *params = _mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB); + CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv"); + params[0] = _mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB); break; case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - CHECK_EXTENSION_B(ARB_texture_cube_map, pname); - *params = INT_TO_BOOL(textureUnit->CurrentCubeMap->Name); + CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name); break; case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: - CHECK_EXTENSION_B(ARB_texture_cube_map, pname); - *params = INT_TO_BOOL(1 << (ctx->Const.MaxCubeTextureLevels - 1)); + CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN((1 << (ctx->Const.MaxCubeTextureLevels - 1))); break; - - /* GL_ARB_texture_compression */ case GL_TEXTURE_COMPRESSION_HINT_ARB: - CHECK_EXTENSION_B(ARB_texture_compression, pname); - *params = INT_TO_BOOL(ctx->Hint.TextureCompression); + CHECK_EXT1(ARB_texture_compression, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Hint.TextureCompression); break; case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_B(ARB_texture_compression, pname); - *params = INT_TO_BOOL(_mesa_get_compressed_formats(ctx, NULL)); + CHECK_EXT1(ARB_texture_compression, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE)); break; case GL_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_B(ARB_texture_compression, pname); + CHECK_EXT1(ARB_texture_compression, "GetBooleanv"); { - GLint formats[100]; - GLuint i, n; - n = _mesa_get_compressed_formats(ctx, formats); - for (i = 0; i < n; i++) - params[i] = INT_TO_BOOL(formats[i]); + GLint formats[100]; + GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE); + ASSERT(n <= 100); + for (i = 0; i < n; i++) + params[i] = ENUM_TO_INT(formats[i]); } break; - - /* GL_EXT_compiled_vertex_array */ case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT: - *params = ctx->Array.LockFirst ? GL_TRUE : GL_FALSE; - break; + CHECK_EXT1(EXT_compiled_vertex_array, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.LockFirst); + break; case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT: - *params = ctx->Array.LockCount ? GL_TRUE : GL_FALSE; - break; - - /* GL_ARB_transpose_matrix */ + CHECK_EXT1(EXT_compiled_vertex_array, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.LockCount); + break; case GL_TRANSPOSE_COLOR_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ColorMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = FLOAT_TO_BOOL(tm[i]); - } + const GLfloat *matrix = ctx->ColorMatrixStack.Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[4]); + params[2] = FLOAT_TO_BOOLEAN(matrix[8]); + params[3] = FLOAT_TO_BOOLEAN(matrix[12]); + params[4] = FLOAT_TO_BOOLEAN(matrix[1]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[9]); + params[7] = FLOAT_TO_BOOLEAN(matrix[13]); + params[8] = FLOAT_TO_BOOLEAN(matrix[2]); + params[9] = FLOAT_TO_BOOLEAN(matrix[6]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[14]); + params[12] = FLOAT_TO_BOOLEAN(matrix[3]); + params[13] = FLOAT_TO_BOOLEAN(matrix[7]); + params[14] = FLOAT_TO_BOOLEAN(matrix[11]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); } break; case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ModelviewMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = FLOAT_TO_BOOL(tm[i]); - } + const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[4]); + params[2] = FLOAT_TO_BOOLEAN(matrix[8]); + params[3] = FLOAT_TO_BOOLEAN(matrix[12]); + params[4] = FLOAT_TO_BOOLEAN(matrix[1]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[9]); + params[7] = FLOAT_TO_BOOLEAN(matrix[13]); + params[8] = FLOAT_TO_BOOLEAN(matrix[2]); + params[9] = FLOAT_TO_BOOLEAN(matrix[6]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[14]); + params[12] = FLOAT_TO_BOOLEAN(matrix[3]); + params[13] = FLOAT_TO_BOOLEAN(matrix[7]); + params[14] = FLOAT_TO_BOOLEAN(matrix[11]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); } break; case GL_TRANSPOSE_PROJECTION_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ProjectionMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = FLOAT_TO_BOOL(tm[i]); - } + const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[4]); + params[2] = FLOAT_TO_BOOLEAN(matrix[8]); + params[3] = FLOAT_TO_BOOLEAN(matrix[12]); + params[4] = FLOAT_TO_BOOLEAN(matrix[1]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[9]); + params[7] = FLOAT_TO_BOOLEAN(matrix[13]); + params[8] = FLOAT_TO_BOOLEAN(matrix[2]); + params[9] = FLOAT_TO_BOOLEAN(matrix[6]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[14]); + params[12] = FLOAT_TO_BOOLEAN(matrix[3]); + params[13] = FLOAT_TO_BOOLEAN(matrix[7]); + params[14] = FLOAT_TO_BOOLEAN(matrix[11]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); } break; case GL_TRANSPOSE_TEXTURE_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->TextureMatrixStack[texUnit].Top->m); - for (i=0;i<16;i++) { - params[i] = FLOAT_TO_BOOL(tm[i]); - } + const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[4]); + params[2] = FLOAT_TO_BOOLEAN(matrix[8]); + params[3] = FLOAT_TO_BOOLEAN(matrix[12]); + params[4] = FLOAT_TO_BOOLEAN(matrix[1]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[9]); + params[7] = FLOAT_TO_BOOLEAN(matrix[13]); + params[8] = FLOAT_TO_BOOLEAN(matrix[2]); + params[9] = FLOAT_TO_BOOLEAN(matrix[6]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[14]); + params[12] = FLOAT_TO_BOOLEAN(matrix[3]); + params[13] = FLOAT_TO_BOOLEAN(matrix[7]); + params[14] = FLOAT_TO_BOOLEAN(matrix[11]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); } break; - - /* GL_HP_occlusion_test */ - case GL_OCCLUSION_TEST_HP: - CHECK_EXTENSION_B(HP_occlusion_test, pname); - *params = ctx->Depth.OcclusionTest; - return; - case GL_OCCLUSION_TEST_RESULT_HP: - CHECK_EXTENSION_B(HP_occlusion_test, pname); - if (ctx->Depth.OcclusionTest) - *params = ctx->OcclusionResult; - else - *params = ctx->OcclusionResultSaved; - /* reset flag now */ - ctx->OcclusionResult = GL_FALSE; - ctx->OcclusionResultSaved = GL_FALSE; - return; - - /* GL_SGIS_pixel_texture */ - case GL_PIXEL_TEXTURE_SGIS: - *params = ctx->Pixel.PixelTextureEnabled; - break; - - /* GL_SGIX_pixel_texture */ - case GL_PIXEL_TEX_GEN_SGIX: - *params = ctx->Pixel.PixelTextureEnabled; - break; - case GL_PIXEL_TEX_GEN_MODE_SGIX: - *params = (GLboolean) pixel_texgen_mode(ctx); - break; - - /* GL_SGI_color_matrix (also in 1.2 imaging) */ case GL_COLOR_MATRIX_SGI: - for (i=0;i<16;i++) { - params[i] = FLOAT_TO_BOOL(ctx->ColorMatrixStack.Top->m[i]); - } - break; + { + const GLfloat *matrix = ctx->ColorMatrixStack.Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[1]); + params[2] = FLOAT_TO_BOOLEAN(matrix[2]); + params[3] = FLOAT_TO_BOOLEAN(matrix[3]); + params[4] = FLOAT_TO_BOOLEAN(matrix[4]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[6]); + params[7] = FLOAT_TO_BOOLEAN(matrix[7]); + params[8] = FLOAT_TO_BOOLEAN(matrix[8]); + params[9] = FLOAT_TO_BOOLEAN(matrix[9]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[11]); + params[12] = FLOAT_TO_BOOLEAN(matrix[12]); + params[13] = FLOAT_TO_BOOLEAN(matrix[13]); + params[14] = FLOAT_TO_BOOLEAN(matrix[14]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); + } + break; case GL_COLOR_MATRIX_STACK_DEPTH_SGI: - *params = INT_TO_BOOL(ctx->ColorMatrixStack.Depth + 1); + params[0] = INT_TO_BOOLEAN(ctx->ColorMatrixStack.Depth + 1); break; case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI: - *params = FLOAT_TO_BOOL(MAX_COLOR_STACK_DEPTH); + params[0] = INT_TO_BOOLEAN(MAX_COLOR_STACK_DEPTH); break; case GL_POST_COLOR_MATRIX_RED_SCALE_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixScale[0]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[0]); break; case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixScale[1]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[1]); break; case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixScale[2]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[2]); break; case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixScale[3]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixScale[3]); break; case GL_POST_COLOR_MATRIX_RED_BIAS_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixBias[0]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[0]); break; case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixBias[1]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[1]); break; case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixBias[2]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[2]); break; case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI: - *params = FLOAT_TO_BOOL(ctx->Pixel.PostColorMatrixBias[3]); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostColorMatrixBias[3]); break; - - /* GL_EXT_convolution (also in 1.2 imaging) */ case GL_CONVOLUTION_1D_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = ctx->Pixel.Convolution1DEnabled; + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = ctx->Pixel.Convolution1DEnabled; break; - case GL_CONVOLUTION_2D: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = ctx->Pixel.Convolution2DEnabled; + case GL_CONVOLUTION_2D_EXT: + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = ctx->Pixel.Convolution2DEnabled; break; - case GL_SEPARABLE_2D: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = ctx->Pixel.Separable2DEnabled; + case GL_SEPARABLE_2D_EXT: + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = ctx->Pixel.Separable2DEnabled; break; case GL_POST_CONVOLUTION_RED_SCALE_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionScale[0]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[0]); break; case GL_POST_CONVOLUTION_GREEN_SCALE_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionScale[1]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[1]); break; case GL_POST_CONVOLUTION_BLUE_SCALE_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionScale[2]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[2]); break; case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionScale[3]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionScale[3]); break; case GL_POST_CONVOLUTION_RED_BIAS_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionBias[0]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[0]); break; case GL_POST_CONVOLUTION_GREEN_BIAS_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionBias[1]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[1]); break; case GL_POST_CONVOLUTION_BLUE_BIAS_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionBias[2]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[2]); break; case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT: - CHECK_EXTENSION_B(EXT_convolution, pname); - *params = FLOAT_TO_BOOL(ctx->Pixel.PostConvolutionBias[2]); + CHECK_EXT1(EXT_convolution, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Pixel.PostConvolutionBias[3]); break; - - /* GL_EXT_histogram (also in 1.2 imaging) */ case GL_HISTOGRAM: - CHECK_EXTENSION_B(EXT_histogram, pname); - *params = ctx->Pixel.HistogramEnabled; - break; - case GL_MINMAX: - CHECK_EXTENSION_B(EXT_histogram, pname); - *params = ctx->Pixel.MinMaxEnabled; + CHECK_EXT1(EXT_histogram, "GetBooleanv"); + params[0] = ctx->Pixel.HistogramEnabled; + break; + case GL_MINMAX: + CHECK_EXT1(EXT_histogram, "GetBooleanv"); + params[0] = ctx->Pixel.MinMaxEnabled; break; - - /* GL_SGI_color_table (also in 1.2 imaging */ case GL_COLOR_TABLE_SGI: - *params = ctx->Pixel.ColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetBooleanv"); + params[0] = ctx->Pixel.ColorTableEnabled; break; case GL_POST_CONVOLUTION_COLOR_TABLE_SGI: - *params = ctx->Pixel.PostConvolutionColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetBooleanv"); + params[0] = ctx->Pixel.PostConvolutionColorTableEnabled; break; case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI: - *params = ctx->Pixel.PostColorMatrixColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetBooleanv"); + params[0] = ctx->Pixel.PostColorMatrixColorTableEnabled; break; - - /* GL_SGI_texture_color_table */ case GL_TEXTURE_COLOR_TABLE_SGI: - CHECK_EXTENSION_B(SGI_texture_color_table, pname); - *params = textureUnit->ColorTableEnabled; + CHECK_EXT1(SGI_texture_color_table, "GetBooleanv"); + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled; break; - - /* GL_EXT_secondary_color */ case GL_COLOR_SUM_EXT: - CHECK_EXTENSION_B(EXT_secondary_color, pname); - *params = ctx->Fog.ColorSumEnabled; - break; + CHECK_EXT2(EXT_secondary_color, ARB_vertex_program, "GetBooleanv"); + params[0] = ctx->Fog.ColorSumEnabled; + break; case GL_CURRENT_SECONDARY_COLOR_EXT: - CHECK_EXTENSION_B(EXT_secondary_color, pname); - FLUSH_CURRENT(ctx, 0); - params[0] = INT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]); - params[1] = INT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]); - params[2] = INT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]); - params[3] = INT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]); - break; + CHECK_EXT1(EXT_secondary_color, "GetBooleanv"); + { + FLUSH_CURRENT(ctx, 0); + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]); + params[1] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]); + params[2] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]); + params[3] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]); + } + break; case GL_SECONDARY_COLOR_ARRAY_EXT: - CHECK_EXTENSION_B(EXT_secondary_color, pname); - *params = ctx->Array.SecondaryColor.Enabled; + CHECK_EXT1(EXT_secondary_color, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->SecondaryColor.Enabled; break; case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT: - CHECK_EXTENSION_B(EXT_secondary_color, pname); - *params = ENUM_TO_BOOL(ctx->Array.SecondaryColor.Type); - break; + CHECK_EXT1(EXT_secondary_color, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Type); + break; case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_B(EXT_secondary_color, pname); - *params = INT_TO_BOOL(ctx->Array.SecondaryColor.Stride); - break; + CHECK_EXT1(EXT_secondary_color, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Stride); + break; case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: - CHECK_EXTENSION_B(EXT_secondary_color, pname); - *params = INT_TO_BOOL(ctx->Array.SecondaryColor.Size); - break; - - /* GL_EXT_fog_coord */ + CHECK_EXT1(EXT_secondary_color, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.Size); + break; case GL_CURRENT_FOG_COORDINATE_EXT: - CHECK_EXTENSION_B(EXT_fog_coord, pname); - FLUSH_CURRENT(ctx, 0); - *params = FLOAT_TO_BOOL(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]); - break; + CHECK_EXT1(EXT_fog_coord, "GetBooleanv"); + { + FLUSH_CURRENT(ctx, 0); + params[0] = FLOAT_TO_BOOLEAN(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]); + } + break; case GL_FOG_COORDINATE_ARRAY_EXT: - CHECK_EXTENSION_B(EXT_fog_coord, pname); - *params = ctx->Array.FogCoord.Enabled; + CHECK_EXT1(EXT_fog_coord, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->FogCoord.Enabled; break; case GL_FOG_COORDINATE_ARRAY_TYPE_EXT: - CHECK_EXTENSION_B(EXT_fog_coord, pname); - *params = ENUM_TO_BOOL(ctx->Array.FogCoord.Type); - break; - case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_B(EXT_fog_coord, pname); - *params = INT_TO_BOOL(ctx->Array.FogCoord.Stride); - break; - case GL_FOG_COORDINATE_SOURCE_EXT: - CHECK_EXTENSION_B(EXT_fog_coord, pname); - *params = ENUM_TO_BOOL(ctx->Fog.FogCoordinateSource); - break; - - /* GL_EXT_texture_lod_bias */ - case GL_MAX_TEXTURE_LOD_BIAS_EXT: - *params = FLOAT_TO_BOOL(ctx->Const.MaxTextureLodBias); + CHECK_EXT1(EXT_fog_coord, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Type); + break; + case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT: + CHECK_EXT1(EXT_fog_coord, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.Stride); + break; + case GL_FOG_COORDINATE_SOURCE_EXT: + CHECK_EXT1(EXT_fog_coord, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Fog.FogCoordinateSource); + break; + case GL_MAX_TEXTURE_LOD_BIAS_EXT: + CHECK_EXT1(EXT_texture_lod_bias, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxTextureLodBias); break; - - /* GL_EXT_texture_filter_anisotropic */ case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: - CHECK_EXTENSION_B(EXT_texture_filter_anisotropic, pname); - *params = FLOAT_TO_BOOL(ctx->Const.MaxTextureMaxAnisotropy); - break; - - /* GL_ARB_multisample */ + CHECK_EXT1(EXT_texture_filter_anisotropic, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxTextureMaxAnisotropy); + break; case GL_MULTISAMPLE_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = ctx->Multisample.Enabled; + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = ctx->Multisample.Enabled; break; case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = ctx->Multisample.SampleAlphaToCoverage; + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = ctx->Multisample.SampleAlphaToCoverage; break; case GL_SAMPLE_ALPHA_TO_ONE_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = ctx->Multisample.SampleAlphaToOne; + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = ctx->Multisample.SampleAlphaToOne; break; case GL_SAMPLE_COVERAGE_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = ctx->Multisample.SampleCoverage; + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = ctx->Multisample.SampleCoverage; break; case GL_SAMPLE_COVERAGE_VALUE_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = FLOAT_TO_BOOL(ctx->Multisample.SampleCoverageValue); + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Multisample.SampleCoverageValue); break; case GL_SAMPLE_COVERAGE_INVERT_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = ctx->Multisample.SampleCoverageInvert; + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = ctx->Multisample.SampleCoverageInvert; break; case GL_SAMPLE_BUFFERS_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = 0; /* XXX fix someday */ + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.sampleBuffers); break; case GL_SAMPLES_ARB: - CHECK_EXTENSION_B(ARB_multisample, pname); - *params = 0; /* XXX fix someday */ + CHECK_EXT1(ARB_multisample, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Visual.samples); break; - - /* GL_IBM_rasterpos_clip */ case GL_RASTER_POSITION_UNCLIPPED_IBM: - CHECK_EXTENSION_B(IBM_rasterpos_clip, pname); - *params = ctx->Transform.RasterPositionUnclipped; + CHECK_EXT1(IBM_rasterpos_clip, "GetBooleanv"); + params[0] = ctx->Transform.RasterPositionUnclipped; break; - - /* GL_NV_point_sprite */ case GL_POINT_SPRITE_NV: - CHECK_EXTENSION2_B(NV_point_sprite, ARB_point_sprite, pname); - *params = ctx->Point.PointSprite; + CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetBooleanv"); + params[0] = ctx->Point.PointSprite; break; case GL_POINT_SPRITE_R_MODE_NV: - CHECK_EXTENSION_B(NV_point_sprite, pname); - *params = ENUM_TO_BOOL(ctx->Point.SpriteRMode); + CHECK_EXT1(NV_point_sprite, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Point.SpriteRMode); break; case GL_POINT_SPRITE_COORD_ORIGIN: - CHECK_EXTENSION_B(ARB_point_sprite, pname); - *params = ENUM_TO_BOOL(ctx->Point.SpriteOrigin); + CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Point.SpriteOrigin); break; - - /* GL_SGIS_generate_mipmap */ case GL_GENERATE_MIPMAP_HINT_SGIS: - CHECK_EXTENSION_B(SGIS_generate_mipmap, pname); - *params = ENUM_TO_BOOL(ctx->Hint.GenerateMipmap); - break; - -#if FEATURE_NV_vertex_program - case GL_VERTEX_PROGRAM_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = ctx->VertexProgram.Enabled; - break; - case GL_VERTEX_PROGRAM_POINT_SIZE_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = ctx->VertexProgram.PointSizeEnabled; - break; - case GL_VERTEX_PROGRAM_TWO_SIDE_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = ctx->VertexProgram.TwoSideEnabled; - break; - case GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = (ctx->Const.MaxProgramMatrixStackDepth > 0) ? GL_TRUE : GL_FALSE; - break; - case GL_MAX_TRACK_MATRICES_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = (ctx->Const.MaxProgramMatrices > 0) ? GL_TRUE : GL_FALSE; - break; - case GL_CURRENT_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - *params = GL_TRUE; - break; - case GL_CURRENT_MATRIX_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - for (i = 0; i < 16; i++) - params[i] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[i]); + CHECK_EXT1(SGIS_generate_mipmap, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Hint.GenerateMipmap); break; case GL_VERTEX_PROGRAM_BINDING_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - if (ctx->VertexProgram.Current && - ctx->VertexProgram.Current->Base.Id != 0) - *params = GL_TRUE; - else - *params = GL_FALSE; - break; - case GL_PROGRAM_ERROR_POSITION_NV: - CHECK_EXTENSION2_B(NV_vertex_program, ARB_vertex_program, pname); - *params = (ctx->Program.ErrorPos != 0) ? GL_TRUE : GL_FALSE; + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN((ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0)); break; case GL_VERTEX_ATTRIB_ARRAY0_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[0].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY1_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[1].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY2_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[2].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY3_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[3].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[4].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY5_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[5].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY6_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[6].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY7_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[7].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY8_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[8].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY9_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[9].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY10_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[10].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY11_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[11].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY12_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[12].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY13_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[13].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY14_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[14].Enabled; + break; case GL_VERTEX_ATTRIB_ARRAY15_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_VERTEX_ATTRIB_ARRAY0_NV; - *params = ctx->Array.VertexAttrib[n].Enabled; - } + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Array.ArrayObj->VertexAttrib[15].Enabled; break; case GL_MAP1_VERTEX_ATTRIB0_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[0]; + break; case GL_MAP1_VERTEX_ATTRIB1_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[1]; + break; case GL_MAP1_VERTEX_ATTRIB2_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[2]; + break; case GL_MAP1_VERTEX_ATTRIB3_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[3]; + break; case GL_MAP1_VERTEX_ATTRIB4_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[4]; + break; case GL_MAP1_VERTEX_ATTRIB5_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[5]; + break; case GL_MAP1_VERTEX_ATTRIB6_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[6]; + break; case GL_MAP1_VERTEX_ATTRIB7_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[7]; + break; case GL_MAP1_VERTEX_ATTRIB8_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[8]; + break; case GL_MAP1_VERTEX_ATTRIB9_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[9]; + break; case GL_MAP1_VERTEX_ATTRIB10_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[10]; + break; case GL_MAP1_VERTEX_ATTRIB11_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[11]; + break; case GL_MAP1_VERTEX_ATTRIB12_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[12]; + break; case GL_MAP1_VERTEX_ATTRIB13_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[13]; + break; case GL_MAP1_VERTEX_ATTRIB14_4_NV: + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[14]; + break; case GL_MAP1_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP1_VERTEX_ATTRIB0_4_NV; - *params = ctx->Eval.Map1Attrib[n]; - } + CHECK_EXT1(NV_vertex_program, "GetBooleanv"); + params[0] = ctx->Eval.Map1Attrib[15]; break; - case GL_MAP2_VERTEX_ATTRIB0_4_NV: - case GL_MAP2_VERTEX_ATTRIB1_4_NV: - case GL_MAP2_VERTEX_ATTRIB2_4_NV: - case GL_MAP2_VERTEX_ATTRIB3_4_NV: - case GL_MAP2_VERTEX_ATTRIB4_4_NV: - case GL_MAP2_VERTEX_ATTRIB5_4_NV: - case GL_MAP2_VERTEX_ATTRIB6_4_NV: - case GL_MAP2_VERTEX_ATTRIB7_4_NV: - case GL_MAP2_VERTEX_ATTRIB8_4_NV: - case GL_MAP2_VERTEX_ATTRIB9_4_NV: - case GL_MAP2_VERTEX_ATTRIB10_4_NV: - case GL_MAP2_VERTEX_ATTRIB11_4_NV: - case GL_MAP2_VERTEX_ATTRIB12_4_NV: - case GL_MAP2_VERTEX_ATTRIB13_4_NV: - case GL_MAP2_VERTEX_ATTRIB14_4_NV: - case GL_MAP2_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP2_VERTEX_ATTRIB0_4_NV; - *params = ctx->Eval.Map2Attrib[n]; - } - break; -#endif /* FEATURE_NV_vertex_program */ - -#if FEATURE_NV_fragment_program case GL_FRAGMENT_PROGRAM_NV: - CHECK_EXTENSION_B(NV_fragment_program, pname); - *params = ctx->FragmentProgram.Enabled; - break; - case GL_MAX_TEXTURE_COORDS_NV: - CHECK_EXTENSION_B(NV_fragment_program, pname); - *params = INT_TO_BOOL(ctx->Const.MaxTextureCoordUnits); - break; - case GL_MAX_TEXTURE_IMAGE_UNITS_NV: - CHECK_EXTENSION_B(NV_fragment_program, pname); - *params = INT_TO_BOOL(ctx->Const.MaxTextureImageUnits); + CHECK_EXT1(NV_fragment_program, "GetBooleanv"); + params[0] = ctx->FragmentProgram.Enabled; break; case GL_FRAGMENT_PROGRAM_BINDING_NV: - CHECK_EXTENSION_B(NV_fragment_program, pname); - if (ctx->VertexProgram.Current && - ctx->VertexProgram.Current->Base.Id != 0) - *params = GL_TRUE; - else - *params = GL_FALSE; + CHECK_EXT1(NV_fragment_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0); break; case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV: - CHECK_EXTENSION_B(NV_fragment_program, pname); - *params = MAX_NV_FRAGMENT_PROGRAM_PARAMS ? GL_TRUE : GL_FALSE; + CHECK_EXT1(NV_fragment_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(MAX_NV_FRAGMENT_PROGRAM_PARAMS); break; -#endif /* FEATURE_NV_fragment_program */ - - /* GL_NV_texture_rectangle */ case GL_TEXTURE_RECTANGLE_NV: - CHECK_EXTENSION_B(NV_texture_rectangle, pname); - *params = _mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV); + CHECK_EXT1(NV_texture_rectangle, "GetBooleanv"); + params[0] = _mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV); break; case GL_TEXTURE_BINDING_RECTANGLE_NV: - CHECK_EXTENSION_B(NV_texture_rectangle, pname); - *params = INT_TO_BOOL(textureUnit->CurrentRect->Name); + CHECK_EXT1(NV_texture_rectangle, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name); break; case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV: - CHECK_EXTENSION_B(NV_texture_rectangle, pname); - *params = INT_TO_BOOL(ctx->Const.MaxTextureRectSize); + CHECK_EXT1(NV_texture_rectangle, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureRectSize); break; - - /* GL_EXT_stencil_two_side */ case GL_STENCIL_TEST_TWO_SIDE_EXT: - CHECK_EXTENSION_B(EXT_stencil_two_side, pname); - *params = ctx->Stencil.TestTwoSide; + CHECK_EXT1(EXT_stencil_two_side, "GetBooleanv"); + params[0] = ctx->Stencil.TestTwoSide; break; case GL_ACTIVE_STENCIL_FACE_EXT: - CHECK_EXTENSION_B(EXT_stencil_two_side, pname); - *params = ENUM_TO_BOOL(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT); + CHECK_EXT1(EXT_stencil_two_side, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT); break; - - /* GL_NV_light_max_exponent */ case GL_MAX_SHININESS_NV: - *params = FLOAT_TO_BOOL(ctx->Const.MaxShininess); + CHECK_EXT1(NV_light_max_exponent, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxShininess); break; case GL_MAX_SPOT_EXPONENT_NV: - *params = FLOAT_TO_BOOL(ctx->Const.MaxSpotExponent); + CHECK_EXT1(NV_light_max_exponent, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Const.MaxSpotExponent); break; - -#if FEATURE_ARB_vertex_buffer_object case GL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.ArrayBufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayBufferObj->Name); break; case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.Vertex.BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Vertex.BufferObj->Name); break; case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.Normal.BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Normal.BufferObj->Name); break; case GL_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.Color.BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Color.BufferObj->Name); break; case GL_INDEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.Index.BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->Index.BufferObj->Name); break; case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name); break; case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.EdgeFlag.BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name); break; case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.SecondaryColor.BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name); break; case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.FogCoord.BufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ArrayObj->FogCoord.BufferObj->Name); break; - /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */ case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Array.ElementArrayBufferObj->Name); + CHECK_EXT1(ARB_vertex_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Array.ElementArrayBufferObj->Name); break; -#endif -#if FEATURE_EXT_pixel_buffer_object case GL_PIXEL_PACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_B(EXT_pixel_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Pack.BufferObj->Name); + CHECK_EXT1(EXT_pixel_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Pack.BufferObj->Name); break; case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_B(EXT_pixel_buffer_object, pname); - *params = INT_TO_BOOL(ctx->Unpack.BufferObj->Name); + CHECK_EXT1(EXT_pixel_buffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Unpack.BufferObj->Name); break; -#endif - -#if FEATURE_ARB_vertex_program - /* GL_NV_vertex_program and GL_ARB_fragment_program define others */ - case GL_MAX_VERTEX_ATTRIBS_ARB: - CHECK_EXTENSION_B(ARB_vertex_program, pname); - *params = (ctx->Const.MaxVertexProgramAttribs > 0) ? GL_TRUE : GL_FALSE; + case GL_VERTEX_PROGRAM_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetBooleanv"); + params[0] = ctx->VertexProgram.Enabled; break; -#endif - -#if FEATURE_ARB_fragment_program - case GL_FRAGMENT_PROGRAM_ARB: - CHECK_EXTENSION_B(ARB_fragment_program, pname); - *params = ctx->FragmentProgram.Enabled; + case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetBooleanv"); + params[0] = ctx->VertexProgram.PointSizeEnabled; + break; + case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetBooleanv"); + params[0] = ctx->VertexProgram.TwoSideEnabled; + break; + case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxProgramMatrixStackDepth); + break; + case GL_MAX_PROGRAM_MATRICES_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxProgramMatrices); + break; + case GL_CURRENT_MATRIX_STACK_DEPTH_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetBooleanv"); + params[0] = ctx->CurrentStack->Depth + 1; + break; + case GL_CURRENT_MATRIX_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program, "GetBooleanv"); + { + const GLfloat *matrix = ctx->CurrentStack->Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[1]); + params[2] = FLOAT_TO_BOOLEAN(matrix[2]); + params[3] = FLOAT_TO_BOOLEAN(matrix[3]); + params[4] = FLOAT_TO_BOOLEAN(matrix[4]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[6]); + params[7] = FLOAT_TO_BOOLEAN(matrix[7]); + params[8] = FLOAT_TO_BOOLEAN(matrix[8]); + params[9] = FLOAT_TO_BOOLEAN(matrix[9]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[11]); + params[12] = FLOAT_TO_BOOLEAN(matrix[12]); + params[13] = FLOAT_TO_BOOLEAN(matrix[13]); + params[14] = FLOAT_TO_BOOLEAN(matrix[14]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); + } break; case GL_TRANSPOSE_CURRENT_MATRIX_ARB: - CHECK_EXTENSION_B(ARB_fragment_program, pname); - params[0] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[0]); - params[1] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[4]); - params[2] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[8]); - params[3] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[12]); - params[4] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[1]); - params[5] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[5]); - params[6] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[9]); - params[7] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[13]); - params[8] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[2]); - params[9] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[6]); - params[10] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[10]); - params[11] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[14]); - params[12] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[3]); - params[13] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[7]); - params[14] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[11]); - params[15] = FLOAT_TO_BOOL(ctx->CurrentStack->Top->m[15]); + CHECK_EXT2(ARB_vertex_program, ARB_fragment_program, "GetBooleanv"); + { + const GLfloat *matrix = ctx->CurrentStack->Top->m; + params[0] = FLOAT_TO_BOOLEAN(matrix[0]); + params[1] = FLOAT_TO_BOOLEAN(matrix[4]); + params[2] = FLOAT_TO_BOOLEAN(matrix[8]); + params[3] = FLOAT_TO_BOOLEAN(matrix[12]); + params[4] = FLOAT_TO_BOOLEAN(matrix[1]); + params[5] = FLOAT_TO_BOOLEAN(matrix[5]); + params[6] = FLOAT_TO_BOOLEAN(matrix[9]); + params[7] = FLOAT_TO_BOOLEAN(matrix[13]); + params[8] = FLOAT_TO_BOOLEAN(matrix[2]); + params[9] = FLOAT_TO_BOOLEAN(matrix[6]); + params[10] = FLOAT_TO_BOOLEAN(matrix[10]); + params[11] = FLOAT_TO_BOOLEAN(matrix[14]); + params[12] = FLOAT_TO_BOOLEAN(matrix[3]); + params[13] = FLOAT_TO_BOOLEAN(matrix[7]); + params[14] = FLOAT_TO_BOOLEAN(matrix[11]); + params[15] = FLOAT_TO_BOOLEAN(matrix[15]); + } + break; + case GL_MAX_VERTEX_ATTRIBS_ARB: + CHECK_EXT1(ARB_vertex_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.VertexProgram.MaxAttribs); + break; + case GL_PROGRAM_ERROR_POSITION_ARB: + CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Program.ErrorPos); + break; + case GL_FRAGMENT_PROGRAM_ARB: + CHECK_EXT1(ARB_fragment_program, "GetBooleanv"); + params[0] = ctx->FragmentProgram.Enabled; + break; + case GL_MAX_TEXTURE_COORDS_ARB: + CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureCoordUnits); + break; + case GL_MAX_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxTextureImageUnits); break; - /* Remaining ARB_fragment_program queries alias with - * the GL_NV_fragment_program queries. - */ -#endif - - /* GL_EXT_depth_bounds_test */ case GL_DEPTH_BOUNDS_TEST_EXT: - CHECK_EXTENSION_B(EXT_depth_bounds_test, pname); + CHECK_EXT1(EXT_depth_bounds_test, "GetBooleanv"); params[0] = ctx->Depth.BoundsTest; break; case GL_DEPTH_BOUNDS_EXT: - CHECK_EXTENSION_B(EXT_depth_bounds_test, pname); - params[0] = FLOAT_TO_BOOL(ctx->Depth.BoundsMin); - params[1] = FLOAT_TO_BOOL(ctx->Depth.BoundsMax); + CHECK_EXT1(EXT_depth_bounds_test, "GetBooleanv"); + params[0] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMin); + params[1] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMax); break; - -#if FEATURE_MESA_program_debug case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_B(MESA_program_debug, pname); - *params = ctx->FragmentProgram.CallbackEnabled; + CHECK_EXT1(MESA_program_debug, "GetBooleanv"); + params[0] = ctx->FragmentProgram.CallbackEnabled; break; case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_B(MESA_program_debug, pname); - *params = ctx->VertexProgram.CallbackEnabled; + CHECK_EXT1(MESA_program_debug, "GetBooleanv"); + params[0] = ctx->VertexProgram.CallbackEnabled; break; case GL_FRAGMENT_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_B(MESA_program_debug, pname); - *params = INT_TO_BOOL(ctx->FragmentProgram.CurrentPosition); + CHECK_EXT1(MESA_program_debug, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->FragmentProgram.CurrentPosition); break; case GL_VERTEX_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_B(MESA_program_debug, pname); - *params = INT_TO_BOOL(ctx->VertexProgram.CurrentPosition); + CHECK_EXT1(MESA_program_debug, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->VertexProgram.CurrentPosition); break; -#endif - case GL_MAX_DRAW_BUFFERS_ARB: - CHECK_EXTENSION_B(ARB_draw_buffers, pname); - *params = INT_TO_BOOL(ctx->Const.MaxDrawBuffers); + CHECK_EXT1(ARB_draw_buffers, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxDrawBuffers); break; case GL_DRAW_BUFFER0_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->DrawBuffer->ColorDrawBuffer[0]); + break; case GL_DRAW_BUFFER1_ARB: - case GL_DRAW_BUFFER2_ARB: - case GL_DRAW_BUFFER3_ARB: - case GL_DRAW_BUFFER4_ARB: - case GL_DRAW_BUFFER5_ARB: - case GL_DRAW_BUFFER6_ARB: - case GL_DRAW_BUFFER7_ARB: - case GL_DRAW_BUFFER8_ARB: - case GL_DRAW_BUFFER9_ARB: - case GL_DRAW_BUFFER10_ARB: - case GL_DRAW_BUFFER11_ARB: - case GL_DRAW_BUFFER12_ARB: - case GL_DRAW_BUFFER13_ARB: - case GL_DRAW_BUFFER14_ARB: - case GL_DRAW_BUFFER15_ARB: - CHECK_EXTENSION_B(ARB_draw_buffers, pname); + CHECK_EXT1(ARB_draw_buffers, "GetBooleanv"); { - GLuint i = pname - GL_DRAW_BUFFER0_ARB; - if (i >= ctx->Const.MaxDrawBuffers) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetBooleanv(GL_DRAW_BUFFERx_ARB)"); - return; - } - *params = INT_TO_BOOL(ctx->Color.DrawBuffer[i]); + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[1]; + params[0] = ENUM_TO_BOOLEAN(buffer); + } + break; + case GL_DRAW_BUFFER2_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetBooleanv"); + { + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[2]; + params[0] = ENUM_TO_BOOLEAN(buffer); + } + break; + case GL_DRAW_BUFFER3_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetBooleanv"); + { + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[3]; + params[0] = ENUM_TO_BOOLEAN(buffer); } break; - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - *params = INT_TO_BOOL(ctx->Const.ColorReadType); - return; + CHECK_EXT1(OES_read_format, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.ColorReadType); + break; case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - *params = INT_TO_BOOL(ctx->Const.ColorReadFormat); - return; - -#if FEATURE_ATI_fragment_shader + CHECK_EXT1(OES_read_format, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.ColorReadFormat); + break; case GL_NUM_FRAGMENT_REGISTERS_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = INT_TO_BOOL(6); - break; + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(6); + break; case GL_NUM_FRAGMENT_CONSTANTS_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = INT_TO_BOOL(8); - break; + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(8); + break; case GL_NUM_PASSES_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = INT_TO_BOOL(2); - break; + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(2); + break; case GL_NUM_INSTRUCTIONS_PER_PASS_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = INT_TO_BOOL(8); - break; + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(8); + break; case GL_NUM_INSTRUCTIONS_TOTAL_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = INT_TO_BOOL(16); - break; + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(16); + break; case GL_COLOR_ALPHA_PAIRING_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = GL_TRUE; - break; + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = GL_TRUE; + break; case GL_NUM_LOOPBACK_COMPONENTS_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = INT_TO_BOOL(3); - break; + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(3); + break; case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI: - CHECK_EXTENSION_B(ATI_fragment_shader, pname); - *params = INT_TO_BOOL(3); - break; -#endif + CHECK_EXT1(ATI_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(3); + break; + case GL_STENCIL_BACK_FUNC: + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.Function[1]); + break; + case GL_STENCIL_BACK_VALUE_MASK: + params[0] = INT_TO_BOOLEAN(ctx->Stencil.ValueMask[1]); + break; + case GL_STENCIL_BACK_WRITEMASK: + params[0] = INT_TO_BOOLEAN(ctx->Stencil.WriteMask[1]); + break; + case GL_STENCIL_BACK_REF: + params[0] = INT_TO_BOOLEAN(ctx->Stencil.Ref[1]); + break; + case GL_STENCIL_BACK_FAIL: + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.FailFunc[1]); + break; + case GL_STENCIL_BACK_PASS_DEPTH_FAIL: + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZFailFunc[1]); + break; + case GL_STENCIL_BACK_PASS_DEPTH_PASS: + params[0] = ENUM_TO_BOOLEAN(ctx->Stencil.ZPassFunc[1]); + break; + case GL_FRAMEBUFFER_BINDING_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->DrawBuffer->Name); + break; + case GL_RENDERBUFFER_BINDING_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0); + break; + case GL_MAX_COLOR_ATTACHMENTS_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxColorAttachments); + break; + case GL_MAX_RENDERBUFFER_SIZE_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxRenderbufferSize); + break; + case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_fragment_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.FragmentProgram.MaxUniformComponents); + break; + case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: + CHECK_EXT1(ARB_fragment_shader, "GetBooleanv"); + params[0] = ENUM_TO_BOOLEAN(ctx->Hint.FragmentShaderDerivative); + break; + case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.VertexProgram.MaxUniformComponents); + break; + case GL_MAX_VARYING_FLOATS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVaryingFloats); + break; + case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.MaxVertexTextureImageUnits); + break; + case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(MAX_COMBINED_TEXTURE_IMAGE_UNITS); + break; default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetBooleanv(pname=0x%x)", pname); } } - -/** - * Get the value(s) of a selected parameter. - * - * \param pname parameter to be returned. - * \param params will hold the value(s) of the speficifed parameter. - * - * \sa glGetDoublev(). - * - * Tries to get the specified parameter via dd_function_table::GetDoublev, - * otherwise gets the specified parameter from the current context, converting - * it value into GLdouble. - */ -void GLAPIENTRY -_mesa_GetDoublev( GLenum pname, GLdouble *params ) -{ - GET_CURRENT_CONTEXT(ctx); - GLuint i; - const GLuint clientUnit = ctx->Array.ActiveTexture; - const GLuint texUnit = ctx->Texture.CurrentUnit; - const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit]; - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (!params) - return; - - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glGetDoublev %s\n", _mesa_lookup_enum_by_nr(pname)); - - if (!ctx->_CurrentProgram) { - /* We need this in order to get correct results for - * GL_OCCLUSION_TEST_RESULT_HP. There might be other important cases. - */ - FLUSH_VERTICES(ctx, 0); - } - - if (ctx->Driver.GetDoublev && (*ctx->Driver.GetDoublev)(ctx, pname, params)) - return; - - switch (pname) { - case GL_ACCUM_RED_BITS: - *params = (GLdouble) ctx->Visual.accumRedBits; - break; - case GL_ACCUM_GREEN_BITS: - *params = (GLdouble) ctx->Visual.accumGreenBits; - break; - case GL_ACCUM_BLUE_BITS: - *params = (GLdouble) ctx->Visual.accumBlueBits; - break; - case GL_ACCUM_ALPHA_BITS: - *params = (GLdouble) ctx->Visual.accumAlphaBits; - break; - case GL_ACCUM_CLEAR_VALUE: - params[0] = (GLdouble) ctx->Accum.ClearColor[0]; - params[1] = (GLdouble) ctx->Accum.ClearColor[1]; - params[2] = (GLdouble) ctx->Accum.ClearColor[2]; - params[3] = (GLdouble) ctx->Accum.ClearColor[3]; - break; - case GL_ALPHA_BIAS: - *params = (GLdouble) ctx->Pixel.AlphaBias; - break; - case GL_ALPHA_BITS: - *params = (GLdouble) ctx->Visual.alphaBits; - break; - case GL_ALPHA_SCALE: - *params = (GLdouble) ctx->Pixel.AlphaScale; - break; - case GL_ALPHA_TEST: - *params = (GLdouble) ctx->Color.AlphaEnabled; - break; - case GL_ALPHA_TEST_FUNC: - *params = ENUM_TO_DOUBLE(ctx->Color.AlphaFunc); - break; - case GL_ALPHA_TEST_REF: - *params = (GLdouble) ctx->Color.AlphaRef; - break; - case GL_ATTRIB_STACK_DEPTH: - *params = (GLdouble ) (ctx->AttribStackDepth); - break; - case GL_AUTO_NORMAL: - *params = (GLdouble) ctx->Eval.AutoNormal; - break; - case GL_AUX_BUFFERS: - *params = (GLdouble) ctx->Visual.numAuxBuffers; - break; - case GL_BLEND: - *params = (GLdouble) ctx->Color.BlendEnabled; - break; - case GL_BLEND_DST: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendDstRGB); - break; - case GL_BLEND_SRC: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendSrcRGB); - break; - case GL_BLEND_SRC_RGB_EXT: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendSrcRGB); - break; - case GL_BLEND_DST_RGB_EXT: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendDstRGB); - break; - case GL_BLEND_SRC_ALPHA_EXT: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendSrcA); - break; - case GL_BLEND_DST_ALPHA_EXT: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendDstA); - break; - case GL_BLEND_EQUATION: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendEquationRGB); - break; - case GL_BLEND_EQUATION_ALPHA_EXT: - *params = ENUM_TO_DOUBLE(ctx->Color.BlendEquationA); - break; - case GL_BLEND_COLOR_EXT: - params[0] = (GLdouble) ctx->Color.BlendColor[0]; - params[1] = (GLdouble) ctx->Color.BlendColor[1]; - params[2] = (GLdouble) ctx->Color.BlendColor[2]; - params[3] = (GLdouble) ctx->Color.BlendColor[3]; - break; - case GL_BLUE_BIAS: - *params = (GLdouble) ctx->Pixel.BlueBias; - break; - case GL_BLUE_BITS: - *params = (GLdouble) ctx->Visual.blueBits; - break; - case GL_BLUE_SCALE: - *params = (GLdouble) ctx->Pixel.BlueScale; - break; - case GL_CLIENT_ATTRIB_STACK_DEPTH: - *params = (GLdouble) (ctx->ClientAttribStackDepth); - break; - case GL_CLIP_PLANE0: - case GL_CLIP_PLANE1: - case GL_CLIP_PLANE2: - case GL_CLIP_PLANE3: - case GL_CLIP_PLANE4: - case GL_CLIP_PLANE5: - if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0))) - *params = 1.0; - else - *params = 0.0; - break; - case GL_COLOR_CLEAR_VALUE: - params[0] = (GLdouble) ctx->Color.ClearColor[0]; - params[1] = (GLdouble) ctx->Color.ClearColor[1]; - params[2] = (GLdouble) ctx->Color.ClearColor[2]; - params[3] = (GLdouble) ctx->Color.ClearColor[3]; - break; - case GL_COLOR_MATERIAL: - *params = (GLdouble) ctx->Light.ColorMaterialEnabled; - break; - case GL_COLOR_MATERIAL_FACE: - *params = ENUM_TO_DOUBLE(ctx->Light.ColorMaterialFace); - break; - case GL_COLOR_MATERIAL_PARAMETER: - *params = ENUM_TO_DOUBLE(ctx->Light.ColorMaterialMode); - break; - case GL_COLOR_WRITEMASK: - params[0] = ctx->Color.ColorMask[RCOMP] ? 1.0 : 0.0; - params[1] = ctx->Color.ColorMask[GCOMP] ? 1.0 : 0.0; - params[2] = ctx->Color.ColorMask[BCOMP] ? 1.0 : 0.0; - params[3] = ctx->Color.ColorMask[ACOMP] ? 1.0 : 0.0; - break; - case GL_CULL_FACE: - *params = (GLdouble) ctx->Polygon.CullFlag; - break; - case GL_CULL_FACE_MODE: - *params = ENUM_TO_DOUBLE(ctx->Polygon.CullFaceMode); - break; - case GL_CURRENT_COLOR: - FLUSH_CURRENT(ctx, 0); - params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]; - params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]; - params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]; - params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]; - break; - case GL_CURRENT_INDEX: - FLUSH_CURRENT(ctx, 0); - *params = (GLdouble) ctx->Current.Index; - break; - case GL_CURRENT_NORMAL: - FLUSH_CURRENT(ctx, 0); - params[0] = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]; - params[1] = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]; - params[2] = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]; - break; - case GL_CURRENT_RASTER_COLOR: - params[0] = (GLdouble) ctx->Current.RasterColor[0]; - params[1] = (GLdouble) ctx->Current.RasterColor[1]; - params[2] = (GLdouble) ctx->Current.RasterColor[2]; - params[3] = (GLdouble) ctx->Current.RasterColor[3]; - break; - case GL_CURRENT_RASTER_DISTANCE: - params[0] = (GLdouble) ctx->Current.RasterDistance; - break; - case GL_CURRENT_RASTER_INDEX: - *params = (GLdouble) ctx->Current.RasterIndex; - break; - case GL_CURRENT_RASTER_POSITION: - params[0] = (GLdouble) ctx->Current.RasterPos[0]; - params[1] = (GLdouble) ctx->Current.RasterPos[1]; - params[2] = (GLdouble) ctx->Current.RasterPos[2]; - params[3] = (GLdouble) ctx->Current.RasterPos[3]; - break; - case GL_CURRENT_RASTER_TEXTURE_COORDS: - params[0] = (GLdouble) ctx->Current.RasterTexCoords[texUnit][0]; - params[1] = (GLdouble) ctx->Current.RasterTexCoords[texUnit][1]; - params[2] = (GLdouble) ctx->Current.RasterTexCoords[texUnit][2]; - params[3] = (GLdouble) ctx->Current.RasterTexCoords[texUnit][3]; - break; - case GL_CURRENT_RASTER_POSITION_VALID: - *params = (GLdouble) ctx->Current.RasterPosValid; - break; - case GL_CURRENT_TEXTURE_COORDS: - FLUSH_CURRENT(ctx, 0); - params[0] = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]; - params[1] = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]; - params[2] = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]; - params[3] = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]; - break; - case GL_DEPTH_BIAS: - *params = (GLdouble) ctx->Pixel.DepthBias; - break; - case GL_DEPTH_BITS: - *params = (GLdouble) ctx->Visual.depthBits; - break; - case GL_DEPTH_CLEAR_VALUE: - *params = (GLdouble) ctx->Depth.Clear; - break; - case GL_DEPTH_FUNC: - *params = ENUM_TO_DOUBLE(ctx->Depth.Func); - break; - case GL_DEPTH_RANGE: - params[0] = (GLdouble) ctx->Viewport.Near; - params[1] = (GLdouble) ctx->Viewport.Far; - break; - case GL_DEPTH_SCALE: - *params = (GLdouble) ctx->Pixel.DepthScale; - break; - case GL_DEPTH_TEST: - *params = (GLdouble) ctx->Depth.Test; - break; - case GL_DEPTH_WRITEMASK: - *params = (GLdouble) ctx->Depth.Mask; - break; - case GL_DITHER: - *params = (GLdouble) ctx->Color.DitherFlag; - break; - case GL_DOUBLEBUFFER: - *params = (GLdouble) ctx->Visual.doubleBufferMode; - break; - case GL_DRAW_BUFFER: - *params = ENUM_TO_DOUBLE(ctx->Color.DrawBuffer[0]); - break; - case GL_EDGE_FLAG: - FLUSH_CURRENT(ctx, 0); - *params = (GLdouble) ctx->Current.EdgeFlag; - break; - case GL_FEEDBACK_BUFFER_SIZE: - *params = (GLdouble) ctx->Feedback.BufferSize; - break; - case GL_FEEDBACK_BUFFER_TYPE: - *params = ENUM_TO_DOUBLE(ctx->Feedback.Type); - break; - case GL_FOG: - *params = (GLdouble) ctx->Fog.Enabled; - break; - case GL_FOG_COLOR: - params[0] = (GLdouble) ctx->Fog.Color[0]; - params[1] = (GLdouble) ctx->Fog.Color[1]; - params[2] = (GLdouble) ctx->Fog.Color[2]; - params[3] = (GLdouble) ctx->Fog.Color[3]; - break; - case GL_FOG_DENSITY: - *params = (GLdouble) ctx->Fog.Density; - break; - case GL_FOG_END: - *params = (GLdouble) ctx->Fog.End; - break; - case GL_FOG_HINT: - *params = ENUM_TO_DOUBLE(ctx->Hint.Fog); - break; - case GL_FOG_INDEX: - *params = (GLdouble) ctx->Fog.Index; - break; - case GL_FOG_MODE: - *params = ENUM_TO_DOUBLE(ctx->Fog.Mode); - break; - case GL_FOG_START: - *params = (GLdouble) ctx->Fog.Start; - break; - case GL_FRONT_FACE: - *params = ENUM_TO_DOUBLE(ctx->Polygon.FrontFace); - break; - case GL_GREEN_BIAS: - *params = (GLdouble) ctx->Pixel.GreenBias; - break; - case GL_GREEN_BITS: - *params = (GLdouble) ctx->Visual.greenBits; - break; - case GL_GREEN_SCALE: - *params = (GLdouble) ctx->Pixel.GreenScale; - break; - case GL_INDEX_BITS: - *params = (GLdouble) ctx->Visual.indexBits; - break; - case GL_INDEX_CLEAR_VALUE: - *params = (GLdouble) ctx->Color.ClearIndex; - break; - case GL_INDEX_MODE: - *params = ctx->Visual.rgbMode ? 0.0 : 1.0; - break; - case GL_INDEX_OFFSET: - *params = (GLdouble) ctx->Pixel.IndexOffset; - break; - case GL_INDEX_SHIFT: - *params = (GLdouble) ctx->Pixel.IndexShift; - break; - case GL_INDEX_WRITEMASK: - *params = (GLdouble) ctx->Color.IndexMask; - break; - case GL_LIGHT0: - case GL_LIGHT1: - case GL_LIGHT2: - case GL_LIGHT3: - case GL_LIGHT4: - case GL_LIGHT5: - case GL_LIGHT6: - case GL_LIGHT7: - *params = (GLdouble) ctx->Light.Light[pname-GL_LIGHT0].Enabled; - break; - case GL_LIGHTING: - *params = (GLdouble) ctx->Light.Enabled; - break; - case GL_LIGHT_MODEL_AMBIENT: - params[0] = (GLdouble) ctx->Light.Model.Ambient[0]; - params[1] = (GLdouble) ctx->Light.Model.Ambient[1]; - params[2] = (GLdouble) ctx->Light.Model.Ambient[2]; - params[3] = (GLdouble) ctx->Light.Model.Ambient[3]; - break; - case GL_LIGHT_MODEL_COLOR_CONTROL: - params[0] = (GLdouble) ctx->Light.Model.ColorControl; - break; - case GL_LIGHT_MODEL_LOCAL_VIEWER: - *params = (GLdouble) ctx->Light.Model.LocalViewer; - break; - case GL_LIGHT_MODEL_TWO_SIDE: - *params = (GLdouble) ctx->Light.Model.TwoSide; - break; - case GL_LINE_SMOOTH: - *params = (GLdouble) ctx->Line.SmoothFlag; - break; - case GL_LINE_SMOOTH_HINT: - *params = ENUM_TO_DOUBLE(ctx->Hint.LineSmooth); - break; - case GL_LINE_STIPPLE: - *params = (GLdouble) ctx->Line.StippleFlag; - break; - case GL_LINE_STIPPLE_PATTERN: - *params = (GLdouble) ctx->Line.StipplePattern; - break; - case GL_LINE_STIPPLE_REPEAT: - *params = (GLdouble) ctx->Line.StippleFactor; - break; - case GL_LINE_WIDTH: - *params = (GLdouble) ctx->Line.Width; - break; - case GL_LINE_WIDTH_GRANULARITY: - *params = (GLdouble) ctx->Const.LineWidthGranularity; - break; - case GL_LINE_WIDTH_RANGE: - params[0] = (GLdouble) ctx->Const.MinLineWidthAA; - params[1] = (GLdouble) ctx->Const.MaxLineWidthAA; - break; - case GL_ALIASED_LINE_WIDTH_RANGE: - params[0] = (GLdouble) ctx->Const.MinLineWidth; - params[1] = (GLdouble) ctx->Const.MaxLineWidth; - break; - case GL_LIST_BASE: - *params = (GLdouble) ctx->List.ListBase; - break; - case GL_LIST_INDEX: - *params = (GLdouble) ctx->ListState.CurrentListNum; - break; - case GL_LIST_MODE: - if (!ctx->CompileFlag) - *params = 0.0; - else if (ctx->ExecuteFlag) - *params = ENUM_TO_DOUBLE(GL_COMPILE_AND_EXECUTE); - else - *params = ENUM_TO_DOUBLE(GL_COMPILE); - break; - case GL_INDEX_LOGIC_OP: - *params = (GLdouble) ctx->Color.IndexLogicOpEnabled; - break; - case GL_COLOR_LOGIC_OP: - *params = (GLdouble) ctx->Color.ColorLogicOpEnabled; - break; - case GL_LOGIC_OP_MODE: - *params = ENUM_TO_DOUBLE(ctx->Color.LogicOp); - break; - case GL_MAP1_COLOR_4: - *params = (GLdouble) ctx->Eval.Map1Color4; - break; - case GL_MAP1_GRID_DOMAIN: - params[0] = (GLdouble) ctx->Eval.MapGrid1u1; - params[1] = (GLdouble) ctx->Eval.MapGrid1u2; - break; - case GL_MAP1_GRID_SEGMENTS: - *params = (GLdouble) ctx->Eval.MapGrid1un; - break; - case GL_MAP1_INDEX: - *params = (GLdouble) ctx->Eval.Map1Index; - break; - case GL_MAP1_NORMAL: - *params = (GLdouble) ctx->Eval.Map1Normal; - break; - case GL_MAP1_TEXTURE_COORD_1: - *params = (GLdouble) ctx->Eval.Map1TextureCoord1; - break; - case GL_MAP1_TEXTURE_COORD_2: - *params = (GLdouble) ctx->Eval.Map1TextureCoord2; - break; - case GL_MAP1_TEXTURE_COORD_3: - *params = (GLdouble) ctx->Eval.Map1TextureCoord3; - break; - case GL_MAP1_TEXTURE_COORD_4: - *params = (GLdouble) ctx->Eval.Map1TextureCoord4; - break; - case GL_MAP1_VERTEX_3: - *params = (GLdouble) ctx->Eval.Map1Vertex3; - break; - case GL_MAP1_VERTEX_4: - *params = (GLdouble) ctx->Eval.Map1Vertex4; - break; - case GL_MAP2_COLOR_4: - *params = (GLdouble) ctx->Eval.Map2Color4; - break; - case GL_MAP2_GRID_DOMAIN: - params[0] = (GLdouble) ctx->Eval.MapGrid2u1; - params[1] = (GLdouble) ctx->Eval.MapGrid2u2; - params[2] = (GLdouble) ctx->Eval.MapGrid2v1; - params[3] = (GLdouble) ctx->Eval.MapGrid2v2; - break; - case GL_MAP2_GRID_SEGMENTS: - params[0] = (GLdouble) ctx->Eval.MapGrid2un; - params[1] = (GLdouble) ctx->Eval.MapGrid2vn; - break; - case GL_MAP2_INDEX: - *params = (GLdouble) ctx->Eval.Map2Index; - break; - case GL_MAP2_NORMAL: - *params = (GLdouble) ctx->Eval.Map2Normal; - break; - case GL_MAP2_TEXTURE_COORD_1: - *params = (GLdouble) ctx->Eval.Map2TextureCoord1; - break; - case GL_MAP2_TEXTURE_COORD_2: - *params = (GLdouble) ctx->Eval.Map2TextureCoord2; - break; - case GL_MAP2_TEXTURE_COORD_3: - *params = (GLdouble) ctx->Eval.Map2TextureCoord3; - break; - case GL_MAP2_TEXTURE_COORD_4: - *params = (GLdouble) ctx->Eval.Map2TextureCoord4; - break; - case GL_MAP2_VERTEX_3: - *params = (GLdouble) ctx->Eval.Map2Vertex3; - break; - case GL_MAP2_VERTEX_4: - *params = (GLdouble) ctx->Eval.Map2Vertex4; - break; - case GL_MAP_COLOR: - *params = (GLdouble) ctx->Pixel.MapColorFlag; - break; - case GL_MAP_STENCIL: - *params = (GLdouble) ctx->Pixel.MapStencilFlag; - break; - case GL_MATRIX_MODE: - *params = ENUM_TO_DOUBLE(ctx->Transform.MatrixMode); - break; - case GL_MAX_ATTRIB_STACK_DEPTH: - *params = (GLdouble) MAX_ATTRIB_STACK_DEPTH; - break; - case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: - *params = (GLdouble) MAX_CLIENT_ATTRIB_STACK_DEPTH; - break; - case GL_MAX_CLIP_PLANES: - *params = (GLdouble) ctx->Const.MaxClipPlanes; - break; - case GL_MAX_ELEMENTS_VERTICES: /* GL_VERSION_1_2 */ - *params = (GLdouble) ctx->Const.MaxArrayLockSize; - break; - case GL_MAX_ELEMENTS_INDICES: /* GL_VERSION_1_2 */ - *params = (GLdouble) ctx->Const.MaxArrayLockSize; - break; - case GL_MAX_EVAL_ORDER: - *params = (GLdouble) MAX_EVAL_ORDER; - break; - case GL_MAX_LIGHTS: - *params = (GLdouble) ctx->Const.MaxLights; - break; - case GL_MAX_LIST_NESTING: - *params = (GLdouble) MAX_LIST_NESTING; - break; - case GL_MAX_MODELVIEW_STACK_DEPTH: - *params = (GLdouble) MAX_MODELVIEW_STACK_DEPTH; - break; - case GL_MAX_NAME_STACK_DEPTH: - *params = (GLdouble) MAX_NAME_STACK_DEPTH; - break; - case GL_MAX_PIXEL_MAP_TABLE: - *params = (GLdouble) MAX_PIXEL_MAP_TABLE; - break; - case GL_MAX_PROJECTION_STACK_DEPTH: - *params = (GLdouble) MAX_PROJECTION_STACK_DEPTH; - break; - case GL_MAX_TEXTURE_SIZE: - *params = (GLdouble) (1 << (ctx->Const.MaxTextureLevels - 1)); - break; - case GL_MAX_3D_TEXTURE_SIZE: - *params = (GLdouble) (1 << (ctx->Const.Max3DTextureLevels - 1)); - break; - case GL_MAX_TEXTURE_STACK_DEPTH: - *params = (GLdouble) MAX_TEXTURE_STACK_DEPTH; - break; - case GL_MAX_VIEWPORT_DIMS: - params[0] = (GLdouble) MAX_WIDTH; - params[1] = (GLdouble) MAX_HEIGHT; - break; - case GL_MODELVIEW_MATRIX: - for (i=0;i<16;i++) { - params[i] = (GLdouble) ctx->ModelviewMatrixStack.Top->m[i]; - } - break; - case GL_MODELVIEW_STACK_DEPTH: - *params = (GLdouble) (ctx->ModelviewMatrixStack.Depth + 1); - break; - case GL_NAME_STACK_DEPTH: - *params = (GLdouble) ctx->Select.NameStackDepth; - break; - case GL_NORMALIZE: - *params = (GLdouble) ctx->Transform.Normalize; - break; - case GL_PACK_ALIGNMENT: - *params = (GLdouble) ctx->Pack.Alignment; - break; - case GL_PACK_LSB_FIRST: - *params = (GLdouble) ctx->Pack.LsbFirst; - break; - case GL_PACK_ROW_LENGTH: - *params = (GLdouble) ctx->Pack.RowLength; - break; - case GL_PACK_SKIP_PIXELS: - *params = (GLdouble) ctx->Pack.SkipPixels; - break; - case GL_PACK_SKIP_ROWS: - *params = (GLdouble) ctx->Pack.SkipRows; - break; - case GL_PACK_SWAP_BYTES: - *params = (GLdouble) ctx->Pack.SwapBytes; - break; - case GL_PACK_SKIP_IMAGES_EXT: - *params = (GLdouble) ctx->Pack.SkipImages; - break; - case GL_PACK_IMAGE_HEIGHT_EXT: - *params = (GLdouble) ctx->Pack.ImageHeight; - break; - case GL_PACK_INVERT_MESA: - *params = (GLdouble) ctx->Pack.Invert; - break; - case GL_PERSPECTIVE_CORRECTION_HINT: - *params = ENUM_TO_DOUBLE(ctx->Hint.PerspectiveCorrection); - break; - case GL_PIXEL_MAP_A_TO_A_SIZE: - *params = (GLdouble) ctx->Pixel.MapAtoAsize; - break; - case GL_PIXEL_MAP_B_TO_B_SIZE: - *params = (GLdouble) ctx->Pixel.MapBtoBsize; - break; - case GL_PIXEL_MAP_G_TO_G_SIZE: - *params = (GLdouble) ctx->Pixel.MapGtoGsize; - break; - case GL_PIXEL_MAP_I_TO_A_SIZE: - *params = (GLdouble) ctx->Pixel.MapItoAsize; - break; - case GL_PIXEL_MAP_I_TO_B_SIZE: - *params = (GLdouble) ctx->Pixel.MapItoBsize; - break; - case GL_PIXEL_MAP_I_TO_G_SIZE: - *params = (GLdouble) ctx->Pixel.MapItoGsize; - break; - case GL_PIXEL_MAP_I_TO_I_SIZE: - *params = (GLdouble) ctx->Pixel.MapItoIsize; - break; - case GL_PIXEL_MAP_I_TO_R_SIZE: - *params = (GLdouble) ctx->Pixel.MapItoRsize; - break; - case GL_PIXEL_MAP_R_TO_R_SIZE: - *params = (GLdouble) ctx->Pixel.MapRtoRsize; - break; - case GL_PIXEL_MAP_S_TO_S_SIZE: - *params = (GLdouble) ctx->Pixel.MapStoSsize; - break; - case GL_POINT_SIZE: - *params = (GLdouble) ctx->Point.Size; - break; - case GL_POINT_SIZE_GRANULARITY: - *params = (GLdouble) ctx->Const.PointSizeGranularity; - break; - case GL_POINT_SIZE_RANGE: - params[0] = (GLdouble) ctx->Const.MinPointSizeAA; - params[1] = (GLdouble) ctx->Const.MaxPointSizeAA; - break; - case GL_ALIASED_POINT_SIZE_RANGE: - params[0] = (GLdouble) ctx->Const.MinPointSize; - params[1] = (GLdouble) ctx->Const.MaxPointSize; - break; - case GL_POINT_SMOOTH: - *params = (GLdouble) ctx->Point.SmoothFlag; - break; - case GL_POINT_SMOOTH_HINT: - *params = ENUM_TO_DOUBLE(ctx->Hint.PointSmooth); - break; - case GL_POINT_SIZE_MIN_EXT: - *params = (GLdouble) (ctx->Point.MinSize); - break; - case GL_POINT_SIZE_MAX_EXT: - *params = (GLdouble) (ctx->Point.MaxSize); - break; - case GL_POINT_FADE_THRESHOLD_SIZE_EXT: - *params = (GLdouble) (ctx->Point.Threshold); - break; - case GL_DISTANCE_ATTENUATION_EXT: - params[0] = (GLdouble) (ctx->Point.Params[0]); - params[1] = (GLdouble) (ctx->Point.Params[1]); - params[2] = (GLdouble) (ctx->Point.Params[2]); - break; - case GL_POLYGON_MODE: - params[0] = ENUM_TO_DOUBLE(ctx->Polygon.FrontMode); - params[1] = ENUM_TO_DOUBLE(ctx->Polygon.BackMode); - break; - case GL_POLYGON_OFFSET_BIAS_EXT: /* GL_EXT_polygon_offset */ - *params = (GLdouble) ctx->Polygon.OffsetUnits; - break; - case GL_POLYGON_OFFSET_FACTOR: - *params = (GLdouble) ctx->Polygon.OffsetFactor; - break; - case GL_POLYGON_OFFSET_UNITS: - *params = (GLdouble) ctx->Polygon.OffsetUnits; - break; - case GL_POLYGON_SMOOTH: - *params = (GLdouble) ctx->Polygon.SmoothFlag; - break; - case GL_POLYGON_SMOOTH_HINT: - *params = ENUM_TO_DOUBLE(ctx->Hint.PolygonSmooth); - break; - case GL_POLYGON_STIPPLE: - *params = (GLdouble) ctx->Polygon.StippleFlag; - break; - case GL_PROJECTION_MATRIX: - for (i=0;i<16;i++) { - params[i] = (GLdouble) ctx->ProjectionMatrixStack.Top->m[i]; - } - break; - case GL_PROJECTION_STACK_DEPTH: - *params = (GLdouble) (ctx->ProjectionMatrixStack.Depth + 1); - break; - case GL_READ_BUFFER: - *params = ENUM_TO_DOUBLE(ctx->Pixel.ReadBuffer); - break; - case GL_RED_BIAS: - *params = (GLdouble) ctx->Pixel.RedBias; - break; - case GL_RED_BITS: - *params = (GLdouble) ctx->Visual.redBits; - break; - case GL_RED_SCALE: - *params = (GLdouble) ctx->Pixel.RedScale; - break; - case GL_RENDER_MODE: - *params = ENUM_TO_DOUBLE(ctx->RenderMode); - break; - case GL_RESCALE_NORMAL: - *params = (GLdouble) ctx->Transform.RescaleNormals; - break; - case GL_RGBA_MODE: - *params = (GLdouble) ctx->Visual.rgbMode; - break; - case GL_SCISSOR_BOX: - params[0] = (GLdouble) ctx->Scissor.X; - params[1] = (GLdouble) ctx->Scissor.Y; - params[2] = (GLdouble) ctx->Scissor.Width; - params[3] = (GLdouble) ctx->Scissor.Height; - break; - case GL_SCISSOR_TEST: - *params = (GLdouble) ctx->Scissor.Enabled; - break; - case GL_SELECTION_BUFFER_SIZE: - *params = (GLdouble) ctx->Select.BufferSize; - break; - case GL_SHADE_MODEL: - *params = ENUM_TO_DOUBLE(ctx->Light.ShadeModel); - break; - case GL_SHARED_TEXTURE_PALETTE_EXT: - *params = (GLdouble) ctx->Texture.SharedPalette; - break; - case GL_STENCIL_BITS: - *params = (GLdouble) ctx->Visual.stencilBits; - break; - case GL_STENCIL_CLEAR_VALUE: - *params = (GLdouble) ctx->Stencil.Clear; - break; - case GL_STENCIL_FAIL: - *params = ENUM_TO_DOUBLE(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_FUNC: - *params = ENUM_TO_DOUBLE(ctx->Stencil.Function[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_PASS_DEPTH_FAIL: - *params = ENUM_TO_DOUBLE(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_PASS_DEPTH_PASS: - *params = ENUM_TO_DOUBLE(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_REF: - *params = (GLdouble) ctx->Stencil.Ref[ctx->Stencil.ActiveFace]; - break; - case GL_STENCIL_TEST: - *params = (GLdouble) ctx->Stencil.Enabled; - break; - case GL_STENCIL_VALUE_MASK: - *params = (GLdouble) ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]; - break; - case GL_STENCIL_WRITEMASK: - *params = (GLdouble) ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]; - break; - case GL_STEREO: - *params = (GLdouble) ctx->Visual.stereoMode; - break; - case GL_SUBPIXEL_BITS: - *params = (GLdouble) ctx->Const.SubPixelBits; - break; - case GL_TEXTURE_1D: - *params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1.0 : 0.0; - break; - case GL_TEXTURE_2D: - *params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1.0 : 0.0; - break; - case GL_TEXTURE_3D: - *params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1.0 : 0.0; - break; - case GL_TEXTURE_BINDING_1D: - *params = (GLdouble) textureUnit->Current1D->Name; - break; - case GL_TEXTURE_BINDING_2D: - *params = (GLdouble) textureUnit->Current2D->Name; - break; - case GL_TEXTURE_BINDING_3D: - *params = (GLdouble) textureUnit->Current3D->Name; - break; - case GL_TEXTURE_ENV_COLOR: - params[0] = (GLdouble) textureUnit->EnvColor[0]; - params[1] = (GLdouble) textureUnit->EnvColor[1]; - params[2] = (GLdouble) textureUnit->EnvColor[2]; - params[3] = (GLdouble) textureUnit->EnvColor[3]; - break; - case GL_TEXTURE_ENV_MODE: - *params = ENUM_TO_DOUBLE(textureUnit->EnvMode); - break; - case GL_TEXTURE_GEN_S: - *params = (textureUnit->TexGenEnabled & S_BIT) ? 1.0 : 0.0; - break; - case GL_TEXTURE_GEN_T: - *params = (textureUnit->TexGenEnabled & T_BIT) ? 1.0 : 0.0; - break; - case GL_TEXTURE_GEN_R: - *params = (textureUnit->TexGenEnabled & R_BIT) ? 1.0 : 0.0; - break; - case GL_TEXTURE_GEN_Q: - *params = (textureUnit->TexGenEnabled & Q_BIT) ? 1.0 : 0.0; - break; - case GL_TEXTURE_MATRIX: - for (i=0;i<16;i++) { - params[i] = (GLdouble) ctx->TextureMatrixStack[texUnit].Top->m[i]; - } - break; - case GL_TEXTURE_STACK_DEPTH: - *params = (GLdouble) (ctx->TextureMatrixStack[texUnit].Depth + 1); - break; - case GL_UNPACK_ALIGNMENT: - *params = (GLdouble) ctx->Unpack.Alignment; - break; - case GL_UNPACK_LSB_FIRST: - *params = (GLdouble) ctx->Unpack.LsbFirst; - break; - case GL_UNPACK_ROW_LENGTH: - *params = (GLdouble) ctx->Unpack.RowLength; - break; - case GL_UNPACK_SKIP_PIXELS: - *params = (GLdouble) ctx->Unpack.SkipPixels; - break; - case GL_UNPACK_SKIP_ROWS: - *params = (GLdouble) ctx->Unpack.SkipRows; - break; - case GL_UNPACK_SWAP_BYTES: - *params = (GLdouble) ctx->Unpack.SwapBytes; - break; - case GL_UNPACK_SKIP_IMAGES_EXT: - *params = (GLdouble) ctx->Unpack.SkipImages; - break; - case GL_UNPACK_IMAGE_HEIGHT_EXT: - *params = (GLdouble) ctx->Unpack.ImageHeight; - break; - case GL_UNPACK_CLIENT_STORAGE_APPLE: - *params = (GLdouble) ctx->Unpack.ClientStorage; - break; - case GL_VIEWPORT: - params[0] = (GLdouble) ctx->Viewport.X; - params[1] = (GLdouble) ctx->Viewport.Y; - params[2] = (GLdouble) ctx->Viewport.Width; - params[3] = (GLdouble) ctx->Viewport.Height; - break; - case GL_ZOOM_X: - *params = (GLdouble) ctx->Pixel.ZoomX; - break; - case GL_ZOOM_Y: - *params = (GLdouble) ctx->Pixel.ZoomY; - break; - case GL_VERTEX_ARRAY: - *params = (GLdouble) ctx->Array.Vertex.Enabled; - break; - case GL_VERTEX_ARRAY_SIZE: - *params = (GLdouble) ctx->Array.Vertex.Size; - break; - case GL_VERTEX_ARRAY_TYPE: - *params = ENUM_TO_DOUBLE(ctx->Array.Vertex.Type); - break; - case GL_VERTEX_ARRAY_STRIDE: - *params = (GLdouble) ctx->Array.Vertex.Stride; - break; - case GL_VERTEX_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_NORMAL_ARRAY: - *params = (GLdouble) ctx->Array.Normal.Enabled; - break; - case GL_NORMAL_ARRAY_TYPE: - *params = ENUM_TO_DOUBLE(ctx->Array.Normal.Type); - break; - case GL_NORMAL_ARRAY_STRIDE: - *params = (GLdouble) ctx->Array.Normal.Stride; - break; - case GL_NORMAL_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_COLOR_ARRAY: - *params = (GLdouble) ctx->Array.Color.Enabled; - break; - case GL_COLOR_ARRAY_SIZE: - *params = (GLdouble) ctx->Array.Color.Size; - break; - case GL_COLOR_ARRAY_TYPE: - *params = ENUM_TO_DOUBLE(ctx->Array.Color.Type); - break; - case GL_COLOR_ARRAY_STRIDE: - *params = (GLdouble) ctx->Array.Color.Stride; - break; - case GL_COLOR_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_INDEX_ARRAY: - *params = (GLdouble) ctx->Array.Index.Enabled; - break; - case GL_INDEX_ARRAY_TYPE: - *params = ENUM_TO_DOUBLE(ctx->Array.Index.Type); - break; - case GL_INDEX_ARRAY_STRIDE: - *params = (GLdouble) ctx->Array.Index.Stride; - break; - case GL_INDEX_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_TEXTURE_COORD_ARRAY: - *params = (GLdouble) ctx->Array.TexCoord[clientUnit].Enabled; - break; - case GL_TEXTURE_COORD_ARRAY_SIZE: - *params = (GLdouble) ctx->Array.TexCoord[clientUnit].Size; - break; - case GL_TEXTURE_COORD_ARRAY_TYPE: - *params = ENUM_TO_DOUBLE(ctx->Array.TexCoord[clientUnit].Type); - break; - case GL_TEXTURE_COORD_ARRAY_STRIDE: - *params = (GLdouble) ctx->Array.TexCoord[clientUnit].Stride; - break; - case GL_TEXTURE_COORD_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_EDGE_FLAG_ARRAY: - *params = (GLdouble) ctx->Array.EdgeFlag.Enabled; - break; - case GL_EDGE_FLAG_ARRAY_STRIDE: - *params = (GLdouble) ctx->Array.EdgeFlag.Stride; - break; - case GL_EDGE_FLAG_ARRAY_COUNT_EXT: - *params = 0.0; - break; - - /* GL_ARB_multitexture */ - case GL_MAX_TEXTURE_UNITS_ARB: - CHECK_EXTENSION_D(ARB_multitexture, pname); - *params = (GLdouble) MIN2(ctx->Const.MaxTextureImageUnits, - ctx->Const.MaxTextureCoordUnits); - break; - case GL_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_D(ARB_multitexture, pname); - *params = (GLdouble) (GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit); - break; - case GL_CLIENT_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_D(ARB_multitexture, pname); - *params = (GLdouble) (GL_TEXTURE0_ARB + clientUnit); - break; - - /* GL_ARB_texture_cube_map */ - case GL_TEXTURE_CUBE_MAP_ARB: - CHECK_EXTENSION_D(ARB_texture_cube_map, pname); - *params = (GLdouble) _mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB); - break; - case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - CHECK_EXTENSION_D(ARB_texture_cube_map, pname); - *params = (GLdouble) textureUnit->CurrentCubeMap->Name; - break; - case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: - CHECK_EXTENSION_D(ARB_texture_cube_map, pname); - *params = (GLdouble) (1 << (ctx->Const.MaxCubeTextureLevels - 1)); - break; - - /* GL_ARB_texture_compression */ - case GL_TEXTURE_COMPRESSION_HINT_ARB: - CHECK_EXTENSION_D(ARB_texture_compression, pname); - *params = (GLdouble) ctx->Hint.TextureCompression; - break; - case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_D(ARB_texture_compression, pname); - *params = (GLdouble) _mesa_get_compressed_formats(ctx, NULL); - break; - case GL_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_D(ARB_texture_compression, pname); - { - GLint formats[100]; - GLuint i, n; - n = _mesa_get_compressed_formats(ctx, formats); - for (i = 0; i < n; i++) - params[i] = (GLdouble) formats[i]; - } - break; - - /* GL_EXT_compiled_vertex_array */ - case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT: - *params = (GLdouble) ctx->Array.LockFirst; - break; - case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT: - *params = (GLdouble) ctx->Array.LockCount; - break; - - /* GL_ARB_transpose_matrix */ - case GL_TRANSPOSE_COLOR_MATRIX_ARB: - { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ColorMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = (GLdouble) tm[i]; - } - } - break; - case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB: - { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ModelviewMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = (GLdouble) tm[i]; - } - } - break; - case GL_TRANSPOSE_PROJECTION_MATRIX_ARB: - { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ProjectionMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = (GLdouble) tm[i]; - } - } - break; - case GL_TRANSPOSE_TEXTURE_MATRIX_ARB: - { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->TextureMatrixStack[texUnit].Top->m); - for (i=0;i<16;i++) { - params[i] = (GLdouble) tm[i]; - } - } - break; - - /* GL_HP_occlusion_test */ - case GL_OCCLUSION_TEST_HP: - CHECK_EXTENSION_D(HP_occlusion_test, pname); - *params = (GLdouble) ctx->Depth.OcclusionTest; - break; - case GL_OCCLUSION_TEST_RESULT_HP: - CHECK_EXTENSION_D(HP_occlusion_test, pname); - if (ctx->Depth.OcclusionTest) - *params = (GLdouble) ctx->OcclusionResult; - else - *params = (GLdouble) ctx->OcclusionResultSaved; - /* reset flag now */ - ctx->OcclusionResult = GL_FALSE; - ctx->OcclusionResultSaved = GL_FALSE; - break; - - /* GL_SGIS_pixel_texture */ - case GL_PIXEL_TEXTURE_SGIS: - *params = (GLdouble) ctx->Pixel.PixelTextureEnabled; - break; - - /* GL_SGIX_pixel_texture */ - case GL_PIXEL_TEX_GEN_SGIX: - *params = (GLdouble) ctx->Pixel.PixelTextureEnabled; - break; - case GL_PIXEL_TEX_GEN_MODE_SGIX: - *params = (GLdouble) pixel_texgen_mode(ctx); - break; - - /* GL_SGI_color_matrix (also in 1.2 imaging) */ - case GL_COLOR_MATRIX_SGI: - for (i=0;i<16;i++) { - params[i] = (GLdouble) ctx->ColorMatrixStack.Top->m[i]; - } - break; - case GL_COLOR_MATRIX_STACK_DEPTH_SGI: - *params = (GLdouble) (ctx->ColorMatrixStack.Depth + 1); - break; - case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI: - *params = (GLdouble) MAX_COLOR_STACK_DEPTH; - break; - case GL_POST_COLOR_MATRIX_RED_SCALE_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixScale[0]; - break; - case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixScale[1]; - break; - case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixScale[2]; - break; - case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixScale[3]; - break; - case GL_POST_COLOR_MATRIX_RED_BIAS_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixBias[0]; - break; - case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixBias[1]; - break; - case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixBias[2]; - break; - case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixBias[3]; - break; - - /* GL_EXT_convolution (also in 1.2 imaging) */ - case GL_CONVOLUTION_1D_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.Convolution1DEnabled; - break; - case GL_CONVOLUTION_2D: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.Convolution2DEnabled; - break; - case GL_SEPARABLE_2D: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.Separable2DEnabled; - break; - case GL_POST_CONVOLUTION_RED_SCALE_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionScale[0]; - break; - case GL_POST_CONVOLUTION_GREEN_SCALE_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionScale[1]; - break; - case GL_POST_CONVOLUTION_BLUE_SCALE_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionScale[2]; - break; - case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionScale[3]; - break; - case GL_POST_CONVOLUTION_RED_BIAS_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionBias[0]; - break; - case GL_POST_CONVOLUTION_GREEN_BIAS_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionBias[1]; - break; - case GL_POST_CONVOLUTION_BLUE_BIAS_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionBias[2]; - break; - case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT: - CHECK_EXTENSION_D(EXT_convolution, pname); - *params = (GLdouble) ctx->Pixel.PostConvolutionBias[2]; - break; - - /* GL_EXT_histogram (also in 1.2 imaging) */ - case GL_HISTOGRAM: - CHECK_EXTENSION_D(EXT_histogram, pname); - *params = (GLdouble) ctx->Pixel.HistogramEnabled; - break; - case GL_MINMAX: - CHECK_EXTENSION_D(EXT_histogram, pname); - *params = (GLdouble) ctx->Pixel.MinMaxEnabled; - break; - - /* GL_SGI_color_table (also in 1.2 imaging */ - case GL_COLOR_TABLE_SGI: - *params = (GLdouble) ctx->Pixel.ColorTableEnabled; - break; - case GL_POST_CONVOLUTION_COLOR_TABLE_SGI: - *params = (GLdouble) ctx->Pixel.PostConvolutionColorTableEnabled; - break; - case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI: - *params = (GLdouble) ctx->Pixel.PostColorMatrixColorTableEnabled; - break; - - /* GL_SGI_texture_color_table */ - case GL_TEXTURE_COLOR_TABLE_SGI: - CHECK_EXTENSION_D(SGI_texture_color_table, pname); - *params = (GLdouble) textureUnit->ColorTableEnabled; - break; - - /* GL_EXT_secondary_color */ - case GL_COLOR_SUM_EXT: - CHECK_EXTENSION_D(EXT_secondary_color, pname); - *params = (GLdouble) ctx->Fog.ColorSumEnabled; - break; - case GL_CURRENT_SECONDARY_COLOR_EXT: - CHECK_EXTENSION_D(EXT_secondary_color, pname); - FLUSH_CURRENT(ctx, 0); - params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]; - params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]; - params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]; - params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]; - break; - case GL_SECONDARY_COLOR_ARRAY_EXT: - CHECK_EXTENSION_D(EXT_secondary_color, pname); - *params = (GLdouble) ctx->Array.SecondaryColor.Enabled; - break; - case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT: - CHECK_EXTENSION_D(EXT_secondary_color, pname); - *params = (GLdouble) ctx->Array.SecondaryColor.Type; - break; - case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_D(EXT_secondary_color, pname); - *params = (GLdouble) ctx->Array.SecondaryColor.Stride; - break; - case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: - CHECK_EXTENSION_D(EXT_secondary_color, pname); - *params = (GLdouble) ctx->Array.SecondaryColor.Size; - break; - - /* GL_EXT_fog_coord */ - case GL_CURRENT_FOG_COORDINATE_EXT: - CHECK_EXTENSION_D(EXT_fog_coord, pname); - FLUSH_CURRENT(ctx, 0); - *params = (GLdouble) ctx->Current.Attrib[VERT_ATTRIB_FOG][0]; - break; - case GL_FOG_COORDINATE_ARRAY_EXT: - CHECK_EXTENSION_D(EXT_fog_coord, pname); - *params = (GLdouble) ctx->Array.FogCoord.Enabled; - break; - case GL_FOG_COORDINATE_ARRAY_TYPE_EXT: - CHECK_EXTENSION_D(EXT_fog_coord, pname); - *params = (GLdouble) ctx->Array.FogCoord.Type; - break; - case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_D(EXT_fog_coord, pname); - *params = (GLdouble) ctx->Array.FogCoord.Stride; - break; - case GL_FOG_COORDINATE_SOURCE_EXT: - CHECK_EXTENSION_D(EXT_fog_coord, pname); - *params = (GLdouble) ctx->Fog.FogCoordinateSource; - break; - - /* GL_EXT_texture_lod_bias */ - case GL_MAX_TEXTURE_LOD_BIAS_EXT: - *params = (GLdouble) ctx->Const.MaxTextureLodBias; - break; - - /* GL_EXT_texture_filter_anisotropic */ - case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: - CHECK_EXTENSION_D(EXT_texture_filter_anisotropic, pname); - *params = (GLdouble) ctx->Const.MaxTextureMaxAnisotropy; - break; - - /* GL_ARB_multisample */ - case GL_MULTISAMPLE_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = (GLdouble) ctx->Multisample.Enabled; - break; - case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = (GLdouble) ctx->Multisample.SampleAlphaToCoverage; - break; - case GL_SAMPLE_ALPHA_TO_ONE_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = (GLdouble) ctx->Multisample.SampleAlphaToOne; - break; - case GL_SAMPLE_COVERAGE_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = (GLdouble) ctx->Multisample.SampleCoverage; - break; - case GL_SAMPLE_COVERAGE_VALUE_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = ctx->Multisample.SampleCoverageValue; - break; - case GL_SAMPLE_COVERAGE_INVERT_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = (GLdouble) ctx->Multisample.SampleCoverageInvert; - break; - case GL_SAMPLE_BUFFERS_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = 0.0; /* XXX fix someday */ - break; - case GL_SAMPLES_ARB: - CHECK_EXTENSION_D(ARB_multisample, pname); - *params = 0.0; /* XXX fix someday */ - break; - - /* GL_IBM_rasterpos_clip */ - case GL_RASTER_POSITION_UNCLIPPED_IBM: - CHECK_EXTENSION_D(IBM_rasterpos_clip, pname); - *params = (GLdouble) ctx->Transform.RasterPositionUnclipped; - break; - - /* GL_NV_point_sprite */ - case GL_POINT_SPRITE_NV: - CHECK_EXTENSION2_D(NV_point_sprite, ARB_point_sprite, pname); - *params = (GLdouble) ctx->Point.PointSprite; - break; - case GL_POINT_SPRITE_R_MODE_NV: - CHECK_EXTENSION_D(NV_point_sprite, pname); - *params = (GLdouble) ctx->Point.SpriteRMode; - break; - case GL_POINT_SPRITE_COORD_ORIGIN: - CHECK_EXTENSION_D(ARB_point_sprite, pname); - *params = (GLdouble) ctx->Point.SpriteOrigin; - break; - - /* GL_SGIS_generate_mipmap */ - case GL_GENERATE_MIPMAP_HINT_SGIS: - CHECK_EXTENSION_D(SGIS_generate_mipmap, pname); - *params = (GLdouble) ctx->Hint.GenerateMipmap; - break; - -#if FEATURE_NV_vertex_program - case GL_VERTEX_PROGRAM_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->VertexProgram.Enabled; - break; - case GL_VERTEX_PROGRAM_POINT_SIZE_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->VertexProgram.PointSizeEnabled; - break; - case GL_VERTEX_PROGRAM_TWO_SIDE_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->VertexProgram.TwoSideEnabled; - break; - case GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->Const.MaxProgramMatrixStackDepth; - break; - case GL_MAX_TRACK_MATRICES_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->Const.MaxProgramMatrices; - break; - case GL_CURRENT_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - *params = (GLdouble) ctx->CurrentStack->Depth + 1; - break; - case GL_CURRENT_MATRIX_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - for (i = 0; i < 16; i++) - params[i] = (GLdouble) ctx->CurrentStack->Top->m[i]; - break; - case GL_VERTEX_PROGRAM_BINDING_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - if (ctx->VertexProgram.Current) - *params = (GLdouble) ctx->VertexProgram.Current->Base.Id; - else - *params = 0.0; - break; - case GL_PROGRAM_ERROR_POSITION_NV: - CHECK_EXTENSION2_D(NV_vertex_program, ARB_vertex_program, pname); - *params = (GLdouble) ctx->Program.ErrorPos; - break; - case GL_VERTEX_ATTRIB_ARRAY0_NV: - case GL_VERTEX_ATTRIB_ARRAY1_NV: - case GL_VERTEX_ATTRIB_ARRAY2_NV: - case GL_VERTEX_ATTRIB_ARRAY3_NV: - case GL_VERTEX_ATTRIB_ARRAY4_NV: - case GL_VERTEX_ATTRIB_ARRAY5_NV: - case GL_VERTEX_ATTRIB_ARRAY6_NV: - case GL_VERTEX_ATTRIB_ARRAY7_NV: - case GL_VERTEX_ATTRIB_ARRAY8_NV: - case GL_VERTEX_ATTRIB_ARRAY9_NV: - case GL_VERTEX_ATTRIB_ARRAY10_NV: - case GL_VERTEX_ATTRIB_ARRAY11_NV: - case GL_VERTEX_ATTRIB_ARRAY12_NV: - case GL_VERTEX_ATTRIB_ARRAY13_NV: - case GL_VERTEX_ATTRIB_ARRAY14_NV: - case GL_VERTEX_ATTRIB_ARRAY15_NV: - CHECK_EXTENSION_D(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_VERTEX_ATTRIB_ARRAY0_NV; - *params = (GLdouble) ctx->Array.VertexAttrib[n].Enabled; - } - break; - case GL_MAP1_VERTEX_ATTRIB0_4_NV: - case GL_MAP1_VERTEX_ATTRIB1_4_NV: - case GL_MAP1_VERTEX_ATTRIB2_4_NV: - case GL_MAP1_VERTEX_ATTRIB3_4_NV: - case GL_MAP1_VERTEX_ATTRIB4_4_NV: - case GL_MAP1_VERTEX_ATTRIB5_4_NV: - case GL_MAP1_VERTEX_ATTRIB6_4_NV: - case GL_MAP1_VERTEX_ATTRIB7_4_NV: - case GL_MAP1_VERTEX_ATTRIB8_4_NV: - case GL_MAP1_VERTEX_ATTRIB9_4_NV: - case GL_MAP1_VERTEX_ATTRIB10_4_NV: - case GL_MAP1_VERTEX_ATTRIB11_4_NV: - case GL_MAP1_VERTEX_ATTRIB12_4_NV: - case GL_MAP1_VERTEX_ATTRIB13_4_NV: - case GL_MAP1_VERTEX_ATTRIB14_4_NV: - case GL_MAP1_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP1_VERTEX_ATTRIB0_4_NV; - *params = (GLdouble) ctx->Eval.Map1Attrib[n]; - } - break; - case GL_MAP2_VERTEX_ATTRIB0_4_NV: - case GL_MAP2_VERTEX_ATTRIB1_4_NV: - case GL_MAP2_VERTEX_ATTRIB2_4_NV: - case GL_MAP2_VERTEX_ATTRIB3_4_NV: - case GL_MAP2_VERTEX_ATTRIB4_4_NV: - case GL_MAP2_VERTEX_ATTRIB5_4_NV: - case GL_MAP2_VERTEX_ATTRIB6_4_NV: - case GL_MAP2_VERTEX_ATTRIB7_4_NV: - case GL_MAP2_VERTEX_ATTRIB8_4_NV: - case GL_MAP2_VERTEX_ATTRIB9_4_NV: - case GL_MAP2_VERTEX_ATTRIB10_4_NV: - case GL_MAP2_VERTEX_ATTRIB11_4_NV: - case GL_MAP2_VERTEX_ATTRIB12_4_NV: - case GL_MAP2_VERTEX_ATTRIB13_4_NV: - case GL_MAP2_VERTEX_ATTRIB14_4_NV: - case GL_MAP2_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_B(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP2_VERTEX_ATTRIB0_4_NV; - *params = (GLdouble) ctx->Eval.Map2Attrib[n]; - } - break; -#endif /* FEATURE_NV_vertex_program */ - -#if FEATURE_NV_fragment_program - case GL_FRAGMENT_PROGRAM_NV: - CHECK_EXTENSION_D(NV_fragment_program, pname); - *params = (GLdouble) ctx->FragmentProgram.Enabled; - break; - case GL_MAX_TEXTURE_COORDS_NV: - CHECK_EXTENSION_B(NV_fragment_program, pname); - *params = (GLdouble) ctx->Const.MaxTextureCoordUnits; - break; - case GL_MAX_TEXTURE_IMAGE_UNITS_NV: - CHECK_EXTENSION_B(NV_fragment_program, pname); - *params = (GLdouble) ctx->Const.MaxTextureImageUnits; - break; - case GL_FRAGMENT_PROGRAM_BINDING_NV: - CHECK_EXTENSION_D(NV_fragment_program, pname); - if (ctx->FragmentProgram.Current) - *params = (GLdouble) ctx->FragmentProgram.Current->Base.Id; - else - *params = 0.0; - break; - case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV: - CHECK_EXTENSION_D(NV_fragment_program, pname); - *params = (GLdouble) MAX_NV_FRAGMENT_PROGRAM_PARAMS; - break; -#endif /* FEATURE_NV_fragment_program */ - - /* GL_NV_texture_rectangle */ - case GL_TEXTURE_RECTANGLE_NV: - CHECK_EXTENSION_D(NV_texture_rectangle, pname); - *params = (GLdouble) _mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV); - break; - case GL_TEXTURE_BINDING_RECTANGLE_NV: - CHECK_EXTENSION_D(NV_texture_rectangle, pname); - *params = (GLdouble) textureUnit->CurrentRect->Name; - break; - case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV: - CHECK_EXTENSION_D(NV_texture_rectangle, pname); - *params = (GLdouble) ctx->Const.MaxTextureRectSize; - break; - - /* GL_EXT_stencil_two_side */ - case GL_STENCIL_TEST_TWO_SIDE_EXT: - CHECK_EXTENSION_D(EXT_stencil_two_side, pname); - *params = (GLdouble) ctx->Stencil.TestTwoSide; - break; - case GL_ACTIVE_STENCIL_FACE_EXT: - CHECK_EXTENSION_D(EXT_stencil_two_side, pname); - *params = (GLdouble) (ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT); - break; - - /* GL_NV_light_max_exponent */ - case GL_MAX_SHININESS_NV: - *params = (GLdouble) ctx->Const.MaxShininess; - break; - case GL_MAX_SPOT_EXPONENT_NV: - *params = (GLdouble) ctx->Const.MaxSpotExponent; - break; - -#if FEATURE_ARB_vertex_buffer_object - case GL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.ArrayBufferObj->Name; - break; - case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.Vertex.BufferObj->Name; - break; - case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.Normal.BufferObj->Name; - break; - case GL_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.Color.BufferObj->Name; - break; - case GL_INDEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.Index.BufferObj->Name; - break; - case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.TexCoord[clientUnit].BufferObj->Name; - break; - case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.EdgeFlag.BufferObj->Name; - break; - case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.SecondaryColor.BufferObj->Name; - break; - case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.FogCoord.BufferObj->Name; - break; - /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */ - case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname); - *params = (GLdouble) ctx->Array.ElementArrayBufferObj->Name; - break; -#endif -#if FEATURE_EXT_pixel_buffer_object - case GL_PIXEL_PACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_D(EXT_pixel_buffer_object, pname); - *params = (GLdouble) ctx->Pack.BufferObj->Name; - break; - case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_D(EXT_pixel_buffer_object, pname); - *params = (GLdouble) ctx->Unpack.BufferObj->Name; - break; -#endif - -#if FEATURE_ARB_vertex_program - /* GL_NV_vertex_program and GL_ARB_fragment_program define others */ - case GL_MAX_VERTEX_ATTRIBS_ARB: - CHECK_EXTENSION_D(ARB_vertex_program, pname); - *params = (GLdouble) ctx->Const.MaxVertexProgramAttribs; - break; -#endif - -#if FEATURE_ARB_fragment_program - case GL_FRAGMENT_PROGRAM_ARB: - CHECK_EXTENSION_D(ARB_fragment_program, pname); - *params = (GLdouble) ctx->FragmentProgram.Enabled; - break; - case GL_TRANSPOSE_CURRENT_MATRIX_ARB: - CHECK_EXTENSION_D(ARB_fragment_program, pname); - params[0] = ctx->CurrentStack->Top->m[0]; - params[1] = ctx->CurrentStack->Top->m[4]; - params[2] = ctx->CurrentStack->Top->m[8]; - params[3] = ctx->CurrentStack->Top->m[12]; - params[4] = ctx->CurrentStack->Top->m[1]; - params[5] = ctx->CurrentStack->Top->m[5]; - params[6] = ctx->CurrentStack->Top->m[9]; - params[7] = ctx->CurrentStack->Top->m[13]; - params[8] = ctx->CurrentStack->Top->m[2]; - params[9] = ctx->CurrentStack->Top->m[6]; - params[10] = ctx->CurrentStack->Top->m[10]; - params[11] = ctx->CurrentStack->Top->m[14]; - params[12] = ctx->CurrentStack->Top->m[3]; - params[13] = ctx->CurrentStack->Top->m[7]; - params[14] = ctx->CurrentStack->Top->m[11]; - params[15] = ctx->CurrentStack->Top->m[15]; - break; - /* Remaining ARB_fragment_program queries alias with - * the GL_NV_fragment_program queries. - */ -#endif - - /* GL_EXT_depth_bounds_test */ - case GL_DEPTH_BOUNDS_TEST_EXT: - CHECK_EXTENSION_D(EXT_depth_bounds_test, pname); - params[0] = (GLdouble) ctx->Depth.BoundsTest; - break; - case GL_DEPTH_BOUNDS_EXT: - CHECK_EXTENSION_D(EXT_depth_bounds_test, pname); - params[0] = ctx->Depth.BoundsMin; - params[1] = ctx->Depth.BoundsMax; - break; - -#if FEATURE_MESA_program_debug - case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_D(MESA_program_debug, pname); - *params = (GLdouble) ctx->FragmentProgram.CallbackEnabled; - break; - case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_D(MESA_program_debug, pname); - *params = (GLdouble) ctx->VertexProgram.CallbackEnabled; - break; - case GL_FRAGMENT_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_D(MESA_program_debug, pname); - *params = (GLdouble) ctx->FragmentProgram.CurrentPosition; - break; - case GL_VERTEX_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_D(MESA_program_debug, pname); - *params = (GLdouble) ctx->VertexProgram.CurrentPosition; - break; -#endif - - case GL_MAX_DRAW_BUFFERS_ARB: - CHECK_EXTENSION_D(ARB_draw_buffers, pname); - *params = (GLdouble) ctx->Const.MaxDrawBuffers; - break; - case GL_DRAW_BUFFER0_ARB: - case GL_DRAW_BUFFER1_ARB: - case GL_DRAW_BUFFER2_ARB: - case GL_DRAW_BUFFER3_ARB: - case GL_DRAW_BUFFER4_ARB: - case GL_DRAW_BUFFER5_ARB: - case GL_DRAW_BUFFER6_ARB: - case GL_DRAW_BUFFER7_ARB: - case GL_DRAW_BUFFER8_ARB: - case GL_DRAW_BUFFER9_ARB: - case GL_DRAW_BUFFER10_ARB: - case GL_DRAW_BUFFER11_ARB: - case GL_DRAW_BUFFER12_ARB: - case GL_DRAW_BUFFER13_ARB: - case GL_DRAW_BUFFER14_ARB: - case GL_DRAW_BUFFER15_ARB: - CHECK_EXTENSION_D(ARB_draw_buffers, pname); - { - GLuint i = pname - GL_DRAW_BUFFER0_ARB; - if (i >= ctx->Const.MaxDrawBuffers) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetDoublev(GL_DRAW_BUFFERx_ARB)"); - return; - } - *params = (GLdouble) ctx->Color.DrawBuffer[i]; - } - break; - - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - *params = (GLdouble) ctx->Const.ColorReadType; - return; - case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - *params = (GLdouble) ctx->Const.ColorReadFormat; - return; - -#if FEATURE_ATI_fragment_shader - case GL_NUM_FRAGMENT_REGISTERS_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = 6; - break; - case GL_NUM_FRAGMENT_CONSTANTS_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = 8; - break; - case GL_NUM_PASSES_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = 2; - break; - case GL_NUM_INSTRUCTIONS_PER_PASS_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = 8; - break; - case GL_NUM_INSTRUCTIONS_TOTAL_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = 16; - break; - case GL_COLOR_ALPHA_PAIRING_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = GL_TRUE; - break; - case GL_NUM_LOOPBACK_COMPONENTS_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = 3; - break; - case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI: - CHECK_EXTENSION_D(ATI_fragment_shader, pname); - *params = 3; - break; -#endif - - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glGetDoublev(pname=0x%x)", pname); - } -} - - -/** - * Get the value(s) of a selected parameter. - * - * \param pname parameter to be returned. - * \param params will hold the value(s) of the speficifed parameter. - * - * \sa glGetFloatv(). - * - * Tries to get the specified parameter via dd_function_table::GetFloatv, - * otherwise gets the specified parameter from the current context, converting - * it value into GLfloat. - */ void GLAPIENTRY _mesa_GetFloatv( GLenum pname, GLfloat *params ) { GET_CURRENT_CONTEXT(ctx); - GLuint i; - const GLuint clientUnit = ctx->Array.ActiveTexture; - const GLuint texUnit = ctx->Texture.CurrentUnit; - const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); if (!params) return; - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glGetFloatv %s\n", _mesa_lookup_enum_by_nr(pname)); + if (ctx->NewState) + _mesa_update_state(ctx); - if (!ctx->_CurrentProgram) { - /* We need this in order to get correct results for - * GL_OCCLUSION_TEST_RESULT_HP. There might be other important cases. - */ - FLUSH_VERTICES(ctx, 0); - } - - if (ctx->Driver.GetFloatv && (*ctx->Driver.GetFloatv)(ctx, pname, params)) + if (ctx->Driver.GetFloatv && + ctx->Driver.GetFloatv(ctx, pname, params)) return; switch (pname) { case GL_ACCUM_RED_BITS: - *params = (GLfloat) ctx->Visual.accumRedBits; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumRedBits); break; case GL_ACCUM_GREEN_BITS: - *params = (GLfloat) ctx->Visual.accumGreenBits; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumGreenBits); break; case GL_ACCUM_BLUE_BITS: - *params = (GLfloat) ctx->Visual.accumBlueBits; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumBlueBits); break; case GL_ACCUM_ALPHA_BITS: - *params = (GLfloat) ctx->Visual.accumAlphaBits; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.accumAlphaBits); break; case GL_ACCUM_CLEAR_VALUE: params[0] = ctx->Accum.ClearColor[0]; @@ -3464,87 +1929,94 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) params[3] = ctx->Accum.ClearColor[3]; break; case GL_ALPHA_BIAS: - *params = ctx->Pixel.AlphaBias; + params[0] = ctx->Pixel.AlphaBias; break; case GL_ALPHA_BITS: - *params = (GLfloat) ctx->Visual.alphaBits; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.alphaBits); break; case GL_ALPHA_SCALE: - *params = ctx->Pixel.AlphaScale; + params[0] = ctx->Pixel.AlphaScale; break; case GL_ALPHA_TEST: - *params = (GLfloat) ctx->Color.AlphaEnabled; + params[0] = BOOLEAN_TO_FLOAT(ctx->Color.AlphaEnabled); break; case GL_ALPHA_TEST_FUNC: - *params = ENUM_TO_FLOAT(ctx->Color.AlphaFunc); + params[0] = ENUM_TO_FLOAT(ctx->Color.AlphaFunc); break; case GL_ALPHA_TEST_REF: - *params = (GLfloat) ctx->Color.AlphaRef; + params[0] = ctx->Color.AlphaRef; break; case GL_ATTRIB_STACK_DEPTH: - *params = (GLfloat) (ctx->AttribStackDepth); + params[0] = (GLfloat)(ctx->AttribStackDepth); break; case GL_AUTO_NORMAL: - *params = (GLfloat) ctx->Eval.AutoNormal; + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.AutoNormal); break; case GL_AUX_BUFFERS: - *params = (GLfloat) ctx->Visual.numAuxBuffers; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.numAuxBuffers); break; case GL_BLEND: - *params = (GLfloat) ctx->Color.BlendEnabled; + params[0] = BOOLEAN_TO_FLOAT(ctx->Color.BlendEnabled); break; case GL_BLEND_DST: - *params = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB); + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB); break; case GL_BLEND_SRC: - *params = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB); + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB); break; case GL_BLEND_SRC_RGB_EXT: - *params = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB); + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcRGB); break; case GL_BLEND_DST_RGB_EXT: - *params = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB); + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstRGB); break; case GL_BLEND_SRC_ALPHA_EXT: - *params = ENUM_TO_FLOAT(ctx->Color.BlendSrcA); + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendSrcA); break; case GL_BLEND_DST_ALPHA_EXT: - *params = ENUM_TO_FLOAT(ctx->Color.BlendDstA); + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendDstA); break; case GL_BLEND_EQUATION: - *params = ENUM_TO_FLOAT(ctx->Color.BlendEquationRGB); - break; + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendEquationRGB ); + break; case GL_BLEND_EQUATION_ALPHA_EXT: - *params = ENUM_TO_FLOAT(ctx->Color.BlendEquationA); - break; + params[0] = ENUM_TO_FLOAT(ctx->Color.BlendEquationA ); + break; case GL_BLEND_COLOR_EXT: - params[0] = ctx->Color.BlendColor[0]; - params[1] = ctx->Color.BlendColor[1]; - params[2] = ctx->Color.BlendColor[2]; - params[3] = ctx->Color.BlendColor[3]; - break; + params[0] = ctx->Color.BlendColor[0]; + params[1] = ctx->Color.BlendColor[1]; + params[2] = ctx->Color.BlendColor[2]; + params[3] = ctx->Color.BlendColor[3]; + break; case GL_BLUE_BIAS: - *params = ctx->Pixel.BlueBias; + params[0] = ctx->Pixel.BlueBias; break; case GL_BLUE_BITS: - *params = (GLfloat) ctx->Visual.blueBits; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.blueBits); break; case GL_BLUE_SCALE: - *params = ctx->Pixel.BlueScale; + params[0] = ctx->Pixel.BlueScale; break; case GL_CLIENT_ATTRIB_STACK_DEPTH: - *params = (GLfloat) (ctx->ClientAttribStackDepth); + params[0] = (GLfloat)(ctx->ClientAttribStackDepth); break; case GL_CLIP_PLANE0: + params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 0) & 1); + break; case GL_CLIP_PLANE1: + params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 1) & 1); + break; case GL_CLIP_PLANE2: + params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 2) & 1); + break; case GL_CLIP_PLANE3: + params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 3) & 1); + break; case GL_CLIP_PLANE4: + params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 4) & 1); + break; case GL_CLIP_PLANE5: - if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0))) - *params = 1.0; - else - *params = 0.0; + params[0] = BOOLEAN_TO_FLOAT((ctx->Transform.ClipPlanesEnabled >> 5) & 1); break; case GL_COLOR_CLEAR_VALUE: params[0] = ctx->Color.ClearColor[0]; @@ -3553,1625 +2025,1840 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) params[3] = ctx->Color.ClearColor[3]; break; case GL_COLOR_MATERIAL: - *params = (GLfloat) ctx->Light.ColorMaterialEnabled; + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.ColorMaterialEnabled); break; case GL_COLOR_MATERIAL_FACE: - *params = ENUM_TO_FLOAT(ctx->Light.ColorMaterialFace); + params[0] = ENUM_TO_FLOAT(ctx->Light.ColorMaterialFace); break; case GL_COLOR_MATERIAL_PARAMETER: - *params = ENUM_TO_FLOAT(ctx->Light.ColorMaterialMode); + params[0] = ENUM_TO_FLOAT(ctx->Light.ColorMaterialMode); break; case GL_COLOR_WRITEMASK: - params[0] = ctx->Color.ColorMask[RCOMP] ? 1.0F : 0.0F; - params[1] = ctx->Color.ColorMask[GCOMP] ? 1.0F : 0.0F; - params[2] = ctx->Color.ColorMask[BCOMP] ? 1.0F : 0.0F; - params[3] = ctx->Color.ColorMask[ACOMP] ? 1.0F : 0.0F; + params[0] = (GLfloat)(ctx->Color.ColorMask[RCOMP] ? 1 : 0); + params[1] = (GLfloat)(ctx->Color.ColorMask[GCOMP] ? 1 : 0); + params[2] = (GLfloat)(ctx->Color.ColorMask[BCOMP] ? 1 : 0); + params[3] = (GLfloat)(ctx->Color.ColorMask[ACOMP] ? 1 : 0); break; case GL_CULL_FACE: - *params = (GLfloat) ctx->Polygon.CullFlag; + params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.CullFlag); break; case GL_CULL_FACE_MODE: - *params = ENUM_TO_FLOAT(ctx->Polygon.CullFaceMode); + params[0] = ENUM_TO_FLOAT(ctx->Polygon.CullFaceMode); break; case GL_CURRENT_COLOR: - FLUSH_CURRENT(ctx, 0); + { + FLUSH_CURRENT(ctx, 0); params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]; params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]; params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]; params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]; + } break; case GL_CURRENT_INDEX: - FLUSH_CURRENT(ctx, 0); - *params = (GLfloat) ctx->Current.Index; + { + FLUSH_CURRENT(ctx, 0); + params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]; + } break; case GL_CURRENT_NORMAL: - FLUSH_CURRENT(ctx, 0); + { + FLUSH_CURRENT(ctx, 0); params[0] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]; params[1] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]; params[2] = ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]; + } break; case GL_CURRENT_RASTER_COLOR: - params[0] = ctx->Current.RasterColor[0]; - params[1] = ctx->Current.RasterColor[1]; - params[2] = ctx->Current.RasterColor[2]; - params[3] = ctx->Current.RasterColor[3]; - break; + params[0] = ctx->Current.RasterColor[0]; + params[1] = ctx->Current.RasterColor[1]; + params[2] = ctx->Current.RasterColor[2]; + params[3] = ctx->Current.RasterColor[3]; + break; case GL_CURRENT_RASTER_DISTANCE: - params[0] = ctx->Current.RasterDistance; - break; + params[0] = ctx->Current.RasterDistance; + break; case GL_CURRENT_RASTER_INDEX: - *params = ctx->Current.RasterIndex; - break; + params[0] = ctx->Current.RasterIndex; + break; case GL_CURRENT_RASTER_POSITION: - params[0] = ctx->Current.RasterPos[0]; - params[1] = ctx->Current.RasterPos[1]; - params[2] = ctx->Current.RasterPos[2]; - params[3] = ctx->Current.RasterPos[3]; - break; + params[0] = ctx->Current.RasterPos[0]; + params[1] = ctx->Current.RasterPos[1]; + params[2] = ctx->Current.RasterPos[2]; + params[3] = ctx->Current.RasterPos[3]; + break; + case GL_CURRENT_RASTER_SECONDARY_COLOR: + params[0] = ctx->Current.RasterSecondaryColor[0]; + params[1] = ctx->Current.RasterSecondaryColor[1]; + params[2] = ctx->Current.RasterSecondaryColor[2]; + params[3] = ctx->Current.RasterSecondaryColor[3]; + break; case GL_CURRENT_RASTER_TEXTURE_COORDS: - params[0] = ctx->Current.RasterTexCoords[texUnit][0]; - params[1] = ctx->Current.RasterTexCoords[texUnit][1]; - params[2] = ctx->Current.RasterTexCoords[texUnit][2]; - params[3] = ctx->Current.RasterTexCoords[texUnit][3]; - break; + { + const GLuint texUnit = ctx->Texture.CurrentUnit; + params[0] = ctx->Current.RasterTexCoords[texUnit][0]; + params[1] = ctx->Current.RasterTexCoords[texUnit][1]; + params[2] = ctx->Current.RasterTexCoords[texUnit][2]; + params[3] = ctx->Current.RasterTexCoords[texUnit][3]; + } + break; case GL_CURRENT_RASTER_POSITION_VALID: - *params = (GLfloat) ctx->Current.RasterPosValid; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Current.RasterPosValid); + break; case GL_CURRENT_TEXTURE_COORDS: - FLUSH_CURRENT(ctx, 0); - params[0] = (GLfloat) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]; - params[1] = (GLfloat) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]; - params[2] = (GLfloat) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]; - params[3] = (GLfloat) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]; - break; + { + const GLuint texUnit = ctx->Texture.CurrentUnit; + params[0] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]; + params[1] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]; + params[2] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]; + params[3] = ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]; + } + break; case GL_DEPTH_BIAS: - *params = (GLfloat) ctx->Pixel.DepthBias; - break; + params[0] = ctx->Pixel.DepthBias; + break; case GL_DEPTH_BITS: - *params = (GLfloat) ctx->Visual.depthBits; - break; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.depthBits); + break; case GL_DEPTH_CLEAR_VALUE: - *params = (GLfloat) ctx->Depth.Clear; - break; + params[0] = ctx->Depth.Clear; + break; case GL_DEPTH_FUNC: - *params = ENUM_TO_FLOAT(ctx->Depth.Func); - break; + params[0] = ENUM_TO_FLOAT(ctx->Depth.Func); + break; case GL_DEPTH_RANGE: - params[0] = (GLfloat) ctx->Viewport.Near; - params[1] = (GLfloat) ctx->Viewport.Far; - break; + params[0] = ctx->Viewport.Near; + params[1] = ctx->Viewport.Far; + break; case GL_DEPTH_SCALE: - *params = (GLfloat) ctx->Pixel.DepthScale; - break; + params[0] = ctx->Pixel.DepthScale; + break; case GL_DEPTH_TEST: - *params = (GLfloat) ctx->Depth.Test; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.Test); + break; case GL_DEPTH_WRITEMASK: - *params = (GLfloat) ctx->Depth.Mask; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.Mask); + break; case GL_DITHER: - *params = (GLfloat) ctx->Color.DitherFlag; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Color.DitherFlag); + break; case GL_DOUBLEBUFFER: - *params = (GLfloat) ctx->Visual.doubleBufferMode; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.doubleBufferMode); + break; case GL_DRAW_BUFFER: - *params = ENUM_TO_FLOAT(ctx->Color.DrawBuffer[0]); - break; + params[0] = ENUM_TO_FLOAT(ctx->DrawBuffer->ColorDrawBuffer[0]); + break; case GL_EDGE_FLAG: - FLUSH_CURRENT(ctx, 0); - *params = (GLfloat) ctx->Current.EdgeFlag; - break; + { + FLUSH_CURRENT(ctx, 0); + params[0] = BOOLEAN_TO_FLOAT(ctx->Current.EdgeFlag); + } + break; case GL_FEEDBACK_BUFFER_SIZE: - *params = (GLfloat) ctx->Feedback.BufferSize; + params[0] = (GLfloat)(ctx->Feedback.BufferSize); break; case GL_FEEDBACK_BUFFER_TYPE: - *params = ENUM_TO_FLOAT(ctx->Feedback.Type); + params[0] = ENUM_TO_FLOAT(ctx->Feedback.Type); break; case GL_FOG: - *params = (GLfloat) ctx->Fog.Enabled; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Fog.Enabled); + break; case GL_FOG_COLOR: - params[0] = ctx->Fog.Color[0]; - params[1] = ctx->Fog.Color[1]; - params[2] = ctx->Fog.Color[2]; - params[3] = ctx->Fog.Color[3]; - break; + params[0] = ctx->Fog.Color[0]; + params[1] = ctx->Fog.Color[1]; + params[2] = ctx->Fog.Color[2]; + params[3] = ctx->Fog.Color[3]; + break; case GL_FOG_DENSITY: - *params = ctx->Fog.Density; - break; + params[0] = ctx->Fog.Density; + break; case GL_FOG_END: - *params = ctx->Fog.End; - break; + params[0] = ctx->Fog.End; + break; case GL_FOG_HINT: - *params = ENUM_TO_FLOAT(ctx->Hint.Fog); - break; + params[0] = ENUM_TO_FLOAT(ctx->Hint.Fog); + break; case GL_FOG_INDEX: - *params = ctx->Fog.Index; - break; + params[0] = ctx->Fog.Index; + break; case GL_FOG_MODE: - *params = ENUM_TO_FLOAT(ctx->Fog.Mode); - break; + params[0] = ENUM_TO_FLOAT(ctx->Fog.Mode); + break; case GL_FOG_START: - *params = ctx->Fog.Start; - break; + params[0] = ctx->Fog.Start; + break; case GL_FRONT_FACE: - *params = ENUM_TO_FLOAT(ctx->Polygon.FrontFace); - break; + params[0] = ENUM_TO_FLOAT(ctx->Polygon.FrontFace); + break; case GL_GREEN_BIAS: - *params = (GLfloat) ctx->Pixel.GreenBias; + params[0] = ctx->Pixel.GreenBias; break; case GL_GREEN_BITS: - *params = (GLfloat) ctx->Visual.greenBits; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.greenBits); break; case GL_GREEN_SCALE: - *params = (GLfloat) ctx->Pixel.GreenScale; + params[0] = ctx->Pixel.GreenScale; break; case GL_INDEX_BITS: - *params = (GLfloat) ctx->Visual.indexBits; - break; + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.indexBits); + break; case GL_INDEX_CLEAR_VALUE: - *params = (GLfloat) ctx->Color.ClearIndex; - break; + params[0] = (GLfloat)(ctx->Color.ClearIndex); + break; case GL_INDEX_MODE: - *params = ctx->Visual.rgbMode ? 0.0F : 1.0F; - break; + params[0] = BOOLEAN_TO_FLOAT(!ctx->DrawBuffer->Visual.rgbMode); + break; case GL_INDEX_OFFSET: - *params = (GLfloat) ctx->Pixel.IndexOffset; - break; + params[0] = (GLfloat)(ctx->Pixel.IndexOffset); + break; case GL_INDEX_SHIFT: - *params = (GLfloat) ctx->Pixel.IndexShift; - break; + params[0] = (GLfloat)(ctx->Pixel.IndexShift); + break; case GL_INDEX_WRITEMASK: - *params = (GLfloat) ctx->Color.IndexMask; - break; + params[0] = (GLfloat)(ctx->Color.IndexMask); + break; case GL_LIGHT0: + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[0].Enabled); + break; case GL_LIGHT1: + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[1].Enabled); + break; case GL_LIGHT2: + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[2].Enabled); + break; case GL_LIGHT3: + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[3].Enabled); + break; case GL_LIGHT4: + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[4].Enabled); + break; case GL_LIGHT5: + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[5].Enabled); + break; case GL_LIGHT6: + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[6].Enabled); + break; case GL_LIGHT7: - *params = (GLfloat) ctx->Light.Light[pname-GL_LIGHT0].Enabled; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Light[7].Enabled); + break; case GL_LIGHTING: - *params = (GLfloat) ctx->Light.Enabled; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Enabled); + break; case GL_LIGHT_MODEL_AMBIENT: - params[0] = ctx->Light.Model.Ambient[0]; - params[1] = ctx->Light.Model.Ambient[1]; - params[2] = ctx->Light.Model.Ambient[2]; - params[3] = ctx->Light.Model.Ambient[3]; - break; + params[0] = ctx->Light.Model.Ambient[0]; + params[1] = ctx->Light.Model.Ambient[1]; + params[2] = ctx->Light.Model.Ambient[2]; + params[3] = ctx->Light.Model.Ambient[3]; + break; case GL_LIGHT_MODEL_COLOR_CONTROL: params[0] = ENUM_TO_FLOAT(ctx->Light.Model.ColorControl); break; case GL_LIGHT_MODEL_LOCAL_VIEWER: - *params = (GLfloat) ctx->Light.Model.LocalViewer; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Model.LocalViewer); + break; case GL_LIGHT_MODEL_TWO_SIDE: - *params = (GLfloat) ctx->Light.Model.TwoSide; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Light.Model.TwoSide); + break; case GL_LINE_SMOOTH: - *params = (GLfloat) ctx->Line.SmoothFlag; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Line.SmoothFlag); + break; case GL_LINE_SMOOTH_HINT: - *params = ENUM_TO_FLOAT(ctx->Hint.LineSmooth); - break; + params[0] = ENUM_TO_FLOAT(ctx->Hint.LineSmooth); + break; case GL_LINE_STIPPLE: - *params = (GLfloat) ctx->Line.StippleFlag; - break; + params[0] = BOOLEAN_TO_FLOAT(ctx->Line.StippleFlag); + break; case GL_LINE_STIPPLE_PATTERN: - *params = (GLfloat) ctx->Line.StipplePattern; + params[0] = (GLfloat)(ctx->Line.StipplePattern); break; case GL_LINE_STIPPLE_REPEAT: - *params = (GLfloat) ctx->Line.StippleFactor; + params[0] = (GLfloat)(ctx->Line.StippleFactor); break; case GL_LINE_WIDTH: - *params = (GLfloat) ctx->Line.Width; - break; + params[0] = ctx->Line.Width; + break; case GL_LINE_WIDTH_GRANULARITY: - *params = (GLfloat) ctx->Const.LineWidthGranularity; - break; + params[0] = ctx->Const.LineWidthGranularity; + break; case GL_LINE_WIDTH_RANGE: - params[0] = (GLfloat) ctx->Const.MinLineWidthAA; - params[1] = (GLfloat) ctx->Const.MaxLineWidthAA; - break; + params[0] = ctx->Const.MinLineWidthAA; + params[1] = ctx->Const.MaxLineWidthAA; + break; case GL_ALIASED_LINE_WIDTH_RANGE: - params[0] = (GLfloat) ctx->Const.MinLineWidth; - params[1] = (GLfloat) ctx->Const.MaxLineWidth; - break; + params[0] = ctx->Const.MinLineWidth; + params[1] = ctx->Const.MaxLineWidth; + break; case GL_LIST_BASE: - *params = (GLfloat) ctx->List.ListBase; - break; + params[0] = (GLfloat)(ctx->List.ListBase); + break; case GL_LIST_INDEX: - *params = (GLfloat) ctx->ListState.CurrentListNum; - break; + params[0] = (GLfloat)(ctx->ListState.CurrentListNum); + break; case GL_LIST_MODE: - if (!ctx->CompileFlag) - *params = 0.0F; - else if (ctx->ExecuteFlag) - *params = ENUM_TO_FLOAT(GL_COMPILE_AND_EXECUTE); - else - *params = ENUM_TO_FLOAT(GL_COMPILE); - break; - case GL_INDEX_LOGIC_OP: - *params = (GLfloat) ctx->Color.IndexLogicOpEnabled; - break; - case GL_COLOR_LOGIC_OP: - *params = (GLfloat) ctx->Color.ColorLogicOpEnabled; - break; - case GL_LOGIC_OP_MODE: - *params = ENUM_TO_FLOAT(ctx->Color.LogicOp); - break; - case GL_MAP1_COLOR_4: - *params = (GLfloat) ctx->Eval.Map1Color4; - break; - case GL_MAP1_GRID_DOMAIN: - params[0] = ctx->Eval.MapGrid1u1; - params[1] = ctx->Eval.MapGrid1u2; - break; - case GL_MAP1_GRID_SEGMENTS: - *params = (GLfloat) ctx->Eval.MapGrid1un; - break; - case GL_MAP1_INDEX: - *params = (GLfloat) ctx->Eval.Map1Index; - break; - case GL_MAP1_NORMAL: - *params = (GLfloat) ctx->Eval.Map1Normal; - break; - case GL_MAP1_TEXTURE_COORD_1: - *params = (GLfloat) ctx->Eval.Map1TextureCoord1; - break; - case GL_MAP1_TEXTURE_COORD_2: - *params = (GLfloat) ctx->Eval.Map1TextureCoord2; - break; - case GL_MAP1_TEXTURE_COORD_3: - *params = (GLfloat) ctx->Eval.Map1TextureCoord3; - break; - case GL_MAP1_TEXTURE_COORD_4: - *params = (GLfloat) ctx->Eval.Map1TextureCoord4; - break; - case GL_MAP1_VERTEX_3: - *params = (GLfloat) ctx->Eval.Map1Vertex3; - break; - case GL_MAP1_VERTEX_4: - *params = (GLfloat) ctx->Eval.Map1Vertex4; - break; - case GL_MAP2_COLOR_4: - *params = (GLfloat) ctx->Eval.Map2Color4; - break; - case GL_MAP2_GRID_DOMAIN: - params[0] = ctx->Eval.MapGrid2u1; - params[1] = ctx->Eval.MapGrid2u2; - params[2] = ctx->Eval.MapGrid2v1; - params[3] = ctx->Eval.MapGrid2v2; - break; - case GL_MAP2_GRID_SEGMENTS: - params[0] = (GLfloat) ctx->Eval.MapGrid2un; - params[1] = (GLfloat) ctx->Eval.MapGrid2vn; - break; - case GL_MAP2_INDEX: - *params = (GLfloat) ctx->Eval.Map2Index; - break; - case GL_MAP2_NORMAL: - *params = (GLfloat) ctx->Eval.Map2Normal; - break; - case GL_MAP2_TEXTURE_COORD_1: - *params = ctx->Eval.Map2TextureCoord1; - break; - case GL_MAP2_TEXTURE_COORD_2: - *params = ctx->Eval.Map2TextureCoord2; - break; - case GL_MAP2_TEXTURE_COORD_3: - *params = ctx->Eval.Map2TextureCoord3; - break; - case GL_MAP2_TEXTURE_COORD_4: - *params = ctx->Eval.Map2TextureCoord4; - break; - case GL_MAP2_VERTEX_3: - *params = (GLfloat) ctx->Eval.Map2Vertex3; - break; - case GL_MAP2_VERTEX_4: - *params = (GLfloat) ctx->Eval.Map2Vertex4; - break; - case GL_MAP_COLOR: - *params = (GLfloat) ctx->Pixel.MapColorFlag; - break; - case GL_MAP_STENCIL: - *params = (GLfloat) ctx->Pixel.MapStencilFlag; - break; - case GL_MATRIX_MODE: - *params = ENUM_TO_FLOAT(ctx->Transform.MatrixMode); - break; - case GL_MAX_ATTRIB_STACK_DEPTH: - *params = (GLfloat) MAX_ATTRIB_STACK_DEPTH; - break; - case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: - *params = (GLfloat) MAX_CLIENT_ATTRIB_STACK_DEPTH; - break; - case GL_MAX_CLIP_PLANES: - *params = (GLfloat) ctx->Const.MaxClipPlanes; - break; - case GL_MAX_ELEMENTS_VERTICES: /* GL_VERSION_1_2 */ - *params = (GLfloat) ctx->Const.MaxArrayLockSize; - break; - case GL_MAX_ELEMENTS_INDICES: /* GL_VERSION_1_2 */ - *params = (GLfloat) ctx->Const.MaxArrayLockSize; - break; - case GL_MAX_EVAL_ORDER: - *params = (GLfloat) MAX_EVAL_ORDER; - break; - case GL_MAX_LIGHTS: - *params = (GLfloat) ctx->Const.MaxLights; - break; - case GL_MAX_LIST_NESTING: - *params = (GLfloat) MAX_LIST_NESTING; - break; - case GL_MAX_MODELVIEW_STACK_DEPTH: - *params = (GLfloat) MAX_MODELVIEW_STACK_DEPTH; - break; - case GL_MAX_NAME_STACK_DEPTH: - *params = (GLfloat) MAX_NAME_STACK_DEPTH; - break; - case GL_MAX_PIXEL_MAP_TABLE: - *params = (GLfloat) MAX_PIXEL_MAP_TABLE; - break; - case GL_MAX_PROJECTION_STACK_DEPTH: - *params = (GLfloat) MAX_PROJECTION_STACK_DEPTH; - break; - case GL_MAX_TEXTURE_SIZE: - *params = (GLfloat) (1 << (ctx->Const.MaxTextureLevels - 1)); - break; - case GL_MAX_3D_TEXTURE_SIZE: - *params = (GLfloat) (1 << (ctx->Const.Max3DTextureLevels - 1)); - break; - case GL_MAX_TEXTURE_STACK_DEPTH: - *params = (GLfloat) MAX_TEXTURE_STACK_DEPTH; - break; - case GL_MAX_VIEWPORT_DIMS: - params[0] = (GLfloat) MAX_WIDTH; - params[1] = (GLfloat) MAX_HEIGHT; - break; - case GL_MODELVIEW_MATRIX: - for (i=0;i<16;i++) { - params[i] = ctx->ModelviewMatrixStack.Top->m[i]; - } - break; - case GL_MODELVIEW_STACK_DEPTH: - *params = (GLfloat) (ctx->ModelviewMatrixStack.Depth + 1); - break; - case GL_NAME_STACK_DEPTH: - *params = (GLfloat) ctx->Select.NameStackDepth; - break; - case GL_NORMALIZE: - *params = (GLfloat) ctx->Transform.Normalize; - break; - case GL_PACK_ALIGNMENT: - *params = (GLfloat) ctx->Pack.Alignment; - break; - case GL_PACK_LSB_FIRST: - *params = (GLfloat) ctx->Pack.LsbFirst; - break; - case GL_PACK_ROW_LENGTH: - *params = (GLfloat) ctx->Pack.RowLength; - break; - case GL_PACK_SKIP_PIXELS: - *params = (GLfloat) ctx->Pack.SkipPixels; - break; - case GL_PACK_SKIP_ROWS: - *params = (GLfloat) ctx->Pack.SkipRows; - break; - case GL_PACK_SWAP_BYTES: - *params = (GLfloat) ctx->Pack.SwapBytes; - break; - case GL_PACK_SKIP_IMAGES_EXT: - *params = (GLfloat) ctx->Pack.SkipImages; - break; - case GL_PACK_IMAGE_HEIGHT_EXT: - *params = (GLfloat) ctx->Pack.ImageHeight; - break; - case GL_PACK_INVERT_MESA: - *params = (GLfloat) ctx->Pack.Invert; - break; - case GL_PERSPECTIVE_CORRECTION_HINT: - *params = ENUM_TO_FLOAT(ctx->Hint.PerspectiveCorrection); - break; - case GL_PIXEL_MAP_A_TO_A_SIZE: - *params = (GLfloat) ctx->Pixel.MapAtoAsize; - break; - case GL_PIXEL_MAP_B_TO_B_SIZE: - *params = (GLfloat) ctx->Pixel.MapBtoBsize; - break; - case GL_PIXEL_MAP_G_TO_G_SIZE: - *params = (GLfloat) ctx->Pixel.MapGtoGsize; - break; - case GL_PIXEL_MAP_I_TO_A_SIZE: - *params = (GLfloat) ctx->Pixel.MapItoAsize; - break; - case GL_PIXEL_MAP_I_TO_B_SIZE: - *params = (GLfloat) ctx->Pixel.MapItoBsize; - break; - case GL_PIXEL_MAP_I_TO_G_SIZE: - *params = (GLfloat) ctx->Pixel.MapItoGsize; - break; - case GL_PIXEL_MAP_I_TO_I_SIZE: - *params = (GLfloat) ctx->Pixel.MapItoIsize; - break; - case GL_PIXEL_MAP_I_TO_R_SIZE: - *params = (GLfloat) ctx->Pixel.MapItoRsize; - break; - case GL_PIXEL_MAP_R_TO_R_SIZE: - *params = (GLfloat) ctx->Pixel.MapRtoRsize; - break; - case GL_PIXEL_MAP_S_TO_S_SIZE: - *params = (GLfloat) ctx->Pixel.MapStoSsize; - break; - case GL_POINT_SIZE: - *params = (GLfloat) ctx->Point.Size; - break; - case GL_POINT_SIZE_GRANULARITY: - *params = (GLfloat) ctx->Const.PointSizeGranularity; - break; - case GL_POINT_SIZE_RANGE: - params[0] = (GLfloat) ctx->Const.MinPointSizeAA; - params[1] = (GLfloat) ctx->Const.MaxPointSizeAA; - break; - case GL_ALIASED_POINT_SIZE_RANGE: - params[0] = (GLfloat) ctx->Const.MinPointSize; - params[1] = (GLfloat) ctx->Const.MaxPointSize; - break; - case GL_POINT_SMOOTH: - *params = (GLfloat) ctx->Point.SmoothFlag; - break; - case GL_POINT_SMOOTH_HINT: - *params = ENUM_TO_FLOAT(ctx->Hint.PointSmooth); - break; - case GL_POINT_SIZE_MIN_EXT: - *params = (GLfloat) (ctx->Point.MinSize); - break; - case GL_POINT_SIZE_MAX_EXT: - *params = (GLfloat) (ctx->Point.MaxSize); - break; - case GL_POINT_FADE_THRESHOLD_SIZE_EXT: - *params = (GLfloat) (ctx->Point.Threshold); - break; - case GL_DISTANCE_ATTENUATION_EXT: - params[0] = (GLfloat) (ctx->Point.Params[0]); - params[1] = (GLfloat) (ctx->Point.Params[1]); - params[2] = (GLfloat) (ctx->Point.Params[2]); - break; - case GL_POLYGON_MODE: - params[0] = ENUM_TO_FLOAT(ctx->Polygon.FrontMode); - params[1] = ENUM_TO_FLOAT(ctx->Polygon.BackMode); - break; -#ifdef GL_EXT_polygon_offset - case GL_POLYGON_OFFSET_BIAS_EXT: - *params = ctx->Polygon.OffsetUnits; - break; -#endif - case GL_POLYGON_OFFSET_FACTOR: - *params = ctx->Polygon.OffsetFactor; - break; - case GL_POLYGON_OFFSET_UNITS: - *params = ctx->Polygon.OffsetUnits; - break; - case GL_POLYGON_SMOOTH: - *params = (GLfloat) ctx->Polygon.SmoothFlag; - break; - case GL_POLYGON_SMOOTH_HINT: - *params = ENUM_TO_FLOAT(ctx->Hint.PolygonSmooth); - break; - case GL_POLYGON_STIPPLE: - *params = (GLfloat) ctx->Polygon.StippleFlag; - break; - case GL_PROJECTION_MATRIX: - for (i=0;i<16;i++) { - params[i] = ctx->ProjectionMatrixStack.Top->m[i]; - } - break; - case GL_PROJECTION_STACK_DEPTH: - *params = (GLfloat) (ctx->ProjectionMatrixStack.Depth + 1); - break; - case GL_READ_BUFFER: - *params = ENUM_TO_FLOAT(ctx->Pixel.ReadBuffer); - break; - case GL_RED_BIAS: - *params = ctx->Pixel.RedBias; - break; - case GL_RED_BITS: - *params = (GLfloat) ctx->Visual.redBits; - break; - case GL_RED_SCALE: - *params = ctx->Pixel.RedScale; - break; - case GL_RENDER_MODE: - *params = ENUM_TO_FLOAT(ctx->RenderMode); - break; - case GL_RESCALE_NORMAL: - *params = (GLfloat) ctx->Transform.RescaleNormals; - break; - case GL_RGBA_MODE: - *params = (GLfloat) ctx->Visual.rgbMode; - break; - case GL_SCISSOR_BOX: - params[0] = (GLfloat) ctx->Scissor.X; - params[1] = (GLfloat) ctx->Scissor.Y; - params[2] = (GLfloat) ctx->Scissor.Width; - params[3] = (GLfloat) ctx->Scissor.Height; - break; - case GL_SCISSOR_TEST: - *params = (GLfloat) ctx->Scissor.Enabled; - break; - case GL_SELECTION_BUFFER_SIZE: - *params = (GLfloat) ctx->Select.BufferSize; - break; - case GL_SHADE_MODEL: - *params = ENUM_TO_FLOAT(ctx->Light.ShadeModel); - break; - case GL_SHARED_TEXTURE_PALETTE_EXT: - *params = (GLfloat) ctx->Texture.SharedPalette; - break; - case GL_STENCIL_BITS: - *params = (GLfloat) ctx->Visual.stencilBits; - break; - case GL_STENCIL_CLEAR_VALUE: - *params = (GLfloat) ctx->Stencil.Clear; - break; - case GL_STENCIL_FAIL: - *params = ENUM_TO_FLOAT(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_FUNC: - *params = ENUM_TO_FLOAT(ctx->Stencil.Function[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_PASS_DEPTH_FAIL: - *params = ENUM_TO_FLOAT(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_PASS_DEPTH_PASS: - *params = ENUM_TO_FLOAT(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]); - break; - case GL_STENCIL_REF: - *params = (GLfloat) ctx->Stencil.Ref[ctx->Stencil.ActiveFace]; - break; - case GL_STENCIL_TEST: - *params = (GLfloat) ctx->Stencil.Enabled; - break; - case GL_STENCIL_VALUE_MASK: - *params = (GLfloat) ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]; - break; - case GL_STENCIL_WRITEMASK: - *params = (GLfloat) ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]; - break; - case GL_STEREO: - *params = (GLfloat) ctx->Visual.stereoMode; - break; - case GL_SUBPIXEL_BITS: - *params = (GLfloat) ctx->Const.SubPixelBits; - break; - case GL_TEXTURE_1D: - *params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1.0F : 0.0F; - break; - case GL_TEXTURE_2D: - *params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1.0F : 0.0F; - break; - case GL_TEXTURE_3D: - *params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1.0F : 0.0F; - break; - case GL_TEXTURE_BINDING_1D: - *params = (GLfloat) textureUnit->Current1D->Name; - break; - case GL_TEXTURE_BINDING_2D: - *params = (GLfloat) textureUnit->Current2D->Name; - break; - case GL_TEXTURE_BINDING_3D: - *params = (GLfloat) textureUnit->Current2D->Name; - break; - case GL_TEXTURE_ENV_COLOR: - params[0] = textureUnit->EnvColor[0]; - params[1] = textureUnit->EnvColor[1]; - params[2] = textureUnit->EnvColor[2]; - params[3] = textureUnit->EnvColor[3]; - break; - case GL_TEXTURE_ENV_MODE: - *params = ENUM_TO_FLOAT(textureUnit->EnvMode); - break; - case GL_TEXTURE_GEN_S: - *params = (textureUnit->TexGenEnabled & S_BIT) ? 1.0F : 0.0F; - break; - case GL_TEXTURE_GEN_T: - *params = (textureUnit->TexGenEnabled & T_BIT) ? 1.0F : 0.0F; - break; - case GL_TEXTURE_GEN_R: - *params = (textureUnit->TexGenEnabled & R_BIT) ? 1.0F : 0.0F; - break; - case GL_TEXTURE_GEN_Q: - *params = (textureUnit->TexGenEnabled & Q_BIT) ? 1.0F : 0.0F; - break; - case GL_TEXTURE_MATRIX: - for (i=0;i<16;i++) { - params[i] = ctx->TextureMatrixStack[texUnit].Top->m[i]; - } - break; - case GL_TEXTURE_STACK_DEPTH: - *params = (GLfloat) (ctx->TextureMatrixStack[texUnit].Depth + 1); - break; - case GL_UNPACK_ALIGNMENT: - *params = (GLfloat) ctx->Unpack.Alignment; - break; - case GL_UNPACK_LSB_FIRST: - *params = (GLfloat) ctx->Unpack.LsbFirst; - break; - case GL_UNPACK_ROW_LENGTH: - *params = (GLfloat) ctx->Unpack.RowLength; - break; - case GL_UNPACK_SKIP_PIXELS: - *params = (GLfloat) ctx->Unpack.SkipPixels; - break; - case GL_UNPACK_SKIP_ROWS: - *params = (GLfloat) ctx->Unpack.SkipRows; - break; - case GL_UNPACK_SWAP_BYTES: - *params = (GLfloat) ctx->Unpack.SwapBytes; - break; - case GL_UNPACK_SKIP_IMAGES_EXT: - *params = (GLfloat) ctx->Unpack.SkipImages; - break; - case GL_UNPACK_IMAGE_HEIGHT_EXT: - *params = (GLfloat) ctx->Unpack.ImageHeight; - break; - case GL_UNPACK_CLIENT_STORAGE_APPLE: - *params = (GLfloat) ctx->Unpack.ClientStorage; - break; - case GL_VIEWPORT: - params[0] = (GLfloat) ctx->Viewport.X; - params[1] = (GLfloat) ctx->Viewport.Y; - params[2] = (GLfloat) ctx->Viewport.Width; - params[3] = (GLfloat) ctx->Viewport.Height; - break; - case GL_ZOOM_X: - *params = (GLfloat) ctx->Pixel.ZoomX; - break; - case GL_ZOOM_Y: - *params = (GLfloat) ctx->Pixel.ZoomY; - break; - case GL_VERTEX_ARRAY: - *params = (GLfloat) ctx->Array.Vertex.Enabled; - break; - case GL_VERTEX_ARRAY_SIZE: - *params = (GLfloat) ctx->Array.Vertex.Size; - break; - case GL_VERTEX_ARRAY_TYPE: - *params = ENUM_TO_FLOAT(ctx->Array.Vertex.Type); - break; - case GL_VERTEX_ARRAY_STRIDE: - *params = (GLfloat) ctx->Array.Vertex.Stride; - break; - case GL_VERTEX_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_NORMAL_ARRAY: - *params = (GLfloat) ctx->Array.Normal.Enabled; - break; - case GL_NORMAL_ARRAY_TYPE: - *params = ENUM_TO_FLOAT(ctx->Array.Normal.Type); - break; - case GL_NORMAL_ARRAY_STRIDE: - *params = (GLfloat) ctx->Array.Normal.Stride; - break; - case GL_NORMAL_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_COLOR_ARRAY: - *params = (GLfloat) ctx->Array.Color.Enabled; - break; - case GL_COLOR_ARRAY_SIZE: - *params = (GLfloat) ctx->Array.Color.Size; - break; - case GL_COLOR_ARRAY_TYPE: - *params = ENUM_TO_FLOAT(ctx->Array.Color.Type); - break; - case GL_COLOR_ARRAY_STRIDE: - *params = (GLfloat) ctx->Array.Color.Stride; - break; - case GL_COLOR_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_INDEX_ARRAY: - *params = (GLfloat) ctx->Array.Index.Enabled; - break; - case GL_INDEX_ARRAY_TYPE: - *params = ENUM_TO_FLOAT(ctx->Array.Index.Type); - break; - case GL_INDEX_ARRAY_STRIDE: - *params = (GLfloat) ctx->Array.Index.Stride; - break; - case GL_INDEX_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_TEXTURE_COORD_ARRAY: - *params = (GLfloat) ctx->Array.TexCoord[clientUnit].Enabled; - break; - case GL_TEXTURE_COORD_ARRAY_SIZE: - *params = (GLfloat) ctx->Array.TexCoord[clientUnit].Size; - break; - case GL_TEXTURE_COORD_ARRAY_TYPE: - *params = ENUM_TO_FLOAT(ctx->Array.TexCoord[clientUnit].Type); - break; - case GL_TEXTURE_COORD_ARRAY_STRIDE: - *params = (GLfloat) ctx->Array.TexCoord[clientUnit].Stride; - break; - case GL_TEXTURE_COORD_ARRAY_COUNT_EXT: - *params = 0.0; - break; - case GL_EDGE_FLAG_ARRAY: - *params = (GLfloat) ctx->Array.EdgeFlag.Enabled; - break; - case GL_EDGE_FLAG_ARRAY_STRIDE: - *params = (GLfloat) ctx->Array.EdgeFlag.Stride; - break; - case GL_EDGE_FLAG_ARRAY_COUNT_EXT: - *params = 0.0; - break; - - /* GL_ARB_multitexture */ - case GL_MAX_TEXTURE_UNITS_ARB: - CHECK_EXTENSION_F(ARB_multitexture, pname); - *params = (GLfloat) MIN2(ctx->Const.MaxTextureImageUnits, - ctx->Const.MaxTextureCoordUnits); - break; - case GL_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_F(ARB_multitexture, pname); - *params = (GLfloat) (GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit); - break; - case GL_CLIENT_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_F(ARB_multitexture, pname); - *params = (GLfloat) (GL_TEXTURE0_ARB + clientUnit); - break; - - /* GL_ARB_texture_cube_map */ - case GL_TEXTURE_CUBE_MAP_ARB: - CHECK_EXTENSION_F(ARB_texture_cube_map, pname); - *params = (GLfloat) _mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB); - break; - case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - CHECK_EXTENSION_F(ARB_texture_cube_map, pname); - *params = (GLfloat) textureUnit->CurrentCubeMap->Name; - break; - case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: - CHECK_EXTENSION_F(ARB_texture_cube_map, pname); - *params = (GLfloat) (1 << (ctx->Const.MaxCubeTextureLevels - 1)); - break; - - /* GL_ARB_texture_compression */ - case GL_TEXTURE_COMPRESSION_HINT_ARB: - CHECK_EXTENSION_F(ARB_texture_compression, pname); - *params = (GLfloat) ctx->Hint.TextureCompression; - break; - case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_F(ARB_texture_compression, pname); - *params = (GLfloat) _mesa_get_compressed_formats(ctx, NULL); - break; - case GL_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_F(ARB_texture_compression, pname); { - GLint formats[100]; - GLuint i, n; - n = _mesa_get_compressed_formats(ctx, formats); - for (i = 0; i < n; i++) - params[i] = (GLfloat) formats[i]; + GLenum mode; + if (!ctx->CompileFlag) + mode = 0; + else if (ctx->ExecuteFlag) + mode = GL_COMPILE_AND_EXECUTE; + else + mode = GL_COMPILE; + params[0] = ENUM_TO_FLOAT(mode); + } + break; + case GL_INDEX_LOGIC_OP: + params[0] = BOOLEAN_TO_FLOAT(ctx->Color.IndexLogicOpEnabled); + break; + case GL_COLOR_LOGIC_OP: + params[0] = BOOLEAN_TO_FLOAT(ctx->Color.ColorLogicOpEnabled); + break; + case GL_LOGIC_OP_MODE: + params[0] = ENUM_TO_FLOAT(ctx->Color.LogicOp); + break; + case GL_MAP1_COLOR_4: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Color4); + break; + case GL_MAP1_GRID_DOMAIN: + params[0] = ctx->Eval.MapGrid1u1; + params[1] = ctx->Eval.MapGrid1u2; + break; + case GL_MAP1_GRID_SEGMENTS: + params[0] = (GLfloat)(ctx->Eval.MapGrid1un); + break; + case GL_MAP1_INDEX: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Index); + break; + case GL_MAP1_NORMAL: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Normal); + break; + case GL_MAP1_TEXTURE_COORD_1: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord1); + break; + case GL_MAP1_TEXTURE_COORD_2: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord2); + break; + case GL_MAP1_TEXTURE_COORD_3: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord3); + break; + case GL_MAP1_TEXTURE_COORD_4: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1TextureCoord4); + break; + case GL_MAP1_VERTEX_3: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Vertex3); + break; + case GL_MAP1_VERTEX_4: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Vertex4); + break; + case GL_MAP2_COLOR_4: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Color4); + break; + case GL_MAP2_GRID_DOMAIN: + params[0] = ctx->Eval.MapGrid2u1; + params[1] = ctx->Eval.MapGrid2u2; + params[2] = ctx->Eval.MapGrid2v1; + params[3] = ctx->Eval.MapGrid2v2; + break; + case GL_MAP2_GRID_SEGMENTS: + params[0] = (GLfloat)(ctx->Eval.MapGrid2un); + params[1] = (GLfloat)(ctx->Eval.MapGrid2vn); + break; + case GL_MAP2_INDEX: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Index); + break; + case GL_MAP2_NORMAL: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Normal); + break; + case GL_MAP2_TEXTURE_COORD_1: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord1); + break; + case GL_MAP2_TEXTURE_COORD_2: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord2); + break; + case GL_MAP2_TEXTURE_COORD_3: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord3); + break; + case GL_MAP2_TEXTURE_COORD_4: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2TextureCoord4); + break; + case GL_MAP2_VERTEX_3: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Vertex3); + break; + case GL_MAP2_VERTEX_4: + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map2Vertex4); + break; + case GL_MAP_COLOR: + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MapColorFlag); + break; + case GL_MAP_STENCIL: + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MapStencilFlag); + break; + case GL_MATRIX_MODE: + params[0] = ENUM_TO_FLOAT(ctx->Transform.MatrixMode); + break; + case GL_MAX_ATTRIB_STACK_DEPTH: + params[0] = (GLfloat)(MAX_ATTRIB_STACK_DEPTH); + break; + case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: + params[0] = (GLfloat)(MAX_CLIENT_ATTRIB_STACK_DEPTH); + break; + case GL_MAX_CLIP_PLANES: + params[0] = (GLfloat)(ctx->Const.MaxClipPlanes); + break; + case GL_MAX_ELEMENTS_VERTICES: + params[0] = (GLfloat)(ctx->Const.MaxArrayLockSize); + break; + case GL_MAX_ELEMENTS_INDICES: + params[0] = (GLfloat)(ctx->Const.MaxArrayLockSize); + break; + case GL_MAX_EVAL_ORDER: + params[0] = (GLfloat)(MAX_EVAL_ORDER); + break; + case GL_MAX_LIGHTS: + params[0] = (GLfloat)(ctx->Const.MaxLights); + break; + case GL_MAX_LIST_NESTING: + params[0] = (GLfloat)(MAX_LIST_NESTING); + break; + case GL_MAX_MODELVIEW_STACK_DEPTH: + params[0] = (GLfloat)(MAX_MODELVIEW_STACK_DEPTH); + break; + case GL_MAX_NAME_STACK_DEPTH: + params[0] = (GLfloat)(MAX_NAME_STACK_DEPTH); + break; + case GL_MAX_PIXEL_MAP_TABLE: + params[0] = (GLfloat)(MAX_PIXEL_MAP_TABLE); + break; + case GL_MAX_PROJECTION_STACK_DEPTH: + params[0] = (GLfloat)(MAX_PROJECTION_STACK_DEPTH); + break; + case GL_MAX_TEXTURE_SIZE: + params[0] = (GLfloat)(1 << (ctx->Const.MaxTextureLevels - 1)); + break; + case GL_MAX_3D_TEXTURE_SIZE: + params[0] = (GLfloat)(1 << (ctx->Const.Max3DTextureLevels - 1)); + break; + case GL_MAX_TEXTURE_STACK_DEPTH: + params[0] = (GLfloat)(MAX_TEXTURE_STACK_DEPTH); + break; + case GL_MAX_VIEWPORT_DIMS: + params[0] = (GLfloat)(ctx->Const.MaxViewportWidth); + params[1] = (GLfloat)(ctx->Const.MaxViewportHeight); + break; + case GL_MODELVIEW_MATRIX: + { + const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m; + params[0] = matrix[0]; + params[1] = matrix[1]; + params[2] = matrix[2]; + params[3] = matrix[3]; + params[4] = matrix[4]; + params[5] = matrix[5]; + params[6] = matrix[6]; + params[7] = matrix[7]; + params[8] = matrix[8]; + params[9] = matrix[9]; + params[10] = matrix[10]; + params[11] = matrix[11]; + params[12] = matrix[12]; + params[13] = matrix[13]; + params[14] = matrix[14]; + params[15] = matrix[15]; + } + break; + case GL_MODELVIEW_STACK_DEPTH: + params[0] = (GLfloat)(ctx->ModelviewMatrixStack.Depth + 1); + break; + case GL_NAME_STACK_DEPTH: + params[0] = (GLfloat)(ctx->Select.NameStackDepth); + break; + case GL_NORMALIZE: + params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.Normalize); + break; + case GL_PACK_ALIGNMENT: + params[0] = (GLfloat)(ctx->Pack.Alignment); + break; + case GL_PACK_LSB_FIRST: + params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.LsbFirst); + break; + case GL_PACK_ROW_LENGTH: + params[0] = (GLfloat)(ctx->Pack.RowLength); + break; + case GL_PACK_SKIP_PIXELS: + params[0] = (GLfloat)(ctx->Pack.SkipPixels); + break; + case GL_PACK_SKIP_ROWS: + params[0] = (GLfloat)(ctx->Pack.SkipRows); + break; + case GL_PACK_SWAP_BYTES: + params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.SwapBytes); + break; + case GL_PACK_SKIP_IMAGES_EXT: + params[0] = (GLfloat)(ctx->Pack.SkipImages); + break; + case GL_PACK_IMAGE_HEIGHT_EXT: + params[0] = (GLfloat)(ctx->Pack.ImageHeight); + break; + case GL_PACK_INVERT_MESA: + params[0] = BOOLEAN_TO_FLOAT(ctx->Pack.Invert); + break; + case GL_PERSPECTIVE_CORRECTION_HINT: + params[0] = ENUM_TO_FLOAT(ctx->Hint.PerspectiveCorrection); + break; + case GL_PIXEL_MAP_A_TO_A_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapAtoAsize); + break; + case GL_PIXEL_MAP_B_TO_B_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapBtoBsize); + break; + case GL_PIXEL_MAP_G_TO_G_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapGtoGsize); + break; + case GL_PIXEL_MAP_I_TO_A_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapItoAsize); + break; + case GL_PIXEL_MAP_I_TO_B_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapItoBsize); + break; + case GL_PIXEL_MAP_I_TO_G_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapItoGsize); + break; + case GL_PIXEL_MAP_I_TO_I_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapItoIsize); + break; + case GL_PIXEL_MAP_I_TO_R_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapItoRsize); + break; + case GL_PIXEL_MAP_R_TO_R_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapRtoRsize); + break; + case GL_PIXEL_MAP_S_TO_S_SIZE: + params[0] = (GLfloat)(ctx->Pixel.MapStoSsize); + break; + case GL_POINT_SIZE: + params[0] = ctx->Point.Size; + break; + case GL_POINT_SIZE_GRANULARITY: + params[0] = ctx->Const.PointSizeGranularity; + break; + case GL_POINT_SIZE_RANGE: + params[0] = ctx->Const.MinPointSizeAA; + params[1] = ctx->Const.MaxPointSizeAA; + break; + case GL_ALIASED_POINT_SIZE_RANGE: + params[0] = ctx->Const.MinPointSize; + params[1] = ctx->Const.MaxPointSize; + break; + case GL_POINT_SMOOTH: + params[0] = BOOLEAN_TO_FLOAT(ctx->Point.SmoothFlag); + break; + case GL_POINT_SMOOTH_HINT: + params[0] = ENUM_TO_FLOAT(ctx->Hint.PointSmooth); + break; + case GL_POINT_SIZE_MIN_EXT: + params[0] = ctx->Point.MinSize; + break; + case GL_POINT_SIZE_MAX_EXT: + params[0] = ctx->Point.MaxSize; + break; + case GL_POINT_FADE_THRESHOLD_SIZE_EXT: + params[0] = ctx->Point.Threshold; + break; + case GL_DISTANCE_ATTENUATION_EXT: + params[0] = ctx->Point.Params[0]; + params[1] = ctx->Point.Params[1]; + params[2] = ctx->Point.Params[2]; + break; + case GL_POLYGON_MODE: + params[0] = ENUM_TO_FLOAT(ctx->Polygon.FrontMode); + params[1] = ENUM_TO_FLOAT(ctx->Polygon.BackMode); + break; + case GL_POLYGON_OFFSET_BIAS_EXT: + params[0] = ctx->Polygon.OffsetUnits; + break; + case GL_POLYGON_OFFSET_FACTOR: + params[0] = ctx->Polygon.OffsetFactor ; + break; + case GL_POLYGON_OFFSET_UNITS: + params[0] = ctx->Polygon.OffsetUnits ; + break; + case GL_POLYGON_SMOOTH: + params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.SmoothFlag); + break; + case GL_POLYGON_SMOOTH_HINT: + params[0] = ENUM_TO_FLOAT(ctx->Hint.PolygonSmooth); + break; + case GL_POLYGON_STIPPLE: + params[0] = BOOLEAN_TO_FLOAT(ctx->Polygon.StippleFlag); + break; + case GL_PROJECTION_MATRIX: + { + const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m; + params[0] = matrix[0]; + params[1] = matrix[1]; + params[2] = matrix[2]; + params[3] = matrix[3]; + params[4] = matrix[4]; + params[5] = matrix[5]; + params[6] = matrix[6]; + params[7] = matrix[7]; + params[8] = matrix[8]; + params[9] = matrix[9]; + params[10] = matrix[10]; + params[11] = matrix[11]; + params[12] = matrix[12]; + params[13] = matrix[13]; + params[14] = matrix[14]; + params[15] = matrix[15]; + } + break; + case GL_PROJECTION_STACK_DEPTH: + params[0] = (GLfloat)(ctx->ProjectionMatrixStack.Depth + 1); + break; + case GL_READ_BUFFER: + params[0] = ENUM_TO_FLOAT(ctx->ReadBuffer->ColorReadBuffer); + break; + case GL_RED_BIAS: + params[0] = ctx->Pixel.RedBias; + break; + case GL_RED_BITS: + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.redBits); + break; + case GL_RED_SCALE: + params[0] = ctx->Pixel.RedScale; + break; + case GL_RENDER_MODE: + params[0] = ENUM_TO_FLOAT(ctx->RenderMode); + break; + case GL_RESCALE_NORMAL: + params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.RescaleNormals); + break; + case GL_RGBA_MODE: + params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.rgbMode); + break; + case GL_SCISSOR_BOX: + params[0] = (GLfloat)(ctx->Scissor.X); + params[1] = (GLfloat)(ctx->Scissor.Y); + params[2] = (GLfloat)(ctx->Scissor.Width); + params[3] = (GLfloat)(ctx->Scissor.Height); + break; + case GL_SCISSOR_TEST: + params[0] = BOOLEAN_TO_FLOAT(ctx->Scissor.Enabled); + break; + case GL_SELECTION_BUFFER_SIZE: + params[0] = (GLfloat)(ctx->Select.BufferSize); + break; + case GL_SHADE_MODEL: + params[0] = ENUM_TO_FLOAT(ctx->Light.ShadeModel); + break; + case GL_SHARED_TEXTURE_PALETTE_EXT: + params[0] = BOOLEAN_TO_FLOAT(ctx->Texture.SharedPalette); + break; + case GL_STENCIL_BITS: + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.stencilBits); + break; + case GL_STENCIL_CLEAR_VALUE: + params[0] = (GLfloat)(ctx->Stencil.Clear); + break; + case GL_STENCIL_FAIL: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]); + break; + case GL_STENCIL_FUNC: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.Function[ctx->Stencil.ActiveFace]); + break; + case GL_STENCIL_PASS_DEPTH_FAIL: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]); + break; + case GL_STENCIL_PASS_DEPTH_PASS: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]); + break; + case GL_STENCIL_REF: + params[0] = (GLfloat)(ctx->Stencil.Ref[ctx->Stencil.ActiveFace]); + break; + case GL_STENCIL_TEST: + params[0] = BOOLEAN_TO_FLOAT(ctx->Stencil.Enabled); + break; + case GL_STENCIL_VALUE_MASK: + params[0] = (GLfloat)(ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]); + break; + case GL_STENCIL_WRITEMASK: + params[0] = (GLfloat)(ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]); + break; + case GL_STEREO: + params[0] = BOOLEAN_TO_FLOAT(ctx->DrawBuffer->Visual.stereoMode); + break; + case GL_SUBPIXEL_BITS: + params[0] = (GLfloat)(ctx->Const.SubPixelBits); + break; + case GL_TEXTURE_1D: + params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_1D)); + break; + case GL_TEXTURE_2D: + params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D)); + break; + case GL_TEXTURE_3D: + params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_3D)); + break; + case GL_TEXTURE_BINDING_1D: + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name); + break; + case GL_TEXTURE_BINDING_2D: + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name); + break; + case GL_TEXTURE_BINDING_3D: + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name); + break; + case GL_TEXTURE_ENV_COLOR: + { + const GLfloat *color = ctx->Texture.Unit[ctx->Texture.CurrentUnit].EnvColor; + params[0] = color[0]; + params[1] = color[1]; + params[2] = color[2]; + params[3] = color[3]; + } + break; + case GL_TEXTURE_ENV_MODE: + params[0] = ENUM_TO_FLOAT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].EnvMode); + break; + case GL_TEXTURE_GEN_S: + params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)); + break; + case GL_TEXTURE_GEN_T: + params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0)); + break; + case GL_TEXTURE_GEN_R: + params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0)); + break; + case GL_TEXTURE_GEN_Q: + params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0)); + break; + case GL_TEXTURE_MATRIX: + { + const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m; + params[0] = matrix[0]; + params[1] = matrix[1]; + params[2] = matrix[2]; + params[3] = matrix[3]; + params[4] = matrix[4]; + params[5] = matrix[5]; + params[6] = matrix[6]; + params[7] = matrix[7]; + params[8] = matrix[8]; + params[9] = matrix[9]; + params[10] = matrix[10]; + params[11] = matrix[11]; + params[12] = matrix[12]; + params[13] = matrix[13]; + params[14] = matrix[14]; + params[15] = matrix[15]; + } + break; + case GL_TEXTURE_STACK_DEPTH: + params[0] = (GLfloat)(ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Depth + 1); + break; + case GL_UNPACK_ALIGNMENT: + params[0] = (GLfloat)(ctx->Unpack.Alignment); + break; + case GL_UNPACK_LSB_FIRST: + params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.LsbFirst); + break; + case GL_UNPACK_ROW_LENGTH: + params[0] = (GLfloat)(ctx->Unpack.RowLength); + break; + case GL_UNPACK_SKIP_PIXELS: + params[0] = (GLfloat)(ctx->Unpack.SkipPixels); + break; + case GL_UNPACK_SKIP_ROWS: + params[0] = (GLfloat)(ctx->Unpack.SkipRows); + break; + case GL_UNPACK_SWAP_BYTES: + params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.SwapBytes); + break; + case GL_UNPACK_SKIP_IMAGES_EXT: + params[0] = (GLfloat)(ctx->Unpack.SkipImages); + break; + case GL_UNPACK_IMAGE_HEIGHT_EXT: + params[0] = (GLfloat)(ctx->Unpack.ImageHeight); + break; + case GL_UNPACK_CLIENT_STORAGE_APPLE: + params[0] = BOOLEAN_TO_FLOAT(ctx->Unpack.ClientStorage); + break; + case GL_VIEWPORT: + params[0] = (GLfloat)(ctx->Viewport.X); + params[1] = (GLfloat)(ctx->Viewport.Y); + params[2] = (GLfloat)(ctx->Viewport.Width); + params[3] = (GLfloat)(ctx->Viewport.Height); + break; + case GL_ZOOM_X: + params[0] = ctx->Pixel.ZoomX; + break; + case GL_ZOOM_Y: + params[0] = ctx->Pixel.ZoomY; + break; + case GL_VERTEX_ARRAY: + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Enabled); + break; + case GL_VERTEX_ARRAY_SIZE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Size); + break; + case GL_VERTEX_ARRAY_TYPE: + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Vertex.Type); + break; + case GL_VERTEX_ARRAY_STRIDE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.Stride); + break; + case GL_VERTEX_ARRAY_COUNT_EXT: + params[0] = (GLfloat)(0); + break; + case GL_NORMAL_ARRAY: + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Enabled); + break; + case GL_NORMAL_ARRAY_TYPE: + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Normal.Type); + break; + case GL_NORMAL_ARRAY_STRIDE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.Stride); + break; + case GL_NORMAL_ARRAY_COUNT_EXT: + params[0] = (GLfloat)(0); + break; + case GL_COLOR_ARRAY: + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Color.Enabled); + break; + case GL_COLOR_ARRAY_SIZE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Size); + break; + case GL_COLOR_ARRAY_TYPE: + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Color.Type); + break; + case GL_COLOR_ARRAY_STRIDE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.Stride); + break; + case GL_COLOR_ARRAY_COUNT_EXT: + params[0] = (GLfloat)(0); + break; + case GL_INDEX_ARRAY: + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->Index.Enabled); + break; + case GL_INDEX_ARRAY_TYPE: + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->Index.Type); + break; + case GL_INDEX_ARRAY_STRIDE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.Stride); + break; + case GL_INDEX_ARRAY_COUNT_EXT: + params[0] = (GLfloat)(0); + break; + case GL_TEXTURE_COORD_ARRAY: + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled); + break; + case GL_TEXTURE_COORD_ARRAY_SIZE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size); + break; + case GL_TEXTURE_COORD_ARRAY_TYPE: + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type); + break; + case GL_TEXTURE_COORD_ARRAY_STRIDE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride); + break; + case GL_TEXTURE_COORD_ARRAY_COUNT_EXT: + params[0] = (GLfloat)(0); + break; + case GL_EDGE_FLAG_ARRAY: + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->EdgeFlag.Enabled); + break; + case GL_EDGE_FLAG_ARRAY_STRIDE: + params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.Stride); + break; + case GL_EDGE_FLAG_ARRAY_COUNT_EXT: + params[0] = (GLfloat)(0); + break; + case GL_MAX_TEXTURE_UNITS_ARB: + CHECK_EXT1(ARB_multitexture, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxTextureUnits); + break; + case GL_ACTIVE_TEXTURE_ARB: + CHECK_EXT1(ARB_multitexture, "GetFloatv"); + params[0] = (GLfloat)(GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit); + break; + case GL_CLIENT_ACTIVE_TEXTURE_ARB: + CHECK_EXT1(ARB_multitexture, "GetFloatv"); + params[0] = (GLfloat)(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture); + break; + case GL_TEXTURE_CUBE_MAP_ARB: + CHECK_EXT1(ARB_texture_cube_map, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB)); + break; + case GL_TEXTURE_BINDING_CUBE_MAP_ARB: + CHECK_EXT1(ARB_texture_cube_map, "GetFloatv"); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name); + break; + case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: + CHECK_EXT1(ARB_texture_cube_map, "GetFloatv"); + params[0] = (GLfloat)((1 << (ctx->Const.MaxCubeTextureLevels - 1))); + break; + case GL_TEXTURE_COMPRESSION_HINT_ARB: + CHECK_EXT1(ARB_texture_compression, "GetFloatv"); + params[0] = (GLfloat)(ctx->Hint.TextureCompression); + break; + case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB: + CHECK_EXT1(ARB_texture_compression, "GetFloatv"); + params[0] = (GLfloat)(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE)); + break; + case GL_COMPRESSED_TEXTURE_FORMATS_ARB: + CHECK_EXT1(ARB_texture_compression, "GetFloatv"); + { + GLint formats[100]; + GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE); + ASSERT(n <= 100); + for (i = 0; i < n; i++) + params[i] = ENUM_TO_INT(formats[i]); } break; - - /* GL_EXT_compiled_vertex_array */ case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT: - CHECK_EXTENSION_F(EXT_compiled_vertex_array, pname); - *params = (GLfloat) ctx->Array.LockFirst; - break; + CHECK_EXT1(EXT_compiled_vertex_array, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.LockFirst); + break; case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT: - CHECK_EXTENSION_F(EXT_compiled_vertex_array, pname); - *params = (GLfloat) ctx->Array.LockCount; - break; - - /* GL_ARB_transpose_matrix */ + CHECK_EXT1(EXT_compiled_vertex_array, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.LockCount); + break; case GL_TRANSPOSE_COLOR_MATRIX_ARB: - _math_transposef(params, ctx->ColorMatrixStack.Top->m); + { + const GLfloat *matrix = ctx->ColorMatrixStack.Top->m; + params[0] = matrix[0]; + params[1] = matrix[4]; + params[2] = matrix[8]; + params[3] = matrix[12]; + params[4] = matrix[1]; + params[5] = matrix[5]; + params[6] = matrix[9]; + params[7] = matrix[13]; + params[8] = matrix[2]; + params[9] = matrix[6]; + params[10] = matrix[10]; + params[11] = matrix[14]; + params[12] = matrix[3]; + params[13] = matrix[7]; + params[14] = matrix[11]; + params[15] = matrix[15]; + } break; case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB: - _math_transposef(params, ctx->ModelviewMatrixStack.Top->m); + { + const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m; + params[0] = matrix[0]; + params[1] = matrix[4]; + params[2] = matrix[8]; + params[3] = matrix[12]; + params[4] = matrix[1]; + params[5] = matrix[5]; + params[6] = matrix[9]; + params[7] = matrix[13]; + params[8] = matrix[2]; + params[9] = matrix[6]; + params[10] = matrix[10]; + params[11] = matrix[14]; + params[12] = matrix[3]; + params[13] = matrix[7]; + params[14] = matrix[11]; + params[15] = matrix[15]; + } break; case GL_TRANSPOSE_PROJECTION_MATRIX_ARB: - _math_transposef(params, ctx->ProjectionMatrixStack.Top->m); + { + const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m; + params[0] = matrix[0]; + params[1] = matrix[4]; + params[2] = matrix[8]; + params[3] = matrix[12]; + params[4] = matrix[1]; + params[5] = matrix[5]; + params[6] = matrix[9]; + params[7] = matrix[13]; + params[8] = matrix[2]; + params[9] = matrix[6]; + params[10] = matrix[10]; + params[11] = matrix[14]; + params[12] = matrix[3]; + params[13] = matrix[7]; + params[14] = matrix[11]; + params[15] = matrix[15]; + } break; case GL_TRANSPOSE_TEXTURE_MATRIX_ARB: - _math_transposef(params, ctx->TextureMatrixStack[texUnit].Top->m); + { + const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m; + params[0] = matrix[0]; + params[1] = matrix[4]; + params[2] = matrix[8]; + params[3] = matrix[12]; + params[4] = matrix[1]; + params[5] = matrix[5]; + params[6] = matrix[9]; + params[7] = matrix[13]; + params[8] = matrix[2]; + params[9] = matrix[6]; + params[10] = matrix[10]; + params[11] = matrix[14]; + params[12] = matrix[3]; + params[13] = matrix[7]; + params[14] = matrix[11]; + params[15] = matrix[15]; + } break; - - /* GL_HP_occlusion_test */ - case GL_OCCLUSION_TEST_HP: - CHECK_EXTENSION_F(HP_occlusion_test, pname); - *params = (GLfloat) ctx->Depth.OcclusionTest; - break; - case GL_OCCLUSION_TEST_RESULT_HP: - CHECK_EXTENSION_F(HP_occlusion_test, pname); - if (ctx->Depth.OcclusionTest) - *params = (GLfloat) ctx->OcclusionResult; - else - *params = (GLfloat) ctx->OcclusionResultSaved; - /* reset flag now */ - ctx->OcclusionResult = GL_FALSE; - ctx->OcclusionResultSaved = GL_FALSE; - break; - - /* GL_SGIS_pixel_texture */ - case GL_PIXEL_TEXTURE_SGIS: - *params = (GLfloat) ctx->Pixel.PixelTextureEnabled; - break; - - /* GL_SGIX_pixel_texture */ - case GL_PIXEL_TEX_GEN_SGIX: - *params = (GLfloat) ctx->Pixel.PixelTextureEnabled; - break; - case GL_PIXEL_TEX_GEN_MODE_SGIX: - *params = (GLfloat) pixel_texgen_mode(ctx); - break; - - /* GL_SGI_color_matrix (also in 1.2 imaging) */ case GL_COLOR_MATRIX_SGI: - for (i=0;i<16;i++) { - params[i] = ctx->ColorMatrixStack.Top->m[i]; - } - break; + { + const GLfloat *matrix = ctx->ColorMatrixStack.Top->m; + params[0] = matrix[0]; + params[1] = matrix[1]; + params[2] = matrix[2]; + params[3] = matrix[3]; + params[4] = matrix[4]; + params[5] = matrix[5]; + params[6] = matrix[6]; + params[7] = matrix[7]; + params[8] = matrix[8]; + params[9] = matrix[9]; + params[10] = matrix[10]; + params[11] = matrix[11]; + params[12] = matrix[12]; + params[13] = matrix[13]; + params[14] = matrix[14]; + params[15] = matrix[15]; + } + break; case GL_COLOR_MATRIX_STACK_DEPTH_SGI: - *params = (GLfloat) (ctx->ColorMatrixStack.Depth + 1); + params[0] = (GLfloat)(ctx->ColorMatrixStack.Depth + 1); break; case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI: - *params = (GLfloat) MAX_COLOR_STACK_DEPTH; + params[0] = (GLfloat)(MAX_COLOR_STACK_DEPTH); break; case GL_POST_COLOR_MATRIX_RED_SCALE_SGI: - *params = ctx->Pixel.PostColorMatrixScale[0]; + params[0] = ctx->Pixel.PostColorMatrixScale[0]; break; case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI: - *params = ctx->Pixel.PostColorMatrixScale[1]; + params[0] = ctx->Pixel.PostColorMatrixScale[1]; break; case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI: - *params = ctx->Pixel.PostColorMatrixScale[2]; + params[0] = ctx->Pixel.PostColorMatrixScale[2]; break; case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI: - *params = ctx->Pixel.PostColorMatrixScale[3]; + params[0] = ctx->Pixel.PostColorMatrixScale[3]; break; case GL_POST_COLOR_MATRIX_RED_BIAS_SGI: - *params = ctx->Pixel.PostColorMatrixBias[0]; + params[0] = ctx->Pixel.PostColorMatrixBias[0]; break; case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI: - *params = ctx->Pixel.PostColorMatrixBias[1]; + params[0] = ctx->Pixel.PostColorMatrixBias[1]; break; case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI: - *params = ctx->Pixel.PostColorMatrixBias[2]; + params[0] = ctx->Pixel.PostColorMatrixBias[2]; break; case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI: - *params = ctx->Pixel.PostColorMatrixBias[3]; + params[0] = ctx->Pixel.PostColorMatrixBias[3]; break; - - /* GL_EXT_convolution (also in 1.2 imaging) */ case GL_CONVOLUTION_1D_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = (GLfloat) ctx->Pixel.Convolution1DEnabled; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Convolution1DEnabled); break; - case GL_CONVOLUTION_2D: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = (GLfloat) ctx->Pixel.Convolution2DEnabled; + case GL_CONVOLUTION_2D_EXT: + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Convolution2DEnabled); break; - case GL_SEPARABLE_2D: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = (GLfloat) ctx->Pixel.Separable2DEnabled; + case GL_SEPARABLE_2D_EXT: + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.Separable2DEnabled); break; case GL_POST_CONVOLUTION_RED_SCALE_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionScale[0]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionScale[0]; break; case GL_POST_CONVOLUTION_GREEN_SCALE_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionScale[1]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionScale[1]; break; case GL_POST_CONVOLUTION_BLUE_SCALE_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionScale[2]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionScale[2]; break; case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionScale[3]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionScale[3]; break; case GL_POST_CONVOLUTION_RED_BIAS_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionBias[0]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionBias[0]; break; case GL_POST_CONVOLUTION_GREEN_BIAS_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionBias[1]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionBias[1]; break; case GL_POST_CONVOLUTION_BLUE_BIAS_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionBias[2]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionBias[2]; break; case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT: - CHECK_EXTENSION_F(EXT_convolution, pname); - *params = ctx->Pixel.PostConvolutionBias[2]; + CHECK_EXT1(EXT_convolution, "GetFloatv"); + params[0] = ctx->Pixel.PostConvolutionBias[3]; break; - - /* GL_EXT_histogram (also in 1.2 imaging) */ case GL_HISTOGRAM: - CHECK_EXTENSION_F(EXT_histogram, pname); - *params = (GLfloat) ctx->Pixel.HistogramEnabled; - break; - case GL_MINMAX: - CHECK_EXTENSION_F(EXT_histogram, pname); - *params = (GLfloat) ctx->Pixel.MinMaxEnabled; + CHECK_EXT1(EXT_histogram, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.HistogramEnabled); + break; + case GL_MINMAX: + CHECK_EXT1(EXT_histogram, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.MinMaxEnabled); break; - - /* GL_SGI_color_table (also in 1.2 imaging */ case GL_COLOR_TABLE_SGI: - *params = (GLfloat) ctx->Pixel.ColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.ColorTableEnabled); break; case GL_POST_CONVOLUTION_COLOR_TABLE_SGI: - *params = (GLfloat) ctx->Pixel.PostConvolutionColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.PostConvolutionColorTableEnabled); break; case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI: - *params = (GLfloat) ctx->Pixel.PostColorMatrixColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Pixel.PostColorMatrixColorTableEnabled); break; - - /* GL_SGI_texture_color_table */ case GL_TEXTURE_COLOR_TABLE_SGI: - CHECK_EXTENSION_F(SGI_texture_color_table, pname); - *params = (GLfloat) textureUnit->ColorTableEnabled; + CHECK_EXT1(SGI_texture_color_table, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled); break; - - /* GL_EXT_secondary_color */ case GL_COLOR_SUM_EXT: - CHECK_EXTENSION_F(EXT_secondary_color, pname); - *params = (GLfloat) ctx->Fog.ColorSumEnabled; - break; + CHECK_EXT2(EXT_secondary_color, ARB_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Fog.ColorSumEnabled); + break; case GL_CURRENT_SECONDARY_COLOR_EXT: - CHECK_EXTENSION_F(EXT_secondary_color, pname); - FLUSH_CURRENT(ctx, 0); + CHECK_EXT1(EXT_secondary_color, "GetFloatv"); + { + FLUSH_CURRENT(ctx, 0); params[0] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]; params[1] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]; params[2] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]; params[3] = ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]; - break; + } + break; case GL_SECONDARY_COLOR_ARRAY_EXT: - CHECK_EXTENSION_F(EXT_secondary_color, pname); - *params = (GLfloat) ctx->Array.SecondaryColor.Enabled; + CHECK_EXT1(EXT_secondary_color, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Enabled); break; case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT: - CHECK_EXTENSION_F(EXT_secondary_color, pname); - *params = (GLfloat) ctx->Array.SecondaryColor.Type; - break; + CHECK_EXT1(EXT_secondary_color, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->SecondaryColor.Type); + break; case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_F(EXT_secondary_color, pname); - *params = (GLfloat) ctx->Array.SecondaryColor.Stride; - break; + CHECK_EXT1(EXT_secondary_color, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Stride); + break; case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: - CHECK_EXTENSION_F(EXT_secondary_color, pname); - *params = (GLfloat) ctx->Array.SecondaryColor.Size; - break; - - /* GL_EXT_fog_coord */ + CHECK_EXT1(EXT_secondary_color, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.Size); + break; case GL_CURRENT_FOG_COORDINATE_EXT: - CHECK_EXTENSION_F(EXT_fog_coord, pname); - FLUSH_CURRENT(ctx, 0); - *params = (GLfloat) ctx->Current.Attrib[VERT_ATTRIB_FOG][0]; - break; + CHECK_EXT1(EXT_fog_coord, "GetFloatv"); + { + FLUSH_CURRENT(ctx, 0); + params[0] = ctx->Current.Attrib[VERT_ATTRIB_FOG][0]; + } + break; case GL_FOG_COORDINATE_ARRAY_EXT: - CHECK_EXTENSION_F(EXT_fog_coord, pname); - *params = (GLfloat) ctx->Array.FogCoord.Enabled; + CHECK_EXT1(EXT_fog_coord, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Enabled); break; case GL_FOG_COORDINATE_ARRAY_TYPE_EXT: - CHECK_EXTENSION_F(EXT_fog_coord, pname); - *params = (GLfloat) ctx->Array.FogCoord.Type; - break; - case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_F(EXT_fog_coord, pname); - *params = (GLfloat) ctx->Array.FogCoord.Stride; - break; - case GL_FOG_COORDINATE_SOURCE_EXT: - CHECK_EXTENSION_F(EXT_fog_coord, pname); - *params = (GLfloat) ctx->Fog.FogCoordinateSource; - break; - - /* GL_EXT_texture_lod_bias */ - case GL_MAX_TEXTURE_LOD_BIAS_EXT: - *params = ctx->Const.MaxTextureLodBias; + CHECK_EXT1(EXT_fog_coord, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Array.ArrayObj->FogCoord.Type); + break; + case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT: + CHECK_EXT1(EXT_fog_coord, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.Stride); + break; + case GL_FOG_COORDINATE_SOURCE_EXT: + CHECK_EXT1(EXT_fog_coord, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Fog.FogCoordinateSource); + break; + case GL_MAX_TEXTURE_LOD_BIAS_EXT: + CHECK_EXT1(EXT_texture_lod_bias, "GetFloatv"); + params[0] = ctx->Const.MaxTextureLodBias; break; - - /* GL_EXT_texture_filter_anisotropic */ case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: - CHECK_EXTENSION_F(EXT_texture_filter_anisotropic, pname); - *params = ctx->Const.MaxTextureMaxAnisotropy; - break; - - /* GL_ARB_multisample */ + CHECK_EXT1(EXT_texture_filter_anisotropic, "GetFloatv"); + params[0] = ctx->Const.MaxTextureMaxAnisotropy; + break; case GL_MULTISAMPLE_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = (GLfloat) ctx->Multisample.Enabled; + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.Enabled); break; case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = (GLfloat) ctx->Multisample.SampleAlphaToCoverage; + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleAlphaToCoverage); break; case GL_SAMPLE_ALPHA_TO_ONE_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = (GLfloat) ctx->Multisample.SampleAlphaToOne; + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleAlphaToOne); break; case GL_SAMPLE_COVERAGE_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = (GLfloat) ctx->Multisample.SampleCoverage; + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleCoverage); break; case GL_SAMPLE_COVERAGE_VALUE_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = ctx->Multisample.SampleCoverageValue; + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = ctx->Multisample.SampleCoverageValue; break; case GL_SAMPLE_COVERAGE_INVERT_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = (GLfloat) ctx->Multisample.SampleCoverageInvert; + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Multisample.SampleCoverageInvert); break; case GL_SAMPLE_BUFFERS_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = 0.0; /* XXX fix someday */ + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.sampleBuffers); break; case GL_SAMPLES_ARB: - CHECK_EXTENSION_F(ARB_multisample, pname); - *params = 0.0; /* XXX fix someday */ + CHECK_EXT1(ARB_multisample, "GetFloatv"); + params[0] = (GLfloat)(ctx->DrawBuffer->Visual.samples); break; - - /* GL_IBM_rasterpos_clip */ case GL_RASTER_POSITION_UNCLIPPED_IBM: - CHECK_EXTENSION_F(IBM_rasterpos_clip, pname); - *params = (GLfloat) ctx->Transform.RasterPositionUnclipped; + CHECK_EXT1(IBM_rasterpos_clip, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Transform.RasterPositionUnclipped); break; - - /* GL_NV_point_sprite */ case GL_POINT_SPRITE_NV: - CHECK_EXTENSION2_F(NV_point_sprite, ARB_point_sprite, pname); - *params = (GLfloat) ctx->Point.PointSprite; + CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Point.PointSprite); break; case GL_POINT_SPRITE_R_MODE_NV: - CHECK_EXTENSION_F(NV_point_sprite, pname); - *params = (GLfloat) ctx->Point.SpriteRMode; + CHECK_EXT1(NV_point_sprite, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Point.SpriteRMode); break; case GL_POINT_SPRITE_COORD_ORIGIN: - CHECK_EXTENSION_F(ARB_point_sprite, pname); - *params = (GLfloat) ctx->Point.SpriteOrigin; + CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Point.SpriteOrigin); break; - - /* GL_SGIS_generate_mipmap */ case GL_GENERATE_MIPMAP_HINT_SGIS: - CHECK_EXTENSION_F(SGIS_generate_mipmap, pname); - *params = (GLfloat) ctx->Hint.GenerateMipmap; - break; - -#if FEATURE_NV_vertex_program - case GL_VERTEX_PROGRAM_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->VertexProgram.Enabled; - break; - case GL_VERTEX_PROGRAM_POINT_SIZE_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->VertexProgram.PointSizeEnabled; - break; - case GL_VERTEX_PROGRAM_TWO_SIDE_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->VertexProgram.TwoSideEnabled; - break; - case GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->Const.MaxProgramMatrixStackDepth; - break; - case GL_MAX_TRACK_MATRICES_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->Const.MaxProgramMatrices; - break; - case GL_CURRENT_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - *params = (GLfloat) ctx->CurrentStack->Depth + 1; - break; - case GL_CURRENT_MATRIX_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - for (i = 0; i < 16; i++) - params[i] = ctx->CurrentStack->Top->m[i]; + CHECK_EXT1(SGIS_generate_mipmap, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Hint.GenerateMipmap); break; case GL_VERTEX_PROGRAM_BINDING_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - if (ctx->VertexProgram.Current) - *params = (GLfloat) ctx->VertexProgram.Current->Base.Id; - else - *params = 0.0; - break; - case GL_PROGRAM_ERROR_POSITION_NV: - CHECK_EXTENSION2_F(NV_vertex_program, ARB_vertex_program, pname); - *params = (GLfloat) ctx->Program.ErrorPos; + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = (GLfloat)((ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0)); break; case GL_VERTEX_ATTRIB_ARRAY0_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY1_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY2_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY3_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY5_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY6_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY7_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY8_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY9_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY10_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY11_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY12_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY13_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY14_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY15_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_VERTEX_ATTRIB_ARRAY0_NV; - *params = (GLfloat) ctx->Array.VertexAttrib[n].Enabled; - } + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled); break; case GL_MAP1_VERTEX_ATTRIB0_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[0]); + break; case GL_MAP1_VERTEX_ATTRIB1_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[1]); + break; case GL_MAP1_VERTEX_ATTRIB2_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[2]); + break; case GL_MAP1_VERTEX_ATTRIB3_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[3]); + break; case GL_MAP1_VERTEX_ATTRIB4_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[4]); + break; case GL_MAP1_VERTEX_ATTRIB5_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[5]); + break; case GL_MAP1_VERTEX_ATTRIB6_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[6]); + break; case GL_MAP1_VERTEX_ATTRIB7_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[7]); + break; case GL_MAP1_VERTEX_ATTRIB8_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[8]); + break; case GL_MAP1_VERTEX_ATTRIB9_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[9]); + break; case GL_MAP1_VERTEX_ATTRIB10_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[10]); + break; case GL_MAP1_VERTEX_ATTRIB11_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[11]); + break; case GL_MAP1_VERTEX_ATTRIB12_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[12]); + break; case GL_MAP1_VERTEX_ATTRIB13_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[13]); + break; case GL_MAP1_VERTEX_ATTRIB14_4_NV: + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[14]); + break; case GL_MAP1_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP1_VERTEX_ATTRIB0_4_NV; - *params = (GLfloat) ctx->Eval.Map1Attrib[n]; - } + CHECK_EXT1(NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Eval.Map1Attrib[15]); break; - case GL_MAP2_VERTEX_ATTRIB0_4_NV: - case GL_MAP2_VERTEX_ATTRIB1_4_NV: - case GL_MAP2_VERTEX_ATTRIB2_4_NV: - case GL_MAP2_VERTEX_ATTRIB3_4_NV: - case GL_MAP2_VERTEX_ATTRIB4_4_NV: - case GL_MAP2_VERTEX_ATTRIB5_4_NV: - case GL_MAP2_VERTEX_ATTRIB6_4_NV: - case GL_MAP2_VERTEX_ATTRIB7_4_NV: - case GL_MAP2_VERTEX_ATTRIB8_4_NV: - case GL_MAP2_VERTEX_ATTRIB9_4_NV: - case GL_MAP2_VERTEX_ATTRIB10_4_NV: - case GL_MAP2_VERTEX_ATTRIB11_4_NV: - case GL_MAP2_VERTEX_ATTRIB12_4_NV: - case GL_MAP2_VERTEX_ATTRIB13_4_NV: - case GL_MAP2_VERTEX_ATTRIB14_4_NV: - case GL_MAP2_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_F(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP2_VERTEX_ATTRIB0_4_NV; - *params = (GLfloat) ctx->Eval.Map2Attrib[n]; - } - break; -#endif /* FEATURE_NV_vertex_program */ - -#if FEATURE_NV_fragment_program case GL_FRAGMENT_PROGRAM_NV: - CHECK_EXTENSION_F(NV_fragment_program, pname); - *params = (GLfloat) ctx->FragmentProgram.Enabled; - break; - case GL_MAX_TEXTURE_COORDS_NV: - CHECK_EXTENSION_F(NV_fragment_program, pname); - *params = (GLfloat) ctx->Const.MaxTextureCoordUnits; - break; - case GL_MAX_TEXTURE_IMAGE_UNITS_NV: - CHECK_EXTENSION_F(NV_fragment_program, pname); - *params = (GLfloat) ctx->Const.MaxTextureImageUnits; + CHECK_EXT1(NV_fragment_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.Enabled); break; case GL_FRAGMENT_PROGRAM_BINDING_NV: - CHECK_EXTENSION_F(NV_fragment_program, pname); - if (ctx->FragmentProgram.Current) - *params = (GLfloat) ctx->FragmentProgram.Current->Base.Id; - else - *params = 0.0; + CHECK_EXT1(NV_fragment_program, "GetFloatv"); + params[0] = (GLfloat)(ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0); break; case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV: - CHECK_EXTENSION_F(NV_fragment_program, pname); - *params = (GLfloat) MAX_NV_FRAGMENT_PROGRAM_PARAMS; + CHECK_EXT1(NV_fragment_program, "GetFloatv"); + params[0] = (GLfloat)(MAX_NV_FRAGMENT_PROGRAM_PARAMS); break; -#endif /* FEATURE_NV_fragment_program */ - - /* GL_NV_texture_rectangle */ case GL_TEXTURE_RECTANGLE_NV: - CHECK_EXTENSION_F(NV_texture_rectangle, pname); - *params = (GLfloat) _mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV); + CHECK_EXT1(NV_texture_rectangle, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV)); break; case GL_TEXTURE_BINDING_RECTANGLE_NV: - CHECK_EXTENSION_F(NV_texture_rectangle, pname); - *params = (GLfloat) textureUnit->CurrentRect->Name; + CHECK_EXT1(NV_texture_rectangle, "GetFloatv"); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name); break; case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV: - CHECK_EXTENSION_F(NV_texture_rectangle, pname); - *params = (GLfloat) ctx->Const.MaxTextureRectSize; + CHECK_EXT1(NV_texture_rectangle, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxTextureRectSize); break; - - /* GL_EXT_stencil_two_side */ case GL_STENCIL_TEST_TWO_SIDE_EXT: - CHECK_EXTENSION_F(EXT_stencil_two_side, pname); - *params = (GLfloat) ctx->Stencil.TestTwoSide; + CHECK_EXT1(EXT_stencil_two_side, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Stencil.TestTwoSide); break; case GL_ACTIVE_STENCIL_FACE_EXT: - CHECK_EXTENSION_F(EXT_stencil_two_side, pname); - *params = (GLfloat) (ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT); + CHECK_EXT1(EXT_stencil_two_side, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT); break; - - /* GL_NV_light_max_exponent */ case GL_MAX_SHININESS_NV: - *params = ctx->Const.MaxShininess; + CHECK_EXT1(NV_light_max_exponent, "GetFloatv"); + params[0] = ctx->Const.MaxShininess; break; case GL_MAX_SPOT_EXPONENT_NV: - *params = ctx->Const.MaxSpotExponent; + CHECK_EXT1(NV_light_max_exponent, "GetFloatv"); + params[0] = ctx->Const.MaxSpotExponent; break; - -#if FEATURE_ARB_vertex_buffer_object case GL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.ArrayBufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayBufferObj->Name); break; case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.Vertex.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->Vertex.BufferObj->Name); break; case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.Normal.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->Normal.BufferObj->Name); break; case GL_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.Color.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->Color.BufferObj->Name); break; case GL_INDEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.Index.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->Index.BufferObj->Name); break; case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.TexCoord[clientUnit].BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name); break; case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.EdgeFlag.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name); break; case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.SecondaryColor.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name); break; case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.FogCoord.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ArrayObj->FogCoord.BufferObj->Name); break; - /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */ case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname); - *params = (GLfloat) ctx->Array.ElementArrayBufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Array.ElementArrayBufferObj->Name); break; -#endif -#if FEATURE_EXT_pixel_buffer_object case GL_PIXEL_PACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_F(EXT_pixel_buffer_object, pname); - *params = (GLfloat) ctx->Pack.BufferObj->Name; + CHECK_EXT1(EXT_pixel_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Pack.BufferObj->Name); break; case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_F(EXT_pixel_buffer_object, pname); - *params = (GLfloat) ctx->Unpack.BufferObj->Name; + CHECK_EXT1(EXT_pixel_buffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Unpack.BufferObj->Name); break; -#endif - -#if FEATURE_ARB_vertex_program - /* GL_NV_vertex_program and GL_ARB_fragment_program define others */ - case GL_MAX_VERTEX_ATTRIBS_ARB: - CHECK_EXTENSION_F(ARB_vertex_program, pname); - *params = (GLfloat) ctx->Const.MaxVertexProgramAttribs; + case GL_VERTEX_PROGRAM_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.Enabled); break; -#endif - -#if FEATURE_ARB_fragment_program - case GL_FRAGMENT_PROGRAM_ARB: - CHECK_EXTENSION_F(ARB_fragment_program, pname); - *params = (GLfloat) ctx->FragmentProgram.Enabled; + case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.PointSizeEnabled); + break; + case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.TwoSideEnabled); + break; + case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxProgramMatrixStackDepth); + break; + case GL_MAX_PROGRAM_MATRICES_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxProgramMatrices); + break; + case GL_CURRENT_MATRIX_STACK_DEPTH_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->CurrentStack->Depth + 1); + break; + case GL_CURRENT_MATRIX_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program, "GetFloatv"); + { + const GLfloat *matrix = ctx->CurrentStack->Top->m; + params[0] = matrix[0]; + params[1] = matrix[1]; + params[2] = matrix[2]; + params[3] = matrix[3]; + params[4] = matrix[4]; + params[5] = matrix[5]; + params[6] = matrix[6]; + params[7] = matrix[7]; + params[8] = matrix[8]; + params[9] = matrix[9]; + params[10] = matrix[10]; + params[11] = matrix[11]; + params[12] = matrix[12]; + params[13] = matrix[13]; + params[14] = matrix[14]; + params[15] = matrix[15]; + } break; case GL_TRANSPOSE_CURRENT_MATRIX_ARB: - CHECK_EXTENSION_F(ARB_fragment_program, pname); - params[0] = ctx->CurrentStack->Top->m[0]; - params[1] = ctx->CurrentStack->Top->m[4]; - params[2] = ctx->CurrentStack->Top->m[8]; - params[3] = ctx->CurrentStack->Top->m[12]; - params[4] = ctx->CurrentStack->Top->m[1]; - params[5] = ctx->CurrentStack->Top->m[5]; - params[6] = ctx->CurrentStack->Top->m[9]; - params[7] = ctx->CurrentStack->Top->m[13]; - params[8] = ctx->CurrentStack->Top->m[2]; - params[9] = ctx->CurrentStack->Top->m[6]; - params[10] = ctx->CurrentStack->Top->m[10]; - params[11] = ctx->CurrentStack->Top->m[14]; - params[12] = ctx->CurrentStack->Top->m[3]; - params[13] = ctx->CurrentStack->Top->m[7]; - params[14] = ctx->CurrentStack->Top->m[11]; - params[15] = ctx->CurrentStack->Top->m[15]; + CHECK_EXT2(ARB_vertex_program, ARB_fragment_program, "GetFloatv"); + { + const GLfloat *matrix = ctx->CurrentStack->Top->m; + params[0] = matrix[0]; + params[1] = matrix[4]; + params[2] = matrix[8]; + params[3] = matrix[12]; + params[4] = matrix[1]; + params[5] = matrix[5]; + params[6] = matrix[9]; + params[7] = matrix[13]; + params[8] = matrix[2]; + params[9] = matrix[6]; + params[10] = matrix[10]; + params[11] = matrix[14]; + params[12] = matrix[3]; + params[13] = matrix[7]; + params[14] = matrix[11]; + params[15] = matrix[15]; + } + break; + case GL_MAX_VERTEX_ATTRIBS_ARB: + CHECK_EXT1(ARB_vertex_program, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.VertexProgram.MaxAttribs); + break; + case GL_PROGRAM_ERROR_POSITION_ARB: + CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program, "GetFloatv"); + params[0] = (GLfloat)(ctx->Program.ErrorPos); + break; + case GL_FRAGMENT_PROGRAM_ARB: + CHECK_EXT1(ARB_fragment_program, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.Enabled); + break; + case GL_MAX_TEXTURE_COORDS_ARB: + CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxTextureCoordUnits); + break; + case GL_MAX_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxTextureImageUnits); break; - /* Remaining ARB_fragment_program queries alias with - * the GL_NV_fragment_program queries. - */ -#endif - - /* GL_EXT_depth_bounds_test */ case GL_DEPTH_BOUNDS_TEST_EXT: - CHECK_EXTENSION_F(EXT_depth_bounds_test, pname); - params[0] = (GLfloat) ctx->Depth.BoundsTest; + CHECK_EXT1(EXT_depth_bounds_test, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->Depth.BoundsTest); break; case GL_DEPTH_BOUNDS_EXT: - CHECK_EXTENSION_F(EXT_depth_bounds_test, pname); + CHECK_EXT1(EXT_depth_bounds_test, "GetFloatv"); params[0] = ctx->Depth.BoundsMin; params[1] = ctx->Depth.BoundsMax; break; - -#if FEATURE_MESA_program_debug case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_F(MESA_program_debug, pname); - *params = (GLfloat) ctx->FragmentProgram.CallbackEnabled; + CHECK_EXT1(MESA_program_debug, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.CallbackEnabled); break; case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_F(MESA_program_debug, pname); - *params = (GLfloat) ctx->VertexProgram.CallbackEnabled; + CHECK_EXT1(MESA_program_debug, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.CallbackEnabled); break; case GL_FRAGMENT_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_F(MESA_program_debug, pname); - *params = (GLfloat) ctx->FragmentProgram.CurrentPosition; + CHECK_EXT1(MESA_program_debug, "GetFloatv"); + params[0] = (GLfloat)(ctx->FragmentProgram.CurrentPosition); break; case GL_VERTEX_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_F(MESA_program_debug, pname); - *params = (GLfloat) ctx->VertexProgram.CurrentPosition; + CHECK_EXT1(MESA_program_debug, "GetFloatv"); + params[0] = (GLfloat)(ctx->VertexProgram.CurrentPosition); break; -#endif - case GL_MAX_DRAW_BUFFERS_ARB: - CHECK_EXTENSION_F(ARB_draw_buffers, pname); - *params = (GLfloat) ctx->Const.MaxDrawBuffers; + CHECK_EXT1(ARB_draw_buffers, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxDrawBuffers); break; case GL_DRAW_BUFFER0_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->DrawBuffer->ColorDrawBuffer[0]); + break; case GL_DRAW_BUFFER1_ARB: - case GL_DRAW_BUFFER2_ARB: - case GL_DRAW_BUFFER3_ARB: - case GL_DRAW_BUFFER4_ARB: - case GL_DRAW_BUFFER5_ARB: - case GL_DRAW_BUFFER6_ARB: - case GL_DRAW_BUFFER7_ARB: - case GL_DRAW_BUFFER8_ARB: - case GL_DRAW_BUFFER9_ARB: - case GL_DRAW_BUFFER10_ARB: - case GL_DRAW_BUFFER11_ARB: - case GL_DRAW_BUFFER12_ARB: - case GL_DRAW_BUFFER13_ARB: - case GL_DRAW_BUFFER14_ARB: - case GL_DRAW_BUFFER15_ARB: - CHECK_EXTENSION_F(ARB_draw_buffers, pname); + CHECK_EXT1(ARB_draw_buffers, "GetFloatv"); { - GLuint i = pname - GL_DRAW_BUFFER0_ARB; - if (i >= ctx->Const.MaxDrawBuffers) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetFloatv(GL_DRAW_BUFFERx_ARB)"); - return; - } - *params = (GLfloat) ctx->Color.DrawBuffer[i]; + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[1]; + params[0] = ENUM_TO_FLOAT(buffer); + } + break; + case GL_DRAW_BUFFER2_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetFloatv"); + { + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[2]; + params[0] = ENUM_TO_FLOAT(buffer); + } + break; + case GL_DRAW_BUFFER3_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetFloatv"); + { + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[3]; + params[0] = ENUM_TO_FLOAT(buffer); } break; - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - *params = (GLfloat) ctx->Const.ColorReadType; - return; + CHECK_EXT1(OES_read_format, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.ColorReadType); + break; case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - *params = (GLfloat) ctx->Const.ColorReadFormat; - return; - -#if FEATURE_ATI_fragment_shader + CHECK_EXT1(OES_read_format, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.ColorReadFormat); + break; case GL_NUM_FRAGMENT_REGISTERS_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = 6; - break; + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(6); + break; case GL_NUM_FRAGMENT_CONSTANTS_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = 8; - break; + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(8); + break; case GL_NUM_PASSES_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = 2; - break; + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(2); + break; case GL_NUM_INSTRUCTIONS_PER_PASS_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = 8; - break; + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(8); + break; case GL_NUM_INSTRUCTIONS_TOTAL_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = 16; - break; + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(16); + break; case GL_COLOR_ALPHA_PAIRING_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = GL_TRUE; - break; + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = BOOLEAN_TO_FLOAT(GL_TRUE); + break; case GL_NUM_LOOPBACK_COMPONENTS_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = 3; - break; + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(3); + break; case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI: - CHECK_EXTENSION_F(ATI_fragment_shader, pname); - *params = 3; - break; -#endif + CHECK_EXT1(ATI_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(3); + break; + case GL_STENCIL_BACK_FUNC: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.Function[1]); + break; + case GL_STENCIL_BACK_VALUE_MASK: + params[0] = (GLfloat)(ctx->Stencil.ValueMask[1]); + break; + case GL_STENCIL_BACK_WRITEMASK: + params[0] = (GLfloat)(ctx->Stencil.WriteMask[1]); + break; + case GL_STENCIL_BACK_REF: + params[0] = (GLfloat)(ctx->Stencil.Ref[1]); + break; + case GL_STENCIL_BACK_FAIL: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.FailFunc[1]); + break; + case GL_STENCIL_BACK_PASS_DEPTH_FAIL: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZFailFunc[1]); + break; + case GL_STENCIL_BACK_PASS_DEPTH_PASS: + params[0] = ENUM_TO_FLOAT(ctx->Stencil.ZPassFunc[1]); + break; + case GL_FRAMEBUFFER_BINDING_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->DrawBuffer->Name); + break; + case GL_RENDERBUFFER_BINDING_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0); + break; + case GL_MAX_COLOR_ATTACHMENTS_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxColorAttachments); + break; + case GL_MAX_RENDERBUFFER_SIZE_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxRenderbufferSize); + break; + case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_fragment_shader, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.FragmentProgram.MaxUniformComponents); + break; + case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: + CHECK_EXT1(ARB_fragment_shader, "GetFloatv"); + params[0] = ENUM_TO_FLOAT(ctx->Hint.FragmentShaderDerivative); + break; + case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.VertexProgram.MaxUniformComponents); + break; + case GL_MAX_VARYING_FLOATS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxVaryingFloats); + break; + case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.MaxVertexTextureImageUnits); + break; + case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetFloatv"); + params[0] = (GLfloat)(MAX_COMBINED_TEXTURE_IMAGE_UNITS); + break; default: - _mesa_error(ctx, GL_INVALID_ENUM, "glGetFloatv(0x%x)", pname); + _mesa_error(ctx, GL_INVALID_ENUM, "glGetFloatv(pname=0x%x)", pname); } } - -/** - * Get the value(s) of a selected parameter. - * - * \param pname parameter to be returned. - * \param params will hold the value(s) of the speficifed parameter. - * - * \sa glGetIntegerv(). - * - * Tries to get the specified parameter via dd_function_table::GetIntegerv, - * otherwise gets the specified parameter from the current context, converting - * it value into GLinteger. - */ void GLAPIENTRY _mesa_GetIntegerv( GLenum pname, GLint *params ) { GET_CURRENT_CONTEXT(ctx); - GLuint i; - const GLuint clientUnit = ctx->Array.ActiveTexture; - const GLuint texUnit = ctx->Texture.CurrentUnit; - const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); if (!params) return; - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glGetIntegerv %s\n", _mesa_lookup_enum_by_nr(pname)); + if (ctx->NewState) + _mesa_update_state(ctx); - if (!ctx->_CurrentProgram) { - /* We need this in order to get correct results for - * GL_OCCLUSION_TEST_RESULT_HP. There might be other important cases. - */ - FLUSH_VERTICES(ctx, 0); - } - - if (ctx->Driver.GetIntegerv - && (*ctx->Driver.GetIntegerv)(ctx, pname, params)) + if (ctx->Driver.GetIntegerv && + ctx->Driver.GetIntegerv(ctx, pname, params)) return; switch (pname) { case GL_ACCUM_RED_BITS: - *params = (GLint) ctx->Visual.accumRedBits; + params[0] = ctx->DrawBuffer->Visual.accumRedBits; break; case GL_ACCUM_GREEN_BITS: - *params = (GLint) ctx->Visual.accumGreenBits; + params[0] = ctx->DrawBuffer->Visual.accumGreenBits; break; case GL_ACCUM_BLUE_BITS: - *params = (GLint) ctx->Visual.accumBlueBits; + params[0] = ctx->DrawBuffer->Visual.accumBlueBits; break; case GL_ACCUM_ALPHA_BITS: - *params = (GLint) ctx->Visual.accumAlphaBits; + params[0] = ctx->DrawBuffer->Visual.accumAlphaBits; break; case GL_ACCUM_CLEAR_VALUE: - params[0] = FLOAT_TO_INT( ctx->Accum.ClearColor[0] ); - params[1] = FLOAT_TO_INT( ctx->Accum.ClearColor[1] ); - params[2] = FLOAT_TO_INT( ctx->Accum.ClearColor[2] ); - params[3] = FLOAT_TO_INT( ctx->Accum.ClearColor[3] ); + params[0] = FLOAT_TO_INT(ctx->Accum.ClearColor[0]); + params[1] = FLOAT_TO_INT(ctx->Accum.ClearColor[1]); + params[2] = FLOAT_TO_INT(ctx->Accum.ClearColor[2]); + params[3] = FLOAT_TO_INT(ctx->Accum.ClearColor[3]); break; case GL_ALPHA_BIAS: - *params = (GLint) ctx->Pixel.AlphaBias; + params[0] = IROUND(ctx->Pixel.AlphaBias); break; case GL_ALPHA_BITS: - *params = ctx->Visual.alphaBits; + params[0] = ctx->DrawBuffer->Visual.alphaBits; break; case GL_ALPHA_SCALE: - *params = (GLint) ctx->Pixel.AlphaScale; + params[0] = IROUND(ctx->Pixel.AlphaScale); break; case GL_ALPHA_TEST: - *params = (GLint) ctx->Color.AlphaEnabled; - break; - case GL_ALPHA_TEST_REF: - *params = FLOAT_TO_INT(ctx->Color.AlphaRef); + params[0] = BOOLEAN_TO_INT(ctx->Color.AlphaEnabled); break; case GL_ALPHA_TEST_FUNC: - *params = (GLint) ctx->Color.AlphaFunc; + params[0] = ENUM_TO_INT(ctx->Color.AlphaFunc); + break; + case GL_ALPHA_TEST_REF: + params[0] = FLOAT_TO_INT(ctx->Color.AlphaRef); break; case GL_ATTRIB_STACK_DEPTH: - *params = (GLint) (ctx->AttribStackDepth); + params[0] = ctx->AttribStackDepth; break; case GL_AUTO_NORMAL: - *params = (GLint) ctx->Eval.AutoNormal; + params[0] = BOOLEAN_TO_INT(ctx->Eval.AutoNormal); break; case GL_AUX_BUFFERS: - *params = (GLint) ctx->Visual.numAuxBuffers; + params[0] = ctx->DrawBuffer->Visual.numAuxBuffers; break; case GL_BLEND: - *params = (GLint) ctx->Color.BlendEnabled; + params[0] = BOOLEAN_TO_INT(ctx->Color.BlendEnabled); break; case GL_BLEND_DST: - *params = (GLint) ctx->Color.BlendDstRGB; + params[0] = ENUM_TO_INT(ctx->Color.BlendDstRGB); break; case GL_BLEND_SRC: - *params = (GLint) ctx->Color.BlendSrcRGB; + params[0] = ENUM_TO_INT(ctx->Color.BlendSrcRGB); break; case GL_BLEND_SRC_RGB_EXT: - *params = (GLint) ctx->Color.BlendSrcRGB; + params[0] = ENUM_TO_INT(ctx->Color.BlendSrcRGB); break; case GL_BLEND_DST_RGB_EXT: - *params = (GLint) ctx->Color.BlendDstRGB; + params[0] = ENUM_TO_INT(ctx->Color.BlendDstRGB); break; case GL_BLEND_SRC_ALPHA_EXT: - *params = (GLint) ctx->Color.BlendSrcA; + params[0] = ENUM_TO_INT(ctx->Color.BlendSrcA); break; case GL_BLEND_DST_ALPHA_EXT: - *params = (GLint) ctx->Color.BlendDstA; + params[0] = ENUM_TO_INT(ctx->Color.BlendDstA); break; case GL_BLEND_EQUATION: - *params = (GLint) ctx->Color.BlendEquationRGB; - break; + params[0] = ENUM_TO_INT(ctx->Color.BlendEquationRGB ); + break; case GL_BLEND_EQUATION_ALPHA_EXT: - *params = (GLint) ctx->Color.BlendEquationA; - break; + params[0] = ENUM_TO_INT(ctx->Color.BlendEquationA ); + break; case GL_BLEND_COLOR_EXT: - params[0] = FLOAT_TO_INT( ctx->Color.BlendColor[0] ); - params[1] = FLOAT_TO_INT( ctx->Color.BlendColor[1] ); - params[2] = FLOAT_TO_INT( ctx->Color.BlendColor[2] ); - params[3] = FLOAT_TO_INT( ctx->Color.BlendColor[3] ); - break; + params[0] = FLOAT_TO_INT(ctx->Color.BlendColor[0]); + params[1] = FLOAT_TO_INT(ctx->Color.BlendColor[1]); + params[2] = FLOAT_TO_INT(ctx->Color.BlendColor[2]); + params[3] = FLOAT_TO_INT(ctx->Color.BlendColor[3]); + break; case GL_BLUE_BIAS: - *params = (GLint) ctx->Pixel.BlueBias; + params[0] = IROUND(ctx->Pixel.BlueBias); break; case GL_BLUE_BITS: - *params = (GLint) ctx->Visual.blueBits; + params[0] = ctx->DrawBuffer->Visual.blueBits; break; case GL_BLUE_SCALE: - *params = (GLint) ctx->Pixel.BlueScale; + params[0] = IROUND(ctx->Pixel.BlueScale); break; case GL_CLIENT_ATTRIB_STACK_DEPTH: - *params = (GLint) (ctx->ClientAttribStackDepth); + params[0] = ctx->ClientAttribStackDepth; break; case GL_CLIP_PLANE0: + params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 0) & 1); + break; case GL_CLIP_PLANE1: + params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 1) & 1); + break; case GL_CLIP_PLANE2: + params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 2) & 1); + break; case GL_CLIP_PLANE3: + params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 3) & 1); + break; case GL_CLIP_PLANE4: + params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 4) & 1); + break; case GL_CLIP_PLANE5: - if (ctx->Transform.ClipPlanesEnabled & (1 << (pname - GL_CLIP_PLANE0))) - *params = 1; - else - *params = 0; + params[0] = BOOLEAN_TO_INT((ctx->Transform.ClipPlanesEnabled >> 5) & 1); break; case GL_COLOR_CLEAR_VALUE: - params[0] = FLOAT_TO_INT( (ctx->Color.ClearColor[0]) ); - params[1] = FLOAT_TO_INT( (ctx->Color.ClearColor[1]) ); - params[2] = FLOAT_TO_INT( (ctx->Color.ClearColor[2]) ); - params[3] = FLOAT_TO_INT( (ctx->Color.ClearColor[3]) ); + params[0] = FLOAT_TO_INT(ctx->Color.ClearColor[0]); + params[1] = FLOAT_TO_INT(ctx->Color.ClearColor[1]); + params[2] = FLOAT_TO_INT(ctx->Color.ClearColor[2]); + params[3] = FLOAT_TO_INT(ctx->Color.ClearColor[3]); break; case GL_COLOR_MATERIAL: - *params = (GLint) ctx->Light.ColorMaterialEnabled; + params[0] = BOOLEAN_TO_INT(ctx->Light.ColorMaterialEnabled); break; case GL_COLOR_MATERIAL_FACE: - *params = (GLint) ctx->Light.ColorMaterialFace; + params[0] = ENUM_TO_INT(ctx->Light.ColorMaterialFace); break; case GL_COLOR_MATERIAL_PARAMETER: - *params = (GLint) ctx->Light.ColorMaterialMode; + params[0] = ENUM_TO_INT(ctx->Light.ColorMaterialMode); break; case GL_COLOR_WRITEMASK: params[0] = ctx->Color.ColorMask[RCOMP] ? 1 : 0; @@ -5180,1714 +3867,1706 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) params[3] = ctx->Color.ColorMask[ACOMP] ? 1 : 0; break; case GL_CULL_FACE: - *params = (GLint) ctx->Polygon.CullFlag; + params[0] = BOOLEAN_TO_INT(ctx->Polygon.CullFlag); break; case GL_CULL_FACE_MODE: - *params = (GLint) ctx->Polygon.CullFaceMode; + params[0] = ENUM_TO_INT(ctx->Polygon.CullFaceMode); break; case GL_CURRENT_COLOR: - FLUSH_CURRENT(ctx, 0); + { + FLUSH_CURRENT(ctx, 0); params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]); params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]); params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]); params[3] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]); + } break; case GL_CURRENT_INDEX: - FLUSH_CURRENT(ctx, 0); - *params = (GLint) ctx->Current.Index; + { + FLUSH_CURRENT(ctx, 0); + params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]); + } break; case GL_CURRENT_NORMAL: - FLUSH_CURRENT(ctx, 0); + { + FLUSH_CURRENT(ctx, 0); params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]); params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]); params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]); + } break; case GL_CURRENT_RASTER_COLOR: - params[0] = FLOAT_TO_INT( ctx->Current.RasterColor[0] ); - params[1] = FLOAT_TO_INT( ctx->Current.RasterColor[1] ); - params[2] = FLOAT_TO_INT( ctx->Current.RasterColor[2] ); - params[3] = FLOAT_TO_INT( ctx->Current.RasterColor[3] ); - break; + params[0] = FLOAT_TO_INT(ctx->Current.RasterColor[0]); + params[1] = FLOAT_TO_INT(ctx->Current.RasterColor[1]); + params[2] = FLOAT_TO_INT(ctx->Current.RasterColor[2]); + params[3] = FLOAT_TO_INT(ctx->Current.RasterColor[3]); + break; case GL_CURRENT_RASTER_DISTANCE: - params[0] = (GLint) ctx->Current.RasterDistance; - break; + params[0] = IROUND(ctx->Current.RasterDistance); + break; case GL_CURRENT_RASTER_INDEX: - *params = (GLint) ctx->Current.RasterIndex; - break; + params[0] = IROUND(ctx->Current.RasterIndex); + break; case GL_CURRENT_RASTER_POSITION: - params[0] = (GLint) ctx->Current.RasterPos[0]; - params[1] = (GLint) ctx->Current.RasterPos[1]; - params[2] = (GLint) ctx->Current.RasterPos[2]; - params[3] = (GLint) ctx->Current.RasterPos[3]; - break; + params[0] = IROUND(ctx->Current.RasterPos[0]); + params[1] = IROUND(ctx->Current.RasterPos[1]); + params[2] = IROUND(ctx->Current.RasterPos[2]); + params[3] = IROUND(ctx->Current.RasterPos[3]); + break; + case GL_CURRENT_RASTER_SECONDARY_COLOR: + params[0] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[0]); + params[1] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[1]); + params[2] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[2]); + params[3] = FLOAT_TO_INT(ctx->Current.RasterSecondaryColor[3]); + break; case GL_CURRENT_RASTER_TEXTURE_COORDS: - params[0] = (GLint) ctx->Current.RasterTexCoords[texUnit][0]; - params[1] = (GLint) ctx->Current.RasterTexCoords[texUnit][1]; - params[2] = (GLint) ctx->Current.RasterTexCoords[texUnit][2]; - params[3] = (GLint) ctx->Current.RasterTexCoords[texUnit][3]; - break; + { + const GLuint texUnit = ctx->Texture.CurrentUnit; + params[0] = IROUND(ctx->Current.RasterTexCoords[texUnit][0]); + params[1] = IROUND(ctx->Current.RasterTexCoords[texUnit][1]); + params[2] = IROUND(ctx->Current.RasterTexCoords[texUnit][2]); + params[3] = IROUND(ctx->Current.RasterTexCoords[texUnit][3]); + } + break; case GL_CURRENT_RASTER_POSITION_VALID: - *params = (GLint) ctx->Current.RasterPosValid; - break; + params[0] = BOOLEAN_TO_INT(ctx->Current.RasterPosValid); + break; case GL_CURRENT_TEXTURE_COORDS: - FLUSH_CURRENT(ctx, 0); - params[0] = (GLint) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]; - params[1] = (GLint) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]; - params[2] = (GLint) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]; - params[3] = (GLint) ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]; - break; + { + const GLuint texUnit = ctx->Texture.CurrentUnit; + params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]); + params[1] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]); + params[2] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]); + params[3] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]); + } + break; case GL_DEPTH_BIAS: - *params = (GLint) ctx->Pixel.DepthBias; - break; + params[0] = IROUND(ctx->Pixel.DepthBias); + break; case GL_DEPTH_BITS: - *params = ctx->Visual.depthBits; - break; + params[0] = ctx->DrawBuffer->Visual.depthBits; + break; case GL_DEPTH_CLEAR_VALUE: - *params = (GLint) ctx->Depth.Clear; - break; + params[0] = IROUND(ctx->Depth.Clear); + break; case GL_DEPTH_FUNC: - *params = (GLint) ctx->Depth.Func; - break; + params[0] = ENUM_TO_INT(ctx->Depth.Func); + break; case GL_DEPTH_RANGE: - params[0] = (GLint) ctx->Viewport.Near; - params[1] = (GLint) ctx->Viewport.Far; - break; + params[0] = FLOAT_TO_INT(ctx->Viewport.Near); + params[1] = FLOAT_TO_INT(ctx->Viewport.Far); + break; case GL_DEPTH_SCALE: - *params = (GLint) ctx->Pixel.DepthScale; - break; + params[0] = IROUND(ctx->Pixel.DepthScale); + break; case GL_DEPTH_TEST: - *params = (GLint) ctx->Depth.Test; - break; + params[0] = BOOLEAN_TO_INT(ctx->Depth.Test); + break; case GL_DEPTH_WRITEMASK: - *params = (GLint) ctx->Depth.Mask; - break; + params[0] = BOOLEAN_TO_INT(ctx->Depth.Mask); + break; case GL_DITHER: - *params = (GLint) ctx->Color.DitherFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Color.DitherFlag); + break; case GL_DOUBLEBUFFER: - *params = (GLint) ctx->Visual.doubleBufferMode; - break; + params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.doubleBufferMode); + break; case GL_DRAW_BUFFER: - *params = (GLint) ctx->Color.DrawBuffer[0]; - break; + params[0] = ENUM_TO_INT(ctx->DrawBuffer->ColorDrawBuffer[0]); + break; case GL_EDGE_FLAG: - FLUSH_CURRENT(ctx, 0); - *params = (GLint) ctx->Current.EdgeFlag; - break; + { + FLUSH_CURRENT(ctx, 0); + params[0] = BOOLEAN_TO_INT(ctx->Current.EdgeFlag); + } + break; case GL_FEEDBACK_BUFFER_SIZE: - *params = ctx->Feedback.BufferSize; + params[0] = ctx->Feedback.BufferSize; break; case GL_FEEDBACK_BUFFER_TYPE: - *params = ctx->Feedback.Type; + params[0] = ENUM_TO_INT(ctx->Feedback.Type); break; case GL_FOG: - *params = (GLint) ctx->Fog.Enabled; - break; + params[0] = BOOLEAN_TO_INT(ctx->Fog.Enabled); + break; case GL_FOG_COLOR: - params[0] = FLOAT_TO_INT( ctx->Fog.Color[0] ); - params[1] = FLOAT_TO_INT( ctx->Fog.Color[1] ); - params[2] = FLOAT_TO_INT( ctx->Fog.Color[2] ); - params[3] = FLOAT_TO_INT( ctx->Fog.Color[3] ); - break; + params[0] = FLOAT_TO_INT(ctx->Fog.Color[0]); + params[1] = FLOAT_TO_INT(ctx->Fog.Color[1]); + params[2] = FLOAT_TO_INT(ctx->Fog.Color[2]); + params[3] = FLOAT_TO_INT(ctx->Fog.Color[3]); + break; case GL_FOG_DENSITY: - *params = (GLint) ctx->Fog.Density; - break; + params[0] = IROUND(ctx->Fog.Density); + break; case GL_FOG_END: - *params = (GLint) ctx->Fog.End; - break; + params[0] = IROUND(ctx->Fog.End); + break; case GL_FOG_HINT: - *params = (GLint) ctx->Hint.Fog; - break; + params[0] = ENUM_TO_INT(ctx->Hint.Fog); + break; case GL_FOG_INDEX: - *params = (GLint) ctx->Fog.Index; - break; + params[0] = IROUND(ctx->Fog.Index); + break; case GL_FOG_MODE: - *params = (GLint) ctx->Fog.Mode; - break; + params[0] = ENUM_TO_INT(ctx->Fog.Mode); + break; case GL_FOG_START: - *params = (GLint) ctx->Fog.Start; - break; + params[0] = IROUND(ctx->Fog.Start); + break; case GL_FRONT_FACE: - *params = (GLint) ctx->Polygon.FrontFace; - break; + params[0] = ENUM_TO_INT(ctx->Polygon.FrontFace); + break; case GL_GREEN_BIAS: - *params = (GLint) ctx->Pixel.GreenBias; + params[0] = IROUND(ctx->Pixel.GreenBias); break; case GL_GREEN_BITS: - *params = (GLint) ctx->Visual.greenBits; + params[0] = ctx->DrawBuffer->Visual.greenBits; break; case GL_GREEN_SCALE: - *params = (GLint) ctx->Pixel.GreenScale; + params[0] = IROUND(ctx->Pixel.GreenScale); break; case GL_INDEX_BITS: - *params = (GLint) ctx->Visual.indexBits; + params[0] = ctx->DrawBuffer->Visual.indexBits; break; case GL_INDEX_CLEAR_VALUE: - *params = (GLint) ctx->Color.ClearIndex; + params[0] = ctx->Color.ClearIndex; break; case GL_INDEX_MODE: - *params = ctx->Visual.rgbMode ? 0 : 1; - break; + params[0] = BOOLEAN_TO_INT(!ctx->DrawBuffer->Visual.rgbMode); + break; case GL_INDEX_OFFSET: - *params = ctx->Pixel.IndexOffset; - break; + params[0] = ctx->Pixel.IndexOffset; + break; case GL_INDEX_SHIFT: - *params = ctx->Pixel.IndexShift; - break; + params[0] = ctx->Pixel.IndexShift; + break; case GL_INDEX_WRITEMASK: - *params = (GLint) ctx->Color.IndexMask; - break; + params[0] = ctx->Color.IndexMask; + break; case GL_LIGHT0: + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[0].Enabled); + break; case GL_LIGHT1: + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[1].Enabled); + break; case GL_LIGHT2: + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[2].Enabled); + break; case GL_LIGHT3: + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[3].Enabled); + break; case GL_LIGHT4: + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[4].Enabled); + break; case GL_LIGHT5: + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[5].Enabled); + break; case GL_LIGHT6: + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[6].Enabled); + break; case GL_LIGHT7: - *params = (GLint) ctx->Light.Light[pname-GL_LIGHT0].Enabled; - break; + params[0] = BOOLEAN_TO_INT(ctx->Light.Light[7].Enabled); + break; case GL_LIGHTING: - *params = (GLint) ctx->Light.Enabled; - break; + params[0] = BOOLEAN_TO_INT(ctx->Light.Enabled); + break; case GL_LIGHT_MODEL_AMBIENT: - params[0] = FLOAT_TO_INT( ctx->Light.Model.Ambient[0] ); - params[1] = FLOAT_TO_INT( ctx->Light.Model.Ambient[1] ); - params[2] = FLOAT_TO_INT( ctx->Light.Model.Ambient[2] ); - params[3] = FLOAT_TO_INT( ctx->Light.Model.Ambient[3] ); - break; + params[0] = FLOAT_TO_INT(ctx->Light.Model.Ambient[0]); + params[1] = FLOAT_TO_INT(ctx->Light.Model.Ambient[1]); + params[2] = FLOAT_TO_INT(ctx->Light.Model.Ambient[2]); + params[3] = FLOAT_TO_INT(ctx->Light.Model.Ambient[3]); + break; case GL_LIGHT_MODEL_COLOR_CONTROL: - params[0] = (GLint) ctx->Light.Model.ColorControl; + params[0] = ENUM_TO_INT(ctx->Light.Model.ColorControl); break; case GL_LIGHT_MODEL_LOCAL_VIEWER: - *params = (GLint) ctx->Light.Model.LocalViewer; - break; + params[0] = BOOLEAN_TO_INT(ctx->Light.Model.LocalViewer); + break; case GL_LIGHT_MODEL_TWO_SIDE: - *params = (GLint) ctx->Light.Model.TwoSide; - break; + params[0] = BOOLEAN_TO_INT(ctx->Light.Model.TwoSide); + break; case GL_LINE_SMOOTH: - *params = (GLint) ctx->Line.SmoothFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Line.SmoothFlag); + break; case GL_LINE_SMOOTH_HINT: - *params = (GLint) ctx->Hint.LineSmooth; - break; + params[0] = ENUM_TO_INT(ctx->Hint.LineSmooth); + break; case GL_LINE_STIPPLE: - *params = (GLint) ctx->Line.StippleFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Line.StippleFlag); + break; case GL_LINE_STIPPLE_PATTERN: - *params = (GLint) ctx->Line.StipplePattern; + params[0] = ctx->Line.StipplePattern; break; case GL_LINE_STIPPLE_REPEAT: - *params = (GLint) ctx->Line.StippleFactor; + params[0] = ctx->Line.StippleFactor; break; case GL_LINE_WIDTH: - *params = (GLint) ctx->Line.Width; - break; + params[0] = IROUND(ctx->Line.Width); + break; case GL_LINE_WIDTH_GRANULARITY: - *params = (GLint) ctx->Const.LineWidthGranularity; - break; + params[0] = IROUND(ctx->Const.LineWidthGranularity); + break; case GL_LINE_WIDTH_RANGE: - params[0] = (GLint) ctx->Const.MinLineWidthAA; - params[1] = (GLint) ctx->Const.MaxLineWidthAA; - break; + params[0] = IROUND(ctx->Const.MinLineWidthAA); + params[1] = IROUND(ctx->Const.MaxLineWidthAA); + break; case GL_ALIASED_LINE_WIDTH_RANGE: - params[0] = (GLint) ctx->Const.MinLineWidth; - params[1] = (GLint) ctx->Const.MaxLineWidth; - break; + params[0] = IROUND(ctx->Const.MinLineWidth); + params[1] = IROUND(ctx->Const.MaxLineWidth); + break; case GL_LIST_BASE: - *params = (GLint) ctx->List.ListBase; - break; + params[0] = ctx->List.ListBase; + break; case GL_LIST_INDEX: - *params = (GLint) ctx->ListState.CurrentListNum; - break; + params[0] = ctx->ListState.CurrentListNum; + break; case GL_LIST_MODE: + { + GLenum mode; if (!ctx->CompileFlag) - *params = 0; + mode = 0; else if (ctx->ExecuteFlag) - *params = (GLint) GL_COMPILE_AND_EXECUTE; + mode = GL_COMPILE_AND_EXECUTE; else - *params = (GLint) GL_COMPILE; - break; + mode = GL_COMPILE; + params[0] = ENUM_TO_INT(mode); + } + break; case GL_INDEX_LOGIC_OP: - *params = (GLint) ctx->Color.IndexLogicOpEnabled; - break; + params[0] = BOOLEAN_TO_INT(ctx->Color.IndexLogicOpEnabled); + break; case GL_COLOR_LOGIC_OP: - *params = (GLint) ctx->Color.ColorLogicOpEnabled; - break; + params[0] = BOOLEAN_TO_INT(ctx->Color.ColorLogicOpEnabled); + break; case GL_LOGIC_OP_MODE: - *params = (GLint) ctx->Color.LogicOp; + params[0] = ENUM_TO_INT(ctx->Color.LogicOp); break; case GL_MAP1_COLOR_4: - *params = (GLint) ctx->Eval.Map1Color4; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Color4); + break; case GL_MAP1_GRID_DOMAIN: - params[0] = (GLint) ctx->Eval.MapGrid1u1; - params[1] = (GLint) ctx->Eval.MapGrid1u2; - break; + params[0] = IROUND(ctx->Eval.MapGrid1u1); + params[1] = IROUND(ctx->Eval.MapGrid1u2); + break; case GL_MAP1_GRID_SEGMENTS: - *params = (GLint) ctx->Eval.MapGrid1un; - break; + params[0] = ctx->Eval.MapGrid1un; + break; case GL_MAP1_INDEX: - *params = (GLint) ctx->Eval.Map1Index; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Index); + break; case GL_MAP1_NORMAL: - *params = (GLint) ctx->Eval.Map1Normal; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Normal); + break; case GL_MAP1_TEXTURE_COORD_1: - *params = (GLint) ctx->Eval.Map1TextureCoord1; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord1); + break; case GL_MAP1_TEXTURE_COORD_2: - *params = (GLint) ctx->Eval.Map1TextureCoord2; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord2); + break; case GL_MAP1_TEXTURE_COORD_3: - *params = (GLint) ctx->Eval.Map1TextureCoord3; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord3); + break; case GL_MAP1_TEXTURE_COORD_4: - *params = (GLint) ctx->Eval.Map1TextureCoord4; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1TextureCoord4); + break; case GL_MAP1_VERTEX_3: - *params = (GLint) ctx->Eval.Map1Vertex3; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Vertex3); + break; case GL_MAP1_VERTEX_4: - *params = (GLint) ctx->Eval.Map1Vertex4; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Vertex4); + break; case GL_MAP2_COLOR_4: - *params = (GLint) ctx->Eval.Map2Color4; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Color4); + break; case GL_MAP2_GRID_DOMAIN: - params[0] = (GLint) ctx->Eval.MapGrid2u1; - params[1] = (GLint) ctx->Eval.MapGrid2u2; - params[2] = (GLint) ctx->Eval.MapGrid2v1; - params[3] = (GLint) ctx->Eval.MapGrid2v2; - break; + params[0] = IROUND(ctx->Eval.MapGrid2u1); + params[1] = IROUND(ctx->Eval.MapGrid2u2); + params[2] = IROUND(ctx->Eval.MapGrid2v1); + params[3] = IROUND(ctx->Eval.MapGrid2v2); + break; case GL_MAP2_GRID_SEGMENTS: - params[0] = (GLint) ctx->Eval.MapGrid2un; - params[1] = (GLint) ctx->Eval.MapGrid2vn; - break; + params[0] = ctx->Eval.MapGrid2un; + params[1] = ctx->Eval.MapGrid2vn; + break; case GL_MAP2_INDEX: - *params = (GLint) ctx->Eval.Map2Index; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Index); + break; case GL_MAP2_NORMAL: - *params = (GLint) ctx->Eval.Map2Normal; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Normal); + break; case GL_MAP2_TEXTURE_COORD_1: - *params = (GLint) ctx->Eval.Map2TextureCoord1; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord1); + break; case GL_MAP2_TEXTURE_COORD_2: - *params = (GLint) ctx->Eval.Map2TextureCoord2; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord2); + break; case GL_MAP2_TEXTURE_COORD_3: - *params = (GLint) ctx->Eval.Map2TextureCoord3; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord3); + break; case GL_MAP2_TEXTURE_COORD_4: - *params = (GLint) ctx->Eval.Map2TextureCoord4; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2TextureCoord4); + break; case GL_MAP2_VERTEX_3: - *params = (GLint) ctx->Eval.Map2Vertex3; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Vertex3); + break; case GL_MAP2_VERTEX_4: - *params = (GLint) ctx->Eval.Map2Vertex4; - break; + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map2Vertex4); + break; case GL_MAP_COLOR: - *params = (GLint) ctx->Pixel.MapColorFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Pixel.MapColorFlag); + break; case GL_MAP_STENCIL: - *params = (GLint) ctx->Pixel.MapStencilFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Pixel.MapStencilFlag); + break; case GL_MATRIX_MODE: - *params = (GLint) ctx->Transform.MatrixMode; - break; + params[0] = ENUM_TO_INT(ctx->Transform.MatrixMode); + break; case GL_MAX_ATTRIB_STACK_DEPTH: - *params = (GLint) MAX_ATTRIB_STACK_DEPTH; + params[0] = MAX_ATTRIB_STACK_DEPTH; break; case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: - *params = (GLint) MAX_CLIENT_ATTRIB_STACK_DEPTH; + params[0] = MAX_CLIENT_ATTRIB_STACK_DEPTH; break; case GL_MAX_CLIP_PLANES: - *params = (GLint) ctx->Const.MaxClipPlanes; + params[0] = ctx->Const.MaxClipPlanes; break; - case GL_MAX_ELEMENTS_VERTICES: /* GL_VERSION_1_2 */ - *params = (GLint) ctx->Const.MaxArrayLockSize; + case GL_MAX_ELEMENTS_VERTICES: + params[0] = ctx->Const.MaxArrayLockSize; break; - case GL_MAX_ELEMENTS_INDICES: /* GL_VERSION_1_2 */ - *params = (GLint) ctx->Const.MaxArrayLockSize; + case GL_MAX_ELEMENTS_INDICES: + params[0] = ctx->Const.MaxArrayLockSize; break; case GL_MAX_EVAL_ORDER: - *params = (GLint) MAX_EVAL_ORDER; - break; + params[0] = MAX_EVAL_ORDER; + break; case GL_MAX_LIGHTS: - *params = (GLint) ctx->Const.MaxLights; + params[0] = ctx->Const.MaxLights; break; case GL_MAX_LIST_NESTING: - *params = (GLint) MAX_LIST_NESTING; + params[0] = MAX_LIST_NESTING; break; case GL_MAX_MODELVIEW_STACK_DEPTH: - *params = (GLint) MAX_MODELVIEW_STACK_DEPTH; + params[0] = MAX_MODELVIEW_STACK_DEPTH; break; case GL_MAX_NAME_STACK_DEPTH: - *params = (GLint) MAX_NAME_STACK_DEPTH; - break; + params[0] = MAX_NAME_STACK_DEPTH; + break; case GL_MAX_PIXEL_MAP_TABLE: - *params = (GLint) MAX_PIXEL_MAP_TABLE; - break; + params[0] = MAX_PIXEL_MAP_TABLE; + break; case GL_MAX_PROJECTION_STACK_DEPTH: - *params = (GLint) MAX_PROJECTION_STACK_DEPTH; + params[0] = MAX_PROJECTION_STACK_DEPTH; break; case GL_MAX_TEXTURE_SIZE: - *params = (1 << (ctx->Const.MaxTextureLevels - 1)); - break; + params[0] = 1 << (ctx->Const.MaxTextureLevels - 1); + break; case GL_MAX_3D_TEXTURE_SIZE: - *params = (1 << (ctx->Const.Max3DTextureLevels - 1)); - break; + params[0] = 1 << (ctx->Const.Max3DTextureLevels - 1); + break; case GL_MAX_TEXTURE_STACK_DEPTH: - *params = (GLint) MAX_TEXTURE_STACK_DEPTH; - break; + params[0] = MAX_TEXTURE_STACK_DEPTH; + break; case GL_MAX_VIEWPORT_DIMS: - params[0] = (GLint) MAX_WIDTH; - params[1] = (GLint) MAX_HEIGHT; + params[0] = ctx->Const.MaxViewportWidth; + params[1] = ctx->Const.MaxViewportHeight; break; case GL_MODELVIEW_MATRIX: - for (i=0;i<16;i++) { - params[i] = (GLint) ctx->ModelviewMatrixStack.Top->m[i]; - } - break; + { + const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[1]); + params[2] = IROUND(matrix[2]); + params[3] = IROUND(matrix[3]); + params[4] = IROUND(matrix[4]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[6]); + params[7] = IROUND(matrix[7]); + params[8] = IROUND(matrix[8]); + params[9] = IROUND(matrix[9]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[11]); + params[12] = IROUND(matrix[12]); + params[13] = IROUND(matrix[13]); + params[14] = IROUND(matrix[14]); + params[15] = IROUND(matrix[15]); + } + break; case GL_MODELVIEW_STACK_DEPTH: - *params = (GLint) (ctx->ModelviewMatrixStack.Depth + 1); - break; + params[0] = ctx->ModelviewMatrixStack.Depth + 1; + break; case GL_NAME_STACK_DEPTH: - *params = (GLint) ctx->Select.NameStackDepth; - break; + params[0] = ctx->Select.NameStackDepth; + break; case GL_NORMALIZE: - *params = (GLint) ctx->Transform.Normalize; - break; + params[0] = BOOLEAN_TO_INT(ctx->Transform.Normalize); + break; case GL_PACK_ALIGNMENT: - *params = ctx->Pack.Alignment; - break; + params[0] = ctx->Pack.Alignment; + break; case GL_PACK_LSB_FIRST: - *params = (GLint) ctx->Pack.LsbFirst; - break; + params[0] = BOOLEAN_TO_INT(ctx->Pack.LsbFirst); + break; case GL_PACK_ROW_LENGTH: - *params = ctx->Pack.RowLength; - break; + params[0] = ctx->Pack.RowLength; + break; case GL_PACK_SKIP_PIXELS: - *params = ctx->Pack.SkipPixels; - break; + params[0] = ctx->Pack.SkipPixels; + break; case GL_PACK_SKIP_ROWS: - *params = ctx->Pack.SkipRows; - break; + params[0] = ctx->Pack.SkipRows; + break; case GL_PACK_SWAP_BYTES: - *params = (GLint) ctx->Pack.SwapBytes; - break; + params[0] = BOOLEAN_TO_INT(ctx->Pack.SwapBytes); + break; case GL_PACK_SKIP_IMAGES_EXT: - *params = ctx->Pack.SkipImages; + params[0] = ctx->Pack.SkipImages; break; case GL_PACK_IMAGE_HEIGHT_EXT: - *params = ctx->Pack.ImageHeight; + params[0] = ctx->Pack.ImageHeight; break; case GL_PACK_INVERT_MESA: - *params = ctx->Pack.Invert; + params[0] = BOOLEAN_TO_INT(ctx->Pack.Invert); break; case GL_PERSPECTIVE_CORRECTION_HINT: - *params = (GLint) ctx->Hint.PerspectiveCorrection; - break; + params[0] = ENUM_TO_INT(ctx->Hint.PerspectiveCorrection); + break; case GL_PIXEL_MAP_A_TO_A_SIZE: - *params = ctx->Pixel.MapAtoAsize; - break; + params[0] = ctx->Pixel.MapAtoAsize; + break; case GL_PIXEL_MAP_B_TO_B_SIZE: - *params = ctx->Pixel.MapBtoBsize; - break; + params[0] = ctx->Pixel.MapBtoBsize; + break; case GL_PIXEL_MAP_G_TO_G_SIZE: - *params = ctx->Pixel.MapGtoGsize; - break; + params[0] = ctx->Pixel.MapGtoGsize; + break; case GL_PIXEL_MAP_I_TO_A_SIZE: - *params = ctx->Pixel.MapItoAsize; - break; + params[0] = ctx->Pixel.MapItoAsize; + break; case GL_PIXEL_MAP_I_TO_B_SIZE: - *params = ctx->Pixel.MapItoBsize; - break; + params[0] = ctx->Pixel.MapItoBsize; + break; case GL_PIXEL_MAP_I_TO_G_SIZE: - *params = ctx->Pixel.MapItoGsize; - break; + params[0] = ctx->Pixel.MapItoGsize; + break; case GL_PIXEL_MAP_I_TO_I_SIZE: - *params = ctx->Pixel.MapItoIsize; - break; + params[0] = ctx->Pixel.MapItoIsize; + break; case GL_PIXEL_MAP_I_TO_R_SIZE: - *params = ctx->Pixel.MapItoRsize; - break; + params[0] = ctx->Pixel.MapItoRsize; + break; case GL_PIXEL_MAP_R_TO_R_SIZE: - *params = ctx->Pixel.MapRtoRsize; - break; + params[0] = ctx->Pixel.MapRtoRsize; + break; case GL_PIXEL_MAP_S_TO_S_SIZE: - *params = ctx->Pixel.MapStoSsize; - break; + params[0] = ctx->Pixel.MapStoSsize; + break; case GL_POINT_SIZE: - *params = (GLint) ctx->Point.Size; + params[0] = IROUND(ctx->Point.Size); break; case GL_POINT_SIZE_GRANULARITY: - *params = (GLint) ctx->Const.PointSizeGranularity; - break; + params[0] = IROUND(ctx->Const.PointSizeGranularity); + break; case GL_POINT_SIZE_RANGE: - params[0] = (GLint) ctx->Const.MinPointSizeAA; - params[1] = (GLint) ctx->Const.MaxPointSizeAA; - break; + params[0] = IROUND(ctx->Const.MinPointSizeAA); + params[1] = IROUND(ctx->Const.MaxPointSizeAA); + break; case GL_ALIASED_POINT_SIZE_RANGE: - params[0] = (GLint) ctx->Const.MinPointSize; - params[1] = (GLint) ctx->Const.MaxPointSize; - break; + params[0] = IROUND(ctx->Const.MinPointSize); + params[1] = IROUND(ctx->Const.MaxPointSize); + break; case GL_POINT_SMOOTH: - *params = (GLint) ctx->Point.SmoothFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Point.SmoothFlag); + break; case GL_POINT_SMOOTH_HINT: - *params = (GLint) ctx->Hint.PointSmooth; - break; + params[0] = ENUM_TO_INT(ctx->Hint.PointSmooth); + break; case GL_POINT_SIZE_MIN_EXT: - *params = (GLint) (ctx->Point.MinSize); - break; + params[0] = IROUND(ctx->Point.MinSize); + break; case GL_POINT_SIZE_MAX_EXT: - *params = (GLint) (ctx->Point.MaxSize); - break; + params[0] = IROUND(ctx->Point.MaxSize); + break; case GL_POINT_FADE_THRESHOLD_SIZE_EXT: - *params = (GLint) (ctx->Point.Threshold); - break; + params[0] = IROUND(ctx->Point.Threshold); + break; case GL_DISTANCE_ATTENUATION_EXT: - params[0] = (GLint) (ctx->Point.Params[0]); - params[1] = (GLint) (ctx->Point.Params[1]); - params[2] = (GLint) (ctx->Point.Params[2]); - break; + params[0] = IROUND(ctx->Point.Params[0]); + params[1] = IROUND(ctx->Point.Params[1]); + params[2] = IROUND(ctx->Point.Params[2]); + break; case GL_POLYGON_MODE: - params[0] = (GLint) ctx->Polygon.FrontMode; - params[1] = (GLint) ctx->Polygon.BackMode; - break; - case GL_POLYGON_OFFSET_BIAS_EXT: /* GL_EXT_polygon_offset */ - *params = (GLint) ctx->Polygon.OffsetUnits; + params[0] = ENUM_TO_INT(ctx->Polygon.FrontMode); + params[1] = ENUM_TO_INT(ctx->Polygon.BackMode); + break; + case GL_POLYGON_OFFSET_BIAS_EXT: + params[0] = IROUND(ctx->Polygon.OffsetUnits); break; case GL_POLYGON_OFFSET_FACTOR: - *params = (GLint) ctx->Polygon.OffsetFactor; + params[0] = IROUND(ctx->Polygon.OffsetFactor ); break; case GL_POLYGON_OFFSET_UNITS: - *params = (GLint) ctx->Polygon.OffsetUnits; + params[0] = IROUND(ctx->Polygon.OffsetUnits ); break; case GL_POLYGON_SMOOTH: - *params = (GLint) ctx->Polygon.SmoothFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Polygon.SmoothFlag); + break; case GL_POLYGON_SMOOTH_HINT: - *params = (GLint) ctx->Hint.PolygonSmooth; - break; + params[0] = ENUM_TO_INT(ctx->Hint.PolygonSmooth); + break; case GL_POLYGON_STIPPLE: - *params = (GLint) ctx->Polygon.StippleFlag; - break; + params[0] = BOOLEAN_TO_INT(ctx->Polygon.StippleFlag); + break; case GL_PROJECTION_MATRIX: - for (i=0;i<16;i++) { - params[i] = (GLint) ctx->ProjectionMatrixStack.Top->m[i]; - } - break; + { + const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[1]); + params[2] = IROUND(matrix[2]); + params[3] = IROUND(matrix[3]); + params[4] = IROUND(matrix[4]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[6]); + params[7] = IROUND(matrix[7]); + params[8] = IROUND(matrix[8]); + params[9] = IROUND(matrix[9]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[11]); + params[12] = IROUND(matrix[12]); + params[13] = IROUND(matrix[13]); + params[14] = IROUND(matrix[14]); + params[15] = IROUND(matrix[15]); + } + break; case GL_PROJECTION_STACK_DEPTH: - *params = (GLint) (ctx->ProjectionMatrixStack.Depth + 1); - break; + params[0] = ctx->ProjectionMatrixStack.Depth + 1; + break; case GL_READ_BUFFER: - *params = (GLint) ctx->Pixel.ReadBuffer; - break; + params[0] = ENUM_TO_INT(ctx->ReadBuffer->ColorReadBuffer); + break; case GL_RED_BIAS: - *params = (GLint) ctx->Pixel.RedBias; + params[0] = IROUND(ctx->Pixel.RedBias); break; case GL_RED_BITS: - *params = (GLint) ctx->Visual.redBits; + params[0] = ctx->DrawBuffer->Visual.redBits; break; case GL_RED_SCALE: - *params = (GLint) ctx->Pixel.RedScale; + params[0] = IROUND(ctx->Pixel.RedScale); break; case GL_RENDER_MODE: - *params = (GLint) ctx->RenderMode; - break; + params[0] = ENUM_TO_INT(ctx->RenderMode); + break; case GL_RESCALE_NORMAL: - *params = (GLint) ctx->Transform.RescaleNormals; + params[0] = BOOLEAN_TO_INT(ctx->Transform.RescaleNormals); break; case GL_RGBA_MODE: - *params = (GLint) ctx->Visual.rgbMode; - break; + params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.rgbMode); + break; case GL_SCISSOR_BOX: - params[0] = (GLint) ctx->Scissor.X; - params[1] = (GLint) ctx->Scissor.Y; - params[2] = (GLint) ctx->Scissor.Width; - params[3] = (GLint) ctx->Scissor.Height; - break; + params[0] = ctx->Scissor.X; + params[1] = ctx->Scissor.Y; + params[2] = ctx->Scissor.Width; + params[3] = ctx->Scissor.Height; + break; case GL_SCISSOR_TEST: - *params = (GLint) ctx->Scissor.Enabled; - break; + params[0] = BOOLEAN_TO_INT(ctx->Scissor.Enabled); + break; case GL_SELECTION_BUFFER_SIZE: - *params = (GLint) ctx->Select.BufferSize; + params[0] = ctx->Select.BufferSize; break; case GL_SHADE_MODEL: - *params = (GLint) ctx->Light.ShadeModel; - break; + params[0] = ENUM_TO_INT(ctx->Light.ShadeModel); + break; case GL_SHARED_TEXTURE_PALETTE_EXT: - *params = (GLint) ctx->Texture.SharedPalette; + params[0] = BOOLEAN_TO_INT(ctx->Texture.SharedPalette); break; case GL_STENCIL_BITS: - *params = ctx->Visual.stencilBits; + params[0] = ctx->DrawBuffer->Visual.stencilBits; break; case GL_STENCIL_CLEAR_VALUE: - *params = (GLint) ctx->Stencil.Clear; - break; + params[0] = ctx->Stencil.Clear; + break; case GL_STENCIL_FAIL: - *params = (GLint) ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]; - break; + params[0] = ENUM_TO_INT(ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_FUNC: - *params = (GLint) ctx->Stencil.Function[ctx->Stencil.ActiveFace]; - break; + params[0] = ENUM_TO_INT(ctx->Stencil.Function[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_PASS_DEPTH_FAIL: - *params = (GLint) ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]; - break; + params[0] = ENUM_TO_INT(ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_PASS_DEPTH_PASS: - *params = (GLint) ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]; - break; + params[0] = ENUM_TO_INT(ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]); + break; case GL_STENCIL_REF: - *params = (GLint) ctx->Stencil.Ref[ctx->Stencil.ActiveFace]; - break; + params[0] = ctx->Stencil.Ref[ctx->Stencil.ActiveFace]; + break; case GL_STENCIL_TEST: - *params = (GLint) ctx->Stencil.Enabled; - break; + params[0] = BOOLEAN_TO_INT(ctx->Stencil.Enabled); + break; case GL_STENCIL_VALUE_MASK: - *params = (GLint) ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]; - break; + params[0] = ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]; + break; case GL_STENCIL_WRITEMASK: - *params = (GLint) ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]; - break; + params[0] = ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]; + break; case GL_STEREO: - *params = (GLint) ctx->Visual.stereoMode; - break; + params[0] = BOOLEAN_TO_INT(ctx->DrawBuffer->Visual.stereoMode); + break; case GL_SUBPIXEL_BITS: - *params = ctx->Const.SubPixelBits; - break; + params[0] = ctx->Const.SubPixelBits; + break; case GL_TEXTURE_1D: - *params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1 : 0; - break; + params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_1D)); + break; case GL_TEXTURE_2D: - *params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1 : 0; - break; + params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D)); + break; case GL_TEXTURE_3D: - *params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1 : 0; - break; + params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_3D)); + break; case GL_TEXTURE_BINDING_1D: - *params = textureUnit->Current1D->Name; - break; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name; + break; case GL_TEXTURE_BINDING_2D: - *params = textureUnit->Current2D->Name; - break; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name; + break; case GL_TEXTURE_BINDING_3D: - *params = textureUnit->Current3D->Name; - break; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name; + break; case GL_TEXTURE_ENV_COLOR: - params[0] = FLOAT_TO_INT( textureUnit->EnvColor[0] ); - params[1] = FLOAT_TO_INT( textureUnit->EnvColor[1] ); - params[2] = FLOAT_TO_INT( textureUnit->EnvColor[2] ); - params[3] = FLOAT_TO_INT( textureUnit->EnvColor[3] ); - break; + { + const GLfloat *color = ctx->Texture.Unit[ctx->Texture.CurrentUnit].EnvColor; + params[0] = FLOAT_TO_INT(color[0]); + params[1] = FLOAT_TO_INT(color[1]); + params[2] = FLOAT_TO_INT(color[2]); + params[3] = FLOAT_TO_INT(color[3]); + } + break; case GL_TEXTURE_ENV_MODE: - *params = (GLint) textureUnit->EnvMode; - break; + params[0] = ENUM_TO_INT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].EnvMode); + break; case GL_TEXTURE_GEN_S: - *params = (textureUnit->TexGenEnabled & S_BIT) ? 1 : 0; - break; + params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)); + break; case GL_TEXTURE_GEN_T: - *params = (textureUnit->TexGenEnabled & T_BIT) ? 1 : 0; - break; + params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0)); + break; case GL_TEXTURE_GEN_R: - *params = (textureUnit->TexGenEnabled & R_BIT) ? 1 : 0; - break; + params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0)); + break; case GL_TEXTURE_GEN_Q: - *params = (textureUnit->TexGenEnabled & Q_BIT) ? 1 : 0; - break; + params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & Q_BIT) ? 1 : 0)); + break; case GL_TEXTURE_MATRIX: - for (i=0;i<16;i++) { - params[i] = (GLint) ctx->TextureMatrixStack[texUnit].Top->m[i]; - } - break; + { + const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[1]); + params[2] = IROUND(matrix[2]); + params[3] = IROUND(matrix[3]); + params[4] = IROUND(matrix[4]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[6]); + params[7] = IROUND(matrix[7]); + params[8] = IROUND(matrix[8]); + params[9] = IROUND(matrix[9]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[11]); + params[12] = IROUND(matrix[12]); + params[13] = IROUND(matrix[13]); + params[14] = IROUND(matrix[14]); + params[15] = IROUND(matrix[15]); + } + break; case GL_TEXTURE_STACK_DEPTH: - *params = (GLint) (ctx->TextureMatrixStack[texUnit].Depth + 1); - break; + params[0] = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Depth + 1; + break; case GL_UNPACK_ALIGNMENT: - *params = ctx->Unpack.Alignment; - break; + params[0] = ctx->Unpack.Alignment; + break; case GL_UNPACK_LSB_FIRST: - *params = (GLint) ctx->Unpack.LsbFirst; - break; + params[0] = BOOLEAN_TO_INT(ctx->Unpack.LsbFirst); + break; case GL_UNPACK_ROW_LENGTH: - *params = ctx->Unpack.RowLength; - break; + params[0] = ctx->Unpack.RowLength; + break; case GL_UNPACK_SKIP_PIXELS: - *params = ctx->Unpack.SkipPixels; - break; + params[0] = ctx->Unpack.SkipPixels; + break; case GL_UNPACK_SKIP_ROWS: - *params = ctx->Unpack.SkipRows; - break; + params[0] = ctx->Unpack.SkipRows; + break; case GL_UNPACK_SWAP_BYTES: - *params = (GLint) ctx->Unpack.SwapBytes; - break; + params[0] = BOOLEAN_TO_INT(ctx->Unpack.SwapBytes); + break; case GL_UNPACK_SKIP_IMAGES_EXT: - *params = ctx->Unpack.SkipImages; + params[0] = ctx->Unpack.SkipImages; break; case GL_UNPACK_IMAGE_HEIGHT_EXT: - *params = ctx->Unpack.ImageHeight; + params[0] = ctx->Unpack.ImageHeight; break; case GL_UNPACK_CLIENT_STORAGE_APPLE: - *params = ctx->Unpack.ClientStorage; + params[0] = BOOLEAN_TO_INT(ctx->Unpack.ClientStorage); break; case GL_VIEWPORT: - params[0] = (GLint) ctx->Viewport.X; - params[1] = (GLint) ctx->Viewport.Y; - params[2] = (GLint) ctx->Viewport.Width; - params[3] = (GLint) ctx->Viewport.Height; + params[0] = ctx->Viewport.X; + params[1] = ctx->Viewport.Y; + params[2] = ctx->Viewport.Width; + params[3] = ctx->Viewport.Height; break; case GL_ZOOM_X: - *params = (GLint) ctx->Pixel.ZoomX; - break; + params[0] = IROUND(ctx->Pixel.ZoomX); + break; case GL_ZOOM_Y: - *params = (GLint) ctx->Pixel.ZoomY; - break; + params[0] = IROUND(ctx->Pixel.ZoomY); + break; case GL_VERTEX_ARRAY: - *params = (GLint) ctx->Array.Vertex.Enabled; + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Vertex.Enabled); break; case GL_VERTEX_ARRAY_SIZE: - *params = ctx->Array.Vertex.Size; + params[0] = ctx->Array.ArrayObj->Vertex.Size; break; case GL_VERTEX_ARRAY_TYPE: - *params = ctx->Array.Vertex.Type; + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Vertex.Type); break; case GL_VERTEX_ARRAY_STRIDE: - *params = ctx->Array.Vertex.Stride; + params[0] = ctx->Array.ArrayObj->Vertex.Stride; break; case GL_VERTEX_ARRAY_COUNT_EXT: - *params = 0; + params[0] = 0; break; case GL_NORMAL_ARRAY: - *params = (GLint) ctx->Array.Normal.Enabled; + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Enabled); break; case GL_NORMAL_ARRAY_TYPE: - *params = ctx->Array.Normal.Type; + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Normal.Type); break; case GL_NORMAL_ARRAY_STRIDE: - *params = ctx->Array.Normal.Stride; + params[0] = ctx->Array.ArrayObj->Normal.Stride; break; case GL_NORMAL_ARRAY_COUNT_EXT: - *params = 0; + params[0] = 0; break; case GL_COLOR_ARRAY: - *params = (GLint) ctx->Array.Color.Enabled; + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Color.Enabled); break; case GL_COLOR_ARRAY_SIZE: - *params = ctx->Array.Color.Size; + params[0] = ctx->Array.ArrayObj->Color.Size; break; case GL_COLOR_ARRAY_TYPE: - *params = ctx->Array.Color.Type; + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Color.Type); break; case GL_COLOR_ARRAY_STRIDE: - *params = ctx->Array.Color.Stride; + params[0] = ctx->Array.ArrayObj->Color.Stride; break; case GL_COLOR_ARRAY_COUNT_EXT: - *params = 0; + params[0] = 0; break; case GL_INDEX_ARRAY: - *params = (GLint) ctx->Array.Index.Enabled; + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->Index.Enabled); break; case GL_INDEX_ARRAY_TYPE: - *params = ctx->Array.Index.Type; + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->Index.Type); break; case GL_INDEX_ARRAY_STRIDE: - *params = ctx->Array.Index.Stride; + params[0] = ctx->Array.ArrayObj->Index.Stride; break; case GL_INDEX_ARRAY_COUNT_EXT: - *params = 0; + params[0] = 0; break; case GL_TEXTURE_COORD_ARRAY: - *params = (GLint) ctx->Array.TexCoord[clientUnit].Enabled; + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled); break; case GL_TEXTURE_COORD_ARRAY_SIZE: - *params = ctx->Array.TexCoord[clientUnit].Size; + params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size; break; case GL_TEXTURE_COORD_ARRAY_TYPE: - *params = ctx->Array.TexCoord[clientUnit].Type; + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type); break; case GL_TEXTURE_COORD_ARRAY_STRIDE: - *params = ctx->Array.TexCoord[clientUnit].Stride; + params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride; break; case GL_TEXTURE_COORD_ARRAY_COUNT_EXT: - *params = 0; + params[0] = 0; break; case GL_EDGE_FLAG_ARRAY: - *params = (GLint) ctx->Array.EdgeFlag.Enabled; + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->EdgeFlag.Enabled); break; case GL_EDGE_FLAG_ARRAY_STRIDE: - *params = ctx->Array.EdgeFlag.Stride; + params[0] = ctx->Array.ArrayObj->EdgeFlag.Stride; break; case GL_EDGE_FLAG_ARRAY_COUNT_EXT: - *params = 0; + params[0] = 0; break; - - /* GL_ARB_multitexture */ case GL_MAX_TEXTURE_UNITS_ARB: - CHECK_EXTENSION_I(ARB_multitexture, pname); - *params = MIN2(ctx->Const.MaxTextureImageUnits, - ctx->Const.MaxTextureCoordUnits); + CHECK_EXT1(ARB_multitexture, "GetIntegerv"); + params[0] = ctx->Const.MaxTextureUnits; break; case GL_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_I(ARB_multitexture, pname); - *params = GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit; + CHECK_EXT1(ARB_multitexture, "GetIntegerv"); + params[0] = GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit; break; case GL_CLIENT_ACTIVE_TEXTURE_ARB: - CHECK_EXTENSION_I(ARB_multitexture, pname); - *params = GL_TEXTURE0_ARB + clientUnit; + CHECK_EXT1(ARB_multitexture, "GetIntegerv"); + params[0] = GL_TEXTURE0_ARB + ctx->Array.ActiveTexture; break; - - /* GL_ARB_texture_cube_map */ case GL_TEXTURE_CUBE_MAP_ARB: - CHECK_EXTENSION_I(ARB_texture_cube_map, pname); - *params = (GLint) _mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB); + CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB)); break; case GL_TEXTURE_BINDING_CUBE_MAP_ARB: - CHECK_EXTENSION_I(ARB_texture_cube_map, pname); - *params = textureUnit->CurrentCubeMap->Name; + CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv"); + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name; break; case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: - CHECK_EXTENSION_I(ARB_texture_cube_map, pname); - *params = (1 << (ctx->Const.MaxCubeTextureLevels - 1)); + CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv"); + params[0] = (1 << (ctx->Const.MaxCubeTextureLevels - 1)); break; - - /* GL_ARB_texture_compression */ case GL_TEXTURE_COMPRESSION_HINT_ARB: - CHECK_EXTENSION_I(ARB_texture_compression, pname); - *params = (GLint) ctx->Hint.TextureCompression; + CHECK_EXT1(ARB_texture_compression, "GetIntegerv"); + params[0] = ctx->Hint.TextureCompression; break; case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_I(ARB_texture_compression, pname); - *params = (GLint) _mesa_get_compressed_formats(ctx, NULL); + CHECK_EXT1(ARB_texture_compression, "GetIntegerv"); + params[0] = _mesa_get_compressed_formats(ctx, NULL, GL_FALSE); break; case GL_COMPRESSED_TEXTURE_FORMATS_ARB: - CHECK_EXTENSION_I(ARB_texture_compression, pname); - (void) _mesa_get_compressed_formats(ctx, params); + CHECK_EXT1(ARB_texture_compression, "GetIntegerv"); + { + GLint formats[100]; + GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE); + ASSERT(n <= 100); + for (i = 0; i < n; i++) + params[i] = ENUM_TO_INT(formats[i]); + } break; - - /* GL_EXT_compiled_vertex_array */ case GL_ARRAY_ELEMENT_LOCK_FIRST_EXT: - CHECK_EXTENSION_I(EXT_compiled_vertex_array, pname); - *params = ctx->Array.LockFirst; - break; + CHECK_EXT1(EXT_compiled_vertex_array, "GetIntegerv"); + params[0] = ctx->Array.LockFirst; + break; case GL_ARRAY_ELEMENT_LOCK_COUNT_EXT: - CHECK_EXTENSION_I(EXT_compiled_vertex_array, pname); - *params = ctx->Array.LockCount; - break; - - /* GL_ARB_transpose_matrix */ + CHECK_EXT1(EXT_compiled_vertex_array, "GetIntegerv"); + params[0] = ctx->Array.LockCount; + break; case GL_TRANSPOSE_COLOR_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ColorMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = (GLint) tm[i]; - } + const GLfloat *matrix = ctx->ColorMatrixStack.Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[4]); + params[2] = IROUND(matrix[8]); + params[3] = IROUND(matrix[12]); + params[4] = IROUND(matrix[1]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[9]); + params[7] = IROUND(matrix[13]); + params[8] = IROUND(matrix[2]); + params[9] = IROUND(matrix[6]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[14]); + params[12] = IROUND(matrix[3]); + params[13] = IROUND(matrix[7]); + params[14] = IROUND(matrix[11]); + params[15] = IROUND(matrix[15]); } break; case GL_TRANSPOSE_MODELVIEW_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ModelviewMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = (GLint) tm[i]; - } + const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[4]); + params[2] = IROUND(matrix[8]); + params[3] = IROUND(matrix[12]); + params[4] = IROUND(matrix[1]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[9]); + params[7] = IROUND(matrix[13]); + params[8] = IROUND(matrix[2]); + params[9] = IROUND(matrix[6]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[14]); + params[12] = IROUND(matrix[3]); + params[13] = IROUND(matrix[7]); + params[14] = IROUND(matrix[11]); + params[15] = IROUND(matrix[15]); } break; case GL_TRANSPOSE_PROJECTION_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->ProjectionMatrixStack.Top->m); - for (i=0;i<16;i++) { - params[i] = (GLint) tm[i]; - } + const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[4]); + params[2] = IROUND(matrix[8]); + params[3] = IROUND(matrix[12]); + params[4] = IROUND(matrix[1]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[9]); + params[7] = IROUND(matrix[13]); + params[8] = IROUND(matrix[2]); + params[9] = IROUND(matrix[6]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[14]); + params[12] = IROUND(matrix[3]); + params[13] = IROUND(matrix[7]); + params[14] = IROUND(matrix[11]); + params[15] = IROUND(matrix[15]); } break; case GL_TRANSPOSE_TEXTURE_MATRIX_ARB: { - GLfloat tm[16]; - GLuint i; - _math_transposef(tm, ctx->TextureMatrixStack[texUnit].Top->m); - for (i=0;i<16;i++) { - params[i] = (GLint) tm[i]; - } + const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[4]); + params[2] = IROUND(matrix[8]); + params[3] = IROUND(matrix[12]); + params[4] = IROUND(matrix[1]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[9]); + params[7] = IROUND(matrix[13]); + params[8] = IROUND(matrix[2]); + params[9] = IROUND(matrix[6]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[14]); + params[12] = IROUND(matrix[3]); + params[13] = IROUND(matrix[7]); + params[14] = IROUND(matrix[11]); + params[15] = IROUND(matrix[15]); } break; - - /* GL_HP_occlusion_test */ - case GL_OCCLUSION_TEST_HP: - CHECK_EXTENSION_I(HP_occlusion_test, pname); - *params = (GLint) ctx->Depth.OcclusionTest; - break; - case GL_OCCLUSION_TEST_RESULT_HP: - CHECK_EXTENSION_I(HP_occlusion_test, pname); - if (ctx->Depth.OcclusionTest) - *params = (GLint) ctx->OcclusionResult; - else - *params = (GLint) ctx->OcclusionResultSaved; - /* reset flag now */ - ctx->OcclusionResult = GL_FALSE; - ctx->OcclusionResultSaved = GL_FALSE; - break; - - /* GL_SGIS_pixel_texture */ - case GL_PIXEL_TEXTURE_SGIS: - CHECK_EXTENSION_I(SGIS_pixel_texture, pname); - *params = (GLint) ctx->Pixel.PixelTextureEnabled; - break; - - /* GL_SGIX_pixel_texture */ - case GL_PIXEL_TEX_GEN_SGIX: - CHECK_EXTENSION_I(SGIX_pixel_texture, pname); - *params = (GLint) ctx->Pixel.PixelTextureEnabled; - break; - case GL_PIXEL_TEX_GEN_MODE_SGIX: - CHECK_EXTENSION_I(SGIX_pixel_texture, pname); - *params = (GLint) pixel_texgen_mode(ctx); - break; - - /* GL_SGI_color_matrix (also in 1.2 imaging) */ case GL_COLOR_MATRIX_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - for (i=0;i<16;i++) { - params[i] = (GLint) ctx->ColorMatrixStack.Top->m[i]; - } - break; + { + const GLfloat *matrix = ctx->ColorMatrixStack.Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[1]); + params[2] = IROUND(matrix[2]); + params[3] = IROUND(matrix[3]); + params[4] = IROUND(matrix[4]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[6]); + params[7] = IROUND(matrix[7]); + params[8] = IROUND(matrix[8]); + params[9] = IROUND(matrix[9]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[11]); + params[12] = IROUND(matrix[12]); + params[13] = IROUND(matrix[13]); + params[14] = IROUND(matrix[14]); + params[15] = IROUND(matrix[15]); + } + break; case GL_COLOR_MATRIX_STACK_DEPTH_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = ctx->ColorMatrixStack.Depth + 1; + params[0] = ctx->ColorMatrixStack.Depth + 1; break; case GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = MAX_COLOR_STACK_DEPTH; + params[0] = MAX_COLOR_STACK_DEPTH; break; case GL_POST_COLOR_MATRIX_RED_SCALE_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixScale[0]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[0]); break; case GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixScale[1]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[1]); break; case GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixScale[2]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[2]); break; case GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixScale[3]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixScale[3]); break; case GL_POST_COLOR_MATRIX_RED_BIAS_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixBias[0]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[0]); break; case GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixBias[1]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[1]); break; case GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixBias[2]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[2]); break; case GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI: - CHECK_EXTENSION_I(SGI_color_matrix, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixBias[3]; + params[0] = IROUND(ctx->Pixel.PostColorMatrixBias[3]); break; - - /* GL_EXT_convolution (also in 1.2 imaging) */ case GL_CONVOLUTION_1D_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.Convolution1DEnabled; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.Convolution1DEnabled); break; - case GL_CONVOLUTION_2D: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.Convolution2DEnabled; + case GL_CONVOLUTION_2D_EXT: + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.Convolution2DEnabled); break; - case GL_SEPARABLE_2D: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.Separable2DEnabled; + case GL_SEPARABLE_2D_EXT: + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.Separable2DEnabled); break; case GL_POST_CONVOLUTION_RED_SCALE_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionScale[0]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionScale[0]); break; case GL_POST_CONVOLUTION_GREEN_SCALE_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionScale[1]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionScale[1]); break; case GL_POST_CONVOLUTION_BLUE_SCALE_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionScale[2]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionScale[2]); break; case GL_POST_CONVOLUTION_ALPHA_SCALE_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionScale[3]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionScale[3]); break; case GL_POST_CONVOLUTION_RED_BIAS_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionBias[0]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionBias[0]); break; case GL_POST_CONVOLUTION_GREEN_BIAS_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionBias[1]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionBias[1]); break; case GL_POST_CONVOLUTION_BLUE_BIAS_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionBias[2]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionBias[2]); break; case GL_POST_CONVOLUTION_ALPHA_BIAS_EXT: - CHECK_EXTENSION_I(EXT_convolution, pname); - *params = (GLint) ctx->Pixel.PostConvolutionBias[2]; + CHECK_EXT1(EXT_convolution, "GetIntegerv"); + params[0] = IROUND(ctx->Pixel.PostConvolutionBias[3]); break; - - /* GL_EXT_histogram (also in 1.2 imaging) */ case GL_HISTOGRAM: - CHECK_EXTENSION_I(EXT_histogram, pname); - *params = (GLint) ctx->Pixel.HistogramEnabled; - break; - case GL_MINMAX: - CHECK_EXTENSION_I(EXT_histogram, pname); - *params = (GLint) ctx->Pixel.MinMaxEnabled; + CHECK_EXT1(EXT_histogram, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.HistogramEnabled); + break; + case GL_MINMAX: + CHECK_EXT1(EXT_histogram, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.MinMaxEnabled); break; - - /* GL_SGI_color_table (also in 1.2 imaging */ case GL_COLOR_TABLE_SGI: - CHECK_EXTENSION_I(SGI_color_table, pname); - *params = (GLint) ctx->Pixel.ColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.ColorTableEnabled); break; case GL_POST_CONVOLUTION_COLOR_TABLE_SGI: - CHECK_EXTENSION_I(SGI_color_table, pname); - *params = (GLint) ctx->Pixel.PostConvolutionColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.PostConvolutionColorTableEnabled); break; case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI: - CHECK_EXTENSION_I(SGI_color_table, pname); - *params = (GLint) ctx->Pixel.PostColorMatrixColorTableEnabled; + CHECK_EXT1(SGI_color_table, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Pixel.PostColorMatrixColorTableEnabled); break; - - /* GL_SGI_texture_color_table */ case GL_TEXTURE_COLOR_TABLE_SGI: - CHECK_EXTENSION_I(SGI_texture_color_table, pname); - *params = (GLint) textureUnit->ColorTableEnabled; + CHECK_EXT1(SGI_texture_color_table, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Texture.Unit[ctx->Texture.CurrentUnit].ColorTableEnabled); break; - - /* GL_EXT_secondary_color */ case GL_COLOR_SUM_EXT: - CHECK_EXTENSION_I(EXT_secondary_color, pname); - *params = (GLint) ctx->Fog.ColorSumEnabled; - break; + CHECK_EXT2(EXT_secondary_color, ARB_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Fog.ColorSumEnabled); + break; case GL_CURRENT_SECONDARY_COLOR_EXT: - CHECK_EXTENSION_I(EXT_secondary_color, pname); - FLUSH_CURRENT(ctx, 0); - params[0] = FLOAT_TO_INT( (ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]) ); - params[1] = FLOAT_TO_INT( (ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]) ); - params[2] = FLOAT_TO_INT( (ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]) ); - params[3] = FLOAT_TO_INT( (ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]) ); - break; + CHECK_EXT1(EXT_secondary_color, "GetIntegerv"); + { + FLUSH_CURRENT(ctx, 0); + params[0] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0]); + params[1] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1]); + params[2] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2]); + params[3] = FLOAT_TO_INT(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3]); + } + break; case GL_SECONDARY_COLOR_ARRAY_EXT: - CHECK_EXTENSION_I(EXT_secondary_color, pname); - *params = (GLint) ctx->Array.SecondaryColor.Enabled; + CHECK_EXT1(EXT_secondary_color, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Enabled); break; case GL_SECONDARY_COLOR_ARRAY_TYPE_EXT: - CHECK_EXTENSION_I(EXT_secondary_color, pname); - *params = (GLint) ctx->Array.SecondaryColor.Type; - break; + CHECK_EXT1(EXT_secondary_color, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->SecondaryColor.Type); + break; case GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_I(EXT_secondary_color, pname); - *params = (GLint) ctx->Array.SecondaryColor.Stride; - break; + CHECK_EXT1(EXT_secondary_color, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->SecondaryColor.Stride; + break; case GL_SECONDARY_COLOR_ARRAY_SIZE_EXT: - CHECK_EXTENSION_I(EXT_secondary_color, pname); - *params = (GLint) ctx->Array.SecondaryColor.Size; - break; - - /* GL_EXT_fog_coord */ + CHECK_EXT1(EXT_secondary_color, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->SecondaryColor.Size; + break; case GL_CURRENT_FOG_COORDINATE_EXT: - CHECK_EXTENSION_I(EXT_fog_coord, pname); + CHECK_EXT1(EXT_fog_coord, "GetIntegerv"); + { FLUSH_CURRENT(ctx, 0); - *params = (GLint) ctx->Current.Attrib[VERT_ATTRIB_FOG][0]; - break; + params[0] = IROUND(ctx->Current.Attrib[VERT_ATTRIB_FOG][0]); + } + break; case GL_FOG_COORDINATE_ARRAY_EXT: - CHECK_EXTENSION_I(EXT_fog_coord, pname); - *params = (GLint) ctx->Array.FogCoord.Enabled; + CHECK_EXT1(EXT_fog_coord, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->FogCoord.Enabled); break; case GL_FOG_COORDINATE_ARRAY_TYPE_EXT: - CHECK_EXTENSION_I(EXT_fog_coord, pname); - *params = (GLint) ctx->Array.FogCoord.Type; - break; - case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT: - CHECK_EXTENSION_I(EXT_fog_coord, pname); - *params = (GLint) ctx->Array.FogCoord.Stride; - break; - case GL_FOG_COORDINATE_SOURCE_EXT: - CHECK_EXTENSION_I(EXT_fog_coord, pname); - *params = (GLint) ctx->Fog.FogCoordinateSource; - break; - - /* GL_EXT_texture_lod_bias */ - case GL_MAX_TEXTURE_LOD_BIAS_EXT: - *params = (GLint) ctx->Const.MaxTextureLodBias; + CHECK_EXT1(EXT_fog_coord, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Array.ArrayObj->FogCoord.Type); + break; + case GL_FOG_COORDINATE_ARRAY_STRIDE_EXT: + CHECK_EXT1(EXT_fog_coord, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->FogCoord.Stride; + break; + case GL_FOG_COORDINATE_SOURCE_EXT: + CHECK_EXT1(EXT_fog_coord, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Fog.FogCoordinateSource); + break; + case GL_MAX_TEXTURE_LOD_BIAS_EXT: + CHECK_EXT1(EXT_texture_lod_bias, "GetIntegerv"); + params[0] = IROUND(ctx->Const.MaxTextureLodBias); break; - - /* GL_EXT_texture_filter_anisotropic */ case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: - CHECK_EXTENSION_I(EXT_texture_filter_anisotropic, pname); - *params = (GLint) ctx->Const.MaxTextureMaxAnisotropy; - break; - - /* GL_ARB_multisample */ + CHECK_EXT1(EXT_texture_filter_anisotropic, "GetIntegerv"); + params[0] = IROUND(ctx->Const.MaxTextureMaxAnisotropy); + break; case GL_MULTISAMPLE_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = (GLint) ctx->Multisample.Enabled; + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Multisample.Enabled); break; case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = (GLint) ctx->Multisample.SampleAlphaToCoverage; + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleAlphaToCoverage); break; case GL_SAMPLE_ALPHA_TO_ONE_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = (GLint) ctx->Multisample.SampleAlphaToOne; + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleAlphaToOne); break; case GL_SAMPLE_COVERAGE_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = (GLint) ctx->Multisample.SampleCoverage; + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleCoverage); break; case GL_SAMPLE_COVERAGE_VALUE_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = (GLint) ctx->Multisample.SampleCoverageValue; + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = IROUND(ctx->Multisample.SampleCoverageValue); break; case GL_SAMPLE_COVERAGE_INVERT_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = (GLint) ctx->Multisample.SampleCoverageInvert; + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Multisample.SampleCoverageInvert); break; case GL_SAMPLE_BUFFERS_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = 0; /* XXX fix someday */ + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = ctx->DrawBuffer->Visual.sampleBuffers; break; case GL_SAMPLES_ARB: - CHECK_EXTENSION_I(ARB_multisample, pname); - *params = 0; /* XXX fix someday */ + CHECK_EXT1(ARB_multisample, "GetIntegerv"); + params[0] = ctx->DrawBuffer->Visual.samples; break; - - /* GL_IBM_rasterpos_clip */ case GL_RASTER_POSITION_UNCLIPPED_IBM: - CHECK_EXTENSION_I(IBM_rasterpos_clip, pname); - *params = (GLint) ctx->Transform.RasterPositionUnclipped; + CHECK_EXT1(IBM_rasterpos_clip, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Transform.RasterPositionUnclipped); break; - - /* GL_NV_point_sprite */ case GL_POINT_SPRITE_NV: - CHECK_EXTENSION2_I(NV_point_sprite, ARB_point_sprite, pname); - *params = (GLint) ctx->Point.PointSprite; + CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Point.PointSprite); break; case GL_POINT_SPRITE_R_MODE_NV: - CHECK_EXTENSION_I(NV_point_sprite, pname); - *params = (GLint) ctx->Point.SpriteRMode; + CHECK_EXT1(NV_point_sprite, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Point.SpriteRMode); break; case GL_POINT_SPRITE_COORD_ORIGIN: - CHECK_EXTENSION_I(ARB_point_sprite, pname); - *params = (GLint) ctx->Point.SpriteOrigin; + CHECK_EXT2(NV_point_sprite, ARB_point_sprite, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Point.SpriteOrigin); break; - - /* GL_SGIS_generate_mipmap */ case GL_GENERATE_MIPMAP_HINT_SGIS: - CHECK_EXTENSION_I(SGIS_generate_mipmap, pname); - *params = (GLint) ctx->Hint.GenerateMipmap; - break; - -#if FEATURE_NV_vertex_program - case GL_VERTEX_PROGRAM_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = (GLint) ctx->VertexProgram.Enabled; - break; - case GL_VERTEX_PROGRAM_POINT_SIZE_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = (GLint) ctx->VertexProgram.PointSizeEnabled; - break; - case GL_VERTEX_PROGRAM_TWO_SIDE_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = (GLint) ctx->VertexProgram.TwoSideEnabled; - break; - case GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = ctx->Const.MaxProgramMatrixStackDepth; - break; - case GL_MAX_TRACK_MATRICES_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = ctx->Const.MaxProgramMatrices; - break; - case GL_CURRENT_MATRIX_STACK_DEPTH_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - *params = ctx->CurrentStack->Depth + 1; - break; - case GL_CURRENT_MATRIX_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - for (i = 0; i < 16; i++) - params[i] = (GLint) ctx->CurrentStack->Top->m[i]; + CHECK_EXT1(SGIS_generate_mipmap, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Hint.GenerateMipmap); break; case GL_VERTEX_PROGRAM_BINDING_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - if (ctx->VertexProgram.Current) - *params = (GLint) ctx->VertexProgram.Current->Base.Id; - else - *params = 0; - break; - case GL_PROGRAM_ERROR_POSITION_NV: - CHECK_EXTENSION2_I(NV_vertex_program, ARB_vertex_program, pname); - *params = (GLint) ctx->Program.ErrorPos; + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = (ctx->VertexProgram.Current ? ctx->VertexProgram.Current->Base.Id : 0); break; case GL_VERTEX_ATTRIB_ARRAY0_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[0].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY1_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[1].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY2_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[2].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY3_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[3].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[4].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY5_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[5].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY6_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[6].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY7_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[7].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY8_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[8].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY9_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[9].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY10_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[10].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY11_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[11].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY12_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[12].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY13_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[13].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY14_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[14].Enabled); + break; case GL_VERTEX_ATTRIB_ARRAY15_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_VERTEX_ATTRIB_ARRAY0_NV; - *params = (GLint) ctx->Array.VertexAttrib[n].Enabled; - } + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Array.ArrayObj->VertexAttrib[15].Enabled); break; case GL_MAP1_VERTEX_ATTRIB0_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[0]); + break; case GL_MAP1_VERTEX_ATTRIB1_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[1]); + break; case GL_MAP1_VERTEX_ATTRIB2_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[2]); + break; case GL_MAP1_VERTEX_ATTRIB3_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[3]); + break; case GL_MAP1_VERTEX_ATTRIB4_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[4]); + break; case GL_MAP1_VERTEX_ATTRIB5_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[5]); + break; case GL_MAP1_VERTEX_ATTRIB6_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[6]); + break; case GL_MAP1_VERTEX_ATTRIB7_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[7]); + break; case GL_MAP1_VERTEX_ATTRIB8_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[8]); + break; case GL_MAP1_VERTEX_ATTRIB9_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[9]); + break; case GL_MAP1_VERTEX_ATTRIB10_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[10]); + break; case GL_MAP1_VERTEX_ATTRIB11_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[11]); + break; case GL_MAP1_VERTEX_ATTRIB12_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[12]); + break; case GL_MAP1_VERTEX_ATTRIB13_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[13]); + break; case GL_MAP1_VERTEX_ATTRIB14_4_NV: + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[14]); + break; case GL_MAP1_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP1_VERTEX_ATTRIB0_4_NV; - *params = (GLint) ctx->Eval.Map1Attrib[n]; - } + CHECK_EXT1(NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Eval.Map1Attrib[15]); break; - case GL_MAP2_VERTEX_ATTRIB0_4_NV: - case GL_MAP2_VERTEX_ATTRIB1_4_NV: - case GL_MAP2_VERTEX_ATTRIB2_4_NV: - case GL_MAP2_VERTEX_ATTRIB3_4_NV: - case GL_MAP2_VERTEX_ATTRIB4_4_NV: - case GL_MAP2_VERTEX_ATTRIB5_4_NV: - case GL_MAP2_VERTEX_ATTRIB6_4_NV: - case GL_MAP2_VERTEX_ATTRIB7_4_NV: - case GL_MAP2_VERTEX_ATTRIB8_4_NV: - case GL_MAP2_VERTEX_ATTRIB9_4_NV: - case GL_MAP2_VERTEX_ATTRIB10_4_NV: - case GL_MAP2_VERTEX_ATTRIB11_4_NV: - case GL_MAP2_VERTEX_ATTRIB12_4_NV: - case GL_MAP2_VERTEX_ATTRIB13_4_NV: - case GL_MAP2_VERTEX_ATTRIB14_4_NV: - case GL_MAP2_VERTEX_ATTRIB15_4_NV: - CHECK_EXTENSION_I(NV_vertex_program, pname); - { - GLuint n = (GLuint) pname - GL_MAP2_VERTEX_ATTRIB0_4_NV; - *params = (GLint) ctx->Eval.Map2Attrib[n]; - } - break; -#endif /* FEATURE_NV_vertex_program */ - -#if FEATURE_NV_fragment_program case GL_FRAGMENT_PROGRAM_NV: - CHECK_EXTENSION_I(NV_fragment_program, pname); - *params = (GLint) ctx->FragmentProgram.Enabled; - break; - case GL_MAX_TEXTURE_COORDS_NV: - CHECK_EXTENSION_I(NV_fragment_program, pname); - *params = (GLint) ctx->Const.MaxTextureCoordUnits; - break; - case GL_MAX_TEXTURE_IMAGE_UNITS_NV: - CHECK_EXTENSION_I(NV_fragment_program, pname); - *params = (GLint) ctx->Const.MaxTextureImageUnits; + CHECK_EXT1(NV_fragment_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.Enabled); break; case GL_FRAGMENT_PROGRAM_BINDING_NV: - CHECK_EXTENSION_I(NV_fragment_program, pname); - if (ctx->FragmentProgram.Current) - *params = (GLint) ctx->FragmentProgram.Current->Base.Id; - else - *params = 0; + CHECK_EXT1(NV_fragment_program, "GetIntegerv"); + params[0] = ctx->FragmentProgram.Current ? ctx->FragmentProgram.Current->Base.Id : 0; break; case GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV: - CHECK_EXTENSION_I(NV_fragment_program, pname); - *params = MAX_NV_FRAGMENT_PROGRAM_PARAMS; + CHECK_EXT1(NV_fragment_program, "GetIntegerv"); + params[0] = MAX_NV_FRAGMENT_PROGRAM_PARAMS; break; -#endif /* FEATURE_NV_fragment_program */ - - /* GL_NV_texture_rectangle */ case GL_TEXTURE_RECTANGLE_NV: - CHECK_EXTENSION_I(NV_texture_rectangle, pname); - *params = (GLint) _mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV); + CHECK_EXT1(NV_texture_rectangle, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV)); break; case GL_TEXTURE_BINDING_RECTANGLE_NV: - CHECK_EXTENSION_I(NV_texture_rectangle, pname); - *params = (GLint) textureUnit->CurrentRect->Name; + CHECK_EXT1(NV_texture_rectangle, "GetIntegerv"); + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name; break; case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV: - CHECK_EXTENSION_I(NV_texture_rectangle, pname); - *params = (GLint) ctx->Const.MaxTextureRectSize; + CHECK_EXT1(NV_texture_rectangle, "GetIntegerv"); + params[0] = ctx->Const.MaxTextureRectSize; break; - - /* GL_EXT_stencil_two_side */ case GL_STENCIL_TEST_TWO_SIDE_EXT: - CHECK_EXTENSION_I(EXT_stencil_two_side, pname); - *params = (GLint) ctx->Stencil.TestTwoSide; + CHECK_EXT1(EXT_stencil_two_side, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Stencil.TestTwoSide); break; case GL_ACTIVE_STENCIL_FACE_EXT: - CHECK_EXTENSION_I(EXT_stencil_two_side, pname); - *params = (GLint) (ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT); + CHECK_EXT1(EXT_stencil_two_side, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Stencil.ActiveFace ? GL_BACK : GL_FRONT); break; - - /* GL_NV_light_max_exponent */ case GL_MAX_SHININESS_NV: - *params = (GLint) ctx->Const.MaxShininess; + CHECK_EXT1(NV_light_max_exponent, "GetIntegerv"); + params[0] = IROUND(ctx->Const.MaxShininess); break; case GL_MAX_SPOT_EXPONENT_NV: - *params = (GLint) ctx->Const.MaxSpotExponent; + CHECK_EXT1(NV_light_max_exponent, "GetIntegerv"); + params[0] = IROUND(ctx->Const.MaxSpotExponent); break; - -#if FEATURE_ARB_vertex_buffer_object case GL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.ArrayBufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayBufferObj->Name; break; case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.Vertex.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->Vertex.BufferObj->Name; break; case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.Normal.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->Normal.BufferObj->Name; break; case GL_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.Color.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->Color.BufferObj->Name; break; case GL_INDEX_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.Index.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->Index.BufferObj->Name; break; case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.TexCoord[clientUnit].BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name; break; case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.EdgeFlag.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->EdgeFlag.BufferObj->Name; break; case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.SecondaryColor.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->SecondaryColor.BufferObj->Name; break; case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.FogCoord.BufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ArrayObj->FogCoord.BufferObj->Name; break; - /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */ case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: - CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname); - *params = (GLint) ctx->Array.ElementArrayBufferObj->Name; + CHECK_EXT1(ARB_vertex_buffer_object, "GetIntegerv"); + params[0] = ctx->Array.ElementArrayBufferObj->Name; break; -#endif -#if FEATURE_EXT_pixel_buffer_object case GL_PIXEL_PACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_I(EXT_pixel_buffer_object, pname); - *params = (GLint) ctx->Pack.BufferObj->Name; + CHECK_EXT1(EXT_pixel_buffer_object, "GetIntegerv"); + params[0] = ctx->Pack.BufferObj->Name; break; case GL_PIXEL_UNPACK_BUFFER_BINDING_EXT: - CHECK_EXTENSION_I(EXT_pixel_buffer_object, pname); - *params = (GLint) ctx->Unpack.BufferObj->Name; + CHECK_EXT1(EXT_pixel_buffer_object, "GetIntegerv"); + params[0] = ctx->Unpack.BufferObj->Name; break; -#endif - -#if FEATURE_ARB_vertex_program - /* GL_NV_vertex_program and GL_ARB_fragment_program define others */ - case GL_MAX_VERTEX_ATTRIBS_ARB: - CHECK_EXTENSION_I(ARB_vertex_program, pname); - *params = (GLint) ctx->Const.MaxVertexProgramAttribs; + case GL_VERTEX_PROGRAM_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.Enabled); break; -#endif - -#if FEATURE_ARB_fragment_program - case GL_FRAGMENT_PROGRAM_ARB: - CHECK_EXTENSION_I(ARB_fragment_program, pname); - *params = ctx->FragmentProgram.Enabled; + case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.PointSizeEnabled); break; - case GL_TRANSPOSE_CURRENT_MATRIX_ARB: - CHECK_EXTENSION_I(ARB_fragment_program, pname); - params[0] = (GLint) ctx->CurrentStack->Top->m[0]; - params[1] = (GLint) ctx->CurrentStack->Top->m[4]; - params[2] = (GLint) ctx->CurrentStack->Top->m[8]; - params[3] = (GLint) ctx->CurrentStack->Top->m[12]; - params[4] = (GLint) ctx->CurrentStack->Top->m[1]; - params[5] = (GLint) ctx->CurrentStack->Top->m[5]; - params[6] = (GLint) ctx->CurrentStack->Top->m[9]; - params[7] = (GLint) ctx->CurrentStack->Top->m[13]; - params[8] = (GLint) ctx->CurrentStack->Top->m[2]; - params[9] = (GLint) ctx->CurrentStack->Top->m[6]; - params[10] = (GLint) ctx->CurrentStack->Top->m[10]; - params[11] = (GLint) ctx->CurrentStack->Top->m[14]; - params[12] = (GLint) ctx->CurrentStack->Top->m[3]; - params[13] = (GLint) ctx->CurrentStack->Top->m[7]; - params[14] = (GLint) ctx->CurrentStack->Top->m[11]; - params[15] = (GLint) ctx->CurrentStack->Top->m[15]; + case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: + CHECK_EXT2(ARB_vertex_program, NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.TwoSideEnabled); break; - /* Remaining ARB_fragment_program queries alias with - * the GL_NV_fragment_program queries. - */ -#endif - - /* GL_EXT_depth_bounds_test */ - case GL_DEPTH_BOUNDS_TEST_EXT: - CHECK_EXTENSION_I(EXT_depth_bounds_test, pname); - params[0] = ctx->Depth.BoundsTest; + case GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetIntegerv"); + params[0] = ctx->Const.MaxProgramMatrixStackDepth; break; - case GL_DEPTH_BOUNDS_EXT: - CHECK_EXTENSION_I(EXT_depth_bounds_test, pname); - params[0] = (GLint) ctx->Depth.BoundsMin; - params[1] = (GLint) ctx->Depth.BoundsMax; + case GL_MAX_PROGRAM_MATRICES_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetIntegerv"); + params[0] = ctx->Const.MaxProgramMatrices; break; - -#if FEATURE_MESA_program_debug - case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_I(MESA_program_debug, pname); - *params = (GLint) ctx->FragmentProgram.CallbackEnabled; + case GL_CURRENT_MATRIX_STACK_DEPTH_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_vertex_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->CurrentStack->Depth + 1); break; - case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION_I(MESA_program_debug, pname); - *params = (GLint) ctx->VertexProgram.CallbackEnabled; - break; - case GL_FRAGMENT_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_I(MESA_program_debug, pname); - *params = (GLint) ctx->FragmentProgram.CurrentPosition; - break; - case GL_VERTEX_PROGRAM_POSITION_MESA: - CHECK_EXTENSION_I(MESA_program_debug, pname); - *params = (GLint) ctx->VertexProgram.CurrentPosition; - break; -#endif - - case GL_MAX_DRAW_BUFFERS_ARB: - CHECK_EXTENSION_I(ARB_draw_buffers, pname); - *params = ctx->Const.MaxDrawBuffers; - break; - case GL_DRAW_BUFFER0_ARB: - case GL_DRAW_BUFFER1_ARB: - case GL_DRAW_BUFFER2_ARB: - case GL_DRAW_BUFFER3_ARB: - case GL_DRAW_BUFFER4_ARB: - case GL_DRAW_BUFFER5_ARB: - case GL_DRAW_BUFFER6_ARB: - case GL_DRAW_BUFFER7_ARB: - case GL_DRAW_BUFFER8_ARB: - case GL_DRAW_BUFFER9_ARB: - case GL_DRAW_BUFFER10_ARB: - case GL_DRAW_BUFFER11_ARB: - case GL_DRAW_BUFFER12_ARB: - case GL_DRAW_BUFFER13_ARB: - case GL_DRAW_BUFFER14_ARB: - case GL_DRAW_BUFFER15_ARB: - CHECK_EXTENSION_I(ARB_draw_buffers, pname); + case GL_CURRENT_MATRIX_ARB: + CHECK_EXT3(ARB_vertex_program, ARB_fragment_program, NV_fragment_program, "GetIntegerv"); { - GLuint i = pname - GL_DRAW_BUFFER0_ARB; - if (i >= ctx->Const.MaxDrawBuffers) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetIntegerv(GL_DRAW_BUFFERx_ARB)"); - return; - } - *params = (GLint) ctx->Color.DrawBuffer[i]; + const GLfloat *matrix = ctx->CurrentStack->Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[1]); + params[2] = IROUND(matrix[2]); + params[3] = IROUND(matrix[3]); + params[4] = IROUND(matrix[4]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[6]); + params[7] = IROUND(matrix[7]); + params[8] = IROUND(matrix[8]); + params[9] = IROUND(matrix[9]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[11]); + params[12] = IROUND(matrix[12]); + params[13] = IROUND(matrix[13]); + params[14] = IROUND(matrix[14]); + params[15] = IROUND(matrix[15]); + } + break; + case GL_TRANSPOSE_CURRENT_MATRIX_ARB: + CHECK_EXT2(ARB_vertex_program, ARB_fragment_program, "GetIntegerv"); + { + const GLfloat *matrix = ctx->CurrentStack->Top->m; + params[0] = IROUND(matrix[0]); + params[1] = IROUND(matrix[4]); + params[2] = IROUND(matrix[8]); + params[3] = IROUND(matrix[12]); + params[4] = IROUND(matrix[1]); + params[5] = IROUND(matrix[5]); + params[6] = IROUND(matrix[9]); + params[7] = IROUND(matrix[13]); + params[8] = IROUND(matrix[2]); + params[9] = IROUND(matrix[6]); + params[10] = IROUND(matrix[10]); + params[11] = IROUND(matrix[14]); + params[12] = IROUND(matrix[3]); + params[13] = IROUND(matrix[7]); + params[14] = IROUND(matrix[11]); + params[15] = IROUND(matrix[15]); + } + break; + case GL_MAX_VERTEX_ATTRIBS_ARB: + CHECK_EXT1(ARB_vertex_program, "GetIntegerv"); + params[0] = ctx->Const.VertexProgram.MaxAttribs; + break; + case GL_PROGRAM_ERROR_POSITION_ARB: + CHECK_EXT4(NV_vertex_program, ARB_vertex_program, NV_fragment_program, ARB_fragment_program, "GetIntegerv"); + params[0] = ctx->Program.ErrorPos; + break; + case GL_FRAGMENT_PROGRAM_ARB: + CHECK_EXT1(ARB_fragment_program, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.Enabled); + break; + case GL_MAX_TEXTURE_COORDS_ARB: + CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetIntegerv"); + params[0] = ctx->Const.MaxTextureCoordUnits; + break; + case GL_MAX_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT2(ARB_fragment_program, NV_fragment_program, "GetIntegerv"); + params[0] = ctx->Const.MaxTextureImageUnits; + break; + case GL_DEPTH_BOUNDS_TEST_EXT: + CHECK_EXT1(EXT_depth_bounds_test, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->Depth.BoundsTest); + break; + case GL_DEPTH_BOUNDS_EXT: + CHECK_EXT1(EXT_depth_bounds_test, "GetIntegerv"); + params[0] = IROUND(ctx->Depth.BoundsMin); + params[1] = IROUND(ctx->Depth.BoundsMax); + break; + case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: + CHECK_EXT1(MESA_program_debug, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.CallbackEnabled); + break; + case GL_VERTEX_PROGRAM_CALLBACK_MESA: + CHECK_EXT1(MESA_program_debug, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.CallbackEnabled); + break; + case GL_FRAGMENT_PROGRAM_POSITION_MESA: + CHECK_EXT1(MESA_program_debug, "GetIntegerv"); + params[0] = ctx->FragmentProgram.CurrentPosition; + break; + case GL_VERTEX_PROGRAM_POSITION_MESA: + CHECK_EXT1(MESA_program_debug, "GetIntegerv"); + params[0] = ctx->VertexProgram.CurrentPosition; + break; + case GL_MAX_DRAW_BUFFERS_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetIntegerv"); + params[0] = ctx->Const.MaxDrawBuffers; + break; + case GL_DRAW_BUFFER0_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->DrawBuffer->ColorDrawBuffer[0]); + break; + case GL_DRAW_BUFFER1_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetIntegerv"); + { + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[1]; + params[0] = ENUM_TO_INT(buffer); + } + break; + case GL_DRAW_BUFFER2_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetIntegerv"); + { + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[2]; + params[0] = ENUM_TO_INT(buffer); + } + break; + case GL_DRAW_BUFFER3_ARB: + CHECK_EXT1(ARB_draw_buffers, "GetIntegerv"); + { + GLenum buffer; + if (pname - GL_DRAW_BUFFER0_ARB >= ctx->Const.MaxDrawBuffers) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGet(GL_DRAW_BUFFERx_ARB)"); + return; + } + buffer = ctx->DrawBuffer->ColorDrawBuffer[3]; + params[0] = ENUM_TO_INT(buffer); } break; - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - *params = ctx->Const.ColorReadType; - return; + CHECK_EXT1(OES_read_format, "GetIntegerv"); + params[0] = ctx->Const.ColorReadType; + break; case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - *params = ctx->Const.ColorReadFormat; - return; - -#if FEATURE_ATI_fragment_shader + CHECK_EXT1(OES_read_format, "GetIntegerv"); + params[0] = ctx->Const.ColorReadFormat; + break; case GL_NUM_FRAGMENT_REGISTERS_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = 6; - break; + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = 6; + break; case GL_NUM_FRAGMENT_CONSTANTS_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = 8; - break; + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = 8; + break; case GL_NUM_PASSES_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = 2; - break; + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = 2; + break; case GL_NUM_INSTRUCTIONS_PER_PASS_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = 8; - break; + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = 8; + break; case GL_NUM_INSTRUCTIONS_TOTAL_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = 16; - break; + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = 16; + break; case GL_COLOR_ALPHA_PAIRING_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = GL_TRUE; - break; + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = BOOLEAN_TO_INT(GL_TRUE); + break; case GL_NUM_LOOPBACK_COMPONENTS_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = 3; - break; + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = 3; + break; case GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI: - CHECK_EXTENSION_I(ATI_fragment_shader, pname); - *params = 3; - break; -#endif + CHECK_EXT1(ATI_fragment_shader, "GetIntegerv"); + params[0] = 3; + break; + case GL_STENCIL_BACK_FUNC: + params[0] = ENUM_TO_INT(ctx->Stencil.Function[1]); + break; + case GL_STENCIL_BACK_VALUE_MASK: + params[0] = ctx->Stencil.ValueMask[1]; + break; + case GL_STENCIL_BACK_WRITEMASK: + params[0] = ctx->Stencil.WriteMask[1]; + break; + case GL_STENCIL_BACK_REF: + params[0] = ctx->Stencil.Ref[1]; + break; + case GL_STENCIL_BACK_FAIL: + params[0] = ENUM_TO_INT(ctx->Stencil.FailFunc[1]); + break; + case GL_STENCIL_BACK_PASS_DEPTH_FAIL: + params[0] = ENUM_TO_INT(ctx->Stencil.ZFailFunc[1]); + break; + case GL_STENCIL_BACK_PASS_DEPTH_PASS: + params[0] = ENUM_TO_INT(ctx->Stencil.ZPassFunc[1]); + break; + case GL_FRAMEBUFFER_BINDING_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv"); + params[0] = ctx->DrawBuffer->Name; + break; + case GL_RENDERBUFFER_BINDING_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv"); + params[0] = ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0; + break; + case GL_MAX_COLOR_ATTACHMENTS_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv"); + params[0] = ctx->Const.MaxColorAttachments; + break; + case GL_MAX_RENDERBUFFER_SIZE_EXT: + CHECK_EXT1(EXT_framebuffer_object, "GetIntegerv"); + params[0] = ctx->Const.MaxRenderbufferSize; + break; + case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_fragment_shader, "GetIntegerv"); + params[0] = ctx->Const.FragmentProgram.MaxUniformComponents; + break; + case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: + CHECK_EXT1(ARB_fragment_shader, "GetIntegerv"); + params[0] = ENUM_TO_INT(ctx->Hint.FragmentShaderDerivative); + break; + case GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetIntegerv"); + params[0] = ctx->Const.VertexProgram.MaxUniformComponents; + break; + case GL_MAX_VARYING_FLOATS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetIntegerv"); + params[0] = ctx->Const.MaxVaryingFloats; + break; + case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetIntegerv"); + params[0] = ctx->Const.MaxVertexTextureImageUnits; + break; + case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_vertex_shader, "GetIntegerv"); + params[0] = MAX_COMBINED_TEXTURE_IMAGE_UNITS; + break; default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetIntegerv(pname=0x%x)", pname); } } -/** - * Get the address of a selected pointer. - * - * \param pname array or buffer to be returned. - * \param params will hold the pointer speficifed by \p pname. - * - * \sa glGetPointerv(). - * - * Tries to get the specified pointer via dd_function_table::GetPointerv, - * otherwise gets the specified pointer from the current context. - */ void GLAPIENTRY -_mesa_GetPointerv( GLenum pname, GLvoid **params ) +_mesa_GetDoublev( GLenum pname, GLdouble *params ) { - GET_CURRENT_CONTEXT(ctx); - const GLuint clientUnit = ctx->Array.ActiveTexture; - ASSERT_OUTSIDE_BEGIN_END(ctx); + const GLfloat magic = -1234.5F; + GLfloat values[16]; + GLuint i; if (!params) return; - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname)); + /* Init temp array to magic numbers so we can figure out how many values + * are returned by the GetFloatv() call. + */ + for (i = 0; i < 16; i++) + values[i] = magic; - if (ctx->Driver.GetPointerv - && (*ctx->Driver.GetPointerv)(ctx, pname, params)) - return; - - switch (pname) { - case GL_VERTEX_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.Vertex.Ptr; - break; - case GL_NORMAL_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.Normal.Ptr; - break; - case GL_COLOR_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.Color.Ptr; - break; - case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: - *params = (GLvoid *) ctx->Array.SecondaryColor.Ptr; - break; - case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: - *params = (GLvoid *) ctx->Array.FogCoord.Ptr; - break; - case GL_INDEX_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.Index.Ptr; - break; - case GL_TEXTURE_COORD_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.TexCoord[clientUnit].Ptr; - break; - case GL_EDGE_FLAG_ARRAY_POINTER: - *params = (GLvoid *) ctx->Array.EdgeFlag.Ptr; - break; - case GL_FEEDBACK_BUFFER_POINTER: - *params = ctx->Feedback.Buffer; - break; - case GL_SELECTION_BUFFER_POINTER: - *params = ctx->Select.Buffer; - break; -#if FEATURE_MESA_program_debug - case GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = *(GLvoid **) &ctx->FragmentProgram.Callback; - break; - case GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = ctx->FragmentProgram.CallbackData; - break; - case GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = *(GLvoid **) &ctx->VertexProgram.Callback; - break; - case GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = ctx->VertexProgram.CallbackData; - break; -#endif - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); - return; - } + _mesa_GetFloatv(pname, values); + + for (i = 0; i < 16 && values[i] != magic; i++) + params[i] = (GLdouble) values[i]; } - -/** - * Get a string describing the current GL connection. - * - * \param name name symbolic constant. - * - * \sa glGetString(). - * - * Tries to get the string from dd_function_table::GetString, otherwise returns - * the hardcoded strings. - */ -const GLubyte * GLAPIENTRY -_mesa_GetString( GLenum name ) -{ - GET_CURRENT_CONTEXT(ctx); - static const char *vendor = "Brian Paul"; - static const char *renderer = "Mesa"; - static const char *version_1_2 = "1.2 Mesa " MESA_VERSION_STRING; - static const char *version_1_3 = "1.3 Mesa " MESA_VERSION_STRING; - static const char *version_1_4 = "1.4 Mesa " MESA_VERSION_STRING; - static const char *version_1_5 = "1.5 Mesa " MESA_VERSION_STRING; - static const char *version_2_0 = "1.5 Mesa " MESA_VERSION_STRING;/*XXX FIX*/ - - ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); - - /* this is a required driver function */ - assert(ctx->Driver.GetString); - { - const GLubyte *str = (*ctx->Driver.GetString)(ctx, name); - if (str) - return str; - - switch (name) { - case GL_VENDOR: - return (const GLubyte *) vendor; - case GL_RENDERER: - return (const GLubyte *) renderer; - case GL_VERSION: - if (ctx->Extensions.ARB_multisample && - ctx->Extensions.ARB_multitexture && - ctx->Extensions.ARB_texture_border_clamp && - ctx->Extensions.ARB_texture_compression && - ctx->Extensions.ARB_texture_cube_map && - ctx->Extensions.EXT_texture_env_add && - ctx->Extensions.ARB_texture_env_combine && - ctx->Extensions.ARB_texture_env_dot3) { - if (ctx->Extensions.ARB_depth_texture && - ctx->Extensions.ARB_shadow && - ctx->Extensions.ARB_texture_env_crossbar && - ctx->Extensions.ARB_texture_mirrored_repeat && - ctx->Extensions.ARB_window_pos && - ctx->Extensions.EXT_blend_color && - ctx->Extensions.EXT_blend_func_separate && - ctx->Extensions.EXT_blend_logic_op && - ctx->Extensions.EXT_blend_minmax && - ctx->Extensions.EXT_blend_subtract && - ctx->Extensions.EXT_fog_coord && - ctx->Extensions.EXT_multi_draw_arrays && - ctx->Extensions.EXT_point_parameters && /*aka ARB*/ - ctx->Extensions.EXT_secondary_color && - ctx->Extensions.EXT_stencil_wrap && - ctx->Extensions.EXT_texture_lod_bias && - ctx->Extensions.SGIS_generate_mipmap) { - if (ctx->Extensions.ARB_occlusion_query && - ctx->Extensions.ARB_vertex_buffer_object && - ctx->Extensions.EXT_shadow_funcs) { - if (ctx->Extensions.ARB_draw_buffers && - ctx->Extensions.ARB_point_sprite && - ctx->Extensions.ARB_texture_non_power_of_two && - ctx->Extensions.EXT_stencil_two_side) { - return (const GLubyte *) version_2_0; - } - else { - return (const GLubyte *) version_1_5; - } - } - else { - return (const GLubyte *) version_1_4; - } - } - else { - return (const GLubyte *) version_1_3; - } - } - else { - return (const GLubyte *) version_1_2; - } - case GL_EXTENSIONS: - if (!ctx->Extensions.String) - ctx->Extensions.String = _mesa_make_extension_string(ctx); - return (const GLubyte *) ctx->Extensions.String; -#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program || \ - FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program - case GL_PROGRAM_ERROR_STRING_NV: - if (ctx->Extensions.NV_fragment_program || - ctx->Extensions.ARB_fragment_program || - ctx->Extensions.NV_vertex_program || - ctx->Extensions.ARB_vertex_program) { - return (const GLubyte *) ctx->Program.ErrorString; - } - /* FALL-THROUGH */ -#endif - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); - return (const GLubyte *) 0; - } - } -} - - -/** - * Execute a glGetError() command. - * - * \return error number. - * - * Returns __GLcontextRec::ErrorValue. - */ -GLenum GLAPIENTRY -_mesa_GetError( void ) -{ - GET_CURRENT_CONTEXT(ctx); - GLenum e = ctx->ErrorValue; - ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); - - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e)); - - ctx->ErrorValue = (GLenum) GL_NO_ERROR; - return e; -} diff --git a/src/kits/opengl/mesa/main/getstring.c b/src/kits/opengl/mesa/main/getstring.c new file mode 100644 index 0000000000..f033ddc895 --- /dev/null +++ b/src/kits/opengl/mesa/main/getstring.c @@ -0,0 +1,287 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.2 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + + +#include "glheader.h" +#include "colormac.h" +#include "context.h" +#include "get.h" +#include "version.h" +#include "enums.h" +#include "extensions.h" + + +/** + * Query string-valued state. The return value should _not_ be freed by + * the caller. + * + * \param name the state variable to query. + * + * \sa glGetString(). + * + * Tries to get the string from dd_function_table::GetString, otherwise returns + * the hardcoded strings. + */ +const GLubyte * GLAPIENTRY +_mesa_GetString( GLenum name ) +{ + GET_CURRENT_CONTEXT(ctx); + static const char *vendor = "Brian Paul"; + static const char *renderer = "Mesa"; + static const char *version_1_2 = "1.2 Mesa " MESA_VERSION_STRING; + static const char *version_1_3 = "1.3 Mesa " MESA_VERSION_STRING; + static const char *version_1_4 = "1.4 Mesa " MESA_VERSION_STRING; + static const char *version_1_5 = "1.5 Mesa " MESA_VERSION_STRING; + static const char *version_2_0 = "1.5 Mesa " MESA_VERSION_STRING; + static const char *version_2_1 = "1.5 Mesa " MESA_VERSION_STRING; + +#if FEATURE_ARB_shading_language_100 + static const char *sl_version_110 = "1.10 Mesa " MESA_VERSION_STRING; +#endif + + if (!ctx) + return NULL; + + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL); + + /* this is a required driver function */ + assert(ctx->Driver.GetString); + { + /* Give the driver the chance to handle this query */ + const GLubyte *str = (*ctx->Driver.GetString)(ctx, name); + if (str) + return str; + } + + switch (name) { + case GL_VENDOR: + return (const GLubyte *) vendor; + case GL_RENDERER: + return (const GLubyte *) renderer; + case GL_VERSION: + if (ctx->Extensions.ARB_multisample && + ctx->Extensions.ARB_multitexture && + ctx->Extensions.ARB_texture_border_clamp && + ctx->Extensions.ARB_texture_compression && + ctx->Extensions.ARB_texture_cube_map && + ctx->Extensions.EXT_texture_env_add && + ctx->Extensions.ARB_texture_env_combine && + ctx->Extensions.ARB_texture_env_dot3) { + if (ctx->Extensions.ARB_depth_texture && + ctx->Extensions.ARB_shadow && + ctx->Extensions.ARB_texture_env_crossbar && + ctx->Extensions.ARB_texture_mirrored_repeat && + ctx->Extensions.ARB_window_pos && + ctx->Extensions.EXT_blend_color && + ctx->Extensions.EXT_blend_func_separate && + ctx->Extensions.EXT_blend_logic_op && + ctx->Extensions.EXT_blend_minmax && + ctx->Extensions.EXT_blend_subtract && + ctx->Extensions.EXT_fog_coord && + ctx->Extensions.EXT_multi_draw_arrays && + ctx->Extensions.EXT_point_parameters && /*aka ARB*/ + ctx->Extensions.EXT_secondary_color && + ctx->Extensions.EXT_stencil_wrap && + ctx->Extensions.EXT_texture_lod_bias && + ctx->Extensions.SGIS_generate_mipmap) { + if (ctx->Extensions.ARB_occlusion_query && + ctx->Extensions.ARB_vertex_buffer_object && + ctx->Extensions.EXT_shadow_funcs) { + if (ctx->Extensions.ARB_draw_buffers && + ctx->Extensions.ARB_point_sprite && + ctx->Extensions.ARB_shader_objects && + ctx->Extensions.ARB_vertex_shader && + ctx->Extensions.ARB_fragment_shader && + ctx->Extensions.ARB_texture_non_power_of_two) { + if (ctx->Extensions.ARB_shading_language_120 && + ctx->Extensions.EXT_pixel_buffer_object && + ctx->Extensions.EXT_texture_sRGB) { + return (const GLubyte *) version_2_1; + } + else { + return (const GLubyte *) version_2_0; + } + } + else { + return (const GLubyte *) version_1_5; + } + } + else { + return (const GLubyte *) version_1_4; + } + } + else { + return (const GLubyte *) version_1_3; + } + } + else { + return (const GLubyte *) version_1_2; + } + case GL_EXTENSIONS: + if (!ctx->Extensions.String) + ctx->Extensions.String = _mesa_make_extension_string(ctx); + return (const GLubyte *) ctx->Extensions.String; +#if FEATURE_ARB_shading_language_100 + case GL_SHADING_LANGUAGE_VERSION_ARB: + if (ctx->Extensions.ARB_shading_language_100) + return (const GLubyte *) sl_version_110; + goto error; +#endif +#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program || \ + FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program + case GL_PROGRAM_ERROR_STRING_NV: + if (ctx->Extensions.NV_fragment_program || + ctx->Extensions.ARB_fragment_program || + ctx->Extensions.NV_vertex_program || + ctx->Extensions.ARB_vertex_program) { + return (const GLubyte *) ctx->Program.ErrorString; + } + /* FALL-THROUGH */ +#endif +#if FEATURE_ARB_shading_language_100 + error: +#endif + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); + return (const GLubyte *) 0; + } +} + + +/** + * Return pointer-valued state, such as a vertex array pointer. + * + * \param pname names state to be queried + * \param params returns the pointer value + * + * \sa glGetPointerv(). + * + * Tries to get the specified pointer via dd_function_table::GetPointerv, + * otherwise gets the specified pointer from the current context. + */ +void GLAPIENTRY +_mesa_GetPointerv( GLenum pname, GLvoid **params ) +{ + GET_CURRENT_CONTEXT(ctx); + const GLuint clientUnit = ctx->Array.ActiveTexture; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (!params) + return; + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname)); + + if (ctx->Driver.GetPointerv + && (*ctx->Driver.GetPointerv)(ctx, pname, params)) + return; + + switch (pname) { + case GL_VERTEX_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Vertex.Ptr; + break; + case GL_NORMAL_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Normal.Ptr; + break; + case GL_COLOR_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Color.Ptr; + break; + case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: + *params = (GLvoid *) ctx->Array.ArrayObj->SecondaryColor.Ptr; + break; + case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: + *params = (GLvoid *) ctx->Array.ArrayObj->FogCoord.Ptr; + break; + case GL_INDEX_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Index.Ptr; + break; + case GL_TEXTURE_COORD_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->TexCoord[clientUnit].Ptr; + break; + case GL_EDGE_FLAG_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->EdgeFlag.Ptr; + break; + case GL_FEEDBACK_BUFFER_POINTER: + *params = ctx->Feedback.Buffer; + break; + case GL_SELECTION_BUFFER_POINTER: + *params = ctx->Select.Buffer; + break; +#if FEATURE_MESA_program_debug + case GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA: + if (!ctx->Extensions.MESA_program_debug) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); + return; + } + *params = *(GLvoid **) &ctx->FragmentProgram.Callback; + break; + case GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA: + if (!ctx->Extensions.MESA_program_debug) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); + return; + } + *params = ctx->FragmentProgram.CallbackData; + break; + case GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA: + if (!ctx->Extensions.MESA_program_debug) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); + return; + } + *params = *(GLvoid **) &ctx->VertexProgram.Callback; + break; + case GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA: + if (!ctx->Extensions.MESA_program_debug) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); + return; + } + *params = ctx->VertexProgram.CallbackData; + break; +#endif + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); + return; + } +} + + +/** + * Returns the current GL error code, or GL_NO_ERROR. + * \return current error code + * + * Returns __GLcontextRec::ErrorValue. + */ +GLenum GLAPIENTRY +_mesa_GetError( void ) +{ + GET_CURRENT_CONTEXT(ctx); + GLenum e = ctx->ErrorValue; + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e)); + + ctx->ErrorValue = (GLenum) GL_NO_ERROR; + return e; +} diff --git a/src/kits/opengl/mesa/main/glheader.h b/src/kits/opengl/mesa/main/glheader.h index 092d014e8e..e37499e4be 100644 --- a/src/kits/opengl/mesa/main/glheader.h +++ b/src/kits/opengl/mesa/main/glheader.h @@ -20,9 +20,9 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -46,8 +46,11 @@ #ifndef GLHEADER_H #define GLHEADER_H +#ifdef HAVE_DIX_CONFIG_H +#include "dix-config.h" +#endif -#if defined(XFree86LOADER) && defined(IN_MODULE) +#if defined(XFree86LOADER) && defined(IN_MODULE) && !defined(NO_LIBCWRAPPER) #include "xf86_ansic.h" #else #include @@ -70,12 +73,18 @@ #include -/* This is no longer uses since we dumped autoconf/automake! */ -#ifdef HAVE_CONFIG_H -#include "conf.h" +/* Get typedefs for uintptr_t and friends */ +#if defined(__MINGW32__) || defined(__NetBSD__) +# include +#elif defined(_WIN32) +# include +# if _MSC_VER == 1200 + typedef UINT_PTR uintptr_t; +# endif +#else +# include #endif - #if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP) # define __WIN32__ # define finite _finite @@ -111,42 +120,6 @@ #endif /* WIN32 / CYGWIN bracket */ -#ifndef __MINGW32__ -/* XXX why is this here? - * It should probaby be somewhere in src/mesa/drivers/windows/ - */ -/* compatibility guard so we don't need to change client code */ -#if defined(_WIN32) && !defined(_WINDEF_) && !defined(_WINDEF_H) && !defined(_GNU_H_WINDOWS32_BASE) && !defined(OPENSTEP) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP) -typedef int (GLAPIENTRY *PROC)(); -typedef unsigned long COLORREF; -#endif - - -/* XXX why is this here? - * It should probaby be somewhere in src/mesa/drivers/windows/ - */ -#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_WINGDI_H) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP) && !defined(BUILD_FOR_SNAP) -# define WGL_FONT_LINES 0 -# define WGL_FONT_POLYGONS 1 -#ifndef _GNU_H_WINDOWS32_FUNCTIONS -# ifdef UNICODE -# define wglUseFontBitmaps wglUseFontBitmapsW -# define wglUseFontOutlines wglUseFontOutlinesW -# else -# define wglUseFontBitmaps wglUseFontBitmapsA -# define wglUseFontOutlines wglUseFontOutlinesA -# endif /* !UNICODE */ -#endif /* _GNU_H_WINDOWS32_FUNCTIONS */ -typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR; -typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT; -typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR; -#if !defined(GLX_USE_MESA) -#include -#endif -#endif -#endif /* !__MINGW32__ */ - - /* * Either define MESA_BIG_ENDIAN or MESA_LITTLE_ENDIAN. * Do not use them unless absolutely necessary! @@ -176,52 +149,6 @@ typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESC #if !defined(CAPI) && defined(WIN32) && !defined(BUILD_FOR_SNAP) #define CAPI _cdecl #endif -#include - - -/* XXX temporary hack - remove when glext.h is updated */ -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#define GL_HALF_FLOAT_ARB 0x140B -typedef GLushort GLhalfARB; -#endif - -/* XXX temporary hack - remove when glext.h is updated */ -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#define GL_TEXTURE_RED_TYPE_ARB 0x9000 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x9001 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x9002 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x9003 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x9004 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x9005 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x9006 -#define GL_UNSIGNED_NORMALIZED_ARB 0x9007 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif - -/* XXX temporary hack - remove when glext.h is updated */ -#ifndef GL_CURRENT_PROGRAM -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#endif - /* This is a macro on IRIX */ @@ -315,6 +242,19 @@ typedef GLushort GLhalfARB; # define __builtin_expect(x, y) x #endif +/* The __FUNCTION__ gcc variable is generally only used for debugging. + * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. + * Don't define it if using a newer Windows compiler. + */ +#if defined(__VMS) +# define __FUNCTION__ "VMS$NL:" +#elif __STDC_VERSION__ < 199901L +# if ((!defined __GNUC__) || (__GNUC__ < 2)) && (!defined __xlC__) && \ + (!defined(_MSC_VER) || _MSC_VER < 1300) +# define __FUNCTION__ "" +# endif +#endif + #include "config.h" diff --git a/src/kits/opengl/mesa/main/hash.c b/src/kits/opengl/mesa/main/hash.c index 78be122aab..2d5bcc3e01 100644 --- a/src/kits/opengl/mesa/main/hash.c +++ b/src/kits/opengl/mesa/main/hash.c @@ -2,8 +2,8 @@ * \file hash.c * Generic hash table. * - * Used for display lists and texture objects. The hash functions are - * thread-safe. + * Used for display lists, texture objects, vertex/fragment programs, + * buffer objects, etc. The hash functions are thread-safe. * * \note key=0 is illegal. * @@ -12,9 +12,9 @@ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -39,15 +39,15 @@ #include "imports.h" #include "glthread.h" #include "hash.h" -#include "context.h" #define TABLE_SIZE 1023 /**< Size of lookup table/array */ +#define HASH_FUNC(K) ((K) % TABLE_SIZE) + + /** * An entry in the hash table. - * - * This struct is private to this file. */ struct HashEntry { GLuint Key; /**< the entry's key */ @@ -55,15 +55,15 @@ struct HashEntry { struct HashEntry *Next; /**< pointer to next entry */ }; + /** * The hash table data structure. - * - * This is an opaque types (it's not defined in hash.h file). */ struct _mesa_HashTable { struct HashEntry *Table[TABLE_SIZE]; /**< the lookup table */ GLuint MaxKey; /**< highest key inserted so far */ _glthread_Mutex Mutex; /**< mutual exclusion lock */ + GLboolean InDeleteAll; /**< Debug check */ }; @@ -73,7 +73,8 @@ struct _mesa_HashTable { * * \return pointer to a new, empty hash table. */ -struct _mesa_HashTable *_mesa_NewHashTable(void) +struct _mesa_HashTable * +_mesa_NewHashTable(void) { struct _mesa_HashTable *table = CALLOC_STRUCT(_mesa_HashTable); if (table) { @@ -86,25 +87,31 @@ struct _mesa_HashTable *_mesa_NewHashTable(void) /** * Delete a hash table. - * - * \param table the hash table to delete. - * * Frees each entry on the hash table and then the hash table structure itself. + * Note that the caller should have already traversed the table and deleted + * the objects in the table (i.e. We don't free the entries' data pointer). + * + * \param table the hash table to delete. */ -void _mesa_DeleteHashTable(struct _mesa_HashTable *table) +void +_mesa_DeleteHashTable(struct _mesa_HashTable *table) { - GLuint i; + GLuint pos; assert(table); - for (i=0;iTable[i]; + for (pos = 0; pos < TABLE_SIZE; pos++) { + struct HashEntry *entry = table->Table[pos]; while (entry) { struct HashEntry *next = entry->Next; - FREE(entry); + if (entry->Data) { + _mesa_problem(NULL, + "In _mesa_DeleteHashTable, found non-freed data"); + } + _mesa_free(entry); entry = next; } } _glthread_DESTROY_MUTEX(table->Mutex); - FREE(table); + _mesa_free(table); } @@ -116,10 +123,9 @@ void _mesa_DeleteHashTable(struct _mesa_HashTable *table) * \param key the key. * * \return pointer to user's data or NULL if key not in table - * - * Walks through the hash entry until finding the matching key. */ -void *_mesa_HashLookup(const struct _mesa_HashTable *table, GLuint key) +void * +_mesa_HashLookup(const struct _mesa_HashTable *table, GLuint key) { GLuint pos; const struct HashEntry *entry; @@ -127,7 +133,7 @@ void *_mesa_HashLookup(const struct _mesa_HashTable *table, GLuint key) assert(table); assert(key); - pos = key & (TABLE_SIZE-1); + pos = HASH_FUNC(key); entry = table->Table[pos]; while (entry) { if (entry->Key == key) { @@ -141,18 +147,15 @@ void *_mesa_HashLookup(const struct _mesa_HashTable *table, GLuint key) /** - * Insert into the hash table. - * + * Insert a key/pointer pair into the hash table. * If an entry with this key already exists we'll replace the existing entry. * * \param table the hash table. * \param key the key (not zero). * \param data pointer to user data. - * - * While holding the hash table's lock, walk through the hash entry list replacing the data if a - * matching key is found, or inserts a new table entry otherwise. */ -void _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data) +void +_mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data) { /* search for existing entry with this key */ GLuint pos; @@ -166,16 +169,21 @@ void _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data) if (key > table->MaxKey) table->MaxKey = key; - pos = key & (TABLE_SIZE-1); - entry = table->Table[pos]; - while (entry) { + pos = HASH_FUNC(key); + + /* check if replacing an existing entry with same key */ + for (entry = table->Table[pos]; entry; entry = entry->Next) { if (entry->Key == key) { /* replace entry's data */ +#if 0 /* not sure this check is always valid */ + if (entry->Data) { + _mesa_problem(NULL, "Memory leak detected in _mesa_HashInsert"); + } +#endif entry->Data = data; _glthread_UNLOCK_MUTEX(table->Mutex); return; } - entry = entry->Next; } /* alloc and insert new table entry */ @@ -199,7 +207,8 @@ void _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data) * While holding the hash table's lock, searches the entry with the matching * key and unlinks it. */ -void _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key) +void +_mesa_HashRemove(struct _mesa_HashTable *table, GLuint key) { GLuint pos; struct HashEntry *entry, *prev; @@ -207,9 +216,16 @@ void _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key) assert(table); assert(key); + /* have to check this outside of mutex lock */ + if (table->InDeleteAll) { + _mesa_problem(NULL, "_mesa_HashRemove illegally called from " + "_mesa_HashDeleteAll callback function"); + return; + } + _glthread_LOCK_MUTEX(table->Mutex); - pos = key & (TABLE_SIZE-1); + pos = HASH_FUNC(key); prev = NULL; entry = table->Table[pos]; while (entry) { @@ -221,7 +237,7 @@ void _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key) else { table->Table[pos] = entry->Next; } - FREE(entry); + _mesa_free(entry); _glthread_UNLOCK_MUTEX(table->Mutex); return; } @@ -235,24 +251,81 @@ void _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key) /** - * Get the key of the "first" entry in the hash table. - * - * This is used in the course of deleting all display lists when - * a context is destroyed. - * - * \param table the hash table - * - * \return key for the "first" entry in the hash table. + * Delete all entries in a hash table, but don't delete the table itself. + * Invoke the given callback function for each table entry. * + * \param table the hash table to delete + * \param callback the callback function + * \param userData arbitrary pointer to pass along to the callback + * (this is typically a GLcontext pointer) + */ +void +_mesa_HashDeleteAll(struct _mesa_HashTable *table, + void (*callback)(GLuint key, void *data, void *userData), + void *userData) +{ + GLuint pos; + ASSERT(table); + ASSERT(callback); + _glthread_LOCK_MUTEX(table->Mutex); + table->InDeleteAll = GL_TRUE; + for (pos = 0; pos < TABLE_SIZE; pos++) { + struct HashEntry *entry, *next; + for (entry = table->Table[pos]; entry; entry = next) { + callback(entry->Key, entry->Data, userData); + next = entry->Next; + _mesa_free(entry); + } + table->Table[pos] = NULL; + } + table->InDeleteAll = GL_FALSE; + _glthread_UNLOCK_MUTEX(table->Mutex); +} + + +/** + * Walk over all entries in a hash table, calling callback function for each. + * \param table the hash table to walk + * \param callback the callback function + * \param userData arbitrary pointer to pass along to the callback + * (this is typically a GLcontext pointer) + */ +void +_mesa_HashWalk(const struct _mesa_HashTable *table, + void (*callback)(GLuint key, void *data, void *userData), + void *userData) +{ + /* cast-away const */ + struct _mesa_HashTable *table2 = (struct _mesa_HashTable *) table; + GLuint pos; + ASSERT(table); + ASSERT(callback); + _glthread_UNLOCK_MUTEX(table2->Mutex); + for (pos = 0; pos < TABLE_SIZE; pos++) { + struct HashEntry *entry; + for (entry = table->Table[pos]; entry; entry = entry->Next) { + callback(entry->Key, entry->Data, userData); + } + } + _glthread_UNLOCK_MUTEX(table2->Mutex); +} + + +/** + * Return the key of the "first" entry in the hash table. * While holding the lock, walks through all table positions until finding * the first entry of the first non-empty one. + * + * \param table the hash table + * \return key for the "first" entry in the hash table. */ -GLuint _mesa_HashFirstEntry(struct _mesa_HashTable *table) +GLuint +_mesa_HashFirstEntry(struct _mesa_HashTable *table) { GLuint pos; assert(table); _glthread_LOCK_MUTEX(table->Mutex); - for (pos=0; pos < TABLE_SIZE; pos++) { + for (pos = 0; pos < TABLE_SIZE; pos++) { if (table->Table[pos]) { _glthread_UNLOCK_MUTEX(table->Mutex); return table->Table[pos]->Key; @@ -263,18 +336,64 @@ GLuint _mesa_HashFirstEntry(struct _mesa_HashTable *table) } +/** + * Given a hash table key, return the next key. This is used to walk + * over all entries in the table. Note that the keys returned during + * walking won't be in any particular order. + * \return next hash key or 0 if end of table. + */ +GLuint +_mesa_HashNextEntry(const struct _mesa_HashTable *table, GLuint key) +{ + const struct HashEntry *entry; + GLuint pos; + + assert(table); + assert(key); + + /* Find the entry with given key */ + pos = HASH_FUNC(key); + for (entry = table->Table[pos]; entry ; entry = entry->Next) { + if (entry->Key == key) { + break; + } + } + + if (!entry) { + /* the given key was not found, so we can't find the next entry */ + return 0; + } + + if (entry->Next) { + /* return next in linked list */ + return entry->Next->Key; + } + else { + /* look for next non-empty table slot */ + pos++; + while (pos < TABLE_SIZE) { + if (table->Table[pos]) { + return table->Table[pos]->Key; + } + pos++; + } + return 0; + } +} + /** * Dump contents of hash table for debugging. * * \param table the hash table. */ -void _mesa_HashPrint(const struct _mesa_HashTable *table) +void +_mesa_HashPrint(const struct _mesa_HashTable *table) { - GLuint i; + GLuint pos; assert(table); - for (i=0;iTable[i]; + for (pos = 0; pos < TABLE_SIZE; pos++) { + const struct HashEntry *entry = table->Table[pos]; while (entry) { _mesa_debug(NULL, "%u %p\n", entry->Key, entry->Data); entry = entry->Next; @@ -297,9 +416,10 @@ void _mesa_HashPrint(const struct _mesa_HashTable *table) * the adjacent key. Otherwise do a full search for a free key block in the * allowable key range. */ -GLuint _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys) +GLuint +_mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys) { - GLuint maxKey = ~((GLuint) 0); + const GLuint maxKey = ~((GLuint) 0); _glthread_LOCK_MUTEX(table->Mutex); if (maxKey - numKeys > table->MaxKey) { /* the quick solution */ @@ -311,7 +431,7 @@ GLuint _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys) GLuint freeCount = 0; GLuint freeStart = 1; GLuint key; - for (key=1; key!=maxKey; key++) { + for (key = 1; key != maxKey; key++) { if (_mesa_HashLookup(table, key)) { /* darn, this key is already in use */ freeCount = 0; @@ -333,28 +453,68 @@ GLuint _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys) } +#if 0 /* debug only */ -#ifdef HASH_TEST_HARNESS -int main(int argc, char *argv[]) +/** + * Test walking over all the entries in a hash table. + */ +static void +test_hash_walking(void) +{ + struct _mesa_HashTable *t = _mesa_NewHashTable(); + const GLuint limit = 50000; + GLuint i; + + /* create some entries */ + for (i = 0; i < limit; i++) { + GLuint dummy; + GLuint k = (rand() % (limit * 10)) + 1; + while (_mesa_HashLookup(t, k)) { + /* id already in use, try another */ + k = (rand() % (limit * 10)) + 1; + } + _mesa_HashInsert(t, k, &dummy); + } + + /* walk over all entries */ + { + GLuint k = _mesa_HashFirstEntry(t); + GLuint count = 0; + while (k) { + GLuint knext = _mesa_HashNextEntry(t, k); + assert(knext != k); + _mesa_HashRemove(t, k); + count++; + k = knext; + } + assert(count == limit); + k = _mesa_HashFirstEntry(t); + assert(k==0); + } + + _mesa_DeleteHashTable(t); +} + + +void +_mesa_test_hash_functions(void) { int a, b, c; - struct HashTable *t; - - _mesa_printf("&a = %p\n", &a); - _mesa_printf("&b = %p\n", &b); + struct _mesa_HashTable *t; t = _mesa_NewHashTable(); _mesa_HashInsert(t, 501, &a); _mesa_HashInsert(t, 10, &c); _mesa_HashInsert(t, 0xfffffff8, &b); - _mesa_HashPrint(t); + /*_mesa_HashPrint(t);*/ - _mesa_printf("Find 501: %p\n", _mesa_HashLookup(t,501)); - _mesa_printf("Find 1313: %p\n", _mesa_HashLookup(t,1313)); - _mesa_printf("Find block of 100: %d\n", _mesa_HashFindFreeKeyBlock(t, 100)); + assert(_mesa_HashLookup(t,501)); + assert(!_mesa_HashLookup(t,1313)); + assert(_mesa_HashFindFreeKeyBlock(t, 100)); _mesa_DeleteHashTable(t); - return 0; + test_hash_walking(); } + #endif diff --git a/src/kits/opengl/mesa/main/hash.h b/src/kits/opengl/mesa/main/hash.h index 359ba51274..d18db76abe 100644 --- a/src/kits/opengl/mesa/main/hash.h +++ b/src/kits/opengl/mesa/main/hash.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -35,13 +35,6 @@ #include "glheader.h" -/** - * Opaque hash table type. - */ -struct HashTable; - - - extern struct _mesa_HashTable *_mesa_NewHashTable(void); extern void _mesa_DeleteHashTable(struct _mesa_HashTable *table); @@ -52,11 +45,25 @@ extern void _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *da extern void _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key); +extern void +_mesa_HashDeleteAll(struct _mesa_HashTable *table, + void (*callback)(GLuint key, void *data, void *userData), + void *userData); + +extern void +_mesa_HashWalk(const struct _mesa_HashTable *table, + void (*callback)(GLuint key, void *data, void *userData), + void *userData); + extern GLuint _mesa_HashFirstEntry(struct _mesa_HashTable *table); +extern GLuint _mesa_HashNextEntry(const struct _mesa_HashTable *table, GLuint key); + extern void _mesa_HashPrint(const struct _mesa_HashTable *table); extern GLuint _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys); +extern void _mesa_test_hash_functions(void); + #endif diff --git a/src/kits/opengl/mesa/main/hint.c b/src/kits/opengl/mesa/main/hint.c index 23ab1e6d0e..dcfa9c7363 100644 --- a/src/kits/opengl/mesa/main/hint.c +++ b/src/kits/opengl/mesa/main/hint.c @@ -111,6 +111,18 @@ _mesa_Hint( GLenum target, GLenum mode ) ctx->Hint.GenerateMipmap = mode; break; + /* GL_ARB_fragment_shader */ + case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: + if (!ctx->Extensions.ARB_fragment_shader) { + _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); + return; + } + if (ctx->Hint.FragmentShaderDerivative == mode) + return; + FLUSH_VERTICES(ctx, _NEW_HINT); + ctx->Hint.FragmentShaderDerivative = mode; + break; + default: _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); return; @@ -137,4 +149,5 @@ void _mesa_init_hint( GLcontext * ctx ) ctx->Hint.ClipVolumeClipping = GL_DONT_CARE; ctx->Hint.TextureCompression = GL_DONT_CARE; ctx->Hint.GenerateMipmap = GL_DONT_CARE; + ctx->Hint.FragmentShaderDerivative = GL_DONT_CARE; } diff --git a/src/kits/opengl/mesa/main/histogram.c b/src/kits/opengl/mesa/main/histogram.c index 29aced0c7a..6a7f09489c 100644 --- a/src/kits/opengl/mesa/main/histogram.c +++ b/src/kits/opengl/mesa/main/histogram.c @@ -748,8 +748,8 @@ _mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvo minmax[1][GCOMP] = CLAMP(ctx->MinMax.Max[GCOMP], 0.0F, 1.0F); minmax[1][BCOMP] = CLAMP(ctx->MinMax.Max[BCOMP], 0.0F, 1.0F); minmax[1][ACOMP] = CLAMP(ctx->MinMax.Max[ACOMP], 0.0F, 1.0F); - _mesa_pack_rgba_span_float(ctx, 2, (CONST GLfloat (*)[4]) minmax, - format, type, values, &ctx->Pack, 0); + _mesa_pack_rgba_span_float(ctx, 2, minmax, + format, type, values, &ctx->Pack, 0x0); } if (ctx->Pack.BufferObj->Name) { diff --git a/src/kits/opengl/mesa/main/image.c b/src/kits/opengl/mesa/main/image.c index 12f8352c2d..6ff4089f0e 100644 --- a/src/kits/opengl/mesa/main/image.c +++ b/src/kits/opengl/mesa/main/image.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -30,7 +30,6 @@ #include "glheader.h" -#include "bufferobj.h" #include "colormac.h" #include "context.h" #include "image.h" @@ -38,7 +37,22 @@ #include "histogram.h" #include "macros.h" #include "pixel.h" -#include "mtypes.h" + + +/** + * NOTE: + * Normally, BYTE_TO_FLOAT(0) returns 0.00392 That causes problems when + * we later convert the float to a packed integer value (such as for + * GL_RGB5_A1) because we'll wind up with a non-zero value. + * + * We redefine the macros here so zero is handled correctly. + */ +#undef BYTE_TO_FLOAT +#define BYTE_TO_FLOAT(B) ((B) == 0 ? 0.0F : ((2.0F * (B) + 1.0F) * (1.0F/255.0F))) + +#undef SHORT_TO_FLOAT +#define SHORT_TO_FLOAT(S) ((S) == 0 ? 0.0F : ((2.0F * (S) + 1.0F) * (1.0F/65535.0F))) + /** Compute ceiling of integer quotient of A divided by B. */ @@ -123,7 +137,8 @@ _mesa_swap4( GLuint *p, GLuint n ) * \return the size, in bytes, of the given data type, 0 if a GL_BITMAP, or -1 * if an invalid type enum. */ -GLint _mesa_sizeof_type( GLenum type ) +GLint +_mesa_sizeof_type( GLenum type ) { switch (type) { case GL_BITMAP: @@ -154,7 +169,8 @@ GLint _mesa_sizeof_type( GLenum type ) * Same as _mesa_sizeof_type() but also accepting the packed pixel * format data types. */ -GLint _mesa_sizeof_packed_type( GLenum type ) +GLint +_mesa_sizeof_packed_type( GLenum type ) { switch (type) { case GL_BITMAP: @@ -201,7 +217,9 @@ GLint _mesa_sizeof_packed_type( GLenum type ) return sizeof(GLuint); case GL_UNSIGNED_SHORT_8_8_MESA: case GL_UNSIGNED_SHORT_8_8_REV_MESA: - return sizeof(GLushort); + return sizeof(GLushort); + case GL_UNSIGNED_INT_24_8_EXT: + return sizeof(GLuint); default: return -1; } @@ -215,7 +233,8 @@ GLint _mesa_sizeof_packed_type( GLenum type ) * * \return the number of components in the given format, or -1 if a bad format. */ -GLint _mesa_components_in_format( GLenum format ) +GLint +_mesa_components_in_format( GLenum format ) { switch (format) { case GL_COLOR_INDEX: @@ -248,6 +267,8 @@ GLint _mesa_components_in_format( GLenum format ) return 4; case GL_YCBCR_MESA: return 2; + case GL_DEPTH_STENCIL_EXT: + return 2; default: return -1; } @@ -262,7 +283,8 @@ GLint _mesa_components_in_format( GLenum format ) * * \return bytes per pixel, or -1 if a bad format or type was given. */ -GLint _mesa_bytes_per_pixel( GLenum format, GLenum type ) +GLint +_mesa_bytes_per_pixel( GLenum format, GLenum type ) { GLint comps = _mesa_components_in_format( format ); if (comps < 0) @@ -318,6 +340,11 @@ GLint _mesa_bytes_per_pixel( GLenum format, GLenum type ) return sizeof(GLushort); else return -1; + case GL_UNSIGNED_INT_24_8_EXT: + if (format == GL_DEPTH_STENCIL_EXT) + return sizeof(GLuint); + else + return -1; default: return -1; } @@ -399,6 +426,9 @@ _mesa_is_legal_format_and_type( GLcontext *ctx, GLenum format, GLenum type ) } case GL_BGR: switch (type) { + /* NOTE: no packed types are supported with BGR. That's + * intentional, according to the GL spec. + */ case GL_BYTE: case GL_UNSIGNED_BYTE: case GL_SHORT: @@ -443,6 +473,12 @@ _mesa_is_legal_format_and_type( GLcontext *ctx, GLenum format, GLenum type ) return GL_TRUE; else return GL_FALSE; + case GL_DEPTH_STENCIL_EXT: + if (ctx->Extensions.EXT_packed_depth_stencil + && type == GL_UNSIGNED_INT_24_8_EXT) + return GL_TRUE; + else + return GL_FALSE; default: ; /* fall-through */ } @@ -623,10 +659,6 @@ _mesa_image_address3d( const struct gl_pixelstore_attrib *packing, * \param type pixel data type. * * \return the stride in bytes for the given parameters. - * - * Computes the number of bytes per pixel and row and compensates for alignment. - * - * \sa gl_pixelstore_attrib. */ GLint _mesa_image_row_stride( const struct gl_pixelstore_attrib *packing, @@ -718,7 +750,7 @@ void _mesa_unpack_polygon_stipple( const GLubyte *pattern, GLuint dest[32], const struct gl_pixelstore_attrib *unpacking ) { - GLubyte *ptrn = (GLubyte *) _mesa_unpack_bitmap( 32, 32, pattern, unpacking ); + GLubyte *ptrn = (GLubyte *) _mesa_unpack_bitmap(32, 32, pattern, unpacking); if (ptrn) { /* Convert pattern from GLubytes to GLuints and handle big/little * endian differences @@ -732,7 +764,7 @@ _mesa_unpack_polygon_stipple( const GLubyte *pattern, GLuint dest[32], | (p[3] ); p += 4; } - FREE(ptrn); + _mesa_free(ptrn); } } @@ -777,11 +809,10 @@ _mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels, /* Alloc dest storage */ bytes = ((width + 7) / 8 * height); - buffer = (GLubyte *) MALLOC( bytes ); + buffer = (GLubyte *) _mesa_malloc( bytes ); if (!buffer) return NULL; - width_in_bytes = CEILING( width, 8 ); dst = buffer; for (row = 0; row < height; row++) { @@ -789,12 +820,12 @@ _mesa_unpack_bitmap( GLint width, GLint height, const GLubyte *pixels, _mesa_image_address2d(packing, pixels, width, height, GL_COLOR_INDEX, GL_BITMAP, row, 0); if (!src) { - FREE(buffer); + _mesa_free(buffer); return NULL; } if (packing->SkipPixels == 0) { - MEMCPY( dst, src, width_in_bytes ); + _mesa_memcpy( dst, src, width_in_bytes ); if (packing->LsbFirst) { flip_bytes( dst, width_in_bytes ); } @@ -886,7 +917,7 @@ _mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source, return; if (packing->SkipPixels == 0) { - MEMCPY( dst, src, width_in_bytes ); + _mesa_memcpy( dst, src, width_in_bytes ); if (packing->LsbFirst) { flip_bytes( dst, width_in_bytes ); } @@ -959,7 +990,7 @@ _mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source, * as indicated by the transferOps bitmask */ void -_mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLuint transferOps, +_mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLbitfield transferOps, GLuint n, GLfloat rgba[][4]) { /* scale & bias */ @@ -1028,48 +1059,130 @@ _mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLuint transferOps, } - /* + * Apply color index shift and offset to an array of pixels. + */ +static void +shift_and_offset_ci( const GLcontext *ctx, GLuint n, GLuint indexes[] ) +{ + GLint shift = ctx->Pixel.IndexShift; + GLint offset = ctx->Pixel.IndexOffset; + GLuint i; + if (shift > 0) { + for (i=0;i> shift) + offset; + } + } + else { + for (i=0;iPixel.MapItoIsize - 1; + GLuint i; + for (i = 0; i < n; i++) { + const GLuint j = indexes[i] & mask; + indexes[i] = IROUND(ctx->Pixel.MapItoI[j]); + } + } +} + + +/** + * Apply stencil index shift, offset and table lookup to an array + * of stencil values. + */ +void +_mesa_apply_stencil_transfer_ops(const GLcontext *ctx, GLuint n, + GLstencil stencil[]) +{ + if (ctx->Pixel.IndexShift != 0 || ctx->Pixel.IndexOffset != 0) { + const GLint offset = ctx->Pixel.IndexOffset; + GLint shift = ctx->Pixel.IndexShift; + GLuint i; + if (shift > 0) { + for (i = 0; i < n; i++) { + stencil[i] = (stencil[i] << shift) + offset; + } + } + else if (shift < 0) { + shift = -shift; + for (i = 0; i < n; i++) { + stencil[i] = (stencil[i] >> shift) + offset; + } + } + else { + for (i = 0; i < n; i++) { + stencil[i] = stencil[i] + offset; + } + } + } + if (ctx->Pixel.MapStencilFlag) { + GLuint mask = ctx->Pixel.MapStoSsize - 1; + GLuint i; + for (i = 0; i < n; i++) { + stencil[i] = ctx->Pixel.MapStoS[ stencil[i] & mask ]; + } + } +} + + +/** * Used to pack an array [][4] of RGBA float colors as specified * by the dstFormat, dstType and dstPacking. Used by glReadPixels, * glGetConvolutionFilter(), etc. + * Incoming colors will be clamped to [0,1] if needed. + * Note: the rgba values will be modified by this function when any pixel + * transfer ops are enabled. */ void -_mesa_pack_rgba_span_float( GLcontext *ctx, - GLuint n, CONST GLfloat rgbaIn[][4], - GLenum dstFormat, GLenum dstType, - GLvoid *dstAddr, - const struct gl_pixelstore_attrib *dstPacking, - GLuint transferOps ) +_mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], + GLenum dstFormat, GLenum dstType, + GLvoid *dstAddr, + const struct gl_pixelstore_attrib *dstPacking, + GLbitfield transferOps) { - const GLint comps = _mesa_components_in_format(dstFormat); GLfloat luminance[MAX_WIDTH]; - const GLfloat (*rgba)[4]; + const GLint comps = _mesa_components_in_format(dstFormat); GLuint i; + if (dstType != GL_FLOAT || ctx->Color.ClampReadColor == GL_TRUE) { + /* need to clamp to [0, 1] */ + transferOps |= IMAGE_CLAMP_BIT; + } + if (transferOps) { - /* make copy of incoming data */ - DEFMARRAY(GLfloat, rgbaCopy, MAX_WIDTH, 4); /* mac 32k limitation */ - CHECKARRAY(rgbaCopy, return); /* mac 32k limitation */ - - _mesa_memcpy(rgbaCopy, rgbaIn, n * 4 * sizeof(GLfloat)); - _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgbaCopy); - rgba = (const GLfloat (*)[4]) rgbaCopy; - + _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba); if ((transferOps & IMAGE_MIN_MAX_BIT) && ctx->MinMax.Sink) { - UNDEFARRAY(rgbaCopy); /* mac 32k limitation */ return; } - UNDEFARRAY(rgbaCopy); /* mac 32k limitation */ - } - else { - /* use incoming data, not a copy */ - rgba = (const GLfloat (*)[4]) rgbaIn; } if (dstFormat == GL_LUMINANCE || dstFormat == GL_LUMINANCE_ALPHA) { /* compute luminance values */ - if (ctx->ClampFragmentColors) { + if (dstType != GL_FLOAT || ctx->Color.ClampReadColor == GL_TRUE) { for (i = 0; i < n; i++) { GLfloat sum = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP]; luminance[i] = CLAMP(sum, 0.0F, 1.0F); @@ -1237,66 +1350,66 @@ _mesa_pack_rgba_span_float( GLcontext *ctx, switch (dstFormat) { case GL_RED: for (i=0;iNewState & _NEW_PIXEL) == 0 || transferOps == 0); - - /* Test for optimized case first */ - if (transferOps == 0 && dstFormat == GL_RGBA && dstType == CHAN_TYPE) { - /* common simple case */ - MEMCPY(dstAddr, srcRgba, n * 4 * sizeof(GLchan)); - } - else if (transferOps == 0 && dstFormat == GL_RGB && dstType == CHAN_TYPE) { - /* common simple case */ - GLuint i; - GLchan *dest = (GLchan *) dstAddr; - for (i = 0; i < n; i++) { - dest[0] = srcRgba[i][RCOMP]; - dest[1] = srcRgba[i][GCOMP]; - dest[2] = srcRgba[i][BCOMP]; - dest += 3; - } - } - else if (transferOps == 0 && dstFormat == GL_RGBA && dstType == GL_UNSIGNED_BYTE) { - /* common simple case */ - GLuint i; - GLubyte *dest = (GLubyte *) dstAddr; - for (i = 0; i < n; i++) { - dest[0] = CHAN_TO_UBYTE(srcRgba[i][RCOMP]); - dest[1] = CHAN_TO_UBYTE(srcRgba[i][GCOMP]); - dest[2] = CHAN_TO_UBYTE(srcRgba[i][BCOMP]); - dest[3] = CHAN_TO_UBYTE(srcRgba[i][ACOMP]); - dest += 4; - } - } - else { - /* general solution */ - GLuint i; - DEFMARRAY(GLfloat, rgba, MAX_WIDTH, 4); /* mac 32k limitation */ - CHECKARRAY(rgba, return); /* mac 32k limitation */ - - assert(n <= MAX_WIDTH); - /* convert color components to floating point */ - for (i = 0; i < n; i++) { - rgba[i][RCOMP] = CHAN_TO_FLOAT(srcRgba[i][RCOMP]); - rgba[i][GCOMP] = CHAN_TO_FLOAT(srcRgba[i][GCOMP]); - rgba[i][BCOMP] = CHAN_TO_FLOAT(srcRgba[i][BCOMP]); - rgba[i][ACOMP] = CHAN_TO_FLOAT(srcRgba[i][ACOMP]); - } - _mesa_pack_rgba_span_float(ctx, n, (const GLfloat (*)[4]) rgba, - dstFormat, dstType, dstAddr, - dstPacking, transferOps); - UNDEFARRAY(rgba); /* mac 32k limitation */ - } -} - - #define SWAP2BYTE(VALUE) \ { \ GLubyte *bytes = (GLubyte *) &(VALUE); \ @@ -2064,7 +2102,7 @@ extract_uint_indexes(GLuint n, GLuint indexes[], GLenum srcFormat, GLenum srcType, const GLvoid *src, const struct gl_pixelstore_attrib *unpack ) { - assert(srcFormat == GL_COLOR_INDEX); + ASSERT(srcFormat == GL_COLOR_INDEX || srcFormat == GL_STENCIL_INDEX); ASSERT(srcType == GL_BITMAP || srcType == GL_UNSIGNED_BYTE || @@ -2073,6 +2111,7 @@ extract_uint_indexes(GLuint n, GLuint indexes[], srcType == GL_SHORT || srcType == GL_UNSIGNED_INT || srcType == GL_INT || + srcType == GL_UNSIGNED_INT_24_8_EXT || srcType == GL_HALF_FLOAT_ARB || srcType == GL_FLOAT); @@ -2228,6 +2267,24 @@ extract_uint_indexes(GLuint n, GLuint indexes[], } } break; + case GL_UNSIGNED_INT_24_8_EXT: + { + GLuint i; + const GLuint *s = (const GLuint *) src; + if (unpack->SwapBytes) { + for (i = 0; i < n; i++) { + GLuint value = s[i]; + SWAP4BYTE(value); + indexes[i] = value & 0xff; /* lower 8 bits */ + } + } + else { + for (i = 0; i < n; i++) + indexes[i] = s[i] & 0xfff; /* lower 8 bits */ + } + } + break; + default: _mesa_problem(NULL, "bad srcType in extract_uint_indexes"); return; @@ -2776,7 +2833,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, GLenum srcFormat, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ) + GLbitfield transferOps ) { ASSERT(dstFormat == GL_ALPHA || dstFormat == GL_LUMINANCE || @@ -2827,7 +2884,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, if (srcType == CHAN_TYPE) { if (dstFormat == GL_RGBA) { if (srcFormat == GL_RGBA) { - MEMCPY( dest, source, n * 4 * sizeof(GLchan) ); + _mesa_memcpy( dest, source, n * 4 * sizeof(GLchan) ); return; } else if (srcFormat == GL_RGB) { @@ -2847,7 +2904,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, } else if (dstFormat == GL_RGB) { if (srcFormat == GL_RGB) { - MEMCPY( dest, source, n * 3 * sizeof(GLchan) ); + _mesa_memcpy( dest, source, n * 3 * sizeof(GLchan) ); return; } else if (srcFormat == GL_RGBA) { @@ -2867,7 +2924,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, else if (dstFormat == srcFormat) { GLint comps = _mesa_components_in_format(srcFormat); assert(comps > 0); - MEMCPY( dest, source, n * comps * sizeof(GLchan) ); + _mesa_memcpy( dest, source, n * comps * sizeof(GLchan) ); return; } } @@ -2943,8 +3000,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, GLint dstComponents; GLint dstRedIndex, dstGreenIndex, dstBlueIndex, dstAlphaIndex; GLint dstLuminanceIndex, dstIntensityIndex; - DEFMARRAY(GLfloat, rgba, MAX_WIDTH, 4); /* mac 32k limitation */ - CHECKARRAY(rgba, return); /* mac 32k limitation */ + GLfloat rgba[MAX_WIDTH][4]; dstComponents = _mesa_components_in_format( dstFormat ); /* source & dest image formats should have been error checked by now */ @@ -2959,25 +3015,20 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, extract_uint_indexes(n, indexes, srcFormat, srcType, source, srcPacking); - if (dstFormat == GL_COLOR_INDEX - && (transferOps & IMAGE_MAP_COLOR_BIT)) { - _mesa_map_ci(ctx, n, indexes); - } - if (transferOps & IMAGE_SHIFT_OFFSET_BIT) { - _mesa_shift_and_offset_ci(ctx, n, indexes); - } - if (dstFormat == GL_COLOR_INDEX) { - /* convert to GLchan and return */ GLuint i; + _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes); + /* convert to GLchan and return */ for (i = 0; i < n; i++) { dest[i] = (GLchan) (indexes[i] & 0xff); } - UNDEFARRAY(rgba); /* mac 32k limitation */ return; } else { /* Convert indexes to RGBA */ + if (transferOps & IMAGE_SHIFT_OFFSET_BIT) { + shift_and_offset_ci(ctx, n, indexes); + } _mesa_map_ci_to_rgba(ctx, n, indexes, rgba); } @@ -3041,7 +3092,6 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, break; default: _mesa_problem(ctx, "bad dstFormat in _mesa_unpack_chan_span()"); - UNDEFARRAY(rgba); /* mac 32k limitation */ return; } @@ -3105,7 +3155,6 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, dst += dstComponents; } } - UNDEFARRAY(rgba); /* mac 32k limitation */ } } @@ -3120,7 +3169,7 @@ _mesa_unpack_color_span_float( GLcontext *ctx, GLenum srcFormat, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ) + GLbitfield transferOps ) { ASSERT(dstFormat == GL_ALPHA || dstFormat == GL_LUMINANCE || @@ -3171,8 +3220,7 @@ _mesa_unpack_color_span_float( GLcontext *ctx, GLint dstComponents; GLint dstRedIndex, dstGreenIndex, dstBlueIndex, dstAlphaIndex; GLint dstLuminanceIndex, dstIntensityIndex; - DEFMARRAY(GLfloat, rgba, MAX_WIDTH, 4); /* mac 32k limitation */ - CHECKARRAY(rgba, return); /* mac 32k limitation */ + GLfloat rgba[MAX_WIDTH][4]; dstComponents = _mesa_components_in_format( dstFormat ); /* source & dest image formats should have been error checked by now */ @@ -3187,25 +3235,20 @@ _mesa_unpack_color_span_float( GLcontext *ctx, extract_uint_indexes(n, indexes, srcFormat, srcType, source, srcPacking); - if (dstFormat == GL_COLOR_INDEX - && (transferOps & IMAGE_MAP_COLOR_BIT)) { - _mesa_map_ci(ctx, n, indexes); - } - if (transferOps & IMAGE_SHIFT_OFFSET_BIT) { - _mesa_shift_and_offset_ci(ctx, n, indexes); - } - if (dstFormat == GL_COLOR_INDEX) { - /* convert to GLchan and return */ GLuint i; + _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes); + /* convert to GLchan and return */ for (i = 0; i < n; i++) { dest[i] = (GLchan) (indexes[i] & 0xff); } - UNDEFARRAY(rgba); /* mac 32k limitation */ return; } else { /* Convert indexes to RGBA */ + if (transferOps & IMAGE_SHIFT_OFFSET_BIT) { + shift_and_offset_ci(ctx, n, indexes); + } _mesa_map_ci_to_rgba(ctx, n, indexes, rgba); } @@ -3264,7 +3307,6 @@ _mesa_unpack_color_span_float( GLcontext *ctx, break; default: _mesa_problem(ctx, "bad dstFormat in _mesa_unpack_color_span_float()"); - UNDEFARRAY(rgba); /* mac 32k limitation */ return; } @@ -3326,7 +3368,6 @@ _mesa_unpack_color_span_float( GLcontext *ctx, dst += dstComponents; } } - UNDEFARRAY(rgba); /* mac 32k limitation */ } } @@ -3350,7 +3391,7 @@ _mesa_unpack_index_span( const GLcontext *ctx, GLuint n, GLenum dstType, GLvoid *dest, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ) + GLbitfield transferOps ) { ASSERT(srcType == GL_BITMAP || srcType == GL_UNSIGNED_BYTE || @@ -3374,11 +3415,11 @@ _mesa_unpack_index_span( const GLcontext *ctx, GLuint n, */ if (transferOps == 0 && srcType == GL_UNSIGNED_BYTE && dstType == GL_UNSIGNED_BYTE) { - MEMCPY(dest, source, n * sizeof(GLubyte)); + _mesa_memcpy(dest, source, n * sizeof(GLubyte)); } else if (transferOps == 0 && srcType == GL_UNSIGNED_INT && dstType == GL_UNSIGNED_INT && !srcPacking->SwapBytes) { - MEMCPY(dest, source, n * sizeof(GLuint)); + _mesa_memcpy(dest, source, n * sizeof(GLuint)); } else { /* @@ -3390,14 +3431,8 @@ _mesa_unpack_index_span( const GLcontext *ctx, GLuint n, extract_uint_indexes(n, indexes, GL_COLOR_INDEX, srcType, source, srcPacking); - if (transferOps & IMAGE_SHIFT_OFFSET_BIT) { - /* shift and offset indexes */ - _mesa_shift_and_offset_ci(ctx, n, indexes); - } - if (transferOps & IMAGE_MAP_COLOR_BIT) { - /* Apply lookup table */ - _mesa_map_ci(ctx, n, indexes); - } + if (transferOps) + _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes); /* convert to dest type */ switch (dstType) { @@ -3420,7 +3455,7 @@ _mesa_unpack_index_span( const GLcontext *ctx, GLuint n, } break; case GL_UNSIGNED_INT: - MEMCPY(dest, indexes, n * sizeof(GLuint)); + _mesa_memcpy(dest, indexes, n * sizeof(GLuint)); break; default: _mesa_problem(ctx, "bad dstType in _mesa_unpack_index_span"); @@ -3433,7 +3468,7 @@ void _mesa_pack_index_span( const GLcontext *ctx, GLuint n, GLenum dstType, GLvoid *dest, const GLuint *source, const struct gl_pixelstore_attrib *dstPacking, - GLuint transferOps ) + GLbitfield transferOps ) { GLuint indexes[MAX_WIDTH]; @@ -3443,13 +3478,8 @@ _mesa_pack_index_span( const GLcontext *ctx, GLuint n, if (transferOps & (IMAGE_MAP_COLOR_BIT | IMAGE_SHIFT_OFFSET_BIT)) { /* make a copy of input */ - MEMCPY(indexes, source, n * sizeof(GLuint)); - if (transferOps & IMAGE_SHIFT_OFFSET_BIT) { - _mesa_shift_and_offset_ci( ctx, n, indexes); - } - if (transferOps & IMAGE_MAP_COLOR_BIT) { - _mesa_map_ci(ctx, n, indexes); - } + _mesa_memcpy(indexes, source, n * sizeof(GLuint)); + _mesa_apply_ci_transfer_ops(ctx, transferOps, n, indexes); source = indexes; } @@ -3569,7 +3599,7 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n, GLenum dstType, GLvoid *dest, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ) + GLbitfield transferOps ) { ASSERT(srcType == GL_BITMAP || srcType == GL_UNSIGNED_BYTE || @@ -3578,6 +3608,7 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n, srcType == GL_SHORT || srcType == GL_UNSIGNED_INT || srcType == GL_INT || + srcType == GL_UNSIGNED_INT_24_8_EXT || srcType == GL_HALF_FLOAT_ARB || srcType == GL_FLOAT); @@ -3594,13 +3625,13 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n, if (transferOps == 0 && srcType == GL_UNSIGNED_BYTE && dstType == GL_UNSIGNED_BYTE) { - MEMCPY(dest, source, n * sizeof(GLubyte)); + _mesa_memcpy(dest, source, n * sizeof(GLubyte)); } else if (transferOps == 0 && srcType == GL_UNSIGNED_INT && dstType == GL_UNSIGNED_INT && !srcPacking->SwapBytes) { - MEMCPY(dest, source, n * sizeof(GLuint)); + _mesa_memcpy(dest, source, n * sizeof(GLuint)); } else { /* @@ -3609,13 +3640,13 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n, GLuint indexes[MAX_WIDTH]; assert(n <= MAX_WIDTH); - extract_uint_indexes(n, indexes, GL_COLOR_INDEX, srcType, source, + extract_uint_indexes(n, indexes, GL_STENCIL_INDEX, srcType, source, srcPacking); if (transferOps) { if (transferOps & IMAGE_SHIFT_OFFSET_BIT) { /* shift and offset indexes */ - _mesa_shift_and_offset_ci(ctx, n, indexes); + shift_and_offset_ci(ctx, n, indexes); } if (ctx->Pixel.MapStencilFlag) { @@ -3649,7 +3680,7 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n, } break; case GL_UNSIGNED_INT: - MEMCPY(dest, indexes, n * sizeof(GLuint)); + _mesa_memcpy(dest, indexes, n * sizeof(GLuint)); break; default: _mesa_problem(ctx, "bad dstType in _mesa_unpack_stencil_span"); @@ -3670,20 +3701,15 @@ _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n, if (ctx->Pixel.IndexShift || ctx->Pixel.IndexOffset || ctx->Pixel.MapStencilFlag) { /* make a copy of input */ - MEMCPY(stencil, source, n * sizeof(GLstencil)); - if (ctx->Pixel.IndexShift || ctx->Pixel.IndexOffset) { - _mesa_shift_and_offset_stencil( ctx, n, stencil ); - } - if (ctx->Pixel.MapStencilFlag) { - _mesa_map_stencil( ctx, n, stencil ); - } + _mesa_memcpy(stencil, source, n * sizeof(GLstencil)); + _mesa_apply_stencil_transfer_ops(ctx, n, stencil); source = stencil; } switch (dstType) { case GL_UNSIGNED_BYTE: if (sizeof(GLstencil) == 8) { - MEMCPY( dest, source, n ); + _mesa_memcpy( dest, source, n ); } else { GLubyte *dst = (GLubyte *) dest; @@ -3695,7 +3721,7 @@ _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n, break; case GL_BYTE: if (sizeof(GLstencil) == 8) { - MEMCPY( dest, source, n ); + _mesa_memcpy( dest, source, n ); } else { GLbyte *dst = (GLbyte *) dest; @@ -3816,10 +3842,21 @@ _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n, void -_mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, +_mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, + GLenum dstType, GLvoid *dest, GLfloat depthScale, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking ) { + GLfloat depthTemp[MAX_WIDTH], *depthValues; + + if (dstType == GL_FLOAT) { + depthValues = (GLfloat *) dest; + } + else { + depthValues = depthTemp; + } + + /* XXX we need to obey srcPacking->SwapBytes here!!! */ (void) srcPacking; switch (srcType) { @@ -3828,7 +3865,7 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, GLuint i; const GLubyte *src = (const GLubyte *) source; for (i = 0; i < n; i++) { - dest[i] = BYTE_TO_FLOAT(src[i]); + depthValues[i] = BYTE_TO_FLOAT(src[i]); } } break; @@ -3837,7 +3874,7 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, GLuint i; const GLubyte *src = (const GLubyte *) source; for (i = 0; i < n; i++) { - dest[i] = UBYTE_TO_FLOAT(src[i]); + depthValues[i] = UBYTE_TO_FLOAT(src[i]); } } break; @@ -3846,7 +3883,7 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, GLuint i; const GLshort *src = (const GLshort *) source; for (i = 0; i < n; i++) { - dest[i] = SHORT_TO_FLOAT(src[i]); + depthValues[i] = SHORT_TO_FLOAT(src[i]); } } break; @@ -3855,7 +3892,7 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, GLuint i; const GLushort *src = (const GLushort *) source; for (i = 0; i < n; i++) { - dest[i] = USHORT_TO_FLOAT(src[i]); + depthValues[i] = USHORT_TO_FLOAT(src[i]); } } break; @@ -3864,7 +3901,7 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, GLuint i; const GLint *src = (const GLint *) source; for (i = 0; i < n; i++) { - dest[i] = INT_TO_FLOAT(src[i]); + depthValues[i] = INT_TO_FLOAT(src[i]); } } break; @@ -3873,19 +3910,41 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, GLuint i; const GLuint *src = (const GLuint *) source; for (i = 0; i < n; i++) { - dest[i] = UINT_TO_FLOAT(src[i]); + depthValues[i] = UINT_TO_FLOAT(src[i]); + } + } + break; + case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */ + if (dstType == GL_UNSIGNED_INT && + depthScale == (GLfloat) 0xffffff && + ctx->Pixel.DepthScale == 1.0 && + ctx->Pixel.DepthBias == 0.0) { + const GLuint *src = (const GLuint *) source; + GLuint *zValues = (GLuint *) dest; + GLuint i; + for (i = 0; i < n; i++) { + zValues[i] = src[i] & 0xffffff00; + } + return; + } + else { + const GLuint *src = (const GLuint *) source; + const GLfloat scale = 1.0f / 0xffffff; + GLuint i; + for (i = 0; i < n; i++) { + depthValues[i] = (src[i] >> 8) * scale; } } break; case GL_FLOAT: - MEMCPY(dest, source, n * sizeof(GLfloat)); + _mesa_memcpy(depthValues, source, n * sizeof(GLfloat)); break; case GL_HALF_FLOAT_ARB: { GLuint i; const GLhalfARB *src = (const GLhalfARB *) source; for (i = 0; i < n; i++) { - dest[i] = _mesa_half_to_float(src[i]); + depthValues[i] = _mesa_half_to_float(src[i]); } } break; @@ -3897,11 +3956,40 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, /* apply depth scale and bias and clamp to [0,1] */ if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) { + _mesa_scale_and_bias_depth(ctx, n, depthValues); + } + + if (dstType == GL_UNSIGNED_INT) { + GLuint *zValues = (GLuint *) dest; GLuint i; - for (i = 0; i < n; i++) { - GLfloat d = dest[i] * ctx->Pixel.DepthScale + ctx->Pixel.DepthBias; - dest[i] = CLAMP(d, 0.0F, 1.0F); + if (depthScale <= (GLfloat) 0xffffff) { + /* no overflow worries */ + for (i = 0; i < n; i++) { + zValues[i] = (GLuint) (depthValues[i] * depthScale); + } } + else { + /* need to use double precision to prevent overflow problems */ + for (i = 0; i < n; i++) { + GLdouble z = depthValues[i] * depthScale; + if (z >= (GLdouble) 0xffffffff) + zValues[i] = 0xffffffff; + else + zValues[i] = (GLuint) z; + } + } + } + else if (dstType == GL_UNSIGNED_SHORT) { + GLushort *zValues = (GLushort *) dest; + GLuint i; + ASSERT(depthScale <= 65535.0); + for (i = 0; i < n; i++) { + zValues[i] = (GLushort) (depthValues[i] * depthScale); + } + } + else { + ASSERT(dstType == GL_FLOAT); + ASSERT(depthScale == 1.0F); } } @@ -3915,18 +4003,12 @@ _mesa_pack_depth_span( const GLcontext *ctx, GLuint n, GLvoid *dest, const struct gl_pixelstore_attrib *dstPacking ) { GLfloat depthCopy[MAX_WIDTH]; - const GLboolean bias_or_scale = ctx->Pixel.DepthBias != 0.0 || - ctx->Pixel.DepthScale != 1.0; ASSERT(n <= MAX_WIDTH); - if (bias_or_scale) { - GLuint i; - for (i = 0; i < n; i++) { - GLfloat d; - d = depthSpan[i] * ctx->Pixel.DepthScale + ctx->Pixel.DepthBias; - depthCopy[i] = CLAMP(d, 0.0F, 1.0F); - } + if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) { + _mesa_memcpy(depthCopy, depthSpan, n * sizeof(GLfloat)); + _mesa_scale_and_bias_depth(ctx, n, depthCopy); depthSpan = depthCopy; } @@ -3954,7 +4036,7 @@ _mesa_pack_depth_span( const GLcontext *ctx, GLuint n, GLvoid *dest, GLushort *dst = (GLushort *) dest; GLuint i; for (i = 0; i < n; i++) { - dst[i] = FLOAT_TO_USHORT( depthSpan[i] ); + CLAMPED_FLOAT_TO_USHORT(dst[i], depthSpan[i]); } if (dstPacking->SwapBytes) { _mesa_swap2( (GLushort *) dst, n ); @@ -4027,6 +4109,49 @@ _mesa_pack_depth_span( const GLcontext *ctx, GLuint n, GLvoid *dest, } + +/** + * Pack depth and stencil values as GL_DEPTH_STENCIL/GL_UNSIGNED_INT_24_8. + */ +void +_mesa_pack_depth_stencil_span(const GLcontext *ctx, GLuint n, GLuint *dest, + const GLfloat *depthVals, + const GLstencil *stencilVals, + const struct gl_pixelstore_attrib *dstPacking) +{ + GLfloat depthCopy[MAX_WIDTH]; + GLstencil stencilCopy[MAX_WIDTH]; + GLuint i; + + ASSERT(n <= MAX_WIDTH); + + if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) { + _mesa_memcpy(depthCopy, depthVals, n * sizeof(GLfloat)); + _mesa_scale_and_bias_depth(ctx, n, depthCopy); + depthVals = depthCopy; + } + + if (ctx->Pixel.IndexShift || + ctx->Pixel.IndexOffset || + ctx->Pixel.MapStencilFlag) { + _mesa_memcpy(stencilCopy, stencilVals, n * sizeof(GLstencil)); + _mesa_apply_stencil_transfer_ops(ctx, n, stencilCopy); + stencilVals = stencilCopy; + } + + for (i = 0; i < n; i++) { + GLuint z = (GLuint) (depthVals[i] * 0xffffff); + dest[i] = (z << 8) | (stencilVals[i] & 0xff); + } + + if (dstPacking->SwapBytes) { + _mesa_swap4(dest, n); + } +} + + + + /** * Unpack image data. Apply byte swapping, byte flipping (bitmap). * Return all image data in a contiguous block. This is used when we @@ -4048,7 +4173,7 @@ _mesa_unpack_image( GLuint dimensions, if (width <= 0 || height <= 0 || depth <= 0) return NULL; /* generate error later */ - if (format == GL_BITMAP) { + if (type == GL_BITMAP) { bytesPerRow = (width + 7) >> 3; flipBytes = !unpack->LsbFirst; swap2 = swap4 = GL_FALSE; @@ -4070,7 +4195,8 @@ _mesa_unpack_image( GLuint dimensions, } { - GLubyte *destBuffer = (GLubyte *) MALLOC(bytesPerRow * height * depth); + GLubyte *destBuffer + = (GLubyte *) _mesa_malloc(bytesPerRow * height * depth); GLubyte *dst; GLint img, row; if (!destBuffer) @@ -4081,7 +4207,7 @@ _mesa_unpack_image( GLuint dimensions, for (row = 0; row < height; row++) { const GLvoid *src = _mesa_image_address(dimensions, unpack, pixels, width, height, format, type, img, row, 0); - MEMCPY(dst, src, bytesPerRow); + _mesa_memcpy(dst, src, bytesPerRow); /* byte flipping/swapping */ if (flipBytes) { flip_bytes((GLubyte *) dst, bytesPerRow); @@ -4099,14 +4225,139 @@ _mesa_unpack_image( GLuint dimensions, } } -#endif +#endif /* _HAVE_FULL_GL */ + /** - * Perform clipping for glDrawPixels. The image's window position - * and size, and the unpack skipPixels and skipRows are adjusted so - * that the image region is entirely within the window and scissor bounds. - * NOTE: this will only work when glPixelZoom is (1, 1). + * Convert an array of RGBA colors from one datatype to another. + * NOTE: src may equal dst. In that case, we use a temporary buffer. + */ +void +_mesa_convert_colors(GLenum srcType, const GLvoid *src, + GLenum dstType, GLvoid *dst, + GLuint count, const GLubyte mask[]) +{ + GLuint tempBuffer[MAX_WIDTH][4]; + const GLboolean useTemp = (src == dst); + + ASSERT(srcType != dstType); + + switch (srcType) { + case GL_UNSIGNED_BYTE: + if (dstType == GL_UNSIGNED_SHORT) { + const GLubyte (*src1)[4] = (const GLubyte (*)[4]) src; + GLushort (*dst2)[4] = (GLushort (*)[4]) (useTemp ? tempBuffer : dst); + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst2[i][RCOMP] = UBYTE_TO_USHORT(src1[i][RCOMP]); + dst2[i][GCOMP] = UBYTE_TO_USHORT(src1[i][GCOMP]); + dst2[i][BCOMP] = UBYTE_TO_USHORT(src1[i][BCOMP]); + dst2[i][ACOMP] = UBYTE_TO_USHORT(src1[i][ACOMP]); + } + } + if (useTemp) + _mesa_memcpy(dst, tempBuffer, count * 4 * sizeof(GLushort)); + } + else { + const GLubyte (*src1)[4] = (const GLubyte (*)[4]) src; + GLfloat (*dst4)[4] = (GLfloat (*)[4]) (useTemp ? tempBuffer : dst); + GLuint i; + ASSERT(dstType == GL_FLOAT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst4[i][RCOMP] = UBYTE_TO_FLOAT(src1[i][RCOMP]); + dst4[i][GCOMP] = UBYTE_TO_FLOAT(src1[i][GCOMP]); + dst4[i][BCOMP] = UBYTE_TO_FLOAT(src1[i][BCOMP]); + dst4[i][ACOMP] = UBYTE_TO_FLOAT(src1[i][ACOMP]); + } + } + if (useTemp) + _mesa_memcpy(dst, tempBuffer, count * 4 * sizeof(GLfloat)); + } + break; + case GL_UNSIGNED_SHORT: + if (dstType == GL_UNSIGNED_BYTE) { + const GLushort (*src2)[4] = (const GLushort (*)[4]) src; + GLubyte (*dst1)[4] = (GLubyte (*)[4]) (useTemp ? tempBuffer : dst); + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst1[i][RCOMP] = USHORT_TO_UBYTE(src2[i][RCOMP]); + dst1[i][GCOMP] = USHORT_TO_UBYTE(src2[i][GCOMP]); + dst1[i][BCOMP] = USHORT_TO_UBYTE(src2[i][BCOMP]); + dst1[i][ACOMP] = USHORT_TO_UBYTE(src2[i][ACOMP]); + } + } + if (useTemp) + _mesa_memcpy(dst, tempBuffer, count * 4 * sizeof(GLubyte)); + } + else { + const GLushort (*src2)[4] = (const GLushort (*)[4]) src; + GLfloat (*dst4)[4] = (GLfloat (*)[4]) (useTemp ? tempBuffer : dst); + GLuint i; + ASSERT(dstType == GL_FLOAT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst4[i][RCOMP] = USHORT_TO_FLOAT(src2[i][RCOMP]); + dst4[i][GCOMP] = USHORT_TO_FLOAT(src2[i][GCOMP]); + dst4[i][BCOMP] = USHORT_TO_FLOAT(src2[i][BCOMP]); + dst4[i][ACOMP] = USHORT_TO_FLOAT(src2[i][ACOMP]); + } + } + if (useTemp) + _mesa_memcpy(dst, tempBuffer, count * 4 * sizeof(GLfloat)); + } + break; + case GL_FLOAT: + if (dstType == GL_UNSIGNED_BYTE) { + const GLfloat (*src4)[4] = (const GLfloat (*)[4]) src; + GLubyte (*dst1)[4] = (GLubyte (*)[4]) (useTemp ? tempBuffer : dst); + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][RCOMP], src4[i][RCOMP]); + UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][GCOMP], src4[i][GCOMP]); + UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][BCOMP], src4[i][BCOMP]); + UNCLAMPED_FLOAT_TO_UBYTE(dst1[i][ACOMP], src4[i][ACOMP]); + } + } + if (useTemp) + _mesa_memcpy(dst, tempBuffer, count * 4 * sizeof(GLubyte)); + } + else { + const GLfloat (*src4)[4] = (const GLfloat (*)[4]) src; + GLushort (*dst2)[4] = (GLushort (*)[4]) (useTemp ? tempBuffer : dst); + GLuint i; + ASSERT(dstType == GL_UNSIGNED_SHORT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + UNCLAMPED_FLOAT_TO_USHORT(dst2[i][RCOMP], src4[i][RCOMP]); + UNCLAMPED_FLOAT_TO_USHORT(dst2[i][GCOMP], src4[i][GCOMP]); + UNCLAMPED_FLOAT_TO_USHORT(dst2[i][BCOMP], src4[i][BCOMP]); + UNCLAMPED_FLOAT_TO_USHORT(dst2[i][ACOMP], src4[i][ACOMP]); + } + } + if (useTemp) + _mesa_memcpy(dst, tempBuffer, count * 4 * sizeof(GLushort)); + } + break; + default: + _mesa_problem(NULL, "Invalid datatype in _mesa_convert_colors"); + } +} + + + + +/** + * Perform basic clipping for glDrawPixels. The image's position and size + * and the unpack SkipPixels and SkipRows are adjusted so that the image + * region is entirely within the window and scissor bounds. + * NOTE: this will only work when glPixelZoom is (1, 1) or (1, -1). + * If Pixel.ZoomY is -1, *destY will be changed to be the first row which + * we'll actually write. Beforehand, *destY-1 is the first drawing row. * * \return GL_TRUE if image is ready for drawing or * GL_FALSE if image was completely clipped away (draw nothing) @@ -4115,15 +4366,20 @@ GLboolean _mesa_clip_drawpixels(const GLcontext *ctx, GLint *destX, GLint *destY, GLsizei *width, GLsizei *height, - GLint *skipPixels, GLint *skipRows) + struct gl_pixelstore_attrib *unpack) { const GLframebuffer *buffer = ctx->DrawBuffer; - ASSERT(ctx->Pixel.ZoomX == 1.0F && ctx->Pixel.ZoomY == 1.0F); + if (unpack->RowLength == 0) { + unpack->RowLength = *width; + } + + ASSERT(ctx->Pixel.ZoomX == 1.0F); + ASSERT(ctx->Pixel.ZoomY == 1.0F || ctx->Pixel.ZoomY == -1.0F); /* left clipping */ if (*destX < buffer->_Xmin) { - *skipPixels += (buffer->_Xmin - *destX); + unpack->SkipPixels += (buffer->_Xmin - *destX); *width -= (buffer->_Xmin - *destX); *destX = buffer->_Xmin; } @@ -4134,15 +4390,30 @@ _mesa_clip_drawpixels(const GLcontext *ctx, if (*width <= 0) return GL_FALSE; - /* bottom clipping */ - if (*destY < buffer->_Ymin) { - *skipRows += (buffer->_Ymin - *destY); - *height -= (buffer->_Ymin - *destY); - *destY = buffer->_Ymin; + if (ctx->Pixel.ZoomY == 1.0F) { + /* bottom clipping */ + if (*destY < buffer->_Ymin) { + unpack->SkipRows += (buffer->_Ymin - *destY); + *height -= (buffer->_Ymin - *destY); + *destY = buffer->_Ymin; + } + /* top clipping */ + if (*destY + *height > buffer->_Ymax) + *height -= (*destY + *height - buffer->_Ymax); + } + else { /* upside down */ + /* top clipping */ + if (*destY > buffer->_Ymax) { + unpack->SkipRows += (*destY - buffer->_Ymax); + *height -= (*destY - buffer->_Ymax); + *destY = buffer->_Ymax; + } + /* bottom clipping */ + if (*destY - *height < buffer->_Ymin) + *height -= (buffer->_Ymin - (*destY - *height)); + /* adjust destY so it's the first row to write to */ + (*destY)--; } - /* top clipping */ - if (*destY + *height > buffer->_Ymax) - *height -= (*destY + *height - buffer->_Ymax); if (*height <= 0) return GL_TRUE; @@ -4153,11 +4424,11 @@ _mesa_clip_drawpixels(const GLcontext *ctx, /** * Perform clipping for glReadPixels. The image's window position - * and size, and the pack skipPixels and skipRows are adjusted so - * that the image region is entirely within the window bounds. + * and size, and the pack skipPixels, skipRows and rowLength are adjusted + * so that the image region is entirely within the window bounds. * Note: this is different from _mesa_clip_drawpixels() in that the - * scissor box is ignored, and we use the bounds of the current "read" - * surface; + * scissor box is ignored, and we use the bounds of the current readbuffer + * surface. * * \return GL_TRUE if image is ready for drawing or * GL_FALSE if image was completely clipped away (draw nothing) @@ -4166,13 +4437,17 @@ GLboolean _mesa_clip_readpixels(const GLcontext *ctx, GLint *srcX, GLint *srcY, GLsizei *width, GLsizei *height, - GLint *skipPixels, GLint *skipRows) + struct gl_pixelstore_attrib *pack) { const GLframebuffer *buffer = ctx->ReadBuffer; + if (pack->RowLength == 0) { + pack->RowLength = *width; + } + /* left clipping */ if (*srcX < 0) { - *skipPixels += (0 - *srcX); + pack->SkipPixels += (0 - *srcX); *width -= (0 - *srcX); *srcX = 0; } @@ -4185,7 +4460,7 @@ _mesa_clip_readpixels(const GLcontext *ctx, /* bottom clipping */ if (*srcY < 0) { - *skipRows += (0 - *srcY); + pack->SkipRows += (0 - *srcY); *height -= (0 - *srcY); *srcY = 0; } @@ -4199,3 +4474,43 @@ _mesa_clip_readpixels(const GLcontext *ctx, return GL_TRUE; } + +/** + * Clip the rectangle defined by (x, y, width, height) against the bounds + * specified by [xmin, xmax) and [ymin, ymax). + * \return GL_FALSE if rect is totally clipped, GL_TRUE otherwise. + */ +GLboolean +_mesa_clip_to_region(GLint xmin, GLint ymin, + GLint xmax, GLint ymax, + GLint *x, GLint *y, + GLsizei *width, GLsizei *height ) +{ + /* left clipping */ + if (*x < xmin) { + *width -= (xmin - *x); + *x = xmin; + } + + /* right clipping */ + if (*x + *width > xmax) + *width -= (*x + *width - xmax - 1); + + if (*width <= 0) + return GL_FALSE; + + /* bottom (or top) clipping */ + if (*y < ymin) { + *height -= (ymin - *y); + *y = ymin; + } + + /* top (or bottom) clipping */ + if (*y + *height > ymax) + *height -= (*y + *height - ymax - 1); + + if (*height <= 0) + return GL_FALSE; + + return GL_TRUE; +} diff --git a/src/kits/opengl/mesa/main/image.h b/src/kits/opengl/mesa/main/image.h index 6b76fd8af0..990398a7c4 100644 --- a/src/kits/opengl/mesa/main/image.h +++ b/src/kits/opengl/mesa/main/image.h @@ -1,13 +1,8 @@ -/** - * \file image.h - * Image handling. - */ - /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -117,23 +112,25 @@ _mesa_pack_bitmap( GLint width, GLint height, const GLubyte *source, extern void -_mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLuint transferOps, +_mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLbitfield transferOps, GLuint n, GLfloat rgba[][4]); + extern void -_mesa_pack_rgba_span_float( GLcontext *ctx, - GLuint n, CONST GLfloat rgba[][4], +_mesa_apply_ci_transfer_ops(const GLcontext *ctx, GLbitfield transferOps, + GLuint n, GLuint indexes[]); + + +extern void +_mesa_apply_stencil_transfer_ops(const GLcontext *ctx, GLuint n, + GLstencil stencil[]); + + +extern void +_mesa_pack_rgba_span_float( GLcontext *ctx, GLuint n, GLfloat rgba[][4], GLenum dstFormat, GLenum dstType, GLvoid *dstAddr, const struct gl_pixelstore_attrib *dstPacking, - GLuint transferOps ); - - -extern void -_mesa_pack_rgba_span_chan( GLcontext *ctx, - GLuint n, CONST GLchan rgba[][4], - GLenum dstFormat, GLenum dstType, GLvoid *dstAddr, - const struct gl_pixelstore_attrib *dstPacking, - GLuint transferOps ); + GLbitfield transferOps ); extern void @@ -142,7 +139,7 @@ _mesa_unpack_color_span_chan( GLcontext *ctx, GLenum srcFormat, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ); + GLbitfield transferOps ); extern void @@ -151,7 +148,7 @@ _mesa_unpack_color_span_float( GLcontext *ctx, GLenum srcFormat, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ); + GLbitfield transferOps ); extern void @@ -159,14 +156,14 @@ _mesa_unpack_index_span( const GLcontext *ctx, GLuint n, GLenum dstType, GLvoid *dest, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ); + GLbitfield transferOps ); extern void _mesa_pack_index_span( const GLcontext *ctx, GLuint n, GLenum dstType, GLvoid *dest, const GLuint *source, const struct gl_pixelstore_attrib *dstPacking, - GLuint transferOps ); + GLbitfield transferOps ); extern void @@ -174,7 +171,7 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n, GLenum dstType, GLvoid *dest, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking, - GLuint transferOps ); + GLbitfield transferOps ); extern void _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n, @@ -183,7 +180,8 @@ _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n, extern void -_mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, GLfloat *dest, +_mesa_unpack_depth_span( const GLcontext *ctx, GLuint n, + GLenum dstType, GLvoid *dest, GLfloat depthScale, GLenum srcType, const GLvoid *source, const struct gl_pixelstore_attrib *srcPacking ); @@ -193,6 +191,13 @@ _mesa_pack_depth_span( const GLcontext *ctx, GLuint n, GLvoid *dest, const struct gl_pixelstore_attrib *dstPacking ); +extern void +_mesa_pack_depth_stencil_span(const GLcontext *ctx, GLuint n, GLuint *dest, + const GLfloat *depthVals, + const GLstencil *stencilVals, + const struct gl_pixelstore_attrib *dstPacking); + + extern void * _mesa_unpack_image( GLuint dimensions, GLsizei width, GLsizei height, GLsizei depth, @@ -200,18 +205,29 @@ _mesa_unpack_image( GLuint dimensions, const struct gl_pixelstore_attrib *unpack ); +extern void +_mesa_convert_colors(GLenum srcType, const GLvoid *src, + GLenum dstType, GLvoid *dst, + GLuint count, const GLubyte mask[]); + + extern GLboolean _mesa_clip_drawpixels(const GLcontext *ctx, GLint *destX, GLint *destY, GLsizei *width, GLsizei *height, - GLint *skipPixels, GLint *skipRows); + struct gl_pixelstore_attrib *unpack); extern GLboolean _mesa_clip_readpixels(const GLcontext *ctx, GLint *destX, GLint *destY, GLsizei *width, GLsizei *height, - GLint *skipPixels, GLint *skipRows); + struct gl_pixelstore_attrib *pack); +extern GLboolean +_mesa_clip_to_region(GLint xmin, GLint ymin, + GLint xmax, GLint ymax, + GLint *x, GLint *y, + GLsizei *width, GLsizei *height ); #endif diff --git a/src/kits/opengl/mesa/main/imports.c b/src/kits/opengl/mesa/main/imports.c index cee54e526b..a09c497795 100644 --- a/src/kits/opengl/mesa/main/imports.c +++ b/src/kits/opengl/mesa/main/imports.c @@ -23,7 +23,6 @@ * \todo Functions still needed: * - scanf * - qsort - * - bsearch * - rand and RAND_MAX * * \note When compiled into a XFree86 module these functions wrap around @@ -32,9 +31,9 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -72,6 +71,14 @@ extern int vsnprintf(char *str, size_t count, const char *fmt, va_list arg); #endif #endif +/* If we don't actually want to use the libcwrapper junk (even though we're + * building an Xorg server module), then just undef IN_MODULE to signal that to + * the following code. It's left around for now to allow compiling of newish + * Mesa with older servers, but this whole mess should go away at some point. + */ +#ifdef NO_LIBCWRAPPER +#undef IN_MODULE +#endif /**********************************************************************/ /** \name Memory */ @@ -124,16 +131,22 @@ _mesa_free(void *ptr) void * _mesa_align_malloc(size_t bytes, unsigned long alignment) { - unsigned long ptr, buf; +#if defined(HAVE_POSIX_MEMALIGN) && !(defined(XFree86LOADER) && defined(IN_MODULE)) + void *mem; + + (void) posix_memalign(& mem, alignment, bytes); + return mem; +#else + uintptr_t ptr, buf; ASSERT( alignment > 0 ); - ptr = (unsigned long) _mesa_malloc(bytes + alignment + sizeof(void *)); + ptr = (uintptr_t) _mesa_malloc(bytes + alignment + sizeof(void *)); if (!ptr) return NULL; - buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1); - *(unsigned long *)(buf - sizeof(void *)) = ptr; + buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1); + *(uintptr_t *)(buf - sizeof(void *)) = ptr; #ifdef DEBUG /* mark the non-aligned area */ @@ -144,23 +157,36 @@ _mesa_align_malloc(size_t bytes, unsigned long alignment) #endif return (void *) buf; +#endif /* defined(HAVE_POSIX_MEMALIGN) && !(defined(XFree86LOADER) && defined(IN_MODULE)) */ } -/** Same as _mesa_align_malloc(), but using _mesa_calloc() instead of - * _mesa_malloc() */ +/** + * Same as _mesa_align_malloc(), but using _mesa_calloc() instead of + * _mesa_malloc() + */ void * _mesa_align_calloc(size_t bytes, unsigned long alignment) { - unsigned long ptr, buf; +#if defined(HAVE_POSIX_MEMALIGN) && !(defined(XFree86LOADER) && defined(IN_MODULE)) + void *mem; + + mem = _mesa_align_malloc(bytes, alignment); + if (mem != NULL) { + (void) memset(mem, 0, bytes); + } + + return mem; +#else + uintptr_t ptr, buf; ASSERT( alignment > 0 ); - ptr = (unsigned long) _mesa_calloc(bytes + alignment + sizeof(void *)); + ptr = (uintptr_t) _mesa_calloc(bytes + alignment + sizeof(void *)); if (!ptr) return NULL; - buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1); - *(unsigned long *)(buf - sizeof(void *)) = ptr; + buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1); + *(uintptr_t *)(buf - sizeof(void *)) = ptr; #ifdef DEBUG /* mark the non-aligned area */ @@ -171,42 +197,61 @@ _mesa_align_calloc(size_t bytes, unsigned long alignment) #endif return (void *)buf; +#endif /* defined(HAVE_POSIX_MEMALIGN) && !(defined(XFree86LOADER) && defined(IN_MODULE)) */ } /** - * Free memory allocated with _mesa_align_malloc() or _mesa_align_calloc(). - * + * Free memory which was allocated with either _mesa_align_malloc() + * or _mesa_align_calloc(). * \param ptr pointer to the memory to be freed. - * * The actual address to free is stored in the word immediately before the * address the client sees. */ void _mesa_align_free(void *ptr) { -#if 0 - _mesa_free( (void *)(*(unsigned long *)((unsigned long)ptr - sizeof(void *))) ); +#if defined(HAVE_POSIX_MEMALIGN) && !(defined(XFree86LOADER) && defined(IN_MODULE)) + free(ptr); #else void **cubbyHole = (void **) ((char *) ptr - sizeof(void *)); void *realAddr = *cubbyHole; _mesa_free(realAddr); -#endif +#endif /* defined(HAVE_POSIX_MEMALIGN) && !(defined(XFree86LOADER) && defined(IN_MODULE)) */ } -/** Wrapper around either memcpy() or xf86memcpy() */ +/** + * Reallocate memory, with alignment. + */ +void * +_mesa_align_realloc(void *oldBuffer, size_t oldSize, size_t newSize, + unsigned long alignment) +{ + const size_t copySize = (oldSize < newSize) ? oldSize : newSize; + void *newBuf = _mesa_align_malloc(newSize, alignment); + if (newBuf && oldBuffer && copySize > 0) { + _mesa_memcpy(newBuf, oldBuffer, copySize); + } + if (oldBuffer) + _mesa_align_free(oldBuffer); + return newBuf; +} + + + +/** Reallocate memory */ void * _mesa_realloc(void *oldBuffer, size_t oldSize, size_t newSize) { const size_t copySize = (oldSize < newSize) ? oldSize : newSize; void *newBuffer = _mesa_malloc(newSize); - if (newBuffer && copySize > 0) + if (newBuffer && oldBuffer && copySize > 0) _mesa_memcpy(newBuffer, oldBuffer, copySize); if (oldBuffer) _mesa_free(oldBuffer); return newBuffer; } - +/** memcpy wrapper */ void * _mesa_memcpy(void *dest, const void *src, size_t n) { @@ -232,8 +277,8 @@ _mesa_memset( void *dst, int val, size_t n ) #endif } -/** Fill memory with a constant 16bit word. - * +/** + * Fill memory with a constant 16bit word. * \param dst destination pointer. * \param val value. * \param n number of words. @@ -258,6 +303,19 @@ _mesa_bzero( void *dst, size_t n ) #endif } +/** Wrapper around either memcmp() or xf86memcmp() */ +int +_mesa_memcmp( const void *s1, const void *s2, size_t n ) +{ +#if defined(XFree86LOADER) && defined(IN_MODULE) + return xf86memcmp( s1, s2, n ); +#elif defined(SUNOS4) + return memcmp( (char *) s1, (char *) s2, (int) n ); +#else + return memcmp(s1, s2, n); +#endif +} + /*@}*/ @@ -276,6 +334,17 @@ _mesa_sin(double a) #endif } +/** Single precision wrapper around either sin() or xf86sin() */ +float +_mesa_sinf(float a) +{ +#if defined(XFree86LOADER) && defined(IN_MODULE) + return (float) xf86sin((double) a); +#else + return (float) sin((double) a); +#endif +} + /** Wrapper around either cos() or xf86cos() */ double _mesa_cos(double a) @@ -287,6 +356,28 @@ _mesa_cos(double a) #endif } +/** Single precision wrapper around either asin() or xf86asin() */ +float +_mesa_asinf(float x) +{ +#if defined(XFree86LOADER) && defined(IN_MODULE) + return (float) xf86asin((double) x); +#else + return (float) asin((double) x); +#endif +} + +/** Single precision wrapper around either atan() or xf86atan() */ +float +_mesa_atanf(float x) +{ +#if defined(XFree86LOADER) && defined(IN_MODULE) + return (float) xf86atan((double) x); +#else + return (float) atan((double) x); +#endif +} + /** Wrapper around either sqrt() or xf86sqrt() */ double _mesa_sqrtd(double x) @@ -515,6 +606,41 @@ _mesa_pow(double x, double y) } +/** + * Find the first bit set in a word. + */ +int +_mesa_ffs(int i) +{ +#if (defined(_WIN32) && !defined(__MINGW32__) ) || defined(__IBMC__) || defined(__IBMCPP__) + register int bit = 0; + if (i != 0) { + if ((i & 0xffff) == 0) { + bit += 16; + i >>= 16; + } + if ((i & 0xff) == 0) { + bit += 8; + i >>= 8; + } + if ((i & 0xf) == 0) { + bit += 4; + i >>= 4; + } + while ((i & 1) == 0) { + bit++; + i >>= 1; + } + } + return bit; +#elif defined(XFree86LOADER) && defined(IN_MODULE) + return xf86ffs(i); +#else + return ffs(i); +#endif +} + + /** * Return number of bits set in given GLuint. */ @@ -670,6 +796,27 @@ _mesa_half_to_float(GLhalfARB val) /*@}*/ +/**********************************************************************/ +/** \name Sort & Search */ +/*@{*/ + +/** + * Wrapper for bsearch(). + */ +void * +_mesa_bsearch( const void *key, const void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *) ) +{ +#if defined(XFree86LOADER) && defined(IN_MODULE) + return xf86bsearch(key, base, nmemb, size, compar); +#else + return bsearch(key, base, nmemb, size, compar); +#endif +} + +/*@}*/ + + /**********************************************************************/ /** \name Environment vars */ /*@{*/ @@ -682,6 +829,8 @@ _mesa_getenv( const char *var ) { #if defined(XFree86LOADER) && defined(IN_MODULE) return xf86getenv(var); +#elif defined(_XBOX) + return NULL; #else return getenv(var); #endif @@ -775,7 +924,7 @@ _mesa_strncmp( const char *s1, const char *s2, size_t n ) char * _mesa_strdup( const char *s ) { - int l = _mesa_strlen(s); + size_t l = _mesa_strlen(s); char *s2 = (char *) _mesa_malloc(l + 1); if (s2) _mesa_strcpy(s2, s); @@ -818,12 +967,12 @@ _mesa_sprintf( char *str, const char *fmt, ... ) int r; va_list args; va_start( args, fmt ); - va_end( args ); #if defined(XFree86LOADER) && defined(IN_MODULE) r = xf86vsprintf( str, fmt, args ); #else r = vsprintf( str, fmt, args ); #endif + va_end( args ); return r; } @@ -840,7 +989,18 @@ _mesa_printf( const char *fmtString, ... ) #if defined(XFree86LOADER) && defined(IN_MODULE) xf86printf("%s", s); #else - printf("%s", s); + fprintf(stderr,"%s", s); +#endif +} + +/** Wrapper around either vsprintf() or xf86vsprintf() */ +int +_mesa_vsprintf( char *str, const char *fmt, va_list args ) +{ +#if defined(XFree86LOADER) && defined(IN_MODULE) + return xf86vsprintf( str, fmt, args ); +#else + return vsprintf( str, fmt, args ); #endif } @@ -982,6 +1142,9 @@ _mesa_error( GLcontext *ctx, GLenum error, const char *fmtString, ... ) case GL_TABLE_TOO_LARGE: errstr = "GL_TABLE_TOO_LARGE"; break; + case GL_INVALID_FRAMEBUFFER_OPERATION_EXT: + errstr = "GL_INVALID_FRAMEBUFFER_OPERATION"; + break; default: errstr = "unknown"; break; @@ -1003,9 +1166,9 @@ _mesa_error( GLcontext *ctx, GLenum error, const char *fmtString, ... ) void _mesa_debug( const GLcontext *ctx, const char *fmtString, ... ) { +#ifdef DEBUG char s[MAXSTRING]; va_list args; - (void) ctx; va_start(args, fmtString); vsnprintf(s, MAXSTRING, fmtString, args); va_end(args); @@ -1014,6 +1177,29 @@ _mesa_debug( const GLcontext *ctx, const char *fmtString, ... ) #else fprintf(stderr, "Mesa: %s", s); #endif +#endif /* DEBUG */ + (void) ctx; + (void) fmtString; +} + +/*@}*/ + + +/**********************************************************************/ +/** \name Exit */ +/*@{*/ + +/** + * Wrapper for exit(). + */ +void +_mesa_exit( int status ) +{ +#if defined(XFree86LOADER) && defined(IN_MODULE) + xf86exit(status); +#else + exit(status); +#endif } /*@}*/ @@ -1163,20 +1349,6 @@ _mesa_init_default_imports(__GLimports *imports, void *driverCtx) static GLboolean initialized = GL_FALSE; if (!initialized) { init_sqrt_table(); - -#if defined(_FPU_GETCW) && defined(_FPU_SETCW) - { - const char *debug = _mesa_getenv("MESA_DEBUG"); - if (debug && _mesa_strcmp(debug, "FP")==0) { - /* die on FP exceptions */ - fpu_control_t mask; - _FPU_GETCW(mask); - mask &= ~(_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM - | _FPU_MASK_OM | _FPU_MASK_UM); - _FPU_SETCW(mask); - } - } -#endif initialized = GL_TRUE; } diff --git a/src/kits/opengl/mesa/main/imports.h b/src/kits/opengl/mesa/main/imports.h index b69b5fa31a..dad2767e72 100644 --- a/src/kits/opengl/mesa/main/imports.h +++ b/src/kits/opengl/mesa/main/imports.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.2 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -39,6 +39,7 @@ /* XXX some of the stuff in glheader.h should be moved into this file. */ #include "glheader.h" +#include #ifdef __cplusplus @@ -54,6 +55,15 @@ extern "C" { #define NULL 0 #endif + +/** gcc -pedantic warns about long string literals, LONGSTRING silences that */ +#if !defined(__GNUC__) || (__GNUC__ < 2) || \ + ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 7)) +# define LONGSTRING +#else +# define LONGSTRING __extension__ +#endif + /*@}*/ @@ -88,8 +98,6 @@ extern "C" { /** Set \p N bytes in \p DST to \p VAL */ #define MEMSET( DST, VAL, N ) _mesa_memset(DST, VAL, N) -#define MEMSET16( DST, VAL, N ) _mesa_memset16( (DST), (VAL), (size_t) (N) ) - /*@}*/ @@ -100,105 +108,7 @@ extern "C" { * this macro. * Both pointers/offsets are expressed in bytes. */ -#define ADD_POINTERS(A, B) ( (GLubyte *) (A) + (unsigned long) (B) ) - - -/**********************************************************************/ -/** \name [Pseudo] static array declaration. - * - * MACs and BeOS don't support static larger than 32kb, so ... - */ -/*@{*/ - -/** - * \def DEFARRAY - * Define a [static] unidimensional array - */ - -/** - * \def DEFMARRAY - * Define a [static] bi-dimensional array - */ - -/** - * \def DEFMNARRAY - * Define a [static] tri-dimensional array - */ - -/** - * \def CHECKARRAY - * Verifies a [static] array was properly allocated. - */ - -/** - * \def UNDEFARRAY - * Undefine (free) a [static] array. - */ - -#if defined(macintosh) && !defined(__MRC__) -/*extern char *AGLAlloc(int size);*/ -/*extern void AGLFree(char* ptr);*/ -# define DEFARRAY(TYPE,NAME,SIZE) TYPE *NAME = (TYPE*)_mesa_alloc(sizeof(TYPE)*(SIZE)) -# define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2) TYPE (*NAME)[SIZE2] = (TYPE(*)[SIZE2])_mesa_alloc(sizeof(TYPE)*(SIZE1)*(SIZE2)) -# define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3) TYPE (*NAME)[SIZE2][SIZE3] = (TYPE(*)[SIZE2][SIZE3])_mesa_alloc(sizeof(TYPE)*(SIZE1)*(SIZE2)*(SIZE3)) -# define CHECKARRAY(NAME,CMD) do {if (!(NAME)) {CMD;}} while (0) -# define UNDEFARRAY(NAME) do {if ((NAME)) {_mesa_free((char*)NAME);} }while (0) -#elif defined(__BEOS__) -# define DEFARRAY(TYPE,NAME,SIZE) TYPE *NAME = (TYPE*)_mesa_malloc(sizeof(TYPE)*(SIZE)) -# define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2) TYPE (*NAME)[SIZE2] = (TYPE(*)[SIZE2])_mesa_malloc(sizeof(TYPE)*(SIZE1)*(SIZE2)) -# define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3) TYPE (*NAME)[SIZE2][SIZE3] = (TYPE(*)[SIZE2][SIZE3])_mesa_malloc(sizeof(TYPE)*(SIZE1)*(SIZE2)*(SIZE3)) -# define CHECKARRAY(NAME,CMD) do {if (!(NAME)) {CMD;}} while (0) -# define UNDEFARRAY(NAME) do {if ((NAME)) {_mesa_free((char*)NAME);} }while (0) -#else -# define DEFARRAY(TYPE,NAME,SIZE) TYPE NAME[SIZE] -# define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2) TYPE NAME[SIZE1][SIZE2] -# define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3) TYPE NAME[SIZE1][SIZE2][SIZE3] -# define CHECKARRAY(NAME,CMD) do {} while(0) -# define UNDEFARRAY(NAME) -#endif - -/*@}*/ - - -/**********************************************************************/ -/** \name External pixel buffer allocation. - * - * If you want Mesa's depth/stencil/accum/etc buffers to be allocated with a - * specialized allocator you can define MESA_EXTERNAL_BUFFERALLOC and implement - * _ext_mesa_alloc_pixelbuffer() _ext_mesa_free_pixelbuffer() in your - * application. - * - * \author - * Contributed by Gerk Huisma (gerk@five-d.demon.nl). - */ -/*@{*/ - -/** - * \def MESA_PBUFFER_ALLOC - * Allocate a pixel buffer. - */ - -/** - * \def MESA_PBUFFER_FREE - * Free a pixel buffer. - */ - -#ifdef MESA_EXTERNAL_BUFFERALLOC -extern void *_ext_mesa_alloc_pixelbuffer( unsigned int size ); -extern void _ext_mesa_free_pixelbuffer( void *pb ); - -#define MESA_PBUFFER_ALLOC(BYTES) (void *) _ext_mesa_alloc_pixelbuffer(BYTES) -#define MESA_PBUFFER_FREE(PTR) _ext_mesa_free_pixelbuffer(PTR) -#else -/* Default buffer allocation uses the aligned allocation routines: */ -#define MESA_PBUFFER_ALLOC(BYTES) (void *) _mesa_align_malloc(BYTES, 512) -#define MESA_PBUFFER_FREE(PTR) _mesa_align_free(PTR) -#endif - -/*@}*/ - - -/**********************************************************************/ +#define ADD_POINTERS(A, B) ( (GLubyte *) (A) + (uintptr_t) (B) ) /** @@ -224,6 +134,14 @@ typedef union { GLfloat f; GLint i; } fi_type; #define M_PI (3.1415926536) #endif +#ifndef M_E +#define M_E (2.7182818284590452354) +#endif + +#ifndef FLT_MAX_EXP +#define FLT_MAX_EXP 128 +#endif + /* XXX this is a bit of a hack needed for compilation within XFree86 */ #ifndef FLT_MIN #define FLT_MIN (1.0e-37) @@ -243,6 +161,7 @@ typedef union { GLfloat f; GLint i; } fi_type; defined(__hppa__) || defined(hpux) || \ defined(__mips) || defined(_MIPS_ARCH) || \ defined(__arm__) || \ + defined(__sh__) || defined(__m32r__) || \ (defined(__alpha__) && (defined(__IEEE_FLOAT) || !defined(VMS))) #define USE_IEEE #define IEEE_ONE 0x3f800000 @@ -254,7 +173,7 @@ typedef union { GLfloat f; GLint i; } fi_type; ***/ #if 0 /* _mesa_sqrtf() not accurate enough - temporarily disabled */ # define SQRTF(X) _mesa_sqrtf(X) -#elif defined(XFree86LOADER) && defined(IN_MODULE) +#elif defined(XFree86LOADER) && defined(IN_MODULE) && !defined(NO_LIBCWRAPPER) # define SQRTF(X) (float) xf86sqrt((float) (X)) #else # define SQRTF(X) (float) sqrt((float) (X)) @@ -302,7 +221,7 @@ static INLINE GLfloat LOG2(GLfloat val) num.f = ((-1.0f/3) * num.f + 2) * num.f - 2.0f/3; return num.f + log_2; } -#elif defined(XFree86LOADER) && defined(IN_MODULE) +#elif defined(XFree86LOADER) && defined(IN_MODULE) && !defined(NO_LIBCWRAPPER) #define LOG2(x) ((GLfloat) (xf86log(x) * 1.442695)) #else /* @@ -340,8 +259,13 @@ static INLINE int IS_INF_OR_NAN( float x ) *** IS_NEGATIVE: test if float is negative ***/ #if defined(USE_IEEE) -#define GET_FLOAT_BITS(x) ((fi_type *) &(x))->i -#define IS_NEGATIVE(x) (GET_FLOAT_BITS(x) & (1<<31)) +static INLINE int GET_FLOAT_BITS( float x ) +{ + fi_type fi; + fi.f = x; + return fi.i; +} +#define IS_NEGATIVE(x) (GET_FLOAT_BITS(x) < 0) #else #define IS_NEGATIVE(x) (x < 0.0F) #endif @@ -364,20 +288,36 @@ static INLINE int IS_INF_OR_NAN( float x ) *** CEILF: ceiling of float *** FLOORF: floor of float *** FABSF: absolute value of float + *** LOGF: the natural logarithm (base e) of the value + *** EXPF: raise e to the value + *** LDEXPF: multiply value by an integral power of two + *** FREXPF: extract mantissa and exponent from value ***/ -#if defined(XFree86LOADER) && defined(IN_MODULE) +#if defined(XFree86LOADER) && defined(IN_MODULE) && !defined(NO_LIBCWRAPPER) #define CEILF(x) ((GLfloat) xf86ceil(x)) #define FLOORF(x) ((GLfloat) xf86floor(x)) #define FABSF(x) ((GLfloat) xf86fabs(x)) +#define LOGF(x) ((GLfloat) xf86log(x)) +#define EXPF(x) ((GLfloat) xf86exp(x)) +#define LDEXPF(x,y) ((GLfloat) xf86ldexp(x,y)) +#define FREXPF(x,y) ((GLfloat) xf86frexp(x,y)) #elif defined(__gnu_linux__) /* C99 functions */ #define CEILF(x) ceilf(x) #define FLOORF(x) floorf(x) #define FABSF(x) fabsf(x) +#define LOGF(x) logf(x) +#define EXPF(x) expf(x) +#define LDEXPF(x,y) ldexpf(x,y) +#define FREXPF(x,y) frexpf(x,y) #else #define CEILF(x) ((GLfloat) ceil(x)) #define FLOORF(x) ((GLfloat) floor(x)) #define FABSF(x) ((GLfloat) fabs(x)) +#define LOGF(x) ((GLfloat) log(x)) +#define EXPF(x) ((GLfloat) exp(x)) +#define LDEXPF(x,y) ((GLfloat) ldexp(x,y)) +#define FREXPF(x,y) ((GLfloat) frexp(x,y)) #endif @@ -566,17 +506,6 @@ static INLINE int iceil(float f) #endif -/*** - *** COPY_FLOAT: copy a float from src to dest, avoid slow FP regs if possible - ***/ -#if defined(USE_IEEE) && !defined(DEBUG) -#define COPY_FLOAT( dst, src ) \ - ((fi_type *) &(dst))->i = ((fi_type *) (void *) &(src))->i -#else -#define COPY_FLOAT( dst, src ) (dst) = (src) -#endif - - /*** *** START_FAST_MATH: Set x86 FPU to faster, 32-bit precision mode (and save *** original mode to a temporary). @@ -656,12 +585,45 @@ do { \ } while (0) #endif #define END_FAST_MATH(x) _watcom_end_fast_math(&x) + +#elif defined(_MSC_VER) && defined(_M_IX86) +#define DEFAULT_X86_FPU 0x037f /* See GCC comments above */ +#define FAST_X86_FPU 0x003f /* See GCC comments above */ +#if defined(NO_FAST_MATH) +#define START_FAST_MATH(x) do {\ + static GLuint mask = DEFAULT_X86_FPU;\ + __asm fnstcw word ptr [x]\ + __asm fldcw word ptr [mask]\ +} while(0) +#else +#define START_FAST_MATH(x) do {\ + static GLuint mask = FAST_X86_FPU;\ + __asm fnstcw word ptr [x]\ + __asm fldcw word ptr [mask]\ +} while(0) +#endif +#define END_FAST_MATH(x) do {\ + __asm fnclex\ + __asm fldcw word ptr [x]\ +} while(0) + #else #define START_FAST_MATH(x) x = 0 #define END_FAST_MATH(x) (void)(x) #endif +/** + * Return 1 if this is a little endian machine, 0 if big endian. + */ +static INLINE GLboolean +_mesa_little_endian(void) +{ + const GLuint ui = 1; /* intentionally not static */ + return *((const GLubyte *) &ui); +} + + /********************************************************************** * Functions @@ -685,6 +647,16 @@ _mesa_align_calloc( size_t bytes, unsigned long alignment ); extern void _mesa_align_free( void *ptr ); +extern void * +_mesa_align_realloc(void *oldBuffer, size_t oldSize, size_t newSize, + unsigned long alignment); + +extern void * +_mesa_exec_malloc( GLuint size ); + +extern void +_mesa_exec_free( void *addr ); + extern void * _mesa_realloc( void *oldBuffer, size_t oldSize, size_t newSize ); @@ -700,13 +672,24 @@ _mesa_memset16( unsigned short *dst, unsigned short val, size_t n ); extern void _mesa_bzero( void *dst, size_t n ); +extern int +_mesa_memcmp( const void *s1, const void *s2, size_t n ); extern double _mesa_sin(double a); +extern float +_mesa_sinf(float a); + extern double _mesa_cos(double a); +extern float +_mesa_asinf(float x); + +extern float +_mesa_atanf(float x); + extern double _mesa_sqrtd(double x); @@ -719,8 +702,8 @@ _mesa_inv_sqrtf(float x); extern double _mesa_pow(double x, double y); -extern float -_mesa_log2(float x); +extern int +_mesa_ffs(int i); extern unsigned int _mesa_bitcount(unsigned int n); @@ -732,6 +715,10 @@ extern float _mesa_half_to_float(GLhalfARB h); +extern void * +_mesa_bsearch( const void *key, const void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *) ); + extern char * _mesa_getenv( const char *var ); @@ -771,6 +758,9 @@ _mesa_sprintf( char *str, const char *fmt, ... ); extern void _mesa_printf( const char *fmtString, ... ); +extern int +_mesa_vsprintf( char *str, const char *fmt, va_list args ); + extern void _mesa_warning( __GLcontext *gc, const char *fmtString, ... ); @@ -784,6 +774,9 @@ _mesa_error( __GLcontext *ctx, GLenum error, const char *fmtString, ... ); extern void _mesa_debug( const __GLcontext *ctx, const char *fmtString, ... ); +extern void +_mesa_exit( int status ); + extern void _mesa_init_default_imports( __GLimports *imports, void *driverCtx ); diff --git a/src/kits/opengl/mesa/main/light.c b/src/kits/opengl/mesa/main/light.c index 0cf2635765..984f7b2abc 100644 --- a/src/kits/opengl/mesa/main/light.c +++ b/src/kits/opengl/mesa/main/light.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -59,6 +59,114 @@ _mesa_ShadeModel( GLenum mode ) } +/** + * Helper function called by _mesa_Lightfv and _mesa_PopAttrib to set + * per-light state. + * For GL_POSITION and GL_SPOT_DIRECTION the params position/direction + * will have already been transformed by the modelview matrix! + * Also, all error checking should have already been done. + */ +void +_mesa_light(GLcontext *ctx, GLuint lnum, GLenum pname, const GLfloat *params) +{ + struct gl_light *light; + + ASSERT(lnum < MAX_LIGHTS); + light = &ctx->Light.Light[lnum]; + + switch (pname) { + case GL_AMBIENT: + if (TEST_EQ_4V(light->Ambient, params)) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + COPY_4V( light->Ambient, params ); + break; + case GL_DIFFUSE: + if (TEST_EQ_4V(light->Diffuse, params)) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + COPY_4V( light->Diffuse, params ); + break; + case GL_SPECULAR: + if (TEST_EQ_4V(light->Specular, params)) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + COPY_4V( light->Specular, params ); + break; + case GL_POSITION: + /* NOTE: position has already been transformed by ModelView! */ + if (TEST_EQ_4V(light->EyePosition, params)) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + COPY_4V(light->EyePosition, params); + if (light->EyePosition[3] != 0.0F) + light->_Flags |= LIGHT_POSITIONAL; + else + light->_Flags &= ~LIGHT_POSITIONAL; + break; + case GL_SPOT_DIRECTION: + /* NOTE: Direction already transformed by inverse ModelView! */ + if (TEST_EQ_3V(light->EyeDirection, params)) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + COPY_3V(light->EyeDirection, params); + break; + case GL_SPOT_EXPONENT: + ASSERT(params[0] >= 0.0); + ASSERT(params[0] <= ctx->Const.MaxSpotExponent); + if (light->SpotExponent == params[0]) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + light->SpotExponent = params[0]; + _mesa_invalidate_spot_exp_table(light); + break; + case GL_SPOT_CUTOFF: + ASSERT(params[0] == 180.0 || (params[0] >= 0.0 && params[0] <= 90.0)); + if (light->SpotCutoff == params[0]) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + light->SpotCutoff = params[0]; + light->_CosCutoffNeg = (GLfloat) (_mesa_cos(light->SpotCutoff * DEG2RAD)); + if (light->_CosCutoffNeg < 0) + light->_CosCutoff = 0; + else + light->_CosCutoff = light->_CosCutoffNeg; + if (light->SpotCutoff != 180.0F) + light->_Flags |= LIGHT_SPOT; + else + light->_Flags &= ~LIGHT_SPOT; + break; + case GL_CONSTANT_ATTENUATION: + ASSERT(params[0] >= 0.0); + if (light->ConstantAttenuation == params[0]) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + light->ConstantAttenuation = params[0]; + break; + case GL_LINEAR_ATTENUATION: + ASSERT(params[0] >= 0.0); + if (light->LinearAttenuation == params[0]) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + light->LinearAttenuation = params[0]; + break; + case GL_QUADRATIC_ATTENUATION: + ASSERT(params[0] >= 0.0); + if (light->QuadraticAttenuation == params[0]) + return; + FLUSH_VERTICES(ctx, _NEW_LIGHT); + light->QuadraticAttenuation = params[0]; + break; + default: + _mesa_problem(ctx, "Unexpected pname in _mesa_light()"); + return; + } + + if (ctx->Driver.Lightfv) + ctx->Driver.Lightfv( ctx, GL_LIGHT0 + lnum, pname, params ); +} + + void GLAPIENTRY _mesa_Lightf( GLenum light, GLenum pname, GLfloat param ) { @@ -71,124 +179,69 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params ) { GET_CURRENT_CONTEXT(ctx); GLint i = (GLint) (light - GL_LIGHT0); - struct gl_light *l = &ctx->Light.Light[i]; + GLfloat temp[4]; if (i < 0 || i >= (GLint) ctx->Const.MaxLights) { _mesa_error( ctx, GL_INVALID_ENUM, "glLight(light=0x%x)", light ); return; } + /* do particular error checks, transformations */ switch (pname) { case GL_AMBIENT: - if (TEST_EQ_4V(l->Ambient, params)) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - COPY_4V( l->Ambient, params ); - break; case GL_DIFFUSE: - if (TEST_EQ_4V(l->Diffuse, params)) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - COPY_4V( l->Diffuse, params ); - break; case GL_SPECULAR: - if (TEST_EQ_4V(l->Specular, params)) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - COPY_4V( l->Specular, params ); + /* nothing */ break; - case GL_POSITION: { - GLfloat tmp[4]; + case GL_POSITION: /* transform position by ModelView matrix */ - TRANSFORM_POINT( tmp, ctx->ModelviewMatrixStack.Top->m, params ); - if (TEST_EQ_4V(l->EyePosition, tmp)) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - COPY_4V(l->EyePosition, tmp); - if (l->EyePosition[3] != 0.0F) - l->_Flags |= LIGHT_POSITIONAL; - else - l->_Flags &= ~LIGHT_POSITIONAL; + TRANSFORM_POINT(temp, ctx->ModelviewMatrixStack.Top->m, params); + params = temp; break; - } - case GL_SPOT_DIRECTION: { - GLfloat tmp[4]; + case GL_SPOT_DIRECTION: /* transform direction by inverse modelview */ - if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY_INVERSE) { - _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { + _math_matrix_analyse(ctx->ModelviewMatrixStack.Top); } - TRANSFORM_NORMAL( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); - if (TEST_EQ_3V(l->EyeDirection, tmp)) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - COPY_3V(l->EyeDirection, tmp); + TRANSFORM_NORMAL(temp, params, ctx->ModelviewMatrixStack.Top->inv); + params = temp; break; - } case GL_SPOT_EXPONENT: - if (params[0]<0.0 || params[0]>ctx->Const.MaxSpotExponent) { - _mesa_error( ctx, GL_INVALID_VALUE, "glLight" ); + if (params[0] < 0.0 || params[0] > ctx->Const.MaxSpotExponent) { + _mesa_error(ctx, GL_INVALID_VALUE, "glLight"); return; } - if (l->SpotExponent == params[0]) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - l->SpotExponent = params[0]; - _mesa_invalidate_spot_exp_table( l ); break; case GL_SPOT_CUTOFF: - if ((params[0]<0.0 || params[0]>90.0) && params[0]!=180.0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glLight" ); + if ((params[0] < 0.0 || params[0] > 90.0) && params[0] != 180.0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glLight"); return; } - if (l->SpotCutoff == params[0]) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - l->SpotCutoff = params[0]; - l->_CosCutoff = (GLfloat) _mesa_cos(params[0]*DEG2RAD); - if (l->_CosCutoff < 0) - l->_CosCutoff = 0; - if (l->SpotCutoff != 180.0F) - l->_Flags |= LIGHT_SPOT; - else - l->_Flags &= ~LIGHT_SPOT; break; case GL_CONSTANT_ATTENUATION: - if (params[0]<0.0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glLight" ); + if (params[0] < 0.0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glLight"); return; } - if (l->ConstantAttenuation == params[0]) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - l->ConstantAttenuation = params[0]; break; case GL_LINEAR_ATTENUATION: - if (params[0]<0.0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glLight" ); + if (params[0] < 0.0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glLight"); return; } - if (l->LinearAttenuation == params[0]) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - l->LinearAttenuation = params[0]; break; case GL_QUADRATIC_ATTENUATION: - if (params[0]<0.0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glLight" ); + if (params[0] < 0.0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glLight"); return; } - if (l->QuadraticAttenuation == params[0]) - return; - FLUSH_VERTICES(ctx, _NEW_LIGHT); - l->QuadraticAttenuation = params[0]; break; default: - _mesa_error( ctx, GL_INVALID_ENUM, "glLight(pname=0x%x)", pname ); + _mesa_error(ctx, GL_INVALID_ENUM, "glLight(pname=0x%x)", pname); return; } - if (ctx->Driver.Lightfv) - ctx->Driver.Lightfv( ctx, light, pname, params ); + _mesa_light(ctx, i, pname, params); } @@ -876,7 +929,7 @@ _mesa_invalidate_shine_table( GLcontext *ctx, GLuint side ) ASSERT(side < 2); if (ctx->_ShineTable[side]) ctx->_ShineTable[side]->refcount--; - ctx->_ShineTable[side] = 0; + ctx->_ShineTable[side] = NULL; } @@ -946,14 +999,13 @@ _mesa_validate_all_lighting_tables( GLcontext *ctx ) if (!ctx->_ShineTable[1] || ctx->_ShineTable[1]->shininess != shininess) validate_shine_table( ctx, 1, shininess ); - for (i = 0 ; i < MAX_LIGHTS ; i++) + for (i = 0; i < ctx->Const.MaxLights; i++) if (ctx->Light.Light[i]._SpotExpTable[0][0] == -1) validate_spot_exp_table( &ctx->Light.Light[i] ); } - -/* +/** * Examine current lighting parameters to determine if the optimized lighting * function can be used. * Also, precompute some lighting values such as the products of light @@ -963,7 +1015,7 @@ void _mesa_update_lighting( GLcontext *ctx ) { struct gl_light *light; - ctx->Light._NeedEyeCoords = 0; + ctx->Light._NeedEyeCoords = GL_FALSE; ctx->Light._Flags = 0; if (!ctx->Light.Enabled) @@ -981,8 +1033,6 @@ _mesa_update_lighting( GLcontext *ctx ) ctx->Light._NeedEyeCoords = ((ctx->Light._Flags & LIGHT_POSITIONAL) || ctx->Light.Model.LocalViewer); - - /* XXX: This test is overkill & needs to be fixed both for software and * hardware t&l drivers. The above should be sufficient & should * be tested to verify this. @@ -990,7 +1040,6 @@ _mesa_update_lighting( GLcontext *ctx ) if (ctx->Light._NeedVertices) ctx->Light._NeedEyeCoords = GL_TRUE; - /* Precompute some shading values. Although we reference * Light.Material here, we can get away without flushing * FLUSH_UPDATE_CURRENT, as when any outstanding material changes @@ -1024,9 +1073,12 @@ _mesa_update_lighting( GLcontext *ctx ) } -/* _NEW_MODELVIEW - * _NEW_LIGHT - * _TNL_NEW_NEED_EYE_COORDS +/** + * Update state derived from light position, spot direction. + * Called upon: + * _NEW_MODELVIEW + * _NEW_LIGHT + * _TNL_NEW_NEED_EYE_COORDS * * Update on (_NEW_MODELVIEW | _NEW_LIGHT) when lighting is enabled. * Also update on lighting space changes. @@ -1050,9 +1102,11 @@ compute_light_positions( GLcontext *ctx ) foreach (light, &ctx->Light.EnabledList) { if (ctx->_NeedEyeCoords) { + /* _Position is in eye coordinate space */ COPY_4FV( light->_Position, light->EyePosition ); } else { + /* _Position is in object coordinate space */ TRANSFORM_POINT( light->_Position, ctx->ModelviewMatrixStack.Top->inv, light->EyePosition ); } @@ -1107,10 +1161,7 @@ static void update_modelview_scale( GLcontext *ctx ) { ctx->_ModelViewInvScale = 1.0F; - if (ctx->ModelviewMatrixStack.Top->flags & (MAT_FLAG_UNIFORM_SCALE | - MAT_FLAG_GENERAL_SCALE | - MAT_FLAG_GENERAL_3D | - MAT_FLAG_GENERAL) ) { + if (!_math_matrix_is_length_preserving(ctx->ModelviewMatrixStack.Top)) { const GLfloat *m = ctx->ModelviewMatrixStack.Top->inv; GLfloat f = m[2] * m[2] + m[6] * m[6] + m[10] * m[10]; if (f < 1e-12) f = 1.0; @@ -1122,7 +1173,8 @@ update_modelview_scale( GLcontext *ctx ) } -/* Bring uptodate any state that relies on _NeedEyeCoords. +/** + * Bring up to date any state that relies on _NeedEyeCoords. */ void _mesa_update_tnl_spaces( GLcontext *ctx, GLuint new_state ) @@ -1130,19 +1182,17 @@ _mesa_update_tnl_spaces( GLcontext *ctx, GLuint new_state ) const GLuint oldneedeyecoords = ctx->_NeedEyeCoords; (void) new_state; - ctx->_NeedEyeCoords = 0; + ctx->_NeedEyeCoords = GL_FALSE; if (ctx->_ForceEyeCoords || (ctx->Texture._GenFlags & TEXGEN_NEED_EYE_COORD) || ctx->Point._Attenuated || ctx->Light._NeedEyeCoords) - ctx->_NeedEyeCoords = 1; + ctx->_NeedEyeCoords = GL_TRUE; if (ctx->Light.Enabled && - !TEST_MAT_FLAGS( ctx->ModelviewMatrixStack.Top, - MAT_FLAGS_LENGTH_PRESERVING)) - ctx->_NeedEyeCoords = 1; - + !_math_matrix_is_length_preserving(ctx->ModelviewMatrixStack.Top)) + ctx->_NeedEyeCoords = GL_TRUE; /* Check if the truth-value interpretations of the bitfields have * changed: @@ -1171,7 +1221,8 @@ _mesa_update_tnl_spaces( GLcontext *ctx, GLuint new_state ) } -/* Drivers may need this if the hardware tnl unit doesn't support the +/** + * Drivers may need this if the hardware tnl unit doesn't support the * light-in-modelspace optimization. It's also useful for debugging. */ void @@ -1215,6 +1266,7 @@ init_light( struct gl_light *l, GLuint n ) l->SpotExponent = 0.0; _mesa_invalidate_spot_exp_table( l ); l->SpotCutoff = 180.0; + l->_CosCutoffNeg = -1.0f; l->_CosCutoff = 0.0; /* KW: -ve values not admitted */ l->ConstantAttenuation = 1.0; l->LinearAttenuation = 0.0; @@ -1262,6 +1314,9 @@ init_material( struct gl_material *m ) } +/** + * Initialize all lighting state for the given context. + */ void _mesa_init_lighting( GLcontext *ctx ) { @@ -1281,9 +1336,11 @@ _mesa_init_lighting( GLcontext *ctx ) ctx->Light.ColorMaterialMode = GL_AMBIENT_AND_DIFFUSE; ctx->Light.ColorMaterialBitmask = _mesa_material_bitmask( ctx, GL_FRONT_AND_BACK, - GL_AMBIENT_AND_DIFFUSE, ~0, 0 ); + GL_AMBIENT_AND_DIFFUSE, ~0, + NULL ); ctx->Light.ColorMaterialEnabled = GL_FALSE; + ctx->Light.ClampVertexColor = GL_TRUE; /* Lighting miscellaneous */ ctx->_ShineTabList = MALLOC_STRUCT( gl_shine_tab ); @@ -1297,12 +1354,15 @@ _mesa_init_lighting( GLcontext *ctx ) } /* Miscellaneous */ - ctx->Light._NeedEyeCoords = 0; - ctx->_NeedEyeCoords = 0; + ctx->Light._NeedEyeCoords = GL_FALSE; + ctx->_NeedEyeCoords = GL_FALSE; ctx->_ModelViewInvScale = 1.0; } +/** + * Deallocate malloc'd lighting state attached to given context. + */ void _mesa_free_lighting_data( GLcontext *ctx ) { @@ -1310,7 +1370,7 @@ _mesa_free_lighting_data( GLcontext *ctx ) /* Free lighting shininess exponentiation table */ foreach_s( s, tmps, ctx->_ShineTabList ) { - FREE( s ); + _mesa_free( s ); } - FREE( ctx->_ShineTabList ); + _mesa_free( ctx->_ShineTabList ); } diff --git a/src/kits/opengl/mesa/main/light.h b/src/kits/opengl/mesa/main/light.h index 1f19019450..f47fe58a83 100644 --- a/src/kits/opengl/mesa/main/light.h +++ b/src/kits/opengl/mesa/main/light.h @@ -78,6 +78,10 @@ extern void GLAPIENTRY _mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params ); +extern void +_mesa_light(GLcontext *ctx, GLuint lnum, GLenum pname, const GLfloat *params); + + /* Lerp between adjacent values in the f(x) lookup table, giving a * continuous function, with adequeate overall accuracy. (Though * still pretty good compared to a straight lookup). diff --git a/src/kits/opengl/mesa/main/macros.h b/src/kits/opengl/mesa/main/macros.h index f13357d391..fbbcd4e269 100644 --- a/src/kits/opengl/mesa/main/macros.h +++ b/src/kits/opengl/mesa/main/macros.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.0 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -57,9 +57,6 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; /** Convert GLushort in [0,65536] to GLfloat in [0.0,1.0] */ #define USHORT_TO_FLOAT(S) ((GLfloat) (S) * (1.0F / 65535.0F)) -/** Convert GLfloat in [0.0,1.0] to GLushort in [0,65536] */ -#define FLOAT_TO_USHORT(X) ((GLushort) (GLint) ((X) * 65535.0F)) - /** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */ #define SHORT_TO_FLOAT(S) ((2.0F * (S) + 1.0F) * (1.0F/65535.0F)) @@ -176,16 +173,20 @@ do { \ } while (0) #endif -/** Copy a 4-element float vector (Use COPY_FLOAT to avoid loading FPU) */ -#define COPY_4FV( DST, SRC ) \ -do { \ - COPY_FLOAT((DST)[0], (SRC)[0]); \ - COPY_FLOAT((DST)[1], (SRC)[1]); \ - COPY_FLOAT((DST)[2], (SRC)[2]); \ - COPY_FLOAT((DST)[3], (SRC)[3]); \ +/** + * Copy a 4-element float vector (avoid using FPU registers) + * XXX Could use two 64-bit moves on 64-bit systems + */ +#define COPY_4FV( DST, SRC ) \ +do { \ + const GLuint *_s = (const GLuint *) (SRC); \ + GLuint *_d = (GLuint *) (DST); \ + _d[0] = _s[0]; \ + _d[1] = _s[1]; \ + _d[2] = _s[2]; \ + _d[3] = _s[3]; \ } while (0) - /** Copy \p SZ elements into a 4-element vector */ #define COPY_SZ_4V(DST, SZ, SRC) \ do { \ @@ -510,7 +511,18 @@ do { \ (DST)[1] += S; \ } while (0) +/** Assign scalers to short vectors */ +#define ASSIGN_2V( V, V0, V1 ) \ +do { \ + V[0] = V0; \ + V[1] = V1; \ +} while(0) +/*@}*/ + + +/** \name Linear interpolation macros */ +/*@{*/ /** * Linear interpolation @@ -584,15 +596,6 @@ do { \ } \ } while(0) - - -/** Assign scalers to short vectors */ -#define ASSIGN_2V( V, V0, V1 ) \ -do { \ - V[0] = V0; \ - V[1] = V1; \ -} while(0) - /*@}*/ diff --git a/src/kits/opengl/mesa/main/matrix.c b/src/kits/opengl/mesa/main/matrix.c index 82ea37508d..7339b0ce40 100644 --- a/src/kits/opengl/mesa/main/matrix.c +++ b/src/kits/opengl/mesa/main/matrix.c @@ -1,18 +1,8 @@ -/** - * \file matrix.c - * Matrix operations. - * - * \note - * -# 4x4 transformation matrices are stored in memory in column major order. - * -# Points/vertices are to be thought of as column vectors. - * -# Transformation of a point p by a matrix M is: p' = M * p - */ - /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.3 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -33,6 +23,17 @@ */ +/** + * \file matrix.c + * Matrix operations. + * + * \note + * -# 4x4 transformation matrices are stored in memory in column major order. + * -# Points/vertices are to be thought of as column vectors. + * -# Transformation of a point p by a matrix M is: p' = M * p + */ + + #include "glheader.h" #include "imports.h" #include "context.h" @@ -159,6 +160,10 @@ _mesa_MatrixMode( GLenum mode ) ctx->CurrentStack = &ctx->ProjectionMatrixStack; break; case GL_TEXTURE: + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glMatrixMode(texcoord unit)"); + return; + } ctx->CurrentStack = &ctx->TextureMatrixStack[ctx->Texture.CurrentUnit]; break; case GL_COLOR: @@ -551,6 +556,7 @@ _mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height ) _mesa_set_viewport(ctx, x, y, width, height); } + /** * Set new viewport parameters and update derived state (the _WindowMap * matrix). Usually called from _mesa_Viewport(). @@ -559,19 +565,11 @@ _mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height ) * \param x, y coordinates of the lower left corner of the viewport rectangle. * \param width width of the viewport rectangle. * \param height height of the viewport rectangle. - * - * Verifies the parameters, clamps them to the implementation dependent range - * and updates __GLcontextRec::Viewport. Computes the scale and bias values for - * the drivers and notifies the driver via the dd_function_table::Viewport - * callback. */ void _mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { - const GLfloat n = ctx->Viewport.Near; - const GLfloat f = ctx->Viewport.Far; - if (MESA_VERBOSE & VERBOSE_API) _mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height); @@ -581,37 +579,28 @@ _mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, return; } - /* clamp width, and height to implementation dependent range */ - width = CLAMP( width, 1, MAX_WIDTH ); - height = CLAMP( height, 1, MAX_HEIGHT ); + /* clamp width and height to the implementation dependent range */ + width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth); + height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight); - /* Save viewport */ ctx->Viewport.X = x; ctx->Viewport.Width = width; ctx->Viewport.Y = y; ctx->Viewport.Height = height; - - /* XXX send transposed width/height to Driver.Viewport() below??? */ - if (ctx->_RotateMode) { - GLint tmp, tmps; - tmp = x; x = y; y = tmp; - tmps = width; width = height; height = tmps; - } - - /* compute scale and bias values :: This is really driver-specific - * and should be maintained elsewhere if at all. NOTE: RasterPos - * uses this. - */ - ctx->Viewport._WindowMap.m[MAT_SX] = (GLfloat) width / 2.0F; - ctx->Viewport._WindowMap.m[MAT_TX] = ctx->Viewport._WindowMap.m[MAT_SX] + x; - ctx->Viewport._WindowMap.m[MAT_SY] = (GLfloat) height / 2.0F; - ctx->Viewport._WindowMap.m[MAT_TY] = ctx->Viewport._WindowMap.m[MAT_SY] + y; - ctx->Viewport._WindowMap.m[MAT_SZ] = ctx->DepthMaxF * ((f - n) / 2.0F); - ctx->Viewport._WindowMap.m[MAT_TZ] = ctx->DepthMaxF * ((f - n) / 2.0F + n); - ctx->Viewport._WindowMap.flags = MAT_FLAG_GENERAL_SCALE|MAT_FLAG_TRANSLATION; - ctx->Viewport._WindowMap.type = MATRIX_3D_NO_ROT; ctx->NewState |= _NEW_VIEWPORT; +#if 1 + /* XXX remove this someday. Currently the DRI drivers rely on + * the WindowMap matrix being up to date in the driver's Viewport + * and DepthRange functions. + */ + _math_matrix_viewport(&ctx->Viewport._WindowMap, + ctx->Viewport.X, ctx->Viewport.Y, + ctx->Viewport.Width, ctx->Viewport.Height, + ctx->Viewport.Near, ctx->Viewport.Far, + ctx->DrawBuffer->_DepthMaxF); +#endif + if (ctx->Driver.Viewport) { /* Many drivers will use this call to check for window size changes * and reallocate the z/stencil/accum/etc buffers if needed. @@ -622,36 +611,39 @@ _mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, #if _HAVE_FULL_GL +/** + * Called by glDepthRange + * + * \param nearval specifies the Z buffer value which should correspond to + * the near clip plane + * \param farval specifies the Z buffer value which should correspond to + * the far clip plane + */ void GLAPIENTRY _mesa_DepthRange( GLclampd nearval, GLclampd farval ) { - /* - * nearval - specifies mapping of the near clipping plane to window - * coordinates, default is 0 - * farval - specifies mapping of the far clipping plane to window - * coordinates, default is 1 - * - * After clipping and div by w, z coords are in -1.0 to 1.0, - * corresponding to near and far clipping planes. glDepthRange - * specifies a linear mapping of the normalized z coords in - * this range to window z coords. - */ - GLfloat n, f; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); if (MESA_VERBOSE&VERBOSE_API) _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval); - n = (GLfloat) CLAMP( nearval, 0.0, 1.0 ); - f = (GLfloat) CLAMP( farval, 0.0, 1.0 ); - - ctx->Viewport.Near = n; - ctx->Viewport.Far = f; - ctx->Viewport._WindowMap.m[MAT_SZ] = ctx->DepthMaxF * ((f - n) / 2.0F); - ctx->Viewport._WindowMap.m[MAT_TZ] = ctx->DepthMaxF * ((f - n) / 2.0F + n); + ctx->Viewport.Near = (GLfloat) CLAMP( nearval, 0.0, 1.0 ); + ctx->Viewport.Far = (GLfloat) CLAMP( farval, 0.0, 1.0 ); ctx->NewState |= _NEW_VIEWPORT; +#if 1 + /* XXX remove this someday. Currently the DRI drivers rely on + * the WindowMap matrix being up to date in the driver's Viewport + * and DepthRange functions. + */ + _math_matrix_viewport(&ctx->Viewport._WindowMap, + ctx->Viewport.X, ctx->Viewport.Y, + ctx->Viewport.Width, ctx->Viewport.Height, + ctx->Viewport.Near, ctx->Viewport.Far, + ctx->DrawBuffer->_DepthMaxF); +#endif + if (ctx->Driver.DepthRange) { (*ctx->Driver.DepthRange)( ctx, nearval, farval ); } @@ -910,6 +902,8 @@ void _mesa_init_transform( GLcontext *ctx ) */ void _mesa_init_viewport( GLcontext *ctx ) { + GLfloat depthMax = 65535.0F; /* sorf of arbitrary */ + /* Viewport group */ ctx->Viewport.X = 0; ctx->Viewport.Y = 0; @@ -919,15 +913,8 @@ void _mesa_init_viewport( GLcontext *ctx ) ctx->Viewport.Far = 1.0; _math_matrix_ctr(&ctx->Viewport._WindowMap); -#define Sz 10 -#define Tz 14 - ctx->Viewport._WindowMap.m[Sz] = 0.5F * ctx->DepthMaxF; - ctx->Viewport._WindowMap.m[Tz] = 0.5F * ctx->DepthMaxF; -#undef Sz -#undef Tz - - ctx->Viewport._WindowMap.flags = MAT_FLAG_GENERAL_SCALE|MAT_FLAG_TRANSLATION; - ctx->Viewport._WindowMap.type = MATRIX_3D_NO_ROT; + _math_matrix_viewport(&ctx->Viewport._WindowMap, 0, 0, 0, 0, + 0.0F, 1.0F, depthMax); } diff --git a/src/kits/opengl/mesa/main/mipmap.c b/src/kits/opengl/mesa/main/mipmap.c new file mode 100644 index 0000000000..f154bd4651 --- /dev/null +++ b/src/kits/opengl/mesa/main/mipmap.c @@ -0,0 +1,1147 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.2 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * \file mipmap.c mipmap generation and teximage resizing functions. + */ + +#include "imports.h" +#include "mipmap.h" +#include "texcompress.h" +#include "texformat.h" +#include "teximage.h" +#include "image.h" + + + +/** + * Average together two rows of a source image to produce a single new + * row in the dest image. It's legal for the two source rows to point + * to the same data. The source width must be equal to either the + * dest width or two times the dest width. + */ +static void +do_row(const struct gl_texture_format *format, GLint srcWidth, + const GLvoid *srcRowA, const GLvoid *srcRowB, + GLint dstWidth, GLvoid *dstRow) +{ + const GLuint k0 = (srcWidth == dstWidth) ? 0 : 1; + const GLuint colStride = (srcWidth == dstWidth) ? 1 : 2; + + /* This assertion is no longer valid with non-power-of-2 textures + assert(srcWidth == dstWidth || srcWidth == 2 * dstWidth); + */ + + switch (format->MesaFormat) { + case MESA_FORMAT_RGBA: + { + GLuint i, j, k; + const GLchan (*rowA)[4] = (const GLchan (*)[4]) srcRowA; + const GLchan (*rowB)[4] = (const GLchan (*)[4]) srcRowB; + GLchan (*dst)[4] = (GLchan (*)[4]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) / 4; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) / 4; + dst[i][2] = (rowA[j][2] + rowA[k][2] + + rowB[j][2] + rowB[k][2]) / 4; + dst[i][3] = (rowA[j][3] + rowA[k][3] + + rowB[j][3] + rowB[k][3]) / 4; + } + } + return; + case MESA_FORMAT_RGB: + { + GLuint i, j, k; + const GLchan (*rowA)[3] = (const GLchan (*)[3]) srcRowA; + const GLchan (*rowB)[3] = (const GLchan (*)[3]) srcRowB; + GLchan (*dst)[3] = (GLchan (*)[3]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) / 4; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) / 4; + dst[i][2] = (rowA[j][2] + rowA[k][2] + + rowB[j][2] + rowB[k][2]) / 4; + } + } + return; + case MESA_FORMAT_ALPHA: + case MESA_FORMAT_LUMINANCE: + case MESA_FORMAT_INTENSITY: + { + GLuint i, j, k; + const GLchan *rowA = (const GLchan *) srcRowA; + const GLchan *rowB = (const GLchan *) srcRowB; + GLchan *dst = (GLchan *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4; + } + } + return; + case MESA_FORMAT_LUMINANCE_ALPHA: + { + GLuint i, j, k; + const GLchan (*rowA)[2] = (const GLchan (*)[2]) srcRowA; + const GLchan (*rowB)[2] = (const GLchan (*)[2]) srcRowB; + GLchan (*dst)[2] = (GLchan (*)[2]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) / 4; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) / 4; + } + } + return; + case MESA_FORMAT_Z32: + { + GLuint i, j, k; + const GLuint *rowA = (const GLuint *) srcRowA; + const GLuint *rowB = (const GLuint *) srcRowB; + GLfloat *dst = (GLfloat *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i] = rowA[j] / 4 + rowA[k] / 4 + rowB[j] / 4 + rowB[k] / 4; + } + } + return; + case MESA_FORMAT_Z16: + { + GLuint i, j, k; + const GLushort *rowA = (const GLushort *) srcRowA; + const GLushort *rowB = (const GLushort *) srcRowB; + GLushort *dst = (GLushort *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4; + } + } + return; + /* Begin hardware formats */ + case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_RGBA8888_REV: + case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_ARGB8888_REV: +#if FEATURE_EXT_texture_sRGB + case MESA_FORMAT_SRGBA8: +#endif + { + GLuint i, j, k; + const GLubyte (*rowA)[4] = (const GLubyte (*)[4]) srcRowA; + const GLubyte (*rowB)[4] = (const GLubyte (*)[4]) srcRowB; + GLubyte (*dst)[4] = (GLubyte (*)[4]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) / 4; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) / 4; + dst[i][2] = (rowA[j][2] + rowA[k][2] + + rowB[j][2] + rowB[k][2]) / 4; + dst[i][3] = (rowA[j][3] + rowA[k][3] + + rowB[j][3] + rowB[k][3]) / 4; + } + } + return; + case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR888: +#if FEATURE_EXT_texture_sRGB + case MESA_FORMAT_SRGB8: +#endif + { + GLuint i, j, k; + const GLubyte (*rowA)[3] = (const GLubyte (*)[3]) srcRowA; + const GLubyte (*rowB)[3] = (const GLubyte (*)[3]) srcRowB; + GLubyte (*dst)[3] = (GLubyte (*)[3]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) / 4; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) / 4; + dst[i][2] = (rowA[j][2] + rowA[k][2] + + rowB[j][2] + rowB[k][2]) / 4; + } + } + return; + case MESA_FORMAT_RGB565: + case MESA_FORMAT_RGB565_REV: + { + GLuint i, j, k; + const GLushort *rowA = (const GLushort *) srcRowA; + const GLushort *rowB = (const GLushort *) srcRowB; + GLushort *dst = (GLushort *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + const GLint rowAr0 = rowA[j] & 0x1f; + const GLint rowAr1 = rowA[k] & 0x1f; + const GLint rowBr0 = rowB[j] & 0x1f; + const GLint rowBr1 = rowB[k] & 0x1f; + const GLint rowAg0 = (rowA[j] >> 5) & 0x3f; + const GLint rowAg1 = (rowA[k] >> 5) & 0x3f; + const GLint rowBg0 = (rowB[j] >> 5) & 0x3f; + const GLint rowBg1 = (rowB[k] >> 5) & 0x3f; + const GLint rowAb0 = (rowA[j] >> 11) & 0x1f; + const GLint rowAb1 = (rowA[k] >> 11) & 0x1f; + const GLint rowBb0 = (rowB[j] >> 11) & 0x1f; + const GLint rowBb1 = (rowB[k] >> 11) & 0x1f; + const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; + const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; + const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; + dst[i] = (blue << 11) | (green << 5) | red; + } + } + return; + case MESA_FORMAT_ARGB4444: + case MESA_FORMAT_ARGB4444_REV: + { + GLuint i, j, k; + const GLushort *rowA = (const GLushort *) srcRowA; + const GLushort *rowB = (const GLushort *) srcRowB; + GLushort *dst = (GLushort *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + const GLint rowAr0 = rowA[j] & 0xf; + const GLint rowAr1 = rowA[k] & 0xf; + const GLint rowBr0 = rowB[j] & 0xf; + const GLint rowBr1 = rowB[k] & 0xf; + const GLint rowAg0 = (rowA[j] >> 4) & 0xf; + const GLint rowAg1 = (rowA[k] >> 4) & 0xf; + const GLint rowBg0 = (rowB[j] >> 4) & 0xf; + const GLint rowBg1 = (rowB[k] >> 4) & 0xf; + const GLint rowAb0 = (rowA[j] >> 8) & 0xf; + const GLint rowAb1 = (rowA[k] >> 8) & 0xf; + const GLint rowBb0 = (rowB[j] >> 8) & 0xf; + const GLint rowBb1 = (rowB[k] >> 8) & 0xf; + const GLint rowAa0 = (rowA[j] >> 12) & 0xf; + const GLint rowAa1 = (rowA[k] >> 12) & 0xf; + const GLint rowBa0 = (rowB[j] >> 12) & 0xf; + const GLint rowBa1 = (rowB[k] >> 12) & 0xf; + const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; + const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; + const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; + const GLint alpha = (rowAa0 + rowAa1 + rowBa0 + rowBa1) >> 2; + dst[i] = (alpha << 12) | (blue << 8) | (green << 4) | red; + } + } + return; + case MESA_FORMAT_ARGB1555: + case MESA_FORMAT_ARGB1555_REV: /* XXX broken? */ + { + GLuint i, j, k; + const GLushort *rowA = (const GLushort *) srcRowA; + const GLushort *rowB = (const GLushort *) srcRowB; + GLushort *dst = (GLushort *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + const GLint rowAr0 = rowA[j] & 0x1f; + const GLint rowAr1 = rowA[k] & 0x1f; + const GLint rowBr0 = rowB[j] & 0x1f; + const GLint rowBr1 = rowB[k] & 0xf; + const GLint rowAg0 = (rowA[j] >> 5) & 0x1f; + const GLint rowAg1 = (rowA[k] >> 5) & 0x1f; + const GLint rowBg0 = (rowB[j] >> 5) & 0x1f; + const GLint rowBg1 = (rowB[k] >> 5) & 0x1f; + const GLint rowAb0 = (rowA[j] >> 10) & 0x1f; + const GLint rowAb1 = (rowA[k] >> 10) & 0x1f; + const GLint rowBb0 = (rowB[j] >> 10) & 0x1f; + const GLint rowBb1 = (rowB[k] >> 10) & 0x1f; + const GLint rowAa0 = (rowA[j] >> 15) & 0x1; + const GLint rowAa1 = (rowA[k] >> 15) & 0x1; + const GLint rowBa0 = (rowB[j] >> 15) & 0x1; + const GLint rowBa1 = (rowB[k] >> 15) & 0x1; + const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; + const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; + const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; + const GLint alpha = (rowAa0 + rowAa1 + rowBa0 + rowBa1) >> 2; + dst[i] = (alpha << 15) | (blue << 10) | (green << 5) | red; + } + } + return; + case MESA_FORMAT_AL88: + case MESA_FORMAT_AL88_REV: +#if FEATURE_EXT_texture_sRGB + case MESA_FORMAT_SLA8: +#endif + { + GLuint i, j, k; + const GLubyte (*rowA)[2] = (const GLubyte (*)[2]) srcRowA; + const GLubyte (*rowB)[2] = (const GLubyte (*)[2]) srcRowB; + GLubyte (*dst)[2] = (GLubyte (*)[2]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) >> 2; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) >> 2; + } + } + return; + case MESA_FORMAT_RGB332: + { + GLuint i, j, k; + const GLubyte *rowA = (const GLubyte *) srcRowA; + const GLubyte *rowB = (const GLubyte *) srcRowB; + GLubyte *dst = (GLubyte *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + const GLint rowAr0 = rowA[j] & 0x3; + const GLint rowAr1 = rowA[k] & 0x3; + const GLint rowBr0 = rowB[j] & 0x3; + const GLint rowBr1 = rowB[k] & 0x3; + const GLint rowAg0 = (rowA[j] >> 2) & 0x7; + const GLint rowAg1 = (rowA[k] >> 2) & 0x7; + const GLint rowBg0 = (rowB[j] >> 2) & 0x7; + const GLint rowBg1 = (rowB[k] >> 2) & 0x7; + const GLint rowAb0 = (rowA[j] >> 5) & 0x7; + const GLint rowAb1 = (rowA[k] >> 5) & 0x7; + const GLint rowBb0 = (rowB[j] >> 5) & 0x7; + const GLint rowBb1 = (rowB[k] >> 5) & 0x7; + const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; + const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; + const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; + dst[i] = (blue << 5) | (green << 2) | red; + } + } + return; + case MESA_FORMAT_A8: + case MESA_FORMAT_L8: + case MESA_FORMAT_I8: + case MESA_FORMAT_CI8: +#if FEATURE_EXT_texture_sRGB + case MESA_FORMAT_SL8: +#endif + { + GLuint i, j, k; + const GLubyte *rowA = (const GLubyte *) srcRowA; + const GLubyte *rowB = (const GLubyte *) srcRowB; + GLubyte *dst = (GLubyte *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) >> 2; + } + } + return; + case MESA_FORMAT_RGBA_FLOAT32: + { + GLuint i, j, k; + const GLfloat (*rowA)[4] = (const GLfloat (*)[4]) srcRowA; + const GLfloat (*rowB)[4] = (const GLfloat (*)[4]) srcRowB; + GLfloat (*dst)[4] = (GLfloat (*)[4]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) * 0.25F; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) * 0.25F; + dst[i][2] = (rowA[j][2] + rowA[k][2] + + rowB[j][2] + rowB[k][2]) * 0.25F; + dst[i][3] = (rowA[j][3] + rowA[k][3] + + rowB[j][3] + rowB[k][3]) * 0.25F; + } + } + return; + case MESA_FORMAT_RGBA_FLOAT16: + { + GLuint i, j, k, comp; + const GLhalfARB (*rowA)[4] = (const GLhalfARB (*)[4]) srcRowA; + const GLhalfARB (*rowB)[4] = (const GLhalfARB (*)[4]) srcRowB; + GLhalfARB (*dst)[4] = (GLhalfARB (*)[4]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + for (comp = 0; comp < 4; comp++) { + GLfloat aj, ak, bj, bk; + aj = _mesa_half_to_float(rowA[j][comp]); + ak = _mesa_half_to_float(rowA[k][comp]); + bj = _mesa_half_to_float(rowB[j][comp]); + bk = _mesa_half_to_float(rowB[k][comp]); + dst[i][comp] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); + } + } + } + return; + case MESA_FORMAT_RGB_FLOAT32: + { + GLuint i, j, k; + const GLfloat (*rowA)[3] = (const GLfloat (*)[3]) srcRowA; + const GLfloat (*rowB)[3] = (const GLfloat (*)[3]) srcRowB; + GLfloat (*dst)[3] = (GLfloat (*)[3]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) * 0.25F; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) * 0.25F; + dst[i][2] = (rowA[j][2] + rowA[k][2] + + rowB[j][2] + rowB[k][2]) * 0.25F; + } + } + return; + case MESA_FORMAT_RGB_FLOAT16: + { + GLuint i, j, k, comp; + const GLhalfARB (*rowA)[3] = (const GLhalfARB (*)[3]) srcRowA; + const GLhalfARB (*rowB)[3] = (const GLhalfARB (*)[3]) srcRowB; + GLhalfARB (*dst)[3] = (GLhalfARB (*)[3]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + for (comp = 0; comp < 3; comp++) { + GLfloat aj, ak, bj, bk; + aj = _mesa_half_to_float(rowA[j][comp]); + ak = _mesa_half_to_float(rowA[k][comp]); + bj = _mesa_half_to_float(rowB[j][comp]); + bk = _mesa_half_to_float(rowB[k][comp]); + dst[i][comp] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); + } + } + } + return; + case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32: + { + GLuint i, j, k; + const GLfloat (*rowA)[2] = (const GLfloat (*)[2]) srcRowA; + const GLfloat (*rowB)[2] = (const GLfloat (*)[2]) srcRowB; + GLfloat (*dst)[2] = (GLfloat (*)[2]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + + rowB[j][0] + rowB[k][0]) * 0.25F; + dst[i][1] = (rowA[j][1] + rowA[k][1] + + rowB[j][1] + rowB[k][1]) * 0.25F; + } + } + return; + case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16: + { + GLuint i, j, k, comp; + const GLhalfARB (*rowA)[2] = (const GLhalfARB (*)[2]) srcRowA; + const GLhalfARB (*rowB)[2] = (const GLhalfARB (*)[2]) srcRowB; + GLhalfARB (*dst)[2] = (GLhalfARB (*)[2]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + for (comp = 0; comp < 2; comp++) { + GLfloat aj, ak, bj, bk; + aj = _mesa_half_to_float(rowA[j][comp]); + ak = _mesa_half_to_float(rowA[k][comp]); + bj = _mesa_half_to_float(rowB[j][comp]); + bk = _mesa_half_to_float(rowB[k][comp]); + dst[i][comp] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); + } + } + } + return; + case MESA_FORMAT_ALPHA_FLOAT32: + case MESA_FORMAT_LUMINANCE_FLOAT32: + case MESA_FORMAT_INTENSITY_FLOAT32: + { + GLuint i, j, k; + const GLfloat *rowA = (const GLfloat *) srcRowA; + const GLfloat *rowB = (const GLfloat *) srcRowB; + GLfloat *dst = (GLfloat *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) * 0.25F; + } + } + return; + case MESA_FORMAT_ALPHA_FLOAT16: + case MESA_FORMAT_LUMINANCE_FLOAT16: + case MESA_FORMAT_INTENSITY_FLOAT16: + { + GLuint i, j, k; + const GLhalfARB *rowA = (const GLhalfARB *) srcRowA; + const GLhalfARB *rowB = (const GLhalfARB *) srcRowB; + GLhalfARB *dst = (GLhalfARB *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + GLfloat aj, ak, bj, bk; + aj = _mesa_half_to_float(rowA[j]); + ak = _mesa_half_to_float(rowA[k]); + bj = _mesa_half_to_float(rowB[j]); + bk = _mesa_half_to_float(rowB[k]); + dst[i] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); + } + } + return; + + default: + _mesa_problem(NULL, "bad format in do_row()"); + } +} + + +/* + * These functions generate a 1/2-size mipmap image from a source image. + * Texture borders are handled by copying or averaging the source image's + * border texels, depending on the scale-down factor. + */ + +static void +make_1d_mipmap(const struct gl_texture_format *format, GLint border, + GLint srcWidth, const GLubyte *srcPtr, + GLint dstWidth, GLubyte *dstPtr) +{ + const GLint bpt = format->TexelBytes; + const GLubyte *src; + GLubyte *dst; + + /* skip the border pixel, if any */ + src = srcPtr + border * bpt; + dst = dstPtr + border * bpt; + + /* we just duplicate the input row, kind of hack, saves code */ + do_row(format, srcWidth - 2 * border, src, src, + dstWidth - 2 * border, dst); + + if (border) { + /* copy left-most pixel from source */ + MEMCPY(dstPtr, srcPtr, bpt); + /* copy right-most pixel from source */ + MEMCPY(dstPtr + (dstWidth - 1) * bpt, + srcPtr + (srcWidth - 1) * bpt, + bpt); + } +} + + +/** + * XXX need to use the tex image's row stride! + */ +static void +make_2d_mipmap(const struct gl_texture_format *format, GLint border, + GLint srcWidth, GLint srcHeight, const GLubyte *srcPtr, + GLint dstWidth, GLint dstHeight, GLubyte *dstPtr) +{ + const GLint bpt = format->TexelBytes; + const GLint srcWidthNB = srcWidth - 2 * border; /* sizes w/out border */ + const GLint dstWidthNB = dstWidth - 2 * border; + const GLint dstHeightNB = dstHeight - 2 * border; + const GLint srcRowStride = bpt * srcWidth; + const GLint dstRowStride = bpt * dstWidth; + const GLubyte *srcA, *srcB; + GLubyte *dst; + GLint row; + + /* Compute src and dst pointers, skipping any border */ + srcA = srcPtr + border * ((srcWidth + 1) * bpt); + if (srcHeight > 1) + srcB = srcA + srcRowStride; + else + srcB = srcA; + dst = dstPtr + border * ((dstWidth + 1) * bpt); + + for (row = 0; row < dstHeightNB; row++) { + do_row(format, srcWidthNB, srcA, srcB, + dstWidthNB, dst); + srcA += 2 * srcRowStride; + srcB += 2 * srcRowStride; + dst += dstRowStride; + } + + /* This is ugly but probably won't be used much */ + if (border > 0) { + /* fill in dest border */ + /* lower-left border pixel */ + MEMCPY(dstPtr, srcPtr, bpt); + /* lower-right border pixel */ + MEMCPY(dstPtr + (dstWidth - 1) * bpt, + srcPtr + (srcWidth - 1) * bpt, bpt); + /* upper-left border pixel */ + MEMCPY(dstPtr + dstWidth * (dstHeight - 1) * bpt, + srcPtr + srcWidth * (srcHeight - 1) * bpt, bpt); + /* upper-right border pixel */ + MEMCPY(dstPtr + (dstWidth * dstHeight - 1) * bpt, + srcPtr + (srcWidth * srcHeight - 1) * bpt, bpt); + /* lower border */ + do_row(format, srcWidthNB, + srcPtr + bpt, + srcPtr + bpt, + dstWidthNB, dstPtr + bpt); + /* upper border */ + do_row(format, srcWidthNB, + srcPtr + (srcWidth * (srcHeight - 1) + 1) * bpt, + srcPtr + (srcWidth * (srcHeight - 1) + 1) * bpt, + dstWidthNB, + dstPtr + (dstWidth * (dstHeight - 1) + 1) * bpt); + /* left and right borders */ + if (srcHeight == dstHeight) { + /* copy border pixel from src to dst */ + for (row = 1; row < srcHeight; row++) { + MEMCPY(dstPtr + dstWidth * row * bpt, + srcPtr + srcWidth * row * bpt, bpt); + MEMCPY(dstPtr + (dstWidth * row + dstWidth - 1) * bpt, + srcPtr + (srcWidth * row + srcWidth - 1) * bpt, bpt); + } + } + else { + /* average two src pixels each dest pixel */ + for (row = 0; row < dstHeightNB; row += 2) { + do_row(format, 1, + srcPtr + (srcWidth * (row * 2 + 1)) * bpt, + srcPtr + (srcWidth * (row * 2 + 2)) * bpt, + 1, dstPtr + (dstWidth * row + 1) * bpt); + do_row(format, 1, + srcPtr + (srcWidth * (row * 2 + 1) + srcWidth - 1) * bpt, + srcPtr + (srcWidth * (row * 2 + 2) + srcWidth - 1) * bpt, + 1, dstPtr + (dstWidth * row + 1 + dstWidth - 1) * bpt); + } + } + } +} + + +static void +make_3d_mipmap(const struct gl_texture_format *format, GLint border, + GLint srcWidth, GLint srcHeight, GLint srcDepth, + const GLubyte *srcPtr, + GLint dstWidth, GLint dstHeight, GLint dstDepth, + GLubyte *dstPtr) +{ + const GLint bpt = format->TexelBytes; + const GLint srcWidthNB = srcWidth - 2 * border; /* sizes w/out border */ + const GLint srcDepthNB = srcDepth - 2 * border; + const GLint dstWidthNB = dstWidth - 2 * border; + const GLint dstHeightNB = dstHeight - 2 * border; + const GLint dstDepthNB = dstDepth - 2 * border; + GLvoid *tmpRowA, *tmpRowB; + GLint img, row; + GLint bytesPerSrcImage, bytesPerDstImage; + GLint bytesPerSrcRow, bytesPerDstRow; + GLint srcImageOffset, srcRowOffset; + + (void) srcDepthNB; /* silence warnings */ + + /* Need two temporary row buffers */ + tmpRowA = _mesa_malloc(srcWidth * bpt); + if (!tmpRowA) + return; + tmpRowB = _mesa_malloc(srcWidth * bpt); + if (!tmpRowB) { + _mesa_free(tmpRowA); + return; + } + + bytesPerSrcImage = srcWidth * srcHeight * bpt; + bytesPerDstImage = dstWidth * dstHeight * bpt; + + bytesPerSrcRow = srcWidth * bpt; + bytesPerDstRow = dstWidth * bpt; + + /* Offset between adjacent src images to be averaged together */ + srcImageOffset = (srcDepth == dstDepth) ? 0 : bytesPerSrcImage; + + /* Offset between adjacent src rows to be averaged together */ + srcRowOffset = (srcHeight == dstHeight) ? 0 : srcWidth * bpt; + + /* + * Need to average together up to 8 src pixels for each dest pixel. + * Break that down into 3 operations: + * 1. take two rows from source image and average them together. + * 2. take two rows from next source image and average them together. + * 3. take the two averaged rows and average them for the final dst row. + */ + + /* + _mesa_printf("mip3d %d x %d x %d -> %d x %d x %d\n", + srcWidth, srcHeight, srcDepth, dstWidth, dstHeight, dstDepth); + */ + + for (img = 0; img < dstDepthNB; img++) { + /* first source image pointer, skipping border */ + const GLubyte *imgSrcA = srcPtr + + (bytesPerSrcImage + bytesPerSrcRow + border) * bpt * border + + img * (bytesPerSrcImage + srcImageOffset); + /* second source image pointer, skipping border */ + const GLubyte *imgSrcB = imgSrcA + srcImageOffset; + /* address of the dest image, skipping border */ + GLubyte *imgDst = dstPtr + + (bytesPerDstImage + bytesPerDstRow + border) * bpt * border + + img * bytesPerDstImage; + + /* setup the four source row pointers and the dest row pointer */ + const GLubyte *srcImgARowA = imgSrcA; + const GLubyte *srcImgARowB = imgSrcA + srcRowOffset; + const GLubyte *srcImgBRowA = imgSrcB; + const GLubyte *srcImgBRowB = imgSrcB + srcRowOffset; + GLubyte *dstImgRow = imgDst; + + for (row = 0; row < dstHeightNB; row++) { + /* Average together two rows from first src image */ + do_row(format, srcWidthNB, srcImgARowA, srcImgARowB, + srcWidthNB, tmpRowA); + /* Average together two rows from second src image */ + do_row(format, srcWidthNB, srcImgBRowA, srcImgBRowB, + srcWidthNB, tmpRowB); + /* Average together the temp rows to make the final row */ + do_row(format, srcWidthNB, tmpRowA, tmpRowB, + dstWidthNB, dstImgRow); + /* advance to next rows */ + srcImgARowA += bytesPerSrcRow + srcRowOffset; + srcImgARowB += bytesPerSrcRow + srcRowOffset; + srcImgBRowA += bytesPerSrcRow + srcRowOffset; + srcImgBRowB += bytesPerSrcRow + srcRowOffset; + dstImgRow += bytesPerDstRow; + } + } + + _mesa_free(tmpRowA); + _mesa_free(tmpRowB); + + /* Luckily we can leverage the make_2d_mipmap() function here! */ + if (border > 0) { + /* do front border image */ + make_2d_mipmap(format, 1, srcWidth, srcHeight, srcPtr, + dstWidth, dstHeight, dstPtr); + /* do back border image */ + make_2d_mipmap(format, 1, srcWidth, srcHeight, + srcPtr + bytesPerSrcImage * (srcDepth - 1), + dstWidth, dstHeight, + dstPtr + bytesPerDstImage * (dstDepth - 1)); + /* do four remaining border edges that span the image slices */ + if (srcDepth == dstDepth) { + /* just copy border pixels from src to dst */ + for (img = 0; img < dstDepthNB; img++) { + const GLubyte *src; + GLubyte *dst; + + /* do border along [img][row=0][col=0] */ + src = srcPtr + (img + 1) * bytesPerSrcImage; + dst = dstPtr + (img + 1) * bytesPerDstImage; + MEMCPY(dst, src, bpt); + + /* do border along [img][row=dstHeight-1][col=0] */ + src = srcPtr + (img * 2 + 1) * bytesPerSrcImage + + (srcHeight - 1) * bytesPerSrcRow; + dst = dstPtr + (img + 1) * bytesPerDstImage + + (dstHeight - 1) * bytesPerDstRow; + MEMCPY(dst, src, bpt); + + /* do border along [img][row=0][col=dstWidth-1] */ + src = srcPtr + (img * 2 + 1) * bytesPerSrcImage + + (srcWidth - 1) * bpt; + dst = dstPtr + (img + 1) * bytesPerDstImage + + (dstWidth - 1) * bpt; + MEMCPY(dst, src, bpt); + + /* do border along [img][row=dstHeight-1][col=dstWidth-1] */ + src = srcPtr + (img * 2 + 1) * bytesPerSrcImage + + (bytesPerSrcImage - bpt); + dst = dstPtr + (img + 1) * bytesPerDstImage + + (bytesPerDstImage - bpt); + MEMCPY(dst, src, bpt); + } + } + else { + /* average border pixels from adjacent src image pairs */ + ASSERT(srcDepthNB == 2 * dstDepthNB); + for (img = 0; img < dstDepthNB; img++) { + const GLubyte *src; + GLubyte *dst; + + /* do border along [img][row=0][col=0] */ + src = srcPtr + (img * 2 + 1) * bytesPerSrcImage; + dst = dstPtr + (img + 1) * bytesPerDstImage; + do_row(format, 1, src, src + srcImageOffset, 1, dst); + + /* do border along [img][row=dstHeight-1][col=0] */ + src = srcPtr + (img * 2 + 1) * bytesPerSrcImage + + (srcHeight - 1) * bytesPerSrcRow; + dst = dstPtr + (img + 1) * bytesPerDstImage + + (dstHeight - 1) * bytesPerDstRow; + do_row(format, 1, src, src + srcImageOffset, 1, dst); + + /* do border along [img][row=0][col=dstWidth-1] */ + src = srcPtr + (img * 2 + 1) * bytesPerSrcImage + + (srcWidth - 1) * bpt; + dst = dstPtr + (img + 1) * bytesPerDstImage + + (dstWidth - 1) * bpt; + do_row(format, 1, src, src + srcImageOffset, 1, dst); + + /* do border along [img][row=dstHeight-1][col=dstWidth-1] */ + src = srcPtr + (img * 2 + 1) * bytesPerSrcImage + + (bytesPerSrcImage - bpt); + dst = dstPtr + (img + 1) * bytesPerDstImage + + (bytesPerDstImage - bpt); + do_row(format, 1, src, src + srcImageOffset, 1, dst); + } + } + } +} + + +/** + * For GL_SGIX_generate_mipmap: + * Generate a complete set of mipmaps from texObj's base-level image. + * Stop at texObj's MaxLevel or when we get to the 1x1 texture. + */ +void +_mesa_generate_mipmap(GLcontext *ctx, GLenum target, + const struct gl_texture_unit *texUnit, + struct gl_texture_object *texObj) +{ + const struct gl_texture_image *srcImage; + const struct gl_texture_format *convertFormat; + const GLubyte *srcData = NULL; + GLubyte *dstData = NULL; + GLint level, maxLevels; + + ASSERT(texObj); + /* XXX choose cube map face here??? */ + srcImage = texObj->Image[0][texObj->BaseLevel]; + ASSERT(srcImage); + + maxLevels = _mesa_max_texture_levels(ctx, texObj->Target); + ASSERT(maxLevels > 0); /* bad target */ + + /* Find convertFormat - the format that do_row() will process */ + if (srcImage->IsCompressed) { + /* setup for compressed textures */ + GLuint row; + GLint components, size; + GLchan *dst; + + assert(texObj->Target == GL_TEXTURE_2D); + + if (srcImage->_BaseFormat == GL_RGB) { + convertFormat = &_mesa_texformat_rgb; + components = 3; + } + else if (srcImage->_BaseFormat == GL_RGBA) { + convertFormat = &_mesa_texformat_rgba; + components = 4; + } + else { + _mesa_problem(ctx, "bad srcImage->_BaseFormat in _mesa_generate_mipmaps"); + return; + } + + /* allocate storage for uncompressed GL_RGB or GL_RGBA images */ + size = _mesa_bytes_per_pixel(srcImage->_BaseFormat, CHAN_TYPE) + * srcImage->Width * srcImage->Height * srcImage->Depth + 20; + /* 20 extra bytes, just be safe when calling last FetchTexel */ + srcData = (GLubyte *) _mesa_malloc(size); + if (!srcData) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "generate mipmaps"); + return; + } + dstData = (GLubyte *) _mesa_malloc(size / 2); /* 1/4 would probably be OK */ + if (!dstData) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "generate mipmaps"); + _mesa_free((void *) srcData); + return; + } + + /* decompress base image here */ + dst = (GLchan *) srcData; + for (row = 0; row < srcImage->Height; row++) { + GLuint col; + for (col = 0; col < srcImage->Width; col++) { + srcImage->FetchTexelc(srcImage, col, row, 0, dst); + dst += components; + } + } + } + else { + /* uncompressed */ + convertFormat = srcImage->TexFormat; + } + + for (level = texObj->BaseLevel; level < texObj->MaxLevel + && level < maxLevels - 1; level++) { + /* generate image[level+1] from image[level] */ + const struct gl_texture_image *srcImage; + struct gl_texture_image *dstImage; + GLint srcWidth, srcHeight, srcDepth; + GLint dstWidth, dstHeight, dstDepth; + GLint border, bytesPerTexel; + + /* get src image parameters */ + srcImage = _mesa_select_tex_image(ctx, texObj, target, level); + ASSERT(srcImage); + srcWidth = srcImage->Width; + srcHeight = srcImage->Height; + srcDepth = srcImage->Depth; + border = srcImage->Border; + + /* compute next (level+1) image size */ + if (srcWidth - 2 * border > 1) { + dstWidth = (srcWidth - 2 * border) / 2 + 2 * border; + } + else { + dstWidth = srcWidth; /* can't go smaller */ + } + if (srcHeight - 2 * border > 1) { + dstHeight = (srcHeight - 2 * border) / 2 + 2 * border; + } + else { + dstHeight = srcHeight; /* can't go smaller */ + } + if (srcDepth - 2 * border > 1) { + dstDepth = (srcDepth - 2 * border) / 2 + 2 * border; + } + else { + dstDepth = srcDepth; /* can't go smaller */ + } + + if (dstWidth == srcWidth && + dstHeight == srcHeight && + dstDepth == srcDepth) { + /* all done */ + if (srcImage->IsCompressed) { + _mesa_free((void *) srcData); + _mesa_free(dstData); + } + return; + } + + /* get dest gl_texture_image */ + dstImage = _mesa_get_tex_image(ctx, texObj, target, level + 1); + if (!dstImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps"); + return; + } + + /* Free old image data */ + if (dstImage->Data) + ctx->Driver.FreeTexImageData(ctx, dstImage); + + /* initialize new image */ + _mesa_init_teximage_fields(ctx, target, dstImage, dstWidth, dstHeight, + dstDepth, border, srcImage->InternalFormat); + dstImage->DriverData = NULL; + dstImage->TexFormat = srcImage->TexFormat; + dstImage->FetchTexelc = srcImage->FetchTexelc; + dstImage->FetchTexelf = srcImage->FetchTexelf; + dstImage->IsCompressed = srcImage->IsCompressed; + if (dstImage->IsCompressed) { + dstImage->CompressedSize + = ctx->Driver.CompressedTextureSize(ctx, dstImage->Width, + dstImage->Height, + dstImage->Depth, + dstImage->TexFormat->MesaFormat); + ASSERT(dstImage->CompressedSize > 0); + } + + ASSERT(dstImage->TexFormat); + ASSERT(dstImage->FetchTexelc); + ASSERT(dstImage->FetchTexelf); + + /* Alloc new teximage data buffer. + * Setup src and dest data pointers. + */ + if (dstImage->IsCompressed) { + dstImage->Data = _mesa_alloc_texmemory(dstImage->CompressedSize); + if (!dstImage->Data) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps"); + return; + } + /* srcData and dstData are already set */ + ASSERT(srcData); + ASSERT(dstData); + } + else { + bytesPerTexel = dstImage->TexFormat->TexelBytes; + ASSERT(dstWidth * dstHeight * dstDepth * bytesPerTexel > 0); + dstImage->Data = _mesa_alloc_texmemory(dstWidth * dstHeight + * dstDepth * bytesPerTexel); + if (!dstImage->Data) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps"); + return; + } + srcData = (const GLubyte *) srcImage->Data; + dstData = (GLubyte *) dstImage->Data; + } + + /* + * We use simple 2x2 averaging to compute the next mipmap level. + */ + switch (target) { + case GL_TEXTURE_1D: + make_1d_mipmap(convertFormat, border, + srcWidth, srcData, + dstWidth, dstData); + break; + case GL_TEXTURE_2D: + case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: + make_2d_mipmap(convertFormat, border, + srcWidth, srcHeight, srcData, + dstWidth, dstHeight, dstData); + break; + case GL_TEXTURE_3D: + make_3d_mipmap(convertFormat, border, + srcWidth, srcHeight, srcDepth, srcData, + dstWidth, dstHeight, dstDepth, dstData); + break; + case GL_TEXTURE_RECTANGLE_NV: + /* no mipmaps, do nothing */ + break; + default: + _mesa_problem(ctx, "bad dimensions in _mesa_generate_mipmaps"); + return; + } + + if (dstImage->IsCompressed) { + GLubyte *temp; + /* compress image from dstData into dstImage->Data */ + const GLenum srcFormat = convertFormat->BaseFormat; + GLint dstRowStride + = _mesa_compressed_row_stride(dstImage->TexFormat->MesaFormat, dstWidth); + ASSERT(srcFormat == GL_RGB || srcFormat == GL_RGBA); + dstImage->TexFormat->StoreImage(ctx, 2, dstImage->_BaseFormat, + dstImage->TexFormat, + dstImage->Data, + 0, 0, 0, /* dstX/Y/Zoffset */ + dstRowStride, 0, /* strides */ + dstWidth, dstHeight, 1, /* size */ + srcFormat, CHAN_TYPE, + dstData, /* src data, actually */ + &ctx->DefaultPacking); + /* swap src and dest pointers */ + temp = (GLubyte *) srcData; + srcData = dstData; + dstData = temp; + } + + } /* loop over mipmap levels */ +} + + +/** + * Helper function for drivers which need to rescale texture images to + * certain aspect ratios. + * Nearest filtering only (for broken hardware that can't support + * all aspect ratios). This can be made a lot faster, but I don't + * really care enough... + */ +void +_mesa_rescale_teximage2d(GLuint bytesPerPixel, + GLuint srcStrideInPixels, + GLuint dstRowStride, + GLint srcWidth, GLint srcHeight, + GLint dstWidth, GLint dstHeight, + const GLvoid *srcImage, GLvoid *dstImage) +{ + GLint row, col; + +#define INNER_LOOP( TYPE, HOP, WOP ) \ + for ( row = 0 ; row < dstHeight ; row++ ) { \ + GLint srcRow = row HOP hScale; \ + for ( col = 0 ; col < dstWidth ; col++ ) { \ + GLint srcCol = col WOP wScale; \ + dst[col] = src[srcRow * srcStrideInPixels + srcCol]; \ + } \ + dst = (TYPE *) ((GLubyte *) dst + dstRowStride); \ + } \ + +#define RESCALE_IMAGE( TYPE ) \ +do { \ + const TYPE *src = (const TYPE *)srcImage; \ + TYPE *dst = (TYPE *)dstImage; \ + \ + if ( srcHeight < dstHeight ) { \ + const GLint hScale = dstHeight / srcHeight; \ + if ( srcWidth < dstWidth ) { \ + const GLint wScale = dstWidth / srcWidth; \ + INNER_LOOP( TYPE, /, / ); \ + } \ + else { \ + const GLint wScale = srcWidth / dstWidth; \ + INNER_LOOP( TYPE, /, * ); \ + } \ + } \ + else { \ + const GLint hScale = srcHeight / dstHeight; \ + if ( srcWidth < dstWidth ) { \ + const GLint wScale = dstWidth / srcWidth; \ + INNER_LOOP( TYPE, *, / ); \ + } \ + else { \ + const GLint wScale = srcWidth / dstWidth; \ + INNER_LOOP( TYPE, *, * ); \ + } \ + } \ +} while (0) + + switch ( bytesPerPixel ) { + case 4: + RESCALE_IMAGE( GLuint ); + break; + + case 2: + RESCALE_IMAGE( GLushort ); + break; + + case 1: + RESCALE_IMAGE( GLubyte ); + break; + default: + _mesa_problem(NULL,"unexpected bytes/pixel in _mesa_rescale_teximage2d"); + } +} + + +/** + * Upscale an image by replication, not (typical) stretching. + * We use this when the image width or height is less than a + * certain size (4, 8) and we need to upscale an image. + */ +void +_mesa_upscale_teximage2d(GLsizei inWidth, GLsizei inHeight, + GLsizei outWidth, GLsizei outHeight, + GLint comps, const GLchan *src, GLint srcRowStride, + GLchan *dest ) +{ + GLint i, j, k; + + ASSERT(outWidth >= inWidth); + ASSERT(outHeight >= inHeight); +#if 0 + ASSERT(inWidth == 1 || inWidth == 2 || inHeight == 1 || inHeight == 2); + ASSERT((outWidth & 3) == 0); + ASSERT((outHeight & 3) == 0); +#endif + + for (i = 0; i < outHeight; i++) { + const GLint ii = i % inHeight; + for (j = 0; j < outWidth; j++) { + const GLint jj = j % inWidth; + for (k = 0; k < comps; k++) { + dest[(i * outWidth + j) * comps + k] + = src[ii * srcRowStride + jj * comps + k]; + } + } + } +} + diff --git a/src/kits/opengl/mesa/main/mipmap.h b/src/kits/opengl/mesa/main/mipmap.h new file mode 100644 index 0000000000..df78603283 --- /dev/null +++ b/src/kits/opengl/mesa/main/mipmap.h @@ -0,0 +1,52 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.2 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef MIPMAP_H +#define MIPMAP_H + +#include "mtypes.h" + +extern void +_mesa_generate_mipmap(GLcontext *ctx, GLenum target, + const struct gl_texture_unit *texUnit, + struct gl_texture_object *texObj); + + +extern void +_mesa_rescale_teximage2d(GLuint bytesPerPixel, + GLuint srcStrideInPixels, + GLuint dstRowStride, + GLint srcWidth, GLint srcHeight, + GLint dstWidth, GLint dstHeight, + const GLvoid *srcImage, GLvoid *dstImage); + +extern void +_mesa_upscale_teximage2d(GLsizei inWidth, GLsizei inHeight, + GLsizei outWidth, GLsizei outHeight, + GLint comps, const GLchan *src, GLint srcRowStride, + GLchan *dest); + + +#endif /* MIPMAP_H */ diff --git a/src/kits/opengl/mesa/main/mm.c b/src/kits/opengl/mesa/main/mm.c new file mode 100644 index 0000000000..846c329c70 --- /dev/null +++ b/src/kits/opengl/mesa/main/mm.c @@ -0,0 +1,278 @@ +/* + * GLX Hardware Device Driver common code + * Copyright (C) 1999 Wittawat Yamwong + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * WITTAWAT YAMWONG, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "mm.h" + + +void +mmDumpMemInfo(const struct mem_block *heap) +{ + fprintf(stderr, "Memory heap %p:\n", (void *)heap); + if (heap == 0) { + fprintf(stderr, " heap == 0\n"); + } else { + const struct mem_block *p; + + for(p = heap->next; p != heap; p = p->next) { + fprintf(stderr, " Offset:%08x, Size:%08x, %c%c\n",p->ofs,p->size, + p->free ? 'F':'.', + p->reserved ? 'R':'.'); + } + + fprintf(stderr, "\nFree list:\n"); + + for(p = heap->next_free; p != heap; p = p->next_free) { + fprintf(stderr, " FREE Offset:%08x, Size:%08x, %c%c\n",p->ofs,p->size, + p->free ? 'F':'.', + p->reserved ? 'R':'.'); + } + + } + fprintf(stderr, "End of memory blocks\n"); +} + +struct mem_block * +mmInit(int ofs, int size) +{ + struct mem_block *heap, *block; + + if (size <= 0) + return NULL; + + heap = (struct mem_block *) _mesa_calloc(sizeof(struct mem_block)); + if (!heap) + return NULL; + + block = (struct mem_block *) _mesa_calloc(sizeof(struct mem_block)); + if (!block) { + _mesa_free(heap); + return NULL; + } + + heap->next = block; + heap->prev = block; + heap->next_free = block; + heap->prev_free = block; + + block->heap = heap; + block->next = heap; + block->prev = heap; + block->next_free = heap; + block->prev_free = heap; + + block->ofs = ofs; + block->size = size; + block->free = 1; + + return heap; +} + + +static struct mem_block * +SliceBlock(struct mem_block *p, + int startofs, int size, + int reserved, int alignment) +{ + struct mem_block *newblock; + + /* break left [p, newblock, p->next], then p = newblock */ + if (startofs > p->ofs) { + newblock = (struct mem_block*) _mesa_calloc(sizeof(struct mem_block)); + if (!newblock) + return NULL; + newblock->ofs = startofs; + newblock->size = p->size - (startofs - p->ofs); + newblock->free = 1; + newblock->heap = p->heap; + + newblock->next = p->next; + newblock->prev = p; + p->next->prev = newblock; + p->next = newblock; + + newblock->next_free = p->next_free; + newblock->prev_free = p; + p->next_free->prev_free = newblock; + p->next_free = newblock; + + p->size -= newblock->size; + p = newblock; + } + + /* break right, also [p, newblock, p->next] */ + if (size < p->size) { + newblock = (struct mem_block*) _mesa_calloc(sizeof(struct mem_block)); + if (!newblock) + return NULL; + newblock->ofs = startofs + size; + newblock->size = p->size - size; + newblock->free = 1; + newblock->heap = p->heap; + + newblock->next = p->next; + newblock->prev = p; + p->next->prev = newblock; + p->next = newblock; + + newblock->next_free = p->next_free; + newblock->prev_free = p; + p->next_free->prev_free = newblock; + p->next_free = newblock; + + p->size = size; + } + + /* p = middle block */ + p->free = 0; + + /* Remove p from the free list: + */ + p->next_free->prev_free = p->prev_free; + p->prev_free->next_free = p->next_free; + + p->next_free = 0; + p->prev_free = 0; + + p->reserved = reserved; + return p; +} + + +struct mem_block * +mmAllocMem(struct mem_block *heap, int size, int align2, int startSearch) +{ + struct mem_block *p; + const int mask = (1 << align2)-1; + int startofs = 0; + int endofs; + + if (!heap || align2 < 0 || size <= 0) + return NULL; + + for (p = heap->next_free; p != heap; p = p->next_free) { + assert(p->free); + + startofs = (p->ofs + mask) & ~mask; + if ( startofs < startSearch ) { + startofs = startSearch; + } + endofs = startofs+size; + if (endofs <= (p->ofs+p->size)) + break; + } + + if (p == heap) + return NULL; + + assert(p->free); + p = SliceBlock(p,startofs,size,0,mask+1); + + return p; +} + + +struct mem_block * +mmFindBlock(struct mem_block *heap, int start) +{ + struct mem_block *p; + + for (p = heap->next; p != heap; p = p->next) { + if (p->ofs == start) + return p; + } + + return NULL; +} + + +static INLINE int +Join2Blocks(struct mem_block *p) +{ + /* XXX there should be some assertions here */ + + /* NOTE: heap->free == 0 */ + + if (p->free && p->next->free) { + struct mem_block *q = p->next; + + assert(p->ofs + p->size == q->ofs); + p->size += q->size; + + p->next = q->next; + q->next->prev = p; + + q->next_free->prev_free = q->prev_free; + q->prev_free->next_free = q->next_free; + + _mesa_free(q); + return 1; + } + return 0; +} + +int +mmFreeMem(struct mem_block *b) +{ + if (!b) + return 0; + + if (b->free) { + fprintf(stderr, "block already free\n"); + return -1; + } + if (b->reserved) { + fprintf(stderr, "block is reserved\n"); + return -1; + } + + b->free = 1; + b->next_free = b->heap->next_free; + b->prev_free = b->heap; + b->next_free->prev_free = b; + b->prev_free->next_free = b; + + Join2Blocks(b); + if (b->prev != b->heap) + Join2Blocks(b->prev); + + return 0; +} + + +void +mmDestroy(struct mem_block *heap) +{ + struct mem_block *p; + + if (!heap) + return; + + for (p = heap->next; p != heap; ) { + struct mem_block *next = p->next; + _mesa_free(p); + p = next; + } + + _mesa_free(heap); +} diff --git a/src/kits/opengl/mesa/main/mm.h b/src/kits/opengl/mesa/main/mm.h new file mode 100644 index 0000000000..26d59fff13 --- /dev/null +++ b/src/kits/opengl/mesa/main/mm.h @@ -0,0 +1,92 @@ +/* + * GLX Hardware Device Driver common code + * Copyright (C) 1999 Wittawat Yamwong + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * Memory manager code. Primarily used by device drivers to manage texture + * heaps, etc. + */ + + +#ifndef MM_H +#define MM_H + + +#include "imports.h" + + +struct mem_block { + struct mem_block *next, *prev; + struct mem_block *next_free, *prev_free; + struct mem_block *heap; + int ofs,size; + unsigned int free:1; + unsigned int reserved:1; +}; + + + +/** + * input: total size in bytes + * return: a heap pointer if OK, NULL if error + */ +extern struct mem_block *mmInit(int ofs, int size); + +/** + * Allocate 'size' bytes with 2^align2 bytes alignment, + * restrict the search to free memory after 'startSearch' + * depth and back buffers should be in different 4mb banks + * to get better page hits if possible + * input: size = size of block + * align2 = 2^align2 bytes alignment + * startSearch = linear offset from start of heap to begin search + * return: pointer to the allocated block, 0 if error + */ +extern struct mem_block *mmAllocMem(struct mem_block *heap, int size, int align2, + int startSearch); + +/** + * Free block starts at offset + * input: pointer to a block + * return: 0 if OK, -1 if error + */ +extern int mmFreeMem(struct mem_block *b); + +/** + * Free block starts at offset + * input: pointer to a heap, start offset + * return: pointer to a block + */ +extern struct mem_block *mmFindBlock(struct mem_block *heap, int start); + +/** + * destroy MM + */ +extern void mmDestroy(struct mem_block *mmInit); + +/** + * For debuging purpose. + */ +extern void mmDumpMemInfo(const struct mem_block *mmInit); + +#endif diff --git a/src/kits/opengl/mesa/main/mtypes.h b/src/kits/opengl/mesa/main/mtypes.h index bf24596c06..0ed73beb3c 100644 --- a/src/kits/opengl/mesa/main/mtypes.h +++ b/src/kits/opengl/mesa/main/mtypes.h @@ -7,9 +7,9 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -36,10 +36,12 @@ #include "glheader.h" +#include /* GLimports/GLexports/GLcontextModes */ #include "config.h" /* Hardwired parameters */ #include "glapitable.h" #include "glthread.h" #include "math/m_matrix.h" /* GLmatrix */ +#include "bitset.h" /** @@ -65,42 +67,18 @@ #endif -/** - * Accumulation buffer data type. - */ -#if ACCUM_BITS==8 - typedef GLbyte GLaccum; -#elif ACCUM_BITS==16 - typedef GLshort GLaccum; -#elif ACCUM_BITS==32 - typedef GLfloat GLaccum; -#else -# error "illegal number of accumulation bits" -#endif - - /** * Stencil buffer data type. */ #if STENCIL_BITS==8 typedef GLubyte GLstencil; -# define STENCIL_MAX 0xff #elif STENCIL_BITS==16 typedef GLushort GLstencil; -# define STENCIL_MAX 0xffff #else # error "illegal number of stencil bits" #endif -/** - * Depth buffer data type. - * - * \note Must be 32-bits! - */ -typedef GLuint GLdepth; - - /** * Fixed point data type. */ @@ -138,13 +116,13 @@ typedef int GLfixed; */ /*@{*/ struct _mesa_HashTable; +struct gl_pixelstore_attrib; +struct gl_texture_format; struct gl_texture_image; struct gl_texture_object; typedef struct __GLcontextRec GLcontext; typedef struct __GLcontextModesRec GLvisual; -typedef struct gl_frame_buffer GLframebuffer; -struct gl_pixelstore_attrib; -struct gl_texture_format; +typedef struct gl_framebuffer GLframebuffer; /*@}*/ @@ -164,7 +142,7 @@ enum VERT_ATTRIB_COLOR0 = 3, VERT_ATTRIB_COLOR1 = 4, VERT_ATTRIB_FOG = 5, - VERT_ATTRIB_SIX = 6, + VERT_ATTRIB_COLOR_INDEX = 6, VERT_ATTRIB_SEVEN = 7, VERT_ATTRIB_TEX0 = 8, VERT_ATTRIB_TEX1 = 9, @@ -178,7 +156,19 @@ enum VERT_ATTRIB_GENERIC1 = 17, VERT_ATTRIB_GENERIC2 = 18, VERT_ATTRIB_GENERIC3 = 19, - VERT_ATTRIB_MAX = 16 + VERT_ATTRIB_GENERIC4 = 20, + VERT_ATTRIB_GENERIC5 = 21, + VERT_ATTRIB_GENERIC6 = 22, + VERT_ATTRIB_GENERIC7 = 23, + VERT_ATTRIB_GENERIC8 = 24, + VERT_ATTRIB_GENERIC9 = 25, + VERT_ATTRIB_GENERIC10 = 26, + VERT_ATTRIB_GENERIC11 = 27, + VERT_ATTRIB_GENERIC12 = 28, + VERT_ATTRIB_GENERIC13 = 29, + VERT_ATTRIB_GENERIC14 = 30, + VERT_ATTRIB_GENERIC15 = 31, + VERT_ATTRIB_MAX = 32 }; /** @@ -186,31 +176,83 @@ enum * These are used in bitfields in many places. */ /*@{*/ -#define VERT_BIT_POS (1 << VERT_ATTRIB_POS) -#define VERT_BIT_WEIGHT (1 << VERT_ATTRIB_WEIGHT) -#define VERT_BIT_NORMAL (1 << VERT_ATTRIB_NORMAL) -#define VERT_BIT_COLOR0 (1 << VERT_ATTRIB_COLOR0) -#define VERT_BIT_COLOR1 (1 << VERT_ATTRIB_COLOR1) -#define VERT_BIT_FOG (1 << VERT_ATTRIB_FOG) -#define VERT_BIT_SIX (1 << VERT_ATTRIB_SIX) -#define VERT_BIT_SEVEN (1 << VERT_ATTRIB_SEVEN) -#define VERT_BIT_TEX0 (1 << VERT_ATTRIB_TEX0) -#define VERT_BIT_TEX1 (1 << VERT_ATTRIB_TEX1) -#define VERT_BIT_TEX2 (1 << VERT_ATTRIB_TEX2) -#define VERT_BIT_TEX3 (1 << VERT_ATTRIB_TEX3) -#define VERT_BIT_TEX4 (1 << VERT_ATTRIB_TEX4) -#define VERT_BIT_TEX5 (1 << VERT_ATTRIB_TEX5) -#define VERT_BIT_TEX6 (1 << VERT_ATTRIB_TEX6) -#define VERT_BIT_TEX7 (1 << VERT_ATTRIB_TEX7) -#define VERT_BIT_GENERIC0 (1 << VERT_ATTRIB_GENERIC0) -#define VERT_BIT_GENERIC1 (1 << VERT_ATTRIB_GENERIC1) -#define VERT_BIT_GENERIC2 (1 << VERT_ATTRIB_GENERIC2) -#define VERT_BIT_GENERIC3 (1 << VERT_ATTRIB_GENERIC3) +#define VERT_BIT_POS (1 << VERT_ATTRIB_POS) +#define VERT_BIT_WEIGHT (1 << VERT_ATTRIB_WEIGHT) +#define VERT_BIT_NORMAL (1 << VERT_ATTRIB_NORMAL) +#define VERT_BIT_COLOR0 (1 << VERT_ATTRIB_COLOR0) +#define VERT_BIT_COLOR1 (1 << VERT_ATTRIB_COLOR1) +#define VERT_BIT_FOG (1 << VERT_ATTRIB_FOG) +#define VERT_BIT_COLOR_INDEX (1 << VERT_ATTRIB_COLOR_INDEX) +#define VERT_BIT_SEVEN (1 << VERT_ATTRIB_SEVEN) +#define VERT_BIT_TEX0 (1 << VERT_ATTRIB_TEX0) +#define VERT_BIT_TEX1 (1 << VERT_ATTRIB_TEX1) +#define VERT_BIT_TEX2 (1 << VERT_ATTRIB_TEX2) +#define VERT_BIT_TEX3 (1 << VERT_ATTRIB_TEX3) +#define VERT_BIT_TEX4 (1 << VERT_ATTRIB_TEX4) +#define VERT_BIT_TEX5 (1 << VERT_ATTRIB_TEX5) +#define VERT_BIT_TEX6 (1 << VERT_ATTRIB_TEX6) +#define VERT_BIT_TEX7 (1 << VERT_ATTRIB_TEX7) +#define VERT_BIT_GENERIC0 (1 << VERT_ATTRIB_GENERIC0) +#define VERT_BIT_GENERIC1 (1 << VERT_ATTRIB_GENERIC1) +#define VERT_BIT_GENERIC2 (1 << VERT_ATTRIB_GENERIC2) +#define VERT_BIT_GENERIC3 (1 << VERT_ATTRIB_GENERIC3) +#define VERT_BIT_GENERIC4 (1 << VERT_ATTRIB_GENERIC4) +#define VERT_BIT_GENERIC5 (1 << VERT_ATTRIB_GENERIC5) +#define VERT_BIT_GENERIC6 (1 << VERT_ATTRIB_GENERIC6) +#define VERT_BIT_GENERIC7 (1 << VERT_ATTRIB_GENERIC7) +#define VERT_BIT_GENERIC8 (1 << VERT_ATTRIB_GENERIC8) +#define VERT_BIT_GENERIC9 (1 << VERT_ATTRIB_GENERIC9) +#define VERT_BIT_GENERIC10 (1 << VERT_ATTRIB_GENERIC10) +#define VERT_BIT_GENERIC11 (1 << VERT_ATTRIB_GENERIC11) +#define VERT_BIT_GENERIC12 (1 << VERT_ATTRIB_GENERIC12) +#define VERT_BIT_GENERIC13 (1 << VERT_ATTRIB_GENERIC13) +#define VERT_BIT_GENERIC14 (1 << VERT_ATTRIB_GENERIC14) +#define VERT_BIT_GENERIC15 (1 << VERT_ATTRIB_GENERIC15) #define VERT_BIT_TEX(u) (1 << (VERT_ATTRIB_TEX0 + (u))) #define VERT_BIT_GENERIC(g) (1 << (VERT_ATTRIB_GENERIC0 + (g))) /*@}*/ +/** + * GLSL allows shader writers to allocate vertex result attributes (varyings) in + * single float component granularity. This is in contrast to vertex / fragment + * programs, where result attributes (actually texcoords) were allocated + * in 4-component vectors of floats granularity. + * For performance reasons, it would be optimal to stick with this scheme on a scalar + * processor. Varyings will likely be allocated as 3-component vectors, so statistically + * we win 2 floats. + * The constant VARYINGS_PER_VECTOR tells us how much of float components we pack into + * one result vector. For scalar processor it would be 1, for vector processor - 4. + * + * NOTE: Currently we pack varyings into vertex attributes. + */ +#define VARYINGS_PER_VECTOR 2 +#define VARYING_EMIT_STYLE EMIT_2F +#define MAX_VARYING_VECTORS ((MAX_VARYING_FLOATS + VARYINGS_PER_VECTOR - 1) / VARYINGS_PER_VECTOR) + +/** + * Indexes for vertex program result attributes + */ +/*@{*/ +#define VERT_RESULT_HPOS 0 +#define VERT_RESULT_COL0 1 +#define VERT_RESULT_COL1 2 +#define VERT_RESULT_FOGC 3 +#define VERT_RESULT_TEX0 4 +#define VERT_RESULT_TEX1 5 +#define VERT_RESULT_TEX2 6 +#define VERT_RESULT_TEX3 7 +#define VERT_RESULT_TEX4 8 +#define VERT_RESULT_TEX5 9 +#define VERT_RESULT_TEX6 10 +#define VERT_RESULT_TEX7 11 +#define VERT_RESULT_PSIZ 12 +#define VERT_RESULT_BFC0 13 +#define VERT_RESULT_BFC1 14 +#define VERT_RESULT_EDGE 15 +#define VERT_RESULT_MAX 16 +/*@}*/ + /** * Indexes for fragment program input attributes. @@ -228,11 +270,12 @@ enum FRAG_ATTRIB_TEX4 = 8, FRAG_ATTRIB_TEX5 = 9, FRAG_ATTRIB_TEX6 = 10, - FRAG_ATTRIB_TEX7 = 11 + FRAG_ATTRIB_TEX7 = 11, + FRAG_ATTRIB_MAX = 12 }; -/* - * Bitflags for fragment attributes. +/** + * Bitflags for fragment program input attributes. */ /*@{*/ #define FRAG_BIT_WPOS (1 << FRAG_ATTRIB_WPOS) @@ -260,37 +303,98 @@ enum /** - * Bits for each basic buffer in a complete framebuffer. - * When glDrawBuffer(GL_FRONT_AND_BACK) is called (non-stereo), - * _DrawDestMask will be set to (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT), - * for example. Also passed to ctx->Driver.Clear() to indicate which - * buffers to clear. + * Fragment program results */ /*@{*/ -#define DD_FRONT_LEFT_BIT 0x1 -#define DD_FRONT_RIGHT_BIT 0x2 -#define DD_BACK_LEFT_BIT 0x4 -#define DD_BACK_RIGHT_BIT 0x8 -#define DD_AUX0_BIT 0x10 -#define DD_AUX1_BIT 0x20 -#define DD_AUX2_BIT 0x40 -#define DD_AUX3_BIT 0x80 -#define DD_DEPTH_BIT GL_DEPTH_BUFFER_BIT /* 0x00000100 */ -#define DD_ACCUM_BIT GL_ACCUM_BUFFER_BIT /* 0x00000200 */ -#define DD_STENCIL_BIT GL_STENCIL_BUFFER_BIT /* 0x00000400 */ +#define FRAG_RESULT_COLR 0 +#define FRAG_RESULT_COLH 1 +#define FRAG_RESULT_DEPR 2 +#define FRAG_RESULT_MAX 3 /*@}*/ +/** + * Indexes for all renderbuffers + */ +enum { + BUFFER_FRONT_LEFT = 0, /* the four standard color buffers */ + BUFFER_BACK_LEFT = 1, + BUFFER_FRONT_RIGHT = 2, + BUFFER_BACK_RIGHT = 3, + BUFFER_AUX0 = 4, /* optional aux buffer */ + BUFFER_AUX1 = 5, + BUFFER_AUX2 = 6, + BUFFER_AUX3 = 7, + BUFFER_DEPTH = 8, + BUFFER_STENCIL = 9, + BUFFER_ACCUM = 10, + BUFFER_COLOR0 = 11, /* generic renderbuffers */ + BUFFER_COLOR1 = 12, + BUFFER_COLOR2 = 13, + BUFFER_COLOR3 = 14, + BUFFER_COLOR4 = 15, + BUFFER_COLOR5 = 16, + BUFFER_COLOR6 = 17, + BUFFER_COLOR7 = 18, + BUFFER_COUNT = 19 +}; + +/** + * Bit flags for all renderbuffers + */ +#define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT) +#define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT) +#define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT) +#define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT) +#define BUFFER_BIT_AUX0 (1 << BUFFER_AUX0) +#define BUFFER_BIT_AUX1 (1 << BUFFER_AUX1) +#define BUFFER_BIT_AUX2 (1 << BUFFER_AUX2) +#define BUFFER_BIT_AUX3 (1 << BUFFER_AUX3) +#define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH) +#define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL) +#define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM) +#define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0) +#define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1) +#define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2) +#define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3) +#define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4) +#define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5) +#define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6) +#define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7) + +/** + * Mask of all the color buffer bits (but not accum). + */ +#define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \ + BUFFER_BIT_BACK_LEFT | \ + BUFFER_BIT_FRONT_RIGHT | \ + BUFFER_BIT_BACK_RIGHT | \ + BUFFER_BIT_AUX0 | \ + BUFFER_BIT_AUX1 | \ + BUFFER_BIT_AUX2 | \ + BUFFER_BIT_AUX3 | \ + BUFFER_BIT_COLOR0 | \ + BUFFER_BIT_COLOR1 | \ + BUFFER_BIT_COLOR2 | \ + BUFFER_BIT_COLOR3 | \ + BUFFER_BIT_COLOR4 | \ + BUFFER_BIT_COLOR5 | \ + BUFFER_BIT_COLOR6 | \ + BUFFER_BIT_COLOR7) + + + + /** * Data structure for color tables */ struct gl_color_table { - GLenum Format; /**< GL_ALPHA, GL_RGB, GL_RGB, etc */ - GLenum IntFormat; - GLuint Size; /**< number of entries (rows) in table */ - GLvoid *Table; /**< points to data of */ - GLenum Type; /**< GL_UNSIGNED_BYTE or GL_FLOAT */ + GLenum InternalFormat; /**< The user-specified format */ + GLenum _BaseFormat; /**< GL_ALPHA, GL_RGBA, GL_RGB, etc */ + GLuint Size; /**< number of entries in table */ + GLfloat *TableF; /**< Color table, floating point values */ + GLubyte *TableUB; /**< Color table, ubyte values */ GLubyte RedSize; GLubyte GreenSize; GLubyte BlueSize; @@ -391,6 +495,7 @@ struct gl_light GLfloat EyeDirection[4]; /**< spotlight dir in eye coordinates */ GLfloat SpotExponent; GLfloat SpotCutoff; /**< in degrees */ + GLfloat _CosCutoffNeg; /**< = cos(SpotCutoff) */ GLfloat _CosCutoff; /**< = MAX(0, cos(SpotCutoff)) */ GLfloat ConstantAttenuation; GLfloat LinearAttenuation; @@ -401,7 +506,7 @@ struct gl_light * \name Derived fields */ /*@{*/ - GLuint _Flags; /**< State */ + GLbitfield _Flags; /**< State */ GLfloat _Position[4]; /**< position in eye/obj coordinates */ GLfloat _VP_inf_norm[3]; /**< Norm direction to infinite light */ @@ -462,7 +567,6 @@ struct gl_colorbuffer_attrib GLubyte ColorMask[4]; /**< Each flag is 0xff or 0x0 */ GLenum DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */ - GLbitfield _DrawDestMask[MAX_DRAW_BUFFERS];/**< bitmask of DD_*_BIT bits */ /** * \name alpha testing @@ -498,6 +602,9 @@ struct gl_colorbuffer_attrib /*@}*/ GLboolean DitherFlag; /**< Dither enable flag */ + + GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ + GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ }; @@ -507,29 +614,27 @@ struct gl_colorbuffer_attrib struct gl_current_attrib { /** - * \name Values valid only when FLUSH_VERTICES has been called. + * \name Current vertex attributes. + * \note Values are valid only after FLUSH_VERTICES has been called. */ /*@{*/ - GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Current vertex attributes - * indexed by VERT_ATTRIB_* */ - GLfloat Index; /**< Current color index */ - GLboolean EdgeFlag; /**< Current edge flag */ + GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */ + GLfloat Index; /**< Current color index */ + GLboolean EdgeFlag; /**< Current edge flag */ /*@}*/ /** - * \name Values are always valid. - * - * \note BTW, note how similar this set of attributes is to the SWvertex - * data type in the software rasterizer... + * \name Current raster position attributes (always valid). + * \note This set of attributes is very similar to the SWvertex struct. */ /*@{*/ - GLfloat RasterPos[4]; /**< Current raster position */ - GLfloat RasterDistance; /**< Current raster distance */ - GLfloat RasterColor[4]; /**< Current raster color */ - GLfloat RasterSecondaryColor[4]; /**< Current raster secondary color */ - GLfloat RasterIndex; /**< Current raster index */ - GLfloat RasterTexCoords[MAX_TEXTURE_UNITS][4];/**< Current raster texcoords */ - GLboolean RasterPosValid; /**< Raster pos valid flag */ + GLfloat RasterPos[4]; + GLfloat RasterDistance; + GLfloat RasterColor[4]; + GLfloat RasterSecondaryColor[4]; + GLfloat RasterIndex; + GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4]; + GLboolean RasterPosValid; /*@}*/ }; @@ -543,7 +648,6 @@ struct gl_depthbuffer_attrib GLclampd Clear; /**< Value to clear depth buffer to */ GLboolean Test; /**< Depth buffering enabled flag */ GLboolean Mask; /**< Depth buffer writable? */ - GLboolean OcclusionTest; /**< GL_HP_occlusion_test */ GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */ GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */ }; @@ -557,7 +661,7 @@ struct gl_enable_attrib GLboolean AlphaTest; GLboolean AutoNormal; GLboolean Blend; - GLuint ClipPlanes; + GLbitfield ClipPlanes; GLboolean ColorMaterial; GLboolean ColorTable; /* SGI_color_table */ GLboolean PostColorMatrixColorTable; /* SGI_color_table */ @@ -619,7 +723,7 @@ struct gl_enable_attrib GLuint TexGen[MAX_TEXTURE_COORD_UNITS]; /* SGI_texture_color_table */ GLboolean TextureColorTable[MAX_TEXTURE_IMAGE_UNITS]; - /* GL_NV_vertex_program */ + /* GL_ARB_vertex_program / GL_NV_vertex_program */ GLboolean VertexProgram; GLboolean VertexProgramPointSize; GLboolean VertexProgramTwoSide; @@ -688,6 +792,7 @@ struct gl_fog_attrib GLenum Mode; /**< Fog mode */ GLboolean ColorSumEnabled; GLenum FogCoordinateSource; /**< GL_EXT_fog_coord */ + GLfloat _Scale; /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */ }; @@ -706,6 +811,7 @@ struct gl_hint_attrib GLenum ClipVolumeClipping; /**< GL_EXT_clip_volume_hint */ GLenum TextureCompression; /**< GL_ARB_texture_compression */ GLenum GenerateMipmap; /**< GL_SGIS_generate_mipmap */ + GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ }; @@ -780,8 +886,9 @@ struct gl_light_attrib GLenum ShadeModel; /**< GL_FLAT or GL_SMOOTH */ GLenum ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */ GLenum ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */ - GLuint ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ + GLbitfield ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ GLboolean ColorMaterialEnabled; + GLenum ClampVertexColor; struct gl_light EnabledList; /**< List sentinel */ @@ -791,7 +898,7 @@ struct gl_light_attrib /*@{*/ GLboolean _NeedEyeCoords; GLboolean _NeedVertices; /**< Use fast shader? */ - GLuint _Flags; /**< LIGHT_* flags, see above */ + GLbitfield _Flags; /**< LIGHT_* flags, see above */ GLfloat _BaseColor[2][3]; /*@}*/ }; @@ -862,11 +969,7 @@ struct gl_multisample_attrib */ struct gl_pixel_attrib { - GLenum ReadBuffer; /**< source buffer for glReadPixels()/glCopyPixels() */ - GLubyte _ReadSrcMask; /**< Not really a mask, but like _DrawDestMask - * - * May be: FRONT_LEFT_BIT, BACK_LEFT_BIT, - * FRONT_RIGHT_BIT or BACK_RIGHT_BIT. */ + GLenum ReadBuffer; /**< source buffer for glRead/CopyPixels() */ GLfloat RedBias, RedScale; GLfloat GreenBias, GreenScale; GLfloat BlueBias, BlueScale; @@ -888,7 +991,7 @@ struct gl_pixel_attrib GLint MapBtoBsize; GLint MapAtoAsize; GLint MapStoS[MAX_PIXEL_MAP_TABLE]; /**< Pixel map tables */ - GLint MapItoI[MAX_PIXEL_MAP_TABLE]; + GLfloat MapItoI[MAX_PIXEL_MAP_TABLE]; GLfloat MapItoR[MAX_PIXEL_MAP_TABLE]; GLfloat MapItoG[MAX_PIXEL_MAP_TABLE]; GLfloat MapItoB[MAX_PIXEL_MAP_TABLE]; @@ -904,10 +1007,6 @@ struct gl_pixel_attrib /** GL_EXT_histogram */ GLboolean HistogramEnabled; GLboolean MinMaxEnabled; - /** GL_SGIS_pixel_texture */ - GLboolean PixelTextureEnabled; - GLenum FragmentRgbSource; - GLenum FragmentAlphaSource; /** GL_SGI_color_matrix */ GLfloat PostColorMatrixScale[4]; /**< RGBA */ GLfloat PostColorMatrixBias[4]; /**< RGBA */ @@ -949,8 +1048,8 @@ struct gl_point_attrib GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */ GLfloat Threshold; /**< GL_EXT_point_parameters */ GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */ - GLboolean PointSprite; /**< GL_NV_point_sprite / GL_NV_point_sprite */ - GLboolean CoordReplace[MAX_TEXTURE_UNITS]; /**< GL_NV_point_sprite / GL_NV_point_sprite */ + GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */ + GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< GL_ARB_point_sprite */ GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */ GLenum SpriteOrigin; /**< GL_ARB_point_sprite */ }; @@ -996,14 +1095,15 @@ struct gl_stencil_attrib GLboolean Enabled; /**< Enabled flag */ GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 1) */ + GLboolean _TestTwoSide; GLenum Function[2]; /**< Stencil function */ GLenum FailFunc[2]; /**< Fail function */ GLenum ZPassFunc[2]; /**< Depth buffer pass function */ GLenum ZFailFunc[2]; /**< Depth buffer fail function */ - GLstencil Ref[2]; /**< Reference value */ - GLstencil ValueMask[2]; /**< Value mask */ - GLstencil WriteMask[2]; /**< Write mask */ - GLstencil Clear; /**< Clear value */ + GLint Ref[2]; /**< Reference value */ + GLuint ValueMask[2]; /**< Value mask */ + GLuint WriteMask[2]; /**< Write mask */ + GLuint Clear; /**< Clear value */ }; @@ -1113,23 +1213,45 @@ typedef void (*FetchTexelFuncF)( const struct gl_texture_image *texImage, GLfloat *texelOut ); -/** - * TexImage store function. This is called by the glTex[Sub]Image - * functions and is responsible for converting the user-specified texture - * image into a specific (hardware) image format. - */ -typedef GLboolean (*StoreTexImageFunc)(GLcontext *ctx, GLuint dims, - GLenum baseInternalFormat, - const struct gl_texture_format *dstFormat, - GLvoid *dstAddr, - GLint dstXoffset, GLint dstYoffset, GLint dstZoffset, - GLint dstRowStride, GLint dstImageStride, - GLint srcWidth, GLint srcHeight, GLint srcDepth, - GLenum srcFormat, GLenum srcType, - const GLvoid *srcAddr, - const struct gl_pixelstore_attrib *srcPacking); +typedef void (*StoreTexelFunc)(struct gl_texture_image *texImage, + GLint col, GLint row, GLint img, + const void *texel); +/** + * This macro defines the (many) parameters to the texstore functions. + * \param dims either 1 or 2 or 3 + * \param baseInternalFormat user-specified base internal format + * \param dstFormat destination Mesa texture format + * \param dstAddr destination image address + * \param dstX/Y/Zoffset destination x/y/z offset (ala TexSubImage), in texels + * \param dstRowStride destination image row stride, in bytes + * \param dstImageOffsets offset of each 2D slice within 3D texture, in texels + * \param srcWidth/Height/Depth source image size, in pixels + * \param srcFormat incoming image format + * \param srcType incoming image data type + * \param srcAddr source image address + * \param srcPacking source image packing parameters + */ +#define TEXSTORE_PARAMS \ + GLcontext *ctx, GLuint dims, \ + GLenum baseInternalFormat, \ + const struct gl_texture_format *dstFormat, \ + GLvoid *dstAddr, \ + GLint dstXoffset, GLint dstYoffset, GLint dstZoffset, \ + GLint dstRowStride, const GLuint *dstImageOffsets, \ + GLint srcWidth, GLint srcHeight, GLint srcDepth, \ + GLenum srcFormat, GLenum srcType, \ + const GLvoid *srcAddr, \ + const struct gl_pixelstore_attrib *srcPacking + + + +/** + * Texture image storage function. + */ +typedef GLboolean (*StoreTexImageFunc)(TEXSTORE_PARAMS); + /** * Texture format record @@ -1152,6 +1274,7 @@ struct gl_texture_format GLubyte IntensityBits; GLubyte IndexBits; GLubyte DepthBits; + GLubyte StencilBits; /**< GL_EXT_packed_depth_stencil */ GLuint TexelBytes; /**< Bytes per texel, 0 if compressed format */ @@ -1168,27 +1291,30 @@ struct gl_texture_format FetchTexelFuncF FetchTexel2Df; FetchTexelFuncF FetchTexel3Df; /*@}*/ + + StoreTexelFunc StoreTexel; }; +#define MAX_3D_TEXTURE_SIZE (1 << (MAX_3D_TEXTURE_LEVELS - 1)) + /** * Texture image state. Describes the dimensions of a texture image, * the texel format and pointers to Texel Fetch functions. */ struct gl_texture_image { - GLenum Format; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, + GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, * GL_LUMINANCE, GL_LUMINANCE_ALPHA, - * GL_INTENSITY, GL_COLOR_INDEX or - * GL_DEPTH_COMPONENT only. - * Used for choosing TexEnv arithmetic. + * GL_INTENSITY, GL_COLOR_INDEX, + * GL_DEPTH_COMPONENT or GL_DEPTH_STENCIL_EXT + * only. Used for choosing TexEnv arithmetic. */ - GLint IntFormat; /**< Internal format as given by the user */ + GLint InternalFormat; /**< Internal format as given by the user */ GLuint Border; /**< 0 or 1 */ GLuint Width; /**< = 2^WidthLog2 + 2*Border */ GLuint Height; /**< = 2^HeightLog2 + 2*Border */ GLuint Depth; /**< = 2^DepthLog2 + 2*Border */ - GLuint RowStride; /**< == Width unless IsClientData and padded */ GLuint Width2; /**< = Width - 2*Border */ GLuint Height2; /**< = Height - 2*Border */ GLuint Depth2; /**< = Depth - 2*Border */ @@ -1199,7 +1325,6 @@ struct gl_texture_image GLfloat WidthScale; /**< used for mipmap LOD computation */ GLfloat HeightScale; /**< used for mipmap LOD computation */ GLfloat DepthScale; /**< used for mipmap LOD computation */ - GLvoid *Data; /**< Image data, accessed via FetchTexel() */ GLboolean IsClientData; /**< Data owned by client? */ GLboolean _IsPowerOfTwo; /**< Are all dimensions powers of two? */ @@ -1213,6 +1338,11 @@ struct gl_texture_image GLboolean IsCompressed; /**< GL_ARB_texture_compression */ GLuint CompressedSize; /**< GL_ARB_texture_compression */ + GLuint RowStride; /**< == Width unless IsClientData and padded */ + GLuint *ImageOffsets; /**< if 3D texture: array [Depth] of offsets to + each 2D slice in 'Data', in texels */ + GLvoid *Data; /**< Image data, accessed via FetchTexel() */ + /** * \name For device driver: */ @@ -1245,19 +1375,14 @@ struct gl_texture_object { _glthread_Mutex Mutex; /**< for thread safety */ GLint RefCount; /**< reference count */ - GLboolean DeletePending; /**< Has glDeleteTexture been called? */ - GLuint Name; /**< an unsigned integer */ + GLuint Name; /**< the user-visible texture object ID */ GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ GLfloat Priority; /**< in [0,1] */ GLfloat BorderColor[4]; /**< unclamped */ GLchan _BorderChan[4]; /**< clamped, as GLchan */ - /** \name Wrap modes - * Are GL_CLAMP, REPEAT, GL_CLAMP_TO_EDGE, and GL_CLAMP_TO_BORDER_ARB. */ - /*@{*/ - GLenum WrapS; - GLenum WrapT; - GLenum WrapR; - /*@}*/ + GLenum WrapS; /**< S-axis texture image wrap mode */ + GLenum WrapT; /**< T-axis texture image wrap mode */ + GLenum WrapR; /**< R-axis texture image wrap mode */ GLenum MinFilter; /**< minification filter */ GLenum MagFilter; /**< magnification filter */ GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ @@ -1268,29 +1393,30 @@ struct gl_texture_object GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ GLboolean CompareFlag; /**< GL_SGIX_shadow */ GLenum CompareOperator; /**< GL_SGIX_shadow */ - GLfloat ShadowAmbient; + GLfloat ShadowAmbient; /**< GL_ARB_shadow_ambient */ GLenum CompareMode; /**< GL_ARB_shadow */ GLenum CompareFunc; /**< GL_ARB_shadow */ GLenum DepthMode; /**< GL_ARB_depth_texture */ GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */ GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - b in spec) */ GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ - GLboolean _IsPowerOfTwo; /**< Are all image dimensions powers of two? */ + GLboolean Complete; /**< Is texture object complete? */ + /** Actual texture images, indexed by [cube face] and [mipmap level] */ struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS]; /** GL_EXT_paletted_texture */ struct gl_color_table Palette; - GLboolean Complete; /**< Is texture object complete? */ - struct gl_texture_object *Next; /**< Next in linked list */ /** - * \name For device driver + * \name For device driver. + * Note: instead of attaching driver data to this pointer, it's preferable + * to instead use this struct as a base class for your own texture object + * class. Driver->NewTextureObject() can be used to implement the + * allocation. */ - /*@{*/ void *DriverData; /**< Arbitrary device driver data */ - /*@}*/ }; @@ -1323,12 +1449,12 @@ struct gl_tex_env_combine_state */ struct gl_texture_unit { - GLuint Enabled; /**< bitmask of TEXTURE_*_BIT flags */ - GLuint _ReallyEnabled; /**< 0 or exactly one of TEXTURE_*_BIT flags */ + GLbitfield Enabled; /**< bitmask of TEXTURE_*_BIT flags */ + GLbitfield _ReallyEnabled; /**< 0 or exactly one of TEXTURE_*_BIT flags */ GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ GLfloat EnvColor[4]; - GLuint TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ + GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ /** \name Tex coord generation mode * Either GL_OBJECT_LINEAR, GL_EYE_LINEAR or GL_SPHERE_MAP. */ /*@{*/ @@ -1337,11 +1463,11 @@ struct gl_texture_unit GLenum GenModeR; GLenum GenModeQ; /*@}*/ - GLuint _GenBitS; - GLuint _GenBitT; - GLuint _GenBitR; - GLuint _GenBitQ; - GLuint _GenFlags; /**< bitwise or of GenBit[STRQ] */ + GLbitfield _GenBitS; + GLbitfield _GenBitT; + GLbitfield _GenBitR; + GLbitfield _GenBitQ; + GLbitfield _GenFlags; /**< bitwise or of GenBit[STRQ] */ GLfloat ObjectPlaneS[4]; GLfloat ObjectPlaneT[4]; GLfloat ObjectPlaneR[4]; @@ -1389,6 +1515,18 @@ struct gl_texture_unit GLboolean ColorTableEnabled; }; +struct texenvprog_cache_item { + GLuint hash; + void *key; + struct gl_fragment_program *data; + struct texenvprog_cache_item *next; +}; + +struct texenvprog_cache { + struct texenvprog_cache_item **items; + GLuint size, n_items; + GLcontext *ctx; +}; /** * Texture attribute group (GL_TEXTURE_BIT). @@ -1399,12 +1537,12 @@ struct gl_texture_attrib * name multitexture */ /**@{*/ - GLuint CurrentUnit; /**< Active texture unit */ - GLuint _EnabledUnits; /**< one bit set for each really-enabled unit */ - GLuint _EnabledCoordUnits; /**< one bit per enabled coordinate unit */ - GLuint _GenFlags; /**< for texgen */ - GLuint _TexGenEnabled; - GLuint _TexMatEnabled; + GLuint CurrentUnit; /**< Active texture unit */ + GLbitfield _EnabledUnits; /**< one bit set for each really-enabled unit */ + GLbitfield _EnabledCoordUnits; /**< one bit per enabled coordinate unit */ + GLbitfield _GenFlags; /**< for texgen */ + GLbitfield _TexGenEnabled; + GLbitfield _TexMatEnabled; /**@}*/ struct gl_texture_unit Unit[MAX_TEXTURE_UNITS]; @@ -1418,6 +1556,9 @@ struct gl_texture_attrib /** GL_EXT_shared_texture_palette */ GLboolean SharedPalette; struct gl_color_table Palette; + + /** Cached texenv fragment programs */ + struct texenvprog_cache env_fp_cache; }; @@ -1429,7 +1570,7 @@ struct gl_transform_attrib GLenum MatrixMode; /**< Matrix mode */ GLfloat EyeUserPlane[MAX_CLIP_PLANES][4]; /**< User clip planes */ GLfloat _ClipUserPlane[MAX_CLIP_PLANES][4]; /**< derived */ - GLuint ClipPlanesEnabled; /**< on/off bitmask */ + GLbitfield ClipPlanesEnabled; /**< on/off bitmask */ GLboolean Normalize; /**< Normalize all normals? */ GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ @@ -1473,10 +1614,9 @@ struct gl_buffer_object GLenum Usage; GLenum Access; GLvoid *Pointer; /**< Only valid while buffer is mapped */ - GLuint Size; /**< Size of storage in bytes */ + GLsizeiptrARB Size; /**< Size of storage in bytes */ GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ GLboolean OnCard; /**< Is buffer in VRAM? (hardware drivers) */ - GLboolean DeletePending; /**< Deleted by user but RefCount > 0? */ }; @@ -1513,14 +1653,43 @@ struct gl_client_array GLsizei Stride; /**< user-specified stride */ GLsizei StrideB; /**< actual stride in bytes */ const GLubyte *Ptr; /**< Points to array data */ - GLuint Enabled; /**< one of the _NEW_ARRAY_ bits */ + GLbitfield Enabled; /**< one of the _NEW_ARRAY_ bits */ GLboolean Normalized; /**< GL_ARB_vertex_program */ /**< GL_ARB_vertex_buffer_object */ struct gl_buffer_object *BufferObj; GLuint _MaxElement; - GLuint Flags; + GLbitfield Flags; +}; + + +/** + * Collection of vertex arrays. Defined by the GL_APPLE_vertex_array_object + * extension, but a nice encapsulation in any case. + */ +struct gl_array_object +{ + /** Name of the array object as received from glGenVertexArrayAPPLE. */ + GLuint Name; + + /** Conventional vertex arrays */ + /*@{*/ + struct gl_client_array Vertex; + struct gl_client_array Normal; + struct gl_client_array Color; + struct gl_client_array SecondaryColor; + struct gl_client_array FogCoord; + struct gl_client_array Index; + struct gl_client_array TexCoord[MAX_TEXTURE_COORD_UNITS]; + struct gl_client_array EdgeFlag; + /*@}*/ + + /** Generic arrays for vertex programs/shaders */ + struct gl_client_array VertexAttrib[VERT_ATTRIB_MAX]; + + /** Mask of _NEW_ARRAY_* values indicating which arrays are enabled */ + GLbitfield _Enabled; }; @@ -1529,23 +1698,14 @@ struct gl_client_array */ struct gl_array_attrib { - struct gl_client_array Vertex; /**< client data descriptors */ - struct gl_client_array Normal; - struct gl_client_array Color; - struct gl_client_array SecondaryColor; - struct gl_client_array FogCoord; - struct gl_client_array Index; - struct gl_client_array TexCoord[MAX_TEXTURE_COORD_UNITS]; - struct gl_client_array EdgeFlag; - - struct gl_client_array VertexAttrib[VERT_ATTRIB_MAX]; /**< GL_NV_vertex_program */ + struct gl_array_object *ArrayObj; + struct gl_array_object *DefaultArrayObj; GLint ActiveTexture; /**< Client Active Texture */ GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ - GLuint _Enabled; /**< _NEW_ARRAY_* - bit set if array enabled */ - GLuint NewState; /**< _NEW_ARRAY_* */ + GLbitfield NewState; /**< mask of _NEW_ARRAY_* values */ #if FEATURE_ARB_vertex_buffer_object struct gl_buffer_object *NullBufferObj; @@ -1562,7 +1722,7 @@ struct gl_array_attrib struct gl_feedback { GLenum Type; - GLuint _Mask; /* FB_* bits */ + GLbitfield _Mask; /* FB_* bits */ GLfloat *Buffer; GLuint BufferSize; GLuint Count; @@ -1650,199 +1810,234 @@ struct gl_evaluators /** - * NV_fragment_program runtime state + * Names of the various vertex/fragment program register files, etc. + * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c) + * All values should fit in a 4-bit field. */ -struct fp_machine +enum register_file { - GLfloat Temporaries[MAX_NV_FRAGMENT_PROGRAM_TEMPS][4]; - GLfloat Inputs[MAX_NV_FRAGMENT_PROGRAM_INPUTS][4]; - GLfloat Outputs[MAX_NV_FRAGMENT_PROGRAM_OUTPUTS][4]; - GLuint CondCodes[4]; + PROGRAM_TEMPORARY = 0, + PROGRAM_LOCAL_PARAM = 1, + PROGRAM_ENV_PARAM = 2, + PROGRAM_STATE_VAR = 3, + PROGRAM_INPUT = 4, + PROGRAM_OUTPUT = 5, + PROGRAM_NAMED_PARAM = 6, + PROGRAM_CONSTANT = 7, + PROGRAM_WRITE_ONLY = 8, + PROGRAM_ADDRESS = 9, + PROGRAM_UNDEFINED = 10, /* invalid value */ + PROGRAM_FILE_MAX }; + +/** Vertex and fragment instructions */ +struct prog_instruction; +struct gl_program_parameter_list; + + +/** + * Base class for any kind of program object + */ +struct gl_program +{ + GLuint Id; + GLubyte *String; /**< Null-terminated program text */ + GLint RefCount; + GLenum Target; + GLenum Format; /**< String encoding format */ + GLboolean Resident; + + struct prog_instruction *Instructions; + + GLbitfield InputsRead; /* Bitmask of which input regs are read */ + GLbitfield OutputsWritten; /* Bitmask of which output regs are written to */ + + /** Named parameters, constants, etc. from program text */ + struct gl_program_parameter_list *Parameters; + /** Numbered local parameters */ + GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4]; + + /** Logical counts */ + /*@{*/ + GLuint NumInstructions; + GLuint NumTemporaries; + GLuint NumParameters; + GLuint NumAttributes; + GLuint NumAddressRegs; + /*@}*/ + /** Native, actual h/w counts */ + /*@{*/ + GLuint NumNativeInstructions; + GLuint NumNativeTemporaries; + GLuint NumNativeParameters; + GLuint NumNativeAttributes; + GLuint NumNativeAddressRegs; + /*@}*/ +}; + + +/** Vertex program object */ +struct gl_vertex_program +{ + struct gl_program Base; /**< base class */ + GLboolean IsNVProgram; /**< is this a GL_NV_vertex_program program? */ + GLboolean IsPositionInvariant; + void *TnlData; /**< should probably use Base.DriverData */ +}; + + +/** Fragment program object */ +struct gl_fragment_program +{ + struct gl_program Base; /**< base class */ + GLbitfield TexturesUsed[MAX_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */ + GLuint NumAluInstructions; /**< GL_ARB_fragment_program */ + GLuint NumTexInstructions; + GLuint NumTexIndirections; + GLuint NumNativeAluInstructions; /**< GL_ARB_fragment_program */ + GLuint NumNativeTexInstructions; + GLuint NumNativeTexIndirections; + GLenum FogOption; + GLboolean UsesKill; +}; + + +/** + * State common to vertex and fragment programs. + */ +struct gl_program_state +{ + GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */ + const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */ +}; + + +/** + * Context state for vertex programs. + */ +struct gl_vertex_program_state +{ + GLboolean Enabled; /**< GL_VERTEX_PROGRAM_ARB/NV */ + GLboolean _Enabled; /**< Enabled and valid program? */ + GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ + GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ + struct gl_vertex_program *Current; /**< ptr to currently bound program */ + const struct gl_vertex_program *_Current; /**< ptr to currently bound + program, including internal + (t_vp_build.c) programs */ + + GLfloat Parameters[MAX_NV_VERTEX_PROGRAM_PARAMS][4]; /**< Env params */ + + /* For GL_NV_vertex_program only: */ + GLenum TrackMatrix[MAX_NV_VERTEX_PROGRAM_PARAMS / 4]; + GLenum TrackMatrixTransform[MAX_NV_VERTEX_PROGRAM_PARAMS / 4]; + +#if FEATURE_MESA_program_debug + GLprogramcallbackMESA Callback; + GLvoid *CallbackData; + GLboolean CallbackEnabled; + GLuint CurrentPosition; +#endif +}; + + +/** + * Context state for fragment programs. + */ +struct gl_fragment_program_state +{ + GLboolean Enabled; /**< User-set fragment program enable flag */ + GLboolean _Enabled; /**< Fragment program enabled and valid? */ + GLboolean _Active; /**< Is a user program or internal program active? */ + struct gl_fragment_program *Current; /**< User-bound program */ + const struct gl_fragment_program *_Current; /**< currently active program + (including internal programs) */ + GLfloat Parameters[MAX_NV_FRAGMENT_PROGRAM_PARAMS][4]; /**< Env params */ + +#if FEATURE_MESA_program_debug + GLprogramcallbackMESA Callback; + GLvoid *CallbackData; + GLboolean CallbackEnabled; + GLuint CurrentPosition; +#endif +}; + + /** * ATI_fragment_shader runtime state */ #define ATI_FS_INPUT_PRIMARY 0 #define ATI_FS_INPUT_SECONDARY 1 -/* 6 register sets - 2 inputs (primary, secondary) */ -struct atifs_machine -{ - GLfloat Registers[6][4]; - GLfloat PrevPassRegisters[6][4]; - GLfloat Inputs[2][4]; - GLuint pass; -}; - - -/** - * Names of the various vertex/fragment register files - */ -enum register_file -{ - PROGRAM_TEMPORARY = 10, - PROGRAM_INPUT, - PROGRAM_OUTPUT, - PROGRAM_LOCAL_PARAM, - PROGRAM_ENV_PARAM, - PROGRAM_NAMED_PARAM, - PROGRAM_STATE_VAR, - PROGRAM_WRITE_ONLY, - PROGRAM_ADDRESS -}; - - -/** Vertex and fragment instructions */ -struct vp_instruction; -struct fp_instruction; struct atifs_instruction; -struct program_parameter_list; - +struct atifs_setupinst; /** - * Base class for any kind of program object + * ATI fragment shader */ -struct program -{ - GLuint Id; - GLubyte *String; /**< Null-terminated program text */ - GLboolean DeletePending; /**< User called glDeletePrograms? */ - GLint RefCount; - GLenum Target; - GLenum Format; /**< String encoding format */ - GLboolean Resident; - GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4]; - GLuint NumInstructions; /* GL_ARB_vertex/fragment_program */ - GLuint NumTemporaries; - GLuint NumParameters; - GLuint NumAttributes; - GLuint NumAddressRegs; -}; - - -/** Vertex program object */ -struct vertex_program -{ - struct program Base; /* base class */ - struct vp_instruction *Instructions; /* Compiled instructions */ - GLboolean IsNVProgram; /* GL_NV_vertex_program ? */ - GLboolean IsPositionInvariant; /* GL_NV_vertex_program1_1 */ - GLuint InputsRead; /* Bitmask of which input regs are read */ - GLuint OutputsWritten; /* Bitmask of which output regs are written to */ - struct program_parameter_list *Parameters; /**< array [NumParameters] */ -}; - - -/** Fragment program object */ -struct fragment_program -{ - struct program Base; /**< base class */ - struct fp_instruction *Instructions; /**< Compiled instructions */ - GLuint InputsRead; /**< Bitmask of which input regs are read */ - GLuint OutputsWritten; /**< Bitmask of which output regs are written to */ - GLuint TexturesUsed[MAX_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_INDEX bitmask */ - GLuint NumAluInstructions; /**< GL_ARB_fragment_program */ - GLuint NumTexInstructions; - GLuint NumTexIndirections; - GLenum FogOption; - struct program_parameter_list *Parameters; /**< array [NumParameters] */ - -#ifdef USE_TCC - char c_str[4096]; /* experimental... */ - int c_strlen; -#endif -}; - struct ati_fragment_shader { - struct program Base; - struct atifs_instruction *Instructions; - GLfloat Constants[8][4]; - GLint cur_pass; + GLuint Id; + GLint RefCount; + struct atifs_instruction *Instructions[2]; + struct atifs_setupinst *SetupInst[2]; + GLfloat Constants[8][4]; + GLbitfield LocalConstDef; /** Indicates which constants have been set */ + GLubyte numArithInstr[2]; + GLubyte regsAssigned[2]; + GLubyte NumPasses; /** 1 or 2 */ + GLubyte cur_pass; + GLubyte last_optype; + GLboolean interpinp1; + GLboolean isValid; + GLuint swizzlerq; }; /** - * State common to vertex and fragment programs. - */ -struct gl_program_state -{ - GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_NV */ - const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_NV */ -}; - - -/** - * State vars for GL_ARB/GL_NV_vertex_program - */ -struct gl_vertex_program_state -{ - GLboolean Enabled; /**< GL_VERTEX_PROGRAM_NV */ - GLboolean _Enabled; /**< Really enabled? */ - GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_NV */ - GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_NV */ - struct vertex_program *Current; /**< ptr to currently bound program */ - - GLenum TrackMatrix[MAX_NV_VERTEX_PROGRAM_PARAMS / 4]; - GLenum TrackMatrixTransform[MAX_NV_VERTEX_PROGRAM_PARAMS / 4]; - - GLfloat Parameters[MAX_NV_VERTEX_PROGRAM_PARAMS][4]; /* Env params */ - /* Only used during program execution (may be moved someday): */ - GLfloat Temporaries[MAX_NV_VERTEX_PROGRAM_TEMPS][4]; - GLfloat Inputs[MAX_NV_VERTEX_PROGRAM_INPUTS][4]; - GLuint InputsSize[MAX_NV_VERTEX_PROGRAM_INPUTS]; - GLfloat Outputs[MAX_NV_VERTEX_PROGRAM_OUTPUTS][4]; - GLint AddressReg[4]; - -#if FEATURE_MESA_program_debug - GLprogramcallbackMESA Callback; - GLvoid *CallbackData; - GLboolean CallbackEnabled; - GLuint CurrentPosition; -#endif -}; - - -/* - * State for GL_ARB/NV_fragment_program - */ -struct gl_fragment_program_state -{ - GLboolean Enabled; /* GL_VERTEX_PROGRAM_NV */ - GLboolean _Enabled; /* Really enabled? */ - struct fragment_program *Current; /* ptr to currently bound program */ - struct fp_machine Machine; /* machine state */ - GLfloat Parameters[MAX_NV_FRAGMENT_PROGRAM_PARAMS][4]; /* Env params */ - -#if FEATURE_MESA_program_debug - GLprogramcallbackMESA Callback; - GLvoid *CallbackData; - GLboolean CallbackEnabled; - GLuint CurrentPosition; -#endif -}; - -/* - * State for GL_fragment_shader + * Context state for GL_ATI_fragment_shader */ struct gl_ati_fragment_shader_state { - GLboolean Enabled; - GLboolean _Enabled; - GLboolean Compiling; - struct atifs_machine Machine; /* machine state */ - struct ati_fragment_shader *Current; + GLboolean Enabled; + GLboolean _Enabled; /** enabled and valid shader? */ + GLboolean Compiling; + GLfloat GlobalConstants[8][4]; + struct ati_fragment_shader *Current; }; -/* - * State for GL_ARB_occlusion_query + +/** + * Occlusion/timer query object. */ -struct gl_occlusion_state +struct gl_query_object +{ + GLuint Id; + GLuint64EXT Result; /* the counter */ + GLboolean Active; /* inside Begin/EndQuery */ + GLboolean Ready; /* result is ready */ +}; + + +/** + * Context state for query objects. + */ +struct gl_query_state { - GLboolean Active; - GLuint CurrentQueryObject; - GLuint PassedCounter; struct _mesa_HashTable *QueryObjects; + struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */ + struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */ +}; + + +/** + * Context state for vertex/fragment shaders. + */ +struct gl_shader_objects_state +{ + struct gl2_program_intf **CurrentProgram; + GLboolean _VertexShaderPresent; + GLboolean _FragmentShaderPresent; }; @@ -1855,7 +2050,6 @@ struct gl_shared_state GLint RefCount; /**< Reference count */ struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ - struct gl_texture_object *TexObjectList;/**< Linked list of texture objects */ /** * \name Default texture objects (shared by all multi-texture units) @@ -1869,87 +2063,269 @@ struct gl_shared_state /*@}*/ /** - * \name GL_NV_vertex/_program + * \name Thread safety and statechange notification for texture + * objects. + * + * \todo Improve the granularity of locking. */ /*@{*/ - struct _mesa_HashTable *Programs; + _glthread_Mutex TexMutex; /**< texobj thread safety */ + GLuint TextureStateStamp; /**< state notification for shared tex */ + /*@}*/ + + + + /** + * \name Vertex/fragment programs + */ + /*@{*/ + struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */ #if FEATURE_ARB_vertex_program - struct program *DefaultVertexProgram; + struct gl_program *DefaultVertexProgram; #endif #if FEATURE_ARB_fragment_program - struct program *DefaultFragmentProgram; -#endif -#if FEATURE_ATI_fragment_shader - struct program *DefaultFragmentShader; + struct gl_program *DefaultFragmentProgram; #endif /*@}*/ -#if FEATURE_ARB_vertex_buffer_object +#if FEATURE_ATI_fragment_shader + struct _mesa_HashTable *ATIShaders; + struct ati_fragment_shader *DefaultFragmentShader; +#endif + +#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object struct _mesa_HashTable *BufferObjects; #endif +#if FEATURE_ARB_shader_objects + struct _mesa_HashTable *GL2Objects; +#endif + +#if FEATURE_EXT_framebuffer_object + struct _mesa_HashTable *RenderBuffers; + struct _mesa_HashTable *FrameBuffers; +#endif + + /** Objects associated with the GL_APPLE_vertex_array_object extension. */ + struct _mesa_HashTable *ArrayObjects; + void *DriverData; /**< Device driver shared state */ }; + + /** - * Frame buffer. + * A renderbuffer stores colors or depth values or stencil values. + * A framebuffer object will have a collection of these. + * Data are read/written to the buffer with a handful of Get/Put functions. * - * A "frame buffer" is a color buffer and its optional ancillary buffers: - * depth, accum, stencil, and software-simulated alpha buffers. + * Instances of this object are allocated with the Driver's NewRenderbuffer + * hook. Drivers will likely wrap this class inside a driver-specific + * class to simulate inheritance. + */ +struct gl_renderbuffer +{ + _glthread_Mutex Mutex; /**< for thread safety */ + GLuint ClassID; /**< Useful for drivers */ + GLuint Name; + GLint RefCount; + GLuint Width, Height; + GLenum InternalFormat; /**< The user-specified format */ + GLenum _ActualFormat; /**< The driver-chosen format */ + GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or + GL_STENCIL_INDEX. */ + GLenum DataType; /**< Type of values passed to the Get/Put functions */ + GLubyte RedBits; /**< Bits of red per pixel */ + GLubyte GreenBits; + GLubyte BlueBits; + GLubyte AlphaBits; + GLubyte IndexBits; + GLubyte DepthBits; + GLubyte StencilBits; + GLvoid *Data; + + /* Used to wrap one renderbuffer around another: */ + struct gl_renderbuffer *Wrapped; + + /* Delete this renderbuffer */ + void (*Delete)(struct gl_renderbuffer *rb); + + /* Allocate new storage for this renderbuffer */ + GLboolean (*AllocStorage)(GLcontext *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, + GLuint width, GLuint height); + + /* Lock/Unlock are called before/after calling the Get/Put functions. + * Not sure this is the right place for these yet. + void (*Lock)(GLcontext *ctx, struct gl_renderbuffer *rb); + void (*Unlock)(GLcontext *ctx, struct gl_renderbuffer *rb); + */ + + /* Return a pointer to the element/pixel at (x,y). + * Should return NULL if the buffer memory can't be directly addressed. + */ + void *(*GetPointer)(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y); + + /* Get/Read a row of values. + * The values will be of format _BaseFormat and type DataType. + */ + void (*GetRow)(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values); + + /* Get/Read values at arbitrary locations. + * The values will be of format _BaseFormat and type DataType. + */ + void (*GetValues)(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values); + + /* Put/Write a row of values. + * The values will be of format _BaseFormat and type DataType. + */ + void (*PutRow)(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask); + + /* Put/Write a row of RGB values. This is a special-case routine that's + * only used for RGBA renderbuffers when the source data is GL_RGB. That's + * a common case for glDrawPixels and some triangle routines. + * The values will be of format GL_RGB and type DataType. + */ + void (*PutRowRGB)(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask); + + + /* Put/Write a row of identical values. + * The values will be of format _BaseFormat and type DataType. + */ + void (*PutMonoRow)(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask); + + /* Put/Write values at arbitrary locations. + * The values will be of format _BaseFormat and type DataType. + */ + void (*PutValues)(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask); + /* Put/Write identical values at arbitrary locations. + * The values will be of format _BaseFormat and type DataType. + */ + void (*PutMonoValues)(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask); +}; + + +/** + * A renderbuffer attachment point points to either a texture object + * (and specifies a mipmap level, cube face or 3D texture slice) or + * points to a renderbuffer. + */ +struct gl_renderbuffer_attachment +{ + GLenum Type; /* GL_NONE or GL_TEXTURE or GL_RENDERBUFFER_EXT */ + GLboolean Complete; + + /* IF Type == GL_RENDERBUFFER_EXT: */ + struct gl_renderbuffer *Renderbuffer; + + /* IF Type == GL_TEXTURE: */ + struct gl_texture_object *Texture; + GLuint TextureLevel; + GLuint CubeMapFace; /* 0 .. 5, for cube map textures */ + GLuint Zoffset; /* for 3D textures */ +}; + + +/** + * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc). * In C++ terms, think of this as a base class from which device drivers * will make derived classes. */ -struct gl_frame_buffer +struct gl_framebuffer { - GLvisual Visual; /**< The corresponding visual */ + _glthread_Mutex Mutex; /**< for thread safety */ + GLuint Name; /* if zero, this is a window system framebuffer */ + GLint RefCount; - GLuint Width, Height; /**< size of frame buffer in pixels */ + GLvisual Visual; /**< The framebuffer's visual. + Immutable if this is a window system buffer. + Computed from attachments if user-made FBO. */ GLboolean Initialized; - GLboolean UseSoftwareDepthBuffer; - GLboolean UseSoftwareAccumBuffer; - GLboolean UseSoftwareStencilBuffer; - GLboolean UseSoftwareAlphaBuffers; - GLboolean UseSoftwareAuxBuffers; + GLuint Width, Height; /**< size of frame buffer in pixels */ - /** \name Software depth (aka Z) buffer */ + /** \name Drawing bounds (Intersection of buffer size and scissor box) */ /*@{*/ - GLvoid *DepthBuffer; /**< array [Width*Height] of GLushort or GLuint*/ + GLint _Xmin, _Xmax; /**< inclusive */ + GLint _Ymin, _Ymax; /**< exclusive */ /*@}*/ - /** \name Software stencil buffer */ + /** \name Derived Z buffer stuff */ /*@{*/ - GLstencil *Stencil; /**< array [Width*Height] of GLstencil values */ + GLuint _DepthMax; /**< Max depth buffer value */ + GLfloat _DepthMaxF; /**< Float max depth buffer value */ + GLfloat _MRD; /**< minimum resolvable difference in Z values */ /*@}*/ - /** \name Software accumulation buffer */ - /*@{*/ - GLaccum *Accum; /**< array [4*Width*Height] of GLaccum values */ - /*@}*/ + GLenum _Status; /* One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ - /** \name Software alpha planes */ - /*@{*/ - GLchan *FrontLeftAlpha; /**< array [Width*Height] of GLchan */ - GLchan *BackLeftAlpha; /**< array [Width*Height] of GLchan */ - GLchan *FrontRightAlpha; /**< array [Width*Height] of GLchan */ - GLchan *BackRightAlpha; /**< array [Width*Height] of GLchan */ - /*@}*/ + /* Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ + struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; - GLchan *AuxBuffers[MAX_AUX_BUFFERS]; - - /** - * \name Drawing bounds - * - * Intersection of window size and scissor box + /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER + * attribute group and GL_PIXEL attribute group, respectively. */ - /*@{*/ - GLint _Xmin; /**< inclusive */ - GLint _Ymin; /**< inclusive */ - GLint _Xmax; /**< exclusive */ - GLint _Ymax; /**< exclusive */ - /*@}*/ + GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS]; + GLenum ColorReadBuffer; + + /* These are computed from ColorDrawBuffer and ColorReadBuffer */ + GLbitfield _ColorDrawBufferMask[MAX_DRAW_BUFFERS]; /* Mask of BUFFER_BIT_* flags */ + GLint _ColorReadBufferIndex; /* -1 = None */ + + /* These are computed from _ColorDrawBufferMask and _ColorReadBufferIndex */ + GLuint _NumColorDrawBuffers[MAX_DRAW_BUFFERS]; + struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS][4]; + struct gl_renderbuffer *_ColorReadBuffer; + + /** The Actual depth/stencil buffers to use. May be wrappers around the + * depth/stencil buffers attached above. */ + struct gl_renderbuffer *_DepthBuffer; + struct gl_renderbuffer *_StencilBuffer; + + /** Delete this framebuffer */ + void (*Delete)(struct gl_framebuffer *fb); +}; + + +/** + * Limits for vertex and fragment programs. + */ +struct gl_program_constants +{ + /* logical limits */ + GLuint MaxInstructions; + GLuint MaxAluInstructions; /* fragment programs only, for now */ + GLuint MaxTexInstructions; /* fragment programs only, for now */ + GLuint MaxTexIndirections; /* fragment programs only, for now */ + GLuint MaxAttribs; + GLuint MaxTemps; + GLuint MaxAddressRegs; /* vertex program only, for now */ + GLuint MaxParameters; + GLuint MaxLocalParams; + GLuint MaxEnvParams; + /* native/hardware limits */ + GLuint MaxNativeInstructions; + GLuint MaxNativeAluInstructions; /* fragment programs only, for now */ + GLuint MaxNativeTexInstructions; /* fragment programs only, for now */ + GLuint MaxNativeTexIndirections; /* fragment programs only, for now */ + GLuint MaxNativeAttribs; + GLuint MaxNativeTemps; + GLuint MaxNativeAddressRegs; /* vertex program only, for now */ + GLuint MaxNativeParameters; + /* For shaders */ + GLuint MaxUniformComponents; }; @@ -1965,7 +2341,7 @@ struct gl_constants GLint MaxTextureRectSize; /* GL_NV_texture_rectangle */ GLuint MaxTextureCoordUnits; GLuint MaxTextureImageUnits; - GLuint MaxTextureUnits; /* = MAX(CoordUnits, ImageUnits) */ + GLuint MaxTextureUnits; /* = MIN(CoordUnits, ImageUnits) */ GLfloat MaxTextureMaxAnisotropy; /* GL_EXT_texture_filter_anisotropic */ GLfloat MaxTextureLodBias; /* GL_EXT_texture_lod_bias */ GLuint MaxArrayLockSize; @@ -1984,24 +2360,9 @@ struct gl_constants GLfloat MaxShininess; /* GL_NV_light_max_exponent */ GLfloat MaxSpotExponent; /* GL_NV_light_max_exponent */ GLuint MaxViewportWidth, MaxViewportHeight; - /* GL_ARB_vertex_program */ - GLuint MaxVertexProgramInstructions; - GLuint MaxVertexProgramAttribs; - GLuint MaxVertexProgramTemps; - GLuint MaxVertexProgramLocalParams; - GLuint MaxVertexProgramEnvParams; - GLuint MaxVertexProgramAddressRegs; - /* GL_ARB_fragment_program */ - GLuint MaxFragmentProgramInstructions; - GLuint MaxFragmentProgramAttribs; - GLuint MaxFragmentProgramTemps; - GLuint MaxFragmentProgramLocalParams; - GLuint MaxFragmentProgramEnvParams; - GLuint MaxFragmentProgramAddressRegs; - GLuint MaxFragmentProgramAluInstructions; - GLuint MaxFragmentProgramTexInstructions; - GLuint MaxFragmentProgramTexIndirections; - /* vertex or fragment program */ + struct gl_program_constants VertexProgram; /* GL_ARB_vertex_program */ + struct gl_program_constants FragmentProgram; /* GL_ARB_fragment_program */ + /* shared by vertex and fragment program: */ GLuint MaxProgramMatrices; GLuint MaxProgramMatrixStackDepth; /* vertex array / buffer object bounds checking */ @@ -2011,6 +2372,12 @@ struct gl_constants /* GL_OES_read_format */ GLenum ColorReadFormat; GLenum ColorReadType; + /* GL_EXT_framebuffer_object */ + GLuint MaxColorAttachments; + GLuint MaxRenderbufferSize; + /* GL_ARB_vertex_shader */ + GLuint MaxVertexTextureImageUnits; + GLuint MaxVaryingFloats; }; @@ -2038,6 +2405,8 @@ struct gl_extensions GLboolean ARB_occlusion_query; GLboolean ARB_point_sprite; GLboolean ARB_shader_objects; + GLboolean ARB_shading_language_100; + GLboolean ARB_shading_language_120; GLboolean ARB_shadow; GLboolean ARB_texture_border_clamp; GLboolean ARB_texture_compression; @@ -2068,10 +2437,14 @@ struct gl_extensions GLboolean EXT_copy_texture; GLboolean EXT_depth_bounds_test; GLboolean EXT_draw_range_elements; + GLboolean EXT_framebuffer_object; GLboolean EXT_fog_coord; + GLboolean EXT_framebuffer_blit; + GLboolean EXT_gpu_program_parameters; GLboolean EXT_histogram; GLboolean EXT_multi_draw_arrays; GLboolean EXT_paletted_texture; + GLboolean EXT_packed_depth_stencil; GLboolean EXT_packed_pixels; GLboolean EXT_pixel_buffer_object; GLboolean EXT_point_parameters; @@ -2094,15 +2467,17 @@ struct gl_extensions GLboolean EXT_texture_filter_anisotropic; GLboolean EXT_texture_lod_bias; GLboolean EXT_texture_mirror_clamp; + GLboolean EXT_texture_sRGB; + GLboolean EXT_timer_query; GLboolean EXT_vertex_array; GLboolean EXT_vertex_array_set; /* vendor extensions */ GLboolean APPLE_client_storage; GLboolean APPLE_packed_pixels; + GLboolean APPLE_vertex_array_object; GLboolean ATI_texture_mirror_once; GLboolean ATI_texture_env_combine3; GLboolean ATI_fragment_shader; - GLboolean HP_occlusion_test; GLboolean IBM_rasterpos_clip; GLboolean IBM_multimode_draw_arrays; GLboolean MESA_pack_invert; @@ -2123,11 +2498,9 @@ struct gl_extensions GLboolean SGI_color_table; GLboolean SGI_texture_color_table; GLboolean SGIS_generate_mipmap; - GLboolean SGIS_pixel_texture; GLboolean SGIS_texture_edge_clamp; GLboolean SGIS_texture_lod; GLboolean SGIX_depth_texture; - GLboolean SGIX_pixel_texture; GLboolean SGIX_shadow; GLboolean SGIX_shadow_ambient; /* or GL_ARB_shadow_ambient */ GLboolean TDFX_texture_compression_FXT1; @@ -2237,7 +2610,7 @@ struct matrix_stack #define _NEW_ARRAY_COLOR0 VERT_BIT_COLOR0 #define _NEW_ARRAY_COLOR1 VERT_BIT_COLOR1 #define _NEW_ARRAY_FOGCOORD VERT_BIT_FOG -#define _NEW_ARRAY_INDEX VERT_BIT_SIX +#define _NEW_ARRAY_INDEX VERT_BIT_COLOR_INDEX #define _NEW_ARRAY_EDGEFLAG VERT_BIT_SEVEN #define _NEW_ARRAY_TEXCOORD_0 VERT_BIT_TEX0 #define _NEW_ARRAY_TEXCOORD_1 VERT_BIT_TEX1 @@ -2342,22 +2715,46 @@ struct gl_tnl_module * On restore, only need to swap these functions back in. */ /*@{*/ - void *Swapped[NUM_VERTEX_FORMAT_ENTRIES][2]; + struct { + _glapi_proc * location; + _glapi_proc function; + } Swapped[NUM_VERTEX_FORMAT_ENTRIES]; GLuint SwapCount; /*@}*/ }; +/* Strictly this is a tnl/ private concept, but it doesn't seem + * worthwhile adding a tnl private structure just to hold this one bit + * of information: + */ +#define MESA_DLIST_DANGLING_REFS 0x1 + +/* Provide a location where information about a display list can be + * collected. Could be extended with driverPrivate structures, + * etc. in the future. + */ +struct mesa_display_list +{ + Node *node; + GLuint id; + GLbitfield flags; +}; + /** * State used during display list compilation and execution. */ struct mesa_list_state { + struct mesa_display_list *CallStack[MAX_LIST_NESTING]; GLuint CallDepth; /**< Current recursion calling depth */ + + struct mesa_display_list *CurrentList; Node *CurrentListPtr; /**< Head of list being compiled */ GLuint CurrentListNum; /**< Number of the list being compiled */ Node *CurrentBlock; /**< Pointer to current block of nodes */ GLuint CurrentPos; /**< Index into current block of nodes */ + GLvertexformat ListVtxfmt; GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; @@ -2410,6 +2807,8 @@ struct __GLcontextRec GLvisual Visual; GLframebuffer *DrawBuffer; /**< buffer for writing */ GLframebuffer *ReadBuffer; /**< buffer for reading */ + GLframebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */ + GLframebuffer *WinSysReadBuffer; /**< set with MakeCurrent */ /** * Device driver function pointer table @@ -2441,10 +2840,10 @@ struct __GLcontextRec GLboolean ExecuteFlag; /**< Execute GL commands? */ GLboolean CompileFlag; /**< Compile GL commands into display list? */ - /** Extensions */ + /** Extension information */ struct gl_extensions Extensions; - /** \name Renderer attribute stack */ + /** \name State attribute stack (for glPush/PopAttrib) */ /*@{*/ GLuint AttribStackDepth; struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH]; @@ -2456,8 +2855,8 @@ struct __GLcontextRec * attributes easy. Also it's a good organization. */ /*@{*/ - struct gl_accum_attrib Accum; /**< Accumulation buffer attributes */ - struct gl_colorbuffer_attrib Color; /**< Color buffers attributes */ + struct gl_accum_attrib Accum; /**< Accum buffer attributes */ + struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */ struct gl_current_attrib Current; /**< Current attributes */ struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */ struct gl_eval_attrib Eval; /**< Eval attributes */ @@ -2512,28 +2911,42 @@ struct __GLcontextRec struct gl_color_table ProxyPostColorMatrixColorTable; struct gl_program_state Program; /**< for vertex or fragment progs */ - struct gl_vertex_program_state VertexProgram; /**< GL_NV_vertex_program */ - struct gl_fragment_program_state FragmentProgram; /**< GL_NV_fragment_program */ + struct gl_vertex_program_state VertexProgram; /**< GL_ARB/NV_vertex_program */ + struct gl_fragment_program_state FragmentProgram; /**< GL_ARB/NV_vertex_program */ struct gl_ati_fragment_shader_state ATIFragmentShader; /**< GL_ATI_fragment_shader */ - struct gl_occlusion_state Occlusion; /**< GL_ARB_occlusion_query */ + struct gl_fragment_program *_TexEnvProgram; /**< Texture state as fragment program */ + struct gl_vertex_program *_TnlProgram; /**< Fixed func TNL state as vertex program */ + + GLboolean _MaintainTnlProgram; + GLboolean _MaintainTexEnvProgram; + GLboolean _UseTexEnvProgram; + + struct gl_query_state Query; /**< GL_ARB_occlusion_query */ + + struct gl_shader_objects_state ShaderObjects; /* GL_ARB_shader_objects */ /*@}*/ +#if FEATURE_EXT_framebuffer_object + struct gl_renderbuffer *CurrentRenderbuffer; +#endif + GLenum ErrorValue; /**< Last error code */ GLenum RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */ - GLuint NewState; /**< bitwise-or of _NEW_* flags */ + GLbitfield NewState; /**< bitwise-or of _NEW_* flags */ /** \name Derived state */ /*@{*/ - GLuint _TriangleCaps; /**< bitwise-or of DD_* flags */ - GLuint _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ + GLbitfield _TriangleCaps; /**< bitwise-or of DD_* flags */ + GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ GLfloat _EyeZDir[3]; GLfloat _ModelViewInvScale; - GLuint _NeedEyeCoords; - GLuint _ForceEyeCoords; - GLboolean _RotateMode; + GLboolean _NeedEyeCoords; + GLboolean _ForceEyeCoords; GLenum _CurrentProgram; /* currently executing program */ + GLuint TextureStateTimestamp; /* detect changes to shared state */ + struct gl_shine_tab *_ShineTable[2]; /**< Active shine tables */ struct gl_shine_tab *_ShineTabList; /**< MRU list of inactive shine tables */ /**@}*/ @@ -2541,27 +2954,11 @@ struct __GLcontextRec struct gl_list_extensions ListExt; /**< driver dlist extensions */ - GLboolean OcclusionResult; /**< for GL_HP_occlusion_test */ - GLboolean OcclusionResultSaved; /**< for GL_HP_occlusion_test */ GLuint _Facing; /**< This is a hack for 2-sided stencil test. * * We don't have a better way to communicate this value from * swrast_setup to swrast. */ - - /** \name Z buffer stuff */ - /*@{*/ - GLuint DepthMax; /**< Max depth buffer value */ - GLfloat DepthMaxF; /**< Float max depth buffer value */ - GLfloat MRD; /**< minimum resolvable difference in Z values */ - /*@}*/ - - /** \name Color clamping (tentative part of GL_ARB_color_clamp_control) */ - /*@{*/ - GLboolean ClampFragmentColors; - GLboolean ClampVertexColors; - /*@}*/ - /** \name For debugging/development only */ /*@{*/ GLboolean FirstTimeCurrent; @@ -2596,7 +2993,7 @@ struct __GLcontextRec extern const char *_mesa_prim_name[GL_POLYGON+4]; -#ifdef MESA_DEBUG +#ifdef DEBUG extern int MESA_VERBOSE; extern int MESA_DEBUG_FLAGS; # define MESA_FUNCTION __FUNCTION__ @@ -2622,7 +3019,8 @@ enum _verbose VERBOSE_DISPLAY_LIST = 0x0100, VERBOSE_LIGHTING = 0x0200, VERBOSE_PRIMS = 0x0400, - VERBOSE_VERTS = 0x0800 + VERBOSE_VERTS = 0x0800, + VERBOSE_DISASSEM = 0x1000 }; diff --git a/src/kits/opengl/mesa/main/occlude.c b/src/kits/opengl/mesa/main/occlude.c index bc61a475d6..5fef4a800d 100644 --- a/src/kits/opengl/mesa/main/occlude.c +++ b/src/kits/opengl/mesa/main/occlude.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.0.2 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -23,11 +23,6 @@ */ -/* - * Functions to implement the GL_ARB_occlusion_query extension. - */ - - #include "glheader.h" #include "context.h" #include "hash.h" @@ -36,30 +31,23 @@ #include "mtypes.h" -struct occlusion_query -{ - GLenum Target; - GLuint Id; - GLuint PassedCounter; - GLboolean Active; -}; - - /** - * Allocate a new occlusion query object. - * \param target - must be GL_SAMPLES_PASSED_ARB at this time - * \param id - the object's ID - * \return pointer to new occlusion_query object or NULL if out of memory. + * Allocate a new query object. This is a fallback routine called via + * ctx->Driver.NewQueryObject(). + * \param ctx - rendering context + * \param id - the new object's ID + * \return pointer to new query_object object or NULL if out of memory. */ -static struct occlusion_query * -new_query_object(GLenum target, GLuint id) +struct gl_query_object * +_mesa_new_query_object(GLcontext *ctx, GLuint id) { - struct occlusion_query *q = MALLOC_STRUCT(occlusion_query); + struct gl_query_object *q = MALLOC_STRUCT(gl_query_object); + (void) ctx; if (q) { - q->Target = target; q->Id = id; - q->PassedCounter = 0; + q->Result = 0; q->Active = GL_FALSE; + q->Ready = GL_TRUE; /* correct, see spec */ } return q; } @@ -67,19 +55,30 @@ new_query_object(GLenum target, GLuint id) /** * Delete an occlusion query object. + * Not removed from hash table here. + * XXX maybe add Delete() method to gl_query_object class and call that instead */ static void -delete_query_object(struct occlusion_query *q) +delete_query_object(struct gl_query_object *q) { FREE(q); } +static struct gl_query_object * +lookup_query_object(GLcontext *ctx, GLuint id) +{ + return (struct gl_query_object *) + _mesa_HashLookup(ctx->Query.QueryObjects, id); +} + + + void GLAPIENTRY _mesa_GenQueriesARB(GLsizei n, GLuint *ids) { - GET_CURRENT_CONTEXT(ctx); GLuint first; + GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (n < 0) { @@ -87,23 +86,25 @@ _mesa_GenQueriesARB(GLsizei n, GLuint *ids) return; } - if (ctx->Occlusion.Active) { + /* No query objects can be active at this time! */ + if (ctx->Query.CurrentOcclusionObject || + ctx->Query.CurrentTimerObject) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGenQueriesARB"); return; } - first = _mesa_HashFindFreeKeyBlock(ctx->Occlusion.QueryObjects, n); + first = _mesa_HashFindFreeKeyBlock(ctx->Query.QueryObjects, n); if (first) { GLsizei i; for (i = 0; i < n; i++) { - struct occlusion_query *q = new_query_object(GL_SAMPLES_PASSED_ARB, - first + i); + struct gl_query_object *q + = ctx->Driver.NewQueryObject(ctx, first + i); if (!q) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenQueriesARB"); return; } ids[i] = first + i; - _mesa_HashInsert(ctx->Occlusion.QueryObjects, first + i, q); + _mesa_HashInsert(ctx->Query.QueryObjects, first + i, q); } } } @@ -112,8 +113,8 @@ _mesa_GenQueriesARB(GLsizei n, GLuint *ids) void GLAPIENTRY _mesa_DeleteQueriesARB(GLsizei n, const GLuint *ids) { - GET_CURRENT_CONTEXT(ctx); GLint i; + GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (n < 0) { @@ -121,17 +122,19 @@ _mesa_DeleteQueriesARB(GLsizei n, const GLuint *ids) return; } - if (ctx->Occlusion.Active) { + /* No query objects can be active at this time! */ + if (ctx->Query.CurrentOcclusionObject || + ctx->Query.CurrentTimerObject) { _mesa_error(ctx, GL_INVALID_OPERATION, "glDeleteQueriesARB"); return; } for (i = 0; i < n; i++) { if (ids[i] > 0) { - struct occlusion_query *q = (struct occlusion_query *) - _mesa_HashLookup(ctx->Occlusion.QueryObjects, ids[i]); + struct gl_query_object *q = lookup_query_object(ctx, ids[i]); if (q) { - _mesa_HashRemove(ctx->Occlusion.QueryObjects, ids[i]); + ASSERT(!q->Active); /* should be caught earlier */ + _mesa_HashRemove(ctx->Query.QueryObjects, ids[i]); delete_query_object(q); } } @@ -145,7 +148,7 @@ _mesa_IsQueryARB(GLuint id) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); - if (id && _mesa_HashLookup(ctx->Occlusion.QueryObjects, id)) + if (id && lookup_query_object(ctx, id)) return GL_TRUE; else return GL_FALSE; @@ -155,15 +158,38 @@ _mesa_IsQueryARB(GLuint id) void GLAPIENTRY _mesa_BeginQueryARB(GLenum target, GLuint id) { + struct gl_query_object *q; GET_CURRENT_CONTEXT(ctx); - struct occlusion_query *q; ASSERT_OUTSIDE_BEGIN_END(ctx); FLUSH_VERTICES(ctx, _NEW_DEPTH); - if (target != GL_SAMPLES_PASSED_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glBeginQueryARB(target)"); - return; + switch (target) { + case GL_SAMPLES_PASSED_ARB: + if (!ctx->Extensions.ARB_occlusion_query) { + _mesa_error(ctx, GL_INVALID_ENUM, "glBeginQueryARB(target)"); + return; + } + if (ctx->Query.CurrentOcclusionObject) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glBeginQueryARB"); + return; + } + break; +#if FEATURE_EXT_timer_query + case GL_TIME_ELAPSED_EXT: + if (!ctx->Extensions.EXT_timer_query) { + _mesa_error(ctx, GL_INVALID_ENUM, "glBeginQueryARB(target)"); + return; + } + if (ctx->Query.CurrentTimerObject) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glBeginQueryARB"); + return; + } + break; +#endif + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glBeginQueryARB(target)"); + return; } if (id == 0) { @@ -171,81 +197,129 @@ _mesa_BeginQueryARB(GLenum target, GLuint id) return; } - if (ctx->Occlusion.CurrentQueryObject) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBeginQueryARB(target)"); - return; - } - - q = (struct occlusion_query *) - _mesa_HashLookup(ctx->Occlusion.QueryObjects, id); - if (q && q->Active) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBeginQueryARB"); - return; - } - else if (!q) { - q = new_query_object(target, id); + q = lookup_query_object(ctx, id); + if (!q) { + /* create new object */ + q = ctx->Driver.NewQueryObject(ctx, id); if (!q) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBeginQueryARB"); return; } - _mesa_HashInsert(ctx->Occlusion.QueryObjects, id, q); + _mesa_HashInsert(ctx->Query.QueryObjects, id, q); + } + else { + /* pre-existing object */ + if (q->Active) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBeginQueryARB(query already active)"); + return; + } } q->Active = GL_TRUE; - q->PassedCounter = 0; - ctx->Occlusion.Active = GL_TRUE; - ctx->Occlusion.CurrentQueryObject = id; - ctx->Occlusion.PassedCounter = 0; + q->Result = 0; + q->Ready = GL_FALSE; + + if (target == GL_SAMPLES_PASSED_ARB) { + ctx->Query.CurrentOcclusionObject = q; + } +#if FEATURE_EXT_timer_query + else if (target == GL_TIME_ELAPSED_EXT) { + ctx->Query.CurrentTimerObject = q; + } +#endif + + if (ctx->Driver.BeginQuery) { + ctx->Driver.BeginQuery(ctx, target, q); + } } void GLAPIENTRY _mesa_EndQueryARB(GLenum target) { + struct gl_query_object *q; GET_CURRENT_CONTEXT(ctx); - struct occlusion_query *q = NULL; ASSERT_OUTSIDE_BEGIN_END(ctx); FLUSH_VERTICES(ctx, _NEW_DEPTH); - if (target != GL_SAMPLES_PASSED_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glEndQueryARB(target)"); - return; + switch (target) { + case GL_SAMPLES_PASSED_ARB: + if (!ctx->Extensions.ARB_occlusion_query) { + _mesa_error(ctx, GL_INVALID_ENUM, "glEndQueryARB(target)"); + return; + } + q = ctx->Query.CurrentOcclusionObject; + ctx->Query.CurrentOcclusionObject = NULL; + break; +#if FEATURE_EXT_timer_query + case GL_TIME_ELAPSED_EXT: + if (!ctx->Extensions.EXT_timer_query) { + _mesa_error(ctx, GL_INVALID_ENUM, "glEndQueryARB(target)"); + return; + } + q = ctx->Query.CurrentTimerObject; + ctx->Query.CurrentTimerObject = NULL; + break; +#endif + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glEndQueryARB(target)"); + return; } - if (ctx->Occlusion.CurrentQueryObject) - q = (struct occlusion_query *) - _mesa_HashLookup(ctx->Occlusion.QueryObjects, - ctx->Occlusion.CurrentQueryObject); if (!q || !q->Active) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glEndQuery with no glBeginQuery"); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glEndQueryARB(no matching glBeginQueryARB)"); return; } - q->PassedCounter = ctx->Occlusion.PassedCounter; q->Active = GL_FALSE; - ctx->Occlusion.Active = GL_FALSE; - ctx->Occlusion.CurrentQueryObject = 0; + if (ctx->Driver.EndQuery) { + ctx->Driver.EndQuery(ctx, target, q); + } + else { + /* if we're using software rendering/querying */ + q->Ready = GL_TRUE; + } } void GLAPIENTRY _mesa_GetQueryivARB(GLenum target, GLenum pname, GLint *params) { + struct gl_query_object *q; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (target != GL_SAMPLES_PASSED_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryivARB(target)"); - return; + switch (target) { + case GL_SAMPLES_PASSED_ARB: + if (!ctx->Extensions.ARB_occlusion_query) { + _mesa_error(ctx, GL_INVALID_ENUM, "glEndQueryARB(target)"); + return; + } + q = ctx->Query.CurrentOcclusionObject; + break; +#if FEATURE_EXT_timer_query + case GL_TIME_ELAPSED_EXT: + if (!ctx->Extensions.EXT_timer_query) { + _mesa_error(ctx, GL_INVALID_ENUM, "glEndQueryARB(target)"); + return; + } + q = ctx->Query.CurrentTimerObject; + break; +#endif + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryivARB(target)"); + return; } switch (pname) { case GL_QUERY_COUNTER_BITS_ARB: - *params = 8 * sizeof(GLuint); + *params = 8 * sizeof(q->Result); break; case GL_CURRENT_QUERY_ARB: - *params = ctx->Occlusion.CurrentQueryObject; + *params = q ? q->Id : 0; break; default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryivARB(pname)"); @@ -257,26 +331,39 @@ _mesa_GetQueryivARB(GLenum target, GLenum pname, GLint *params) void GLAPIENTRY _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params) { + struct gl_query_object *q = NULL; GET_CURRENT_CONTEXT(ctx); - struct occlusion_query *q = NULL; ASSERT_OUTSIDE_BEGIN_END(ctx); if (id) - q = (struct occlusion_query *) - _mesa_HashLookup(ctx->Occlusion.QueryObjects, id); + q = lookup_query_object(ctx, id); if (!q || q->Active) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetQueryObjectivARB(id=%d)", id); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetQueryObjectivARB(id=%d is invalid or active)", id); return; } switch (pname) { case GL_QUERY_RESULT_ARB: - *params = q->PassedCounter; + while (!q->Ready) { + /* Wait for the query to finish! */ + /* If using software rendering, the result will always be ready + * by time we get here. Otherwise, we must be using hardware! + */ + ASSERT(ctx->Driver.EndQuery); + } + /* if result is too large for returned type, clamp to max value */ + if (q->Result > 0x7fffffff) { + *params = 0x7fffffff; + } + else { + *params = q->Result; + } break; case GL_QUERY_RESULT_AVAILABLE_ARB: /* XXX revisit when we have a hardware implementation! */ - *params = GL_TRUE; + *params = q->Ready; break; default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryObjectivARB(pname)"); @@ -288,25 +375,39 @@ _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params) void GLAPIENTRY _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params) { + struct gl_query_object *q = NULL; GET_CURRENT_CONTEXT(ctx); - struct occlusion_query *q = NULL; ASSERT_OUTSIDE_BEGIN_END(ctx); if (id) - q = (struct occlusion_query *) - _mesa_HashLookup(ctx->Occlusion.QueryObjects, id); + q = lookup_query_object(ctx, id); + if (!q || q->Active) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetQueryObjectuivARB(id=%d", id); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetQueryObjectuivARB(id=%d is invalid or active)", id); return; } switch (pname) { case GL_QUERY_RESULT_ARB: - *params = q->PassedCounter; + while (!q->Ready) { + /* Wait for the query to finish! */ + /* If using software rendering, the result will always be ready + * by time we get here. Otherwise, we must be using hardware! + */ + ASSERT(ctx->Driver.EndQuery); + } + /* if result is too large for returned type, clamp to max value */ + if (q->Result > 0xffffffff) { + *params = 0xffffffff; + } + else { + *params = q->Result; + } break; case GL_QUERY_RESULT_AVAILABLE_ARB: /* XXX revisit when we have a hardware implementation! */ - *params = GL_TRUE; + *params = q->Ready; break; default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryObjectuivARB(pname)"); @@ -315,39 +416,123 @@ _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params) } +#if FEATURE_EXT_timer_query /** - * Allocate/init the context state related to occlusion query objects. + * New with GL_EXT_timer_query + */ +void GLAPIENTRY +_mesa_GetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64EXT *params) +{ + struct gl_query_object *q = NULL; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (id) + q = lookup_query_object(ctx, id); + + if (!q || q->Active) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetQueryObjectui64vARB(id=%d is invalid or active)", id); + return; + } + + switch (pname) { + case GL_QUERY_RESULT_ARB: + while (!q->Ready) { + /* Wait for the query to finish! */ + /* If using software rendering, the result will always be ready + * by time we get here. Otherwise, we must be using hardware! + */ + ASSERT(ctx->Driver.EndQuery); + } + *params = q->Result; + break; + case GL_QUERY_RESULT_AVAILABLE_ARB: + /* XXX revisit when we have a hardware implementation! */ + *params = q->Ready; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryObjecti64vARB(pname)"); + return; + } +} + + +/** + * New with GL_EXT_timer_query + */ +void GLAPIENTRY +_mesa_GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64EXT *params) +{ + struct gl_query_object *q = NULL; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (id) + q = lookup_query_object(ctx, id); + + if (!q || q->Active) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetQueryObjectuui64vARB(id=%d is invalid or active)", id); + return; + } + + switch (pname) { + case GL_QUERY_RESULT_ARB: + while (!q->Ready) { + /* Wait for the query to finish! */ + /* If using software rendering, the result will always be ready + * by time we get here. Otherwise, we must be using hardware! + */ + ASSERT(ctx->Driver.EndQuery); + } + *params = q->Result; + break; + case GL_QUERY_RESULT_AVAILABLE_ARB: + /* XXX revisit when we have a hardware implementation! */ + *params = q->Ready; + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glGetQueryObjectui64vARB(pname)"); + return; + } +} + +#endif /* FEATURE_EXT_timer_query */ + + +/** + * Allocate/init the context state related to query objects. */ void -_mesa_init_occlude(GLcontext *ctx) +_mesa_init_query(GLcontext *ctx) { #if FEATURE_ARB_occlusion_query - ctx->Occlusion.QueryObjects = _mesa_NewHashTable(); + ctx->Query.QueryObjects = _mesa_NewHashTable(); + ctx->Query.CurrentOcclusionObject = NULL; #endif - ctx->OcclusionResult = GL_FALSE; - ctx->OcclusionResultSaved = GL_FALSE; } /** - * Free the context state related to occlusion query objects. + * Callback for deleting a query object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_queryobj_cb(GLuint id, void *data, void *userData) +{ + struct gl_query_object *q= (struct gl_query_object *) data; + (void) userData; + delete_query_object(q); +} + + +/** + * Free the context state related to query objects. */ void -_mesa_free_occlude_data(GLcontext *ctx) +_mesa_free_query_data(GLcontext *ctx) { - while (1) { - GLuint query = _mesa_HashFirstEntry(ctx->Occlusion.QueryObjects); - if (query) { - struct occlusion_query *q = (struct occlusion_query *) - _mesa_HashLookup(ctx->Occlusion.QueryObjects, query); - ASSERT(q); - delete_query_object(q); - _mesa_HashRemove(ctx->Occlusion.QueryObjects, query); - } - else { - break; - } - } - _mesa_DeleteHashTable(ctx->Occlusion.QueryObjects); + _mesa_HashDeleteAll(ctx->Query.QueryObjects, delete_queryobj_cb, NULL); + _mesa_DeleteHashTable(ctx->Query.QueryObjects); } diff --git a/src/kits/opengl/mesa/main/occlude.h b/src/kits/opengl/mesa/main/occlude.h index acf19101f1..ada8cf8356 100644 --- a/src/kits/opengl/mesa/main/occlude.h +++ b/src/kits/opengl/mesa/main/occlude.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.0.2 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -27,11 +27,14 @@ #define OCCLUDE_H -extern void -_mesa_init_occlude(GLcontext *ctx); +extern struct gl_query_object * +_mesa_new_query_object(GLcontext *ctx, GLuint id); extern void -_mesa_free_occlude_data(GLcontext *ctx); +_mesa_init_query(GLcontext *ctx); + +extern void +_mesa_free_query_data(GLcontext *ctx); extern void GLAPIENTRY _mesa_GenQueriesARB(GLsizei n, GLuint *ids); @@ -57,5 +60,11 @@ _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params); extern void GLAPIENTRY _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params); +extern void GLAPIENTRY +_mesa_GetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64EXT *params); + +extern void GLAPIENTRY +_mesa_GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64EXT *params); + #endif /* OCCLUDE_H */ diff --git a/src/kits/opengl/mesa/main/pixel.c b/src/kits/opengl/mesa/main/pixel.c index 2b1434b62a..4e47cdba89 100644 --- a/src/kits/opengl/mesa/main/pixel.c +++ b/src/kits/opengl/mesa/main/pixel.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -264,13 +264,13 @@ pixelmap(GLcontext *ctx, GLenum map, GLsizei mapsize, const GLfloat *values) case GL_PIXEL_MAP_S_TO_S: ctx->Pixel.MapStoSsize = mapsize; for (i = 0; i < mapsize; i++) { - ctx->Pixel.MapStoS[i] = (GLint) values[i]; + ctx->Pixel.MapStoS[i] = IROUND(values[i]); } break; case GL_PIXEL_MAP_I_TO_I: ctx->Pixel.MapItoIsize = mapsize; for (i = 0; i < mapsize; i++) { - ctx->Pixel.MapItoI[i] = (GLint) values[i]; + ctx->Pixel.MapItoI[i] = values[i]; } break; case GL_PIXEL_MAP_I_TO_R: @@ -615,9 +615,7 @@ _mesa_GetPixelMapfv( GLenum map, GLfloat *values ) switch (map) { case GL_PIXEL_MAP_I_TO_I: - for (i = 0; i < mapsize; i++) { - values[i] = (GLfloat) ctx->Pixel.MapItoI[i]; - } + MEMCPY(values, ctx->Pixel.MapItoI, mapsize * sizeof(GLfloat)); break; case GL_PIXEL_MAP_S_TO_S: for (i = 0; i < mapsize; i++) { @@ -698,7 +696,9 @@ _mesa_GetPixelMapuiv( GLenum map, GLuint *values ) switch (map) { case GL_PIXEL_MAP_I_TO_I: - MEMCPY(values, ctx->Pixel.MapItoI, mapsize * sizeof(GLint)); + for (i = 0; i < mapsize; i++) { + values[i] = FLOAT_TO_UINT( ctx->Pixel.MapItoI[i] ); + } break; case GL_PIXEL_MAP_S_TO_S: MEMCPY(values, ctx->Pixel.MapStoS, mapsize * sizeof(GLint)); @@ -795,52 +795,52 @@ _mesa_GetPixelMapusv( GLenum map, GLushort *values ) switch (map) { case GL_PIXEL_MAP_I_TO_I: for (i = 0; i < mapsize; i++) { - values[i] = (GLushort) ctx->Pixel.MapItoI[i]; + values[i] = (GLushort) CLAMP(ctx->Pixel.MapItoI[i], 0.0, 65535.0); } break; case GL_PIXEL_MAP_S_TO_S: for (i = 0; i < mapsize; i++) { - values[i] = (GLushort) ctx->Pixel.MapStoS[i]; + values[i] = (GLushort) CLAMP(ctx->Pixel.MapStoS[i], 0.0, 65535.0); } break; case GL_PIXEL_MAP_I_TO_R: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapItoR[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapItoR[i] ); } break; case GL_PIXEL_MAP_I_TO_G: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapItoG[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapItoG[i] ); } break; case GL_PIXEL_MAP_I_TO_B: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapItoB[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapItoB[i] ); } break; case GL_PIXEL_MAP_I_TO_A: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapItoA[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapItoA[i] ); } break; case GL_PIXEL_MAP_R_TO_R: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapRtoR[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapRtoR[i] ); } break; case GL_PIXEL_MAP_G_TO_G: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapGtoG[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapGtoG[i] ); } break; case GL_PIXEL_MAP_B_TO_B: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapBtoB[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapBtoB[i] ); } break; case GL_PIXEL_MAP_A_TO_A: for (i = 0; i < mapsize; i++) { - values[i] = FLOAT_TO_USHORT( ctx->Pixel.MapAtoA[i] ); + CLAMPED_FLOAT_TO_USHORT(values[i] , ctx->Pixel.MapAtoA[i] ); } break; default: @@ -1171,200 +1171,88 @@ void _mesa_lookup_rgba_float(const struct gl_color_table *table, GLuint n, GLfloat rgba[][4]) { - if (!table->Table || table->Size == 0) + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; + const GLfloat *lut = table->TableF; + GLuint i; + + if (!table->TableF || table->Size == 0) return; - switch (table->Format) { + switch (table->_BaseFormat) { case GL_INTENSITY: /* replace RGBA with I */ - if (table->Type == GL_FLOAT) { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND(rgba[i][RCOMP] * scale); - GLfloat c = lut[CLAMP(j, 0, max)]; - rgba[i][RCOMP] = rgba[i][GCOMP] = - rgba[i][BCOMP] = rgba[i][ACOMP] = c; - } - } - else { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND(rgba[i][RCOMP] * scale); - GLfloat c = CHAN_TO_FLOAT(lut[CLAMP(j, 0, max)]); - rgba[i][RCOMP] = rgba[i][GCOMP] = - rgba[i][BCOMP] = rgba[i][ACOMP] = c; - } + for (i = 0; i < n; i++) { + GLint j = IROUND(rgba[i][RCOMP] * scale); + GLfloat c = lut[CLAMP(j, 0, max)]; + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = + rgba[i][ACOMP] = c; } break; case GL_LUMINANCE: /* replace RGB with L */ - if (table->Type == GL_FLOAT) { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND(rgba[i][RCOMP] * scale); - GLfloat c = lut[CLAMP(j, 0, max)]; - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c; - } - } - else { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND(rgba[i][RCOMP] * scale); - GLfloat c = CHAN_TO_FLOAT(lut[CLAMP(j, 0, max)]); - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c; - } + for (i = 0; i < n; i++) { + GLint j = IROUND(rgba[i][RCOMP] * scale); + GLfloat c = lut[CLAMP(j, 0, max)]; + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = c; } break; case GL_ALPHA: /* replace A with A */ - if (table->Type == GL_FLOAT) { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND(rgba[i][ACOMP] * scale); - rgba[i][ACOMP] = lut[CLAMP(j, 0, max)]; - } - } - else { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND(rgba[i][ACOMP] * scale); - rgba[i][ACOMP] = CHAN_TO_FLOAT(lut[CLAMP(j, 0, max)]); - } + for (i = 0; i < n; i++) { + GLint j = IROUND(rgba[i][ACOMP] * scale); + rgba[i][ACOMP] = lut[CLAMP(j, 0, max)]; } break; case GL_LUMINANCE_ALPHA: /* replace RGBA with LLLA */ - if (table->Type == GL_FLOAT) { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jL = IROUND(rgba[i][RCOMP] * scale); - GLint jA = IROUND(rgba[i][ACOMP] * scale); - GLfloat luminance, alpha; - jL = CLAMP(jL, 0, max); - jA = CLAMP(jA, 0, max); - luminance = lut[jL * 2 + 0]; - alpha = lut[jA * 2 + 1]; - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance; - rgba[i][ACOMP] = alpha;; - } - } - else { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jL = IROUND(rgba[i][RCOMP] * scale); - GLint jA = IROUND(rgba[i][ACOMP] * scale); - GLfloat luminance, alpha; - jL = CLAMP(jL, 0, max); - jA = CLAMP(jA, 0, max); - luminance = CHAN_TO_FLOAT(lut[jL * 2 + 0]); - alpha = CHAN_TO_FLOAT(lut[jA * 2 + 1]); - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance; - rgba[i][ACOMP] = alpha;; - } + for (i = 0; i < n; i++) { + GLint jL = IROUND(rgba[i][RCOMP] * scale); + GLint jA = IROUND(rgba[i][ACOMP] * scale); + GLfloat luminance, alpha; + jL = CLAMP(jL, 0, max); + jA = CLAMP(jA, 0, max); + luminance = lut[jL * 2 + 0]; + alpha = lut[jA * 2 + 1]; + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = luminance; + rgba[i][ACOMP] = alpha;; } break; case GL_RGB: /* replace RGB with RGB */ - if (table->Type == GL_FLOAT) { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND(rgba[i][RCOMP] * scale); - GLint jG = IROUND(rgba[i][GCOMP] * scale); - GLint jB = IROUND(rgba[i][BCOMP] * scale); - jR = CLAMP(jR, 0, max); - jG = CLAMP(jG, 0, max); - jB = CLAMP(jB, 0, max); - rgba[i][RCOMP] = lut[jR * 3 + 0]; - rgba[i][GCOMP] = lut[jG * 3 + 1]; - rgba[i][BCOMP] = lut[jB * 3 + 2]; - } - } - else { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND(rgba[i][RCOMP] * scale); - GLint jG = IROUND(rgba[i][GCOMP] * scale); - GLint jB = IROUND(rgba[i][BCOMP] * scale); - jR = CLAMP(jR, 0, max); - jG = CLAMP(jG, 0, max); - jB = CLAMP(jB, 0, max); - rgba[i][RCOMP] = CHAN_TO_FLOAT(lut[jR * 3 + 0]); - rgba[i][GCOMP] = CHAN_TO_FLOAT(lut[jG * 3 + 1]); - rgba[i][BCOMP] = CHAN_TO_FLOAT(lut[jB * 3 + 2]); - } + for (i = 0; i < n; i++) { + GLint jR = IROUND(rgba[i][RCOMP] * scale); + GLint jG = IROUND(rgba[i][GCOMP] * scale); + GLint jB = IROUND(rgba[i][BCOMP] * scale); + jR = CLAMP(jR, 0, max); + jG = CLAMP(jG, 0, max); + jB = CLAMP(jB, 0, max); + rgba[i][RCOMP] = lut[jR * 3 + 0]; + rgba[i][GCOMP] = lut[jG * 3 + 1]; + rgba[i][BCOMP] = lut[jB * 3 + 2]; } break; case GL_RGBA: /* replace RGBA with RGBA */ - if (table->Type == GL_FLOAT) { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND(rgba[i][RCOMP] * scale); - GLint jG = IROUND(rgba[i][GCOMP] * scale); - GLint jB = IROUND(rgba[i][BCOMP] * scale); - GLint jA = IROUND(rgba[i][ACOMP] * scale); - jR = CLAMP(jR, 0, max); - jG = CLAMP(jG, 0, max); - jB = CLAMP(jB, 0, max); - jA = CLAMP(jA, 0, max); - rgba[i][RCOMP] = lut[jR * 4 + 0]; - rgba[i][GCOMP] = lut[jG * 4 + 1]; - rgba[i][BCOMP] = lut[jB * 4 + 2]; - rgba[i][ACOMP] = lut[jA * 4 + 3]; - } - } - else { - const GLint max = table->Size - 1; - const GLfloat scale = (GLfloat) max; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND(rgba[i][RCOMP] * scale); - GLint jG = IROUND(rgba[i][GCOMP] * scale); - GLint jB = IROUND(rgba[i][BCOMP] * scale); - GLint jA = IROUND(rgba[i][ACOMP] * scale); - jR = CLAMP(jR, 0, max); - jG = CLAMP(jG, 0, max); - jB = CLAMP(jB, 0, max); - jA = CLAMP(jA, 0, max); - rgba[i][RCOMP] = CHAN_TO_FLOAT(lut[jR * 4 + 0]); - rgba[i][GCOMP] = CHAN_TO_FLOAT(lut[jG * 4 + 1]); - rgba[i][BCOMP] = CHAN_TO_FLOAT(lut[jB * 4 + 2]); - rgba[i][ACOMP] = CHAN_TO_FLOAT(lut[jA * 4 + 3]); - } + for (i = 0; i < n; i++) { + GLint jR = IROUND(rgba[i][RCOMP] * scale); + GLint jG = IROUND(rgba[i][GCOMP] * scale); + GLint jB = IROUND(rgba[i][BCOMP] * scale); + GLint jA = IROUND(rgba[i][ACOMP] * scale); + jR = CLAMP(jR, 0, max); + jG = CLAMP(jG, 0, max); + jB = CLAMP(jB, 0, max); + jA = CLAMP(jA, 0, max); + rgba[i][RCOMP] = lut[jR * 4 + 0]; + rgba[i][GCOMP] = lut[jG * 4 + 1]; + rgba[i][BCOMP] = lut[jB * 4 + 2]; + rgba[i][ACOMP] = lut[jA * 4 + 3]; } break; default: @@ -1376,360 +1264,147 @@ _mesa_lookup_rgba_float(const struct gl_color_table *table, /** - * Apply a color table lookup to an array of GLchan RGBA colors. + * Apply a color table lookup to an array of ubyte/RGBA colors. */ void -_mesa_lookup_rgba_chan(const struct gl_color_table *table, - GLuint n, GLchan rgba[][4]) +_mesa_lookup_rgba_ubyte(const struct gl_color_table *table, + GLuint n, GLubyte rgba[][4]) { - if (!table->Table || table->Size == 0) + const GLubyte *lut = table->TableUB; + const GLfloat scale = (GLfloat) (table->Size - 1) / 255.0; + GLuint i; + + if (!table->TableUB || table->Size == 0) return; - switch (table->Format) { - case GL_INTENSITY: - /* replace RGBA with I */ - if (table->Type == GL_FLOAT) { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLchan c; - CLAMPED_FLOAT_TO_CHAN(c, lut[j]); - rgba[i][RCOMP] = rgba[i][GCOMP] = - rgba[i][BCOMP] = rgba[i][ACOMP] = c; - } + switch (table->_BaseFormat) { + case GL_INTENSITY: + /* replace RGBA with I */ + if (table->Size == 256) { + for (i = 0; i < n; i++) { + const GLubyte c = lut[rgba[i][RCOMP]]; + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = + rgba[i][ACOMP] = c; } - else { -#if CHAN_TYPE == GL_UNSIGNED_BYTE - if (table->Size == 256) { - /* common case */ - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - const GLchan c = lut[rgba[i][RCOMP]]; - rgba[i][RCOMP] = rgba[i][GCOMP] = - rgba[i][BCOMP] = rgba[i][ACOMP] = c; - } - } - else -#endif - { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale); - rgba[i][RCOMP] = rgba[i][GCOMP] = - rgba[i][BCOMP] = rgba[i][ACOMP] = lut[j]; - } - } - } - break; - case GL_LUMINANCE: - /* replace RGB with L */ - if (table->Type == GL_FLOAT) { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLchan c; - CLAMPED_FLOAT_TO_CHAN(c, lut[j]); - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c; - } - } - else { -#if CHAN_TYPE == GL_UNSIGNED_BYTE - if (table->Size == 256) { - /* common case */ - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - const GLchan c = lut[rgba[i][RCOMP]]; - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c; - } - } - else -#endif - { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale); - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = lut[j]; - } - } - } - break; - case GL_ALPHA: - /* replace A with A */ - if (table->Type == GL_FLOAT) { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND((GLfloat) rgba[i][ACOMP] * scale); - GLchan c; - CLAMPED_FLOAT_TO_CHAN(c, lut[j]); - rgba[i][ACOMP] = c; - } - } - else { -#if CHAN_TYPE == GL_UNSIGNED_BYTE - if (table->Size == 256) { - /* common case */ - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - rgba[i][ACOMP] = lut[rgba[i][ACOMP]]; - } - } - else -#endif - { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint j = IROUND((GLfloat) rgba[i][ACOMP] * scale); - rgba[i][ACOMP] = lut[j]; - } - } - } - break; - case GL_LUMINANCE_ALPHA: - /* replace RGBA with LLLA */ - if (table->Type == GL_FLOAT) { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jL = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale); - GLchan luminance, alpha; - CLAMPED_FLOAT_TO_CHAN(luminance, lut[jL * 2 + 0]); - CLAMPED_FLOAT_TO_CHAN(alpha, lut[jA * 2 + 1]); - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance; - rgba[i][ACOMP] = alpha;; - } - } - else { -#if CHAN_TYPE == GL_UNSIGNED_BYTE - if (table->Size == 256) { - /* common case */ - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLchan l = lut[rgba[i][RCOMP] * 2 + 0]; - GLchan a = lut[rgba[i][ACOMP] * 2 + 1];; - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = l; - rgba[i][ACOMP] = a; - } - } - else -#endif - { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jL = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale); - GLchan luminance = lut[jL * 2 + 0]; - GLchan alpha = lut[jA * 2 + 1]; - rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance; - rgba[i][ACOMP] = alpha; - } - } - } - break; - case GL_RGB: - /* replace RGB with RGB */ - if (table->Type == GL_FLOAT) { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale); - GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale); - CLAMPED_FLOAT_TO_CHAN(rgba[i][RCOMP], lut[jR * 3 + 0]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][GCOMP], lut[jG * 3 + 1]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][BCOMP], lut[jB * 3 + 2]); - } - } - else { -#if CHAN_TYPE == GL_UNSIGNED_BYTE - if (table->Size == 256) { - /* common case */ - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 3 + 0]; - rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 3 + 1]; - rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 3 + 2]; - } - } - else -#endif - { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale); - GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale); - rgba[i][RCOMP] = lut[jR * 3 + 0]; - rgba[i][GCOMP] = lut[jG * 3 + 1]; - rgba[i][BCOMP] = lut[jB * 3 + 2]; - } - } - } - break; - case GL_RGBA: - /* replace RGBA with RGBA */ - if (table->Type == GL_FLOAT) { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale); - GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale); - GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale); - CLAMPED_FLOAT_TO_CHAN(rgba[i][RCOMP], lut[jR * 4 + 0]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][GCOMP], lut[jG * 4 + 1]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][BCOMP], lut[jB * 4 + 2]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][ACOMP], lut[jA * 4 + 3]); - } - } - else { -#if CHAN_TYPE == GL_UNSIGNED_BYTE - if (table->Size == 256) { - /* common case */ - const GLchan *lut = (const GLchan *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 4 + 0]; - rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 4 + 1]; - rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 4 + 2]; - rgba[i][ACOMP] = lut[rgba[i][ACOMP] * 4 + 3]; - } - } - else -#endif - { - const GLfloat scale = (GLfloat) (table->Size - 1) / CHAN_MAXF; - const GLfloat *lut = (const GLfloat *) table->Table; - GLuint i; - for (i = 0; i < n; i++) { - GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale); - GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale); - GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale); - GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale); - CLAMPED_FLOAT_TO_CHAN(rgba[i][RCOMP], lut[jR * 4 + 0]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][GCOMP], lut[jG * 4 + 1]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][BCOMP], lut[jB * 4 + 2]); - CLAMPED_FLOAT_TO_CHAN(rgba[i][ACOMP], lut[jA * 4 + 3]); - } - } - } - break; - default: - _mesa_problem(NULL, "Bad format in _mesa_lookup_rgba_chan"); - return; - } -} - - - -/* - * Apply color index shift and offset to an array of pixels. - */ -void -_mesa_shift_and_offset_ci( const GLcontext *ctx, GLuint n, GLuint indexes[] ) -{ - GLint shift = ctx->Pixel.IndexShift; - GLint offset = ctx->Pixel.IndexOffset; - GLuint i; - if (shift > 0) { - for (i=0;i> shift) + offset; + else { + for (i = 0; i < n; i++) { + GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale); + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = + rgba[i][ACOMP] = lut[j]; + } } - } - else { - for (i=0;iSize == 256) { + for (i = 0; i < n; i++) { + const GLubyte c = lut[rgba[i][RCOMP]]; + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = c; + } } + else { + for (i = 0; i < n; i++) { + GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale); + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = lut[j]; + } + } + break; + case GL_ALPHA: + /* replace A with A */ + if (table->Size == 256) { + for (i = 0; i < n; i++) { + rgba[i][ACOMP] = lut[rgba[i][ACOMP]]; + } + } + else { + for (i = 0; i < n; i++) { + GLint j = IROUND((GLfloat) rgba[i][ACOMP] * scale); + rgba[i][ACOMP] = lut[j]; + } + } + break; + case GL_LUMINANCE_ALPHA: + /* replace RGBA with LLLA */ + if (table->Size == 256) { + for (i = 0; i < n; i++) { + GLubyte l = lut[rgba[i][RCOMP] * 2 + 0]; + GLubyte a = lut[rgba[i][ACOMP] * 2 + 1];; + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = l; + rgba[i][ACOMP] = a; + } + } + else { + for (i = 0; i < n; i++) { + GLint jL = IROUND((GLfloat) rgba[i][RCOMP] * scale); + GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale); + GLubyte luminance = lut[jL * 2 + 0]; + GLubyte alpha = lut[jA * 2 + 1]; + rgba[i][RCOMP] = + rgba[i][GCOMP] = + rgba[i][BCOMP] = luminance; + rgba[i][ACOMP] = alpha; + } + } + break; + case GL_RGB: + if (table->Size == 256) { + for (i = 0; i < n; i++) { + rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 3 + 0]; + rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 3 + 1]; + rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 3 + 2]; + } + } + else { + for (i = 0; i < n; i++) { + GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale); + GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale); + GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale); + rgba[i][RCOMP] = lut[jR * 3 + 0]; + rgba[i][GCOMP] = lut[jG * 3 + 1]; + rgba[i][BCOMP] = lut[jB * 3 + 2]; + } + } + break; + case GL_RGBA: + if (table->Size == 256) { + for (i = 0; i < n; i++) { + rgba[i][RCOMP] = lut[rgba[i][RCOMP] * 4 + 0]; + rgba[i][GCOMP] = lut[rgba[i][GCOMP] * 4 + 1]; + rgba[i][BCOMP] = lut[rgba[i][BCOMP] * 4 + 2]; + rgba[i][ACOMP] = lut[rgba[i][ACOMP] * 4 + 3]; + } + } + else { + for (i = 0; i < n; i++) { + GLint jR = IROUND((GLfloat) rgba[i][RCOMP] * scale); + GLint jG = IROUND((GLfloat) rgba[i][GCOMP] * scale); + GLint jB = IROUND((GLfloat) rgba[i][BCOMP] * scale); + GLint jA = IROUND((GLfloat) rgba[i][ACOMP] * scale); + CLAMPED_FLOAT_TO_CHAN(rgba[i][RCOMP], lut[jR * 4 + 0]); + CLAMPED_FLOAT_TO_CHAN(rgba[i][GCOMP], lut[jG * 4 + 1]); + CLAMPED_FLOAT_TO_CHAN(rgba[i][BCOMP], lut[jB * 4 + 2]); + CLAMPED_FLOAT_TO_CHAN(rgba[i][ACOMP], lut[jA * 4 + 3]); + } + } + break; + default: + _mesa_problem(NULL, "Bad format in _mesa_lookup_rgba_chan"); + return; } } -/* - * Apply color index mapping to color indexes. - */ -void -_mesa_map_ci( const GLcontext *ctx, GLuint n, GLuint index[] ) -{ - GLuint mask = ctx->Pixel.MapItoIsize - 1; - GLuint i; - for (i=0;iPixel.MapItoI[ index[i] & mask ]; - } -} - - -/* - * Map color indexes to rgba values. - */ -void -_mesa_map_ci_to_rgba_chan( const GLcontext *ctx, GLuint n, - const GLuint index[], GLchan rgba[][4] ) -{ -#if CHAN_BITS == 8 - GLuint rmask = ctx->Pixel.MapItoRsize - 1; - GLuint gmask = ctx->Pixel.MapItoGsize - 1; - GLuint bmask = ctx->Pixel.MapItoBsize - 1; - GLuint amask = ctx->Pixel.MapItoAsize - 1; - const GLubyte *rMap = ctx->Pixel.MapItoR8; - const GLubyte *gMap = ctx->Pixel.MapItoG8; - const GLubyte *bMap = ctx->Pixel.MapItoB8; - const GLubyte *aMap = ctx->Pixel.MapItoA8; - GLuint i; - for (i=0;iPixel.MapItoRsize - 1; - GLuint gmask = ctx->Pixel.MapItoGsize - 1; - GLuint bmask = ctx->Pixel.MapItoBsize - 1; - GLuint amask = ctx->Pixel.MapItoAsize - 1; - const GLfloat *rMap = ctx->Pixel.MapItoR; - const GLfloat *gMap = ctx->Pixel.MapItoG; - const GLfloat *bMap = ctx->Pixel.MapItoB; - const GLfloat *aMap = ctx->Pixel.MapItoA; - GLuint i; - for (i=0;iPixel.MapItoRsize - 1; GLuint gmask = ctx->Pixel.MapItoGsize - 1; GLuint bmask = ctx->Pixel.MapItoBsize - 1; @@ -1779,112 +1453,24 @@ _mesa_map_ci8_to_rgba( const GLcontext *ctx, GLuint n, const GLubyte index[], rgba[i][BCOMP] = bMap[index[i] & bmask]; rgba[i][ACOMP] = aMap[index[i] & amask]; } -#else - GLuint rmask = ctx->Pixel.MapItoRsize - 1; - GLuint gmask = ctx->Pixel.MapItoGsize - 1; - GLuint bmask = ctx->Pixel.MapItoBsize - 1; - GLuint amask = ctx->Pixel.MapItoAsize - 1; - const GLfloat *rMap = ctx->Pixel.MapItoR; - const GLfloat *gMap = ctx->Pixel.MapItoG; - const GLfloat *bMap = ctx->Pixel.MapItoB; - const GLfloat *aMap = ctx->Pixel.MapItoA; - GLuint i; - for (i=0;iPixel.DepthScale; + const GLfloat bias = ctx->Pixel.DepthBias; GLuint i; - GLint shift = ctx->Pixel.IndexShift; - GLint offset = ctx->Pixel.IndexOffset; - if (shift > 0) { - for (i=0;i> shift) + offset; - } - } - else { - for (i=0;iPixel.MapStoSsize - 1; - GLuint i; - for (i=0;iPixel.MapStoS[ stencil[i] & mask ]; - } -} - - - -/* - * This function converts an array of GLchan colors to GLfloat colors. - * Most importantly, it undoes the non-uniform quantization of pixel - * values introduced when we convert shallow (< 8 bit) pixel values - * to GLubytes in the ctx->Driver.ReadRGBASpan() functions. - * This fixes a number of OpenGL conformance failures when running on - * 16bpp displays, for example. - */ -void -_mesa_chan_to_float_span(const GLcontext *ctx, GLuint n, - CONST GLchan rgba[][4], GLfloat rgbaf[][4]) -{ -#if CHAN_TYPE == GL_FLOAT - MEMCPY(rgbaf, rgba, n * 4 * sizeof(GLfloat)); -#else - const GLuint rShift = CHAN_BITS - ctx->Visual.redBits; - const GLuint gShift = CHAN_BITS - ctx->Visual.greenBits; - const GLuint bShift = CHAN_BITS - ctx->Visual.blueBits; - GLuint aShift; - const GLfloat rScale = 1.0F / (GLfloat) ((1 << ctx->Visual.redBits ) - 1); - const GLfloat gScale = 1.0F / (GLfloat) ((1 << ctx->Visual.greenBits) - 1); - const GLfloat bScale = 1.0F / (GLfloat) ((1 << ctx->Visual.blueBits ) - 1); - GLfloat aScale; - GLuint i; - - if (ctx->Visual.alphaBits > 0) { - aShift = CHAN_BITS - ctx->Visual.alphaBits; - aScale = 1.0F / (GLfloat) ((1 << ctx->Visual.alphaBits) - 1); - } - else { - aShift = 0; - aScale = 1.0F / CHAN_MAXF; - } - for (i = 0; i < n; i++) { - const GLint r = rgba[i][RCOMP] >> rShift; - const GLint g = rgba[i][GCOMP] >> gShift; - const GLint b = rgba[i][BCOMP] >> bShift; - const GLint a = rgba[i][ACOMP] >> aShift; - rgbaf[i][RCOMP] = (GLfloat) r * rScale; - rgbaf[i][GCOMP] = (GLfloat) g * gScale; - rgbaf[i][BCOMP] = (GLfloat) b * bScale; - rgbaf[i][ACOMP] = (GLfloat) a * aScale; + GLfloat d = depthValues[i] * scale + bias; + depthValues[i] = CLAMP(d, 0.0F, 1.0F); } -#endif } + + /**********************************************************************/ /***** State Management *****/ /**********************************************************************/ @@ -2009,7 +1595,7 @@ _mesa_init_pixel( GLcontext *ctx ) ctx->Pixel.MapBtoBsize = 1; ctx->Pixel.MapAtoAsize = 1; ctx->Pixel.MapStoS[0] = 0; - ctx->Pixel.MapItoI[0] = 0; + ctx->Pixel.MapItoI[0] = 0.0; ctx->Pixel.MapItoR[0] = 0.0; ctx->Pixel.MapItoG[0] = 0.0; ctx->Pixel.MapItoB[0] = 0.0; @@ -2024,9 +1610,6 @@ _mesa_init_pixel( GLcontext *ctx ) ctx->Pixel.MapAtoA[0] = 0.0; ctx->Pixel.HistogramEnabled = GL_FALSE; ctx->Pixel.MinMaxEnabled = GL_FALSE; - ctx->Pixel.PixelTextureEnabled = GL_FALSE; - ctx->Pixel.FragmentRgbSource = GL_PIXEL_GROUP_COLOR_SGIS; - ctx->Pixel.FragmentAlphaSource = GL_PIXEL_GROUP_COLOR_SGIS; ASSIGN_4V(ctx->Pixel.PostColorMatrixScale, 1.0, 1.0, 1.0, 1.0); ASSIGN_4V(ctx->Pixel.PostColorMatrixBias, 0.0, 0.0, 0.0, 0.0); ASSIGN_4V(ctx->Pixel.ColorTableScale, 1.0, 1.0, 1.0, 1.0); @@ -2108,11 +1691,9 @@ _mesa_init_pixel( GLcontext *ctx ) if (ctx->Visual.doubleBufferMode) { ctx->Pixel.ReadBuffer = GL_BACK; - ctx->Pixel._ReadSrcMask = DD_BACK_LEFT_BIT; } else { ctx->Pixel.ReadBuffer = GL_FRONT; - ctx->Pixel._ReadSrcMask = DD_FRONT_LEFT_BIT; } /* Miscellaneous */ diff --git a/src/kits/opengl/mesa/main/pixel.h b/src/kits/opengl/mesa/main/pixel.h index 9eef0cff5a..09155cfd70 100644 --- a/src/kits/opengl/mesa/main/pixel.h +++ b/src/kits/opengl/mesa/main/pixel.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -98,23 +98,8 @@ _mesa_lookup_rgba_float(const struct gl_color_table *table, GLuint n, GLfloat rgba[][4]); extern void -_mesa_lookup_rgba_chan(const struct gl_color_table *table, - GLuint n, GLchan rgba[][4]); - - -extern void -_mesa_shift_and_offset_ci(const GLcontext *ctx, GLuint n, - GLuint indexes[]); - - -extern void -_mesa_map_ci(const GLcontext *ctx, GLuint n, GLuint index[]); - - -extern void -_mesa_map_ci_to_rgba_chan(const GLcontext *ctx, - GLuint n, const GLuint index[], - GLchan rgba[][4]); +_mesa_lookup_rgba_ubyte(const struct gl_color_table *table, + GLuint n, GLubyte rgba[][4]); extern void @@ -123,23 +108,13 @@ _mesa_map_ci_to_rgba(const GLcontext *ctx, extern void -_mesa_map_ci8_to_rgba(const GLcontext *ctx, - GLuint n, const GLubyte index[], - GLchan rgba[][4]); +_mesa_map_ci8_to_rgba8(const GLcontext *ctx, GLuint n, const GLubyte index[], + GLubyte rgba[][4]); extern void -_mesa_shift_and_offset_stencil(const GLcontext *ctx, GLuint n, - GLstencil indexes[]); - - -extern void -_mesa_map_stencil(const GLcontext *ctx, GLuint n, GLstencil index[]); - - -extern void -_mesa_chan_to_float_span(const GLcontext *ctx, GLuint n, - CONST GLchan rgba[][4], GLfloat rgbaf[][4]); +_mesa_scale_and_bias_depth(const GLcontext *ctx, GLuint n, + GLfloat depthValues[]); extern void diff --git a/src/kits/opengl/mesa/main/points.c b/src/kits/opengl/mesa/main/points.c index 2ffb1a4212..aa36fb6287 100644 --- a/src/kits/opengl/mesa/main/points.c +++ b/src/kits/opengl/mesa/main/points.c @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.2 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -37,17 +37,9 @@ /** - * Set the point size. - * - * \param size pointer diameter. - * + * Set current point size. + * \param size point diameter in pixels * \sa glPointSize(). - * - * Verifies the parameter and updates gl_point_attrib::Size. On a change, - * flushes the vertices, updates the clamped point size and marks the - * DD_POINT_SIZE flag in __GLcontextRec::_TriangleCaps for the drivers if the - * size is different from one. Notifies the driver via - * the dd_function_table::PointSize callback. */ void GLAPIENTRY _mesa_PointSize( GLfloat size ) @@ -65,17 +57,9 @@ _mesa_PointSize( GLfloat size ) FLUSH_VERTICES(ctx, _NEW_POINT); ctx->Point.Size = size; - ctx->Point._Size = CLAMP(size, - ctx->Const.MinPointSize, - ctx->Const.MaxPointSize); - - if (ctx->Point._Size == 1.0F) - ctx->_TriangleCaps &= ~DD_POINT_SIZE; - else - ctx->_TriangleCaps |= DD_POINT_SIZE; if (ctx->Driver.PointSize) - (*ctx->Driver.PointSize)(ctx, size); + ctx->Driver.PointSize(ctx, size); } @@ -127,24 +111,10 @@ _mesa_PointParameterfvEXT( GLenum pname, const GLfloat *params) switch (pname) { case GL_DISTANCE_ATTENUATION_EXT: if (ctx->Extensions.EXT_point_parameters) { - const GLboolean tmp = ctx->Point._Attenuated; if (TEST_EQ_3V(ctx->Point.Params, params)) return; - FLUSH_VERTICES(ctx, _NEW_POINT); COPY_3V(ctx->Point.Params, params); - - /* Update several derived values now. This likely to be - * more efficient than trying to catch this statechange in - * state.c. - */ - ctx->Point._Attenuated = (params[0] != 1.0 || - params[1] != 0.0 || - params[2] != 0.0); - - if (tmp != ctx->Point._Attenuated) { - ctx->_TriangleCaps ^= DD_POINT_ATTEN; - } } else { _mesa_error(ctx, GL_INVALID_ENUM, @@ -260,6 +230,37 @@ _mesa_PointParameterfvEXT( GLenum pname, const GLfloat *params) #endif + +/** + * Update derived point-related state. + */ +void +_mesa_update_point(GLcontext *ctx) +{ + /* clamp to user-specified limits now, clamp to ctx->Const.Min/Max + * limits during rasterization. + */ + ctx->Point._Size = CLAMP(ctx->Point.Size, + ctx->Point.MinSize, + ctx->Point.MaxSize); + + if (ctx->Point._Size == 1.0F) + ctx->_TriangleCaps &= ~DD_POINT_SIZE; + else + ctx->_TriangleCaps |= DD_POINT_SIZE; + + ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0 || + ctx->Point.Params[1] != 0.0 || + ctx->Point.Params[2] != 0.0); + + if (ctx->Point._Attenuated) + ctx->_TriangleCaps |= DD_POINT_ATTEN; + else + ctx->_TriangleCaps &= ~DD_POINT_ATTEN; +} + + + /** * Initialize the context point state. * @@ -268,11 +269,11 @@ _mesa_PointParameterfvEXT( GLenum pname, const GLfloat *params) * Initializes __GLcontextRec::Point and point related constants in * __GLcontextRec::Const. */ -void _mesa_init_point( GLcontext * ctx ) +void +_mesa_init_point(GLcontext *ctx) { - int i; - - /* Point group */ + GLuint i; + ctx->Point.SmoothFlag = GL_FALSE; ctx->Point.Size = 1.0; ctx->Point._Size = 1.0; @@ -281,12 +282,13 @@ void _mesa_init_point( GLcontext * ctx ) ctx->Point.Params[2] = 0.0; ctx->Point._Attenuated = GL_FALSE; ctx->Point.MinSize = 0.0; - ctx->Point.MaxSize = ctx->Const.MaxPointSize; + ctx->Point.MaxSize + = MAX2(ctx->Const.MaxPointSize, ctx->Const.MaxPointSizeAA); ctx->Point.Threshold = 1.0; - ctx->Point.PointSprite = GL_FALSE; /* GL_ARB_point_sprite / GL_NV_point_sprite */ + ctx->Point.PointSprite = GL_FALSE; /* GL_ARB/NV_point_sprite */ ctx->Point.SpriteRMode = GL_ZERO; /* GL_NV_point_sprite (only!) */ ctx->Point.SpriteOrigin = GL_UPPER_LEFT; /* GL_ARB_point_sprite */ for (i = 0; i < MAX_TEXTURE_UNITS; i++) { - ctx->Point.CoordReplace[i] = GL_FALSE; /* GL_ARB_point_sprite / GL_NV_point_sprite */ + ctx->Point.CoordReplace[i] = GL_FALSE; /* GL_ARB/NV_point_sprite */ } } diff --git a/src/kits/opengl/mesa/main/points.h b/src/kits/opengl/mesa/main/points.h index 16513c3ec6..56acd9ee57 100644 --- a/src/kits/opengl/mesa/main/points.h +++ b/src/kits/opengl/mesa/main/points.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -50,6 +50,9 @@ _mesa_PointParameterfEXT( GLenum pname, GLfloat param ); extern void GLAPIENTRY _mesa_PointParameterfvEXT( GLenum pname, const GLfloat *params ); +extern void +_mesa_update_point(GLcontext *ctx); + extern void _mesa_init_point( GLcontext * ctx ); diff --git a/src/kits/opengl/mesa/main/polygon.c b/src/kits/opengl/mesa/main/polygon.c index 6dbf81c37d..b771408cf3 100644 --- a/src/kits/opengl/mesa/main/polygon.c +++ b/src/kits/opengl/mesa/main/polygon.c @@ -313,7 +313,8 @@ void GLAPIENTRY _mesa_PolygonOffsetEXT( GLfloat factor, GLfloat bias ) { GET_CURRENT_CONTEXT(ctx); - _mesa_PolygonOffset(factor, bias * ctx->DepthMaxF ); + /* XXX mult by DepthMaxF here??? */ + _mesa_PolygonOffset(factor, bias * ctx->DrawBuffer->_DepthMaxF ); } #endif diff --git a/src/kits/opengl/mesa/main/rastpos.c b/src/kits/opengl/mesa/main/rastpos.c index 23285d0275..ddf2ac51d3 100644 --- a/src/kits/opengl/mesa/main/rastpos.c +++ b/src/kits/opengl/mesa/main/rastpos.c @@ -466,7 +466,7 @@ raster_pos4f(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) + ctx->Viewport._WindowMap.m[MAT_TY]); ctx->Current.RasterPos[2] = (ndc[2] * ctx->Viewport._WindowMap.m[MAT_SZ] + ctx->Viewport._WindowMap.m[MAT_TZ]) - / ctx->DepthMaxF; + / ctx->DrawBuffer->_DepthMaxF; ctx->Current.RasterPos[3] = clip[3]; /* compute raster distance */ @@ -503,7 +503,8 @@ raster_pos4f(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) ctx->Current.Attrib[VERT_ATTRIB_COLOR1]); } else { - ctx->Current.RasterIndex = ctx->Current.Index; + ctx->Current.RasterIndex + = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]; } } @@ -756,7 +757,8 @@ window_pos3f(GLfloat x, GLfloat y, GLfloat z) = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3], 0.0F, 1.0F); } else { - ctx->Current.RasterIndex = ctx->Current.Index; + ctx->Current.RasterIndex + = ctx->Current.Attrib[VERT_ATTRIB_COLOR_INDEX][0]; } /* raster texcoord = current texcoord */ @@ -992,6 +994,7 @@ void _mesa_init_rastpos( GLcontext * ctx ) ASSIGN_4V( ctx->Current.RasterPos, 0.0, 0.0, 0.0, 1.0 ); ctx->Current.RasterDistance = 0.0; ASSIGN_4V( ctx->Current.RasterColor, 1.0, 1.0, 1.0, 1.0 ); + ASSIGN_4V( ctx->Current.RasterSecondaryColor, 0.0, 0.0, 0.0, 1.0 ); ctx->Current.RasterIndex = 1.0; for (i=0; iCurrent.RasterTexCoords[i], 0.0, 0.0, 0.0, 1.0 ); diff --git a/src/kits/opengl/mesa/main/rbadaptors.c b/src/kits/opengl/mesa/main/rbadaptors.c new file mode 100644 index 0000000000..313c8d43d6 --- /dev/null +++ b/src/kits/opengl/mesa/main/rbadaptors.c @@ -0,0 +1,577 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.1 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * Renderbuffer adaptors. + * These fuctions are used to convert rendering from core Mesa's GLchan + * colors to 8 or 16-bit color channels in RGBA renderbuffers. + * This means Mesa can be compiled for 16 or 32-bit color processing + * and still render into 8 and 16-bit/channel renderbuffers. + */ + + +#include "glheader.h" +#include "mtypes.h" +#include "colormac.h" +#include "renderbuffer.h" +#include "rbadaptors.h" + + +static void +Delete_wrapper(struct gl_renderbuffer *rb) +{ + /* Decrement reference count on the buffer we're wrapping and delete + * it if refcount hits zero. + */ + _mesa_dereference_renderbuffer(&rb->Wrapped); + + /* delete myself */ + _mesa_delete_renderbuffer(rb); +} + + +static GLboolean +AllocStorage_wrapper(GLcontext *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, GLuint width, GLuint height) +{ + GLboolean b = rb->Wrapped->AllocStorage(ctx, rb->Wrapped, internalFormat, + width, height); + if (b) { + rb->Width = width; + rb->Height = height; + } + return b; +} + + +static void * +GetPointer_wrapper(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + (void) ctx; + (void) rb; + (void) x; + (void) y; + return NULL; +} + + +static void +GetRow_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLushort *values16 = (GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + ASSERT(count <= MAX_WIDTH); + + /* get 8bpp values */ + rb->Wrapped->GetRow(ctx, rb->Wrapped, count, x, y, values8); + + /* convert 8bpp to 16bpp */ + for (i = 0; i < 4 * count; i++) { + values16[i] = (values8[i] << 8) | values8[i]; + } +} + + +static void +GetValues_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLushort *values16 = (GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + + rb->Wrapped->GetValues(ctx, rb->Wrapped, count, x, y, values8); + + for (i = 0; i < 4 * count; i++) { + values16[i] = (values8[i] << 8) | values8[i]; + } +} + + +static void +PutRow_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLushort *values16 = (GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < 4 * count; i++) { + values8[i] = values16[i] >> 8; + } + rb->Wrapped->PutRow(ctx, rb->Wrapped, count, x, y, values8, mask); +} + + +static void +PutRowRGB_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + GLubyte values8[MAX_WIDTH * 3]; + GLushort *values16 = (GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < 3 * count; i++) { + values8[i] = values16[i] >> 8; + } + rb->Wrapped->PutRowRGB(ctx, rb->Wrapped, count, x, y, values8, mask); +} + + +static void +PutMonoRow_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + GLubyte value8[4]; + GLushort *value16 = (GLushort *) value; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + value8[0] = value16[0] >> 8; + value8[1] = value16[1] >> 8; + value8[2] = value16[2] >> 8; + value8[3] = value16[3] >> 8; + rb->Wrapped->PutMonoRow(ctx, rb->Wrapped, count, x, y, value8, mask); +} + + +static void +PutValues_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLushort *values16 = (GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < 4 * count; i++) { + values8[i] = values16[i] >> 8; + } + rb->Wrapped->PutValues(ctx, rb->Wrapped, count, x, y, values8, mask); +} + + +static void +PutMonoValues_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + GLubyte value8[4]; + GLushort *value16 = (GLushort *) value; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + value8[0] = value16[0] >> 8; + value8[1] = value16[1] >> 8; + value8[2] = value16[2] >> 8; + value8[3] = value16[3] >> 8; + rb->Wrapped->PutMonoValues(ctx, rb->Wrapped, count, x, y, value8, mask); +} + + +/** + * Wrap an 8-bit/channel renderbuffer with a 16-bit/channel + * renderbuffer adaptor. + */ +struct gl_renderbuffer * +_mesa_new_renderbuffer_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8) +{ + struct gl_renderbuffer *rb16; + + rb16 = _mesa_new_renderbuffer(ctx, rb8->Name); + if (rb16) { + ASSERT(rb8->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb8->_BaseFormat == GL_RGBA); + + _glthread_LOCK_MUTEX(rb8->Mutex); + rb8->RefCount++; + _glthread_UNLOCK_MUTEX(rb8->Mutex); + + rb16->InternalFormat = rb8->InternalFormat; + rb16->_ActualFormat = rb8->_ActualFormat; + rb16->_BaseFormat = rb8->_BaseFormat; + rb16->DataType = GL_UNSIGNED_SHORT; + /* Note: passing through underlying bits/channel */ + rb16->RedBits = rb8->RedBits; + rb16->GreenBits = rb8->GreenBits; + rb16->BlueBits = rb8->BlueBits; + rb16->AlphaBits = rb8->AlphaBits; + rb16->Wrapped = rb8; + + rb16->AllocStorage = AllocStorage_wrapper; + rb16->Delete = Delete_wrapper; + rb16->GetPointer = GetPointer_wrapper; + rb16->GetRow = GetRow_16wrap8; + rb16->GetValues = GetValues_16wrap8; + rb16->PutRow = PutRow_16wrap8; + rb16->PutRowRGB = PutRowRGB_16wrap8; + rb16->PutMonoRow = PutMonoRow_16wrap8; + rb16->PutValues = PutValues_16wrap8; + rb16->PutMonoValues = PutMonoValues_16wrap8; + } + return rb16; +} + + + + +static void +GetRow_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + ASSERT(count <= MAX_WIDTH); + + /* get 8bpp values */ + rb->Wrapped->GetRow(ctx, rb->Wrapped, count, x, y, values8); + + /* convert 8bpp to 32bpp */ + for (i = 0; i < 4 * count; i++) { + values32[i] = UBYTE_TO_FLOAT(values8[i]); + } +} + + +static void +GetValues_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + + rb->Wrapped->GetValues(ctx, rb->Wrapped, count, x, y, values8); + + for (i = 0; i < 4 * count; i++) { + values32[i] = UBYTE_TO_FLOAT(values8[i]); + } +} + + +static void +PutRow_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < 4 * count; i++) { + UNCLAMPED_FLOAT_TO_UBYTE(values8[i], values32[i]); + } + rb->Wrapped->PutRow(ctx, rb->Wrapped, count, x, y, values8, mask); +} + + +static void +PutRowRGB_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + GLubyte values8[MAX_WIDTH * 3]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < 3 * count; i++) { + UNCLAMPED_FLOAT_TO_UBYTE(values8[i], values32[i]); + } + rb->Wrapped->PutRowRGB(ctx, rb->Wrapped, count, x, y, values8, mask); +} + + +static void +PutMonoRow_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + GLubyte value8[4]; + GLfloat *value32 = (GLfloat *) value; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + UNCLAMPED_FLOAT_TO_UBYTE(value8[0], value32[0]); + UNCLAMPED_FLOAT_TO_UBYTE(value8[1], value32[1]); + UNCLAMPED_FLOAT_TO_UBYTE(value8[2], value32[2]); + UNCLAMPED_FLOAT_TO_UBYTE(value8[3], value32[3]); + rb->Wrapped->PutMonoRow(ctx, rb->Wrapped, count, x, y, value8, mask); +} + + +static void +PutValues_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + GLubyte values8[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < 4 * count; i++) { + UNCLAMPED_FLOAT_TO_UBYTE(values8[i], values32[i]); + } + rb->Wrapped->PutValues(ctx, rb->Wrapped, count, x, y, values8, mask); +} + + +static void +PutMonoValues_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + GLubyte value8[4]; + GLfloat *value32 = (GLfloat *) value; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_BYTE); + UNCLAMPED_FLOAT_TO_UBYTE(value8[0], value32[0]); + UNCLAMPED_FLOAT_TO_UBYTE(value8[1], value32[1]); + UNCLAMPED_FLOAT_TO_UBYTE(value8[2], value32[2]); + UNCLAMPED_FLOAT_TO_UBYTE(value8[3], value32[3]); + rb->Wrapped->PutMonoValues(ctx, rb->Wrapped, count, x, y, value8, mask); +} + + +/** + * Wrap an 8-bit/channel renderbuffer with a 32-bit/channel + * renderbuffer adaptor. + */ +struct gl_renderbuffer * +_mesa_new_renderbuffer_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8) +{ + struct gl_renderbuffer *rb32; + + rb32 = _mesa_new_renderbuffer(ctx, rb8->Name); + if (rb32) { + ASSERT(rb8->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb8->_BaseFormat == GL_RGBA); + + _glthread_LOCK_MUTEX(rb8->Mutex); + rb8->RefCount++; + _glthread_UNLOCK_MUTEX(rb8->Mutex); + + rb32->InternalFormat = rb8->InternalFormat; + rb32->_ActualFormat = rb8->_ActualFormat; + rb32->_BaseFormat = rb8->_BaseFormat; + rb32->DataType = GL_FLOAT; + /* Note: passing through underlying bits/channel */ + rb32->RedBits = rb8->RedBits; + rb32->GreenBits = rb8->GreenBits; + rb32->BlueBits = rb8->BlueBits; + rb32->AlphaBits = rb8->AlphaBits; + rb32->Wrapped = rb8; + + rb32->AllocStorage = AllocStorage_wrapper; + rb32->Delete = Delete_wrapper; + rb32->GetPointer = GetPointer_wrapper; + rb32->GetRow = GetRow_32wrap8; + rb32->GetValues = GetValues_32wrap8; + rb32->PutRow = PutRow_32wrap8; + rb32->PutRowRGB = PutRowRGB_32wrap8; + rb32->PutMonoRow = PutMonoRow_32wrap8; + rb32->PutValues = PutValues_32wrap8; + rb32->PutMonoValues = PutMonoValues_32wrap8; + } + return rb32; +} + + + + +static void +GetRow_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + GLushort values16[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_SHORT); + ASSERT(count <= MAX_WIDTH); + + /* get 16bpp values */ + rb->Wrapped->GetRow(ctx, rb->Wrapped, count, x, y, values16); + + /* convert 16bpp to 32bpp */ + for (i = 0; i < 4 * count; i++) { + values32[i] = USHORT_TO_FLOAT(values16[i]); + } +} + + +static void +GetValues_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLushort values16[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_SHORT); + + rb->Wrapped->GetValues(ctx, rb->Wrapped, count, x, y, values16); + + for (i = 0; i < 4 * count; i++) { + values32[i] = USHORT_TO_FLOAT(values16[i]); + } +} + + +static void +PutRow_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + GLushort values16[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_SHORT); + for (i = 0; i < 4 * count; i++) { + UNCLAMPED_FLOAT_TO_USHORT(values16[i], values32[i]); + } + rb->Wrapped->PutRow(ctx, rb->Wrapped, count, x, y, values16, mask); +} + + +static void +PutRowRGB_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + GLushort values16[MAX_WIDTH * 3]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_SHORT); + for (i = 0; i < 3 * count; i++) { + UNCLAMPED_FLOAT_TO_USHORT(values16[i], values32[i]); + } + rb->Wrapped->PutRowRGB(ctx, rb->Wrapped, count, x, y, values16, mask); +} + + +static void +PutMonoRow_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + GLushort value16[4]; + GLfloat *value32 = (GLfloat *) value; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_SHORT); + UNCLAMPED_FLOAT_TO_USHORT(value16[0], value32[0]); + UNCLAMPED_FLOAT_TO_USHORT(value16[1], value32[1]); + UNCLAMPED_FLOAT_TO_USHORT(value16[2], value32[2]); + UNCLAMPED_FLOAT_TO_USHORT(value16[3], value32[3]); + rb->Wrapped->PutMonoRow(ctx, rb->Wrapped, count, x, y, value16, mask); +} + + +static void +PutValues_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + GLushort values16[MAX_WIDTH * 4]; + GLfloat *values32 = (GLfloat *) values; + GLuint i; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_SHORT); + for (i = 0; i < 4 * count; i++) { + UNCLAMPED_FLOAT_TO_USHORT(values16[i], values32[i]); + } + rb->Wrapped->PutValues(ctx, rb->Wrapped, count, x, y, values16, mask); +} + + +static void +PutMonoValues_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + GLushort value16[4]; + GLfloat *value32 = (GLfloat *) value; + ASSERT(rb->DataType == GL_FLOAT); + ASSERT(rb->Wrapped->DataType == GL_UNSIGNED_SHORT); + UNCLAMPED_FLOAT_TO_USHORT(value16[0], value32[0]); + UNCLAMPED_FLOAT_TO_USHORT(value16[1], value32[1]); + UNCLAMPED_FLOAT_TO_USHORT(value16[2], value32[2]); + UNCLAMPED_FLOAT_TO_USHORT(value16[3], value32[3]); + rb->Wrapped->PutMonoValues(ctx, rb->Wrapped, count, x, y, value16, mask); +} + + +/** + * Wrap an 16-bit/channel renderbuffer with a 32-bit/channel + * renderbuffer adaptor. + */ +struct gl_renderbuffer * +_mesa_new_renderbuffer_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb16) +{ + struct gl_renderbuffer *rb32; + + rb32 = _mesa_new_renderbuffer(ctx, rb16->Name); + if (rb32) { + ASSERT(rb16->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb16->_BaseFormat == GL_RGBA); + + _glthread_LOCK_MUTEX(rb16->Mutex); + rb16->RefCount++; + _glthread_UNLOCK_MUTEX(rb16->Mutex); + + rb32->InternalFormat = rb16->InternalFormat; + rb32->_ActualFormat = rb16->_ActualFormat; + rb32->_BaseFormat = rb16->_BaseFormat; + rb32->DataType = GL_FLOAT; + /* Note: passing through underlying bits/channel */ + rb32->RedBits = rb16->RedBits; + rb32->GreenBits = rb16->GreenBits; + rb32->BlueBits = rb16->BlueBits; + rb32->AlphaBits = rb16->AlphaBits; + rb32->Wrapped = rb16; + + rb32->AllocStorage = AllocStorage_wrapper; + rb32->Delete = Delete_wrapper; + rb32->GetPointer = GetPointer_wrapper; + rb32->GetRow = GetRow_32wrap16; + rb32->GetValues = GetValues_32wrap16; + rb32->PutRow = PutRow_32wrap16; + rb32->PutRowRGB = PutRowRGB_32wrap16; + rb32->PutMonoRow = PutMonoRow_32wrap16; + rb32->PutValues = PutValues_32wrap16; + rb32->PutMonoValues = PutMonoValues_32wrap16; + } + return rb32; +} diff --git a/src/kits/opengl/mesa/main/rbadaptors.h b/src/kits/opengl/mesa/main/rbadaptors.h new file mode 100644 index 0000000000..1d45b287dd --- /dev/null +++ b/src/kits/opengl/mesa/main/rbadaptors.h @@ -0,0 +1,40 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5.1 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef RBADAPTORS_H +#define RBADAPTORS_H + + +extern struct gl_renderbuffer * +_mesa_new_renderbuffer_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8); + +extern struct gl_renderbuffer * +_mesa_new_renderbuffer_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8); + +extern struct gl_renderbuffer * +_mesa_new_renderbuffer_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb16); + + +#endif /* RBADAPTORS_H */ diff --git a/src/kits/opengl/mesa/main/renderbuffer.c b/src/kits/opengl/mesa/main/renderbuffer.c new file mode 100644 index 0000000000..6b18d60baf --- /dev/null +++ b/src/kits/opengl/mesa/main/renderbuffer.c @@ -0,0 +1,2146 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * Functions for allocating/managing renderbuffers. + * Also, routines for reading/writing software-based renderbuffer data as + * ubytes, ushorts, uints, etc. + * + * The 'alpha8' renderbuffer is interesting. It's used to add a software-based + * alpha channel to RGB renderbuffers. This is done by wrapping the RGB + * renderbuffer with the alpha renderbuffer. We can do this because of the + * OO-nature of renderbuffers. + * + * Down the road we'll use this for run-time support of 8, 16 and 32-bit + * color channels. For example, Mesa may use 32-bit/float color channels + * internally (swrast) and use wrapper renderbuffers to convert 32-bit + * values down to 16 or 8-bit values for whatever kind of framebuffer we have. + */ + + +#include "glheader.h" +#include "imports.h" +#include "context.h" +#include "mtypes.h" +#include "fbobject.h" +#include "renderbuffer.h" + +#include "rbadaptors.h" + + +/* 32-bit color index format. Not a public format. */ +#define COLOR_INDEX32 0x424243 + + +/* + * Routines for get/put values in common buffer formats follow. + * Someday add support for arbitrary row stride to make them more + * flexible. + */ + +/********************************************************************** + * Functions for buffers of 1 X GLubyte values. + * Typically stencil. + */ + +static void * +get_pointer_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + if (!rb->Data) + return NULL; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + /* Can't assert _ActualFormat since these funcs may be used for serveral + * different formats (GL_ALPHA8, GL_STENCIL_INDEX8, etc). + */ + return (GLubyte *) rb->Data + y * rb->Width + x; +} + + +static void +get_row_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLubyte *src = (const GLubyte *) rb->Data + y * rb->Width + x; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + _mesa_memcpy(values, src, count * sizeof(GLubyte)); +} + + +static void +get_values_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLubyte *dst = (GLubyte *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + const GLubyte *src = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + dst[i] = *src; + } +} + + +static void +put_row_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + const GLubyte *src = (const GLubyte *) values; + GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = src[i]; + } + } + } + else { + _mesa_memcpy(dst, values, count * sizeof(GLubyte)); + } +} + + +static void +put_mono_row_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + const GLubyte val = *((const GLubyte *) value); + GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = val; + } + } + } + else { + GLuint i; + for (i = 0; i < count; i++) { + dst[i] = val; + } + } +} + + +static void +put_values_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + const GLubyte *src = (const GLubyte *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + *dst = src[i]; + } + } +} + + +static void +put_mono_values_ubyte(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + const GLubyte val = *((const GLubyte *) value); + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + *dst = val; + } + } +} + + +/********************************************************************** + * Functions for buffers of 1 X GLushort values. + * Typically depth/Z. + */ + +static void * +get_pointer_ushort(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + if (!rb->Data) + return NULL; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + ASSERT(rb->Width > 0); + return (GLushort *) rb->Data + y * rb->Width + x; +} + + +static void +get_row_ushort(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const void *src = rb->GetPointer(ctx, rb, x, y); + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + _mesa_memcpy(values, src, count * sizeof(GLushort)); +} + + +static void +get_values_ushort(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLushort *dst = (GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + for (i = 0; i < count; i++) { + const GLushort *src = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + dst[i] = *src; + } +} + + +static void +put_row_ushort(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + const GLushort *src = (const GLushort *) values; + GLushort *dst = (GLushort *) rb->Data + y * rb->Width + x; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = src[i]; + } + } + } + else { + _mesa_memcpy(dst, src, count * sizeof(GLushort)); + } +} + + +static void +put_mono_row_ushort(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + const GLushort val = *((const GLushort *) value); + GLushort *dst = (GLushort *) rb->Data + y * rb->Width + x; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = val; + } + } + } + else { + GLuint i; + for (i = 0; i < count; i++) { + dst[i] = val; + } + } +} + + +static void +put_values_ushort(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + const GLushort *src = (const GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + *dst = src[i]; + } + } +} + + +static void +put_mono_values_ushort(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + const GLushort val = *((const GLushort *) value); + ASSERT(rb->DataType == GL_UNSIGNED_SHORT); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + *dst = val; + } + } + } + else { + GLuint i; + for (i = 0; i < count; i++) { + GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + *dst = val; + } + } +} + + +/********************************************************************** + * Functions for buffers of 1 X GLuint values. + * Typically depth/Z or color index. + */ + +static void * +get_pointer_uint(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + if (!rb->Data) + return NULL; + ASSERT(rb->DataType == GL_UNSIGNED_INT || + rb->DataType == GL_UNSIGNED_INT_24_8_EXT); + return (GLuint *) rb->Data + y * rb->Width + x; +} + + +static void +get_row_uint(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const void *src = rb->GetPointer(ctx, rb, x, y); + ASSERT(rb->DataType == GL_UNSIGNED_INT || + rb->DataType == GL_UNSIGNED_INT_24_8_EXT); + _mesa_memcpy(values, src, count * sizeof(GLuint)); +} + + +static void +get_values_uint(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLuint *dst = (GLuint *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_INT || + rb->DataType == GL_UNSIGNED_INT_24_8_EXT); + for (i = 0; i < count; i++) { + const GLuint *src = (GLuint *) rb->Data + y[i] * rb->Width + x[i]; + dst[i] = *src; + } +} + + +static void +put_row_uint(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + const GLuint *src = (const GLuint *) values; + GLuint *dst = (GLuint *) rb->Data + y * rb->Width + x; + ASSERT(rb->DataType == GL_UNSIGNED_INT || + rb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = src[i]; + } + } + } + else { + _mesa_memcpy(dst, src, count * sizeof(GLuint)); + } +} + + +static void +put_mono_row_uint(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + const GLuint val = *((const GLuint *) value); + GLuint *dst = (GLuint *) rb->Data + y * rb->Width + x; + ASSERT(rb->DataType == GL_UNSIGNED_INT || + rb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = val; + } + } + } + else { + GLuint i; + for (i = 0; i < count; i++) { + dst[i] = val; + } + } +} + + +static void +put_values_uint(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + const GLuint *src = (const GLuint *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_INT || + rb->DataType == GL_UNSIGNED_INT_24_8_EXT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) rb->Data + y[i] * rb->Width + x[i]; + *dst = src[i]; + } + } +} + + +static void +put_mono_values_uint(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *value, + const GLubyte *mask) +{ + const GLuint val = *((const GLuint *) value); + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_INT || + rb->DataType == GL_UNSIGNED_INT_24_8_EXT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) rb->Data + y[i] * rb->Width + x[i]; + *dst = val; + } + } +} + + +/********************************************************************** + * Functions for buffers of 3 X GLubyte (or GLbyte) values. + * Typically color buffers. + * NOTE: the incoming and outgoing colors are RGBA! We ignore incoming + * alpha values and return 255 for outgoing alpha values. + */ + +static void * +get_pointer_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + ASSERT(rb->_ActualFormat == GL_RGB8); + /* No direct access since this buffer is RGB but caller will be + * treating it as if it were RGBA. + */ + return NULL; +} + + +static void +get_row_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLubyte *src = (const GLubyte *) rb->Data + 3 * (y * rb->Width + x); + GLubyte *dst = (GLubyte *) values; + GLuint i; + ASSERT(rb->_ActualFormat == GL_RGB8); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + dst[i * 4 + 0] = src[i * 3 + 0]; + dst[i * 4 + 1] = src[i * 3 + 1]; + dst[i * 4 + 2] = src[i * 3 + 2]; + dst[i * 4 + 3] = 255; + } +} + + +static void +get_values_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLubyte *dst = (GLubyte *) values; + GLuint i; + ASSERT(rb->_ActualFormat == GL_RGB8); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + const GLubyte *src + = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]); + dst[i * 4 + 0] = src[0]; + dst[i * 4 + 1] = src[1]; + dst[i * 4 + 2] = src[2]; + dst[i * 4 + 3] = 255; + } +} + + +static void +put_row_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + /* note: incoming values are RGB+A! */ + const GLubyte *src = (const GLubyte *) values; + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x); + GLuint i; + ASSERT(rb->_ActualFormat == GL_RGB8); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i * 3 + 0] = src[i * 4 + 0]; + dst[i * 3 + 1] = src[i * 4 + 1]; + dst[i * 3 + 2] = src[i * 4 + 2]; + } + } +} + + +static void +put_row_rgb_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + /* note: incoming values are RGB+A! */ + const GLubyte *src = (const GLubyte *) values; + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x); + GLuint i; + ASSERT(rb->_ActualFormat == GL_RGB8); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i * 3 + 0] = src[i * 3 + 0]; + dst[i * 3 + 1] = src[i * 3 + 1]; + dst[i * 3 + 2] = src[i * 3 + 2]; + } + } +} + + +static void +put_mono_row_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + /* note: incoming value is RGB+A! */ + const GLubyte val0 = ((const GLubyte *) value)[0]; + const GLubyte val1 = ((const GLubyte *) value)[1]; + const GLubyte val2 = ((const GLubyte *) value)[2]; + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x); + ASSERT(rb->_ActualFormat == GL_RGB8); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + if (!mask && val0 == val1 && val1 == val2) { + /* optimized case */ + _mesa_memset(dst, val0, 3 * count); + } + else { + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i * 3 + 0] = val0; + dst[i * 3 + 1] = val1; + dst[i * 3 + 2] = val2; + } + } + } +} + + +static void +put_values_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + /* note: incoming values are RGB+A! */ + const GLubyte *src = (const GLubyte *) values; + GLuint i; + ASSERT(rb->_ActualFormat == GL_RGB8); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]); + dst[0] = src[i * 4 + 0]; + dst[1] = src[i * 4 + 1]; + dst[2] = src[i * 4 + 2]; + } + } +} + + +static void +put_mono_values_ubyte3(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + /* note: incoming value is RGB+A! */ + const GLubyte val0 = ((const GLubyte *) value)[0]; + const GLubyte val1 = ((const GLubyte *) value)[1]; + const GLubyte val2 = ((const GLubyte *) value)[2]; + GLuint i; + ASSERT(rb->_ActualFormat == GL_RGB8); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]); + dst[0] = val0; + dst[1] = val1; + dst[2] = val2; + } + } +} + + +/********************************************************************** + * Functions for buffers of 4 X GLubyte (or GLbyte) values. + * Typically color buffers. + */ + +static void * +get_pointer_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + if (!rb->Data) + return NULL; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + return (GLubyte *) rb->Data + 4 * (y * rb->Width + x); +} + + +static void +get_row_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLubyte *src = (const GLubyte *) rb->Data + 4 * (y * rb->Width + x); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + _mesa_memcpy(values, src, 4 * count * sizeof(GLubyte)); +} + + +static void +get_values_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + /* treat 4*GLubyte as 1*GLuint */ + GLuint *dst = (GLuint *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + for (i = 0; i < count; i++) { + const GLuint *src = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]); + dst[i] = *src; + } +} + + +static void +put_row_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + /* treat 4*GLubyte as 1*GLuint */ + const GLuint *src = (const GLuint *) values; + GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = src[i]; + } + } + } + else { + _mesa_memcpy(dst, src, 4 * count * sizeof(GLubyte)); + } +} + + +static void +put_row_rgb_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + /* Store RGB values in RGBA buffer */ + const GLubyte *src = (const GLubyte *) values; + GLubyte *dst = (GLubyte *) rb->Data + 4 * (y * rb->Width + x); + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i * 4 + 0] = src[i * 3 + 0]; + dst[i * 4 + 1] = src[i * 3 + 1]; + dst[i * 4 + 2] = src[i * 3 + 2]; + dst[i * 4 + 3] = 0xff; + } + } +} + + +static void +put_mono_row_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + /* treat 4*GLubyte as 1*GLuint */ + const GLuint val = *((const GLuint *) value); + GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x); + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + if (!mask && val == 0) { + /* common case */ + _mesa_bzero(dst, count * 4 * sizeof(GLubyte)); + } + else { + /* general case */ + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = val; + } + } + } + else { + GLuint i; + for (i = 0; i < count; i++) { + dst[i] = val; + } + } + } +} + + +static void +put_values_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + /* treat 4*GLubyte as 1*GLuint */ + const GLuint *src = (const GLuint *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]); + *dst = src[i]; + } + } +} + + +static void +put_mono_values_ubyte4(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + /* treat 4*GLubyte as 1*GLuint */ + const GLuint val = *((const GLuint *) value); + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(rb->_ActualFormat == GL_RGBA8); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]); + *dst = val; + } + } +} + + +/********************************************************************** + * Functions for buffers of 4 X GLushort (or GLshort) values. + * Typically accum buffer. + */ + +static void * +get_pointer_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + if (!rb->Data) + return NULL; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + return (GLushort *) rb->Data + 4 * (y * rb->Width + x); +} + + +static void +get_row_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLshort *src = (const GLshort *) rb->Data + 4 * (y * rb->Width + x); + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + _mesa_memcpy(values, src, 4 * count * sizeof(GLshort)); +} + + +static void +get_values_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLushort *dst = (GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + for (i = 0; i < count; i++) { + const GLushort *src + = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]); + dst[i] = *src; + } +} + + +static void +put_row_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + const GLushort *src = (const GLushort *) values; + GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x); + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i * 4 + 0] = src[i * 4 + 0]; + dst[i * 4 + 1] = src[i * 4 + 1]; + dst[i * 4 + 2] = src[i * 4 + 2]; + dst[i * 4 + 3] = src[i * 4 + 3]; + } + } + } + else { + _mesa_memcpy(dst, src, 4 * count * sizeof(GLushort)); + } +} + + +static void +put_row_rgb_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + /* Put RGB values in RGBA buffer */ + const GLushort *src = (const GLushort *) values; + GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x); + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i * 4 + 0] = src[i * 3 + 0]; + dst[i * 4 + 1] = src[i * 3 + 1]; + dst[i * 4 + 2] = src[i * 3 + 2]; + dst[i * 4 + 3] = 0xffff; + } + } + } + else { + _mesa_memcpy(dst, src, 4 * count * sizeof(GLushort)); + } +} + + +static void +put_mono_row_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + const GLushort val0 = ((const GLushort *) value)[0]; + const GLushort val1 = ((const GLushort *) value)[1]; + const GLushort val2 = ((const GLushort *) value)[2]; + const GLushort val3 = ((const GLushort *) value)[3]; + GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x); + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + if (!mask && val0 == 0 && val1 == 0 && val2 == 0 && val3 == 0) { + /* common case for clearing accum buffer */ + _mesa_bzero(dst, count * 4 * sizeof(GLushort)); + } + else { + GLuint i; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i * 4 + 0] = val0; + dst[i * 4 + 1] = val1; + dst[i * 4 + 2] = val2; + dst[i * 4 + 3] = val3; + } + } + } +} + + +static void +put_values_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + const GLushort *src = (const GLushort *) values; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLushort *dst = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]); + dst[0] = src[i * 4 + 0]; + dst[1] = src[i * 4 + 1]; + dst[2] = src[i * 4 + 2]; + dst[3] = src[i * 4 + 3]; + } + } +} + + +static void +put_mono_values_ushort4(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + const GLushort val0 = ((const GLushort *) value)[0]; + const GLushort val1 = ((const GLushort *) value)[1]; + const GLushort val2 = ((const GLushort *) value)[2]; + const GLushort val3 = ((const GLushort *) value)[3]; + GLuint i; + ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLushort *dst = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]); + dst[0] = val0; + dst[1] = val1; + dst[2] = val2; + dst[3] = val3; + } + } +} + + + +/** + * This is a software fallback for the gl_renderbuffer->AllocStorage + * function. + * Device drivers will typically override this function for the buffers + * which it manages (typically color buffers, Z and stencil). + * Other buffers (like software accumulation and aux buffers) which the driver + * doesn't manage can be handled with this function. + * + * This one multi-purpose function can allocate stencil, depth, accum, color + * or color-index buffers! + * + * This function also plugs in the appropriate GetPointer, Get/PutRow and + * Get/PutValues functions. + */ +GLboolean +_mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, + GLuint width, GLuint height) +{ + GLuint pixelSize; + + /* first clear these fields */ + rb->RedBits = + rb->GreenBits = + rb->BlueBits = + rb->AlphaBits = + rb->IndexBits = + rb->DepthBits = + rb->StencilBits = 0; + + switch (internalFormat) { + case GL_RGB: + case GL_R3_G3_B2: + case GL_RGB4: + case GL_RGB5: + case GL_RGB8: + case GL_RGB10: + case GL_RGB12: + case GL_RGB16: + rb->_ActualFormat = GL_RGB8; + rb->_BaseFormat = GL_RGB; + rb->DataType = GL_UNSIGNED_BYTE; + rb->GetPointer = get_pointer_ubyte3; + rb->GetRow = get_row_ubyte3; + rb->GetValues = get_values_ubyte3; + rb->PutRow = put_row_ubyte3; + rb->PutRowRGB = put_row_rgb_ubyte3; + rb->PutMonoRow = put_mono_row_ubyte3; + rb->PutValues = put_values_ubyte3; + rb->PutMonoValues = put_mono_values_ubyte3; + rb->RedBits = 8 * sizeof(GLubyte); + rb->GreenBits = 8 * sizeof(GLubyte); + rb->BlueBits = 8 * sizeof(GLubyte); + rb->AlphaBits = 0; + pixelSize = 3 * sizeof(GLubyte); + break; + case GL_RGBA: + case GL_RGBA2: + case GL_RGBA4: + case GL_RGB5_A1: + case GL_RGBA8: + rb->_ActualFormat = GL_RGBA8; + rb->_BaseFormat = GL_RGBA; + rb->DataType = GL_UNSIGNED_BYTE; + rb->GetPointer = get_pointer_ubyte4; + rb->GetRow = get_row_ubyte4; + rb->GetValues = get_values_ubyte4; + rb->PutRow = put_row_ubyte4; + rb->PutRowRGB = put_row_rgb_ubyte4; + rb->PutMonoRow = put_mono_row_ubyte4; + rb->PutValues = put_values_ubyte4; + rb->PutMonoValues = put_mono_values_ubyte4; + rb->RedBits = 8 * sizeof(GLubyte); + rb->GreenBits = 8 * sizeof(GLubyte); + rb->BlueBits = 8 * sizeof(GLubyte); + rb->AlphaBits = 8 * sizeof(GLubyte); + pixelSize = 4 * sizeof(GLubyte); + break; + case GL_RGB10_A2: + case GL_RGBA12: + case GL_RGBA16: + rb->_ActualFormat = GL_RGBA16; + rb->_BaseFormat = GL_RGBA; + rb->DataType = GL_UNSIGNED_SHORT; + rb->GetPointer = get_pointer_ushort4; + rb->GetRow = get_row_ushort4; + rb->GetValues = get_values_ushort4; + rb->PutRow = put_row_ushort4; + rb->PutRowRGB = put_row_rgb_ushort4; + rb->PutMonoRow = put_mono_row_ushort4; + rb->PutValues = put_values_ushort4; + rb->PutMonoValues = put_mono_values_ushort4; + rb->RedBits = 8 * sizeof(GLushort); + rb->GreenBits = 8 * sizeof(GLushort); + rb->BlueBits = 8 * sizeof(GLushort); + rb->AlphaBits = 8 * sizeof(GLushort); + pixelSize = 4 * sizeof(GLushort); + break; +#if 00 + case GL_ALPHA8: + rb->_ActualFormat = GL_ALPHA8; + rb->_BaseFormat = GL_RGBA; /* Yes, not GL_ALPHA! */ + rb->DataType = GL_UNSIGNED_BYTE; + rb->GetPointer = get_pointer_alpha8; + rb->GetRow = get_row_alpha8; + rb->GetValues = get_values_alpha8; + rb->PutRow = put_row_alpha8; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_alpha8; + rb->PutValues = put_values_alpha8; + rb->PutMonoValues = put_mono_values_alpha8; + rb->RedBits = 0; /*red*/ + rb->GreenBits = 0; /*green*/ + rb->BlueBits = 0; /*blue*/ + rb->AlphaBits = 8 * sizeof(GLubyte); + pixelSize = sizeof(GLubyte); + break; +#endif + case GL_STENCIL_INDEX: + case GL_STENCIL_INDEX1_EXT: + case GL_STENCIL_INDEX4_EXT: + case GL_STENCIL_INDEX8_EXT: + rb->_ActualFormat = GL_STENCIL_INDEX8_EXT; + rb->_BaseFormat = GL_STENCIL_INDEX; + rb->DataType = GL_UNSIGNED_BYTE; + rb->GetPointer = get_pointer_ubyte; + rb->GetRow = get_row_ubyte; + rb->GetValues = get_values_ubyte; + rb->PutRow = put_row_ubyte; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_ubyte; + rb->PutValues = put_values_ubyte; + rb->PutMonoValues = put_mono_values_ubyte; + rb->StencilBits = 8 * sizeof(GLubyte); + pixelSize = sizeof(GLubyte); + break; + case GL_STENCIL_INDEX16_EXT: + rb->_ActualFormat = GL_STENCIL_INDEX16_EXT; + rb->_BaseFormat = GL_STENCIL_INDEX; + rb->DataType = GL_UNSIGNED_SHORT; + rb->GetPointer = get_pointer_ushort; + rb->GetRow = get_row_ushort; + rb->GetValues = get_values_ushort; + rb->PutRow = put_row_ushort; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_ushort; + rb->PutValues = put_values_ushort; + rb->PutMonoValues = put_mono_values_ushort; + rb->StencilBits = 8 * sizeof(GLushort); + pixelSize = sizeof(GLushort); + break; + case GL_DEPTH_COMPONENT: + case GL_DEPTH_COMPONENT16: + rb->_ActualFormat = GL_DEPTH_COMPONENT16; + rb->_BaseFormat = GL_DEPTH_COMPONENT; + rb->DataType = GL_UNSIGNED_SHORT; + rb->GetPointer = get_pointer_ushort; + rb->GetRow = get_row_ushort; + rb->GetValues = get_values_ushort; + rb->PutRow = put_row_ushort; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_ushort; + rb->PutValues = put_values_ushort; + rb->PutMonoValues = put_mono_values_ushort; + rb->DepthBits = 8 * sizeof(GLushort); + pixelSize = sizeof(GLushort); + break; + case GL_DEPTH_COMPONENT24: + case GL_DEPTH_COMPONENT32: + rb->_BaseFormat = GL_DEPTH_COMPONENT; + rb->DataType = GL_UNSIGNED_INT; + rb->GetPointer = get_pointer_uint; + rb->GetRow = get_row_uint; + rb->GetValues = get_values_uint; + rb->PutRow = put_row_uint; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_uint; + rb->PutValues = put_values_uint; + rb->PutMonoValues = put_mono_values_uint; + if (internalFormat == GL_DEPTH_COMPONENT24) { + rb->_ActualFormat = GL_DEPTH_COMPONENT24; + rb->DepthBits = 24; + } + else { + rb->_ActualFormat = GL_DEPTH_COMPONENT32; + rb->DepthBits = 32; + } + pixelSize = sizeof(GLuint); + break; + case GL_DEPTH_STENCIL_EXT: + case GL_DEPTH24_STENCIL8_EXT: + rb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT; + rb->_BaseFormat = GL_DEPTH_STENCIL_EXT; + rb->DataType = GL_UNSIGNED_INT_24_8_EXT; + rb->GetPointer = get_pointer_uint; + rb->GetRow = get_row_uint; + rb->GetValues = get_values_uint; + rb->PutRow = put_row_uint; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_uint; + rb->PutValues = put_values_uint; + rb->PutMonoValues = put_mono_values_uint; + rb->DepthBits = 24; + rb->StencilBits = 8; + pixelSize = sizeof(GLuint); + break; + case GL_COLOR_INDEX8_EXT: + rb->_ActualFormat = GL_COLOR_INDEX8_EXT; + rb->_BaseFormat = GL_COLOR_INDEX; + rb->DataType = GL_UNSIGNED_BYTE; + rb->GetPointer = get_pointer_ubyte; + rb->GetRow = get_row_ubyte; + rb->GetValues = get_values_ubyte; + rb->PutRow = put_row_ubyte; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_ubyte; + rb->PutValues = put_values_ubyte; + rb->PutMonoValues = put_mono_values_ubyte; + rb->IndexBits = 8 * sizeof(GLubyte); + pixelSize = sizeof(GLubyte); + break; + case GL_COLOR_INDEX16_EXT: + rb->_ActualFormat = GL_COLOR_INDEX16_EXT; + rb->_BaseFormat = GL_COLOR_INDEX; + rb->DataType = GL_UNSIGNED_SHORT; + rb->GetPointer = get_pointer_ushort; + rb->GetRow = get_row_ushort; + rb->GetValues = get_values_ushort; + rb->PutRow = put_row_ushort; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_ushort; + rb->PutValues = put_values_ushort; + rb->PutMonoValues = put_mono_values_ushort; + rb->IndexBits = 8 * sizeof(GLushort); + pixelSize = sizeof(GLushort); + break; + case COLOR_INDEX32: + rb->_ActualFormat = COLOR_INDEX32; + rb->_BaseFormat = GL_COLOR_INDEX; + rb->DataType = GL_UNSIGNED_INT; + rb->GetPointer = get_pointer_uint; + rb->GetRow = get_row_uint; + rb->GetValues = get_values_uint; + rb->PutRow = put_row_uint; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_uint; + rb->PutValues = put_values_uint; + rb->PutMonoValues = put_mono_values_uint; + rb->IndexBits = 8 * sizeof(GLuint); + pixelSize = sizeof(GLuint); + break; + default: + _mesa_problem(ctx, "Bad internalFormat in _mesa_soft_renderbuffer_storage"); + return GL_FALSE; + } + + ASSERT(rb->DataType); + ASSERT(rb->GetPointer); + ASSERT(rb->GetRow); + ASSERT(rb->GetValues); + ASSERT(rb->PutRow); + ASSERT(rb->PutMonoRow); + ASSERT(rb->PutValues); + ASSERT(rb->PutMonoValues); + + /* free old buffer storage */ + if (rb->Data) + _mesa_free(rb->Data); + + /* allocate new buffer storage */ + rb->Data = _mesa_malloc(width * height * pixelSize); + if (rb->Data == NULL) { + rb->Width = 0; + rb->Height = 0; + _mesa_error(ctx, GL_OUT_OF_MEMORY, + "software renderbuffer allocation (%d x %d x %d)", + width, height, pixelSize); + return GL_FALSE; + } + + rb->Width = width; + rb->Height = height; + + return GL_TRUE; +} + + + +/**********************************************************************/ +/**********************************************************************/ +/**********************************************************************/ + + +/** + * Here we utilize the gl_renderbuffer->Wrapper field to put an alpha + * buffer wrapper around an existing RGB renderbuffer (hw or sw). + * + * When PutRow is called (for example), we store the alpha values in + * this buffer, then pass on the PutRow call to the wrapped RGB + * buffer. + */ + + +static GLboolean +alloc_storage_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, + GLenum internalFormat, GLuint width, GLuint height) +{ + ASSERT(arb != arb->Wrapped); + ASSERT(arb->_ActualFormat == GL_ALPHA8); + + /* first, pass the call to the wrapped RGB buffer */ + if (!arb->Wrapped->AllocStorage(ctx, arb->Wrapped, internalFormat, + width, height)) { + return GL_FALSE; + } + + /* next, resize my alpha buffer */ + if (arb->Data) { + _mesa_free(arb->Data); + } + + arb->Data = _mesa_malloc(width * height * sizeof(GLubyte)); + if (arb->Data == NULL) { + arb->Width = 0; + arb->Height = 0; + _mesa_error(ctx, GL_OUT_OF_MEMORY, "software alpha buffer allocation"); + return GL_FALSE; + } + + arb->Width = width; + arb->Height = height; + + return GL_TRUE; +} + + +/** + * Delete an alpha_renderbuffer object, as well as the wrapped RGB buffer. + */ +static void +delete_renderbuffer_alpha8(struct gl_renderbuffer *arb) +{ + if (arb->Data) { + _mesa_free(arb->Data); + } + ASSERT(arb->Wrapped); + ASSERT(arb != arb->Wrapped); + arb->Wrapped->Delete(arb->Wrapped); + arb->Wrapped = NULL; + _mesa_free(arb); +} + + +static void * +get_pointer_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, + GLint x, GLint y) +{ + return NULL; /* don't allow direct access! */ +} + + +static void +get_row_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, GLuint count, + GLint x, GLint y, void *values) +{ + /* NOTE: 'values' is RGBA format! */ + const GLubyte *src = (const GLubyte *) arb->Data + y * arb->Width + x; + GLubyte *dst = (GLubyte *) values; + GLuint i; + ASSERT(arb != arb->Wrapped); + ASSERT(arb->DataType == GL_UNSIGNED_BYTE); + /* first, pass the call to the wrapped RGB buffer */ + arb->Wrapped->GetRow(ctx, arb->Wrapped, count, x, y, values); + /* second, fill in alpha values from this buffer! */ + for (i = 0; i < count; i++) { + dst[i * 4 + 3] = src[i]; + } +} + + +static void +get_values_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLubyte *dst = (GLubyte *) values; + GLuint i; + ASSERT(arb != arb->Wrapped); + ASSERT(arb->DataType == GL_UNSIGNED_BYTE); + /* first, pass the call to the wrapped RGB buffer */ + arb->Wrapped->GetValues(ctx, arb->Wrapped, count, x, y, values); + /* second, fill in alpha values from this buffer! */ + for (i = 0; i < count; i++) { + const GLubyte *src = (GLubyte *) arb->Data + y[i] * arb->Width + x[i]; + dst[i * 4 + 3] = *src; + } +} + + +static void +put_row_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + const GLubyte *src = (const GLubyte *) values; + GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x; + GLuint i; + ASSERT(arb != arb->Wrapped); + ASSERT(arb->DataType == GL_UNSIGNED_BYTE); + /* first, pass the call to the wrapped RGB buffer */ + arb->Wrapped->PutRow(ctx, arb->Wrapped, count, x, y, values, mask); + /* second, store alpha in our buffer */ + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = src[i * 4 + 3]; + } + } +} + + +static void +put_row_rgb_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + const GLubyte *src = (const GLubyte *) values; + GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x; + GLuint i; + ASSERT(arb != arb->Wrapped); + ASSERT(arb->DataType == GL_UNSIGNED_BYTE); + /* first, pass the call to the wrapped RGB buffer */ + arb->Wrapped->PutRowRGB(ctx, arb->Wrapped, count, x, y, values, mask); + /* second, store alpha in our buffer */ + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = src[i * 4 + 3]; + } + } +} + + +static void +put_mono_row_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + const GLubyte val = ((const GLubyte *) value)[3]; + GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x; + ASSERT(arb != arb->Wrapped); + ASSERT(arb->DataType == GL_UNSIGNED_BYTE); + /* first, pass the call to the wrapped RGB buffer */ + arb->Wrapped->PutMonoRow(ctx, arb->Wrapped, count, x, y, value, mask); + /* second, store alpha in our buffer */ + if (mask) { + GLuint i; + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = val; + } + } + } + else { + _mesa_memset(dst, val, count); + } +} + + +static void +put_values_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, GLuint count, + const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + const GLubyte *src = (const GLubyte *) values; + GLuint i; + ASSERT(arb != arb->Wrapped); + ASSERT(arb->DataType == GL_UNSIGNED_BYTE); + /* first, pass the call to the wrapped RGB buffer */ + arb->Wrapped->PutValues(ctx, arb->Wrapped, count, x, y, values, mask); + /* second, store alpha in our buffer */ + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->Width + x[i]; + *dst = src[i * 4 + 3]; + } + } +} + + +static void +put_mono_values_alpha8(GLcontext *ctx, struct gl_renderbuffer *arb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + const GLubyte val = ((const GLubyte *) value)[3]; + GLuint i; + ASSERT(arb != arb->Wrapped); + ASSERT(arb->DataType == GL_UNSIGNED_BYTE); + /* first, pass the call to the wrapped RGB buffer */ + arb->Wrapped->PutValues(ctx, arb->Wrapped, count, x, y, value, mask); + /* second, store alpha in our buffer */ + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->Width + x[i]; + *dst = val; + } + } +} + + + +/**********************************************************************/ +/**********************************************************************/ +/**********************************************************************/ + + +/** + * Default GetPointer routine. Always return NULL to indicate that + * direct buffer access is not supported. + */ +static void * +nop_get_pointer(GLcontext *ctx, struct gl_renderbuffer *rb, GLint x, GLint y) +{ + return NULL; +} + + +/** + * Initialize the fields of a gl_renderbuffer to default values. + */ +void +_mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name) +{ + _glthread_INIT_MUTEX(rb->Mutex); + + rb->ClassID = 0; + rb->Name = name; + rb->RefCount = 1; + rb->Delete = _mesa_delete_renderbuffer; + + /* The rest of these should be set later by the caller of this function or + * the AllocStorage method: + */ + rb->AllocStorage = NULL; + + rb->Width = 0; + rb->Height = 0; + rb->InternalFormat = GL_NONE; + rb->_ActualFormat = GL_NONE; + rb->_BaseFormat = GL_NONE; + rb->DataType = GL_NONE; + rb->RedBits = rb->GreenBits = rb->BlueBits = rb->AlphaBits = 0; + rb->IndexBits = 0; + rb->DepthBits = 0; + rb->StencilBits = 0; + rb->Data = NULL; + + /* Point back to ourself so that we don't have to check for Wrapped==NULL + * all over the drivers. + */ + rb->Wrapped = rb; + + rb->GetPointer = nop_get_pointer; + rb->GetRow = NULL; + rb->GetValues = NULL; + rb->PutRow = NULL; + rb->PutRowRGB = NULL; + rb->PutMonoRow = NULL; + rb->PutValues = NULL; + rb->PutMonoValues = NULL; +} + + +/** + * Allocate a new gl_renderbuffer object. This can be used for user-created + * renderbuffers or window-system renderbuffers. + */ +struct gl_renderbuffer * +_mesa_new_renderbuffer(GLcontext *ctx, GLuint name) +{ + struct gl_renderbuffer *rb = CALLOC_STRUCT(gl_renderbuffer); + if (rb) { + _mesa_init_renderbuffer(rb, name); + } + return rb; +} + + +/** + * Delete a gl_framebuffer. + * This is the default function for renderbuffer->Delete(). + */ +void +_mesa_delete_renderbuffer(struct gl_renderbuffer *rb) +{ + if (rb->Data) { + _mesa_free(rb->Data); + } + _mesa_free(rb); +} + + +/** + * Allocate a software-based renderbuffer. This is called via the + * ctx->Driver.NewRenderbuffer() function when the user creates a new + * renderbuffer. + * This would not be used for hardware-based renderbuffers. + */ +struct gl_renderbuffer * +_mesa_new_soft_renderbuffer(GLcontext *ctx, GLuint name) +{ + struct gl_renderbuffer *rb = _mesa_new_renderbuffer(ctx, name); + if (rb) { + rb->AllocStorage = _mesa_soft_renderbuffer_storage; + /* Normally, one would setup the PutRow, GetRow, etc functions here. + * But we're doing that in the _mesa_soft_renderbuffer_storage() function + * instead. + */ + } + return rb; +} + + +/** + * Add software-based color renderbuffers to the given framebuffer. + * This is a helper routine for device drivers when creating a + * window system framebuffer (not a user-created render/framebuffer). + * Once this function is called, you can basically forget about this + * renderbuffer; core Mesa will handle all the buffer management and + * rendering! + */ +GLboolean +_mesa_add_color_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint rgbBits, GLuint alphaBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight) +{ + GLuint b; + + if (rgbBits > 16 || alphaBits > 16) { + _mesa_problem(ctx, + "Unsupported bit depth in _mesa_add_color_renderbuffers"); + return GL_FALSE; + } + + assert(MAX_COLOR_ATTACHMENTS >= 4); + + for (b = BUFFER_FRONT_LEFT; b <= BUFFER_BACK_RIGHT; b++) { + struct gl_renderbuffer *rb; + + if (b == BUFFER_FRONT_LEFT && !frontLeft) + continue; + else if (b == BUFFER_BACK_LEFT && !backLeft) + continue; + else if (b == BUFFER_FRONT_RIGHT && !frontRight) + continue; + else if (b == BUFFER_BACK_RIGHT && !backRight) + continue; + + assert(fb->Attachment[b].Renderbuffer == NULL); + + rb = _mesa_new_renderbuffer(ctx, 0); + if (!rb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating color buffer"); + return GL_FALSE; + } + + if (rgbBits <= 8) { + if (alphaBits) + rb->_ActualFormat = GL_RGBA8; + else + rb->_ActualFormat = GL_RGB8; + } + else { + assert(rgbBits <= 16); + if (alphaBits) + rb->_ActualFormat = GL_RGBA16; + else + rb->_ActualFormat = GL_RGBA16; /* don't really have RGB16 yet */ + } + rb->InternalFormat = rb->_ActualFormat; + + rb->AllocStorage = _mesa_soft_renderbuffer_storage; + _mesa_add_renderbuffer(fb, b, rb); + } + + return GL_TRUE; +} + + +/** + * Add software-based color index renderbuffers to the given framebuffer. + * This is a helper routine for device drivers when creating a + * window system framebuffer (not a user-created render/framebuffer). + * Once this function is called, you can basically forget about this + * renderbuffer; core Mesa will handle all the buffer management and + * rendering! + */ +GLboolean +_mesa_add_color_index_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint indexBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight) +{ + GLuint b; + + if (indexBits > 8) { + _mesa_problem(ctx, + "Unsupported bit depth in _mesa_add_color_index_renderbuffers"); + return GL_FALSE; + } + + assert(MAX_COLOR_ATTACHMENTS >= 4); + + for (b = BUFFER_FRONT_LEFT; b <= BUFFER_BACK_RIGHT; b++) { + struct gl_renderbuffer *rb; + + if (b == BUFFER_FRONT_LEFT && !frontLeft) + continue; + else if (b == BUFFER_BACK_LEFT && !backLeft) + continue; + else if (b == BUFFER_FRONT_RIGHT && !frontRight) + continue; + else if (b == BUFFER_BACK_RIGHT && !backRight) + continue; + + assert(fb->Attachment[b].Renderbuffer == NULL); + + rb = _mesa_new_renderbuffer(ctx, 0); + if (!rb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating color buffer"); + return GL_FALSE; + } + + if (indexBits <= 8) { + /* only support GLuint for now */ + /*rb->InternalFormat = GL_COLOR_INDEX8_EXT;*/ + rb->_ActualFormat = COLOR_INDEX32; + } + else { + rb->_ActualFormat = COLOR_INDEX32; + } + rb->InternalFormat = rb->_ActualFormat; + + rb->AllocStorage = _mesa_soft_renderbuffer_storage; + _mesa_add_renderbuffer(fb, b, rb); + } + + return GL_TRUE; +} + + +/** + * Add software-based alpha renderbuffers to the given framebuffer. + * This is a helper routine for device drivers when creating a + * window system framebuffer (not a user-created render/framebuffer). + * Once this function is called, you can basically forget about this + * renderbuffer; core Mesa will handle all the buffer management and + * rendering! + */ +GLboolean +_mesa_add_alpha_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint alphaBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight) +{ + GLuint b; + + /* for window system framebuffers only! */ + assert(fb->Name == 0); + + if (alphaBits > 8) { + _mesa_problem(ctx, + "Unsupported bit depth in _mesa_add_alpha_renderbuffers"); + return GL_FALSE; + } + + assert(MAX_COLOR_ATTACHMENTS >= 4); + + /* Wrap each of the RGB color buffers with an alpha renderbuffer. + */ + for (b = BUFFER_FRONT_LEFT; b <= BUFFER_BACK_RIGHT; b++) { + struct gl_renderbuffer *arb; + + if (b == BUFFER_FRONT_LEFT && !frontLeft) + continue; + else if (b == BUFFER_BACK_LEFT && !backLeft) + continue; + else if (b == BUFFER_FRONT_RIGHT && !frontRight) + continue; + else if (b == BUFFER_BACK_RIGHT && !backRight) + continue; + + /* the RGB buffer to wrap must already exist!! */ + assert(fb->Attachment[b].Renderbuffer); + + /* only GLubyte supported for now */ + assert(fb->Attachment[b].Renderbuffer->DataType == GL_UNSIGNED_BYTE); + + /* allocate alpha renderbuffer */ + arb = _mesa_new_renderbuffer(ctx, 0); + if (!arb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating alpha buffer"); + return GL_FALSE; + } + + /* wrap the alpha renderbuffer around the RGB renderbuffer */ + arb->Wrapped = fb->Attachment[b].Renderbuffer; + + /* Set up my alphabuffer fields and plug in my functions. + * The functions will put/get the alpha values from/to RGBA arrays + * and then call the wrapped buffer's functions to handle the RGB + * values. + */ + arb->InternalFormat = arb->Wrapped->InternalFormat; + arb->_ActualFormat = GL_ALPHA8; + arb->_BaseFormat = arb->Wrapped->_BaseFormat; + arb->DataType = arb->Wrapped->DataType; + arb->AllocStorage = alloc_storage_alpha8; + arb->Delete = delete_renderbuffer_alpha8; + arb->GetPointer = get_pointer_alpha8; + arb->GetRow = get_row_alpha8; + arb->GetValues = get_values_alpha8; + arb->PutRow = put_row_alpha8; + arb->PutRowRGB = put_row_rgb_alpha8; + arb->PutMonoRow = put_mono_row_alpha8; + arb->PutValues = put_values_alpha8; + arb->PutMonoValues = put_mono_values_alpha8; + + /* clear the pointer to avoid assertion/sanity check failure later */ + fb->Attachment[b].Renderbuffer = NULL; + + /* plug the alpha renderbuffer into the colorbuffer attachment */ + _mesa_add_renderbuffer(fb, b, arb); + } + + return GL_TRUE; +} + + +/** + * Add a software-based depth renderbuffer to the given framebuffer. + * This is a helper routine for device drivers when creating a + * window system framebuffer (not a user-created render/framebuffer). + * Once this function is called, you can basically forget about this + * renderbuffer; core Mesa will handle all the buffer management and + * rendering! + */ +GLboolean +_mesa_add_depth_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint depthBits) +{ + struct gl_renderbuffer *rb; + + if (depthBits > 32) { + _mesa_problem(ctx, + "Unsupported depthBits in _mesa_add_depth_renderbuffer"); + return GL_FALSE; + } + + assert(fb->Attachment[BUFFER_DEPTH].Renderbuffer == NULL); + + rb = _mesa_new_renderbuffer(ctx, 0); + if (!rb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating depth buffer"); + return GL_FALSE; + } + + if (depthBits <= 16) { + rb->_ActualFormat = GL_DEPTH_COMPONENT16; + } + else if (depthBits <= 24) { + rb->_ActualFormat = GL_DEPTH_COMPONENT24; + } + else { + rb->_ActualFormat = GL_DEPTH_COMPONENT32; + } + rb->InternalFormat = rb->_ActualFormat; + + rb->AllocStorage = _mesa_soft_renderbuffer_storage; + _mesa_add_renderbuffer(fb, BUFFER_DEPTH, rb); + + return GL_TRUE; +} + + +/** + * Add a software-based stencil renderbuffer to the given framebuffer. + * This is a helper routine for device drivers when creating a + * window system framebuffer (not a user-created render/framebuffer). + * Once this function is called, you can basically forget about this + * renderbuffer; core Mesa will handle all the buffer management and + * rendering! + */ +GLboolean +_mesa_add_stencil_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint stencilBits) +{ + struct gl_renderbuffer *rb; + + if (stencilBits > 16) { + _mesa_problem(ctx, + "Unsupported stencilBits in _mesa_add_stencil_renderbuffer"); + return GL_FALSE; + } + + assert(fb->Attachment[BUFFER_STENCIL].Renderbuffer == NULL); + + rb = _mesa_new_renderbuffer(ctx, 0); + if (!rb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating stencil buffer"); + return GL_FALSE; + } + + if (stencilBits <= 8) { + rb->_ActualFormat = GL_STENCIL_INDEX8_EXT; + } + else { + /* not really supported (see s_stencil.c code) */ + rb->_ActualFormat = GL_STENCIL_INDEX16_EXT; + } + rb->InternalFormat = rb->_ActualFormat; + + rb->AllocStorage = _mesa_soft_renderbuffer_storage; + _mesa_add_renderbuffer(fb, BUFFER_STENCIL, rb); + + return GL_TRUE; +} + + +/** + * Add a software-based accumulation renderbuffer to the given framebuffer. + * This is a helper routine for device drivers when creating a + * window system framebuffer (not a user-created render/framebuffer). + * Once this function is called, you can basically forget about this + * renderbuffer; core Mesa will handle all the buffer management and + * rendering! + */ +GLboolean +_mesa_add_accum_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint redBits, GLuint greenBits, + GLuint blueBits, GLuint alphaBits) +{ + struct gl_renderbuffer *rb; + + if (redBits > 16 || greenBits > 16 || blueBits > 16 || alphaBits > 16) { + _mesa_problem(ctx, + "Unsupported accumBits in _mesa_add_accum_renderbuffer"); + return GL_FALSE; + } + + assert(fb->Attachment[BUFFER_ACCUM].Renderbuffer == NULL); + + rb = _mesa_new_renderbuffer(ctx, 0); + if (!rb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating accum buffer"); + return GL_FALSE; + } + + rb->_ActualFormat = GL_RGBA16; + rb->InternalFormat = GL_RGBA16; + rb->AllocStorage = _mesa_soft_renderbuffer_storage; + _mesa_add_renderbuffer(fb, BUFFER_ACCUM, rb); + + return GL_TRUE; +} + + + +/** + * Add a software-based accumulation renderbuffer to the given framebuffer. + * This is a helper routine for device drivers when creating a + * window system framebuffer (not a user-created render/framebuffer). + * Once this function is called, you can basically forget about this + * renderbuffer; core Mesa will handle all the buffer management and + * rendering! + * + * NOTE: color-index aux buffers not supported. + */ +GLboolean +_mesa_add_aux_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint colorBits, GLuint numBuffers) +{ + GLuint i; + + if (colorBits > 16) { + _mesa_problem(ctx, + "Unsupported accumBits in _mesa_add_aux_renderbuffers"); + return GL_FALSE; + } + + assert(numBuffers < MAX_AUX_BUFFERS); + + for (i = 0; i < numBuffers; i++) { + struct gl_renderbuffer *rb = _mesa_new_renderbuffer(ctx, 0); + + assert(fb->Attachment[BUFFER_AUX0 + i].Renderbuffer == NULL); + + if (!rb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating accum buffer"); + return GL_FALSE; + } + + if (colorBits <= 8) { + rb->_ActualFormat = GL_RGBA8; + } + else { + rb->_ActualFormat = GL_RGBA16; + } + rb->InternalFormat = rb->_ActualFormat; + + rb->AllocStorage = _mesa_soft_renderbuffer_storage; + _mesa_add_renderbuffer(fb, BUFFER_AUX0 + i, rb); + } + return GL_TRUE; +} + + +/** + * Create/attach software-based renderbuffers to the given framebuffer. + * This is a helper routine for device drivers. Drivers can just as well + * call the individual _mesa_add_*_renderbuffer() routines directly. + */ +void +_mesa_add_soft_renderbuffers(struct gl_framebuffer *fb, + GLboolean color, + GLboolean depth, + GLboolean stencil, + GLboolean accum, + GLboolean alpha, + GLboolean aux) +{ + GLboolean frontLeft = GL_TRUE; + GLboolean backLeft = fb->Visual.doubleBufferMode; + GLboolean frontRight = fb->Visual.stereoMode; + GLboolean backRight = fb->Visual.stereoMode && fb->Visual.doubleBufferMode; + + if (color) { + if (fb->Visual.rgbMode) { + assert(fb->Visual.redBits == fb->Visual.greenBits); + assert(fb->Visual.redBits == fb->Visual.blueBits); + _mesa_add_color_renderbuffers(NULL, fb, + fb->Visual.redBits, + fb->Visual.alphaBits, + frontLeft, backLeft, + frontRight, backRight); + } + else { + _mesa_add_color_index_renderbuffers(NULL, fb, + fb->Visual.indexBits, + frontLeft, backLeft, + frontRight, backRight); + } + } + + if (depth) { + assert(fb->Visual.depthBits > 0); + _mesa_add_depth_renderbuffer(NULL, fb, fb->Visual.depthBits); + } + + if (stencil) { + assert(fb->Visual.stencilBits > 0); + _mesa_add_stencil_renderbuffer(NULL, fb, fb->Visual.stencilBits); + } + + if (accum) { + assert(fb->Visual.rgbMode); + assert(fb->Visual.accumRedBits > 0); + assert(fb->Visual.accumGreenBits > 0); + assert(fb->Visual.accumBlueBits > 0); + _mesa_add_accum_renderbuffer(NULL, fb, + fb->Visual.accumRedBits, + fb->Visual.accumGreenBits, + fb->Visual.accumBlueBits, + fb->Visual.accumAlphaBits); + } + + if (aux) { + assert(fb->Visual.rgbMode); + assert(fb->Visual.numAuxBuffers > 0); + _mesa_add_aux_renderbuffers(NULL, fb, fb->Visual.redBits, + fb->Visual.numAuxBuffers); + } + + if (alpha) { + assert(fb->Visual.rgbMode); + assert(fb->Visual.alphaBits > 0); + _mesa_add_alpha_renderbuffers(NULL, fb, fb->Visual.alphaBits, + frontLeft, backLeft, + frontRight, backRight); + } + +#if 0 + if (multisample) { + /* maybe someday */ + } +#endif +} + + +/** + * Attach a renderbuffer to a framebuffer. + */ +void +_mesa_add_renderbuffer(struct gl_framebuffer *fb, + GLuint bufferName, struct gl_renderbuffer *rb) +{ + assert(fb); + assert(rb); + assert(bufferName < BUFFER_COUNT); + + /* There should be no previous renderbuffer on this attachment point, + * with the exception of depth/stencil since the same renderbuffer may + * be used for both. + */ + assert(bufferName == BUFFER_DEPTH || + bufferName == BUFFER_STENCIL || + fb->Attachment[bufferName].Renderbuffer == NULL); + + /* winsys vs. user-created buffer cross check */ + if (fb->Name) { + assert(rb->Name); + } + else { + assert(!rb->Name); + } + + /* If Mesa's compiled with deep color channels (16 or 32 bits / channel) + * and the device driver is expecting 8-bit values (GLubyte), we can + * use a "renderbuffer adaptor/wrapper" to do the necessary conversions. + */ + if (rb->_BaseFormat == GL_RGBA) { + if (CHAN_BITS == 16 && rb->DataType == GL_UNSIGNED_BYTE) { + GET_CURRENT_CONTEXT(ctx); + rb = _mesa_new_renderbuffer_16wrap8(ctx, rb); + } + else if (CHAN_BITS == 32 && rb->DataType == GL_UNSIGNED_BYTE) { + GET_CURRENT_CONTEXT(ctx); + rb = _mesa_new_renderbuffer_32wrap8(ctx, rb); + } + else if (CHAN_BITS == 32 && rb->DataType == GL_UNSIGNED_SHORT) { + GET_CURRENT_CONTEXT(ctx); + rb = _mesa_new_renderbuffer_32wrap16(ctx, rb); + } + } + + fb->Attachment[bufferName].Type = GL_RENDERBUFFER_EXT; + fb->Attachment[bufferName].Complete = GL_TRUE; + fb->Attachment[bufferName].Renderbuffer = rb; + + rb->RefCount++; +} + + +/** + * Remove the named renderbuffer from the given framebuffer. + */ +void +_mesa_remove_renderbuffer(struct gl_framebuffer *fb, GLuint bufferName) +{ + struct gl_renderbuffer *rb; + + assert(bufferName < BUFFER_COUNT); + + rb = fb->Attachment[bufferName].Renderbuffer; + if (!rb) + return; + + _mesa_dereference_renderbuffer(&rb); + + fb->Attachment[bufferName].Renderbuffer = NULL; +} + + +/** + * Decrement the reference count on a renderbuffer and delete it when + * the refcount hits zero. + * Note: we pass the address of a pointer and set it to NULL if we delete it. + */ +void +_mesa_dereference_renderbuffer(struct gl_renderbuffer **rb) +{ + GLboolean deleteFlag = GL_FALSE; + + _glthread_LOCK_MUTEX((*rb)->Mutex); + { + ASSERT((*rb)->RefCount > 0); + (*rb)->RefCount--; + deleteFlag = ((*rb)->RefCount == 0); + } + _glthread_UNLOCK_MUTEX((*rb)->Mutex); + + if (deleteFlag) { + (*rb)->Delete(*rb); + *rb = NULL; + } +} + + + + +/** + * Create a new combined depth/stencil renderbuffer for implementing + * the GL_EXT_packed_depth_stencil extension. + * \return new depth/stencil renderbuffer + */ +struct gl_renderbuffer * +_mesa_new_depthstencil_renderbuffer(GLcontext *ctx, GLuint name) +{ + struct gl_renderbuffer *dsrb; + + dsrb = _mesa_new_renderbuffer(ctx, name); + if (!dsrb) + return NULL; + + /* init fields not covered by _mesa_new_renderbuffer() */ + dsrb->InternalFormat = GL_DEPTH24_STENCIL8_EXT; + dsrb->_ActualFormat = GL_DEPTH24_STENCIL8_EXT; + dsrb->AllocStorage = _mesa_soft_renderbuffer_storage; + + return dsrb; +} + diff --git a/src/kits/opengl/mesa/main/renderbuffer.h b/src/kits/opengl/mesa/main/renderbuffer.h new file mode 100644 index 0000000000..74ca43c57a --- /dev/null +++ b/src/kits/opengl/mesa/main/renderbuffer.h @@ -0,0 +1,108 @@ +/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef RENDERBUFFER_H +#define RENDERBUFFER_H + + +extern void +_mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name); + +extern struct gl_renderbuffer * +_mesa_new_renderbuffer(GLcontext *ctx, GLuint name); + +extern void +_mesa_delete_renderbuffer(struct gl_renderbuffer *rb); + + +extern struct gl_renderbuffer * +_mesa_new_soft_renderbuffer(GLcontext *ctx, GLuint name); + + +extern GLboolean +_mesa_soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, + GLuint width, GLuint height); + +extern GLboolean +_mesa_add_color_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint rgbBits, GLuint alphaBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight); + +extern GLboolean +_mesa_add_color_index_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint indexBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight); + +extern GLboolean +_mesa_add_alpha_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint alphaBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight); + +extern GLboolean +_mesa_add_depth_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint depthBits); + +extern GLboolean +_mesa_add_stencil_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint stencilBits); + + +extern GLboolean +_mesa_add_accum_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint redBits, GLuint greenBits, + GLuint blueBits, GLuint alphaBits); + +extern GLboolean +_mesa_add_aux_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb, + GLuint bits, GLuint numBuffers); + +extern void +_mesa_add_soft_renderbuffers(struct gl_framebuffer *fb, + GLboolean color, + GLboolean depth, + GLboolean stencil, + GLboolean accum, + GLboolean alpha, + GLboolean aux); + +extern void +_mesa_add_renderbuffer(struct gl_framebuffer *fb, + GLuint bufferName, struct gl_renderbuffer *rb); + +extern void +_mesa_remove_renderbuffer(struct gl_framebuffer *fb, GLuint bufferName); + +extern void +_mesa_dereference_renderbuffer(struct gl_renderbuffer **rb); + +extern struct gl_renderbuffer * +_mesa_new_depthstencil_renderbuffer(GLcontext *ctx, GLuint name); + + +#endif /* RENDERBUFFER_H */ diff --git a/src/kits/opengl/mesa/main/state.c b/src/kits/opengl/mesa/main/state.c index 64bb02cf01..e62fbe47d1 100644 --- a/src/kits/opengl/mesa/main/state.c +++ b/src/kits/opengl/mesa/main/state.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -45,6 +45,7 @@ #if FEATURE_ARB_vertex_buffer_object #include "bufferobj.h" #endif +#include "arrayobj.h" #include "buffers.h" #include "clip.h" #include "colortab.h" @@ -58,6 +59,10 @@ #include "get.h" #include "feedback.h" #include "fog.h" +#if FEATURE_EXT_framebuffer_object +#include "fbobject.h" +#endif +#include "framebuffer.h" #include "hint.h" #include "histogram.h" #include "imports.h" @@ -65,7 +70,7 @@ #include "lines.h" #include "macros.h" #include "matrix.h" -#if FEATURE_ARB_occlusion_query +#if FEATURE_ARB_occlusion_query || FEATURE_EXT_timer_query #include "occlude.h" #endif #include "pixel.h" @@ -83,14 +88,15 @@ #include "nvprogram.h" #endif #if FEATURE_NV_fragment_program -#include "nvfragprog.h" #include "nvprogram.h" #include "program.h" +#include "texenvprogram.h" #endif #if FEATURE_ARB_shader_objects #include "shaderobjects.h" #endif #include "debug.h" +#include "dispatch.h" @@ -101,8 +107,8 @@ * Pointers to glBegin()/glEnd() object commands and a few others * are provided via the GLvertexformat interface. * + * \param ctx GL context to which \c exec belongs. * \param exec dispatch table. - * \param tableSize dispatch table size. */ void _mesa_init_exec_table(struct _glapi_table *exec) @@ -112,494 +118,498 @@ _mesa_init_exec_table(struct _glapi_table *exec) #endif /* load the dispatch slots we understand */ - exec->AlphaFunc = _mesa_AlphaFunc; - exec->BlendFunc = _mesa_BlendFunc; - exec->Clear = _mesa_Clear; - exec->ClearColor = _mesa_ClearColor; - exec->ClearStencil = _mesa_ClearStencil; - exec->ColorMask = _mesa_ColorMask; - exec->CullFace = _mesa_CullFace; - exec->Disable = _mesa_Disable; - exec->DrawBuffer = _mesa_DrawBuffer; - exec->Enable = _mesa_Enable; - exec->Finish = _mesa_Finish; - exec->Flush = _mesa_Flush; - exec->FrontFace = _mesa_FrontFace; - exec->Frustum = _mesa_Frustum; - exec->GetError = _mesa_GetError; - exec->GetFloatv = _mesa_GetFloatv; - exec->GetString = _mesa_GetString; - exec->InitNames = _mesa_InitNames; - exec->LineStipple = _mesa_LineStipple; - exec->LineWidth = _mesa_LineWidth; - exec->LoadIdentity = _mesa_LoadIdentity; - exec->LoadMatrixf = _mesa_LoadMatrixf; - exec->LoadName = _mesa_LoadName; - exec->LogicOp = _mesa_LogicOp; - exec->MatrixMode = _mesa_MatrixMode; - exec->MultMatrixf = _mesa_MultMatrixf; - exec->Ortho = _mesa_Ortho; - exec->PixelStorei = _mesa_PixelStorei; - exec->PopMatrix = _mesa_PopMatrix; - exec->PopName = _mesa_PopName; - exec->PushMatrix = _mesa_PushMatrix; - exec->PushName = _mesa_PushName; - exec->RasterPos2f = _mesa_RasterPos2f; - exec->RasterPos2fv = _mesa_RasterPos2fv; - exec->RasterPos2i = _mesa_RasterPos2i; - exec->RasterPos2iv = _mesa_RasterPos2iv; - exec->ReadBuffer = _mesa_ReadBuffer; - exec->RenderMode = _mesa_RenderMode; - exec->Rotatef = _mesa_Rotatef; - exec->Scalef = _mesa_Scalef; - exec->Scissor = _mesa_Scissor; - exec->SelectBuffer = _mesa_SelectBuffer; - exec->ShadeModel = _mesa_ShadeModel; - exec->StencilFunc = _mesa_StencilFunc; - exec->StencilMask = _mesa_StencilMask; - exec->StencilOp = _mesa_StencilOp; - exec->TexEnvfv = _mesa_TexEnvfv; - exec->TexEnvi = _mesa_TexEnvi; - exec->TexImage2D = _mesa_TexImage2D; - exec->TexParameteri = _mesa_TexParameteri; - exec->Translatef = _mesa_Translatef; - exec->Viewport = _mesa_Viewport; + SET_AlphaFunc(exec, _mesa_AlphaFunc); + SET_BlendFunc(exec, _mesa_BlendFunc); + SET_Clear(exec, _mesa_Clear); + SET_ClearColor(exec, _mesa_ClearColor); + SET_ClearStencil(exec, _mesa_ClearStencil); + SET_ColorMask(exec, _mesa_ColorMask); + SET_CullFace(exec, _mesa_CullFace); + SET_Disable(exec, _mesa_Disable); + SET_DrawBuffer(exec, _mesa_DrawBuffer); + SET_Enable(exec, _mesa_Enable); + SET_Finish(exec, _mesa_Finish); + SET_Flush(exec, _mesa_Flush); + SET_FrontFace(exec, _mesa_FrontFace); + SET_Frustum(exec, _mesa_Frustum); + SET_GetError(exec, _mesa_GetError); + SET_GetFloatv(exec, _mesa_GetFloatv); + SET_GetString(exec, _mesa_GetString); + SET_InitNames(exec, _mesa_InitNames); + SET_LineStipple(exec, _mesa_LineStipple); + SET_LineWidth(exec, _mesa_LineWidth); + SET_LoadIdentity(exec, _mesa_LoadIdentity); + SET_LoadMatrixf(exec, _mesa_LoadMatrixf); + SET_LoadName(exec, _mesa_LoadName); + SET_LogicOp(exec, _mesa_LogicOp); + SET_MatrixMode(exec, _mesa_MatrixMode); + SET_MultMatrixf(exec, _mesa_MultMatrixf); + SET_Ortho(exec, _mesa_Ortho); + SET_PixelStorei(exec, _mesa_PixelStorei); + SET_PopMatrix(exec, _mesa_PopMatrix); + SET_PopName(exec, _mesa_PopName); + SET_PushMatrix(exec, _mesa_PushMatrix); + SET_PushName(exec, _mesa_PushName); + SET_RasterPos2f(exec, _mesa_RasterPos2f); + SET_RasterPos2fv(exec, _mesa_RasterPos2fv); + SET_RasterPos2i(exec, _mesa_RasterPos2i); + SET_RasterPos2iv(exec, _mesa_RasterPos2iv); + SET_ReadBuffer(exec, _mesa_ReadBuffer); + SET_RenderMode(exec, _mesa_RenderMode); + SET_Rotatef(exec, _mesa_Rotatef); + SET_Scalef(exec, _mesa_Scalef); + SET_Scissor(exec, _mesa_Scissor); + SET_SelectBuffer(exec, _mesa_SelectBuffer); + SET_ShadeModel(exec, _mesa_ShadeModel); + SET_StencilFunc(exec, _mesa_StencilFunc); + SET_StencilMask(exec, _mesa_StencilMask); + SET_StencilOp(exec, _mesa_StencilOp); + SET_TexEnvfv(exec, _mesa_TexEnvfv); + SET_TexEnvi(exec, _mesa_TexEnvi); + SET_TexImage2D(exec, _mesa_TexImage2D); + SET_TexParameteri(exec, _mesa_TexParameteri); + SET_Translatef(exec, _mesa_Translatef); + SET_Viewport(exec, _mesa_Viewport); #if _HAVE_FULL_GL - exec->Accum = _mesa_Accum; - exec->Bitmap = _mesa_Bitmap; - exec->CallList = _mesa_CallList; - exec->CallLists = _mesa_CallLists; - exec->ClearAccum = _mesa_ClearAccum; - exec->ClearDepth = _mesa_ClearDepth; - exec->ClearIndex = _mesa_ClearIndex; - exec->ClipPlane = _mesa_ClipPlane; - exec->ColorMaterial = _mesa_ColorMaterial; - exec->CopyPixels = _mesa_CopyPixels; - exec->CullParameterfvEXT = _mesa_CullParameterfvEXT; - exec->CullParameterdvEXT = _mesa_CullParameterdvEXT; - exec->DeleteLists = _mesa_DeleteLists; - exec->DepthFunc = _mesa_DepthFunc; - exec->DepthMask = _mesa_DepthMask; - exec->DepthRange = _mesa_DepthRange; - exec->DrawPixels = _mesa_DrawPixels; - exec->EndList = _mesa_EndList; - exec->FeedbackBuffer = _mesa_FeedbackBuffer; - exec->FogCoordPointerEXT = _mesa_FogCoordPointerEXT; - exec->Fogf = _mesa_Fogf; - exec->Fogfv = _mesa_Fogfv; - exec->Fogi = _mesa_Fogi; - exec->Fogiv = _mesa_Fogiv; - exec->GenLists = _mesa_GenLists; - exec->GetClipPlane = _mesa_GetClipPlane; - exec->GetBooleanv = _mesa_GetBooleanv; - exec->GetDoublev = _mesa_GetDoublev; - exec->GetIntegerv = _mesa_GetIntegerv; - exec->GetLightfv = _mesa_GetLightfv; - exec->GetLightiv = _mesa_GetLightiv; - exec->GetMapdv = _mesa_GetMapdv; - exec->GetMapfv = _mesa_GetMapfv; - exec->GetMapiv = _mesa_GetMapiv; - exec->GetMaterialfv = _mesa_GetMaterialfv; - exec->GetMaterialiv = _mesa_GetMaterialiv; - exec->GetPixelMapfv = _mesa_GetPixelMapfv; - exec->GetPixelMapuiv = _mesa_GetPixelMapuiv; - exec->GetPixelMapusv = _mesa_GetPixelMapusv; - exec->GetPolygonStipple = _mesa_GetPolygonStipple; - exec->GetTexEnvfv = _mesa_GetTexEnvfv; - exec->GetTexEnviv = _mesa_GetTexEnviv; - exec->GetTexLevelParameterfv = _mesa_GetTexLevelParameterfv; - exec->GetTexLevelParameteriv = _mesa_GetTexLevelParameteriv; - exec->GetTexParameterfv = _mesa_GetTexParameterfv; - exec->GetTexParameteriv = _mesa_GetTexParameteriv; - exec->GetTexGendv = _mesa_GetTexGendv; - exec->GetTexGenfv = _mesa_GetTexGenfv; - exec->GetTexGeniv = _mesa_GetTexGeniv; - exec->GetTexImage = _mesa_GetTexImage; - exec->Hint = _mesa_Hint; - exec->IndexMask = _mesa_IndexMask; - exec->IsEnabled = _mesa_IsEnabled; - exec->IsList = _mesa_IsList; - exec->LightModelf = _mesa_LightModelf; - exec->LightModelfv = _mesa_LightModelfv; - exec->LightModeli = _mesa_LightModeli; - exec->LightModeliv = _mesa_LightModeliv; - exec->Lightf = _mesa_Lightf; - exec->Lightfv = _mesa_Lightfv; - exec->Lighti = _mesa_Lighti; - exec->Lightiv = _mesa_Lightiv; - exec->ListBase = _mesa_ListBase; - exec->LoadMatrixd = _mesa_LoadMatrixd; - exec->Map1d = _mesa_Map1d; - exec->Map1f = _mesa_Map1f; - exec->Map2d = _mesa_Map2d; - exec->Map2f = _mesa_Map2f; - exec->MapGrid1d = _mesa_MapGrid1d; - exec->MapGrid1f = _mesa_MapGrid1f; - exec->MapGrid2d = _mesa_MapGrid2d; - exec->MapGrid2f = _mesa_MapGrid2f; - exec->MultMatrixd = _mesa_MultMatrixd; - exec->NewList = _mesa_NewList; - exec->PassThrough = _mesa_PassThrough; - exec->PixelMapfv = _mesa_PixelMapfv; - exec->PixelMapuiv = _mesa_PixelMapuiv; - exec->PixelMapusv = _mesa_PixelMapusv; - exec->PixelStoref = _mesa_PixelStoref; - exec->PixelTransferf = _mesa_PixelTransferf; - exec->PixelTransferi = _mesa_PixelTransferi; - exec->PixelZoom = _mesa_PixelZoom; - exec->PointSize = _mesa_PointSize; - exec->PolygonMode = _mesa_PolygonMode; - exec->PolygonOffset = _mesa_PolygonOffset; - exec->PolygonStipple = _mesa_PolygonStipple; - exec->PopAttrib = _mesa_PopAttrib; - exec->PushAttrib = _mesa_PushAttrib; - exec->RasterPos2d = _mesa_RasterPos2d; - exec->RasterPos2dv = _mesa_RasterPos2dv; - exec->RasterPos2s = _mesa_RasterPos2s; - exec->RasterPos2sv = _mesa_RasterPos2sv; - exec->RasterPos3d = _mesa_RasterPos3d; - exec->RasterPos3dv = _mesa_RasterPos3dv; - exec->RasterPos3f = _mesa_RasterPos3f; - exec->RasterPos3fv = _mesa_RasterPos3fv; - exec->RasterPos3i = _mesa_RasterPos3i; - exec->RasterPos3iv = _mesa_RasterPos3iv; - exec->RasterPos3s = _mesa_RasterPos3s; - exec->RasterPos3sv = _mesa_RasterPos3sv; - exec->RasterPos4d = _mesa_RasterPos4d; - exec->RasterPos4dv = _mesa_RasterPos4dv; - exec->RasterPos4f = _mesa_RasterPos4f; - exec->RasterPos4fv = _mesa_RasterPos4fv; - exec->RasterPos4i = _mesa_RasterPos4i; - exec->RasterPos4iv = _mesa_RasterPos4iv; - exec->RasterPos4s = _mesa_RasterPos4s; - exec->RasterPos4sv = _mesa_RasterPos4sv; - exec->ReadPixels = _mesa_ReadPixels; - exec->Rotated = _mesa_Rotated; - exec->Scaled = _mesa_Scaled; - exec->SecondaryColorPointerEXT = _mesa_SecondaryColorPointerEXT; - exec->TexEnvf = _mesa_TexEnvf; - exec->TexEnviv = _mesa_TexEnviv; - exec->TexGend = _mesa_TexGend; - exec->TexGendv = _mesa_TexGendv; - exec->TexGenf = _mesa_TexGenf; - exec->TexGenfv = _mesa_TexGenfv; - exec->TexGeni = _mesa_TexGeni; - exec->TexGeniv = _mesa_TexGeniv; - exec->TexImage1D = _mesa_TexImage1D; - exec->TexParameterf = _mesa_TexParameterf; - exec->TexParameterfv = _mesa_TexParameterfv; - exec->TexParameteriv = _mesa_TexParameteriv; - exec->Translated = _mesa_Translated; + SET_Accum(exec, _mesa_Accum); + SET_Bitmap(exec, _mesa_Bitmap); + SET_CallList(exec, _mesa_CallList); + SET_CallLists(exec, _mesa_CallLists); + SET_ClearAccum(exec, _mesa_ClearAccum); + SET_ClearDepth(exec, _mesa_ClearDepth); + SET_ClearIndex(exec, _mesa_ClearIndex); + SET_ClipPlane(exec, _mesa_ClipPlane); + SET_ColorMaterial(exec, _mesa_ColorMaterial); + SET_CopyPixels(exec, _mesa_CopyPixels); + SET_CullParameterfvEXT(exec, _mesa_CullParameterfvEXT); + SET_CullParameterdvEXT(exec, _mesa_CullParameterdvEXT); + SET_DeleteLists(exec, _mesa_DeleteLists); + SET_DepthFunc(exec, _mesa_DepthFunc); + SET_DepthMask(exec, _mesa_DepthMask); + SET_DepthRange(exec, _mesa_DepthRange); + SET_DrawPixels(exec, _mesa_DrawPixels); + SET_EndList(exec, _mesa_EndList); + SET_FeedbackBuffer(exec, _mesa_FeedbackBuffer); + SET_FogCoordPointerEXT(exec, _mesa_FogCoordPointerEXT); + SET_Fogf(exec, _mesa_Fogf); + SET_Fogfv(exec, _mesa_Fogfv); + SET_Fogi(exec, _mesa_Fogi); + SET_Fogiv(exec, _mesa_Fogiv); + SET_GenLists(exec, _mesa_GenLists); + SET_GetClipPlane(exec, _mesa_GetClipPlane); + SET_GetBooleanv(exec, _mesa_GetBooleanv); + SET_GetDoublev(exec, _mesa_GetDoublev); + SET_GetIntegerv(exec, _mesa_GetIntegerv); + SET_GetLightfv(exec, _mesa_GetLightfv); + SET_GetLightiv(exec, _mesa_GetLightiv); + SET_GetMapdv(exec, _mesa_GetMapdv); + SET_GetMapfv(exec, _mesa_GetMapfv); + SET_GetMapiv(exec, _mesa_GetMapiv); + SET_GetMaterialfv(exec, _mesa_GetMaterialfv); + SET_GetMaterialiv(exec, _mesa_GetMaterialiv); + SET_GetPixelMapfv(exec, _mesa_GetPixelMapfv); + SET_GetPixelMapuiv(exec, _mesa_GetPixelMapuiv); + SET_GetPixelMapusv(exec, _mesa_GetPixelMapusv); + SET_GetPolygonStipple(exec, _mesa_GetPolygonStipple); + SET_GetTexEnvfv(exec, _mesa_GetTexEnvfv); + SET_GetTexEnviv(exec, _mesa_GetTexEnviv); + SET_GetTexLevelParameterfv(exec, _mesa_GetTexLevelParameterfv); + SET_GetTexLevelParameteriv(exec, _mesa_GetTexLevelParameteriv); + SET_GetTexParameterfv(exec, _mesa_GetTexParameterfv); + SET_GetTexParameteriv(exec, _mesa_GetTexParameteriv); + SET_GetTexGendv(exec, _mesa_GetTexGendv); + SET_GetTexGenfv(exec, _mesa_GetTexGenfv); + SET_GetTexGeniv(exec, _mesa_GetTexGeniv); + SET_GetTexImage(exec, _mesa_GetTexImage); + SET_Hint(exec, _mesa_Hint); + SET_IndexMask(exec, _mesa_IndexMask); + SET_IsEnabled(exec, _mesa_IsEnabled); + SET_IsList(exec, _mesa_IsList); + SET_LightModelf(exec, _mesa_LightModelf); + SET_LightModelfv(exec, _mesa_LightModelfv); + SET_LightModeli(exec, _mesa_LightModeli); + SET_LightModeliv(exec, _mesa_LightModeliv); + SET_Lightf(exec, _mesa_Lightf); + SET_Lightfv(exec, _mesa_Lightfv); + SET_Lighti(exec, _mesa_Lighti); + SET_Lightiv(exec, _mesa_Lightiv); + SET_ListBase(exec, _mesa_ListBase); + SET_LoadMatrixd(exec, _mesa_LoadMatrixd); + SET_Map1d(exec, _mesa_Map1d); + SET_Map1f(exec, _mesa_Map1f); + SET_Map2d(exec, _mesa_Map2d); + SET_Map2f(exec, _mesa_Map2f); + SET_MapGrid1d(exec, _mesa_MapGrid1d); + SET_MapGrid1f(exec, _mesa_MapGrid1f); + SET_MapGrid2d(exec, _mesa_MapGrid2d); + SET_MapGrid2f(exec, _mesa_MapGrid2f); + SET_MultMatrixd(exec, _mesa_MultMatrixd); + SET_NewList(exec, _mesa_NewList); + SET_PassThrough(exec, _mesa_PassThrough); + SET_PixelMapfv(exec, _mesa_PixelMapfv); + SET_PixelMapuiv(exec, _mesa_PixelMapuiv); + SET_PixelMapusv(exec, _mesa_PixelMapusv); + SET_PixelStoref(exec, _mesa_PixelStoref); + SET_PixelTransferf(exec, _mesa_PixelTransferf); + SET_PixelTransferi(exec, _mesa_PixelTransferi); + SET_PixelZoom(exec, _mesa_PixelZoom); + SET_PointSize(exec, _mesa_PointSize); + SET_PolygonMode(exec, _mesa_PolygonMode); + SET_PolygonOffset(exec, _mesa_PolygonOffset); + SET_PolygonStipple(exec, _mesa_PolygonStipple); + SET_PopAttrib(exec, _mesa_PopAttrib); + SET_PushAttrib(exec, _mesa_PushAttrib); + SET_RasterPos2d(exec, _mesa_RasterPos2d); + SET_RasterPos2dv(exec, _mesa_RasterPos2dv); + SET_RasterPos2s(exec, _mesa_RasterPos2s); + SET_RasterPos2sv(exec, _mesa_RasterPos2sv); + SET_RasterPos3d(exec, _mesa_RasterPos3d); + SET_RasterPos3dv(exec, _mesa_RasterPos3dv); + SET_RasterPos3f(exec, _mesa_RasterPos3f); + SET_RasterPos3fv(exec, _mesa_RasterPos3fv); + SET_RasterPos3i(exec, _mesa_RasterPos3i); + SET_RasterPos3iv(exec, _mesa_RasterPos3iv); + SET_RasterPos3s(exec, _mesa_RasterPos3s); + SET_RasterPos3sv(exec, _mesa_RasterPos3sv); + SET_RasterPos4d(exec, _mesa_RasterPos4d); + SET_RasterPos4dv(exec, _mesa_RasterPos4dv); + SET_RasterPos4f(exec, _mesa_RasterPos4f); + SET_RasterPos4fv(exec, _mesa_RasterPos4fv); + SET_RasterPos4i(exec, _mesa_RasterPos4i); + SET_RasterPos4iv(exec, _mesa_RasterPos4iv); + SET_RasterPos4s(exec, _mesa_RasterPos4s); + SET_RasterPos4sv(exec, _mesa_RasterPos4sv); + SET_ReadPixels(exec, _mesa_ReadPixels); + SET_Rotated(exec, _mesa_Rotated); + SET_Scaled(exec, _mesa_Scaled); + SET_SecondaryColorPointerEXT(exec, _mesa_SecondaryColorPointerEXT); + SET_TexEnvf(exec, _mesa_TexEnvf); + SET_TexEnviv(exec, _mesa_TexEnviv); + SET_TexGend(exec, _mesa_TexGend); + SET_TexGendv(exec, _mesa_TexGendv); + SET_TexGenf(exec, _mesa_TexGenf); + SET_TexGenfv(exec, _mesa_TexGenfv); + SET_TexGeni(exec, _mesa_TexGeni); + SET_TexGeniv(exec, _mesa_TexGeniv); + SET_TexImage1D(exec, _mesa_TexImage1D); + SET_TexParameterf(exec, _mesa_TexParameterf); + SET_TexParameterfv(exec, _mesa_TexParameterfv); + SET_TexParameteriv(exec, _mesa_TexParameteriv); + SET_Translated(exec, _mesa_Translated); #endif /* 1.1 */ - exec->BindTexture = _mesa_BindTexture; - exec->DeleteTextures = _mesa_DeleteTextures; - exec->GenTextures = _mesa_GenTextures; + SET_BindTexture(exec, _mesa_BindTexture); + SET_DeleteTextures(exec, _mesa_DeleteTextures); + SET_GenTextures(exec, _mesa_GenTextures); #if _HAVE_FULL_GL - exec->AreTexturesResident = _mesa_AreTexturesResident; - exec->AreTexturesResidentEXT = _mesa_AreTexturesResident; - exec->ColorPointer = _mesa_ColorPointer; - exec->CopyTexImage1D = _mesa_CopyTexImage1D; - exec->CopyTexImage2D = _mesa_CopyTexImage2D; - exec->CopyTexSubImage1D = _mesa_CopyTexSubImage1D; - exec->CopyTexSubImage2D = _mesa_CopyTexSubImage2D; - exec->DisableClientState = _mesa_DisableClientState; - exec->EdgeFlagPointer = _mesa_EdgeFlagPointer; - exec->EnableClientState = _mesa_EnableClientState; - exec->GenTexturesEXT = _mesa_GenTextures; - exec->GetPointerv = _mesa_GetPointerv; - exec->IndexPointer = _mesa_IndexPointer; - exec->InterleavedArrays = _mesa_InterleavedArrays; - exec->IsTexture = _mesa_IsTexture; - exec->IsTextureEXT = _mesa_IsTexture; - exec->NormalPointer = _mesa_NormalPointer; - exec->PopClientAttrib = _mesa_PopClientAttrib; - exec->PrioritizeTextures = _mesa_PrioritizeTextures; - exec->PushClientAttrib = _mesa_PushClientAttrib; - exec->TexCoordPointer = _mesa_TexCoordPointer; - exec->TexSubImage1D = _mesa_TexSubImage1D; - exec->TexSubImage2D = _mesa_TexSubImage2D; - exec->VertexPointer = _mesa_VertexPointer; + SET_AreTexturesResident(exec, _mesa_AreTexturesResident); + SET_ColorPointer(exec, _mesa_ColorPointer); + SET_CopyTexImage1D(exec, _mesa_CopyTexImage1D); + SET_CopyTexImage2D(exec, _mesa_CopyTexImage2D); + SET_CopyTexSubImage1D(exec, _mesa_CopyTexSubImage1D); + SET_CopyTexSubImage2D(exec, _mesa_CopyTexSubImage2D); + SET_DisableClientState(exec, _mesa_DisableClientState); + SET_EdgeFlagPointer(exec, _mesa_EdgeFlagPointer); + SET_EnableClientState(exec, _mesa_EnableClientState); + SET_GetPointerv(exec, _mesa_GetPointerv); + SET_IndexPointer(exec, _mesa_IndexPointer); + SET_InterleavedArrays(exec, _mesa_InterleavedArrays); + SET_IsTexture(exec, _mesa_IsTexture); + SET_NormalPointer(exec, _mesa_NormalPointer); + SET_PopClientAttrib(exec, _mesa_PopClientAttrib); + SET_PrioritizeTextures(exec, _mesa_PrioritizeTextures); + SET_PushClientAttrib(exec, _mesa_PushClientAttrib); + SET_TexCoordPointer(exec, _mesa_TexCoordPointer); + SET_TexSubImage1D(exec, _mesa_TexSubImage1D); + SET_TexSubImage2D(exec, _mesa_TexSubImage2D); + SET_VertexPointer(exec, _mesa_VertexPointer); #endif /* 1.2 */ #if _HAVE_FULL_GL - exec->CopyTexSubImage3D = _mesa_CopyTexSubImage3D; - exec->TexImage3D = _mesa_TexImage3D; - exec->TexSubImage3D = _mesa_TexSubImage3D; + SET_CopyTexSubImage3D(exec, _mesa_CopyTexSubImage3D); + SET_TexImage3D(exec, _mesa_TexImage3D); + SET_TexSubImage3D(exec, _mesa_TexSubImage3D); #endif /* OpenGL 1.2 GL_ARB_imaging */ #if _HAVE_FULL_GL - exec->BlendColor = _mesa_BlendColor; - exec->BlendEquation = _mesa_BlendEquation; - exec->BlendEquationSeparateEXT = _mesa_BlendEquationSeparateEXT; - exec->ColorSubTable = _mesa_ColorSubTable; - exec->ColorTable = _mesa_ColorTable; - exec->ColorTableParameterfv = _mesa_ColorTableParameterfv; - exec->ColorTableParameteriv = _mesa_ColorTableParameteriv; - exec->ConvolutionFilter1D = _mesa_ConvolutionFilter1D; - exec->ConvolutionFilter2D = _mesa_ConvolutionFilter2D; - exec->ConvolutionParameterf = _mesa_ConvolutionParameterf; - exec->ConvolutionParameterfv = _mesa_ConvolutionParameterfv; - exec->ConvolutionParameteri = _mesa_ConvolutionParameteri; - exec->ConvolutionParameteriv = _mesa_ConvolutionParameteriv; - exec->CopyColorSubTable = _mesa_CopyColorSubTable; - exec->CopyColorTable = _mesa_CopyColorTable; - exec->CopyConvolutionFilter1D = _mesa_CopyConvolutionFilter1D; - exec->CopyConvolutionFilter2D = _mesa_CopyConvolutionFilter2D; - exec->GetColorTable = _mesa_GetColorTable; - exec->GetColorTableEXT = _mesa_GetColorTable; - exec->GetColorTableParameterfv = _mesa_GetColorTableParameterfv; - exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv; - exec->GetColorTableParameteriv = _mesa_GetColorTableParameteriv; - exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv; - exec->GetConvolutionFilter = _mesa_GetConvolutionFilter; - exec->GetConvolutionFilterEXT = _mesa_GetConvolutionFilter; - exec->GetConvolutionParameterfv = _mesa_GetConvolutionParameterfv; - exec->GetConvolutionParameterfvEXT = _mesa_GetConvolutionParameterfv; - exec->GetConvolutionParameteriv = _mesa_GetConvolutionParameteriv; - exec->GetConvolutionParameterivEXT = _mesa_GetConvolutionParameteriv; - exec->GetHistogram = _mesa_GetHistogram; - exec->GetHistogramEXT = _mesa_GetHistogram; - exec->GetHistogramParameterfv = _mesa_GetHistogramParameterfv; - exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv; - exec->GetHistogramParameteriv = _mesa_GetHistogramParameteriv; - exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv; - exec->GetMinmax = _mesa_GetMinmax; - exec->GetMinmaxEXT = _mesa_GetMinmax; - exec->GetMinmaxParameterfv = _mesa_GetMinmaxParameterfv; - exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv; - exec->GetMinmaxParameteriv = _mesa_GetMinmaxParameteriv; - exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv; - exec->GetSeparableFilter = _mesa_GetSeparableFilter; - exec->GetSeparableFilterEXT = _mesa_GetSeparableFilter; - exec->Histogram = _mesa_Histogram; - exec->Minmax = _mesa_Minmax; - exec->ResetHistogram = _mesa_ResetHistogram; - exec->ResetMinmax = _mesa_ResetMinmax; - exec->SeparableFilter2D = _mesa_SeparableFilter2D; + SET_BlendColor(exec, _mesa_BlendColor); + SET_BlendEquation(exec, _mesa_BlendEquation); + SET_BlendEquationSeparateEXT(exec, _mesa_BlendEquationSeparateEXT); + SET_ColorSubTable(exec, _mesa_ColorSubTable); + SET_ColorTable(exec, _mesa_ColorTable); + SET_ColorTableParameterfv(exec, _mesa_ColorTableParameterfv); + SET_ColorTableParameteriv(exec, _mesa_ColorTableParameteriv); + SET_ConvolutionFilter1D(exec, _mesa_ConvolutionFilter1D); + SET_ConvolutionFilter2D(exec, _mesa_ConvolutionFilter2D); + SET_ConvolutionParameterf(exec, _mesa_ConvolutionParameterf); + SET_ConvolutionParameterfv(exec, _mesa_ConvolutionParameterfv); + SET_ConvolutionParameteri(exec, _mesa_ConvolutionParameteri); + SET_ConvolutionParameteriv(exec, _mesa_ConvolutionParameteriv); + SET_CopyColorSubTable(exec, _mesa_CopyColorSubTable); + SET_CopyColorTable(exec, _mesa_CopyColorTable); + SET_CopyConvolutionFilter1D(exec, _mesa_CopyConvolutionFilter1D); + SET_CopyConvolutionFilter2D(exec, _mesa_CopyConvolutionFilter2D); + SET_GetColorTable(exec, _mesa_GetColorTable); + SET_GetColorTableParameterfv(exec, _mesa_GetColorTableParameterfv); + SET_GetColorTableParameteriv(exec, _mesa_GetColorTableParameteriv); + SET_GetConvolutionFilter(exec, _mesa_GetConvolutionFilter); + SET_GetConvolutionParameterfv(exec, _mesa_GetConvolutionParameterfv); + SET_GetConvolutionParameteriv(exec, _mesa_GetConvolutionParameteriv); + SET_GetHistogram(exec, _mesa_GetHistogram); + SET_GetHistogramParameterfv(exec, _mesa_GetHistogramParameterfv); + SET_GetHistogramParameteriv(exec, _mesa_GetHistogramParameteriv); + SET_GetMinmax(exec, _mesa_GetMinmax); + SET_GetMinmaxParameterfv(exec, _mesa_GetMinmaxParameterfv); + SET_GetMinmaxParameteriv(exec, _mesa_GetMinmaxParameteriv); + SET_GetSeparableFilter(exec, _mesa_GetSeparableFilter); + SET_Histogram(exec, _mesa_Histogram); + SET_Minmax(exec, _mesa_Minmax); + SET_ResetHistogram(exec, _mesa_ResetHistogram); + SET_ResetMinmax(exec, _mesa_ResetMinmax); + SET_SeparableFilter2D(exec, _mesa_SeparableFilter2D); #endif + /* OpenGL 2.0 */ + SET_StencilFuncSeparate(exec, _mesa_StencilFuncSeparate); + SET_StencilMaskSeparate(exec, _mesa_StencilMaskSeparate); + SET_StencilOpSeparate(exec, _mesa_StencilOpSeparate); +#if FEATURE_ARB_shader_objects + SET_AttachShader(exec, _mesa_AttachShader); + SET_CreateProgram(exec, _mesa_CreateProgram); + SET_CreateShader(exec, _mesa_CreateShader); + SET_DeleteProgram(exec, _mesa_DeleteProgram); + SET_DeleteShader(exec, _mesa_DeleteShader); + SET_DetachShader(exec, _mesa_DetachShader); + SET_GetAttachedShaders(exec, _mesa_GetAttachedShaders); + SET_GetProgramiv(exec, _mesa_GetProgramiv); + SET_GetProgramInfoLog(exec, _mesa_GetProgramInfoLog); + SET_GetShaderiv(exec, _mesa_GetShaderiv); + SET_GetShaderInfoLog(exec, _mesa_GetShaderInfoLog); + SET_IsProgram(exec, _mesa_IsProgram); + SET_IsShader(exec, _mesa_IsShader); +#endif + + /* OpenGL 2.1 */ +#if FEATURE_ARB_shader_objects + SET_UniformMatrix2x3fv(exec, _mesa_UniformMatrix2x3fv); + SET_UniformMatrix3x2fv(exec, _mesa_UniformMatrix3x2fv); + SET_UniformMatrix2x4fv(exec, _mesa_UniformMatrix2x4fv); + SET_UniformMatrix4x2fv(exec, _mesa_UniformMatrix4x2fv); + SET_UniformMatrix3x4fv(exec, _mesa_UniformMatrix3x4fv); + SET_UniformMatrix4x3fv(exec, _mesa_UniformMatrix4x3fv); +#endif + + /* 2. GL_EXT_blend_color */ #if 0 -/* exec->BlendColorEXT = _mesa_BlendColorEXT; */ +/* SET_BlendColorEXT(exec, _mesa_BlendColorEXT); */ #endif /* 3. GL_EXT_polygon_offset */ #if _HAVE_FULL_GL - exec->PolygonOffsetEXT = _mesa_PolygonOffsetEXT; + SET_PolygonOffsetEXT(exec, _mesa_PolygonOffsetEXT); #endif /* 6. GL_EXT_texture3d */ #if 0 -/* exec->CopyTexSubImage3DEXT = _mesa_CopyTexSubImage3D; */ -/* exec->TexImage3DEXT = _mesa_TexImage3DEXT; */ -/* exec->TexSubImage3DEXT = _mesa_TexSubImage3D; */ +/* SET_CopyTexSubImage3DEXT(exec, _mesa_CopyTexSubImage3D); */ +/* SET_TexImage3DEXT(exec, _mesa_TexImage3DEXT); */ +/* SET_TexSubImage3DEXT(exec, _mesa_TexSubImage3D); */ #endif /* 11. GL_EXT_histogram */ -#if _HAVE_FULL_GL - exec->GetHistogramEXT = _mesa_GetHistogram; - exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv; - exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv; - exec->GetMinmaxEXT = _mesa_GetMinmax; - exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv; - exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv; +#if 0 + SET_GetHistogramEXT(exec, _mesa_GetHistogram); + SET_GetHistogramParameterfvEXT(exec, _mesa_GetHistogramParameterfv); + SET_GetHistogramParameterivEXT(exec, _mesa_GetHistogramParameteriv); + SET_GetMinmaxEXT(exec, _mesa_GetMinmax); + SET_GetMinmaxParameterfvEXT(exec, _mesa_GetMinmaxParameterfv); + SET_GetMinmaxParameterivEXT(exec, _mesa_GetMinmaxParameteriv); #endif - /* ?. GL_SGIX_pixel_texture */ -#if _HAVE_FULL_GL - exec->PixelTexGenSGIX = _mesa_PixelTexGenSGIX; -#endif - - /* 15. GL_SGIS_pixel_texture */ -#if _HAVE_FULL_GL - exec->PixelTexGenParameteriSGIS = _mesa_PixelTexGenParameteriSGIS; - exec->PixelTexGenParameterivSGIS = _mesa_PixelTexGenParameterivSGIS; - exec->PixelTexGenParameterfSGIS = _mesa_PixelTexGenParameterfSGIS; - exec->PixelTexGenParameterfvSGIS = _mesa_PixelTexGenParameterfvSGIS; - exec->GetPixelTexGenParameterivSGIS = _mesa_GetPixelTexGenParameterivSGIS; - exec->GetPixelTexGenParameterfvSGIS = _mesa_GetPixelTexGenParameterfvSGIS; + /* 14. SGI_color_table */ +#if 0 + SET_ColorTableSGI(exec, _mesa_ColorTable); + SET_ColorSubTableSGI(exec, _mesa_ColorSubTable); + SET_GetColorTableSGI(exec, _mesa_GetColorTable); + SET_GetColorTableParameterfvSGI(exec, _mesa_GetColorTableParameterfv); + SET_GetColorTableParameterivSGI(exec, _mesa_GetColorTableParameteriv); #endif /* 30. GL_EXT_vertex_array */ #if _HAVE_FULL_GL - exec->ColorPointerEXT = _mesa_ColorPointerEXT; - exec->EdgeFlagPointerEXT = _mesa_EdgeFlagPointerEXT; - exec->IndexPointerEXT = _mesa_IndexPointerEXT; - exec->NormalPointerEXT = _mesa_NormalPointerEXT; - exec->TexCoordPointerEXT = _mesa_TexCoordPointerEXT; - exec->VertexPointerEXT = _mesa_VertexPointerEXT; + SET_ColorPointerEXT(exec, _mesa_ColorPointerEXT); + SET_EdgeFlagPointerEXT(exec, _mesa_EdgeFlagPointerEXT); + SET_IndexPointerEXT(exec, _mesa_IndexPointerEXT); + SET_NormalPointerEXT(exec, _mesa_NormalPointerEXT); + SET_TexCoordPointerEXT(exec, _mesa_TexCoordPointerEXT); + SET_VertexPointerEXT(exec, _mesa_VertexPointerEXT); #endif /* 37. GL_EXT_blend_minmax */ #if 0 - exec->BlendEquationEXT = _mesa_BlendEquationEXT; + SET_BlendEquationEXT(exec, _mesa_BlendEquationEXT); #endif /* 54. GL_EXT_point_parameters */ #if _HAVE_FULL_GL - exec->PointParameterfEXT = _mesa_PointParameterfEXT; - exec->PointParameterfvEXT = _mesa_PointParameterfvEXT; -#endif - - /* 78. GL_EXT_paletted_texture */ -#if 0 - exec->ColorTableEXT = _mesa_ColorTableEXT; - exec->ColorSubTableEXT = _mesa_ColorSubTableEXT; -#endif -#if _HAVE_FULL_GL - exec->GetColorTableEXT = _mesa_GetColorTable; - exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv; - exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv; + SET_PointParameterfEXT(exec, _mesa_PointParameterfEXT); + SET_PointParameterfvEXT(exec, _mesa_PointParameterfvEXT); #endif /* 97. GL_EXT_compiled_vertex_array */ #if _HAVE_FULL_GL - exec->LockArraysEXT = _mesa_LockArraysEXT; - exec->UnlockArraysEXT = _mesa_UnlockArraysEXT; + SET_LockArraysEXT(exec, _mesa_LockArraysEXT); + SET_UnlockArraysEXT(exec, _mesa_UnlockArraysEXT); #endif /* 148. GL_EXT_multi_draw_arrays */ #if _HAVE_FULL_GL - exec->MultiDrawArraysEXT = _mesa_MultiDrawArraysEXT; - exec->MultiDrawElementsEXT = _mesa_MultiDrawElementsEXT; + SET_MultiDrawArraysEXT(exec, _mesa_MultiDrawArraysEXT); + SET_MultiDrawElementsEXT(exec, _mesa_MultiDrawElementsEXT); #endif /* 173. GL_INGR_blend_func_separate */ #if _HAVE_FULL_GL - exec->BlendFuncSeparateEXT = _mesa_BlendFuncSeparateEXT; + SET_BlendFuncSeparateEXT(exec, _mesa_BlendFuncSeparateEXT); #endif /* 196. GL_MESA_resize_buffers */ #if _HAVE_FULL_GL - exec->ResizeBuffersMESA = _mesa_ResizeBuffersMESA; + SET_ResizeBuffersMESA(exec, _mesa_ResizeBuffersMESA); #endif /* 197. GL_MESA_window_pos */ #if _HAVE_FULL_GL - exec->WindowPos2dMESA = _mesa_WindowPos2dMESA; - exec->WindowPos2dvMESA = _mesa_WindowPos2dvMESA; - exec->WindowPos2fMESA = _mesa_WindowPos2fMESA; - exec->WindowPos2fvMESA = _mesa_WindowPos2fvMESA; - exec->WindowPos2iMESA = _mesa_WindowPos2iMESA; - exec->WindowPos2ivMESA = _mesa_WindowPos2ivMESA; - exec->WindowPos2sMESA = _mesa_WindowPos2sMESA; - exec->WindowPos2svMESA = _mesa_WindowPos2svMESA; - exec->WindowPos3dMESA = _mesa_WindowPos3dMESA; - exec->WindowPos3dvMESA = _mesa_WindowPos3dvMESA; - exec->WindowPos3fMESA = _mesa_WindowPos3fMESA; - exec->WindowPos3fvMESA = _mesa_WindowPos3fvMESA; - exec->WindowPos3iMESA = _mesa_WindowPos3iMESA; - exec->WindowPos3ivMESA = _mesa_WindowPos3ivMESA; - exec->WindowPos3sMESA = _mesa_WindowPos3sMESA; - exec->WindowPos3svMESA = _mesa_WindowPos3svMESA; - exec->WindowPos4dMESA = _mesa_WindowPos4dMESA; - exec->WindowPos4dvMESA = _mesa_WindowPos4dvMESA; - exec->WindowPos4fMESA = _mesa_WindowPos4fMESA; - exec->WindowPos4fvMESA = _mesa_WindowPos4fvMESA; - exec->WindowPos4iMESA = _mesa_WindowPos4iMESA; - exec->WindowPos4ivMESA = _mesa_WindowPos4ivMESA; - exec->WindowPos4sMESA = _mesa_WindowPos4sMESA; - exec->WindowPos4svMESA = _mesa_WindowPos4svMESA; + SET_WindowPos2dMESA(exec, _mesa_WindowPos2dMESA); + SET_WindowPos2dvMESA(exec, _mesa_WindowPos2dvMESA); + SET_WindowPos2fMESA(exec, _mesa_WindowPos2fMESA); + SET_WindowPos2fvMESA(exec, _mesa_WindowPos2fvMESA); + SET_WindowPos2iMESA(exec, _mesa_WindowPos2iMESA); + SET_WindowPos2ivMESA(exec, _mesa_WindowPos2ivMESA); + SET_WindowPos2sMESA(exec, _mesa_WindowPos2sMESA); + SET_WindowPos2svMESA(exec, _mesa_WindowPos2svMESA); + SET_WindowPos3dMESA(exec, _mesa_WindowPos3dMESA); + SET_WindowPos3dvMESA(exec, _mesa_WindowPos3dvMESA); + SET_WindowPos3fMESA(exec, _mesa_WindowPos3fMESA); + SET_WindowPos3fvMESA(exec, _mesa_WindowPos3fvMESA); + SET_WindowPos3iMESA(exec, _mesa_WindowPos3iMESA); + SET_WindowPos3ivMESA(exec, _mesa_WindowPos3ivMESA); + SET_WindowPos3sMESA(exec, _mesa_WindowPos3sMESA); + SET_WindowPos3svMESA(exec, _mesa_WindowPos3svMESA); + SET_WindowPos4dMESA(exec, _mesa_WindowPos4dMESA); + SET_WindowPos4dvMESA(exec, _mesa_WindowPos4dvMESA); + SET_WindowPos4fMESA(exec, _mesa_WindowPos4fMESA); + SET_WindowPos4fvMESA(exec, _mesa_WindowPos4fvMESA); + SET_WindowPos4iMESA(exec, _mesa_WindowPos4iMESA); + SET_WindowPos4ivMESA(exec, _mesa_WindowPos4ivMESA); + SET_WindowPos4sMESA(exec, _mesa_WindowPos4sMESA); + SET_WindowPos4svMESA(exec, _mesa_WindowPos4svMESA); #endif /* 200. GL_IBM_multimode_draw_arrays */ #if _HAVE_FULL_GL - exec->MultiModeDrawArraysIBM = _mesa_MultiModeDrawArraysIBM; - exec->MultiModeDrawElementsIBM = _mesa_MultiModeDrawElementsIBM; + SET_MultiModeDrawArraysIBM(exec, _mesa_MultiModeDrawArraysIBM); + SET_MultiModeDrawElementsIBM(exec, _mesa_MultiModeDrawElementsIBM); #endif /* 233. GL_NV_vertex_program */ #if FEATURE_NV_vertex_program - exec->BindProgramNV = _mesa_BindProgram; - exec->DeleteProgramsNV = _mesa_DeletePrograms; - exec->ExecuteProgramNV = _mesa_ExecuteProgramNV; - exec->GenProgramsNV = _mesa_GenPrograms; - exec->AreProgramsResidentNV = _mesa_AreProgramsResidentNV; - exec->RequestResidentProgramsNV = _mesa_RequestResidentProgramsNV; - exec->GetProgramParameterfvNV = _mesa_GetProgramParameterfvNV; - exec->GetProgramParameterdvNV = _mesa_GetProgramParameterdvNV; - exec->GetProgramivNV = _mesa_GetProgramivNV; - exec->GetProgramStringNV = _mesa_GetProgramStringNV; - exec->GetTrackMatrixivNV = _mesa_GetTrackMatrixivNV; - exec->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV; - exec->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV; - exec->GetVertexAttribivNV = _mesa_GetVertexAttribivNV; - exec->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV; - exec->IsProgramNV = _mesa_IsProgram; - exec->LoadProgramNV = _mesa_LoadProgramNV; - exec->ProgramParameter4dNV = _mesa_ProgramParameter4dNV; - exec->ProgramParameter4dvNV = _mesa_ProgramParameter4dvNV; - exec->ProgramParameter4fNV = _mesa_ProgramParameter4fNV; - exec->ProgramParameter4fvNV = _mesa_ProgramParameter4fvNV; - exec->ProgramParameters4dvNV = _mesa_ProgramParameters4dvNV; - exec->ProgramParameters4fvNV = _mesa_ProgramParameters4fvNV; - exec->TrackMatrixNV = _mesa_TrackMatrixNV; - exec->VertexAttribPointerNV = _mesa_VertexAttribPointerNV; + SET_BindProgramNV(exec, _mesa_BindProgram); + SET_DeleteProgramsNV(exec, _mesa_DeletePrograms); + SET_ExecuteProgramNV(exec, _mesa_ExecuteProgramNV); + SET_GenProgramsNV(exec, _mesa_GenPrograms); + SET_AreProgramsResidentNV(exec, _mesa_AreProgramsResidentNV); + SET_RequestResidentProgramsNV(exec, _mesa_RequestResidentProgramsNV); + SET_GetProgramParameterfvNV(exec, _mesa_GetProgramParameterfvNV); + SET_GetProgramParameterdvNV(exec, _mesa_GetProgramParameterdvNV); + SET_GetProgramivNV(exec, _mesa_GetProgramivNV); + SET_GetProgramStringNV(exec, _mesa_GetProgramStringNV); + SET_GetTrackMatrixivNV(exec, _mesa_GetTrackMatrixivNV); + SET_GetVertexAttribdvNV(exec, _mesa_GetVertexAttribdvNV); + SET_GetVertexAttribfvNV(exec, _mesa_GetVertexAttribfvNV); + SET_GetVertexAttribivNV(exec, _mesa_GetVertexAttribivNV); + SET_GetVertexAttribPointervNV(exec, _mesa_GetVertexAttribPointervNV); + SET_IsProgramNV(exec, _mesa_IsProgramARB); + SET_LoadProgramNV(exec, _mesa_LoadProgramNV); + SET_ProgramParameter4dNV(exec, _mesa_ProgramParameter4dNV); + SET_ProgramParameter4dvNV(exec, _mesa_ProgramParameter4dvNV); + SET_ProgramParameter4fNV(exec, _mesa_ProgramParameter4fNV); + SET_ProgramParameter4fvNV(exec, _mesa_ProgramParameter4fvNV); + SET_ProgramParameters4dvNV(exec, _mesa_ProgramParameters4dvNV); + SET_ProgramParameters4fvNV(exec, _mesa_ProgramParameters4fvNV); + SET_TrackMatrixNV(exec, _mesa_TrackMatrixNV); + SET_VertexAttribPointerNV(exec, _mesa_VertexAttribPointerNV); /* glVertexAttrib*NV functions handled in api_loopback.c */ #endif + /* 273. GL_APPLE_vertex_array_object */ + SET_BindVertexArrayAPPLE(exec, _mesa_BindVertexArrayAPPLE); + SET_DeleteVertexArraysAPPLE(exec, _mesa_DeleteVertexArraysAPPLE); + SET_GenVertexArraysAPPLE(exec, _mesa_GenVertexArraysAPPLE); + SET_IsVertexArrayAPPLE(exec, _mesa_IsVertexArrayAPPLE); + /* 282. GL_NV_fragment_program */ #if FEATURE_NV_fragment_program - exec->ProgramNamedParameter4fNV = _mesa_ProgramNamedParameter4fNV; - exec->ProgramNamedParameter4dNV = _mesa_ProgramNamedParameter4dNV; - exec->ProgramNamedParameter4fvNV = _mesa_ProgramNamedParameter4fvNV; - exec->ProgramNamedParameter4dvNV = _mesa_ProgramNamedParameter4dvNV; - exec->GetProgramNamedParameterfvNV = _mesa_GetProgramNamedParameterfvNV; - exec->GetProgramNamedParameterdvNV = _mesa_GetProgramNamedParameterdvNV; - exec->ProgramLocalParameter4dARB = _mesa_ProgramLocalParameter4dARB; - exec->ProgramLocalParameter4dvARB = _mesa_ProgramLocalParameter4dvARB; - exec->ProgramLocalParameter4fARB = _mesa_ProgramLocalParameter4fARB; - exec->ProgramLocalParameter4fvARB = _mesa_ProgramLocalParameter4fvARB; - exec->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB; - exec->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB; + SET_ProgramNamedParameter4fNV(exec, _mesa_ProgramNamedParameter4fNV); + SET_ProgramNamedParameter4dNV(exec, _mesa_ProgramNamedParameter4dNV); + SET_ProgramNamedParameter4fvNV(exec, _mesa_ProgramNamedParameter4fvNV); + SET_ProgramNamedParameter4dvNV(exec, _mesa_ProgramNamedParameter4dvNV); + SET_GetProgramNamedParameterfvNV(exec, _mesa_GetProgramNamedParameterfvNV); + SET_GetProgramNamedParameterdvNV(exec, _mesa_GetProgramNamedParameterdvNV); + SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB); + SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB); + SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB); + SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB); + SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB); + SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB); #endif /* 262. GL_NV_point_sprite */ #if _HAVE_FULL_GL - exec->PointParameteriNV = _mesa_PointParameteriNV; - exec->PointParameterivNV = _mesa_PointParameterivNV; + SET_PointParameteriNV(exec, _mesa_PointParameteriNV); + SET_PointParameterivNV(exec, _mesa_PointParameterivNV); #endif /* 268. GL_EXT_stencil_two_side */ #if _HAVE_FULL_GL - exec->ActiveStencilFaceEXT = _mesa_ActiveStencilFaceEXT; + SET_ActiveStencilFaceEXT(exec, _mesa_ActiveStencilFaceEXT); #endif /* ???. GL_EXT_depth_bounds_test */ - exec->DepthBoundsEXT = _mesa_DepthBoundsEXT; + SET_DepthBoundsEXT(exec, _mesa_DepthBoundsEXT); /* ARB 1. GL_ARB_multitexture */ #if _HAVE_FULL_GL - exec->ActiveTextureARB = _mesa_ActiveTextureARB; - exec->ClientActiveTextureARB = _mesa_ClientActiveTextureARB; + SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); + SET_ClientActiveTextureARB(exec, _mesa_ClientActiveTextureARB); #endif /* ARB 3. GL_ARB_transpose_matrix */ #if _HAVE_FULL_GL - exec->LoadTransposeMatrixdARB = _mesa_LoadTransposeMatrixdARB; - exec->LoadTransposeMatrixfARB = _mesa_LoadTransposeMatrixfARB; - exec->MultTransposeMatrixdARB = _mesa_MultTransposeMatrixdARB; - exec->MultTransposeMatrixfARB = _mesa_MultTransposeMatrixfARB; + SET_LoadTransposeMatrixdARB(exec, _mesa_LoadTransposeMatrixdARB); + SET_LoadTransposeMatrixfARB(exec, _mesa_LoadTransposeMatrixfARB); + SET_MultTransposeMatrixdARB(exec, _mesa_MultTransposeMatrixdARB); + SET_MultTransposeMatrixfARB(exec, _mesa_MultTransposeMatrixfARB); #endif /* ARB 5. GL_ARB_multisample */ #if _HAVE_FULL_GL - exec->SampleCoverageARB = _mesa_SampleCoverageARB; + SET_SampleCoverageARB(exec, _mesa_SampleCoverageARB); #endif /* ARB 12. GL_ARB_texture_compression */ #if _HAVE_FULL_GL - exec->CompressedTexImage3DARB = _mesa_CompressedTexImage3DARB; - exec->CompressedTexImage2DARB = _mesa_CompressedTexImage2DARB; - exec->CompressedTexImage1DARB = _mesa_CompressedTexImage1DARB; - exec->CompressedTexSubImage3DARB = _mesa_CompressedTexSubImage3DARB; - exec->CompressedTexSubImage2DARB = _mesa_CompressedTexSubImage2DARB; - exec->CompressedTexSubImage1DARB = _mesa_CompressedTexSubImage1DARB; - exec->GetCompressedTexImageARB = _mesa_GetCompressedTexImageARB; + SET_CompressedTexImage3DARB(exec, _mesa_CompressedTexImage3DARB); + SET_CompressedTexImage2DARB(exec, _mesa_CompressedTexImage2DARB); + SET_CompressedTexImage1DARB(exec, _mesa_CompressedTexImage1DARB); + SET_CompressedTexSubImage3DARB(exec, _mesa_CompressedTexSubImage3DARB); + SET_CompressedTexSubImage2DARB(exec, _mesa_CompressedTexSubImage2DARB); + SET_CompressedTexSubImage1DARB(exec, _mesa_CompressedTexSubImage1DARB); + SET_GetCompressedTexImageARB(exec, _mesa_GetCompressedTexImageARB); #endif /* ARB 14. GL_ARB_point_parameters */ @@ -644,127 +654,163 @@ _mesa_init_exec_table(struct _glapi_table *exec) /* glVertexAttrib4NivARB handled in api_loopback.c */ /* glVertexAttrib4NusvARB handled in api_loopback.c */ /* glVertexAttrib4NuivARB handled in api_loopback.c */ - exec->VertexAttribPointerARB = _mesa_VertexAttribPointerARB; - exec->EnableVertexAttribArrayARB = _mesa_EnableVertexAttribArrayARB; - exec->DisableVertexAttribArrayARB = _mesa_DisableVertexAttribArrayARB; - exec->ProgramStringARB = _mesa_ProgramStringARB; + SET_VertexAttribPointerARB(exec, _mesa_VertexAttribPointerARB); + SET_EnableVertexAttribArrayARB(exec, _mesa_EnableVertexAttribArrayARB); + SET_DisableVertexAttribArrayARB(exec, _mesa_DisableVertexAttribArrayARB); + SET_ProgramStringARB(exec, _mesa_ProgramStringARB); /* glBindProgramARB aliases glBindProgramNV */ /* glDeleteProgramsARB aliases glDeleteProgramsNV */ /* glGenProgramsARB aliases glGenProgramsNV */ /* glIsProgramARB aliases glIsProgramNV */ - exec->GetVertexAttribdvARB = _mesa_GetVertexAttribdvARB; - exec->GetVertexAttribfvARB = _mesa_GetVertexAttribfvARB; - exec->GetVertexAttribivARB = _mesa_GetVertexAttribivARB; + SET_GetVertexAttribdvARB(exec, _mesa_GetVertexAttribdvARB); + SET_GetVertexAttribfvARB(exec, _mesa_GetVertexAttribfvARB); + SET_GetVertexAttribivARB(exec, _mesa_GetVertexAttribivARB); /* glGetVertexAttribPointervARB aliases glGetVertexAttribPointervNV */ - exec->ProgramEnvParameter4dARB = _mesa_ProgramEnvParameter4dARB; - exec->ProgramEnvParameter4dvARB = _mesa_ProgramEnvParameter4dvARB; - exec->ProgramEnvParameter4fARB = _mesa_ProgramEnvParameter4fARB; - exec->ProgramEnvParameter4fvARB = _mesa_ProgramEnvParameter4fvARB; - exec->ProgramLocalParameter4dARB = _mesa_ProgramLocalParameter4dARB; - exec->ProgramLocalParameter4dvARB = _mesa_ProgramLocalParameter4dvARB; - exec->ProgramLocalParameter4fARB = _mesa_ProgramLocalParameter4fARB; - exec->ProgramLocalParameter4fvARB = _mesa_ProgramLocalParameter4fvARB; - exec->GetProgramEnvParameterdvARB = _mesa_GetProgramEnvParameterdvARB; - exec->GetProgramEnvParameterfvARB = _mesa_GetProgramEnvParameterfvARB; - exec->GetProgramLocalParameterdvARB = _mesa_GetProgramLocalParameterdvARB; - exec->GetProgramLocalParameterfvARB = _mesa_GetProgramLocalParameterfvARB; - exec->GetProgramivARB = _mesa_GetProgramivARB; - exec->GetProgramStringARB = _mesa_GetProgramStringARB; + SET_ProgramEnvParameter4dARB(exec, _mesa_ProgramEnvParameter4dARB); + SET_ProgramEnvParameter4dvARB(exec, _mesa_ProgramEnvParameter4dvARB); + SET_ProgramEnvParameter4fARB(exec, _mesa_ProgramEnvParameter4fARB); + SET_ProgramEnvParameter4fvARB(exec, _mesa_ProgramEnvParameter4fvARB); + SET_ProgramLocalParameter4dARB(exec, _mesa_ProgramLocalParameter4dARB); + SET_ProgramLocalParameter4dvARB(exec, _mesa_ProgramLocalParameter4dvARB); + SET_ProgramLocalParameter4fARB(exec, _mesa_ProgramLocalParameter4fARB); + SET_ProgramLocalParameter4fvARB(exec, _mesa_ProgramLocalParameter4fvARB); + SET_GetProgramEnvParameterdvARB(exec, _mesa_GetProgramEnvParameterdvARB); + SET_GetProgramEnvParameterfvARB(exec, _mesa_GetProgramEnvParameterfvARB); + SET_GetProgramLocalParameterdvARB(exec, _mesa_GetProgramLocalParameterdvARB); + SET_GetProgramLocalParameterfvARB(exec, _mesa_GetProgramLocalParameterfvARB); + SET_GetProgramivARB(exec, _mesa_GetProgramivARB); + SET_GetProgramStringARB(exec, _mesa_GetProgramStringARB); #endif /* ARB 28. GL_ARB_vertex_buffer_object */ #if FEATURE_ARB_vertex_buffer_object - exec->BindBufferARB = _mesa_BindBufferARB; - exec->BufferDataARB = _mesa_BufferDataARB; - exec->BufferSubDataARB = _mesa_BufferSubDataARB; - exec->DeleteBuffersARB = _mesa_DeleteBuffersARB; - exec->GenBuffersARB = _mesa_GenBuffersARB; - exec->GetBufferParameterivARB = _mesa_GetBufferParameterivARB; - exec->GetBufferPointervARB = _mesa_GetBufferPointervARB; - exec->GetBufferSubDataARB = _mesa_GetBufferSubDataARB; - exec->IsBufferARB = _mesa_IsBufferARB; - exec->MapBufferARB = _mesa_MapBufferARB; - exec->UnmapBufferARB = _mesa_UnmapBufferARB; + SET_BindBufferARB(exec, _mesa_BindBufferARB); + SET_BufferDataARB(exec, _mesa_BufferDataARB); + SET_BufferSubDataARB(exec, _mesa_BufferSubDataARB); + SET_DeleteBuffersARB(exec, _mesa_DeleteBuffersARB); + SET_GenBuffersARB(exec, _mesa_GenBuffersARB); + SET_GetBufferParameterivARB(exec, _mesa_GetBufferParameterivARB); + SET_GetBufferPointervARB(exec, _mesa_GetBufferPointervARB); + SET_GetBufferSubDataARB(exec, _mesa_GetBufferSubDataARB); + SET_IsBufferARB(exec, _mesa_IsBufferARB); + SET_MapBufferARB(exec, _mesa_MapBufferARB); + SET_UnmapBufferARB(exec, _mesa_UnmapBufferARB); #endif /* ARB 29. GL_ARB_occlusion_query */ #if FEATURE_ARB_occlusion_query - exec->GenQueriesARB = _mesa_GenQueriesARB; - exec->DeleteQueriesARB = _mesa_DeleteQueriesARB; - exec->IsQueryARB = _mesa_IsQueryARB; - exec->BeginQueryARB = _mesa_BeginQueryARB; - exec->EndQueryARB = _mesa_EndQueryARB; - exec->GetQueryivARB = _mesa_GetQueryivARB; - exec->GetQueryObjectivARB = _mesa_GetQueryObjectivARB; - exec->GetQueryObjectuivARB = _mesa_GetQueryObjectuivARB; + SET_GenQueriesARB(exec, _mesa_GenQueriesARB); + SET_DeleteQueriesARB(exec, _mesa_DeleteQueriesARB); + SET_IsQueryARB(exec, _mesa_IsQueryARB); + SET_BeginQueryARB(exec, _mesa_BeginQueryARB); + SET_EndQueryARB(exec, _mesa_EndQueryARB); + SET_GetQueryivARB(exec, _mesa_GetQueryivARB); + SET_GetQueryObjectivARB(exec, _mesa_GetQueryObjectivARB); + SET_GetQueryObjectuivARB(exec, _mesa_GetQueryObjectuivARB); #endif /* ARB 37. GL_ARB_draw_buffers */ - exec->DrawBuffersARB = _mesa_DrawBuffersARB; + SET_DrawBuffersARB(exec, _mesa_DrawBuffersARB); #if FEATURE_ARB_shader_objects - exec->DeleteObjectARB = _mesa_DeleteObjectARB; - exec->GetHandleARB = _mesa_GetHandleARB; - exec->DetachObjectARB = _mesa_DetachObjectARB; - exec->CreateShaderObjectARB = _mesa_CreateShaderObjectARB; - exec->ShaderSourceARB = _mesa_ShaderSourceARB; - exec->CompileShaderARB = _mesa_CompileShaderARB; - exec->CreateProgramObjectARB = _mesa_CreateProgramObjectARB; - exec->AttachObjectARB = _mesa_AttachObjectARB; - exec->LinkProgramARB = _mesa_LinkProgramARB; - exec->UseProgramObjectARB = _mesa_UseProgramObjectARB; - exec->ValidateProgramARB = _mesa_ValidateProgramARB; - exec->Uniform1fARB = _mesa_Uniform1fARB; - exec->Uniform2fARB = _mesa_Uniform2fARB; - exec->Uniform3fARB = _mesa_Uniform3fARB; - exec->Uniform4fARB = _mesa_Uniform4fARB; - exec->Uniform1iARB = _mesa_Uniform1iARB; - exec->Uniform2iARB = _mesa_Uniform2iARB; - exec->Uniform3iARB = _mesa_Uniform3iARB; - exec->Uniform4iARB = _mesa_Uniform4iARB; - exec->Uniform1fvARB = _mesa_Uniform1fvARB; - exec->Uniform2fvARB = _mesa_Uniform2fvARB; - exec->Uniform3fvARB = _mesa_Uniform3fvARB; - exec->Uniform4fvARB = _mesa_Uniform4fvARB; - exec->Uniform1ivARB = _mesa_Uniform1ivARB; - exec->Uniform2ivARB = _mesa_Uniform2ivARB; - exec->Uniform3ivARB = _mesa_Uniform3ivARB; - exec->Uniform4ivARB = _mesa_Uniform4ivARB; - exec->UniformMatrix2fvARB = _mesa_UniformMatrix2fvARB; - exec->UniformMatrix3fvARB = _mesa_UniformMatrix3fvARB; - exec->UniformMatrix4fvARB = _mesa_UniformMatrix4fvARB; - exec->GetObjectParameterfvARB = _mesa_GetObjectParameterfvARB; - exec->GetObjectParameterivARB = _mesa_GetObjectParameterivARB; - exec->GetInfoLogARB = _mesa_GetInfoLogARB; - exec->GetAttachedObjectsARB = _mesa_GetAttachedObjectsARB; - exec->GetUniformLocationARB = _mesa_GetUniformLocationARB; - exec->GetActiveUniformARB = _mesa_GetActiveUniformARB; - exec->GetUniformfvARB = _mesa_GetUniformfvARB; - exec->GetUniformivARB = _mesa_GetUniformivARB; - exec->GetShaderSourceARB = _mesa_GetShaderSourceARB; -#if FEATURE_ARB_vertex_shader - exec->BindAttribLocationARB = _mesa_BindAttribLocationARB; - exec->GetActiveAttribARB = _mesa_GetActiveAttribARB; - exec->GetAttribLocationARB = _mesa_GetAttribLocationARB; -#endif + SET_DeleteObjectARB(exec, _mesa_DeleteObjectARB); + SET_GetHandleARB(exec, _mesa_GetHandleARB); + SET_DetachObjectARB(exec, _mesa_DetachObjectARB); + SET_CreateShaderObjectARB(exec, _mesa_CreateShaderObjectARB); + SET_ShaderSourceARB(exec, _mesa_ShaderSourceARB); + SET_CompileShaderARB(exec, _mesa_CompileShaderARB); + SET_CreateProgramObjectARB(exec, _mesa_CreateProgramObjectARB); + SET_AttachObjectARB(exec, _mesa_AttachObjectARB); + SET_LinkProgramARB(exec, _mesa_LinkProgramARB); + SET_UseProgramObjectARB(exec, _mesa_UseProgramObjectARB); + SET_ValidateProgramARB(exec, _mesa_ValidateProgramARB); + SET_Uniform1fARB(exec, _mesa_Uniform1fARB); + SET_Uniform2fARB(exec, _mesa_Uniform2fARB); + SET_Uniform3fARB(exec, _mesa_Uniform3fARB); + SET_Uniform4fARB(exec, _mesa_Uniform4fARB); + SET_Uniform1iARB(exec, _mesa_Uniform1iARB); + SET_Uniform2iARB(exec, _mesa_Uniform2iARB); + SET_Uniform3iARB(exec, _mesa_Uniform3iARB); + SET_Uniform4iARB(exec, _mesa_Uniform4iARB); + SET_Uniform1fvARB(exec, _mesa_Uniform1fvARB); + SET_Uniform2fvARB(exec, _mesa_Uniform2fvARB); + SET_Uniform3fvARB(exec, _mesa_Uniform3fvARB); + SET_Uniform4fvARB(exec, _mesa_Uniform4fvARB); + SET_Uniform1ivARB(exec, _mesa_Uniform1ivARB); + SET_Uniform2ivARB(exec, _mesa_Uniform2ivARB); + SET_Uniform3ivARB(exec, _mesa_Uniform3ivARB); + SET_Uniform4ivARB(exec, _mesa_Uniform4ivARB); + SET_UniformMatrix2fvARB(exec, _mesa_UniformMatrix2fvARB); + SET_UniformMatrix3fvARB(exec, _mesa_UniformMatrix3fvARB); + SET_UniformMatrix4fvARB(exec, _mesa_UniformMatrix4fvARB); + SET_GetObjectParameterfvARB(exec, _mesa_GetObjectParameterfvARB); + SET_GetObjectParameterivARB(exec, _mesa_GetObjectParameterivARB); + SET_GetInfoLogARB(exec, _mesa_GetInfoLogARB); + SET_GetAttachedObjectsARB(exec, _mesa_GetAttachedObjectsARB); + SET_GetUniformLocationARB(exec, _mesa_GetUniformLocationARB); + SET_GetActiveUniformARB(exec, _mesa_GetActiveUniformARB); + SET_GetUniformfvARB(exec, _mesa_GetUniformfvARB); + SET_GetUniformivARB(exec, _mesa_GetUniformivARB); + SET_GetShaderSourceARB(exec, _mesa_GetShaderSourceARB); #endif /* FEATURE_ARB_shader_objects */ +#if FEATURE_ARB_vertex_shader + SET_BindAttribLocationARB(exec, _mesa_BindAttribLocationARB); + SET_GetActiveAttribARB(exec, _mesa_GetActiveAttribARB); + SET_GetAttribLocationARB(exec, _mesa_GetAttribLocationARB); +#endif /* FEATURE_ARB_vertex_shader */ + /* GL_ATI_fragment_shader */ #if FEATURE_ATI_fragment_shader - exec->GenFragmentShadersATI = _mesa_GenFragmentShadersATI; - exec->BindFragmentShaderATI = _mesa_BindFragmentShaderATI; - exec->DeleteFragmentShaderATI = _mesa_DeleteFragmentShaderATI; - exec->BeginFragmentShaderATI = _mesa_BeginFragmentShaderATI; - exec->EndFragmentShaderATI = _mesa_EndFragmentShaderATI; - exec->PassTexCoordATI = _mesa_PassTexCoordATI; - exec->SampleMapATI = _mesa_SampleMapATI; - exec->ColorFragmentOp1ATI = _mesa_ColorFragmentOp1ATI; - exec->ColorFragmentOp2ATI = _mesa_ColorFragmentOp2ATI; - exec->ColorFragmentOp3ATI = _mesa_ColorFragmentOp3ATI; - exec->AlphaFragmentOp1ATI = _mesa_AlphaFragmentOp1ATI; - exec->AlphaFragmentOp2ATI = _mesa_AlphaFragmentOp2ATI; - exec->AlphaFragmentOp3ATI = _mesa_AlphaFragmentOp3ATI; - exec->SetFragmentShaderConstantATI = _mesa_SetFragmentShaderConstantATI; + SET_GenFragmentShadersATI(exec, _mesa_GenFragmentShadersATI); + SET_BindFragmentShaderATI(exec, _mesa_BindFragmentShaderATI); + SET_DeleteFragmentShaderATI(exec, _mesa_DeleteFragmentShaderATI); + SET_BeginFragmentShaderATI(exec, _mesa_BeginFragmentShaderATI); + SET_EndFragmentShaderATI(exec, _mesa_EndFragmentShaderATI); + SET_PassTexCoordATI(exec, _mesa_PassTexCoordATI); + SET_SampleMapATI(exec, _mesa_SampleMapATI); + SET_ColorFragmentOp1ATI(exec, _mesa_ColorFragmentOp1ATI); + SET_ColorFragmentOp2ATI(exec, _mesa_ColorFragmentOp2ATI); + SET_ColorFragmentOp3ATI(exec, _mesa_ColorFragmentOp3ATI); + SET_AlphaFragmentOp1ATI(exec, _mesa_AlphaFragmentOp1ATI); + SET_AlphaFragmentOp2ATI(exec, _mesa_AlphaFragmentOp2ATI); + SET_AlphaFragmentOp3ATI(exec, _mesa_AlphaFragmentOp3ATI); + SET_SetFragmentShaderConstantATI(exec, _mesa_SetFragmentShaderConstantATI); +#endif + +#if FEATURE_EXT_framebuffer_object + SET_IsRenderbufferEXT(exec, _mesa_IsRenderbufferEXT); + SET_BindRenderbufferEXT(exec, _mesa_BindRenderbufferEXT); + SET_DeleteRenderbuffersEXT(exec, _mesa_DeleteRenderbuffersEXT); + SET_GenRenderbuffersEXT(exec, _mesa_GenRenderbuffersEXT); + SET_RenderbufferStorageEXT(exec, _mesa_RenderbufferStorageEXT); + SET_GetRenderbufferParameterivEXT(exec, _mesa_GetRenderbufferParameterivEXT); + SET_IsFramebufferEXT(exec, _mesa_IsFramebufferEXT); + SET_BindFramebufferEXT(exec, _mesa_BindFramebufferEXT); + SET_DeleteFramebuffersEXT(exec, _mesa_DeleteFramebuffersEXT); + SET_GenFramebuffersEXT(exec, _mesa_GenFramebuffersEXT); + SET_CheckFramebufferStatusEXT(exec, _mesa_CheckFramebufferStatusEXT); + SET_FramebufferTexture1DEXT(exec, _mesa_FramebufferTexture1DEXT); + SET_FramebufferTexture2DEXT(exec, _mesa_FramebufferTexture2DEXT); + SET_FramebufferTexture3DEXT(exec, _mesa_FramebufferTexture3DEXT); + SET_FramebufferRenderbufferEXT(exec, _mesa_FramebufferRenderbufferEXT); + SET_GetFramebufferAttachmentParameterivEXT(exec, _mesa_GetFramebufferAttachmentParameterivEXT); + SET_GenerateMipmapEXT(exec, _mesa_GenerateMipmapEXT); +#endif + +#if FEATURE_EXT_timer_query + SET_GetQueryObjecti64vEXT(exec, _mesa_GetQueryObjecti64vEXT); + SET_GetQueryObjectui64vEXT(exec, _mesa_GetQueryObjectui64vEXT); +#endif + +#if FEATURE_EXT_framebuffer_blit + SET_BlitFramebufferEXT(exec, _mesa_BlitFramebufferEXT); +#endif + + /* GL_EXT_gpu_program_parameters */ +#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program + SET_ProgramEnvParameters4fvEXT(exec, _mesa_ProgramEnvParameters4fvEXT); + SET_ProgramLocalParameters4fvEXT(exec, _mesa_ProgramLocalParameters4fvEXT); #endif } @@ -796,12 +842,16 @@ update_arrays( GLcontext *ctx ) /* find min of _MaxElement values for all enabled arrays */ /* 0 */ - if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Enabled) { - min = ctx->Array.VertexAttrib[VERT_ATTRIB_POS]._MaxElement; + if (ctx->ShaderObjects._VertexShaderPresent + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC0].Enabled) { + min = ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC0]._MaxElement; } - else if (ctx->Array.Vertex.Enabled) { - min = ctx->Array.Vertex._MaxElement; + else if (ctx->VertexProgram._Enabled + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled) { + min = ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS]._MaxElement; + } + else if (ctx->Array.ArrayObj->Vertex.Enabled) { + min = ctx->Array.ArrayObj->Vertex._MaxElement; } else { /* can't draw anything without vertex positions! */ @@ -810,77 +860,86 @@ update_arrays( GLcontext *ctx ) /* 1 */ if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_WEIGHT].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[VERT_ATTRIB_WEIGHT]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_WEIGHT].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_WEIGHT]._MaxElement); } /* no conventional vertex weight array */ /* 2 */ if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL]._MaxElement); } - else if (ctx->Array.Normal.Enabled) { - min = MIN2(min, ctx->Array.Normal._MaxElement); + else if (ctx->Array.ArrayObj->Normal.Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->Normal._MaxElement); } /* 3 */ if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR0]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0]._MaxElement); } - else if (ctx->Array.Color.Enabled) { - min = MIN2(min, ctx->Array.Color._MaxElement); + else if (ctx->Array.ArrayObj->Color.Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->Color._MaxElement); } /* 4 */ if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR1]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1]._MaxElement); } - else if (ctx->Array.SecondaryColor.Enabled) { - min = MIN2(min, ctx->Array.SecondaryColor._MaxElement); + else if (ctx->Array.ArrayObj->SecondaryColor.Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->SecondaryColor._MaxElement); } /* 5 */ if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_FOG].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[VERT_ATTRIB_FOG]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG]._MaxElement); } - else if (ctx->Array.FogCoord.Enabled) { - min = MIN2(min, ctx->Array.FogCoord._MaxElement); + else if (ctx->Array.ArrayObj->FogCoord.Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->FogCoord._MaxElement); } /* 6 */ if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_SIX].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[VERT_ATTRIB_SIX]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX]._MaxElement); } + else if (ctx->Array.ArrayObj->Index.Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->Index._MaxElement); + } + /* 7 */ if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[VERT_ATTRIB_SEVEN].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[VERT_ATTRIB_SEVEN]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_SEVEN].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_SEVEN]._MaxElement); } /* 8..15 */ - for (i = VERT_ATTRIB_TEX0; i < VERT_ATTRIB_MAX; i++) { + for (i = VERT_ATTRIB_TEX0; i <= VERT_ATTRIB_TEX7; i++) { if (ctx->VertexProgram._Enabled - && ctx->Array.VertexAttrib[i].Enabled) { - min = MIN2(min, ctx->Array.VertexAttrib[i]._MaxElement); + && ctx->Array.ArrayObj->VertexAttrib[i].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[i]._MaxElement); } else if (i - VERT_ATTRIB_TEX0 < ctx->Const.MaxTextureCoordUnits - && ctx->Array.TexCoord[i - VERT_ATTRIB_TEX0].Enabled) { - min = MIN2(min, ctx->Array.TexCoord[i - VERT_ATTRIB_TEX0]._MaxElement); + && ctx->Array.ArrayObj->TexCoord[i - VERT_ATTRIB_TEX0].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->TexCoord[i - VERT_ATTRIB_TEX0]._MaxElement); } } - if (ctx->Array.Index.Enabled) { - min = MIN2(min, ctx->Array.Index._MaxElement); + /* 16..31 */ + if (ctx->ShaderObjects._VertexShaderPresent) { + for (i = VERT_ATTRIB_GENERIC0; i < VERT_ATTRIB_MAX; i++) { + if (ctx->Array.ArrayObj->VertexAttrib[i].Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->VertexAttrib[i]._MaxElement); + } + } } - if (ctx->Array.EdgeFlag.Enabled) { - min = MIN2(min, ctx->Array.EdgeFlag._MaxElement); + if (ctx->Array.ArrayObj->EdgeFlag.Enabled) { + min = MIN2(min, ctx->Array.ArrayObj->EdgeFlag._MaxElement); } /* _MaxElement is one past the last legal array element */ @@ -899,30 +958,78 @@ update_program(GLcontext *ctx) * have a runable program or shader. */ ctx->VertexProgram._Enabled = ctx->VertexProgram.Enabled - && ctx->VertexProgram.Current->Instructions; + && ctx->VertexProgram.Current->Base.Instructions; ctx->FragmentProgram._Enabled = ctx->FragmentProgram.Enabled - && ctx->FragmentProgram.Current->Instructions; + && ctx->FragmentProgram.Current->Base.Instructions; ctx->ATIFragmentShader._Enabled = ctx->ATIFragmentShader.Enabled && ctx->ATIFragmentShader.Current->Instructions; + + ctx->FragmentProgram._Current = ctx->FragmentProgram.Current; + ctx->FragmentProgram._Active = ctx->FragmentProgram._Enabled; + + if (ctx->_MaintainTexEnvProgram && !ctx->FragmentProgram._Enabled) { +#if 0 + if (!ctx->_TexEnvProgram) + ctx->_TexEnvProgram = (struct gl_fragment_program *) + ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0); + ctx->FragmentProgram._Current = ctx->_TexEnvProgram; +#endif + + if (ctx->_UseTexEnvProgram) + ctx->FragmentProgram._Active = GL_TRUE; + } } -/* +static void +update_viewport_matrix(GLcontext *ctx) +{ + const GLfloat depthMax = ctx->DrawBuffer->_DepthMaxF; + + ASSERT(depthMax > 0); + + /* Compute scale and bias values. This is really driver-specific + * and should be maintained elsewhere if at all. + * NOTE: RasterPos uses this. + */ + _math_matrix_viewport(&ctx->Viewport._WindowMap, + ctx->Viewport.X, ctx->Viewport.Y, + ctx->Viewport.Width, ctx->Viewport.Height, + ctx->Viewport.Near, ctx->Viewport.Far, + depthMax); +} + + +/** + * Update derived color/blend/logicop state. + */ +static void +update_color(GLcontext *ctx) +{ + /* This is needed to support 1.1's RGB logic ops AND + * 1.0's blending logicops. + */ + ctx->Color._LogicOpEnabled = RGBA_LOGICOP_ENABLED(ctx); +} + + +/** * If __GLcontextRec::NewState is non-zero then this function \b must be called * before rendering any primitive. Basically, function pointers and * miscellaneous flags are updated to reflect the current state of the state * machine. * - * Calls dd_function_table::UpdateState to perform any internal state management - * necessary. + * Calls dd_function_table::UpdateState to perform any internal state + * management necessary. * * \sa _mesa_update_modelview_project(), _mesa_update_texture(), - * _mesa_update_buffers(), _mesa_update_polygon(), _mesa_update_lighting() and - * _mesa_update_tnl_spaces(). + * _mesa_update_buffer_bounds(), _mesa_update_polygon(), + * _mesa_update_lighting() and _mesa_update_tnl_spaces(). */ -void _mesa_update_state( GLcontext *ctx ) +void +_mesa_update_state_locked( GLcontext *ctx ) { - GLuint new_state = ctx->NewState; + GLbitfield new_state = ctx->NewState; if (MESA_VERBOSE & VERBOSE_STATE) _mesa_print_state("_mesa_update_state", new_state); @@ -936,8 +1043,14 @@ void _mesa_update_state( GLcontext *ctx ) if (new_state & (_NEW_PROGRAM|_NEW_TEXTURE|_NEW_TEXTURE_MATRIX)) _mesa_update_texture( ctx, new_state ); - if (new_state & (_NEW_SCISSOR|_NEW_BUFFERS)) - _mesa_update_buffers( ctx ); + if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) + _mesa_update_framebuffer(ctx); + + if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT)) + _mesa_update_draw_buffer_bounds( ctx ); + + if (new_state & _NEW_POINT) + _mesa_update_point( ctx ); if (new_state & _NEW_POLYGON) _mesa_update_polygon( ctx ); @@ -945,6 +1058,9 @@ void _mesa_update_state( GLcontext *ctx ) if (new_state & _NEW_LIGHT) _mesa_update_lighting( ctx ); + if (new_state & _NEW_STENCIL) + _mesa_update_stencil( ctx ); + if (new_state & _IMAGE_NEW_TRANSFER_STATE) _mesa_update_pixel( ctx, new_state ); @@ -954,6 +1070,17 @@ void _mesa_update_state( GLcontext *ctx ) if (new_state & (_NEW_ARRAY | _NEW_PROGRAM)) update_arrays( ctx ); + if (new_state & (_NEW_BUFFERS | _NEW_VIEWPORT)) + update_viewport_matrix(ctx); + + if (new_state & _NEW_COLOR) + update_color( ctx ); + + if (ctx->_MaintainTexEnvProgram) { + if (new_state & (_NEW_TEXTURE | _DD_NEW_SEPARATE_SPECULAR | _NEW_FOG)) + _mesa_UpdateTexEnvProgram(ctx); + } + /* ctx->_NeedEyeCoords is now up to date. * * If the truth value of this variable has changed, update for the @@ -981,4 +1108,17 @@ void _mesa_update_state( GLcontext *ctx ) ctx->Array.NewState = 0; } + +/* This is the usual entrypoint for state updates: + */ +void +_mesa_update_state( GLcontext *ctx ) +{ + _mesa_lock_context_textures(ctx); + _mesa_update_state_locked(ctx); + _mesa_unlock_context_textures(ctx); +} + + + /*@}*/ diff --git a/src/kits/opengl/mesa/main/state.h b/src/kits/opengl/mesa/main/state.h index 58cfcc4146..5240d4bf93 100644 --- a/src/kits/opengl/mesa/main/state.h +++ b/src/kits/opengl/mesa/main/state.h @@ -39,5 +39,11 @@ _mesa_init_exec_table(struct _glapi_table *exec); extern void _mesa_update_state( GLcontext *ctx ); +/* As above but can only be called between _mesa_lock_context_textures() and + * _mesa_unlock_context_textures(). + */ +extern void +_mesa_update_state_locked( GLcontext *ctx ); + #endif diff --git a/src/kits/opengl/mesa/main/stencil.c b/src/kits/opengl/mesa/main/stencil.c index 8c89e8cc13..ad71a81f6e 100644 --- a/src/kits/opengl/mesa/main/stencil.c +++ b/src/kits/opengl/mesa/main/stencil.c @@ -1,13 +1,8 @@ -/** - * \file stencil.c - * Stencil operations. - */ - /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5.2 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -28,14 +23,34 @@ */ +/** + * \file stencil.c + * Stencil operations. + * + * Note: There's an incompatibility between GL_EXT_stencil_two_side and + * OpenGL 2.0's two-sided stencil feature. + * + * With GL_EXT_stencil_two_side, calling glStencilOp/Func/Mask() only the + * front OR back face state (as set by glActiveStencilFaceEXT) is set. + * + * But with OpenGL 2.0, calling glStencilOp/Func/Mask() sets BOTH the + * front AND back state. + * + * So either we advertise the GL_EXT_stencil_two_side extension, or OpenGL + * 2.0, but not both. + * + * Also, note that GL_ATI_separate_stencil is different as well: + * glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, ...) vs. + * glStencilFuncSeparate(GLenum face, GLenum func, ...). + */ + + #include "glheader.h" #include "imports.h" #include "context.h" -#include "depth.h" #include "macros.h" #include "stencil.h" #include "mtypes.h" -#include "enable.h" /** @@ -55,14 +70,14 @@ _mesa_ClearStencil( GLint s ) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (ctx->Stencil.Clear == (GLstencil) s) + if (ctx->Stencil.Clear == (GLuint) s) return; FLUSH_VERTICES(ctx, _NEW_STENCIL); - ctx->Stencil.Clear = (GLstencil) s; + ctx->Stencil.Clear = (GLuint) s; if (ctx->Driver.ClearStencil) { - (*ctx->Driver.ClearStencil)( ctx, s ); + ctx->Driver.ClearStencil( ctx, s ); } } @@ -84,8 +99,7 @@ void GLAPIENTRY _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask ) { GET_CURRENT_CONTEXT(ctx); - const GLint face = ctx->Stencil.ActiveFace; - GLint maxref; + const GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1; ASSERT_OUTSIDE_BEGIN_END(ctx); switch (func) { @@ -99,25 +113,45 @@ _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask ) case GL_ALWAYS: break; default: - _mesa_error( ctx, GL_INVALID_ENUM, "glStencilFunc" ); + _mesa_error( ctx, GL_INVALID_ENUM, "glStencilFunc (0x%04x)", func ); return; } - maxref = (1 << STENCIL_BITS) - 1; - ref = (GLstencil) CLAMP( ref, 0, maxref ); + ref = CLAMP( ref, 0, stencilMax ); - if (ctx->Stencil.Function[face] == func && - ctx->Stencil.ValueMask[face] == (GLstencil) mask && - ctx->Stencil.Ref[face] == ref) - return; - - FLUSH_VERTICES(ctx, _NEW_STENCIL); - ctx->Stencil.Function[face] = func; - ctx->Stencil.Ref[face] = ref; - ctx->Stencil.ValueMask[face] = (GLstencil) mask; - - if (ctx->Driver.StencilFunc) { - (*ctx->Driver.StencilFunc)( ctx, func, ref, mask ); + if (ctx->Extensions.EXT_stencil_two_side) { + /* only set active face state */ + const GLint face = ctx->Stencil.ActiveFace; + if (ctx->Stencil.Function[face] == func && + ctx->Stencil.ValueMask[face] == mask && + ctx->Stencil.Ref[face] == ref) + return; + FLUSH_VERTICES(ctx, _NEW_STENCIL); + ctx->Stencil.Function[face] = func; + ctx->Stencil.Ref[face] = ref; + ctx->Stencil.ValueMask[face] = mask; + if (ctx->Driver.StencilFuncSeparate) { + ctx->Driver.StencilFuncSeparate(ctx, face ? GL_BACK : GL_FRONT, + func, ref, mask); + } + } + else { + /* set both front and back state */ + if (ctx->Stencil.Function[0] == func && + ctx->Stencil.Function[1] == func && + ctx->Stencil.ValueMask[0] == mask && + ctx->Stencil.ValueMask[1] == mask && + ctx->Stencil.Ref[0] == ref && + ctx->Stencil.Ref[1] == ref) + return; + FLUSH_VERTICES(ctx, _NEW_STENCIL); + ctx->Stencil.Function[0] = ctx->Stencil.Function[1] = func; + ctx->Stencil.Ref[0] = ctx->Stencil.Ref[1] = ref; + ctx->Stencil.ValueMask[0] = ctx->Stencil.ValueMask[1] = mask; + if (ctx->Driver.StencilFuncSeparate) { + ctx->Driver.StencilFuncSeparate(ctx, GL_FRONT_AND_BACK, + func, ref, mask); + } } } @@ -137,17 +171,29 @@ void GLAPIENTRY _mesa_StencilMask( GLuint mask ) { GET_CURRENT_CONTEXT(ctx); - const GLint face = ctx->Stencil.ActiveFace; ASSERT_OUTSIDE_BEGIN_END(ctx); - if (ctx->Stencil.WriteMask[face] == (GLstencil) mask) - return; - - FLUSH_VERTICES(ctx, _NEW_STENCIL); - ctx->Stencil.WriteMask[face] = (GLstencil) mask; - - if (ctx->Driver.StencilMask) { - (*ctx->Driver.StencilMask)( ctx, mask ); + if (ctx->Extensions.EXT_stencil_two_side) { + /* only set active face state */ + const GLint face = ctx->Stencil.ActiveFace; + if (ctx->Stencil.WriteMask[face] == mask) + return; + FLUSH_VERTICES(ctx, _NEW_STENCIL); + ctx->Stencil.WriteMask[face] = mask; + if (ctx->Driver.StencilMaskSeparate) { + ctx->Driver.StencilMaskSeparate(ctx, face ? GL_BACK : GL_FRONT, mask); + } + } + else { + /* set both front and back state */ + if (ctx->Stencil.WriteMask[0] == mask && + ctx->Stencil.WriteMask[1] == mask) + return; + FLUSH_VERTICES(ctx, _NEW_STENCIL); + ctx->Stencil.WriteMask[0] = ctx->Stencil.WriteMask[1] = mask; + if (ctx->Driver.StencilMaskSeparate) { + ctx->Driver.StencilMaskSeparate(ctx, GL_FRONT_AND_BACK, mask); + } } } @@ -156,7 +202,7 @@ _mesa_StencilMask( GLuint mask ) * Set the stencil test actions. * * \param fail action to take when stencil test fails. - * \param zfail action to take when stencil test passes, but the depth test fails. + * \param zfail action to take when stencil test passes, but depth test fails. * \param zpass action to take when stencil test passes and the depth test * passes (or depth testing is not enabled). * @@ -170,7 +216,6 @@ void GLAPIENTRY _mesa_StencilOp(GLenum fail, GLenum zfail, GLenum zpass) { GET_CURRENT_CONTEXT(ctx); - const GLint face = ctx->Stencil.ActiveFace; ASSERT_OUTSIDE_BEGIN_END(ctx); switch (fail) { @@ -228,22 +273,44 @@ _mesa_StencilOp(GLenum fail, GLenum zfail, GLenum zpass) return; } - if (ctx->Stencil.ZFailFunc[face] == zfail && - ctx->Stencil.ZPassFunc[face] == zpass && - ctx->Stencil.FailFunc[face] == fail) - return; - - FLUSH_VERTICES(ctx, _NEW_STENCIL); - ctx->Stencil.ZFailFunc[face] = zfail; - ctx->Stencil.ZPassFunc[face] = zpass; - ctx->Stencil.FailFunc[face] = fail; - - if (ctx->Driver.StencilOp) { - (*ctx->Driver.StencilOp)(ctx, fail, zfail, zpass); + if (ctx->Extensions.EXT_stencil_two_side) { + /* only set active face state */ + const GLint face = ctx->Stencil.ActiveFace; + if (ctx->Stencil.ZFailFunc[face] == zfail && + ctx->Stencil.ZPassFunc[face] == zpass && + ctx->Stencil.FailFunc[face] == fail) + return; + FLUSH_VERTICES(ctx, _NEW_STENCIL); + ctx->Stencil.ZFailFunc[face] = zfail; + ctx->Stencil.ZPassFunc[face] = zpass; + ctx->Stencil.FailFunc[face] = fail; + if (ctx->Driver.StencilOpSeparate) { + ctx->Driver.StencilOpSeparate(ctx, face ? GL_BACK : GL_FRONT, + fail, zfail, zpass); + } + } + else { + /* set both front and back state */ + if (ctx->Stencil.ZFailFunc[0] == zfail && + ctx->Stencil.ZFailFunc[1] == zfail && + ctx->Stencil.ZPassFunc[0] == zpass && + ctx->Stencil.ZPassFunc[1] == zpass && + ctx->Stencil.FailFunc[0] == fail && + ctx->Stencil.FailFunc[1] == fail) + return; + FLUSH_VERTICES(ctx, _NEW_STENCIL); + ctx->Stencil.ZFailFunc[0] = ctx->Stencil.ZFailFunc[1] = zfail; + ctx->Stencil.ZPassFunc[0] = ctx->Stencil.ZPassFunc[1] = zpass; + ctx->Stencil.FailFunc[0] = ctx->Stencil.FailFunc[1] = fail; + if (ctx->Driver.StencilOpSeparate) { + ctx->Driver.StencilOpSeparate(ctx, GL_FRONT_AND_BACK, + fail, zfail, zpass); + } } } + #if _HAVE_FULL_GL /* GL_EXT_stencil_two_side */ void GLAPIENTRY @@ -252,18 +319,209 @@ _mesa_ActiveStencilFaceEXT(GLenum face) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); + if (!ctx->Extensions.EXT_stencil_two_side) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glActiveStencilFaceEXT"); + return; + } + if (face == GL_FRONT || face == GL_BACK) { FLUSH_VERTICES(ctx, _NEW_STENCIL); ctx->Stencil.ActiveFace = (face == GL_FRONT) ? 0 : 1; } - - if (ctx->Driver.ActiveStencilFace) { - (*ctx->Driver.ActiveStencilFace)( ctx, (GLuint) ctx->Stencil.ActiveFace ); + else { + _mesa_error(ctx, GL_INVALID_ENUM, "glActiveStencilFaceEXT(face)"); } } #endif + +/** + * OpenGL 2.0 function. + * \todo Make StencilOp() call this function. And eventually remove the + * ctx->Driver.StencilOp function and use ctx->Driver.StencilOpSeparate + * instead. + */ +void GLAPIENTRY +_mesa_StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (face != GL_FRONT && face != GL_BACK && face != GL_FRONT_AND_BACK) { + _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(face)"); + return; + } + + switch (fail) { + case GL_KEEP: + case GL_ZERO: + case GL_REPLACE: + case GL_INCR: + case GL_DECR: + case GL_INVERT: + break; + case GL_INCR_WRAP_EXT: + case GL_DECR_WRAP_EXT: + if (ctx->Extensions.EXT_stencil_wrap) { + break; + } + /* FALL-THROUGH */ + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(fail)"); + return; + } + switch (zfail) { + case GL_KEEP: + case GL_ZERO: + case GL_REPLACE: + case GL_INCR: + case GL_DECR: + case GL_INVERT: + break; + case GL_INCR_WRAP_EXT: + case GL_DECR_WRAP_EXT: + if (ctx->Extensions.EXT_stencil_wrap) { + break; + } + /* FALL-THROUGH */ + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(zfail)"); + return; + } + switch (zpass) { + case GL_KEEP: + case GL_ZERO: + case GL_REPLACE: + case GL_INCR: + case GL_DECR: + case GL_INVERT: + break; + case GL_INCR_WRAP_EXT: + case GL_DECR_WRAP_EXT: + if (ctx->Extensions.EXT_stencil_wrap) { + break; + } + /* FALL-THROUGH */ + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(zpass)"); + return; + } + + FLUSH_VERTICES(ctx, _NEW_STENCIL); + + if (face != GL_BACK) { + ctx->Stencil.FailFunc[0] = fail; + ctx->Stencil.ZFailFunc[0] = zfail; + ctx->Stencil.ZPassFunc[0] = zpass; + } + if (face != GL_FRONT) { + ctx->Stencil.FailFunc[1] = fail; + ctx->Stencil.ZFailFunc[1] = zfail; + ctx->Stencil.ZPassFunc[1] = zpass; + } + if (ctx->Driver.StencilOpSeparate) { + ctx->Driver.StencilOpSeparate(ctx, face, fail, zfail, zpass); + } +} + + +/* OpenGL 2.0 */ +void GLAPIENTRY +_mesa_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) +{ + GET_CURRENT_CONTEXT(ctx); + const GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (face != GL_FRONT && face != GL_BACK && face != GL_FRONT_AND_BACK) { + _mesa_error(ctx, GL_INVALID_ENUM, "glStencilFuncSeparate(face)"); + return; + } + + switch (func) { + case GL_NEVER: + case GL_LESS: + case GL_LEQUAL: + case GL_GREATER: + case GL_GEQUAL: + case GL_EQUAL: + case GL_NOTEQUAL: + case GL_ALWAYS: + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glStencilFuncSeparate(func)"); + return; + } + + ref = CLAMP(ref, 0, stencilMax); + + FLUSH_VERTICES(ctx, _NEW_STENCIL); + + if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { + ctx->Stencil.Function[0] = func; + ctx->Stencil.Ref[0] = ref; + ctx->Stencil.ValueMask[0] = mask; + } + if (face == GL_BACK || face == GL_FRONT_AND_BACK) { + ctx->Stencil.Function[1] = func; + ctx->Stencil.Ref[1] = ref; + ctx->Stencil.ValueMask[1] = mask; + } + if (ctx->Driver.StencilFuncSeparate) { + ctx->Driver.StencilFuncSeparate(ctx, face, func, ref, mask); + } +} + + +/* OpenGL 2.0 */ +void GLAPIENTRY +_mesa_StencilMaskSeparate(GLenum face, GLuint mask) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (face != GL_FRONT && face != GL_BACK && face != GL_FRONT_AND_BACK) { + _mesa_error(ctx, GL_INVALID_ENUM, "glStencilaMaskSeparate(face)"); + return; + } + + FLUSH_VERTICES(ctx, _NEW_STENCIL); + + if (face != GL_BACK) { + ctx->Stencil.WriteMask[0] = mask; + } + if (face != GL_FRONT) { + ctx->Stencil.WriteMask[1] = mask; + } + if (ctx->Driver.StencilMaskSeparate) { + ctx->Driver.StencilMaskSeparate(ctx, face, mask); + } +} + + +/** + * Update derived stencil state. + */ +void +_mesa_update_stencil(GLcontext *ctx) +{ + if (ctx->Extensions.EXT_stencil_two_side) { + ctx->Stencil._TestTwoSide = ctx->Stencil.TestTwoSide; + } + else { + ctx->Stencil._TestTwoSide = + (ctx->Stencil.Function[0] != ctx->Stencil.Function[1] || + ctx->Stencil.FailFunc[0] != ctx->Stencil.FailFunc[1] || + ctx->Stencil.ZPassFunc[0] != ctx->Stencil.ZPassFunc[1] || + ctx->Stencil.ZFailFunc[0] != ctx->Stencil.ZFailFunc[1] || + ctx->Stencil.Ref[0] != ctx->Stencil.Ref[1] || + ctx->Stencil.ValueMask[0] != ctx->Stencil.ValueMask[1] || + ctx->Stencil.WriteMask[0] != ctx->Stencil.WriteMask[1]); + } +} + + /** * Initialize the context stipple state. * @@ -271,10 +529,9 @@ _mesa_ActiveStencilFaceEXT(GLenum face) * * Initializes __GLcontextRec::Stencil attribute group. */ -void _mesa_init_stencil( GLcontext * ctx ) +void +_mesa_init_stencil(GLcontext *ctx) { - - /* Stencil group */ ctx->Stencil.Enabled = GL_FALSE; ctx->Stencil.TestTwoSide = GL_FALSE; ctx->Stencil.ActiveFace = 0; /* 0 = GL_FRONT, 1 = GL_BACK */ @@ -288,9 +545,9 @@ void _mesa_init_stencil( GLcontext * ctx ) ctx->Stencil.ZFailFunc[1] = GL_KEEP; ctx->Stencil.Ref[0] = 0; ctx->Stencil.Ref[1] = 0; - ctx->Stencil.ValueMask[0] = STENCIL_MAX; - ctx->Stencil.ValueMask[1] = STENCIL_MAX; - ctx->Stencil.WriteMask[0] = STENCIL_MAX; - ctx->Stencil.WriteMask[1] = STENCIL_MAX; + ctx->Stencil.ValueMask[0] = ~0U; + ctx->Stencil.ValueMask[1] = ~0U; + ctx->Stencil.WriteMask[0] = ~0U; + ctx->Stencil.WriteMask[1] = ~0U; ctx->Stencil.Clear = 0; } diff --git a/src/kits/opengl/mesa/main/stencil.h b/src/kits/opengl/mesa/main/stencil.h index 5620d14c73..27c6362023 100644 --- a/src/kits/opengl/mesa/main/stencil.h +++ b/src/kits/opengl/mesa/main/stencil.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -55,6 +55,22 @@ extern void GLAPIENTRY _mesa_ActiveStencilFaceEXT(GLenum face); +extern void GLAPIENTRY +_mesa_StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); + + +extern void GLAPIENTRY +_mesa_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); + + +extern void GLAPIENTRY +_mesa_StencilMaskSeparate(GLenum face, GLuint mask); + + +extern void +_mesa_update_stencil(GLcontext *ctx); + + extern void _mesa_init_stencil( GLcontext * ctx ); diff --git a/src/kits/opengl/mesa/main/texcompress.c b/src/kits/opengl/mesa/main/texcompress.c index 396f14a566..c44d594d68 100644 --- a/src/kits/opengl/mesa/main/texcompress.c +++ b/src/kits/opengl/mesa/main/texcompress.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -34,20 +34,26 @@ #include "colormac.h" #include "context.h" #include "image.h" +#include "mipmap.h" #include "texcompress.h" #include "texformat.h" #include "texstore.h" + /** - * Get the list of supported internal compression formats. + * Return list of (and count of) all specific texture compression + * formats that are supported. * - * \param ctx GL context. - * \param formats the resulting format list (may be NULL). + * \param ctx the GL context + * \param formats the resulting format list (may be NULL). + * \param all if true return all formats, even those with some kind + * of restrictions/limitations (See GL_ARB_texture_compression + * spec for more info). * * \return number of formats. */ GLuint -_mesa_get_compressed_formats( GLcontext *ctx, GLint *formats ) +_mesa_get_compressed_formats(GLcontext *ctx, GLint *formats, GLboolean all) { GLuint n = 0; if (ctx->Extensions.ARB_texture_compression) { @@ -63,16 +69,20 @@ _mesa_get_compressed_formats( GLcontext *ctx, GLint *formats ) if (ctx->Extensions.EXT_texture_compression_s3tc) { if (formats) { formats[n++] = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; - /* Skip this one because it has a restriction (all transparent - * pixels become black). See the texture compressions spec for - * a detailed explanation. This is what NVIDIA does. - formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; - */ + /* This format has some restrictions/limitations and so should + * not be returned via the GL_COMPRESSED_TEXTURE_FORMATS query. + * Specifically, all transparent pixels become black. NVIDIA + * omits this format too. + */ + if (all) + formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; } else { n += 3; + if (all) + n += 1; } } if (ctx->Extensions.S3_s3tc) { @@ -86,6 +96,19 @@ _mesa_get_compressed_formats( GLcontext *ctx, GLint *formats ) n += 4; } } +#if FEATURE_EXT_texture_sRGB + if (ctx->Extensions.EXT_texture_sRGB) { + if (formats) { + formats[n++] = GL_COMPRESSED_SRGB_S3TC_DXT1_EXT; + formats[n++] = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; + formats[n++] = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; + formats[n++] = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; + } + else { + n += 4; + } + } +#endif /* FEATURE_EXT_texture_sRGB */ } return n; } @@ -101,23 +124,23 @@ _mesa_get_compressed_formats( GLcontext *ctx, GLint *formats ) * \param width texture width in texels. * \param height texture height in texels. * \param depth texture depth in texels. - * \param format - one of the specific compressed texture formats + * \param mesaFormat one of the MESA_FORMAT_* compressed formats * * \return size in bytes, or zero if bad format */ GLuint _mesa_compressed_texture_size( GLcontext *ctx, GLsizei width, GLsizei height, GLsizei depth, - GLenum format ) + GLuint mesaFormat ) { GLuint size; ASSERT(depth == 1); (void) depth; - switch (format) { - case GL_COMPRESSED_RGB_FXT1_3DFX: - case GL_COMPRESSED_RGBA_FXT1_3DFX: + switch (mesaFormat) { + case MESA_FORMAT_RGB_FXT1: + case MESA_FORMAT_RGBA_FXT1: /* round up width to next multiple of 8, height to next multiple of 4 */ width = (width + 7) & ~7; height = (height + 3) & ~3; @@ -129,10 +152,8 @@ _mesa_compressed_texture_size( GLcontext *ctx, if (size < 16) size = 16; return size; - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - case GL_RGB_S3TC: - case GL_RGB4_S3TC: + case MESA_FORMAT_RGB_DXT1: + case MESA_FORMAT_RGBA_DXT1: /* round up width, height to next multiple of 4 */ width = (width + 3) & ~3; height = (height + 3) & ~3; @@ -144,10 +165,8 @@ _mesa_compressed_texture_size( GLcontext *ctx, if (size < 8) size = 8; return size; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - case GL_RGBA_S3TC: - case GL_RGBA4_S3TC: + case MESA_FORMAT_RGBA_DXT3: + case MESA_FORMAT_RGBA_DXT5: /* round up width, height to next multiple of 4 */ width = (width + 3) & ~3; height = (height + 3) & ~3; @@ -160,42 +179,86 @@ _mesa_compressed_texture_size( GLcontext *ctx, size = 16; return size; default: - _mesa_problem(ctx, "bad texformat in compressed_texture_size"); + _mesa_problem(ctx, "bad mesaFormat in _mesa_compressed_texture_size"); return 0; } } +/** + * As above, but format is specified by a GLenum (GL_COMPRESSED_*) token. + * + * Note: This function CAN NOT return a padded hardware texture size. + * That's why we don't call the ctx->Driver.CompressedTextureSize() function. + * + * We use this function to validate the parameter + * of glCompressedTex[Sub]Image1/2/3D(), which must be an exact match. + */ +GLuint +_mesa_compressed_texture_size_glenum(GLcontext *ctx, + GLsizei width, GLsizei height, + GLsizei depth, GLenum glformat) +{ + GLuint mesaFormat; + + switch (glformat) { + case GL_COMPRESSED_RGB_FXT1_3DFX: + mesaFormat = MESA_FORMAT_RGB_FXT1; + break; + case GL_COMPRESSED_RGBA_FXT1_3DFX: + mesaFormat = MESA_FORMAT_RGBA_FXT1; + break; + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: + case GL_RGB_S3TC: + mesaFormat = MESA_FORMAT_RGB_DXT1; + break; + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: + case GL_RGB4_S3TC: + mesaFormat = MESA_FORMAT_RGBA_DXT1; + break; + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + case GL_RGBA_S3TC: + mesaFormat = MESA_FORMAT_RGBA_DXT3; + break; + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + case GL_RGBA4_S3TC: + mesaFormat = MESA_FORMAT_RGBA_DXT5; + break; + default: + return 0; + } + + return _mesa_compressed_texture_size(ctx, width, height, depth, mesaFormat); +} + + /* * Compute the bytes per row in a compressed texture image. * We use this for computing the destination address for sub-texture updates. - * \param format one of the specific texture compression formats + * \param mesaFormat one of the MESA_FORMAT_* compressed formats * \param width image width in pixels * \return stride, in bytes, between rows for compressed image */ GLint -_mesa_compressed_row_stride(GLenum format, GLsizei width) +_mesa_compressed_row_stride(GLuint mesaFormat, GLsizei width) { GLint stride; - switch (format) { - case GL_COMPRESSED_RGB_FXT1_3DFX: - case GL_COMPRESSED_RGBA_FXT1_3DFX: + switch (mesaFormat) { + case MESA_FORMAT_RGB_FXT1: + case MESA_FORMAT_RGBA_FXT1: stride = ((width + 7) / 8) * 16; /* 16 bytes per 8x4 tile */ break; - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - case GL_RGB_S3TC: - case GL_RGB4_S3TC: + case MESA_FORMAT_RGB_DXT1: + case MESA_FORMAT_RGBA_DXT1: stride = ((width + 3) / 4) * 8; /* 8 bytes per 4x4 tile */ break; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - case GL_RGBA_S3TC: - case GL_RGBA4_S3TC: + case MESA_FORMAT_RGBA_DXT3: + case MESA_FORMAT_RGBA_DXT5: stride = ((width + 3) / 4) * 16; /* 16 bytes per 4x4 tile */ break; default: + _mesa_problem(NULL, "bad mesaFormat in _mesa_compressed_row_stride"); return 0; } @@ -214,7 +277,7 @@ _mesa_compressed_row_stride(GLenum format, GLsizei width) */ GLubyte * _mesa_compressed_image_address(GLint col, GLint row, GLint img, - GLenum format, + GLuint mesaFormat, GLsizei width, const GLubyte *image) { GLubyte *addr; @@ -229,25 +292,22 @@ _mesa_compressed_image_address(GLint col, GLint row, GLint img, * offset = Z * (((width + X - 1) / X) * (row / Y) + col / X); */ - switch (format) { - case GL_COMPRESSED_RGB_FXT1_3DFX: - case GL_COMPRESSED_RGBA_FXT1_3DFX: + switch (mesaFormat) { + case MESA_FORMAT_RGB_FXT1: + case MESA_FORMAT_RGBA_FXT1: addr = (GLubyte *) image + 16 * (((width + 7) / 8) * (row / 4) + col / 8); break; - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - case GL_RGB_S3TC: - case GL_RGB4_S3TC: + case MESA_FORMAT_RGB_DXT1: + case MESA_FORMAT_RGBA_DXT1: addr = (GLubyte *) image + 8 * (((width + 3) / 4) * (row / 4) + col / 4); break; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - case GL_RGBA_S3TC: - case GL_RGBA4_S3TC: + case MESA_FORMAT_RGBA_DXT3: + case MESA_FORMAT_RGBA_DXT5: addr = (GLubyte *) image + 16 * (((width + 3) / 4) * (row / 4) + col / 4); break; default: - return 0; + _mesa_problem(NULL, "bad mesaFormat in _mesa_compressed_image_address"); + addr = NULL; } return addr; diff --git a/src/kits/opengl/mesa/main/texcompress.h b/src/kits/opengl/mesa/main/texcompress.h index 5007414546..44f3338222 100644 --- a/src/kits/opengl/mesa/main/texcompress.h +++ b/src/kits/opengl/mesa/main/texcompress.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -28,21 +28,27 @@ #include "mtypes.h" #if _HAVE_FULL_GL + extern GLuint -_mesa_get_compressed_formats( GLcontext *ctx, GLint *formats ); +_mesa_get_compressed_formats(GLcontext *ctx, GLint *formats, GLboolean all); extern GLuint _mesa_compressed_texture_size( GLcontext *ctx, GLsizei width, GLsizei height, GLsizei depth, - GLenum format ); + GLuint mesaFormat ); + +extern GLuint +_mesa_compressed_texture_size_glenum(GLcontext *ctx, + GLsizei width, GLsizei height, + GLsizei depth, GLenum glformat); extern GLint -_mesa_compressed_row_stride(GLenum format, GLsizei width); +_mesa_compressed_row_stride(GLuint mesaFormat, GLsizei width); extern GLubyte * _mesa_compressed_image_address(GLint col, GLint row, GLint img, - GLenum format, + GLuint mesaFormat, GLsizei width, const GLubyte *image); @@ -53,13 +59,16 @@ extern void _mesa_init_texture_fxt1( GLcontext *ctx ); +#else /* _HAVE_FULL_GL */ -#else +/* no-op macros */ #define _mesa_get_compressed_formats( c, f ) 0 #define _mesa_compressed_texture_size( c, w, h, d, f ) 0 +#define _mesa_compressed_texture_size_glenum( c, w, h, d, f ) 0 #define _mesa_compressed_row_stride( f, w) 0 #define _mesa_compressed_image_address(c, r, i, f, w, i2 ) 0 #define _mesa_compress_teximage( c, w, h, sF, s, sRS, dF, d, drs ) ((void)0) -#endif + +#endif /* _HAVE_FULL_GL */ #endif /* TEXCOMPRESS_H */ diff --git a/src/kits/opengl/mesa/main/texcompress_fxt1.c b/src/kits/opengl/mesa/main/texcompress_fxt1.c index 0cd122fc89..d3011cedce 100644 --- a/src/kits/opengl/mesa/main/texcompress_fxt1.c +++ b/src/kits/opengl/mesa/main/texcompress_fxt1.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -35,19 +35,20 @@ #include "context.h" #include "convolve.h" #include "image.h" +#include "mipmap.h" #include "texcompress.h" #include "texformat.h" #include "texstore.h" -static GLint +static void fxt1_encode (GLuint width, GLuint height, GLint comps, const void *source, GLint srcRowStride, void *dest, GLint destRowStride); void fxt1_decode_1 (const void *texture, GLint stride, - GLint i, GLint j, GLubyte *rgba); + GLint i, GLint j, GLchan *rgba); /** @@ -64,7 +65,7 @@ _mesa_init_texture_fxt1( GLcontext *ctx ) * Called via TexFormat->StoreImage to store an RGB_FXT1 texture. */ static GLboolean -texstore_rgb_fxt1(STORE_PARAMS) +texstore_rgb_fxt1(TEXSTORE_PARAMS) { const GLchan *pixels; GLint srcRowStride; @@ -76,7 +77,8 @@ texstore_rgb_fxt1(STORE_PARAMS) ASSERT(dstXoffset % 8 == 0); ASSERT(dstYoffset % 4 == 0); ASSERT(dstZoffset == 0); - (void) dstZoffset; (void) dstImageStride; + (void) dstZoffset; + (void) dstImageOffsets; if (srcFormat != GL_RGB || srcType != CHAN_TYPE || @@ -103,7 +105,7 @@ texstore_rgb_fxt1(STORE_PARAMS) } dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0, - GL_COMPRESSED_RGB_FXT1_3DFX, + dstFormat->MesaFormat, texWidth, (GLubyte *) dstAddr); fxt1_encode(srcWidth, srcHeight, 3, pixels, srcRowStride, @@ -120,7 +122,7 @@ texstore_rgb_fxt1(STORE_PARAMS) * Called via TexFormat->StoreImage to store an RGBA_FXT1 texture. */ static GLboolean -texstore_rgba_fxt1(STORE_PARAMS) +texstore_rgba_fxt1(TEXSTORE_PARAMS) { const GLchan *pixels; GLint srcRowStride; @@ -132,7 +134,8 @@ texstore_rgba_fxt1(STORE_PARAMS) ASSERT(dstXoffset % 8 == 0); ASSERT(dstYoffset % 4 == 0); ASSERT(dstZoffset == 0); - (void) dstZoffset; (void) dstImageStride; + (void) dstZoffset; + (void) dstImageOffsets; if (srcFormat != GL_RGBA || srcType != CHAN_TYPE || @@ -159,7 +162,7 @@ texstore_rgba_fxt1(STORE_PARAMS) } dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0, - GL_COMPRESSED_RGBA_FXT1_3DFX, + dstFormat->MesaFormat, texWidth, (GLubyte *) dstAddr); fxt1_encode(srcWidth, srcHeight, 4, pixels, srcRowStride, @@ -234,6 +237,7 @@ const struct gl_texture_format _mesa_texformat_rgb_fxt1 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 0, /* TexelBytes */ texstore_rgb_fxt1, /* StoreTexImageFunc */ NULL, /*impossible*/ /* FetchTexel1D */ @@ -242,6 +246,7 @@ const struct gl_texture_format _mesa_texformat_rgb_fxt1 = { NULL, /*impossible*/ /* FetchTexel1Df */ fetch_texel_2d_f_rgb_fxt1, /* FetchTexel2Df */ NULL, /*impossible*/ /* FetchTexel3Df */ + NULL /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgba_fxt1 = { @@ -256,6 +261,7 @@ const struct gl_texture_format _mesa_texformat_rgba_fxt1 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 0, /* TexelBytes */ texstore_rgba_fxt1, /* StoreTexImageFunc */ NULL, /*impossible*/ /* FetchTexel1D */ @@ -264,6 +270,7 @@ const struct gl_texture_format _mesa_texformat_rgba_fxt1 = { NULL, /*impossible*/ /* FetchTexel1Df */ fetch_texel_2d_f_rgba_fxt1, /* FetchTexel2Df */ NULL, /*impossible*/ /* FetchTexel3Df */ + NULL /* StoreTexel */ }; @@ -326,7 +333,6 @@ typedef struct { #endif /* !__GNUC__ */ - #define F(i) (GLfloat)1 /* can be used to obtain an oblong metric: 0.30 / 0.59 / 0.11 */ #define SAFECDOT 1 /* for paranoids */ @@ -475,7 +481,7 @@ fxt1_choose (GLfloat vec[][MAX_COMP], GLint nv, } hist[N_TEXELS]; GLint lenh = 0; - memset(hist, 0, sizeof(hist)); + _mesa_memset(hist, 0, sizeof(hist)); for (k = 0; k < n; k++) { GLint l; @@ -800,15 +806,15 @@ fxt1_quantize_ALPHA1 (GLuint *cc, } for (j1 = 0; j1 < 2; j1++) { for (j2 = 2; j2 < 4; j2++) { - GLfloat e = 0.0F; - for (i = 0; i < n_comp; i++) { - e += (tv[j1][i] - tv[j2][i]) * (tv[j1][i] - tv[j2][i]); - } - if (e < err) { - err = e; - v1 = j1; - v2 = j2; - } + GLfloat e = 0.0F; + for (i = 0; i < n_comp; i++) { + e += (tv[j1][i] - tv[j2][i]) * (tv[j1][i] - tv[j2][i]); + } + if (e < err) { + err = e; + v1 = j1; + v2 = j2; + } } } for (i = 0; i < n_comp; i++) { @@ -933,7 +939,7 @@ fxt1_quantize_HI (GLuint *cc, /* add in texels */ for (k = N_TEXELS - 1; k >= 0; k--) { GLint t = k * 3; - GLuint *kk = (GLuint *)((GLuint)cc + t / 8); + GLuint *kk = (GLuint *)((char *)cc + t / 8); GLint texel = n_vect + 1; /* transparent black */ if (!ISTBLACK(input[k])) { @@ -1012,7 +1018,7 @@ fxt1_quantize_MIXED1 (GLuint *cc, /* left microtile */ if (maxColL == -1) { /* all transparent black */ - cc[0] = ~0ul; + cc[0] = ~0u; for (i = 0; i < n_comp; i++) { vec[0][i] = 0; vec[1][i] = 0; @@ -1046,7 +1052,7 @@ fxt1_quantize_MIXED1 (GLuint *cc, /* right microtile */ if (maxColR == -1) { /* all transparent black */ - cc[1] = ~0ul; + cc[1] = ~0u; for (i = 0; i < n_comp; i++) { vec[2][i] = 0; vec[3][i] = 0; @@ -1269,7 +1275,7 @@ fxt1_quantize (GLuint *cc, const GLubyte *lines[], GLint comps) if (comps == 3) { /* make the whole block opaque */ - memset(input, -1, sizeof(input)); + _mesa_memset(input, -1, sizeof(input)); } /* 8 texels each line */ @@ -1333,7 +1339,7 @@ fxt1_quantize (GLuint *cc, const GLubyte *lines[], GLint comps) if (trualpha) { fxt1_quantize_ALPHA1(cc, input); } else if (l == 0) { - cc[0] = cc[1] = cc[2] = ~0ul; + cc[0] = cc[1] = cc[2] = ~0u; cc[3] = 0; } else if (l < N_TEXELS) { fxt1_quantize_MIXED1(cc, input); @@ -1347,31 +1353,58 @@ fxt1_quantize (GLuint *cc, const GLubyte *lines[], GLint comps) } -static GLint +static void fxt1_encode (GLuint width, GLuint height, GLint comps, const void *source, GLint srcRowStride, void *dest, GLint destRowStride) { GLuint x, y; const GLubyte *data; - GLuint *encoded = (GLuint *) dest; - GLubyte *newSource = NULL; + GLuint *encoded = (GLuint *)dest; + void *newSource = NULL; + + assert(comps == 3 || comps == 4); /* Replicate image if width is not M8 or height is not M4 */ if ((width & 7) | (height & 3)) { GLint newWidth = (width + 7) & ~7; GLint newHeight = (height + 3) & ~3; - newSource = (GLubyte *) - _mesa_malloc(comps * newWidth * newHeight * sizeof(GLubyte *)); + newSource = _mesa_malloc(comps * newWidth * newHeight * sizeof(GLchan)); + if (!newSource) { + GET_CURRENT_CONTEXT(ctx); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "texture compression"); + goto cleanUp; + } _mesa_upscale_teximage2d(width, height, newWidth, newHeight, comps, (const GLchan *) source, - srcRowStride, newSource); + srcRowStride, (GLchan *) newSource); source = newSource; width = newWidth; height = newHeight; srcRowStride = comps * newWidth; } + /* convert from 16/32-bit channels to GLubyte if needed */ + if (CHAN_TYPE != GL_UNSIGNED_BYTE) { + const GLuint n = width * height * comps; + const GLchan *src = (const GLchan *) source; + GLubyte *dest = (GLubyte *) _mesa_malloc(n * sizeof(GLubyte)); + GLuint i; + if (!dest) { + GET_CURRENT_CONTEXT(ctx); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "texture compression"); + goto cleanUp; + } + for (i = 0; i < n; i++) { + dest[i] = CHAN_TO_UBYTE(src[i]); + } + if (newSource != NULL) { + _mesa_free(newSource); + } + newSource = dest; /* we'll free this buffer before returning */ + source = dest; /* the new, GLubyte incoming image */ + } + data = (const GLubyte *) source; destRowStride = (destRowStride - width * 2) / 4; for (y = 0; y < height; y += 4) { @@ -1390,11 +1423,10 @@ fxt1_encode (GLuint width, GLuint height, GLint comps, encoded += destRowStride; } + cleanUp: if (newSource != NULL) { _mesa_free(newSource); } - - return 0; } @@ -1407,7 +1439,7 @@ fxt1_encode (GLuint width, GLuint height, GLint comps, /* lookup table for scaling 5 bit colors up to 8 bits */ -static GLubyte _rgb_scale_5[] = { +static const GLubyte _rgb_scale_5[] = { 0, 8, 16, 25, 33, 41, 49, 58, 66, 74, 82, 90, 99, 107, 115, 123, 132, 140, 148, 156, 165, 173, 181, 189, @@ -1415,7 +1447,7 @@ static GLubyte _rgb_scale_5[] = { }; /* lookup table for scaling 6 bit colors up to 8 bits */ -static GLubyte _rgb_scale_6[] = { +static const GLubyte _rgb_scale_6[] = { 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, @@ -1431,47 +1463,50 @@ static GLubyte _rgb_scale_6[] = { #define UP5(c) _rgb_scale_5[(c) & 31] #define UP6(c, b) _rgb_scale_6[(((c) & 31) << 1) | ((b) & 1)] #define LERP(n, t, c0, c1) (((n) - (t)) * (c0) + (t) * (c1) + (n) / 2) / (n) -#define ZERO_4UBV(v) *((GLuint *)(v)) = 0 static void -fxt1_decode_1HI (GLubyte *code, GLint t, GLubyte *rgba) +fxt1_decode_1HI (const GLubyte *code, GLint t, GLchan *rgba) { const GLuint *cc; t *= 3; - cc = (GLuint *)(code + t / 8); + cc = (const GLuint *)(code + t / 8); t = (cc[0] >> (t & 7)) & 7; if (t == 7) { - ZERO_4UBV(rgba); + rgba[RCOMP] = rgba[GCOMP] = rgba[BCOMP] = rgba[ACOMP] = 0; } else { - cc = (GLuint *)(code + 12); + GLubyte r, g, b; + cc = (const GLuint *)(code + 12); if (t == 0) { - rgba[BCOMP] = UP5(CC_SEL(cc, 0)); - rgba[GCOMP] = UP5(CC_SEL(cc, 5)); - rgba[RCOMP] = UP5(CC_SEL(cc, 10)); + b = UP5(CC_SEL(cc, 0)); + g = UP5(CC_SEL(cc, 5)); + r = UP5(CC_SEL(cc, 10)); } else if (t == 6) { - rgba[BCOMP] = UP5(CC_SEL(cc, 15)); - rgba[GCOMP] = UP5(CC_SEL(cc, 20)); - rgba[RCOMP] = UP5(CC_SEL(cc, 25)); + b = UP5(CC_SEL(cc, 15)); + g = UP5(CC_SEL(cc, 20)); + r = UP5(CC_SEL(cc, 25)); } else { - rgba[BCOMP] = LERP(6, t, UP5(CC_SEL(cc, 0)), UP5(CC_SEL(cc, 15))); - rgba[GCOMP] = LERP(6, t, UP5(CC_SEL(cc, 5)), UP5(CC_SEL(cc, 20))); - rgba[RCOMP] = LERP(6, t, UP5(CC_SEL(cc, 10)), UP5(CC_SEL(cc, 25))); + b = LERP(6, t, UP5(CC_SEL(cc, 0)), UP5(CC_SEL(cc, 15))); + g = LERP(6, t, UP5(CC_SEL(cc, 5)), UP5(CC_SEL(cc, 20))); + r = LERP(6, t, UP5(CC_SEL(cc, 10)), UP5(CC_SEL(cc, 25))); } - rgba[ACOMP] = 255; + rgba[RCOMP] = UBYTE_TO_CHAN(r); + rgba[GCOMP] = UBYTE_TO_CHAN(g); + rgba[BCOMP] = UBYTE_TO_CHAN(b); + rgba[ACOMP] = CHAN_MAX; } } static void -fxt1_decode_1CHROMA (GLubyte *code, GLint t, GLubyte *rgba) +fxt1_decode_1CHROMA (const GLubyte *code, GLint t, GLchan *rgba) { const GLuint *cc; GLuint kk; - cc = (GLuint *)code; + cc = (const GLuint *)code; if (t & 16) { cc++; t &= 15; @@ -1479,28 +1514,28 @@ fxt1_decode_1CHROMA (GLubyte *code, GLint t, GLubyte *rgba) t = (cc[0] >> (t * 2)) & 3; t *= 15; - cc = (GLuint *)(code + 8 + t / 8); + cc = (const GLuint *)(code + 8 + t / 8); kk = cc[0] >> (t & 7); - rgba[BCOMP] = UP5(kk); - rgba[GCOMP] = UP5(kk >> 5); - rgba[RCOMP] = UP5(kk >> 10); - rgba[ACOMP] = 255; + rgba[BCOMP] = UBYTE_TO_CHAN( UP5(kk) ); + rgba[GCOMP] = UBYTE_TO_CHAN( UP5(kk >> 5) ); + rgba[RCOMP] = UBYTE_TO_CHAN( UP5(kk >> 10) ); + rgba[ACOMP] = CHAN_MAX; } static void -fxt1_decode_1MIXED (GLubyte *code, GLint t, GLubyte *rgba) +fxt1_decode_1MIXED (const GLubyte *code, GLint t, GLchan *rgba) { const GLuint *cc; GLuint col[2][3]; GLint glsb, selb; - cc = (GLuint *)code; + cc = (const GLuint *)code; if (t & 16) { t &= 15; t = (cc[1] >> (t * 2)) & 3; /* col 2 */ - col[0][BCOMP] = (*(GLuint *)(code + 11)) >> 6; + col[0][BCOMP] = (*(const GLuint *)(code + 11)) >> 6; col[0][GCOMP] = CC_SEL(cc, 99); col[0][RCOMP] = CC_SEL(cc, 104); /* col 3 */ @@ -1527,51 +1562,60 @@ fxt1_decode_1MIXED (GLubyte *code, GLint t, GLubyte *rgba) /* alpha[0] == 1 */ if (t == 3) { - ZERO_4UBV(rgba); + /* zero */ + rgba[RCOMP] = rgba[BCOMP] = rgba[GCOMP] = rgba[ACOMP] = 0; } else { + GLubyte r, g, b; if (t == 0) { - rgba[BCOMP] = UP5(col[0][BCOMP]); - rgba[GCOMP] = UP5(col[0][GCOMP]); - rgba[RCOMP] = UP5(col[0][RCOMP]); + b = UP5(col[0][BCOMP]); + g = UP5(col[0][GCOMP]); + r = UP5(col[0][RCOMP]); } else if (t == 2) { - rgba[BCOMP] = UP5(col[1][BCOMP]); - rgba[GCOMP] = UP6(col[1][GCOMP], glsb); - rgba[RCOMP] = UP5(col[1][RCOMP]); + b = UP5(col[1][BCOMP]); + g = UP6(col[1][GCOMP], glsb); + r = UP5(col[1][RCOMP]); } else { - rgba[BCOMP] = (UP5(col[0][BCOMP]) + UP5(col[1][BCOMP])) / 2; - rgba[GCOMP] = (UP5(col[0][GCOMP]) + UP6(col[1][GCOMP], glsb)) / 2; - rgba[RCOMP] = (UP5(col[0][RCOMP]) + UP5(col[1][RCOMP])) / 2; + b = (UP5(col[0][BCOMP]) + UP5(col[1][BCOMP])) / 2; + g = (UP5(col[0][GCOMP]) + UP6(col[1][GCOMP], glsb)) / 2; + r = (UP5(col[0][RCOMP]) + UP5(col[1][RCOMP])) / 2; } - rgba[ACOMP] = 255; + rgba[RCOMP] = UBYTE_TO_CHAN(r); + rgba[GCOMP] = UBYTE_TO_CHAN(g); + rgba[BCOMP] = UBYTE_TO_CHAN(b); + rgba[ACOMP] = CHAN_MAX; } } else { /* alpha[0] == 0 */ - + GLubyte r, g, b; if (t == 0) { - rgba[BCOMP] = UP5(col[0][BCOMP]); - rgba[GCOMP] = UP6(col[0][GCOMP], glsb ^ selb); - rgba[RCOMP] = UP5(col[0][RCOMP]); + b = UP5(col[0][BCOMP]); + g = UP6(col[0][GCOMP], glsb ^ selb); + r = UP5(col[0][RCOMP]); } else if (t == 3) { - rgba[BCOMP] = UP5(col[1][BCOMP]); - rgba[GCOMP] = UP6(col[1][GCOMP], glsb); - rgba[RCOMP] = UP5(col[1][RCOMP]); + b = UP5(col[1][BCOMP]); + g = UP6(col[1][GCOMP], glsb); + r = UP5(col[1][RCOMP]); } else { - rgba[BCOMP] = LERP(3, t, UP5(col[0][BCOMP]), UP5(col[1][BCOMP])); - rgba[GCOMP] = LERP(3, t, UP6(col[0][GCOMP], glsb ^ selb), - UP6(col[1][GCOMP], glsb)); - rgba[RCOMP] = LERP(3, t, UP5(col[0][RCOMP]), UP5(col[1][RCOMP])); + b = LERP(3, t, UP5(col[0][BCOMP]), UP5(col[1][BCOMP])); + g = LERP(3, t, UP6(col[0][GCOMP], glsb ^ selb), + UP6(col[1][GCOMP], glsb)); + r = LERP(3, t, UP5(col[0][RCOMP]), UP5(col[1][RCOMP])); } - rgba[ACOMP] = 255; + rgba[RCOMP] = UBYTE_TO_CHAN(r); + rgba[GCOMP] = UBYTE_TO_CHAN(g); + rgba[BCOMP] = UBYTE_TO_CHAN(b); + rgba[ACOMP] = CHAN_MAX; } } static void -fxt1_decode_1ALPHA (GLubyte *code, GLint t, GLubyte *rgba) +fxt1_decode_1ALPHA (const GLubyte *code, GLint t, GLchan *rgba) { const GLuint *cc; + GLubyte r, g, b, a; - cc = (GLuint *)code; + cc = (const GLuint *)code; if (CC_SEL(cc, 124) & 1) { /* lerp == 1 */ GLuint col0[4]; @@ -1580,7 +1624,7 @@ fxt1_decode_1ALPHA (GLubyte *code, GLint t, GLubyte *rgba) t &= 15; t = (cc[1] >> (t * 2)) & 3; /* col 2 */ - col0[BCOMP] = (*(GLuint *)(code + 11)) >> 6; + col0[BCOMP] = (*(const GLuint *)(code + 11)) >> 6; col0[GCOMP] = CC_SEL(cc, 99); col0[RCOMP] = CC_SEL(cc, 104); col0[ACOMP] = CC_SEL(cc, 119); @@ -1594,20 +1638,20 @@ fxt1_decode_1ALPHA (GLubyte *code, GLint t, GLubyte *rgba) } if (t == 0) { - rgba[BCOMP] = UP5(col0[BCOMP]); - rgba[GCOMP] = UP5(col0[GCOMP]); - rgba[RCOMP] = UP5(col0[RCOMP]); - rgba[ACOMP] = UP5(col0[ACOMP]); + b = UP5(col0[BCOMP]); + g = UP5(col0[GCOMP]); + r = UP5(col0[RCOMP]); + a = UP5(col0[ACOMP]); } else if (t == 3) { - rgba[BCOMP] = UP5(CC_SEL(cc, 79)); - rgba[GCOMP] = UP5(CC_SEL(cc, 84)); - rgba[RCOMP] = UP5(CC_SEL(cc, 89)); - rgba[ACOMP] = UP5(CC_SEL(cc, 114)); + b = UP5(CC_SEL(cc, 79)); + g = UP5(CC_SEL(cc, 84)); + r = UP5(CC_SEL(cc, 89)); + a = UP5(CC_SEL(cc, 114)); } else { - rgba[BCOMP] = LERP(3, t, UP5(col0[BCOMP]), UP5(CC_SEL(cc, 79))); - rgba[GCOMP] = LERP(3, t, UP5(col0[GCOMP]), UP5(CC_SEL(cc, 84))); - rgba[RCOMP] = LERP(3, t, UP5(col0[RCOMP]), UP5(CC_SEL(cc, 89))); - rgba[ACOMP] = LERP(3, t, UP5(col0[ACOMP]), UP5(CC_SEL(cc, 114))); + b = LERP(3, t, UP5(col0[BCOMP]), UP5(CC_SEL(cc, 79))); + g = LERP(3, t, UP5(col0[GCOMP]), UP5(CC_SEL(cc, 84))); + r = LERP(3, t, UP5(col0[RCOMP]), UP5(CC_SEL(cc, 89))); + a = LERP(3, t, UP5(col0[ACOMP]), UP5(CC_SEL(cc, 114))); } } else { /* lerp == 0 */ @@ -1619,27 +1663,32 @@ fxt1_decode_1ALPHA (GLubyte *code, GLint t, GLubyte *rgba) t = (cc[0] >> (t * 2)) & 3; if (t == 3) { - ZERO_4UBV(rgba); + /* zero */ + r = g = b = a = 0; } else { GLuint kk; - cc = (GLuint *)code; - rgba[ACOMP] = UP5(cc[3] >> (t * 5 + 13)); + cc = (const GLuint *)code; + a = UP5(cc[3] >> (t * 5 + 13)); t *= 15; - cc = (GLuint *)(code + 8 + t / 8); + cc = (const GLuint *)(code + 8 + t / 8); kk = cc[0] >> (t & 7); - rgba[BCOMP] = UP5(kk); - rgba[GCOMP] = UP5(kk >> 5); - rgba[RCOMP] = UP5(kk >> 10); + b = UP5(kk); + g = UP5(kk >> 5); + r = UP5(kk >> 10); } } + rgba[RCOMP] = UBYTE_TO_CHAN(r); + rgba[GCOMP] = UBYTE_TO_CHAN(g); + rgba[BCOMP] = UBYTE_TO_CHAN(b); + rgba[ACOMP] = UBYTE_TO_CHAN(a); } void fxt1_decode_1 (const void *texture, GLint stride, /* in pixels */ - GLint i, GLint j, GLubyte *rgba) + GLint i, GLint j, GLchan *rgba) { - static void (*decode_1[]) (GLubyte *, GLint, GLubyte *) = { + static void (*decode_1[]) (const GLubyte *, GLint, GLchan *) = { fxt1_decode_1HI, /* cc-high = "00?" */ fxt1_decode_1HI, /* cc-high = "00?" */ fxt1_decode_1CHROMA, /* cc-chroma = "010" */ @@ -1650,9 +1699,9 @@ fxt1_decode_1 (const void *texture, GLint stride, /* in pixels */ fxt1_decode_1MIXED /* mixed = "1??" */ }; - GLubyte *code = (GLubyte *)texture + + const GLubyte *code = (const GLubyte *)texture + ((j / 4) * (stride / 8) + (i / 8)) * 16; - GLint mode = CC_SEL((GLuint *)code, 125); + GLint mode = CC_SEL(code, 125); GLint t = i & 7; if (t & 4) { diff --git a/src/kits/opengl/mesa/main/texcompress_s3tc.c b/src/kits/opengl/mesa/main/texcompress_s3tc.c index 44ab9e2aca..99b703de4a 100644 --- a/src/kits/opengl/mesa/main/texcompress_s3tc.c +++ b/src/kits/opengl/mesa/main/texcompress_s3tc.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -42,37 +42,103 @@ #include "texformat.h" #include "texstore.h" -#if USE_EXTERNAL_DXTN_LIB -#ifdef __MINGW32__ -/* no dlopen */ -#define DXTN_EXT "dxtn.dll" -#define DXTN_PREFIX "" -#define dlopen(name, mode) LoadLibrary(name) -#define dlsym(hndl, proc) GetProcAddress(hndl, proc) -#define dlclose(hndl) FreeLibrary(hndl) -#elif defined(__DJGPP__) -/* has dlopen, but doesn't like the names */ +#if USE_EXTERNAL_DXTN_LIB && !defined(__MINGW32__) #include -#define DXTN_EXT "dxtn.dxe" -#define DXTN_PREFIX "_" -#else -/* happiness */ -#include -#define DXTN_EXT "libtxc_dxtn.so" -#define DXTN_PREFIX "" #endif -#endif /* USE_EXTERNAL_DXTN_LIB */ + +#ifdef __MINGW32__ +#define DXTN_LIBNAME "dxtn.dll" +#define RTLD_LAZY 0 +#define RTLD_GLOBAL 0 +#elif defined(__DJGPP__) +#define DXTN_LIBNAME "dxtn.dxe" +#else +#define DXTN_LIBNAME "libtxc_dxtn.so" +#endif + typedef void (*dxtFetchTexelFuncExt)( GLint srcRowstride, GLubyte *pixdata, GLint col, GLint row, GLvoid *texelOut ); + dxtFetchTexelFuncExt fetch_ext_rgb_dxt1 = NULL; dxtFetchTexelFuncExt fetch_ext_rgba_dxt1 = NULL; dxtFetchTexelFuncExt fetch_ext_rgba_dxt3 = NULL; dxtFetchTexelFuncExt fetch_ext_rgba_dxt5 = NULL; -typedef void (*dxtCompressTexFuncExt)(GLint srccomps, GLint width, GLint height, const GLubyte *srcPixData, GLenum destformat, GLubyte *dest, GLint dstRowStride); -dxtCompressTexFuncExt ext_tx_compress_dxtn = NULL; +typedef void (*dxtCompressTexFuncExt)(GLint srccomps, GLint width, + GLint height, const GLchan *srcPixData, + GLenum destformat, GLubyte *dest, + GLint dstRowStride); + +static dxtCompressTexFuncExt ext_tx_compress_dxtn = NULL; + +static void *dxtlibhandle = NULL; + + +typedef void (*GenericFunc)(void); + + +/** + * Wrapper for dlopen(). + * XXX Probably move this and the following wrappers into imports.h someday. + */ +static void * +_mesa_dlopen(const char *libname, int flags) +{ +#if USE_EXTERNAL_DXTN_LIB +#ifdef __MINGW32__ + return LoadLibrary(libname); +#else + return dlopen(libname, flags); +#endif +#else + return (GenericFunc) NULL; +#endif /* USE_EXTERNAL_DXTN_LIB */ +} + + +/** + * Wrapper for dlsym() that does a cast to a generic function type, + * rather than a void *. This reduces the number of warnings that are + * generated. + */ +static GenericFunc +_mesa_dlsym(void *handle, const char *fname) +{ +#if USE_EXTERNAL_DXTN_LIB +#ifdef __MINGW32__ + return (GenericFunc) GetProcAddress(handle, fname); +#elif defined(__DJGPP__) + /* need '_' prefix on symbol names */ + char fname2[1000]; + fname2[0] = '_'; + _mesa_strncpy(fname2 + 1, fname, 998); + fname2[999] = 0; + return (GenericFunc) dlsym(handle, fname2); +#else + return (GenericFunc) dlsym(handle, fname); +#endif +#else + return (GenericFunc) NULL; +#endif /* USE_EXTERNAL_DXTN_LIB */ +} + + +/** + * Wrapper for dlclose(). + */ +static void +_mesa_dlclose(void *handle) +{ +#if USE_EXTERNAL_DXTN_LIB +#ifdef __MINGW32__ + FreeLibrary(handle); +#else + dlclose(handle); +#endif +#endif +} + -void *dxtlibhandle = NULL; void _mesa_init_texture_s3tc( GLcontext *ctx ) @@ -81,44 +147,45 @@ _mesa_init_texture_s3tc( GLcontext *ctx ) ctx->Mesa_DXTn = GL_FALSE; #if USE_EXTERNAL_DXTN_LIB if (!dxtlibhandle) { - dxtlibhandle = dlopen (DXTN_EXT, RTLD_LAZY | RTLD_GLOBAL); + dxtlibhandle = _mesa_dlopen(DXTN_LIBNAME, RTLD_LAZY | RTLD_GLOBAL); if (!dxtlibhandle) { - _mesa_warning(ctx, "couldn't open " DXTN_EXT ", software DXTn " - "compression/decompression unavailable\n"); + _mesa_warning(ctx, "couldn't open " DXTN_LIBNAME ", software DXTn " + "compression/decompression unavailable"); } else { /* the fetch functions are not per context! Might be problematic... */ - fetch_ext_rgb_dxt1 = (dxtFetchTexelFuncExt)dlsym(dxtlibhandle, DXTN_PREFIX "fetch_2d_texel_rgb_dxt1"); - if (fetch_ext_rgb_dxt1 != NULL) { - fetch_ext_rgba_dxt1 = (dxtFetchTexelFuncExt)dlsym(dxtlibhandle, DXTN_PREFIX "fetch_2d_texel_rgba_dxt1"); - } - if (fetch_ext_rgba_dxt1 != NULL) { - fetch_ext_rgba_dxt3 = (dxtFetchTexelFuncExt)dlsym(dxtlibhandle, DXTN_PREFIX "fetch_2d_texel_rgba_dxt3"); - } - if (fetch_ext_rgba_dxt3 != NULL) { - fetch_ext_rgba_dxt5 = (dxtFetchTexelFuncExt)dlsym(dxtlibhandle, DXTN_PREFIX "fetch_2d_texel_rgba_dxt5"); - } - if (fetch_ext_rgba_dxt5 != NULL) { - ext_tx_compress_dxtn = (dxtCompressTexFuncExt)dlsym(dxtlibhandle, DXTN_PREFIX "tx_compress_dxtn"); - } + fetch_ext_rgb_dxt1 = (dxtFetchTexelFuncExt) + _mesa_dlsym(dxtlibhandle, "fetch_2d_texel_rgb_dxt1"); + fetch_ext_rgba_dxt1 = (dxtFetchTexelFuncExt) + _mesa_dlsym(dxtlibhandle, "fetch_2d_texel_rgba_dxt1"); + fetch_ext_rgba_dxt3 = (dxtFetchTexelFuncExt) + _mesa_dlsym(dxtlibhandle, "fetch_2d_texel_rgba_dxt3"); + fetch_ext_rgba_dxt5 = (dxtFetchTexelFuncExt) + _mesa_dlsym(dxtlibhandle, "fetch_2d_texel_rgba_dxt5"); + ext_tx_compress_dxtn = (dxtCompressTexFuncExt) + _mesa_dlsym(dxtlibhandle, "tx_compress_dxtn"); - if (ext_tx_compress_dxtn == NULL) { + if (!fetch_ext_rgb_dxt1 || + !fetch_ext_rgba_dxt1 || + !fetch_ext_rgba_dxt3 || + !fetch_ext_rgba_dxt5 || + !ext_tx_compress_dxtn) { _mesa_warning(ctx, "couldn't reference all symbols in " - DXTN_EXT ", software DXTn compression/decompression " - "unavailable\n"); + DXTN_LIBNAME ", software DXTn compression/decompression " + "unavailable"); fetch_ext_rgb_dxt1 = NULL; fetch_ext_rgba_dxt1 = NULL; fetch_ext_rgba_dxt3 = NULL; fetch_ext_rgba_dxt5 = NULL; ext_tx_compress_dxtn = NULL; - dlclose(dxtlibhandle); + _mesa_dlclose(dxtlibhandle); dxtlibhandle = NULL; } } } if (dxtlibhandle) { ctx->Mesa_DXTn = GL_TRUE; - _mesa_warning(ctx, "software DXTn compression/decompression available\n"); + _mesa_warning(ctx, "software DXTn compression/decompression available"); } #else (void) ctx; @@ -129,7 +196,7 @@ _mesa_init_texture_s3tc( GLcontext *ctx ) * Called via TexFormat->StoreImage to store an RGB_DXT1 texture. */ static GLboolean -texstore_rgb_dxt1(STORE_PARAMS) +texstore_rgb_dxt1(TEXSTORE_PARAMS) { const GLchan *pixels; GLint srcRowStride; @@ -141,7 +208,8 @@ texstore_rgb_dxt1(STORE_PARAMS) ASSERT(dstXoffset % 4 == 0); ASSERT(dstYoffset % 4 == 0); ASSERT(dstZoffset % 4 == 0); - (void) dstZoffset; (void) dstImageStride; + (void) dstZoffset; + (void) dstImageOffsets; if (srcFormat != GL_RGB || srcType != CHAN_TYPE || @@ -168,11 +236,13 @@ texstore_rgb_dxt1(STORE_PARAMS) } dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0, - GL_COMPRESSED_RGB_S3TC_DXT1_EXT, + dstFormat->MesaFormat, texWidth, (GLubyte *) dstAddr); if (ext_tx_compress_dxtn) { - (*ext_tx_compress_dxtn)(3, srcWidth, srcHeight, pixels, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, dst, dstRowStride); + (*ext_tx_compress_dxtn)(3, srcWidth, srcHeight, pixels, + GL_COMPRESSED_RGB_S3TC_DXT1_EXT, + dst, dstRowStride); } else { _mesa_problem(ctx, "external dxt library not available"); @@ -189,7 +259,7 @@ texstore_rgb_dxt1(STORE_PARAMS) * Called via TexFormat->StoreImage to store an RGBA_DXT1 texture. */ static GLboolean -texstore_rgba_dxt1(STORE_PARAMS) +texstore_rgba_dxt1(TEXSTORE_PARAMS) { const GLchan *pixels; GLint srcRowStride; @@ -201,7 +271,8 @@ texstore_rgba_dxt1(STORE_PARAMS) ASSERT(dstXoffset % 4 == 0); ASSERT(dstYoffset % 4 == 0); ASSERT(dstZoffset % 4 == 0); - (void) dstZoffset; (void) dstImageStride; + (void) dstZoffset; + (void) dstImageOffsets; if (srcFormat != GL_RGBA || srcType != CHAN_TYPE || @@ -228,10 +299,12 @@ texstore_rgba_dxt1(STORE_PARAMS) } dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0, - GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, + dstFormat->MesaFormat, texWidth, (GLubyte *) dstAddr); if (ext_tx_compress_dxtn) { - (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, dst, dstRowStride); + (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels, + GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, + dst, dstRowStride); } else { _mesa_problem(ctx, "external dxt library not available"); @@ -248,7 +321,7 @@ texstore_rgba_dxt1(STORE_PARAMS) * Called via TexFormat->StoreImage to store an RGBA_DXT3 texture. */ static GLboolean -texstore_rgba_dxt3(STORE_PARAMS) +texstore_rgba_dxt3(TEXSTORE_PARAMS) { const GLchan *pixels; GLint srcRowStride; @@ -260,7 +333,8 @@ texstore_rgba_dxt3(STORE_PARAMS) ASSERT(dstXoffset % 4 == 0); ASSERT(dstYoffset % 4 == 0); ASSERT(dstZoffset % 4 == 0); - (void) dstZoffset; (void) dstImageStride; + (void) dstZoffset; + (void) dstImageOffsets; if (srcFormat != GL_RGBA || srcType != CHAN_TYPE || @@ -286,10 +360,12 @@ texstore_rgba_dxt3(STORE_PARAMS) } dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0, - GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, + dstFormat->MesaFormat, texWidth, (GLubyte *) dstAddr); if (ext_tx_compress_dxtn) { - (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, dst, dstRowStride); + (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels, + GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, + dst, dstRowStride); } else { _mesa_problem(ctx, "external dxt library not available"); @@ -306,7 +382,7 @@ texstore_rgba_dxt3(STORE_PARAMS) * Called via TexFormat->StoreImage to store an RGBA_DXT5 texture. */ static GLboolean -texstore_rgba_dxt5(STORE_PARAMS) +texstore_rgba_dxt5(TEXSTORE_PARAMS) { const GLchan *pixels; GLint srcRowStride; @@ -318,7 +394,8 @@ texstore_rgba_dxt5(STORE_PARAMS) ASSERT(dstXoffset % 4 == 0); ASSERT(dstYoffset % 4 == 0); ASSERT(dstZoffset % 4 == 0); - (void) dstZoffset; (void) dstImageStride; + (void) dstZoffset; + (void) dstImageOffsets; if (srcFormat != GL_RGBA || srcType != CHAN_TYPE || @@ -344,10 +421,12 @@ texstore_rgba_dxt5(STORE_PARAMS) } dst = _mesa_compressed_image_address(dstXoffset, dstYoffset, 0, - GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, + dstFormat->MesaFormat, texWidth, (GLubyte *) dstAddr); if (ext_tx_compress_dxtn) { - (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, dst, dstRowStride); + (*ext_tx_compress_dxtn)(4, srcWidth, srcHeight, pixels, + GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, + dst, dstRowStride); } else { _mesa_problem(ctx, "external dxt library not available"); @@ -364,12 +443,14 @@ static void fetch_texel_2d_rgb_dxt1( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - (void) k; - if (fetch_ext_rgb_dxt1) { - ASSERT (sizeof(GLchan) == sizeof(GLubyte)); - (*fetch_ext_rgb_dxt1)((texImage)->RowStride, (GLubyte *)(texImage)->Data, i, j, texel); - } - else _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); + (void) k; + if (fetch_ext_rgb_dxt1) { + ASSERT (sizeof(GLchan) == sizeof(GLubyte)); + fetch_ext_rgb_dxt1(texImage->RowStride, + (GLubyte *)(texImage)->Data, i, j, texel); + } + else + _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); } @@ -393,9 +474,11 @@ fetch_texel_2d_rgba_dxt1( const struct gl_texture_image *texImage, { (void) k; if (fetch_ext_rgba_dxt1) { - (*fetch_ext_rgba_dxt1)((texImage)->RowStride, (GLubyte *)(texImage)->Data, i, j, texel); - } - else _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); + fetch_ext_rgba_dxt1(texImage->RowStride, + (GLubyte *)(texImage)->Data, i, j, texel); + } + else + _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); } @@ -419,10 +502,12 @@ fetch_texel_2d_rgba_dxt3( const struct gl_texture_image *texImage, { (void) k; if (fetch_ext_rgba_dxt3) { - ASSERT (sizeof(GLchan) == sizeof(GLubyte)); - (*fetch_ext_rgba_dxt3)((texImage)->RowStride, (GLubyte *)(texImage)->Data, i, j, texel); - } - else _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); + ASSERT (sizeof(GLchan) == sizeof(GLubyte)); + fetch_ext_rgba_dxt3(texImage->RowStride, (GLubyte *)(texImage)->Data, + i, j, texel); + } + else + _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); } @@ -446,9 +531,11 @@ fetch_texel_2d_rgba_dxt5( const struct gl_texture_image *texImage, { (void) k; if (fetch_ext_rgba_dxt5) { - (*fetch_ext_rgba_dxt5)((texImage)->RowStride, (GLubyte *)(texImage)->Data, i, j, texel); - } - else _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); + fetch_ext_rgba_dxt5(texImage->RowStride, (GLubyte *)(texImage)->Data, + i, j, texel); + } + else + _mesa_debug(NULL, "attempted to decode s3tc texture without library available\n"); } @@ -478,6 +565,7 @@ const struct gl_texture_format _mesa_texformat_rgb_dxt1 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 0, /* TexelBytes */ texstore_rgb_dxt1, /* StoreTexImageFunc */ NULL, /*impossible*/ /* FetchTexel1D */ @@ -486,6 +574,7 @@ const struct gl_texture_format _mesa_texformat_rgb_dxt1 = { NULL, /*impossible*/ /* FetchTexel1Df */ fetch_texel_2d_f_rgb_dxt1, /* FetchTexel2Df */ NULL, /*impossible*/ /* FetchTexel3Df */ + NULL /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgba_dxt1 = { @@ -500,6 +589,7 @@ const struct gl_texture_format _mesa_texformat_rgba_dxt1 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 0, /* TexelBytes */ texstore_rgba_dxt1, /* StoreTexImageFunc */ NULL, /*impossible*/ /* FetchTexel1D */ @@ -508,6 +598,7 @@ const struct gl_texture_format _mesa_texformat_rgba_dxt1 = { NULL, /*impossible*/ /* FetchTexel1Df */ fetch_texel_2d_f_rgba_dxt1, /* FetchTexel2Df */ NULL, /*impossible*/ /* FetchTexel3Df */ + NULL /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgba_dxt3 = { @@ -522,6 +613,7 @@ const struct gl_texture_format _mesa_texformat_rgba_dxt3 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 0, /* TexelBytes */ texstore_rgba_dxt3, /* StoreTexImageFunc */ NULL, /*impossible*/ /* FetchTexel1D */ @@ -530,6 +622,7 @@ const struct gl_texture_format _mesa_texformat_rgba_dxt3 = { NULL, /*impossible*/ /* FetchTexel1Df */ fetch_texel_2d_f_rgba_dxt3, /* FetchTexel2Df */ NULL, /*impossible*/ /* FetchTexel3Df */ + NULL /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgba_dxt5 = { @@ -544,6 +637,7 @@ const struct gl_texture_format _mesa_texformat_rgba_dxt5 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 0, /* TexelBytes */ texstore_rgba_dxt5, /* StoreTexImageFunc */ NULL, /*impossible*/ /* FetchTexel1D */ @@ -552,4 +646,5 @@ const struct gl_texture_format _mesa_texformat_rgba_dxt5 = { NULL, /*impossible*/ /* FetchTexel1Df */ fetch_texel_2d_f_rgba_dxt5, /* FetchTexel2Df */ NULL, /*impossible*/ /* FetchTexel3Df */ + NULL /* StoreTexel */ }; diff --git a/src/kits/opengl/mesa/main/texenvprogram.c b/src/kits/opengl/mesa/main/texenvprogram.c new file mode 100644 index 0000000000..5329719cbb --- /dev/null +++ b/src/kits/opengl/mesa/main/texenvprogram.c @@ -0,0 +1,1281 @@ +/************************************************************************** + * + * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "glheader.h" +#include "macros.h" +#include "enums.h" +#include "texenvprogram.h" + +#include "shader/program.h" +#include "shader/program_instruction.h" + +/** + * According to Glean's texCombine test, no more than 21 instructions + * are needed. Allow a few extra just in case. + */ +#define MAX_INSTRUCTIONS 24 + +#define DISASSEM (MESA_VERBOSE & VERBOSE_DISASSEM) + +struct mode_opt { + GLuint Source:4; + GLuint Operand:3; +}; + +struct state_key { + GLbitfield enabled_units; + GLuint separate_specular:1; + GLuint fog_enabled:1; + GLuint fog_mode:2; + + struct { + GLuint enabled:1; + GLuint source_index:3; /* one of TEXTURE_1D/2D/3D/CUBE/RECT_INDEX */ + GLuint ScaleShiftRGB:2; + GLuint ScaleShiftA:2; + + GLuint NumArgsRGB:2; + GLuint ModeRGB:4; + struct mode_opt OptRGB[3]; + + GLuint NumArgsA:2; + GLuint ModeA:4; + struct mode_opt OptA[3]; + } unit[8]; +}; + +#define FOG_LINEAR 0 +#define FOG_EXP 1 +#define FOG_EXP2 2 +#define FOG_UNKNOWN 3 + +static GLuint translate_fog_mode( GLenum mode ) +{ + switch (mode) { + case GL_LINEAR: return FOG_LINEAR; + case GL_EXP: return FOG_EXP; + case GL_EXP2: return FOG_EXP2; + default: return FOG_UNKNOWN; + } +} + +#define OPR_SRC_COLOR 0 +#define OPR_ONE_MINUS_SRC_COLOR 1 +#define OPR_SRC_ALPHA 2 +#define OPR_ONE_MINUS_SRC_ALPHA 3 +#define OPR_ZERO 4 +#define OPR_ONE 5 +#define OPR_UNKNOWN 7 + +static GLuint translate_operand( GLenum operand ) +{ + switch (operand) { + case GL_SRC_COLOR: return OPR_SRC_COLOR; + case GL_ONE_MINUS_SRC_COLOR: return OPR_ONE_MINUS_SRC_COLOR; + case GL_SRC_ALPHA: return OPR_SRC_ALPHA; + case GL_ONE_MINUS_SRC_ALPHA: return OPR_ONE_MINUS_SRC_ALPHA; + case GL_ZERO: return OPR_ZERO; + case GL_ONE: return OPR_ONE; + default: return OPR_UNKNOWN; + } +} + +#define SRC_TEXTURE 0 +#define SRC_TEXTURE0 1 +#define SRC_TEXTURE1 2 +#define SRC_TEXTURE2 3 +#define SRC_TEXTURE3 4 +#define SRC_TEXTURE4 5 +#define SRC_TEXTURE5 6 +#define SRC_TEXTURE6 7 +#define SRC_TEXTURE7 8 +#define SRC_CONSTANT 9 +#define SRC_PRIMARY_COLOR 10 +#define SRC_PREVIOUS 11 +#define SRC_UNKNOWN 15 + +static GLuint translate_source( GLenum src ) +{ + switch (src) { + case GL_TEXTURE: return SRC_TEXTURE; + case GL_TEXTURE0: + case GL_TEXTURE1: + case GL_TEXTURE2: + case GL_TEXTURE3: + case GL_TEXTURE4: + case GL_TEXTURE5: + case GL_TEXTURE6: + case GL_TEXTURE7: return SRC_TEXTURE0 + (src - GL_TEXTURE0); + case GL_CONSTANT: return SRC_CONSTANT; + case GL_PRIMARY_COLOR: return SRC_PRIMARY_COLOR; + case GL_PREVIOUS: return SRC_PREVIOUS; + default: return SRC_UNKNOWN; + } +} + +#define MODE_REPLACE 0 +#define MODE_MODULATE 1 +#define MODE_ADD 2 +#define MODE_ADD_SIGNED 3 +#define MODE_INTERPOLATE 4 +#define MODE_SUBTRACT 5 +#define MODE_DOT3_RGB 6 +#define MODE_DOT3_RGB_EXT 7 +#define MODE_DOT3_RGBA 8 +#define MODE_DOT3_RGBA_EXT 9 +#define MODE_MODULATE_ADD_ATI 10 +#define MODE_MODULATE_SIGNED_ADD_ATI 11 +#define MODE_MODULATE_SUBTRACT_ATI 12 +#define MODE_UNKNOWN 15 + +static GLuint translate_mode( GLenum mode ) +{ + switch (mode) { + case GL_REPLACE: return MODE_REPLACE; + case GL_MODULATE: return MODE_MODULATE; + case GL_ADD: return MODE_ADD; + case GL_ADD_SIGNED: return MODE_ADD_SIGNED; + case GL_INTERPOLATE: return MODE_INTERPOLATE; + case GL_SUBTRACT: return MODE_SUBTRACT; + case GL_DOT3_RGB: return MODE_DOT3_RGB; + case GL_DOT3_RGB_EXT: return MODE_DOT3_RGB_EXT; + case GL_DOT3_RGBA: return MODE_DOT3_RGBA; + case GL_DOT3_RGBA_EXT: return MODE_DOT3_RGBA_EXT; + case GL_MODULATE_ADD_ATI: return MODE_MODULATE_ADD_ATI; + case GL_MODULATE_SIGNED_ADD_ATI: return MODE_MODULATE_SIGNED_ADD_ATI; + case GL_MODULATE_SUBTRACT_ATI: return MODE_MODULATE_SUBTRACT_ATI; + default: return MODE_UNKNOWN; + } +} + +#define TEXTURE_UNKNOWN_INDEX 7 +static GLuint translate_tex_src_bit( GLbitfield bit ) +{ + switch (bit) { + case TEXTURE_1D_BIT: return TEXTURE_1D_INDEX; + case TEXTURE_2D_BIT: return TEXTURE_2D_INDEX; + case TEXTURE_RECT_BIT: return TEXTURE_RECT_INDEX; + case TEXTURE_3D_BIT: return TEXTURE_3D_INDEX; + case TEXTURE_CUBE_BIT: return TEXTURE_CUBE_INDEX; + default: return TEXTURE_UNKNOWN_INDEX; + } +} + +/** + * Examine current texture environment state and generate a unique + * key to identify it. + */ +static void make_state_key( GLcontext *ctx, struct state_key *key ) +{ + GLuint i, j; + + memset(key, 0, sizeof(*key)); + + for (i=0;iTexture.Unit[i]; + + if (!texUnit->_ReallyEnabled) + continue; + + key->unit[i].enabled = 1; + key->enabled_units |= (1<unit[i].source_index = + translate_tex_src_bit(texUnit->_ReallyEnabled); + + key->unit[i].NumArgsRGB = texUnit->_CurrentCombine->_NumArgsRGB; + key->unit[i].NumArgsA = texUnit->_CurrentCombine->_NumArgsA; + + key->unit[i].ModeRGB = + translate_mode(texUnit->_CurrentCombine->ModeRGB); + key->unit[i].ModeA = + translate_mode(texUnit->_CurrentCombine->ModeA); + + key->unit[i].ScaleShiftRGB = texUnit->_CurrentCombine->ScaleShiftRGB; + key->unit[i].ScaleShiftA = texUnit->_CurrentCombine->ScaleShiftA; + + for (j=0;j<3;j++) { + key->unit[i].OptRGB[j].Operand = + translate_operand(texUnit->_CurrentCombine->OperandRGB[j]); + key->unit[i].OptA[j].Operand = + translate_operand(texUnit->_CurrentCombine->OperandA[j]); + key->unit[i].OptRGB[j].Source = + translate_source(texUnit->_CurrentCombine->SourceRGB[j]); + key->unit[i].OptA[j].Source = + translate_source(texUnit->_CurrentCombine->SourceA[j]); + } + } + + if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) + key->separate_specular = 1; + + if (ctx->Fog.Enabled) { + key->fog_enabled = 1; + key->fog_mode = translate_fog_mode(ctx->Fog.Mode); + } +} + +/* Use uregs to represent registers internally, translate to Mesa's + * expected formats on emit. + * + * NOTE: These are passed by value extensively in this file rather + * than as usual by pointer reference. If this disturbs you, try + * remembering they are just 32bits in size. + * + * GCC is smart enough to deal with these dword-sized structures in + * much the same way as if I had defined them as dwords and was using + * macros to access and set the fields. This is much nicer and easier + * to evolve. + */ +struct ureg { + GLuint file:4; + GLuint idx:8; + GLuint negatebase:1; + GLuint abs:1; + GLuint negateabs:1; + GLuint swz:12; + GLuint pad:5; +}; + +static const struct ureg undef = { + PROGRAM_UNDEFINED, + ~0, + 0, + 0, + 0, + 0, + 0 +}; + + +/* State used to build the fragment program: + */ +struct texenv_fragment_program { + struct gl_fragment_program *program; + GLcontext *ctx; + struct state_key *state; + + GLbitfield alu_temps; /* Track texture indirections, see spec. */ + GLbitfield temps_output; /* Track texture indirections, see spec. */ + GLbitfield temp_in_use; /* Tracks temporary regs which are in use. */ + GLboolean error; + + struct ureg src_texture[MAX_TEXTURE_UNITS]; + /* Reg containing each texture unit's sampled texture color, + * else undef. + */ + + struct ureg src_previous; /* Reg containing color from previous + * stage. May need to be decl'd. + */ + + GLuint last_tex_stage; /* Number of last enabled texture unit */ + + struct ureg half; + struct ureg one; + struct ureg zero; +}; + + + +static struct ureg make_ureg(GLuint file, GLuint idx) +{ + struct ureg reg; + reg.file = file; + reg.idx = idx; + reg.negatebase = 0; + reg.abs = 0; + reg.negateabs = 0; + reg.swz = SWIZZLE_NOOP; + reg.pad = 0; + return reg; +} + +static struct ureg swizzle( struct ureg reg, int x, int y, int z, int w ) +{ + reg.swz = MAKE_SWIZZLE4(GET_SWZ(reg.swz, x), + GET_SWZ(reg.swz, y), + GET_SWZ(reg.swz, z), + GET_SWZ(reg.swz, w)); + + return reg; +} + +static struct ureg swizzle1( struct ureg reg, int x ) +{ + return swizzle(reg, x, x, x, x); +} + +static struct ureg negate( struct ureg reg ) +{ + reg.negatebase ^= 1; + return reg; +} + +static GLboolean is_undef( struct ureg reg ) +{ + return reg.file == PROGRAM_UNDEFINED; +} + + +static struct ureg get_temp( struct texenv_fragment_program *p ) +{ + GLint bit; + + /* First try and reuse temps which have been used already: + */ + bit = _mesa_ffs( ~p->temp_in_use & p->alu_temps ); + + /* Then any unused temporary: + */ + if (!bit) + bit = _mesa_ffs( ~p->temp_in_use ); + + if (!bit) { + _mesa_problem(NULL, "%s: out of temporaries\n", __FILE__); + _mesa_exit(1); + } + + if ((GLuint) bit > p->program->Base.NumTemporaries) + p->program->Base.NumTemporaries = bit; + + p->temp_in_use |= 1<<(bit-1); + return make_ureg(PROGRAM_TEMPORARY, (bit-1)); +} + +static struct ureg get_tex_temp( struct texenv_fragment_program *p ) +{ + int bit; + + /* First try to find availble temp not previously used (to avoid + * starting a new texture indirection). According to the spec, the + * ~p->temps_output isn't necessary, but will keep it there for + * now: + */ + bit = _mesa_ffs( ~p->temp_in_use & ~p->alu_temps & ~p->temps_output ); + + /* Then any unused temporary: + */ + if (!bit) + bit = _mesa_ffs( ~p->temp_in_use ); + + if (!bit) { + _mesa_problem(NULL, "%s: out of temporaries\n", __FILE__); + _mesa_exit(1); + } + + if ((GLuint) bit > p->program->Base.NumTemporaries) + p->program->Base.NumTemporaries = bit; + + p->temp_in_use |= 1<<(bit-1); + return make_ureg(PROGRAM_TEMPORARY, (bit-1)); +} + + +static void release_temps( struct texenv_fragment_program *p ) +{ + GLuint max_temp = p->ctx->Const.FragmentProgram.MaxTemps; + + /* KW: To support tex_env_crossbar, don't release the registers in + * temps_output. + */ + if (max_temp >= sizeof(int) * 8) + p->temp_in_use = p->temps_output; + else + p->temp_in_use = ~((1<temps_output; +} + + +static struct ureg register_param6( struct texenv_fragment_program *p, + GLint s0, + GLint s1, + GLint s2, + GLint s3, + GLint s4, + GLint s5) +{ + GLint tokens[6]; + GLuint idx; + tokens[0] = s0; + tokens[1] = s1; + tokens[2] = s2; + tokens[3] = s3; + tokens[4] = s4; + tokens[5] = s5; + idx = _mesa_add_state_reference( p->program->Base.Parameters, tokens ); + return make_ureg(PROGRAM_STATE_VAR, idx); +} + + +#define register_param1(p,s0) register_param6(p,s0,0,0,0,0,0) +#define register_param2(p,s0,s1) register_param6(p,s0,s1,0,0,0,0) +#define register_param3(p,s0,s1,s2) register_param6(p,s0,s1,s2,0,0,0) +#define register_param4(p,s0,s1,s2,s3) register_param6(p,s0,s1,s2,s3,0,0) + + +static struct ureg register_input( struct texenv_fragment_program *p, GLuint input ) +{ + p->program->Base.InputsRead |= (1 << input); + return make_ureg(PROGRAM_INPUT, input); +} + + +static void emit_arg( struct prog_src_register *reg, + struct ureg ureg ) +{ + reg->File = ureg.file; + reg->Index = ureg.idx; + reg->Swizzle = ureg.swz; + reg->NegateBase = ureg.negatebase ? 0xf : 0x0; + reg->Abs = ureg.abs; + reg->NegateAbs = ureg.negateabs; +} + +static void emit_dst( struct prog_dst_register *dst, + struct ureg ureg, GLuint mask ) +{ + dst->File = ureg.file; + dst->Index = ureg.idx; + dst->WriteMask = mask; + dst->CondMask = 0; + dst->CondSwizzle = 0; +} + +static struct prog_instruction * +emit_op(struct texenv_fragment_program *p, + enum prog_opcode op, + struct ureg dest, + GLuint mask, + GLboolean saturate, + struct ureg src0, + struct ureg src1, + struct ureg src2 ) +{ + GLuint nr = p->program->Base.NumInstructions++; + struct prog_instruction *inst = &p->program->Base.Instructions[nr]; + + _mesa_init_instructions(inst, 1); + inst->Opcode = op; + + emit_arg( &inst->SrcReg[0], src0 ); + emit_arg( &inst->SrcReg[1], src1 ); + emit_arg( &inst->SrcReg[2], src2 ); + + inst->SaturateMode = saturate ? SATURATE_ZERO_ONE : SATURATE_OFF; + + emit_dst( &inst->DstReg, dest, mask ); + + /* Accounting for indirection tracking: + */ + if (dest.file == PROGRAM_TEMPORARY) + p->temps_output |= 1 << dest.idx; + + return inst; +} + + +static struct ureg emit_arith( struct texenv_fragment_program *p, + enum prog_opcode op, + struct ureg dest, + GLuint mask, + GLboolean saturate, + struct ureg src0, + struct ureg src1, + struct ureg src2 ) +{ + emit_op(p, op, dest, mask, saturate, src0, src1, src2); + + /* Accounting for indirection tracking: + */ + if (src0.file == PROGRAM_TEMPORARY) + p->alu_temps |= 1 << src0.idx; + + if (!is_undef(src1) && src1.file == PROGRAM_TEMPORARY) + p->alu_temps |= 1 << src1.idx; + + if (!is_undef(src2) && src2.file == PROGRAM_TEMPORARY) + p->alu_temps |= 1 << src2.idx; + + if (dest.file == PROGRAM_TEMPORARY) + p->alu_temps |= 1 << dest.idx; + + p->program->NumAluInstructions++; + return dest; +} + +static struct ureg emit_texld( struct texenv_fragment_program *p, + enum prog_opcode op, + struct ureg dest, + GLuint destmask, + GLuint tex_unit, + GLuint tex_idx, + struct ureg coord ) +{ + struct prog_instruction *inst = emit_op( p, op, + dest, destmask, + GL_FALSE, /* don't saturate? */ + coord, /* arg 0? */ + undef, + undef); + + inst->TexSrcTarget = tex_idx; + inst->TexSrcUnit = tex_unit; + + p->program->NumTexInstructions++; + + /* Is this a texture indirection? + */ + if ((coord.file == PROGRAM_TEMPORARY && + (p->temps_output & (1<alu_temps & (1<program->NumTexIndirections++; + p->temps_output = 1<alu_temps = 0; + assert(0); /* KW: texture env crossbar */ + } + + return dest; +} + + +static struct ureg register_const4f( struct texenv_fragment_program *p, + GLfloat s0, + GLfloat s1, + GLfloat s2, + GLfloat s3) +{ + GLfloat values[4]; + GLuint idx; + values[0] = s0; + values[1] = s1; + values[2] = s2; + values[3] = s3; + idx = _mesa_add_unnamed_constant( p->program->Base.Parameters, values, 4 ); + return make_ureg(PROGRAM_STATE_VAR, idx); +} + +#define register_scalar_const(p, s0) register_const4f(p, s0, s0, s0, s0) +#define register_const1f(p, s0) register_const4f(p, s0, 0, 0, 1) +#define register_const2f(p, s0, s1) register_const4f(p, s0, s1, 0, 1) +#define register_const3f(p, s0, s1, s2) register_const4f(p, s0, s1, s2, 1) + + +static struct ureg get_one( struct texenv_fragment_program *p ) +{ + if (is_undef(p->one)) + p->one = register_scalar_const(p, 1.0); + return p->one; +} + +static struct ureg get_half( struct texenv_fragment_program *p ) +{ + if (is_undef(p->half)) + p->half = register_scalar_const(p, 0.5); + return p->half; +} + +static struct ureg get_zero( struct texenv_fragment_program *p ) +{ + if (is_undef(p->zero)) + p->zero = register_scalar_const(p, 0.0); + return p->zero; +} + + +static void program_error( struct texenv_fragment_program *p, const char *msg ) +{ + _mesa_problem(NULL, msg); + p->error = 1; +} + +static struct ureg get_source( struct texenv_fragment_program *p, + GLuint src, GLuint unit ) +{ + switch (src) { + case SRC_TEXTURE: + assert(!is_undef(p->src_texture[unit])); + return p->src_texture[unit]; + + case SRC_TEXTURE0: + case SRC_TEXTURE1: + case SRC_TEXTURE2: + case SRC_TEXTURE3: + case SRC_TEXTURE4: + case SRC_TEXTURE5: + case SRC_TEXTURE6: + case SRC_TEXTURE7: + assert(!is_undef(p->src_texture[src - SRC_TEXTURE0])); + return p->src_texture[src - SRC_TEXTURE0]; + + case SRC_CONSTANT: + return register_param2(p, STATE_TEXENV_COLOR, unit); + + case SRC_PRIMARY_COLOR: + return register_input(p, FRAG_ATTRIB_COL0); + + case SRC_PREVIOUS: + default: + if (is_undef(p->src_previous)) + return register_input(p, FRAG_ATTRIB_COL0); + else + return p->src_previous; + } +} + +static struct ureg emit_combine_source( struct texenv_fragment_program *p, + GLuint mask, + GLuint unit, + GLuint source, + GLuint operand ) +{ + struct ureg arg, src, one; + + src = get_source(p, source, unit); + + switch (operand) { + case OPR_ONE_MINUS_SRC_COLOR: + /* Get unused tmp, + * Emit tmp = 1.0 - arg.xyzw + */ + arg = get_temp( p ); + one = get_one( p ); + return emit_arith( p, OPCODE_SUB, arg, mask, 0, one, src, undef); + + case OPR_SRC_ALPHA: + if (mask == WRITEMASK_W) + return src; + else + return swizzle1( src, SWIZZLE_W ); + case OPR_ONE_MINUS_SRC_ALPHA: + /* Get unused tmp, + * Emit tmp = 1.0 - arg.wwww + */ + arg = get_temp(p); + one = get_one(p); + return emit_arith(p, OPCODE_SUB, arg, mask, 0, + one, swizzle1(src, SWIZZLE_W), undef); + case OPR_ZERO: + return get_zero(p); + case OPR_ONE: + return get_one(p); + case OPR_SRC_COLOR: + default: + return src; + } +} + +static GLboolean args_match( struct state_key *key, GLuint unit ) +{ + GLuint i, nr = key->unit[unit].NumArgsRGB; + + for (i = 0 ; i < nr ; i++) { + if (key->unit[unit].OptA[i].Source != key->unit[unit].OptRGB[i].Source) + return GL_FALSE; + + switch(key->unit[unit].OptA[i].Operand) { + case OPR_SRC_ALPHA: + switch(key->unit[unit].OptRGB[i].Operand) { + case OPR_SRC_COLOR: + case OPR_SRC_ALPHA: + break; + default: + return GL_FALSE; + } + break; + case OPR_ONE_MINUS_SRC_ALPHA: + switch(key->unit[unit].OptRGB[i].Operand) { + case OPR_ONE_MINUS_SRC_COLOR: + case OPR_ONE_MINUS_SRC_ALPHA: + break; + default: + return GL_FALSE; + } + break; + default: + return GL_FALSE; /* impossible */ + } + } + + return GL_TRUE; +} + +static struct ureg emit_combine( struct texenv_fragment_program *p, + struct ureg dest, + GLuint mask, + GLboolean saturate, + GLuint unit, + GLuint nr, + GLuint mode, + const struct mode_opt *opt) +{ + struct ureg src[3]; + struct ureg tmp, half; + GLuint i; + + tmp = undef; /* silence warning (bug 5318) */ + + for (i = 0; i < nr; i++) + src[i] = emit_combine_source( p, mask, unit, opt[i].Source, opt[i].Operand ); + + switch (mode) { + case MODE_REPLACE: + if (mask == WRITEMASK_XYZW && !saturate) + return src[0]; + else + return emit_arith( p, OPCODE_MOV, dest, mask, saturate, src[0], undef, undef ); + case MODE_MODULATE: + return emit_arith( p, OPCODE_MUL, dest, mask, saturate, + src[0], src[1], undef ); + case MODE_ADD: + return emit_arith( p, OPCODE_ADD, dest, mask, saturate, + src[0], src[1], undef ); + case MODE_ADD_SIGNED: + /* tmp = arg0 + arg1 + * result = tmp - .5 + */ + half = get_half(p); + tmp = get_temp( p ); + emit_arith( p, OPCODE_ADD, tmp, mask, 0, src[0], src[1], undef ); + emit_arith( p, OPCODE_SUB, dest, mask, saturate, tmp, half, undef ); + return dest; + case MODE_INTERPOLATE: + /* Arg0 * (Arg2) + Arg1 * (1-Arg2) -- note arguments are reordered: + */ + return emit_arith( p, OPCODE_LRP, dest, mask, saturate, src[2], src[0], src[1] ); + + case MODE_SUBTRACT: + return emit_arith( p, OPCODE_SUB, dest, mask, saturate, src[0], src[1], undef ); + + case MODE_DOT3_RGBA: + case MODE_DOT3_RGBA_EXT: + case MODE_DOT3_RGB_EXT: + case MODE_DOT3_RGB: { + struct ureg tmp0 = get_temp( p ); + struct ureg tmp1 = get_temp( p ); + struct ureg neg1 = register_scalar_const(p, -1); + struct ureg two = register_scalar_const(p, 2); + + /* tmp0 = 2*src0 - 1 + * tmp1 = 2*src1 - 1 + * + * dst = tmp0 dot3 tmp1 + */ + emit_arith( p, OPCODE_MAD, tmp0, WRITEMASK_XYZW, 0, + two, src[0], neg1); + + if (_mesa_memcmp(&src[0], &src[1], sizeof(struct ureg)) == 0) + tmp1 = tmp0; + else + emit_arith( p, OPCODE_MAD, tmp1, WRITEMASK_XYZW, 0, + two, src[1], neg1); + emit_arith( p, OPCODE_DP3, dest, mask, saturate, tmp0, tmp1, undef); + return dest; + } + case MODE_MODULATE_ADD_ATI: + /* Arg0 * Arg2 + Arg1 */ + return emit_arith( p, OPCODE_MAD, dest, mask, saturate, + src[0], src[2], src[1] ); + case MODE_MODULATE_SIGNED_ADD_ATI: { + /* Arg0 * Arg2 + Arg1 - 0.5 */ + struct ureg tmp0 = get_temp(p); + half = get_half(p); + emit_arith( p, OPCODE_MAD, tmp0, mask, 0, src[0], src[2], src[1] ); + emit_arith( p, OPCODE_SUB, dest, mask, saturate, tmp0, half, undef ); + return dest; + } + case MODE_MODULATE_SUBTRACT_ATI: + /* Arg0 * Arg2 - Arg1 */ + emit_arith( p, OPCODE_MAD, dest, mask, 0, src[0], src[2], negate(src[1]) ); + return dest; + default: + return src[0]; + } +} + + +/** + * Generate instructions for one texture unit's env/combiner mode. + */ +static struct ureg +emit_texenv(struct texenv_fragment_program *p, GLuint unit) +{ + struct state_key *key = p->state; + GLboolean saturate = (unit < p->last_tex_stage); + GLuint rgb_shift, alpha_shift; + struct ureg out, shift; + struct ureg dest; + + if (!key->unit[unit].enabled) { + return get_source(p, SRC_PREVIOUS, 0); + } + + switch (key->unit[unit].ModeRGB) { + case MODE_DOT3_RGB_EXT: + alpha_shift = key->unit[unit].ScaleShiftA; + rgb_shift = 0; + break; + case MODE_DOT3_RGBA_EXT: + alpha_shift = 0; + rgb_shift = 0; + break; + default: + rgb_shift = key->unit[unit].ScaleShiftRGB; + alpha_shift = key->unit[unit].ScaleShiftA; + break; + } + + /* If this is the very last calculation, emit direct to output reg: + */ + if (key->separate_specular || + unit != p->last_tex_stage || + alpha_shift || + rgb_shift) + dest = get_temp( p ); + else + dest = make_ureg(PROGRAM_OUTPUT, FRAG_RESULT_COLR); + + /* Emit the RGB and A combine ops + */ + if (key->unit[unit].ModeRGB == key->unit[unit].ModeA && + args_match(key, unit)) { + out = emit_combine( p, dest, WRITEMASK_XYZW, saturate, + unit, + key->unit[unit].NumArgsRGB, + key->unit[unit].ModeRGB, + key->unit[unit].OptRGB); + } + else if (key->unit[unit].ModeRGB == MODE_DOT3_RGBA_EXT || + key->unit[unit].ModeA == MODE_DOT3_RGBA) { + + out = emit_combine( p, dest, WRITEMASK_XYZW, saturate, + unit, + key->unit[unit].NumArgsRGB, + key->unit[unit].ModeRGB, + key->unit[unit].OptRGB); + } + else { + /* Need to do something to stop from re-emitting identical + * argument calculations here: + */ + out = emit_combine( p, dest, WRITEMASK_XYZ, saturate, + unit, + key->unit[unit].NumArgsRGB, + key->unit[unit].ModeRGB, + key->unit[unit].OptRGB); + out = emit_combine( p, dest, WRITEMASK_W, saturate, + unit, + key->unit[unit].NumArgsA, + key->unit[unit].ModeA, + key->unit[unit].OptA); + } + + /* Deal with the final shift: + */ + if (alpha_shift || rgb_shift) { + if (rgb_shift == alpha_shift) { + shift = register_scalar_const(p, 1<src_texture[unit])) { + GLuint dim = p->state->unit[unit].source_index; + struct ureg texcoord = register_input(p, FRAG_ATTRIB_TEX0+unit); + struct ureg tmp = get_tex_temp( p ); + + if (dim == TEXTURE_UNKNOWN_INDEX) + program_error(p, "TexSrcBit"); + + /* TODO: Use D0_MASK_XY where possible. + */ + if (p->state->unit[unit].enabled) + p->src_texture[unit] = emit_texld( p, OPCODE_TXP, + tmp, WRITEMASK_XYZW, + unit, dim, texcoord ); + else + p->src_texture[unit] = get_zero(p); + } +} + +static GLboolean load_texenv_source( struct texenv_fragment_program *p, + GLuint src, GLuint unit ) +{ + switch (src) { + case SRC_TEXTURE: + load_texture(p, unit); + break; + + case SRC_TEXTURE0: + case SRC_TEXTURE1: + case SRC_TEXTURE2: + case SRC_TEXTURE3: + case SRC_TEXTURE4: + case SRC_TEXTURE5: + case SRC_TEXTURE6: + case SRC_TEXTURE7: + load_texture(p, src - SRC_TEXTURE0); + break; + + default: + break; + } + + return GL_TRUE; +} + + +/** + * Generate instructions for loading all texture source terms. + */ +static GLboolean +load_texunit_sources( struct texenv_fragment_program *p, int unit ) +{ + struct state_key *key = p->state; + GLuint i; + + for (i = 0; i < key->unit[unit].NumArgsRGB; i++) { + load_texenv_source( p, key->unit[unit].OptRGB[i].Source, unit); + } + + for (i = 0; i < key->unit[unit].NumArgsA; i++) { + load_texenv_source( p, key->unit[unit].OptA[i].Source, unit ); + } + + return GL_TRUE; +} + + +/** + * Generate a new fragment program which implements the context's + * current texture env/combine mode. + */ +static void +create_new_program(GLcontext *ctx, struct state_key *key, + struct gl_fragment_program *program) +{ + struct prog_instruction instBuffer[MAX_INSTRUCTIONS]; + struct texenv_fragment_program p; + GLuint unit; + struct ureg cf, out; + + _mesa_memset(&p, 0, sizeof(p)); + p.ctx = ctx; + p.state = key; + p.program = program; + + /* During code generation, use locally-allocated instruction buffer, + * then alloc dynamic storage below. + */ + p.program->Base.Instructions = instBuffer; + p.program->Base.Target = GL_FRAGMENT_PROGRAM_ARB; + p.program->NumTexIndirections = 1; /* correct? */ + p.program->NumTexInstructions = 0; + p.program->NumAluInstructions = 0; + p.program->Base.String = 0; + p.program->Base.NumInstructions = + p.program->Base.NumTemporaries = + p.program->Base.NumParameters = + p.program->Base.NumAttributes = p.program->Base.NumAddressRegs = 0; + p.program->Base.Parameters = _mesa_new_parameter_list(); + + p.program->Base.InputsRead = 0; + p.program->Base.OutputsWritten = 1 << FRAG_RESULT_COLR; + + for (unit = 0; unit < MAX_TEXTURE_UNITS; unit++) + p.src_texture[unit] = undef; + + p.src_previous = undef; + p.half = undef; + p.zero = undef; + p.one = undef; + + p.last_tex_stage = 0; + release_temps(&p); + + if (key->enabled_units) { + /* First pass - to support texture_env_crossbar, first identify + * all referenced texture sources and emit texld instructions + * for each: + */ + for (unit = 0 ; unit < ctx->Const.MaxTextureUnits ; unit++) + if (key->unit[unit].enabled) { + load_texunit_sources( &p, unit ); + p.last_tex_stage = unit; + } + + /* Second pass - emit combine instructions to build final color: + */ + for (unit = 0 ; unit < ctx->Const.MaxTextureUnits; unit++) + if (key->enabled_units & (1<separate_specular) { + /* Emit specular add. + */ + struct ureg s = register_input(&p, FRAG_ATTRIB_COL1); + emit_arith( &p, OPCODE_ADD, out, WRITEMASK_XYZ, 0, cf, s, undef ); + emit_arith( &p, OPCODE_MOV, out, WRITEMASK_W, 0, cf, undef, undef ); + } + else if (_mesa_memcmp(&cf, &out, sizeof(cf)) != 0) { + /* Will wind up in here if no texture enabled or a couple of + * other scenarios (GL_REPLACE for instance). + */ + emit_arith( &p, OPCODE_MOV, out, WRITEMASK_XYZW, 0, cf, undef, undef ); + } + + /* Finish up: + */ + emit_arith( &p, OPCODE_END, undef, WRITEMASK_XYZW, 0, undef, undef, undef); + + if (key->fog_enabled) { + /* Pull fog mode from GLcontext, the value in the state key is + * a reduced value and not what is expected in FogOption + */ + p.program->FogOption = ctx->Fog.Mode; + } else + p.program->FogOption = GL_NONE; + + if (p.program->NumTexIndirections > ctx->Const.FragmentProgram.MaxTexIndirections) + program_error(&p, "Exceeded max nr indirect texture lookups"); + + if (p.program->NumTexInstructions > ctx->Const.FragmentProgram.MaxTexInstructions) + program_error(&p, "Exceeded max TEX instructions"); + + if (p.program->NumAluInstructions > ctx->Const.FragmentProgram.MaxAluInstructions) + program_error(&p, "Exceeded max ALU instructions"); + + ASSERT(p.program->Base.NumInstructions <= MAX_INSTRUCTIONS); + + /* Allocate final instruction array */ + program->Base.Instructions + = _mesa_alloc_instructions(program->Base.NumInstructions); + if (!program->Base.Instructions) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, + "generating tex env program"); + return; + } + _mesa_memcpy(program->Base.Instructions, instBuffer, + sizeof(struct prog_instruction) + * program->Base.NumInstructions); + + /* Notify driver the fragment program has (actually) changed. + */ + if (ctx->Driver.ProgramStringNotify) { + ctx->Driver.ProgramStringNotify( ctx, GL_FRAGMENT_PROGRAM_ARB, + &p.program->Base ); + } + + if (DISASSEM) { + _mesa_print_program(&p.program->Base); + _mesa_printf("\n"); + } +} + + +static struct gl_fragment_program * +search_cache(const struct texenvprog_cache *cache, + GLuint hash, + const void *key, + GLuint keysize) +{ + struct texenvprog_cache_item *c; + + for (c = cache->items[hash % cache->size]; c; c = c->next) { + if (c->hash == hash && memcmp(c->key, key, keysize) == 0) + return (struct gl_fragment_program *) c->data; + } + + return NULL; +} + +static void rehash( struct texenvprog_cache *cache ) +{ + struct texenvprog_cache_item **items; + struct texenvprog_cache_item *c, *next; + GLuint size, i; + + size = cache->size * 3; + items = (struct texenvprog_cache_item**) _mesa_malloc(size * sizeof(*items)); + _mesa_memset(items, 0, size * sizeof(*items)); + + for (i = 0; i < cache->size; i++) + for (c = cache->items[i]; c; c = next) { + next = c->next; + c->next = items[c->hash % size]; + items[c->hash % size] = c; + } + + _mesa_free(cache->items); + cache->items = items; + cache->size = size; +} + +static void clear_cache( struct texenvprog_cache *cache ) +{ + struct texenvprog_cache_item *c, *next; + GLuint i; + + for (i = 0; i < cache->size; i++) { + for (c = cache->items[i]; c; c = next) { + next = c->next; + _mesa_free(c->key); + cache->ctx->Driver.DeleteProgram(cache->ctx, + (struct gl_program *) c->data); + _mesa_free(c); + } + cache->items[i] = NULL; + } + + + cache->n_items = 0; +} + + +static void cache_item( struct texenvprog_cache *cache, + GLuint hash, + const struct state_key *key, + void *data ) +{ + struct texenvprog_cache_item *c = MALLOC(sizeof(*c)); + c->hash = hash; + + c->key = _mesa_malloc(sizeof(*key)); + memcpy(c->key, key, sizeof(*key)); + + c->data = data; + + if (cache->n_items > cache->size * 1.5) { + if (cache->size < 1000) + rehash(cache); + else + clear_cache(cache); + } + + cache->n_items++; + c->next = cache->items[hash % cache->size]; + cache->items[hash % cache->size] = c; +} + +static GLuint hash_key( const struct state_key *key ) +{ + GLuint *ikey = (GLuint *)key; + GLuint hash = 0, i; + + /* Make a slightly better attempt at a hash function: + */ + for (i = 0; i < sizeof(*key)/sizeof(*ikey); i++) + { + hash += ikey[i]; + hash += (hash << 10); + hash ^= (hash >> 6); + } + + return hash; +} + +void _mesa_UpdateTexEnvProgram( GLcontext *ctx ) +{ + struct state_key key; + GLuint hash; + const struct gl_fragment_program *prev = ctx->FragmentProgram._Current; + + if (!ctx->FragmentProgram._Enabled) { + make_state_key(ctx, &key); + hash = hash_key(&key); + + ctx->FragmentProgram._Current = + ctx->_TexEnvProgram = + search_cache(&ctx->Texture.env_fp_cache, hash, &key, sizeof(key)); + + if (!ctx->_TexEnvProgram) { + if (0) _mesa_printf("Building new texenv proggy for key %x\n", hash); + + ctx->FragmentProgram._Current = ctx->_TexEnvProgram = + (struct gl_fragment_program *) + ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0); + + create_new_program(ctx, &key, ctx->_TexEnvProgram); + + cache_item(&ctx->Texture.env_fp_cache, hash, &key, ctx->_TexEnvProgram); + } else { + if (0) _mesa_printf("Found existing texenv program for key %x\n", hash); + } + } + else { + ctx->FragmentProgram._Current = ctx->FragmentProgram.Current; + } + + /* Tell the driver about the change. Could define a new target for + * this? + */ + if (ctx->FragmentProgram._Current != prev && ctx->Driver.BindProgram) { + ctx->Driver.BindProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, + (struct gl_program *) ctx->FragmentProgram._Current); + } +} + + +void _mesa_TexEnvProgramCacheInit( GLcontext *ctx ) +{ + ctx->Texture.env_fp_cache.ctx = ctx; + ctx->Texture.env_fp_cache.size = 17; + ctx->Texture.env_fp_cache.n_items = 0; + ctx->Texture.env_fp_cache.items = (struct texenvprog_cache_item **) + _mesa_calloc(ctx->Texture.env_fp_cache.size * + sizeof(struct texenvprog_cache_item)); +} + + +void _mesa_TexEnvProgramCacheDestroy( GLcontext *ctx ) +{ + clear_cache(&ctx->Texture.env_fp_cache); + _mesa_free(ctx->Texture.env_fp_cache.items); +} diff --git a/src/kits/opengl/mesa/shader/arbfragparse.h b/src/kits/opengl/mesa/main/texenvprogram.h similarity index 74% rename from src/kits/opengl/mesa/shader/arbfragparse.h rename to src/kits/opengl/mesa/main/texenvprogram.h index 0d3e69fa8e..6f017767c8 100644 --- a/src/kits/opengl/mesa/shader/arbfragparse.h +++ b/src/kits/opengl/mesa/main/texenvprogram.h @@ -1,8 +1,13 @@ +/** + * \file texenvprogram.h + * Texture state management. + */ + /* * Mesa 3-D graphics library * Version: 5.1 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -22,18 +27,15 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef ARBFRAGPARSE_H -#define ARBFRAGPARSE_H + +#ifndef TEXENVPROGRAM_H +#define TEXENVPROGRAM_H + #include "mtypes.h" -extern void -_mesa_parse_arb_fragment_program(GLcontext * ctx, GLenum target, - const GLubyte * str, GLsizei len, - struct fragment_program *program); - -extern void -_mesa_debug_fp_inst(GLint num, struct fp_instruction *fp); - +extern void _mesa_UpdateTexEnvProgram( GLcontext *ctx ); +extern void _mesa_TexEnvProgramCacheInit( GLcontext *ctx ); +extern void _mesa_TexEnvProgramCacheDestroy( GLcontext *ctx ); #endif diff --git a/src/kits/opengl/mesa/main/texformat.c b/src/kits/opengl/mesa/main/texformat.c index a496cf8cbf..acc268e622 100644 --- a/src/kits/opengl/mesa/main/texformat.c +++ b/src/kits/opengl/mesa/main/texformat.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,18 +31,44 @@ */ -#include "glheader.h" #include "colormac.h" #include "context.h" -#include "image.h" -#include "imports.h" -#include "mtypes.h" #include "texformat.h" -#include "teximage.h" -#include "texstate.h" #include "texstore.h" +#if FEATURE_EXT_texture_sRGB + +/** + * Convert an 8-bit sRGB value from non-linear space to a + * linear RGB value in [0, 1]. + * Implemented with a 256-entry lookup table. + */ +static INLINE GLfloat +nonlinear_to_linear(GLubyte cs8) +{ + static GLfloat table[256]; + static GLboolean tableReady = GL_FALSE; + if (!tableReady) { + /* compute lookup table now */ + GLuint i; + for (i = 0; i < 256; i++) { + const GLfloat cs = UBYTE_TO_FLOAT(i); + if (cs <= 0.04045) { + table[i] = cs / 12.92; + } + else { + table[i] = _mesa_pow((cs + 0.055) / 1.055, 2.4); + } + } + tableReady = GL_TRUE; + } + return table[cs8]; +} + + +#endif /* FEATURE_EXT_texture_sRGB */ + /* Texel fetch routines for all supported formats */ @@ -82,6 +108,31 @@ static void fetch_null_texelf( const struct gl_texture_image *texImage, _mesa_warning(NULL, "fetch_null_texelf() called!"); } +static void store_null_texel(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + (void) texImage; + (void) i; + (void) j; + (void) k; + (void) texel; + /* no-op */ +} + + +/** + * Notes about the predefined gl_texture_formats: + * + * 1. There are 1D, 2D and 3D functions for fetching texels from texture + * images, returning both GLchan values and GLfloat values. (six + * functions in total) + * You don't have to provide both the GLchan and GLfloat functions; + * just one or the other is OK. Mesa will use an "adaptor" to convert + * between GLchan/GLfloat when needed. + * Since the adaptors have small performance penalty, we provide both + * GLchan and GLfloat functions for some common formats like RGB, RGBA. + */ + /***************************************************************/ /** \name Default GLchan-based formats */ @@ -99,6 +150,7 @@ const struct gl_texture_format _mesa_texformat_rgba = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 4 * sizeof(GLchan), /* TexelBytes */ _mesa_texstore_rgba, /* StoreTexImageFunc */ fetch_texel_1d_rgba, /* FetchTexel1D */ @@ -107,6 +159,7 @@ const struct gl_texture_format _mesa_texformat_rgba = { fetch_texel_1d_f_rgba, /* FetchTexel1Df */ fetch_texel_2d_f_rgba, /* FetchTexel2Df */ fetch_texel_3d_f_rgba, /* FetchTexel3Df */ + store_texel_rgba /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgb = { @@ -121,6 +174,7 @@ const struct gl_texture_format _mesa_texformat_rgb = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 3 * sizeof(GLchan), /* TexelBytes */ _mesa_texstore_rgba,/*yes*/ /* StoreTexImageFunc */ fetch_texel_1d_rgb, /* FetchTexel1D */ @@ -129,6 +183,7 @@ const struct gl_texture_format _mesa_texformat_rgb = { fetch_texel_1d_f_rgb, /* FetchTexel1Df */ fetch_texel_2d_f_rgb, /* FetchTexel2Df */ fetch_texel_3d_f_rgb, /* FetchTexel3Df */ + store_texel_rgb /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_alpha = { @@ -143,14 +198,16 @@ const struct gl_texture_format _mesa_texformat_alpha = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ sizeof(GLchan), /* TexelBytes */ _mesa_texstore_rgba,/*yes*/ /* StoreTexImageFunc */ fetch_texel_1d_alpha, /* FetchTexel1D */ fetch_texel_2d_alpha, /* FetchTexel2D */ fetch_texel_3d_alpha, /* FetchTexel3D */ - fetch_texel_1d_f_alpha, /* FetchTexel1Df */ - fetch_texel_2d_f_alpha, /* FetchTexel2Df */ - fetch_texel_3d_f_alpha, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_alpha /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_luminance = { @@ -165,14 +222,16 @@ const struct gl_texture_format _mesa_texformat_luminance = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ sizeof(GLchan), /* TexelBytes */ _mesa_texstore_rgba,/*yes*/ /* StoreTexImageFunc */ fetch_texel_1d_luminance, /* FetchTexel1D */ fetch_texel_2d_luminance, /* FetchTexel2D */ fetch_texel_3d_luminance, /* FetchTexel3D */ - fetch_texel_1d_f_luminance, /* FetchTexel1Df */ - fetch_texel_2d_f_luminance, /* FetchTexel2Df */ - fetch_texel_3d_f_luminance, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_luminance /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_luminance_alpha = { @@ -187,14 +246,16 @@ const struct gl_texture_format _mesa_texformat_luminance_alpha = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2 * sizeof(GLchan), /* TexelBytes */ _mesa_texstore_rgba,/*yes*/ /* StoreTexImageFunc */ fetch_texel_1d_luminance_alpha, /* FetchTexel1D */ fetch_texel_2d_luminance_alpha, /* FetchTexel2D */ fetch_texel_3d_luminance_alpha, /* FetchTexel3D */ - fetch_texel_1d_f_luminance_alpha, /* FetchTexel1Df */ - fetch_texel_2d_f_luminance_alpha, /* FetchTexel2Df */ - fetch_texel_3d_f_luminance_alpha, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_luminance_alpha /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_intensity = { @@ -209,60 +270,119 @@ const struct gl_texture_format _mesa_texformat_intensity = { CHAN_BITS, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ sizeof(GLchan), /* TexelBytes */ _mesa_texstore_rgba,/*yes*/ /* StoreTexImageFunc */ fetch_texel_1d_intensity, /* FetchTexel1D */ fetch_texel_2d_intensity, /* FetchTexel2D */ fetch_texel_3d_intensity, /* FetchTexel3D */ - fetch_texel_1d_f_intensity, /* FetchTexel1Df */ - fetch_texel_2d_f_intensity, /* FetchTexel2Df */ - fetch_texel_3d_f_intensity, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_intensity /* StoreTexel */ }; -const struct gl_texture_format _mesa_texformat_depth_component_float32 = { - MESA_FORMAT_DEPTH_COMPONENT_FLOAT32, /* MesaFormat */ - GL_DEPTH_COMPONENT, /* BaseFormat */ + +#if FEATURE_EXT_texture_sRGB + +const struct gl_texture_format _mesa_texformat_srgb8 = { + MESA_FORMAT_SRGB8, /* MesaFormat */ + GL_RGB, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ + 8, /* RedBits */ + 8, /* GreenBits */ + 8, /* BlueBits */ + 0, /* AlphaBits */ + 0, /* LuminanceBits */ + 0, /* IntensityBits */ + 0, /* IndexBits */ + 0, /* DepthBits */ + 0, /* StencilBits */ + 3, /* TexelBytes */ + _mesa_texstore_srgb8, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ + fetch_texel_1d_srgb8, /* FetchTexel1Df */ + fetch_texel_2d_srgb8, /* FetchTexel2Df */ + fetch_texel_3d_srgb8, /* FetchTexel3Df */ + store_texel_srgb8 /* StoreTexel */ +}; + +const struct gl_texture_format _mesa_texformat_srgba8 = { + MESA_FORMAT_SRGBA8, /* MesaFormat */ + GL_RGBA, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ + 8, /* RedBits */ + 8, /* GreenBits */ + 8, /* BlueBits */ + 8, /* AlphaBits */ + 0, /* LuminanceBits */ + 0, /* IntensityBits */ + 0, /* IndexBits */ + 0, /* DepthBits */ + 0, /* StencilBits */ + 4, /* TexelBytes */ + _mesa_texstore_srgba8, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ + fetch_texel_1d_srgba8, /* FetchTexel1Df */ + fetch_texel_2d_srgba8, /* FetchTexel2Df */ + fetch_texel_3d_srgba8, /* FetchTexel3Df */ + store_texel_srgba8 /* StoreTexel */ +}; + +const struct gl_texture_format _mesa_texformat_sl8 = { + MESA_FORMAT_SL8, /* MesaFormat */ + GL_LUMINANCE, /* BaseFormat */ GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ 0, /* AlphaBits */ - 0, /* LuminanceBits */ + 8, /* LuminanceBits */ 0, /* IntensityBits */ 0, /* IndexBits */ - sizeof(GLfloat) * 8, /* DepthBits */ - sizeof(GLfloat), /* TexelBytes */ - _mesa_texstore_depth_component_float32,/* StoreTexImageFunc */ - fetch_null_texel, /* FetchTexel1D */ - fetch_null_texel, /* FetchTexel1D */ - fetch_null_texel, /* FetchTexel1D */ - fetch_texel_1d_f_depth_component_f32,/* FetchTexel1Df */ - fetch_texel_2d_f_depth_component_f32,/* FetchTexel2Df */ - fetch_texel_3d_f_depth_component_f32,/* FetchTexel3Df */ + 0, /* DepthBits */ + 0, /* StencilBits */ + 1, /* TexelBytes */ + _mesa_texstore_sl8, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ + fetch_texel_1d_sl8, /* FetchTexel1Df */ + fetch_texel_2d_sl8, /* FetchTexel2Df */ + fetch_texel_3d_sl8, /* FetchTexel3Df */ + store_texel_sl8 /* StoreTexel */ }; -const struct gl_texture_format _mesa_texformat_depth_component16 = { - MESA_FORMAT_DEPTH_COMPONENT16, /* MesaFormat */ - GL_DEPTH_COMPONENT, /* BaseFormat */ +const struct gl_texture_format _mesa_texformat_sla8 = { + MESA_FORMAT_SLA8, /* MesaFormat */ + GL_LUMINANCE_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 0, /* RedBits */ 0, /* GreenBits */ 0, /* BlueBits */ - 0, /* AlphaBits */ - 0, /* LuminanceBits */ + 8, /* AlphaBits */ + 8, /* LuminanceBits */ 0, /* IntensityBits */ 0, /* IndexBits */ - sizeof(GLushort) * 8, /* DepthBits */ - sizeof(GLushort), /* TexelBytes */ - _mesa_texstore_depth_component16, /* StoreTexImageFunc */ - fetch_null_texel, /* FetchTexel1D */ - fetch_null_texel, /* FetchTexel1D */ - fetch_null_texel, /* FetchTexel1D */ - fetch_texel_1d_f_depth_component16, /* FetchTexel1Df */ - fetch_texel_2d_f_depth_component16, /* FetchTexel2Df */ - fetch_texel_3d_f_depth_component16, /* FetchTexel3Df */ + 0, /* DepthBits */ + 0, /* StencilBits */ + 2, /* TexelBytes */ + _mesa_texstore_sla8, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ + fetch_texel_1d_sla8, /* FetchTexel1Df */ + fetch_texel_2d_sla8, /* FetchTexel2Df */ + fetch_texel_3d_sla8, /* FetchTexel3Df */ + store_texel_sla8 /* StoreTexel */ }; +#endif /* FEATURE_EXT_texture_sRGB */ + const struct gl_texture_format _mesa_texformat_rgba_float32 = { MESA_FORMAT_RGBA_FLOAT32, /* MesaFormat */ GL_RGBA, /* BaseFormat */ @@ -275,14 +395,16 @@ const struct gl_texture_format _mesa_texformat_rgba_float32 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 4 * sizeof(GLfloat), /* TexelBytes */ _mesa_texstore_rgba_float32, /* StoreTexImageFunc */ - fetch_texel_1d_rgba_f32, /* FetchTexel1D */ - fetch_texel_2d_rgba_f32, /* FetchTexel1D */ - fetch_texel_3d_rgba_f32, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ fetch_texel_1d_f_rgba_f32, /* FetchTexel1Df */ fetch_texel_2d_f_rgba_f32, /* FetchTexel2Df */ fetch_texel_3d_f_rgba_f32, /* FetchTexel3Df */ + store_texel_rgba_f32 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgba_float16 = { @@ -297,14 +419,16 @@ const struct gl_texture_format _mesa_texformat_rgba_float16 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 4 * sizeof(GLhalfARB), /* TexelBytes */ _mesa_texstore_rgba_float16, /* StoreTexImageFunc */ - fetch_texel_1d_rgba_f16, /* FetchTexel1D */ - fetch_texel_2d_rgba_f16, /* FetchTexel1D */ - fetch_texel_3d_rgba_f16, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ fetch_texel_1d_f_rgba_f16, /* FetchTexel1Df */ fetch_texel_2d_f_rgba_f16, /* FetchTexel2Df */ fetch_texel_3d_f_rgba_f16, /* FetchTexel3Df */ + store_texel_rgba_f16 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgb_float32 = { @@ -319,14 +443,16 @@ const struct gl_texture_format _mesa_texformat_rgb_float32 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 3 * sizeof(GLfloat), /* TexelBytes */ _mesa_texstore_rgba_float32,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_rgb_f32, /* FetchTexel1D */ - fetch_texel_2d_rgb_f32, /* FetchTexel1D */ - fetch_texel_3d_rgb_f32, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ fetch_texel_1d_f_rgb_f32, /* FetchTexel1Df */ fetch_texel_2d_f_rgb_f32, /* FetchTexel2Df */ fetch_texel_3d_f_rgb_f32, /* FetchTexel3Df */ + store_texel_rgb_f32 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgb_float16 = { @@ -341,14 +467,16 @@ const struct gl_texture_format _mesa_texformat_rgb_float16 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 3 * sizeof(GLhalfARB), /* TexelBytes */ _mesa_texstore_rgba_float16,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_rgb_f16, /* FetchTexel1D */ - fetch_texel_2d_rgb_f16, /* FetchTexel1D */ - fetch_texel_3d_rgb_f16, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ fetch_texel_1d_f_rgb_f16, /* FetchTexel1Df */ fetch_texel_2d_f_rgb_f16, /* FetchTexel2Df */ - fetch_texel_3d_f_rgb_f16 /* FetchTexel3Df */ + fetch_texel_3d_f_rgb_f16, /* FetchTexel3Df */ + store_texel_rgb_f16 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_alpha_float32 = { @@ -363,14 +491,16 @@ const struct gl_texture_format _mesa_texformat_alpha_float32 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1 * sizeof(GLfloat), /* TexelBytes */ _mesa_texstore_rgba_float32,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_alpha_f32, /* FetchTexel1D */ - fetch_texel_2d_alpha_f32, /* FetchTexel1D */ - fetch_texel_3d_alpha_f32, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ fetch_texel_1d_f_alpha_f32, /* FetchTexel1Df */ fetch_texel_2d_f_alpha_f32, /* FetchTexel2Df */ - fetch_texel_3d_f_alpha_f32 /* FetchTexel3Df */ + fetch_texel_3d_f_alpha_f32, /* FetchTexel3Df */ + store_texel_alpha_f32 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_alpha_float16 = { @@ -385,14 +515,16 @@ const struct gl_texture_format _mesa_texformat_alpha_float16 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1 * sizeof(GLhalfARB), /* TexelBytes */ _mesa_texstore_rgba_float16,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_alpha_f16, /* FetchTexel1D */ - fetch_texel_2d_alpha_f16, /* FetchTexel1D */ - fetch_texel_3d_alpha_f16, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ fetch_texel_1d_f_alpha_f16, /* FetchTexel1Df */ fetch_texel_2d_f_alpha_f16, /* FetchTexel2Df */ - fetch_texel_3d_f_alpha_f16 /* FetchTexel3Df */ + fetch_texel_3d_f_alpha_f16, /* FetchTexel3Df */ + store_texel_alpha_f16 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_luminance_float32 = { @@ -407,14 +539,16 @@ const struct gl_texture_format _mesa_texformat_luminance_float32 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1 * sizeof(GLfloat), /* TexelBytes */ _mesa_texstore_rgba_float32,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_luminance_f32, /* FetchTexel1D */ - fetch_texel_2d_luminance_f32, /* FetchTexel2D */ - fetch_texel_3d_luminance_f32, /* FetchTexel3D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ fetch_texel_1d_f_luminance_f32, /* FetchTexel1Df */ fetch_texel_2d_f_luminance_f32, /* FetchTexel2Df */ - fetch_texel_3d_f_luminance_f32 /* FetchTexel3Df */ + fetch_texel_3d_f_luminance_f32, /* FetchTexel3Df */ + store_texel_luminance_f32 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_luminance_float16 = { @@ -429,14 +563,16 @@ const struct gl_texture_format _mesa_texformat_luminance_float16 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1 * sizeof(GLhalfARB), /* TexelBytes */ _mesa_texstore_rgba_float16,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_luminance_f16, /* FetchTexel1D */ - fetch_texel_2d_luminance_f16, /* FetchTexel2D */ - fetch_texel_3d_luminance_f16, /* FetchTexel3D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ fetch_texel_1d_f_luminance_f16, /* FetchTexel1Df */ fetch_texel_2d_f_luminance_f16, /* FetchTexel2Df */ - fetch_texel_3d_f_luminance_f16 /* FetchTexel3Df */ + fetch_texel_3d_f_luminance_f16, /* FetchTexel3Df */ + store_texel_luminance_f16 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_luminance_alpha_float32 = { @@ -451,14 +587,16 @@ const struct gl_texture_format _mesa_texformat_luminance_alpha_float32 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2 * sizeof(GLfloat), /* TexelBytes */ _mesa_texstore_rgba_float32, /* StoreTexImageFunc */ - fetch_texel_1d_luminance_alpha_f32, /* FetchTexel1D */ - fetch_texel_2d_luminance_alpha_f32, /* FetchTexel2D */ - fetch_texel_3d_luminance_alpha_f32, /* FetchTexel3D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ fetch_texel_1d_f_luminance_alpha_f32,/* FetchTexel1Df */ fetch_texel_2d_f_luminance_alpha_f32,/* FetchTexel2Df */ - fetch_texel_3d_f_luminance_alpha_f32 /* FetchTexel3Df */ + fetch_texel_3d_f_luminance_alpha_f32,/* FetchTexel3Df */ + store_texel_luminance_alpha_f32 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_luminance_alpha_float16 = { @@ -473,14 +611,16 @@ const struct gl_texture_format _mesa_texformat_luminance_alpha_float16 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2 * sizeof(GLhalfARB), /* TexelBytes */ _mesa_texstore_rgba_float16, /* StoreTexImageFunc */ - fetch_texel_1d_luminance_alpha_f16, /* FetchTexel1D */ - fetch_texel_2d_luminance_alpha_f16, /* FetchTexel2D */ - fetch_texel_3d_luminance_alpha_f16, /* FetchTexel3D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ fetch_texel_1d_f_luminance_alpha_f16,/* FetchTexel1Df */ fetch_texel_2d_f_luminance_alpha_f16,/* FetchTexel2Df */ - fetch_texel_3d_f_luminance_alpha_f16 /* FetchTexel3Df */ + fetch_texel_3d_f_luminance_alpha_f16,/* FetchTexel3Df */ + store_texel_luminance_alpha_f16 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_intensity_float32 = { @@ -495,14 +635,16 @@ const struct gl_texture_format _mesa_texformat_intensity_float32 = { 8 * sizeof(GLfloat), /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1 * sizeof(GLfloat), /* TexelBytes */ _mesa_texstore_rgba_float32,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_intensity_f32, /* FetchTexel1D */ - fetch_texel_2d_intensity_f32, /* FetchTexel2D */ - fetch_texel_3d_intensity_f32, /* FetchTexel3D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ fetch_texel_1d_f_intensity_f32, /* FetchTexel1Df */ fetch_texel_2d_f_intensity_f32, /* FetchTexel2Df */ - fetch_texel_3d_f_intensity_f32 /* FetchTexel3Df */ + fetch_texel_3d_f_intensity_f32, /* FetchTexel3Df */ + store_texel_intensity_f32 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_intensity_float16 = { @@ -517,14 +659,16 @@ const struct gl_texture_format _mesa_texformat_intensity_float16 = { 8 * sizeof(GLhalfARB), /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1 * sizeof(GLhalfARB), /* TexelBytes */ _mesa_texstore_rgba_float16,/*yes*/ /* StoreTexImageFunc */ - fetch_texel_1d_intensity_f16, /* FetchTexel1D */ - fetch_texel_2d_intensity_f16, /* FetchTexel2D */ - fetch_texel_3d_intensity_f16, /* FetchTexel3D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ fetch_texel_1d_f_intensity_f16, /* FetchTexel1Df */ fetch_texel_2d_f_intensity_f16, /* FetchTexel2Df */ - fetch_texel_3d_f_intensity_f16 /* FetchTexel3Df */ + fetch_texel_3d_f_intensity_f16, /* FetchTexel3Df */ + store_texel_intensity_f16 /* StoreTexel */ }; @@ -547,14 +691,16 @@ const struct gl_texture_format _mesa_texformat_rgba8888 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 4, /* TexelBytes */ _mesa_texstore_rgba8888, /* StoreTexImageFunc */ fetch_texel_1d_rgba8888, /* FetchTexel1D */ fetch_texel_2d_rgba8888, /* FetchTexel2D */ fetch_texel_3d_rgba8888, /* FetchTexel3D */ - fetch_texel_1d_f_rgba8888, /* FetchTexel1Df */ - fetch_texel_2d_f_rgba8888, /* FetchTexel2Df */ - fetch_texel_3d_f_rgba8888, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_rgba8888 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgba8888_rev = { @@ -569,14 +715,16 @@ const struct gl_texture_format _mesa_texformat_rgba8888_rev = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 4, /* TexelBytes */ _mesa_texstore_rgba8888, /* StoreTexImageFunc */ fetch_texel_1d_rgba8888_rev, /* FetchTexel1D */ fetch_texel_2d_rgba8888_rev, /* FetchTexel2D */ fetch_texel_3d_rgba8888_rev, /* FetchTexel3D */ - fetch_texel_1d_f_rgba8888_rev, /* FetchTexel1Df */ - fetch_texel_2d_f_rgba8888_rev, /* FetchTexel2Df */ - fetch_texel_3d_f_rgba8888_rev, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_rgba8888_rev /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_argb8888 = { @@ -591,14 +739,16 @@ const struct gl_texture_format _mesa_texformat_argb8888 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 4, /* TexelBytes */ _mesa_texstore_argb8888, /* StoreTexImageFunc */ fetch_texel_1d_argb8888, /* FetchTexel1D */ fetch_texel_2d_argb8888, /* FetchTexel2D */ fetch_texel_3d_argb8888, /* FetchTexel3D */ - fetch_texel_1d_f_argb8888, /* FetchTexel1Df */ - fetch_texel_2d_f_argb8888, /* FetchTexel2Df */ - fetch_texel_3d_f_argb8888, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_argb8888 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_argb8888_rev = { @@ -613,14 +763,16 @@ const struct gl_texture_format _mesa_texformat_argb8888_rev = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 4, /* TexelBytes */ _mesa_texstore_argb8888, /* StoreTexImageFunc */ fetch_texel_1d_argb8888_rev, /* FetchTexel1D */ fetch_texel_2d_argb8888_rev, /* FetchTexel2D */ fetch_texel_3d_argb8888_rev, /* FetchTexel3D */ - fetch_texel_1d_f_argb8888_rev, /* FetchTexel1Df */ - fetch_texel_2d_f_argb8888_rev, /* FetchTexel2Df */ - fetch_texel_3d_f_argb8888_rev, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_argb8888_rev /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgb888 = { @@ -635,14 +787,16 @@ const struct gl_texture_format _mesa_texformat_rgb888 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 3, /* TexelBytes */ _mesa_texstore_rgb888, /* StoreTexImageFunc */ fetch_texel_1d_rgb888, /* FetchTexel1D */ fetch_texel_2d_rgb888, /* FetchTexel2D */ fetch_texel_3d_rgb888, /* FetchTexel3D */ - fetch_texel_1d_f_rgb888, /* FetchTexel1Df */ - fetch_texel_2d_f_rgb888, /* FetchTexel2Df */ - fetch_texel_3d_f_rgb888, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_rgb888 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_bgr888 = { @@ -657,14 +811,16 @@ const struct gl_texture_format _mesa_texformat_bgr888 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 3, /* TexelBytes */ _mesa_texstore_bgr888, /* StoreTexImageFunc */ fetch_texel_1d_bgr888, /* FetchTexel1D */ fetch_texel_2d_bgr888, /* FetchTexel2D */ fetch_texel_3d_bgr888, /* FetchTexel3D */ - fetch_texel_1d_f_bgr888, /* FetchTexel1Df */ - fetch_texel_2d_f_bgr888, /* FetchTexel2Df */ - fetch_texel_3d_f_bgr888, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_bgr888 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgb565 = { @@ -679,14 +835,16 @@ const struct gl_texture_format _mesa_texformat_rgb565 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_rgb565, /* StoreTexImageFunc */ fetch_texel_1d_rgb565, /* FetchTexel1D */ fetch_texel_2d_rgb565, /* FetchTexel2D */ fetch_texel_3d_rgb565, /* FetchTexel3D */ - fetch_texel_1d_f_rgb565, /* FetchTexel1Df */ - fetch_texel_2d_f_rgb565, /* FetchTexel2Df */ - fetch_texel_3d_f_rgb565, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_rgb565 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgb565_rev = { @@ -701,14 +859,16 @@ const struct gl_texture_format _mesa_texformat_rgb565_rev = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_rgb565, /* StoreTexImageFunc */ fetch_texel_1d_rgb565_rev, /* FetchTexel1D */ fetch_texel_2d_rgb565_rev, /* FetchTexel2D */ fetch_texel_3d_rgb565_rev, /* FetchTexel3D */ - fetch_texel_1d_f_rgb565_rev, /* FetchTexel1Df */ - fetch_texel_2d_f_rgb565_rev, /* FetchTexel2Df */ - fetch_texel_3d_f_rgb565_rev, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_rgb565_rev /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_argb4444 = { @@ -723,14 +883,16 @@ const struct gl_texture_format _mesa_texformat_argb4444 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_argb4444, /* StoreTexImageFunc */ fetch_texel_1d_argb4444, /* FetchTexel1D */ fetch_texel_2d_argb4444, /* FetchTexel2D */ fetch_texel_3d_argb4444, /* FetchTexel3D */ - fetch_texel_1d_f_argb4444, /* FetchTexel1Df */ - fetch_texel_2d_f_argb4444, /* FetchTexel2Df */ - fetch_texel_3d_f_argb4444, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_argb4444 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_argb4444_rev = { @@ -745,14 +907,16 @@ const struct gl_texture_format _mesa_texformat_argb4444_rev = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_argb4444, /* StoreTexImageFunc */ fetch_texel_1d_argb4444_rev, /* FetchTexel1D */ fetch_texel_2d_argb4444_rev, /* FetchTexel2D */ fetch_texel_3d_argb4444_rev, /* FetchTexel3D */ - fetch_texel_1d_f_argb4444_rev, /* FetchTexel1Df */ - fetch_texel_2d_f_argb4444_rev, /* FetchTexel2Df */ - fetch_texel_3d_f_argb4444_rev, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_argb4444_rev /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_argb1555 = { @@ -767,14 +931,16 @@ const struct gl_texture_format _mesa_texformat_argb1555 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_argb1555, /* StoreTexImageFunc */ fetch_texel_1d_argb1555, /* FetchTexel1D */ fetch_texel_2d_argb1555, /* FetchTexel2D */ fetch_texel_3d_argb1555, /* FetchTexel3D */ - fetch_texel_1d_f_argb1555, /* FetchTexel1Df */ - fetch_texel_2d_f_argb1555, /* FetchTexel2Df */ - fetch_texel_3d_f_argb1555, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_argb1555 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_argb1555_rev = { @@ -789,14 +955,16 @@ const struct gl_texture_format _mesa_texformat_argb1555_rev = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_argb1555, /* StoreTexImageFunc */ fetch_texel_1d_argb1555_rev, /* FetchTexel1D */ fetch_texel_2d_argb1555_rev, /* FetchTexel2D */ fetch_texel_3d_argb1555_rev, /* FetchTexel3D */ - fetch_texel_1d_f_argb1555_rev, /* FetchTexel1Df */ - fetch_texel_2d_f_argb1555_rev, /* FetchTexel2Df */ - fetch_texel_3d_f_argb1555_rev, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_argb1555_rev /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_al88 = { @@ -811,14 +979,16 @@ const struct gl_texture_format _mesa_texformat_al88 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_al88, /* StoreTexImageFunc */ fetch_texel_1d_al88, /* FetchTexel1D */ fetch_texel_2d_al88, /* FetchTexel2D */ fetch_texel_3d_al88, /* FetchTexel3D */ - fetch_texel_1d_f_al88, /* FetchTexel1Df */ - fetch_texel_2d_f_al88, /* FetchTexel2Df */ - fetch_texel_3d_f_al88, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_al88 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_al88_rev = { @@ -833,14 +1003,16 @@ const struct gl_texture_format _mesa_texformat_al88_rev = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_al88, /* StoreTexImageFunc */ fetch_texel_1d_al88_rev, /* FetchTexel1D */ fetch_texel_2d_al88_rev, /* FetchTexel2D */ fetch_texel_3d_al88_rev, /* FetchTexel3D */ - fetch_texel_1d_f_al88_rev, /* FetchTexel1Df */ - fetch_texel_2d_f_al88_rev, /* FetchTexel2Df */ - fetch_texel_3d_f_al88_rev, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_al88_rev /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_rgb332 = { @@ -855,14 +1027,16 @@ const struct gl_texture_format _mesa_texformat_rgb332 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1, /* TexelBytes */ _mesa_texstore_rgb332, /* StoreTexImageFunc */ fetch_texel_1d_rgb332, /* FetchTexel1D */ fetch_texel_2d_rgb332, /* FetchTexel2D */ fetch_texel_3d_rgb332, /* FetchTexel3D */ - fetch_texel_1d_f_rgb332, /* FetchTexel1Df */ - fetch_texel_2d_f_rgb332, /* FetchTexel2Df */ - fetch_texel_3d_f_rgb332, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_rgb332 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_a8 = { @@ -877,14 +1051,16 @@ const struct gl_texture_format _mesa_texformat_a8 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1, /* TexelBytes */ _mesa_texstore_a8, /* StoreTexImageFunc */ fetch_texel_1d_a8, /* FetchTexel1D */ fetch_texel_2d_a8, /* FetchTexel2D */ fetch_texel_3d_a8, /* FetchTexel3D */ - fetch_texel_1d_f_a8, /* FetchTexel1Df */ - fetch_texel_2d_f_a8, /* FetchTexel2Df */ - fetch_texel_3d_f_a8, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_a8 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_l8 = { @@ -899,14 +1075,16 @@ const struct gl_texture_format _mesa_texformat_l8 = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1, /* TexelBytes */ _mesa_texstore_a8,/*yes*/ /* StoreTexImageFunc */ fetch_texel_1d_l8, /* FetchTexel1D */ fetch_texel_2d_l8, /* FetchTexel2D */ fetch_texel_3d_l8, /* FetchTexel3D */ - fetch_texel_1d_f_l8, /* FetchTexel1Df */ - fetch_texel_2d_f_l8, /* FetchTexel2Df */ - fetch_texel_3d_f_l8, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_l8 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_i8 = { @@ -921,14 +1099,16 @@ const struct gl_texture_format _mesa_texformat_i8 = { 8, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1, /* TexelBytes */ _mesa_texstore_a8,/*yes*/ /* StoreTexImageFunc */ fetch_texel_1d_i8, /* FetchTexel1D */ fetch_texel_2d_i8, /* FetchTexel2D */ fetch_texel_3d_i8, /* FetchTexel3D */ - fetch_texel_1d_f_i8, /* FetchTexel1Df */ - fetch_texel_2d_f_i8, /* FetchTexel2Df */ - fetch_texel_3d_f_i8, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_i8 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_ci8 = { @@ -943,14 +1123,16 @@ const struct gl_texture_format _mesa_texformat_ci8 = { 0, /* IntensityBits */ 8, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 1, /* TexelBytes */ _mesa_texstore_ci8, /* StoreTexImageFunc */ fetch_texel_1d_ci8, /* FetchTexel1D */ fetch_texel_2d_ci8, /* FetchTexel2D */ fetch_texel_3d_ci8, /* FetchTexel3D */ - fetch_texel_1d_f_ci8, /* FetchTexel1Df */ - fetch_texel_2d_f_ci8, /* FetchTexel2Df */ - fetch_texel_3d_f_ci8, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_ci8 /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_ycbcr = { @@ -965,14 +1147,16 @@ const struct gl_texture_format _mesa_texformat_ycbcr = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_ycbcr, /* StoreTexImageFunc */ fetch_texel_1d_ycbcr, /* FetchTexel1D */ fetch_texel_2d_ycbcr, /* FetchTexel2D */ fetch_texel_3d_ycbcr, /* FetchTexel3D */ - fetch_texel_1d_f_ycbcr, /* FetchTexel1Df */ - fetch_texel_2d_f_ycbcr, /* FetchTexel2Df */ - fetch_texel_3d_f_ycbcr, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_ycbcr /* StoreTexel */ }; const struct gl_texture_format _mesa_texformat_ycbcr_rev = { @@ -987,14 +1171,88 @@ const struct gl_texture_format _mesa_texformat_ycbcr_rev = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 2, /* TexelBytes */ _mesa_texstore_ycbcr, /* StoreTexImageFunc */ fetch_texel_1d_ycbcr_rev, /* FetchTexel1D */ fetch_texel_2d_ycbcr_rev, /* FetchTexel2D */ fetch_texel_3d_ycbcr_rev, /* FetchTexel3D */ - fetch_texel_1d_f_ycbcr_rev, /* FetchTexel1Df */ - fetch_texel_2d_f_ycbcr_rev, /* FetchTexel2Df */ - fetch_texel_3d_f_ycbcr_rev, /* FetchTexel3Df */ + NULL, /* FetchTexel1Df */ + NULL, /* FetchTexel2Df */ + NULL, /* FetchTexel3Df */ + store_texel_ycbcr_rev /* StoreTexel */ +}; + +const struct gl_texture_format _mesa_texformat_z24_s8 = { + MESA_FORMAT_Z24_S8, /* MesaFormat */ + GL_DEPTH_STENCIL_EXT, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ + 0, /* RedBits */ + 0, /* GreenBits */ + 0, /* BlueBits */ + 0, /* AlphaBits */ + 0, /* LuminanceBits */ + 0, /* IntensityBits */ + 0, /* IndexBits */ + 24, /* DepthBits */ + 8, /* StencilBits */ + 4, /* TexelBytes */ + _mesa_texstore_z24_s8, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ + fetch_texel_1d_f_z24_s8, /* FetchTexel1Df */ + fetch_texel_2d_f_z24_s8, /* FetchTexel2Df */ + fetch_texel_3d_f_z24_s8, /* FetchTexel3Df */ + store_texel_z24_s8 /* StoreTexel */ +}; + +const struct gl_texture_format _mesa_texformat_z16 = { + MESA_FORMAT_Z16, /* MesaFormat */ + GL_DEPTH_COMPONENT, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ + 0, /* RedBits */ + 0, /* GreenBits */ + 0, /* BlueBits */ + 0, /* AlphaBits */ + 0, /* LuminanceBits */ + 0, /* IntensityBits */ + 0, /* IndexBits */ + sizeof(GLushort) * 8, /* DepthBits */ + 0, /* StencilBits */ + sizeof(GLushort), /* TexelBytes */ + _mesa_texstore_z16, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + fetch_texel_1d_f_z16, /* FetchTexel1Df */ + fetch_texel_2d_f_z16, /* FetchTexel2Df */ + fetch_texel_3d_f_z16, /* FetchTexel3Df */ + store_texel_z16 /* StoreTexel */ +}; + +const struct gl_texture_format _mesa_texformat_z32 = { + MESA_FORMAT_Z32, /* MesaFormat */ + GL_DEPTH_COMPONENT, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ + 0, /* RedBits */ + 0, /* GreenBits */ + 0, /* BlueBits */ + 0, /* AlphaBits */ + 0, /* LuminanceBits */ + 0, /* IntensityBits */ + 0, /* IndexBits */ + sizeof(GLuint) * 8, /* DepthBits */ + 0, /* StencilBits */ + sizeof(GLuint), /* TexelBytes */ + _mesa_texstore_z32, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel1D */ + fetch_texel_1d_f_z32, /* FetchTexel1Df */ + fetch_texel_2d_f_z32, /* FetchTexel2Df */ + fetch_texel_3d_f_z32, /* FetchTexel3Df */ + store_texel_z32 /* StoreTexel */ }; /*@}*/ @@ -1016,6 +1274,7 @@ const struct gl_texture_format _mesa_null_texformat = { 0, /* IntensityBits */ 0, /* IndexBits */ 0, /* DepthBits */ + 0, /* StencilBits */ 0, /* TexelBytes */ NULL, /* StoreTexImageFunc */ fetch_null_texel, /* FetchTexel1D */ @@ -1024,6 +1283,7 @@ const struct gl_texture_format _mesa_null_texformat = { fetch_null_texelf, /* FetchTexel1Df */ fetch_null_texelf, /* FetchTexel2Df */ fetch_null_texelf, /* FetchTexel3Df */ + store_null_texel /* StoreTexel */ }; /*@}*/ @@ -1136,14 +1396,15 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat, ; /* fallthrough */ } - if (ctx->Extensions.SGIX_depth_texture) { + if (ctx->Extensions.SGIX_depth_texture || + ctx->Extensions.ARB_depth_texture) { switch (internalFormat) { case GL_DEPTH_COMPONENT: case GL_DEPTH_COMPONENT24_SGIX: case GL_DEPTH_COMPONENT32_SGIX: - return &_mesa_texformat_depth_component_float32; + return &_mesa_texformat_z32; case GL_DEPTH_COMPONENT16_SGIX: - return &_mesa_texformat_depth_component16; + return &_mesa_texformat_z16; default: ; /* fallthrough */ } @@ -1259,6 +1520,52 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat, } } + if (ctx->Extensions.EXT_packed_depth_stencil) { + switch (internalFormat) { + case GL_DEPTH_STENCIL_EXT: + case GL_DEPTH24_STENCIL8_EXT: + return &_mesa_texformat_z24_s8; + default: + ; /* fallthrough */ + } + } + +#if FEATURE_EXT_texture_sRGB + if (ctx->Extensions.EXT_texture_sRGB) { + switch (internalFormat) { + case GL_SRGB_EXT: + case GL_SRGB8_EXT: + return &_mesa_texformat_srgb8; + case GL_SRGB_ALPHA_EXT: + case GL_SRGB8_ALPHA8_EXT: + return &_mesa_texformat_srgba8; + case GL_SLUMINANCE_EXT: + case GL_SLUMINANCE8_EXT: + return &_mesa_texformat_sl8; + case GL_SLUMINANCE_ALPHA_EXT: + case GL_SLUMINANCE8_ALPHA8_EXT: + return &_mesa_texformat_sla8; + /* NOTE: not supporting any compression of sRGB at this time */ + case GL_COMPRESSED_SRGB_EXT: + return &_mesa_texformat_srgb8; + case GL_COMPRESSED_SRGB_ALPHA_EXT: + return &_mesa_texformat_srgba8; + case GL_COMPRESSED_SLUMINANCE_EXT: + return &_mesa_texformat_sl8; + case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: + return &_mesa_texformat_sla8; + case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + return &_mesa_texformat_srgb8; + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + return &_mesa_texformat_srgba8; + default: + ; /* fallthrough */ + } + } +#endif /* FEATURE_EXT_texture_sRGB */ + _mesa_problem(ctx, "unexpected format in _mesa_choose_tex_format()"); return NULL; } diff --git a/src/kits/opengl/mesa/main/texformat.h b/src/kits/opengl/mesa/main/texformat.h index 35522d6218..55851db701 100644 --- a/src/kits/opengl/mesa/main/texformat.h +++ b/src/kits/opengl/mesa/main/texformat.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -83,8 +83,23 @@ enum _format { MESA_FORMAT_CI8, /* CCCC CCCC */ MESA_FORMAT_YCBCR, /* YYYY YYYY UorV UorV */ MESA_FORMAT_YCBCR_REV, /* UorV UorV YYYY YYYY */ + MESA_FORMAT_Z24_S8, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */ + MESA_FORMAT_Z16, /* ZZZZ ZZZZ ZZZZ ZZZZ */ + MESA_FORMAT_Z32, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ /*@}*/ +#if FEATURE_EXT_texture_sRGB + /** + * \name 8-bit/channel sRGB formats + */ + /*@{*/ + MESA_FORMAT_SRGB8, + MESA_FORMAT_SRGBA8, + MESA_FORMAT_SL8, + MESA_FORMAT_SLA8, + /*@}*/ +#endif + /** * \name Compressed texture formats. */ @@ -116,14 +131,6 @@ enum _format { MESA_FORMAT_INTENSITY, /*@}*/ - /** - * Depth textures - */ - /*@{*/ - MESA_FORMAT_DEPTH_COMPONENT_FLOAT32, - MESA_FORMAT_DEPTH_COMPONENT16, - /*@}*/ - /** * \name Floating point texture formats. */ @@ -154,11 +161,15 @@ extern const struct gl_texture_format _mesa_texformat_luminance_alpha; extern const struct gl_texture_format _mesa_texformat_intensity; /*@}*/ -/** Depth textures */ +#if FEATURE_EXT_texture_sRGB +/** sRGB (nonlinear) formats */ /*@{*/ -extern const struct gl_texture_format _mesa_texformat_depth_component_float32; -extern const struct gl_texture_format _mesa_texformat_depth_component16; +extern const struct gl_texture_format _mesa_texformat_srgb8; +extern const struct gl_texture_format _mesa_texformat_srgba8; +extern const struct gl_texture_format _mesa_texformat_sl8; +extern const struct gl_texture_format _mesa_texformat_sla8; /*@}*/ +#endif /** Floating point texture formats */ /*@{*/ @@ -197,7 +208,9 @@ extern const struct gl_texture_format _mesa_texformat_a8; extern const struct gl_texture_format _mesa_texformat_l8; extern const struct gl_texture_format _mesa_texformat_i8; extern const struct gl_texture_format _mesa_texformat_ci8; - +extern const struct gl_texture_format _mesa_texformat_z24_s8; +extern const struct gl_texture_format _mesa_texformat_z16; +extern const struct gl_texture_format _mesa_texformat_z32; /*@}*/ /** \name YCbCr formats */ diff --git a/src/kits/opengl/mesa/main/texformat_tmp.h b/src/kits/opengl/mesa/main/texformat_tmp.h index 275a84ef9e..99785da1a0 100644 --- a/src/kits/opengl/mesa/main/texformat_tmp.h +++ b/src/kits/opengl/mesa/main/texformat_tmp.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -43,70 +43,24 @@ #if DIM == 1 -#define CHAN_SRC( t, i, j, k, sz ) \ - ((void) (j), (void) (k), \ - ((GLchan *)(t)->Data + (i) * (sz))) -#define UBYTE_SRC( t, i, j, k, sz ) \ - ((void) (j), (void) (k), \ - ((GLubyte *)(t)->Data + (i) * (sz))) -#define USHORT_SRC( t, i, j, k ) \ - ((void) (j), (void) (k), \ - ((GLushort *)(t)->Data + (i))) -#define UINT_SRC( t, i, j, k ) \ - ((void) (j), (void) (k), \ - ((GLuint *)(t)->Data + (i))) -#define FLOAT_SRC( t, i, j, k, sz ) \ - ((void) (j), (void) (k), \ - ((GLfloat *)(t)->Data + (i) * (sz))) -#define HALF_SRC( t, i, j, k, sz ) \ - ((void) (j), (void) (k), \ - ((GLhalfARB *)(t)->Data + (i) * (sz))) +#define TEXEL_ADDR( type, image, i, j, k, size ) \ + ((void) (j), (void) (k), ((type *)(image)->Data + (i) * (size))) #define FETCH(x) fetch_texel_1d_##x #elif DIM == 2 -#define CHAN_SRC( t, i, j, k, sz ) \ - ((void) (k), \ - ((GLchan *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))) -#define UBYTE_SRC( t, i, j, k, sz ) \ - ((void) (k), \ - ((GLubyte *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))) -#define USHORT_SRC( t, i, j, k ) \ - ((void) (k), \ - ((GLushort *)(t)->Data + ((t)->RowStride * (j) + (i)))) -#define UINT_SRC( t, i, j, k ) \ - ((void) (k), \ - ((GLuint *)(t)->Data + ((t)->RowStride * (j) + (i)))) -#define FLOAT_SRC( t, i, j, k, sz ) \ - ((void) (k), \ - ((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))) -#define HALF_SRC( t, i, j, k, sz ) \ - ((void) (k), \ - ((GLhalfARB *)(t)->Data + ((t)->RowStride * (j) + (i)) * (sz))) +#define TEXEL_ADDR( type, image, i, j, k, size ) \ + ((void) (k), \ + ((type *)(image)->Data + ((image)->RowStride * (j) + (i)) * (size))) #define FETCH(x) fetch_texel_2d_##x #elif DIM == 3 -#define CHAN_SRC( t, i, j, k, sz ) \ - (GLchan *)(t)->Data + (((t)->Height * (k) + (j)) * \ - (t)->RowStride + (i)) * (sz) -#define UBYTE_SRC( t, i, j, k, sz ) \ - ((GLubyte *)(t)->Data + (((t)->Height * (k) + (j)) * \ - (t)->RowStride + (i)) * (sz)) -#define USHORT_SRC( t, i, j, k ) \ - ((GLushort *)(t)->Data + (((t)->Height * (k) + (j)) * \ - (t)->RowStride + (i))) -#define UINT_SRC( t, i, j, k ) \ - ((GLuint *)(t)->Data + (((t)->Height * (k) + (j)) * \ - (t)->RowStride + (i))) -#define FLOAT_SRC( t, i, j, k, sz ) \ - ((GLfloat *)(t)->Data + (((t)->Height * (k) + (j)) * \ - (t)->RowStride + (i)) * (sz)) -#define HALF_SRC( t, i, j, k, sz ) \ - ((GLhalfARB *)(t)->Data + (((t)->Height * (k) + (j)) * \ - (t)->RowStride + (i)) * (sz)) +#define TEXEL_ADDR( type, image, i, j, k, size ) \ + ((type *)(image)->Data + ((image)->ImageOffsets[k] \ + + (image)->RowStride * (j) + (i)) * (size)) #define FETCH(x) fetch_texel_3d_##x @@ -115,11 +69,13 @@ #endif +/* MESA_FORMAT_RGBA **********************************************************/ + /* Fetch texel from 1D, 2D or 3D RGBA texture, returning 4 GLchans */ static void FETCH(rgba)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 4); COPY_CHAN4( texel, src ); } @@ -127,19 +83,34 @@ static void FETCH(rgba)( const struct gl_texture_image *texImage, static void FETCH(f_rgba)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 4); texel[RCOMP] = CHAN_TO_FLOAT(src[0]); texel[GCOMP] = CHAN_TO_FLOAT(src[1]); texel[BCOMP] = CHAN_TO_FLOAT(src[2]); texel[ACOMP] = CHAN_TO_FLOAT(src[3]); } +#if DIM == 3 +/* Store a GLchan RGBA texel */ +static void store_texel_rgba(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLchan *rgba = (const GLchan *) texel; + GLchan *dst = TEXEL_ADDR(GLchan, texImage, i, j, k, 4); + dst[0] = rgba[RCOMP]; + dst[1] = rgba[GCOMP]; + dst[2] = rgba[BCOMP]; + dst[3] = rgba[ACOMP]; +} +#endif + +/* MESA_FORMAT_RGB ***********************************************************/ /* Fetch texel from 1D, 2D or 3D RGB texture, returning 4 GLchans */ static void FETCH(rgb)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 3 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 3); texel[RCOMP] = src[0]; texel[GCOMP] = src[1]; texel[BCOMP] = src[2]; @@ -150,165 +121,196 @@ static void FETCH(rgb)( const struct gl_texture_image *texImage, static void FETCH(f_rgb)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 3 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 3); texel[RCOMP] = CHAN_TO_FLOAT(src[0]); texel[GCOMP] = CHAN_TO_FLOAT(src[1]); texel[BCOMP] = CHAN_TO_FLOAT(src[2]); - texel[ACOMP] = CHAN_MAXF; + texel[ACOMP] = 1.0F; } +#if DIM == 3 +static void store_texel_rgb(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLchan *rgba = (const GLchan *) texel; + GLchan *dst = TEXEL_ADDR(GLchan, texImage, i, j, k, 3); + dst[0] = rgba[RCOMP]; + dst[1] = rgba[GCOMP]; + dst[2] = rgba[BCOMP]; +} +#endif + +/* MESA_FORMAT_ALPHA *********************************************************/ + /* Fetch texel from 1D, 2D or 3D ALPHA texture, returning 4 GLchans */ static void FETCH(alpha)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = 0; texel[ACOMP] = src[0]; } -/* Fetch texel from 1D, 2D or 3D ALPHA texture, returning 4 GLfloats */ -static void FETCH(f_alpha)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_alpha(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = 0.0; - texel[ACOMP] = CHAN_TO_FLOAT(src[0]); + const GLchan *rgba = (const GLchan *) texel; + GLchan *dst = TEXEL_ADDR(GLchan, texImage, i, j, k, 1); + dst[0] = rgba[ACOMP]; } +#endif + +/* MESA_FORMAT_LUMINANCE *****************************************************/ /* Fetch texel from 1D, 2D or 3D LUMIN texture, returning 4 GLchans */ static void FETCH(luminance)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = src[0]; texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D LUMIN texture, returning 4 GLchans */ -static void FETCH(f_luminance)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_luminance(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = CHAN_TO_FLOAT(src[0]); - texel[ACOMP] = CHAN_MAXF; + const GLchan *rgba = (const GLchan *) texel; + GLchan *dst = TEXEL_ADDR(GLchan, texImage, i, j, k, 1); + dst[0] = rgba[RCOMP]; } +#endif + +/* MESA_FORMAT_LUMINANCE_ALPHA ***********************************************/ /* Fetch texel from 1D, 2D or 3D L_A texture, returning 4 GLchans */ static void FETCH(luminance_alpha)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 2 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 2); texel[RCOMP] = src[0]; texel[GCOMP] = src[0]; texel[BCOMP] = src[0]; texel[ACOMP] = src[1]; } -/* Fetch texel from 1D, 2D or 3D L_A texture, returning 4 GLfloats */ -static void FETCH(f_luminance_alpha)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_luminance_alpha(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 2 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = CHAN_TO_FLOAT(src[0]); - texel[ACOMP] = CHAN_TO_FLOAT(src[1]); + const GLchan *rgba = (const GLchan *) texel; + GLchan *dst = TEXEL_ADDR(GLchan, texImage, i, j, k, 2); + dst[0] = rgba[RCOMP]; + dst[1] = rgba[ACOMP]; } +#endif +/* MESA_FORMAT_INTENSITY *****************************************************/ /* Fetch texel from 1D, 2D or 3D INT. texture, returning 4 GLchans */ static void FETCH(intensity)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); + const GLchan *src = TEXEL_ADDR(GLchan, texImage, i, j, k, 1); texel[RCOMP] = src[0]; texel[GCOMP] = src[0]; texel[BCOMP] = src[0]; texel[ACOMP] = src[0]; } -/* Fetch texel from 1D, 2D or 3D INT. texture, returning 4 GLfloats */ -static void FETCH(f_intensity)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_intensity(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = - texel[ACOMP] = CHAN_TO_FLOAT(src[0]); + const GLchan *rgba = (const GLchan *) texel; + GLchan *dst = TEXEL_ADDR(GLchan, texImage, i, j, k, 1); + dst[0] = rgba[RCOMP]; } +#endif -/* Fetch depth texel from 1D, 2D or 3D float32 DEPTH texture, +/* MESA_FORMAT_Z32 ***********************************************************/ + +/* Fetch depth texel from 1D, 2D or 3D 32-bit depth texture, * returning 1 GLfloat. * Note: no GLchan version of this function. */ -static void FETCH(f_depth_component_f32)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +static void FETCH(f_z32)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 ); - texel[0] = src[0]; + const GLuint *src = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + texel[0] = src[0] * (1.0F / 0xffffffff); } +#if DIM == 3 +static void store_texel_z32(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLuint *depth = (const GLuint *) texel; + GLuint *dst = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + dst[0] = *depth; +} +#endif -/* Fetch depth texel from 1D, 2D or 3D float32 DEPTH texture, + +/* MESA_FORMAT_Z16 ***********************************************************/ + +/* Fetch depth texel from 1D, 2D or 3D 16-bit depth texture, * returning 1 GLfloat. * Note: no GLchan version of this function. */ -static void FETCH(f_depth_component16)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +static void FETCH(f_z16)(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort *src = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); texel[0] = src[0] * (1.0F / 65535.0F); } - -/* Fetch texel from 1D, 2D or 3D RGBA_FLOAT32 texture, - * returning 4 GLchans. - */ -static void FETCH(rgba_f32)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_z16(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 4 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]); - UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], src[1]); - UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], src[2]); - UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], src[3]); + const GLushort *depth = (const GLushort *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + dst[0] = *depth; } +#endif -/* Fetch texel from 1D, 2D or 3D RGBA_FLOAT32 texture, - * returning 4 GLfloats. + +/* MESA_FORMAT_RGBA_F32 ******************************************************/ + +/* Fetch texel from 1D, 2D or 3D RGBA_FLOAT32 texture, returning 4 GLfloats. */ static void FETCH(f_rgba_f32)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 4 ); + const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 4); texel[RCOMP] = src[0]; texel[GCOMP] = src[1]; texel[BCOMP] = src[2]; texel[ACOMP] = src[3]; } -/* Fetch texel from 1D, 2D or 3D RGBA_FLOAT16 texture, - * returning 4 GLchans. - */ -static void FETCH(rgba_f16)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_rgba_f32(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 4 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0])); - UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], _mesa_half_to_float(src[1])); - UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], _mesa_half_to_float(src[2])); - UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], _mesa_half_to_float(src[3])); + const GLfloat *depth = (const GLfloat *) texel; + GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); + dst[0] = depth[RCOMP]; + dst[1] = depth[GCOMP]; + dst[2] = depth[BCOMP]; + dst[3] = depth[ACOMP]; } +#endif + + +/* MESA_FORMAT_RGBA_F16 ******************************************************/ /* Fetch texel from 1D, 2D or 3D RGBA_FLOAT16 texture, * returning 4 GLfloats. @@ -316,25 +318,24 @@ static void FETCH(rgba_f16)( const struct gl_texture_image *texImage, static void FETCH(f_rgba_f16)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 4 ); + const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 4); texel[RCOMP] = _mesa_half_to_float(src[0]); texel[GCOMP] = _mesa_half_to_float(src[1]); texel[BCOMP] = _mesa_half_to_float(src[2]); texel[ACOMP] = _mesa_half_to_float(src[3]); } -/* Fetch texel from 1D, 2D or 3D RGB_FLOAT32 texture, - * returning 4 GLchans. - */ -static void FETCH(rgb_f32)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_rgba_f16(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 3 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]); - UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], src[1]); - UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], src[2]); - texel[ACOMP] = CHAN_MAX; + const GLfloat *depth = (const GLfloat *) texel; + GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); + dst[0] = _mesa_float_to_half(*depth); } +#endif + +/* MESA_FORMAT_RGB_F32 *******************************************************/ /* Fetch texel from 1D, 2D or 3D RGB_FLOAT32 texture, * returning 4 GLfloats. @@ -342,25 +343,25 @@ static void FETCH(rgb_f32)( const struct gl_texture_image *texImage, static void FETCH(f_rgb_f32)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 3 ); + const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 3); texel[RCOMP] = src[0]; texel[GCOMP] = src[1]; texel[BCOMP] = src[2]; - texel[ACOMP] = CHAN_MAXF; + texel[ACOMP] = 1.0F; } -/* Fetch texel from 1D, 2D or 3D RGBA_FLOAT16 texture, - * returning 4 GLchans. - */ -static void FETCH(rgb_f16)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_rgb_f32(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 3 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0])); - UNCLAMPED_FLOAT_TO_CHAN(texel[GCOMP], _mesa_half_to_float(src[1])); - UNCLAMPED_FLOAT_TO_CHAN(texel[BCOMP], _mesa_half_to_float(src[2])); - texel[ACOMP] = CHAN_MAX; + const GLfloat *depth = (const GLfloat *) texel; + GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); + dst[0] = *depth; } +#endif + + +/* MESA_FORMAT_RGB_F16 *******************************************************/ /* Fetch texel from 1D, 2D or 3D RGB_FLOAT16 texture, * returning 4 GLfloats. @@ -368,25 +369,25 @@ static void FETCH(rgb_f16)( const struct gl_texture_image *texImage, static void FETCH(f_rgb_f16)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 3 ); + const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 3); texel[RCOMP] = _mesa_half_to_float(src[0]); texel[GCOMP] = _mesa_half_to_float(src[1]); texel[BCOMP] = _mesa_half_to_float(src[2]); - texel[ACOMP] = CHAN_MAXF; + texel[ACOMP] = 1.0F; } -/* Fetch texel from 1D, 2D or 3D ALPHA_FLOAT32 texture, - * returning 4 GLchans. - */ -static void FETCH(alpha_f32)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_rgb_f16(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = 0; - UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], src[0]); + const GLfloat *depth = (const GLfloat *) texel; + GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); + dst[0] = _mesa_float_to_half(*depth); } +#endif + + +/* MESA_FORMAT_ALPHA_F32 *****************************************************/ /* Fetch texel from 1D, 2D or 3D ALPHA_FLOAT32 texture, * returning 4 GLfloats. @@ -394,25 +395,25 @@ static void FETCH(alpha_f32)( const struct gl_texture_image *texImage, static void FETCH(f_alpha_f32)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 ); + const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = 0.0F; texel[ACOMP] = src[0]; } -/* Fetch texel from 1D, 2D or 3D ALPHA_FLOAT16 texture, - * returning 4 GLchans. - */ -static void FETCH(alpha_f16)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_alpha_f32(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = 0; - UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], _mesa_half_to_float(src[0])); + const GLfloat *rgba = (const GLfloat *) texel; + GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); + dst[0] = rgba[ACOMP]; } +#endif + + +/* MESA_FORMAT_ALPHA_F32 *****************************************************/ /* Fetch texel from 1D, 2D or 3D ALPHA_FLOAT16 texture, * returning 4 GLfloats. @@ -420,25 +421,25 @@ static void FETCH(alpha_f16)( const struct gl_texture_image *texImage, static void FETCH(f_alpha_f16)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 ); + const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = 0.0F; texel[ACOMP] = _mesa_half_to_float(src[0]); } -/* Fetch texel from 1D, 2D or 3D LUMINANCE_FLOAT32 texture, - * returning 4 GLchans. - */ -static void FETCH(luminance_f32)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_alpha_f16(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]); - texel[GCOMP] = - texel[BCOMP] = texel[RCOMP]; - texel[ACOMP] = CHAN_MAX; + const GLfloat *rgba = (const GLfloat *) texel; + GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); + dst[0] = _mesa_float_to_half(rgba[ACOMP]); } +#endif + + +/* MESA_FORMAT_LUMINANCE_F32 *************************************************/ /* Fetch texel from 1D, 2D or 3D LUMINANCE_FLOAT32 texture, * returning 4 GLfloats. @@ -446,25 +447,25 @@ static void FETCH(luminance_f32)( const struct gl_texture_image *texImage, static void FETCH(f_luminance_f32)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 ); + const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = src[0]; - texel[ACOMP] = CHAN_MAXF; + texel[ACOMP] = 1.0F; } -/* Fetch texel from 1D, 2D or 3D LUMINANCE_FLOAT16 texture, - * returning 4 GLchans. - */ -static void FETCH(luminance_f16)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_luminance_f32(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0])); - texel[GCOMP] = - texel[BCOMP] = texel[RCOMP]; - texel[ACOMP] = CHAN_MAX; + const GLfloat *rgba = (const GLfloat *) texel; + GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); + dst[0] = rgba[RCOMP]; } +#endif + + +/* MESA_FORMAT_LUMINANCE_F16 *************************************************/ /* Fetch texel from 1D, 2D or 3D LUMINANCE_FLOAT16 texture, * returning 4 GLfloats. @@ -472,25 +473,25 @@ static void FETCH(luminance_f16)( const struct gl_texture_image *texImage, static void FETCH(f_luminance_f16)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 ); + const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = _mesa_half_to_float(src[0]); - texel[ACOMP] = CHAN_MAXF; + texel[ACOMP] = 1.0F; } -/* Fetch texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT32 texture, - * returning 4 GLchans. - */ -static void FETCH(luminance_alpha_f32)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_luminance_f16(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 2 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]); - texel[GCOMP] = - texel[BCOMP] = texel[RCOMP]; - UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], src[1]); + const GLfloat *rgba = (const GLfloat *) texel; + GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); + dst[0] = _mesa_float_to_half(rgba[RCOMP]); } +#endif + + +/* MESA_FORMAT_LUMINANCE_ALPHA_F32 *******************************************/ /* Fetch texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT32 texture, * returning 4 GLfloats. @@ -498,25 +499,26 @@ static void FETCH(luminance_alpha_f32)( const struct gl_texture_image *texImage, static void FETCH(f_luminance_alpha_f32)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 2 ); + const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 2); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = src[0]; texel[ACOMP] = src[1]; } -/* Fetch texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT16 texture, - * returning 4 GLfloats. - */ -static void FETCH(luminance_alpha_f16)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_luminance_alpha_f32(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 2 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0])); - texel[GCOMP] = - texel[BCOMP] = texel[RCOMP]; - UNCLAMPED_FLOAT_TO_CHAN(texel[ACOMP], _mesa_half_to_float(src[1])); + const GLfloat *rgba = (const GLfloat *) texel; + GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 2); + dst[0] = rgba[RCOMP]; + dst[1] = rgba[ACOMP]; } +#endif + + +/* MESA_FORMAT_LUMINANCE_ALPHA_F16 *******************************************/ /* Fetch texel from 1D, 2D or 3D LUMINANCE_ALPHA_FLOAT16 texture, * returning 4 GLfloats. @@ -524,25 +526,26 @@ static void FETCH(luminance_alpha_f16)( const struct gl_texture_image *texImage, static void FETCH(f_luminance_alpha_f16)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 2 ); + const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 2); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = _mesa_half_to_float(src[0]); texel[ACOMP] = _mesa_half_to_float(src[1]); } -/* Fetch texel from 1D, 2D or 3D INTENSITY_FLOAT32 texture, - * returning 4 GLchans. - */ -static void FETCH(intensity_f32)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_luminance_alpha_f16(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], src[0]); - texel[GCOMP] = - texel[BCOMP] = - texel[ACOMP] = texel[RCOMP]; + const GLfloat *rgba = (const GLfloat *) texel; + GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 2); + dst[0] = _mesa_float_to_half(rgba[RCOMP]); + dst[1] = _mesa_float_to_half(rgba[ACOMP]); } +#endif + + +/* MESA_FORMAT_INTENSITY_F32 *************************************************/ /* Fetch texel from 1D, 2D or 3D INTENSITY_FLOAT32 texture, * returning 4 GLfloats. @@ -550,25 +553,25 @@ static void FETCH(intensity_f32)( const struct gl_texture_image *texImage, static void FETCH(f_intensity_f32)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLfloat *src = FLOAT_SRC( texImage, i, j, k, 1 ); + const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = texel[ACOMP] = src[0]; } -/* Fetch texel from 1D, 2D or 3D INTENSITY_FLOAT16 texture, - * returning 4 GLchans. - */ -static void FETCH(intensity_f16)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLchan *texel ) +#if DIM == 3 +static void store_texel_intensity_f32(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 ); - UNCLAMPED_FLOAT_TO_CHAN(texel[RCOMP], _mesa_half_to_float(src[0])); - texel[GCOMP] = - texel[BCOMP] = - texel[ACOMP] = texel[RCOMP]; + const GLfloat *rgba = (const GLfloat *) texel; + GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1); + dst[0] = rgba[RCOMP]; } +#endif + + +/* MESA_FORMAT_INTENSITY_F16 *************************************************/ /* Fetch texel from 1D, 2D or 3D INTENSITY_FLOAT16 texture, * returning 4 GLfloats. @@ -576,455 +579,488 @@ static void FETCH(intensity_f16)( const struct gl_texture_image *texImage, static void FETCH(f_intensity_f16)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { - const GLhalfARB *src = HALF_SRC( texImage, i, j, k, 1 ); + const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = texel[ACOMP] = _mesa_half_to_float(src[0]); } +#if DIM == 3 +static void store_texel_intensity_f16(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLfloat *rgba = (const GLfloat *) texel; + GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1); + dst[0] = _mesa_float_to_half(rgba[RCOMP]); +} +#endif + + /* * Begin Hardware formats */ +/* MESA_FORMAT_RGBA8888 ******************************************************/ + /* Fetch texel from 1D, 2D or 3D rgba8888 texture, return 4 GLchans */ static void FETCH(rgba8888)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); + const GLuint s = *TEXEL_ADDR(GLuint, texImage, i, j, k, 1); texel[RCOMP] = UBYTE_TO_CHAN( (s >> 24) ); texel[GCOMP] = UBYTE_TO_CHAN( (s >> 16) & 0xff ); texel[BCOMP] = UBYTE_TO_CHAN( (s >> 8) & 0xff ); texel[ACOMP] = UBYTE_TO_CHAN( (s ) & 0xff ); } -/* Fetch texel from 1D, 2D or 3D rgba8888 texture, return 4 GLfloats */ -static void FETCH(f_rgba8888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_rgba8888(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); - texel[RCOMP] = UBYTE_TO_FLOAT( (s >> 24) ); - texel[GCOMP] = UBYTE_TO_FLOAT( (s >> 16) & 0xff ); - texel[BCOMP] = UBYTE_TO_FLOAT( (s >> 8) & 0xff ); - texel[ACOMP] = UBYTE_TO_FLOAT( (s ) & 0xff ); + const GLubyte *rgba = (const GLubyte *) texel; + GLuint *dst = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + *dst = PACK_COLOR_8888(rgba[RCOMP], rgba[GCOMP], rgba[BCOMP], rgba[ACOMP]); } +#endif +/* MESA_FORMAT_RGBA888_REV ***************************************************/ + /* Fetch texel from 1D, 2D or 3D abgr8888 texture, return 4 GLchans */ static void FETCH(rgba8888_rev)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); + const GLuint s = *TEXEL_ADDR(GLuint, texImage, i, j, k, 1); texel[RCOMP] = UBYTE_TO_CHAN( (s ) & 0xff ); texel[GCOMP] = UBYTE_TO_CHAN( (s >> 8) & 0xff ); texel[BCOMP] = UBYTE_TO_CHAN( (s >> 16) & 0xff ); texel[ACOMP] = UBYTE_TO_CHAN( (s >> 24) ); } -/* Fetch texel from 1D, 2D or 3D abgr8888 texture, return 4 GLfloats */ -static void FETCH(f_rgba8888_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_rgba8888_rev(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); - texel[RCOMP] = UBYTE_TO_FLOAT( (s ) & 0xff ); - texel[GCOMP] = UBYTE_TO_FLOAT( (s >> 8) & 0xff ); - texel[BCOMP] = UBYTE_TO_FLOAT( (s >> 16) & 0xff ); - texel[ACOMP] = UBYTE_TO_FLOAT( (s >> 24) ); + const GLubyte *rgba = (const GLubyte *) texel; + GLuint *dst = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + *dst = PACK_COLOR_8888_REV(rgba[RCOMP], rgba[GCOMP], rgba[BCOMP], rgba[ACOMP]); } +#endif +/* MESA_FORMAT_ARGB8888 ******************************************************/ + /* Fetch texel from 1D, 2D or 3D argb8888 texture, return 4 GLchans */ static void FETCH(argb8888)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); + const GLuint s = *TEXEL_ADDR(GLuint, texImage, i, j, k, 1); texel[RCOMP] = UBYTE_TO_CHAN( (s >> 16) & 0xff ); texel[GCOMP] = UBYTE_TO_CHAN( (s >> 8) & 0xff ); texel[BCOMP] = UBYTE_TO_CHAN( (s ) & 0xff ); texel[ACOMP] = UBYTE_TO_CHAN( (s >> 24) ); } -/* Fetch texel from 1D, 2D or 3D argb8888 texture, return 4 GLfloats */ -static void FETCH(f_argb8888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_argb8888(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); - texel[RCOMP] = UBYTE_TO_FLOAT( (s >> 16) & 0xff ); - texel[GCOMP] = UBYTE_TO_FLOAT( (s >> 8) & 0xff ); - texel[BCOMP] = UBYTE_TO_FLOAT( (s ) & 0xff ); - texel[ACOMP] = UBYTE_TO_FLOAT( (s >> 24) ); + const GLubyte *rgba = (const GLubyte *) texel; + GLuint *dst = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + *dst = PACK_COLOR_8888(rgba[ACOMP], rgba[RCOMP], rgba[GCOMP], rgba[BCOMP]); } +#endif +/* MESA_FORMAT_ARGB8888_REV **************************************************/ + /* Fetch texel from 1D, 2D or 3D argb8888_rev texture, return 4 GLchans */ static void FETCH(argb8888_rev)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); + const GLuint s = *TEXEL_ADDR(GLuint, texImage, i, j, k, 1); texel[RCOMP] = UBYTE_TO_CHAN( (s >> 8) & 0xff ); texel[GCOMP] = UBYTE_TO_CHAN( (s >> 16) & 0xff ); texel[BCOMP] = UBYTE_TO_CHAN( (s >> 24) ); texel[ACOMP] = UBYTE_TO_CHAN( (s ) & 0xff ); } - -/* Fetch texel from 1D, 2D or 3D argb8888_rev texture, return 4 GLfloats */ -static void FETCH(f_argb8888_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_argb8888_rev(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLuint s = *UINT_SRC( texImage, i, j, k ); - texel[RCOMP] = UBYTE_TO_FLOAT( (s >> 8) & 0xff ); - texel[GCOMP] = UBYTE_TO_FLOAT( (s >> 16) & 0xff ); - texel[BCOMP] = UBYTE_TO_FLOAT( (s >> 24) ); - texel[ACOMP] = UBYTE_TO_FLOAT( (s ) & 0xff ); + const GLubyte *rgba = (const GLubyte *) texel; + GLuint *dst = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + *dst = PACK_COLOR_8888(rgba[ACOMP], rgba[RCOMP], rgba[GCOMP], rgba[BCOMP]); } +#endif +/* MESA_FORMAT_RGB888 ********************************************************/ + /* Fetch texel from 1D, 2D or 3D rgb888 texture, return 4 GLchans */ static void FETCH(rgb888)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 ); + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); texel[RCOMP] = UBYTE_TO_CHAN( src[2] ); texel[GCOMP] = UBYTE_TO_CHAN( src[1] ); texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D rgb888 texture, return 4 GLfloats */ -static void FETCH(f_rgb888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_rgb888(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 ); - texel[RCOMP] = UBYTE_TO_FLOAT( src[2] ); - texel[GCOMP] = UBYTE_TO_FLOAT( src[1] ); - texel[BCOMP] = UBYTE_TO_FLOAT( src[0] ); - texel[ACOMP] = CHAN_MAXF; + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); + dst[0] = rgba[RCOMP]; + dst[1] = rgba[GCOMP]; + dst[2] = rgba[BCOMP]; } +#endif +/* MESA_FORMAT_BGR888 ********************************************************/ + /* Fetch texel from 1D, 2D or 3D bgr888 texture, return 4 GLchans */ static void FETCH(bgr888)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 ); + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); texel[RCOMP] = UBYTE_TO_CHAN( src[0] ); texel[GCOMP] = UBYTE_TO_CHAN( src[1] ); texel[BCOMP] = UBYTE_TO_CHAN( src[2] ); texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D bgr888 texture, return 4 GLfloats */ -static void FETCH(f_bgr888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_bgr888(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 ); - texel[RCOMP] = UBYTE_TO_FLOAT( src[0] ); - texel[GCOMP] = UBYTE_TO_FLOAT( src[1] ); - texel[BCOMP] = UBYTE_TO_FLOAT( src[2] ); - texel[ACOMP] = CHAN_MAXF; + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); + dst[0] = rgba[BCOMP]; + dst[1] = rgba[GCOMP]; + dst[2] = rgba[RCOMP]; } +#endif +/* use color expansion like (g << 2) | (g >> 4) (does somewhat random rounding) + instead of slow (g << 2) * 255 / 252 (always rounds down) */ + +/* MESA_FORMAT_RGB565 ********************************************************/ + /* Fetch texel from 1D, 2D or 3D rgb565 texture, return 4 GLchans */ static void FETCH(rgb565)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort *src = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); const GLushort s = *src; - texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 ); - texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc ); - texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) | ((s >> 13) & 0x7) ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) | ((s >> 9) & 0x3) ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) | ((s >> 2) & 0x7) ); texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D rgb565 texture, return 4 GLfloats */ -static void FETCH(f_rgb565)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_rgb565(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); - const GLushort s = *src; - texel[RCOMP] = ((s >> 8) & 0xf8) * (1.0F / 248.0F); - texel[GCOMP] = ((s >> 3) & 0xfc) * (1.0F / 252.0F); - texel[BCOMP] = ((s << 3) & 0xf8) * (1.0F / 248.0F); - texel[ACOMP] = CHAN_MAXF; + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_565(rgba[RCOMP], rgba[GCOMP], rgba[BCOMP]); } +#endif +/* MESA_FORMAT_RGB565_REV ****************************************************/ + /* Fetch texel from 1D, 2D or 3D rgb565_rev texture, return 4 GLchans */ static void FETCH(rgb565_rev)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort *src = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); const GLushort s = (*src >> 8) | (*src << 8); /* byte swap */ - texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 ); - texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc ); - texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) | ((s >> 13) & 0x7) ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) | ((s >> 9) & 0x3) ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) | ((s >> 2) & 0x7) ); texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D rgb565_rev texture, return 4 GLfloats */ -static void FETCH(f_rgb565_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_rgb565_rev(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); - const GLushort s = (*src >> 8) | (*src << 8); /* byte swap */ - texel[RCOMP] = ((s >> 8) & 0xf8) * (1.0F / 248.0F); - texel[GCOMP] = ((s >> 3) & 0xfc) * (1.0F / 252.0F); - texel[BCOMP] = ((s << 3) & 0xf8) * (1.0F / 248.0F); - texel[ACOMP] = CHAN_MAXF; + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_565(rgba[BCOMP], rgba[GCOMP], rgba[RCOMP]); } +#endif +/* MESA_FORMAT_ARGB4444 ******************************************************/ + /* Fetch texel from 1D, 2D or 3D argb444 texture, return 4 GLchans */ static void FETCH(argb4444)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort *src = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); const GLushort s = *src; - texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf ); - texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf ); - texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf ); - texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) | ((s >> 4) & 0xf0) ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) | ((s ) & 0xf0) ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) | ((s << 4) & 0xf0) ); + texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) | ((s >> 8) & 0xf0) ); } -/* Fetch texel from 1D, 2D or 3D argb4444 texture, return 4 GLfloats */ -static void FETCH(f_argb4444)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_argb4444(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); - const GLushort s = *src; - texel[RCOMP] = ((s >> 8) & 0xf) * (1.0F / 15.0F); - texel[GCOMP] = ((s >> 4) & 0xf) * (1.0F / 15.0F); - texel[BCOMP] = ((s ) & 0xf) * (1.0F / 15.0F); - texel[ACOMP] = ((s >> 12) & 0xf) * (1.0F / 15.0F); + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_4444(rgba[RCOMP], rgba[GCOMP], rgba[BCOMP], rgba[ACOMP]); } +#endif +/* MESA_FORMAT_ARGB4444_REV **************************************************/ + /* Fetch texel from 1D, 2D or 3D argb4444_rev texture, return 4 GLchans */ static void FETCH(argb4444_rev)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort s = *USHORT_SRC( texImage, i, j, k ); - texel[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf ); - texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf ); - texel[BCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf ); - texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf ); + const GLushort s = *TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + texel[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) | ((s << 4) & 0xf0) ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) | ((s >> 8) & 0xf0) ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) | ((s >> 4) & 0xf0) ); + texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) | ((s ) & 0xf0) ); } -/* Fetch texel from 1D, 2D or 3D argb4444_rev texture, return 4 GLfloats */ -static void FETCH(f_argb4444_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_argb4444_rev(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort s = *USHORT_SRC( texImage, i, j, k ); - texel[RCOMP] = ((s ) & 0xf) * (1.0F / 15.0F); - texel[GCOMP] = ((s >> 12) & 0xf) * (1.0F / 15.0F); - texel[BCOMP] = ((s >> 8) & 0xf) * (1.0F / 15.0F); - texel[ACOMP] = ((s >> 4) & 0xf) * (1.0F / 15.0F); + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_4444(rgba[ACOMP], rgba[BCOMP], rgba[GCOMP], rgba[RCOMP]); } +#endif +/* MESA_FORMAT_ARGB1555 ******************************************************/ + /* Fetch texel from 1D, 2D or 3D argb1555 texture, return 4 GLchans */ static void FETCH(argb1555)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort *src = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); const GLushort s = *src; - texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0x1f) * 255 / 0x1f ); - texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0x1f) * 255 / 0x1f ); - texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0x1f) * 255 / 0x1f ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 7) & 0xf8) | ((s >> 12) & 0x7) ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 2) & 0xf8) | ((s >> 7) & 0x7) ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) | ((s >> 2) & 0x7) ); texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 ); } -/* Fetch texel from 1D, 2D or 3D argb1555 texture, return 4 GLfloats */ -static void FETCH(f_argb1555)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_argb1555(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); - const GLushort s = *src; - texel[RCOMP] = ((s >> 10) & 0x1f) * (1.0F / 31.0F); - texel[GCOMP] = ((s >> 5) & 0x1f) * (1.0F / 31.0F); - texel[BCOMP] = ((s ) & 0x1f) * (1.0F / 31.0F); - texel[ACOMP] = ((s >> 15) & 0x01); + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_1555(rgba[ACOMP], rgba[RCOMP], rgba[GCOMP], rgba[BCOMP]); } +#endif +/* MESA_FORMAT_ARGB1555_REV **************************************************/ + /* Fetch texel from 1D, 2D or 3D argb1555_rev texture, return 4 GLchans */ static void FETCH(argb1555_rev)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort *src = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); const GLushort s = (*src << 8) | (*src >> 8); /* byteswap */ - texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0x1f) * 255 / 0x1f ); - texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0x1f) * 255 / 0x1f ); - texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0x1f) * 255 / 0x1f ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 7) & 0xf8) | ((s >> 12) & 0x7) ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 2) & 0xf8) | ((s >> 7) & 0x7) ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) | ((s >> 2) & 0x7) ); texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 ); } -/* Fetch texel from 1D, 2D or 3D argb1555_rev texture, return 4 GLfloats */ -static void FETCH(f_argb1555_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_argb1555_rev(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort *src = USHORT_SRC( texImage, i, j, k ); - const GLushort s = (*src << 8) | (*src >> 8); /* byteswap */ - texel[RCOMP] = ((s >> 10) & 0x1f) * (1.0F / 31.0F); - texel[GCOMP] = ((s >> 5) & 0x1f) * (1.0F / 31.0F); - texel[BCOMP] = ((s ) & 0x1f) * (1.0F / 31.0F); - texel[ACOMP] = ((s >> 15) & 0x01); + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_1555_REV(rgba[ACOMP], rgba[RCOMP], rgba[GCOMP], rgba[BCOMP]); } +#endif +/* MESA_FORMAT_AL88 **********************************************************/ + /* Fetch texel from 1D, 2D or 3D al88 texture, return 4 GLchans */ static void FETCH(al88)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort s = *USHORT_SRC( texImage, i, j, k ); + const GLushort s = *TEXEL_ADDR(GLushort, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = UBYTE_TO_CHAN( s & 0xff ); texel[ACOMP] = UBYTE_TO_CHAN( s >> 8 ); } -/* Fetch texel from 1D, 2D or 3D al88 texture, return 4 GLfloats */ -static void FETCH(f_al88)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_al88(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort s = *USHORT_SRC( texImage, i, j, k ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = UBYTE_TO_FLOAT( s & 0xff ); - texel[ACOMP] = UBYTE_TO_FLOAT( s >> 8 ); + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_88(rgba[ACOMP], rgba[RCOMP]); } +#endif +/* MESA_FORMAT_AL88_REV ******************************************************/ + /* Fetch texel from 1D, 2D or 3D al88_rev texture, return 4 GLchans */ static void FETCH(al88_rev)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort s = *USHORT_SRC( texImage, i, j, k ); + const GLushort s = *TEXEL_ADDR(GLushort, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = UBYTE_TO_CHAN( s >> 8 ); texel[ACOMP] = UBYTE_TO_CHAN( s & 0xff ); } -/* Fetch texel from 1D, 2D or 3D al88_rev texture, return 4 GLfloats */ -static void FETCH(f_al88_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_al88_rev(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort s = *USHORT_SRC( texImage, i, j, k ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = UBYTE_TO_FLOAT( s >> 8 ); - texel[ACOMP] = UBYTE_TO_FLOAT( s & 0xff ); + const GLubyte *rgba = (const GLubyte *) texel; + GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1); + *dst = PACK_COLOR_88(rgba[RCOMP], rgba[ACOMP]); } +#endif +/* MESA_FORMAT_RGB332 ********************************************************/ + /* Fetch texel from 1D, 2D or 3D rgb332 texture, return 4 GLchans */ static void FETCH(rgb332)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + static const GLubyte lut2to8[4] = {0, 85, 170, 255}; + static const GLubyte lut3to8[8] = {0, 36, 73, 109, 146, 182, 219, 255}; + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); const GLubyte s = *src; - texel[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xe0) * 255 / 0xe0 ); - texel[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 ); - texel[BCOMP] = UBYTE_TO_CHAN( ((s << 6) & 0xc0) * 255 / 0xc0 ); + texel[RCOMP] = UBYTE_TO_CHAN( lut3to8[(s >> 5) & 0x7] ); + texel[GCOMP] = UBYTE_TO_CHAN( lut3to8[(s >> 2) & 0x7] ); + texel[BCOMP] = UBYTE_TO_CHAN( lut2to8[(s ) & 0x3] ); texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D rgb332 texture, return 4 GLfloats */ -static void FETCH(f_rgb332)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_rgb332(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); - const GLubyte s = *src; - texel[RCOMP] = ((s ) & 0xe0) * (1.0F / 224.0F); - texel[GCOMP] = ((s << 3) & 0xe0) * (1.0F / 224.0F); - texel[BCOMP] = ((s << 6) & 0xc0) * (1.0F / 192.0F); - texel[ACOMP] = CHAN_MAXF; + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); + *dst = PACK_COLOR_332(rgba[RCOMP], rgba[GCOMP], rgba[BCOMP]); } +#endif +/* MESA_FORMAT_A8 ************************************************************/ + /* Fetch texel from 1D, 2D or 3D a8 texture, return 4 GLchans */ static void FETCH(a8)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = 0; texel[ACOMP] = UBYTE_TO_CHAN( src[0] ); } -/* Fetch texel from 1D, 2D or 3D a8 texture, return 4 GLfloats */ -static void FETCH(f_a8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_a8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = 0.0; - texel[ACOMP] = UBYTE_TO_FLOAT( src[0] ); + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); + *dst = rgba[ACOMP]; } +#endif +/* MESA_FORMAT_L8 ************************************************************/ + /* Fetch texel from 1D, 2D or 3D l8 texture, return 4 GLchans */ static void FETCH(l8)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D l8 texture, return 4 GLfloats */ -static void FETCH(f_l8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_l8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = UBYTE_TO_FLOAT( src[0] ); - texel[ACOMP] = CHAN_MAXF; + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); + *dst = rgba[RCOMP]; } +#endif +/* MESA_FORMAT_I8 ************************************************************/ + /* Fetch texel from 1D, 2D or 3D i8 texture, return 4 GLchans */ static void FETCH(i8)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = texel[ACOMP] = UBYTE_TO_CHAN( src[0] ); } -/* Fetch texel from 1D, 2D or 3D i8 texture, return 4 GLfloats */ -static void FETCH(f_i8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_i8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = - texel[ACOMP] = UBYTE_TO_FLOAT( src[0] ); + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); + *dst = rgba[RCOMP]; } +#endif +/* MESA_FORMAT_CI8 ***********************************************************/ + /* Fetch CI texel from 1D, 2D or 3D ci8 texture, lookup the index in a * color table, and return 4 GLchans. */ static void FETCH(ci8)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); const struct gl_color_table *palette; - const GLchan *table; + GLubyte texelUB[4]; GLuint index; GET_CURRENT_CONTEXT(ctx); @@ -1036,71 +1072,177 @@ static void FETCH(ci8)( const struct gl_texture_image *texImage, } if (palette->Size == 0) return; /* undefined results */ - ASSERT(palette->Type != GL_FLOAT); - table = (const GLchan *) palette->Table; /* Mask the index against size of palette to avoid going out of bounds */ index = (*src) & (palette->Size - 1); - switch (palette->Format) { + { + const GLubyte *table = palette->TableUB; + switch (palette->_BaseFormat) { case GL_ALPHA: - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = 0; - texel[ACOMP] = table[index]; - return; + texelUB[RCOMP] = + texelUB[GCOMP] = + texelUB[BCOMP] = 0; + texelUB[ACOMP] = table[index]; + break;; case GL_LUMINANCE: - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = table[index]; - texel[ACOMP] = CHAN_MAX; + texelUB[RCOMP] = + texelUB[GCOMP] = + texelUB[BCOMP] = table[index]; + texelUB[ACOMP] = 255; break; case GL_INTENSITY: - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = - texel[ACOMP] = table[index]; - return; + texelUB[RCOMP] = + texelUB[GCOMP] = + texelUB[BCOMP] = + texelUB[ACOMP] = table[index]; + break;; case GL_LUMINANCE_ALPHA: - texel[RCOMP] = - texel[GCOMP] = - texel[BCOMP] = table[index * 2 + 0]; - texel[ACOMP] = table[index * 2 + 1]; - return; + texelUB[RCOMP] = + texelUB[GCOMP] = + texelUB[BCOMP] = table[index * 2 + 0]; + texelUB[ACOMP] = table[index * 2 + 1]; + break;; case GL_RGB: - texel[RCOMP] = table[index * 3 + 0]; - texel[GCOMP] = table[index * 3 + 1]; - texel[BCOMP] = table[index * 3 + 2]; - texel[ACOMP] = CHAN_MAX; - return; + texelUB[RCOMP] = table[index * 3 + 0]; + texelUB[GCOMP] = table[index * 3 + 1]; + texelUB[BCOMP] = table[index * 3 + 2]; + texelUB[ACOMP] = 255; + break;; case GL_RGBA: - texel[RCOMP] = table[index * 4 + 0]; - texel[GCOMP] = table[index * 4 + 1]; - texel[BCOMP] = table[index * 4 + 2]; - texel[ACOMP] = table[index * 4 + 3]; - return; + texelUB[RCOMP] = table[index * 4 + 0]; + texelUB[GCOMP] = table[index * 4 + 1]; + texelUB[BCOMP] = table[index * 4 + 2]; + texelUB[ACOMP] = table[index * 4 + 3]; + break;; default: - _mesa_problem(ctx, "Bad palette format in palette_sample"); + _mesa_problem(ctx, "Bad palette format in fetch_texel_ci8"); + } +#if CHAN_TYPE == GL_UNSIGNED_BYTE + COPY_4UBV(texel, texelUB); +#elif CHAN_TYPE == GL_UNSIGNED_SHORT + texel[0] = UBYTE_TO_USHORT(texelUB[0]); + texel[1] = UBYTE_TO_USHORT(texelUB[1]); + texel[2] = UBYTE_TO_USHORT(texelUB[2]); + texel[3] = UBYTE_TO_USHORT(texelUB[3]); +#else + texel[0] = UBYTE_TO_FLOAT(texelUB[0]); + texel[1] = UBYTE_TO_FLOAT(texelUB[1]); + texel[2] = UBYTE_TO_FLOAT(texelUB[2]); + texel[3] = UBYTE_TO_FLOAT(texelUB[3]); +#endif } } - -/* Fetch CI texel from 1D, 2D or 3D ci8 texture, lookup the index in a - * color table, and return 4 GLfloats. - */ -static void FETCH(f_ci8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_ci8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - GLchan rgba[4]; - /* Sample as GLchan */ - FETCH(ci8)(texImage, i, j, k, rgba); - /* and return as floats */ - texel[RCOMP] = CHAN_TO_FLOAT(rgba[RCOMP]); - texel[GCOMP] = CHAN_TO_FLOAT(rgba[GCOMP]); - texel[BCOMP] = CHAN_TO_FLOAT(rgba[BCOMP]); - texel[ACOMP] = CHAN_TO_FLOAT(rgba[ACOMP]); + const GLubyte *index = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); + *dst = *index; +} +#endif + + +#if FEATURE_EXT_texture_sRGB + +/* Fetch texel from 1D, 2D or 3D srgb8 texture, return 4 GLfloats */ +static void FETCH(srgb8)(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); + texel[RCOMP] = nonlinear_to_linear(src[0]); + texel[GCOMP] = nonlinear_to_linear(src[1]); + texel[BCOMP] = nonlinear_to_linear(src[2]); + texel[ACOMP] = CHAN_MAX; } +#if DIM == 3 +static void store_texel_srgb8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); + dst[0] = rgba[RCOMP]; /* no conversion */ + dst[1] = rgba[GCOMP]; + dst[2] = rgba[BCOMP]; +} +#endif + +/* Fetch texel from 1D, 2D or 3D srgba8 texture, return 4 GLfloats */ +static void FETCH(srgba8)(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 4); + texel[RCOMP] = nonlinear_to_linear(src[0]); + texel[GCOMP] = nonlinear_to_linear(src[1]); + texel[BCOMP] = nonlinear_to_linear(src[2]); + texel[ACOMP] = UBYTE_TO_FLOAT(src[3]); /* linear! */ +} + +#if DIM == 3 +static void store_texel_srgba8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 4); + dst[0] = rgba[RCOMP]; + dst[1] = rgba[GCOMP]; + dst[2] = rgba[BCOMP]; +} +#endif + +/* Fetch texel from 1D, 2D or 3D sl8 texture, return 4 GLfloats */ +static void FETCH(sl8)(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = nonlinear_to_linear(src[0]); + texel[ACOMP] = CHAN_MAX; +} + +#if DIM == 3 +static void store_texel_sl8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 1); + dst[0] = rgba[RCOMP]; +} +#endif + +/* Fetch texel from 1D, 2D or 3D sla8 texture, return 4 GLfloats */ +static void FETCH(sla8)(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = TEXEL_ADDR(GLubyte, texImage, i, j, k, 2); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = nonlinear_to_linear(src[0]); + texel[ACOMP] = UBYTE_TO_FLOAT(src[1]); /* linear */ +} + +#if DIM == 3 +static void store_texel_sla8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLubyte *rgba = (const GLubyte *) texel; + GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 2); + dst[0] = rgba[RCOMP]; + dst[1] = rgba[ACOMP]; +} +#endif + + + +#endif /* FEATURE_EXT_texture_sRGB */ + + + +/* MESA_FORMAT_YCBCR *********************************************************/ /* Fetch texel from 1D, 2D or 3D ycbcr texture, return 4 GLchans */ /* We convert YCbCr to RGB here */ @@ -1108,7 +1250,7 @@ static void FETCH(f_ci8)( const struct gl_texture_image *texImage, static void FETCH(ycbcr)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ + const GLushort *src0 = TEXEL_ADDR(GLushort, texImage, (i & ~1), j, k, 1); /* even */ const GLushort *src1 = src0 + 1; /* odd */ const GLubyte y0 = (*src0 >> 8) & 0xff; /* luminance */ const GLubyte cb = *src0 & 0xff; /* chroma U */ @@ -1133,49 +1275,29 @@ static void FETCH(ycbcr)( const struct gl_texture_image *texImage, texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D ycbcr texture, return 4 GLfloats */ -/* We convert YCbCr to RGB here */ -static void FETCH(f_ycbcr)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_ycbcr(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ - const GLushort *src1 = src0 + 1; /* odd */ - const GLubyte y0 = (*src0 >> 8) & 0xff; /* luminance */ - const GLubyte cb = *src0 & 0xff; /* chroma U */ - const GLubyte y1 = (*src1 >> 8) & 0xff; /* luminance */ - const GLubyte cr = *src1 & 0xff; /* chroma V */ - GLfloat r, g, b; - if (i & 1) { - /* odd pixel: use y1,cr,cb */ - r = (1.164 * (y1-16) + 1.596 * (cr-128)); - g = (1.164 * (y1-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); - b = (1.164 * (y1-16) + 2.018 * (cb-128)); - } - else { - /* even pixel: use y0,cr,cb */ - r = (1.164 * (y0-16) + 1.596 * (cr-128)); - g = (1.164 * (y0-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); - b = (1.164 * (y0-16) + 2.018 * (cb-128)); - } - /* XXX remove / 255 here by tweaking arithmetic above */ - r /= 255.0; - g /= 255.0; - b /= 255.0; - /* XXX should we really clamp??? */ - texel[RCOMP] = CLAMP(r, 0.0, 1.0); - texel[GCOMP] = CLAMP(g, 0.0, 1.0); - texel[BCOMP] = CLAMP(b, 0.0, 1.0); - texel[ACOMP] = CHAN_MAXF; + (void) texImage; + (void) i; + (void) j; + (void) k; + (void) texel; + /* XXX to do */ } +#endif +/* MESA_FORMAT_YCBCR_REV *****************************************************/ + /* Fetch texel from 1D, 2D or 3D ycbcr_rev texture, return 4 GLchans */ /* We convert YCbCr to RGB here */ /* XXX this may break if GLchan != GLubyte */ static void FETCH(ycbcr_rev)( const struct gl_texture_image *texImage, GLint i, GLint j, GLint k, GLchan *texel ) { - const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ + const GLushort *src0 = TEXEL_ADDR(GLushort, texImage, (i & ~1), j, k, 1); /* even */ const GLushort *src1 = src0 + 1; /* odd */ const GLubyte y0 = *src0 & 0xff; /* luminance */ const GLubyte cr = (*src0 >> 8) & 0xff; /* chroma V */ @@ -1200,48 +1322,48 @@ static void FETCH(ycbcr_rev)( const struct gl_texture_image *texImage, texel[ACOMP] = CHAN_MAX; } -/* Fetch texel from 1D, 2D or 3D ycbcr_rev texture, return 4 GLfloats */ -/* We convert YCbCr to RGB here */ -static void FETCH(f_ycbcr_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLfloat *texel ) +#if DIM == 3 +static void store_texel_ycbcr_rev(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) { - const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ - const GLushort *src1 = src0 + 1; /* odd */ - const GLubyte y0 = *src0 & 0xff; /* luminance */ - const GLubyte cr = (*src0 >> 8) & 0xff; /* chroma V */ - const GLubyte y1 = *src1 & 0xff; /* luminance */ - const GLubyte cb = (*src1 >> 8) & 0xff; /* chroma U */ - GLfloat r, g, b; - if (i & 1) { - /* odd pixel: use y1,cr,cb */ - r = (1.164 * (y1-16) + 1.596 * (cr-128)); - g = (1.164 * (y1-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); - b = (1.164 * (y1-16) + 2.018 * (cb-128)); - } - else { - /* even pixel: use y0,cr,cb */ - r = (1.164 * (y0-16) + 1.596 * (cr-128)); - g = (1.164 * (y0-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); - b = (1.164 * (y0-16) + 2.018 * (cb-128)); - } - /* XXX remove / 255 here by tweaking arithmetic above */ - r /= 255.0; - g /= 255.0; - b /= 255.0; - /* XXX should we really clamp??? */ - texel[RCOMP] = CLAMP(r, 0.0, 1.0); - texel[GCOMP] = CLAMP(g, 0.0, 1.0); - texel[BCOMP] = CLAMP(b, 0.0, 1.0); - texel[ACOMP] = CHAN_MAXF; + (void) texImage; + (void) i; + (void) j; + (void) k; + (void) texel; + /* XXX to do */ +} +#endif + + +/* MESA_TEXFORMAT_Z24_S8 ***************************************************/ + +static void FETCH(f_z24_s8)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + /* only return Z, not stencil data */ + const GLuint *src = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + const GLfloat scale = 1.0F / (GLfloat) 0xffffff; + texel[0] = ((*src) >> 8) * scale; + ASSERT(texImage->TexFormat->MesaFormat == MESA_FORMAT_Z24_S8); + ASSERT(texel[0] >= 0.0F); + ASSERT(texel[0] <= 1.0F); } +#if DIM == 3 +static void store_texel_z24_s8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + /* only store Z, not stencil */ + GLuint *dst = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); + GLfloat depth = *((GLfloat *) texel); + GLuint zi = ((GLuint) (depth * 0xffffff)) << 8; + *dst = zi | (*dst & 0xff); +} +#endif -#undef CHAN_SRC -#undef UBYTE_SRC -#undef USHORT_SRC -#undef UINT_SRC -#undef FLOAT_SRC -#undef HALF_SRC -#undef FETCH + +#undef TEXEL_ADDR #undef DIM +#undef FETCH diff --git a/src/kits/opengl/mesa/main/teximage.c b/src/kits/opengl/mesa/main/teximage.c index 55d7511679..543d6efc98 100644 --- a/src/kits/opengl/mesa/main/teximage.c +++ b/src/kits/opengl/mesa/main/teximage.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -25,13 +25,7 @@ /** * \file teximage.c - * Texture images manipulation functions. - * - * \note Mesa's native texture data type is GLchan. Native formats are - * GL_ALPHA, GL_LUMINANCE, GL_LUMANCE_ALPHA, GL_INTENSITY, GL_RGB, GL_RGBA, and - * GL_COLOR_INDEX. - * - * \note Device drivers are free to implement any internal format they want. + * Texture image-related functions. */ @@ -39,6 +33,8 @@ #include "bufferobj.h" #include "context.h" #include "convolve.h" +#include "fbobject.h" +#include "framebuffer.h" #include "image.h" #include "imports.h" #include "macros.h" @@ -51,14 +47,37 @@ #include "mtypes.h" +/** + * We allocate texture memory on 512-byte boundaries so we can use MMX/SSE + * elsewhere. + */ +void * +_mesa_alloc_texmemory(GLsizei bytes) +{ + return _mesa_align_malloc(bytes, 512); +} + + +/** + * Free texture memory allocated with _mesa_alloc_texmemory() + */ +void +_mesa_free_texmemory(void *m) +{ + _mesa_align_free(m); +} + + + + #if 0 static void PrintTexture(GLcontext *ctx, const struct gl_texture_image *img) { -#if CHAN_TYPE == GL_FLOAT - _mesa_problem(NULL, "PrintTexture doesn't support float channels"); +#if CHAN_TYPE != GL_UNSIGNED_BYTE + _mesa_problem(NULL, "PrintTexture not supported"); #else GLuint i, j, c; - const GLchan *data = (const GLchan *) img->Data; + const GLubyte *data = (const GLubyte *) img->Data; if (!data) { _mesa_printf("No texture data\n"); @@ -98,6 +117,7 @@ static void PrintTexture(GLcontext *ctx, const struct gl_texture_image *img) _mesa_printf("%02x%02x%02x%02x ", data[0], data[1], data[2], data[3]); data += (img->RowStride - img->Width) * c; } + /* XXX use img->ImageStride here */ _mesa_printf("\n"); } #endif @@ -219,7 +239,8 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat ) } } - if (ctx->Extensions.SGIX_depth_texture) { + if (ctx->Extensions.SGIX_depth_texture || + ctx->Extensions.ARB_depth_texture) { switch (internalFormat) { case GL_DEPTH_COMPONENT: case GL_DEPTH_COMPONENT16_SGIX: @@ -317,6 +338,46 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat ) } } + if (ctx->Extensions.EXT_packed_depth_stencil) { + switch (internalFormat) { + case GL_DEPTH_STENCIL_EXT: + case GL_DEPTH24_STENCIL8_EXT: + return GL_DEPTH_STENCIL_EXT; + default: + ; /* fallthrough */ + } + } + +#if FEATURE_EXT_texture_sRGB + if (ctx->Extensions.EXT_texture_sRGB) { + switch (internalFormat) { + case GL_SRGB_EXT: + case GL_SRGB8_EXT: + case GL_COMPRESSED_SRGB_EXT: + case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + return GL_RGB; + case GL_SRGB_ALPHA_EXT: + case GL_SRGB8_ALPHA8_EXT: + case GL_COMPRESSED_SRGB_ALPHA_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + return GL_RGBA; + case GL_SLUMINANCE_ALPHA_EXT: + case GL_SLUMINANCE8_ALPHA8_EXT: + case GL_COMPRESSED_SLUMINANCE_EXT: + case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: + return GL_LUMINANCE_ALPHA; + case GL_SLUMINANCE_EXT: + case GL_SLUMINANCE8_EXT: + return GL_LUMINANCE; + default: + ; /* fallthrough */ + } + } + +#endif /* FEATURE_EXT_texture_sRGB */ + return -1; /* error */ } @@ -409,6 +470,24 @@ is_color_format(GLenum format) case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: case GL_COMPRESSED_RGB_FXT1_3DFX: case GL_COMPRESSED_RGBA_FXT1_3DFX: +#if FEATURE_EXT_texture_sRGB + case GL_SRGB_EXT: + case GL_SRGB8_EXT: + case GL_SRGB_ALPHA_EXT: + case GL_SRGB8_ALPHA8_EXT: + case GL_SLUMINANCE_ALPHA_EXT: + case GL_SLUMINANCE8_ALPHA8_EXT: + case GL_SLUMINANCE_EXT: + case GL_SLUMINANCE8_EXT: + case GL_COMPRESSED_SRGB_EXT: + case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_ALPHA_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + case GL_COMPRESSED_SLUMINANCE_EXT: + case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: +#endif /* FEATURE_EXT_texture_sRGB */ return GL_TRUE; case GL_YCBCR_MESA: /* not considered to be RGB */ default: @@ -471,6 +550,23 @@ is_ycbcr_format(GLenum format) } +/** + * Test if the given image format is a Depth/Stencil format. + */ +static GLboolean +is_depthstencil_format(GLenum format) +{ + switch (format) { + case GL_DEPTH24_STENCIL8_EXT: + case GL_DEPTH_STENCIL_EXT: + return GL_TRUE; + default: + return GL_FALSE; + } +} + + + /** * Test if it is a supported compressed format. * @@ -485,25 +581,32 @@ is_ycbcr_format(GLenum format) static GLboolean is_compressed_format(GLcontext *ctx, GLenum internalFormat) { - (void) ctx; - switch (internalFormat) { - case GL_COMPRESSED_RGB_FXT1_3DFX: - case GL_COMPRESSED_RGBA_FXT1_3DFX: - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - case GL_RGB_S3TC: - case GL_RGB4_S3TC: - case GL_RGBA_S3TC: - case GL_RGBA4_S3TC: + GLint supported[100]; /* 100 should be plenty */ + GLuint i, n; + + n = _mesa_get_compressed_formats(ctx, supported, GL_TRUE); + ASSERT(n < 100); + for (i = 0; i < n; i++) { + if ((GLint) internalFormat == supported[i]) { return GL_TRUE; - default: - return GL_FALSE; + } } + return GL_FALSE; } +static GLuint +texture_face(GLenum target) +{ + if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB && + target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) + return (GLuint) target - (GLuint) GL_TEXTURE_CUBE_MAP_POSITIVE_X; + else + return 0; +} + + + /** * Store a gl_texture_image pointer in a gl_texture_object structure * according to the target and level parameters. @@ -533,12 +636,13 @@ _mesa_set_tex_image(struct gl_texture_object *tObj, case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB: case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: { - GLuint face = ((GLuint) target - - (GLuint) GL_TEXTURE_CUBE_MAP_POSITIVE_X); - tObj->Image[face][level] = texImage; - break; - } + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: + { + GLuint face = ((GLuint) target - + (GLuint) GL_TEXTURE_CUBE_MAP_POSITIVE_X); + tObj->Image[face][level] = texImage; + } + break; case GL_TEXTURE_RECTANGLE_NV: ASSERT(level == 0); tObj->Image[0][level] = texImage; @@ -569,22 +673,49 @@ _mesa_new_texture_image( GLcontext *ctx ) } +/** + * Free texture image data. + * This function is a fallback called via ctx->Driver.FreeTexImageData(). + * + * \param teximage texture image. + * + * Free the texture image data if it's not marked as client data. + */ +void +_mesa_free_texture_image_data(GLcontext *ctx, + struct gl_texture_image *texImage) +{ + (void) ctx; + + if (texImage->Data && !texImage->IsClientData) { + /* free the old texture data */ + _mesa_free_texmemory(texImage->Data); + } + + texImage->Data = NULL; +} + + /** * Free texture image. * * \param teximage texture image. * - * Free the texture image structure and the associated image data if it's not - * marked as client data. + * Free the texture image structure and the associated image data. */ void -_mesa_delete_texture_image( struct gl_texture_image *teximage ) +_mesa_delete_texture_image( GLcontext *ctx, struct gl_texture_image *texImage ) { - if (teximage->Data && !teximage->IsClientData) { - MESA_PBUFFER_FREE( teximage->Data ); - teximage->Data = NULL; - } - FREE( teximage ); + /* Free texImage->Data and/or any other driver-specific texture + * image storage. + */ + ASSERT(ctx->Driver.FreeTexImageData); + ctx->Driver.FreeTexImageData( ctx, texImage ); + + ASSERT(texImage->Data == NULL); + if (texImage->ImageOffsets) + _mesa_free(texImage->ImageOffsets); + _mesa_free(texImage); } @@ -595,8 +726,8 @@ _mesa_delete_texture_image( struct gl_texture_image *teximage ) * * \return GL_TRUE if the target is a proxy target, GL_FALSE otherwise. */ -static GLboolean -is_proxy_target(GLenum target) +GLboolean +_mesa_is_proxy_texture(GLenum target) { return (target == GL_PROXY_TEXTURE_1D || target == GL_PROXY_TEXTURE_2D || @@ -673,24 +804,23 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit, * \sa gl_texture_unit. */ struct gl_texture_image * -_mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit, - GLenum target, GLint level) +_mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_object *texObj, + GLenum target, GLint level) { - ASSERT(texUnit); - ASSERT(level < MAX_TEXTURE_LEVELS); + ASSERT(texObj); + + if (level < 0 || level >= MAX_TEXTURE_LEVELS) + return NULL; + switch (target) { case GL_TEXTURE_1D: - return texUnit->Current1D->Image[0][level]; case GL_PROXY_TEXTURE_1D: - return ctx->Texture.Proxy1D->Image[0][level]; case GL_TEXTURE_2D: - return texUnit->Current2D->Image[0][level]; case GL_PROXY_TEXTURE_2D: - return ctx->Texture.Proxy2D->Image[0][level]; case GL_TEXTURE_3D: - return texUnit->Current3D->Image[0][level]; case GL_PROXY_TEXTURE_3D: - return ctx->Texture.Proxy3D->Image[0][level]; + return texObj->Image[0][level]; + case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB: case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: @@ -700,33 +830,25 @@ _mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit, if (ctx->Extensions.ARB_texture_cube_map) { GLuint face = ((GLuint) target - (GLuint) GL_TEXTURE_CUBE_MAP_POSITIVE_X); - return texUnit->CurrentCubeMap->Image[face][level]; + return texObj->Image[face][level]; } else return NULL; + case GL_PROXY_TEXTURE_CUBE_MAP_ARB: if (ctx->Extensions.ARB_texture_cube_map) - return ctx->Texture.ProxyCubeMap->Image[0][level]; + return texObj->Image[0][level]; else return NULL; + case GL_TEXTURE_RECTANGLE_NV: - if (ctx->Extensions.NV_texture_rectangle) { - ASSERT(level == 0); - return texUnit->CurrentRect->Image[0][level]; - } - else { - return NULL; - } case GL_PROXY_TEXTURE_RECTANGLE_NV: - if (ctx->Extensions.NV_texture_rectangle) { - ASSERT(level == 0); - return ctx->Texture.ProxyRect->Image[0][level]; - } - else { + if (ctx->Extensions.NV_texture_rectangle && level == 0) + return texObj->Image[0][level]; + else return NULL; - } + default: - _mesa_problem(ctx, "bad target in _mesa_select_tex_image()"); return NULL; } } @@ -738,22 +860,25 @@ _mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit, * out of memory. */ struct gl_texture_image * -_mesa_get_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit, +_mesa_get_tex_image(GLcontext *ctx, struct gl_texture_object *texObj, GLenum target, GLint level) { struct gl_texture_image *texImage; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); + + if (!texObj) + return NULL; + + texImage = _mesa_select_tex_image(ctx, texObj, target, level); if (!texImage) { - struct gl_texture_object *texObj; texImage = ctx->Driver.NewTextureImage(ctx); if (!texImage) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "texture image allocation"); return NULL; } - texObj = _mesa_select_tex_object(ctx, texUnit, target); - ASSERT(texObj); + _mesa_set_tex_image(texObj, target, level, texImage); } + return texImage; } @@ -965,13 +1090,17 @@ static void clear_teximage_fields(struct gl_texture_image *img) { ASSERT(img); - img->Format = 0; - img->IntFormat = 0; + img->_BaseFormat = 0; + img->InternalFormat = 0; img->Border = 0; img->Width = 0; img->Height = 0; img->Depth = 0; img->RowStride = 0; + if (img->ImageOffsets) { + _mesa_free(img->ImageOffsets); + img->ImageOffsets = NULL; + } img->Width2 = 0; img->Height2 = 0; img->Depth2 = 0; @@ -991,7 +1120,7 @@ clear_teximage_fields(struct gl_texture_image *img) * Initialize basic fields of the gl_texture_image struct. * * \param ctx GL context. - * \param target texture target. + * \param target texture target (GL_TEXTURE_1D, GL_TEXTURE_RECTANGLE, etc). * \param img texture image structure to be initialized. * \param width image width. * \param height image height. @@ -1008,42 +1137,54 @@ _mesa_init_teximage_fields(GLcontext *ctx, GLenum target, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum internalFormat) { + GLint i; + ASSERT(img); - img->Format = _mesa_base_tex_format( ctx, internalFormat ); - ASSERT(img->Format > 0); - img->IntFormat = internalFormat; + ASSERT(width >= 0); + ASSERT(height >= 0); + ASSERT(depth >= 0); + + img->_BaseFormat = _mesa_base_tex_format( ctx, internalFormat ); + ASSERT(img->_BaseFormat > 0); + img->InternalFormat = internalFormat; img->Border = border; img->Width = width; img->Height = height; img->Depth = depth; - img->RowStride = width; - img->WidthLog2 = logbase2(width - 2 * border); + img->Width2 = width - 2 * border; /* == 1 << img->WidthLog2; */ + img->Height2 = height - 2 * border; /* == 1 << img->HeightLog2; */ + img->Depth2 = depth - 2 * border; /* == 1 << img->DepthLog2; */ + img->WidthLog2 = logbase2(img->Width2); if (height == 1) /* 1-D texture */ img->HeightLog2 = 0; else - img->HeightLog2 = logbase2(height - 2 * border); + img->HeightLog2 = logbase2(img->Height2); if (depth == 1) /* 2-D texture */ img->DepthLog2 = 0; else - img->DepthLog2 = logbase2(depth - 2 * border); - img->Width2 = width - 2 * border; /*1 << img->WidthLog2;*/ - img->Height2 = height - 2 * border; /*1 << img->HeightLog2;*/ - img->Depth2 = depth - 2 * border; /*1 << img->DepthLog2;*/ + img->DepthLog2 = logbase2(img->Depth2); img->MaxLog2 = MAX2(img->WidthLog2, img->HeightLog2); - img->IsCompressed = is_compressed_format(ctx, internalFormat); - if (img->IsCompressed) - img->CompressedSize = ctx->Driver.CompressedTextureSize(ctx, width, - height, depth, internalFormat); - else - img->CompressedSize = 0; + img->IsCompressed = GL_FALSE; + img->CompressedSize = 0; - if ((width == 1 || _mesa_bitcount(width - 2 * border) == 1) && - (height == 1 || _mesa_bitcount(height - 2 * border) == 1) && - (depth == 1 || _mesa_bitcount(depth - 2 * border) == 1)) + if ((width == 1 || _mesa_bitcount(img->Width2) == 1) && + (height == 1 || _mesa_bitcount(img->Height2) == 1) && + (depth == 1 || _mesa_bitcount(img->Depth2) == 1)) img->_IsPowerOfTwo = GL_TRUE; else img->_IsPowerOfTwo = GL_FALSE; + /* RowStride and ImageOffsets[] describe how to address texels in 'Data' */ + img->RowStride = width; + /* Allocate the ImageOffsets array and initialize to typical values. + * We allocate the array for 1D/2D textures too in order to avoid special- + * case code in the texstore routines. + */ + img->ImageOffsets = (GLuint *) _mesa_malloc(depth * sizeof(GLuint)); + for (i = 0; i < depth; i++) { + img->ImageOffsets[i] = i * width * height; + } + /* Compute Width/Height/DepthScale for mipmap lod computation */ if (target == GL_TEXTURE_RECTANGLE_NV) { /* scale = 1.0 since texture coords directly map to texels */ @@ -1187,8 +1328,9 @@ texture_error_check( GLcontext *ctx, GLenum target, GLint width, GLint height, GLint depth, GLint border ) { - const GLboolean isProxy = is_proxy_target(target); + const GLboolean isProxy = _mesa_is_proxy_texture(target); GLboolean sizeOK; + GLboolean colorFormat, indexFormat; /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */ if (level < 0 || level >= MAX_TEXTURE_LEVELS) { @@ -1318,10 +1460,13 @@ texture_error_check( GLcontext *ctx, GLenum target, } /* make sure internal format and format basically agree */ - if ((is_color_format(internalFormat) != is_color_format(format)) || - (is_index_format(internalFormat) != is_index_format(format)) || + colorFormat = is_color_format(format); + indexFormat = is_index_format(format); + if ((is_color_format(internalFormat) && !colorFormat && !indexFormat) || + (is_index_format(internalFormat) && !indexFormat) || (is_depth_format(internalFormat) != is_depth_format(format)) || - (is_ycbcr_format(internalFormat) != is_ycbcr_format(format))) { + (is_ycbcr_format(internalFormat) != is_ycbcr_format(format)) || + (is_depthstencil_format(internalFormat) != is_depthstencil_format(format))) { if (!isProxy) _mesa_error(ctx, GL_INVALID_OPERATION, "glTexImage(internalFormat/format)"); @@ -1361,11 +1506,13 @@ texture_error_check( GLcontext *ctx, GLenum target, /* additional checks for depth textures */ if (_mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_COMPONENT) { - /* Only 1D and 2D textures supported */ + /* Only 1D, 2D and rectangular textures supported, not 3D or cubes */ if (target != GL_TEXTURE_1D && target != GL_PROXY_TEXTURE_1D && target != GL_TEXTURE_2D && - target != GL_PROXY_TEXTURE_2D) { + target != GL_PROXY_TEXTURE_2D && + target != GL_TEXTURE_RECTANGLE_ARB && + target != GL_PROXY_TEXTURE_RECTANGLE_ARB) { if (!isProxy) _mesa_error(ctx, GL_INVALID_ENUM, "glTexImage(target/internalFormat)"); @@ -1434,9 +1581,6 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions, GLint width, GLint height, GLint depth, GLenum format, GLenum type ) { - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - struct gl_texture_image *destTex; - /* Check target */ if (dimensions == 1) { if (target != GL_TEXTURE_1D) { @@ -1446,14 +1590,13 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions, } else if (dimensions == 2) { if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB && - target <=GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) { + target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) { if (!ctx->Extensions.ARB_texture_cube_map) { _mesa_error( ctx, GL_INVALID_ENUM, "glTexSubImage2D(target)" ); return GL_TRUE; } } - else if (ctx->Extensions.NV_texture_rectangle && - target == GL_TEXTURE_RECTANGLE_NV) { + else if (target == GL_TEXTURE_RECTANGLE_NV) { if (!ctx->Extensions.NV_texture_rectangle) { _mesa_error( ctx, GL_INVALID_ENUM, "glTexSubImage2D(target)" ); return GL_TRUE; @@ -1497,8 +1640,23 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } - destTex = _mesa_select_tex_image(ctx, texUnit, target, level); + if (!_mesa_is_legal_format_and_type(ctx, format, type)) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glTexSubImage%dD(format or type)", dimensions); + return GL_TRUE; + } + return GL_FALSE; +} + +static GLboolean +subtexture_error_check2( GLcontext *ctx, GLuint dimensions, + GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLint width, GLint height, GLint depth, + GLenum format, GLenum type, + const struct gl_texture_image *destTex ) +{ if (!destTex) { /* undefined image level */ _mesa_error(ctx, GL_INVALID_OPERATION, "glTexSubImage%dD", dimensions); @@ -1538,18 +1696,21 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions, } } - if (!_mesa_is_legal_format_and_type(ctx, format, type)) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glTexSubImage%dD(format or type)", dimensions); +#if FEATURE_EXT_texture_sRGB + if (destTex->InternalFormat == GL_COMPRESSED_SRGB_S3TC_DXT1_EXT || + destTex->InternalFormat == GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT || + destTex->InternalFormat == GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT || + destTex->InternalFormat == GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT) { + if ((width & 0x3) || (height & 0x3) || + (xoffset & 0x3) || (yoffset & 0x3)) + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexSubImage%dD(size or offset not multiple of 4)", + dimensions); return GL_TRUE; } +#endif if (destTex->IsCompressed) { - const struct gl_texture_unit *texUnit; - const struct gl_texture_image *texImage; - texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - if (target == GL_TEXTURE_2D || target == GL_PROXY_TEXTURE_2D) { /* OK */ } @@ -1571,12 +1732,12 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } /* size must be multiple of 4 or equal to whole texture size */ - if ((width & 3) && (GLuint) width != texImage->Width) { + if ((width & 3) && (GLuint) width != destTex->Width) { _mesa_error(ctx, GL_INVALID_OPERATION, "glTexSubImage%D(width)", dimensions); return GL_TRUE; } - if ((height & 3) && (GLuint) height != texImage->Height) { + if ((height & 3) && (GLuint) height != destTex->Height) { _mesa_error(ctx, GL_INVALID_OPERATION, "glTexSubImage%D(width)", dimensions); return GL_TRUE; @@ -1611,8 +1772,9 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, GLenum target, GLint level, GLint internalFormat, GLint width, GLint height, GLint border ) { - GLenum format, type; + GLenum type; GLboolean sizeOK; + GLint format; /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */ if (level < 0 || level >= MAX_TEXTURE_LEVELS) { @@ -1621,6 +1783,16 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } + /* Check that the source buffer is complete */ + if (ctx->ReadBuffer->Name) { + _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer); + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glCopyTexImage%dD(invalid readbuffer)", dimensions); + return GL_TRUE; + } + } + /* Check border */ if (border < 0 || border > 1 || ((target == GL_TEXTURE_RECTANGLE_NV || @@ -1628,10 +1800,22 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } - /* The format and type aren't really significant here, but we need to pass - * something to TestProxyTexImage(). - */ format = _mesa_base_tex_format(ctx, internalFormat); + if (format < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexImage%dD(internalFormat)", dimensions); + return GL_TRUE; + } + + /* NOTE: the format and type aren't really significant for + * TestProxyTexImage(). Only the internalformat really matters. + if (!_mesa_source_buffer_exists(ctx, format)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexImage%dD(missing readbuffer)", dimensions); + return GL_TRUE; + } + + */ type = GL_FLOAT; /* Check target and call ctx->Driver.TestProxyTexImage() to check the @@ -1701,12 +1885,6 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } - if (_mesa_base_tex_format(ctx, internalFormat) < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glCopyTexImage%dD(internalFormat)", dimensions); - return GL_TRUE; - } - if (is_compressed_format(ctx, internalFormat)) { if (target != GL_TEXTURE_2D) { _mesa_error(ctx, GL_INVALID_ENUM, @@ -1719,6 +1897,22 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } } + else if (is_depth_format(internalFormat)) { + /* make sure we have depth/stencil buffers */ + if (!ctx->ReadBuffer->_DepthBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexImage%D(no depth)", dimensions); + return GL_TRUE; + } + } + else if (is_depthstencil_format(internalFormat)) { + /* make sure we have depth/stencil buffers */ + if (!ctx->ReadBuffer->_DepthBuffer || !ctx->ReadBuffer->_StencilBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexImage%D(no depth/stencil buffer)", dimensions); + return GL_TRUE; + } + } /* if we get here, the parameters are OK */ return GL_FALSE; @@ -1726,7 +1920,7 @@ copytexture_error_check( GLcontext *ctx, GLuint dimensions, /** - * Test glCopyTexImage[12]D() parameters for errors. + * Test glCopyTexSubImage[12]D() parameters for errors. * * \param ctx GL context. * \param dimensions texture image dimensions (must be 1, 2 or 3). @@ -1748,12 +1942,19 @@ static GLboolean copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, - GLsizei width, GLsizei height ) + GLsizei width, GLsizei height) { - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - struct gl_texture_image *teximage; - /* Check target */ + /* Check that the source buffer is complete */ + if (ctx->ReadBuffer->Name) { + _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer); + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glCopyTexImage%dD(invalid readbuffer)", dimensions); + return GL_TRUE; + } + } + if (dimensions == 1) { if (target != GL_TEXTURE_1D) { _mesa_error( ctx, GL_INVALID_ENUM, "glCopyTexSubImage1D(target)" ); @@ -1805,7 +2006,16 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, return GL_TRUE; } - teximage = _mesa_select_tex_image(ctx, texUnit, target, level); + return GL_FALSE; +} + +static GLboolean +copytexsubimage_error_check2( GLcontext *ctx, GLuint dimensions, + GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, + const struct gl_texture_image *teximage ) +{ if (!teximage) { _mesa_error(ctx, GL_INVALID_OPERATION, "glCopyTexSubImage%dD(undefined texture level: %d)", @@ -1851,6 +2061,12 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, } if (teximage->IsCompressed) { + if (!_mesa_source_buffer_exists(ctx, teximage->_BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%dD(missing readbuffer)", dimensions); + return GL_TRUE; + } + if (target != GL_TEXTURE_2D) { _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexSubImage%d(target)", dimensions); @@ -1875,11 +2091,28 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, } } - if (teximage->IntFormat == GL_YCBCR_MESA) { + if (teximage->InternalFormat == GL_YCBCR_MESA) { _mesa_error(ctx, GL_INVALID_OPERATION, "glCopyTexSubImage2D"); return GL_TRUE; } + if (teximage->_BaseFormat == GL_DEPTH_COMPONENT) { + if (!ctx->ReadBuffer->_DepthBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%D(no depth buffer)", + dimensions); + return GL_TRUE; + } + } + else if (teximage->_BaseFormat == GL_DEPTH_STENCIL_EXT) { + if (!ctx->ReadBuffer->_DepthBuffer || !ctx->ReadBuffer->_StencilBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%D(no depth/stencil buffer)", + dimensions); + return GL_TRUE; + } + } + /* if we get here, the parameters are OK */ return GL_FALSE; } @@ -1899,15 +2132,15 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels ) { const struct gl_texture_unit *texUnit; - const struct gl_texture_object *texObj; - const struct gl_texture_image *texImage; + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; GLint maxLevels = 0; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); texUnit = &(ctx->Texture.Unit[ctx->Texture.CurrentUnit]); texObj = _mesa_select_tex_object(ctx, texUnit, target); - if (!texObj || is_proxy_target(target)) { + if (!texObj || _mesa_is_proxy_texture(target)) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(target)"); return; } @@ -1933,54 +2166,119 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format, if (!ctx->Extensions.EXT_paletted_texture && is_index_format(format)) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return; } - if (!ctx->Extensions.SGIX_depth_texture && is_depth_format(format)) { + if (!ctx->Extensions.SGIX_depth_texture && + !ctx->Extensions.ARB_depth_texture && is_depth_format(format)) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return; } if (!ctx->Extensions.MESA_ycbcr_texture && is_ycbcr_format(format)) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return; + } + + if (!ctx->Extensions.EXT_packed_depth_stencil + && is_depthstencil_format(format)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return; } if (!pixels) return; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - if (!texImage) { - /* invalid mipmap level, not an error */ - return; - } + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + if (!texImage) { + /* invalid mipmap level, not an error */ + goto out; + } - /* Make sure the requested image format is compatible with the - * texture's format. We let the colorformat-indexformat go through, - * because the texelfetcher will dequantize to full rgba. - */ - if (is_color_format(format) - && !is_color_format(texImage->TexFormat->BaseFormat) - && !is_index_format(texImage->TexFormat->BaseFormat)) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); - return; - } - else if (is_index_format(format) - && !is_index_format(texImage->TexFormat->BaseFormat)) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); - return; - } - else if (is_depth_format(format) - && !is_depth_format(texImage->TexFormat->BaseFormat)) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); - return; - } - else if (is_ycbcr_format(format) - && !is_ycbcr_format(texImage->TexFormat->BaseFormat)) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); - return; - } - /* typically, this will call _mesa_get_teximage() */ - ctx->Driver.GetTexImage(ctx, target, level, format, type, pixels, - texObj, texImage); + /* Make sure the requested image format is compatible with the + * texture's format. Note that a color index texture can be converted + * to RGBA so that combo is allowed. + */ + if (is_color_format(format) + && !is_color_format(texImage->TexFormat->BaseFormat) + && !is_index_format(texImage->TexFormat->BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + goto out; + } + else if (is_index_format(format) + && !is_index_format(texImage->TexFormat->BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + goto out; + } + else if (is_depth_format(format) + && !is_depth_format(texImage->TexFormat->BaseFormat) + && !is_depthstencil_format(texImage->TexFormat->BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + goto out; + } + else if (is_ycbcr_format(format) + && !is_ycbcr_format(texImage->TexFormat->BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + goto out; + } + else if (is_depthstencil_format(format) + && !is_depthstencil_format(texImage->TexFormat->BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + goto out; + } + + if (ctx->Pack.BufferObj->Name) { + /* packing texture image into a PBO */ + const GLuint dimensions = (target == GL_TEXTURE_3D) ? 3 : 2; + if (!_mesa_validate_pbo_access(dimensions, &ctx->Pack, texImage->Width, + texImage->Height, texImage->Depth, + format, type, pixels)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetTexImage(invalid PBO access)"); + goto out; + } + } + + /* typically, this will call _mesa_get_teximage() */ + ctx->Driver.GetTexImage(ctx, target, level, format, type, pixels, + texObj, texImage); + + } + out: + _mesa_unlock_texture(ctx, texObj); +} + + + +/** + * Check if the given texture image is bound to any framebuffer objects + * and update/invalidate them. + * XXX We're only checking the currently bound framebuffer object for now. + * In the future, perhaps struct gl_texture_image should have a pointer (or + * list of pointers (yikes)) to the gl_framebuffer(s) which it's bound to. + */ +static void +update_fbo_texture(GLcontext *ctx, struct gl_texture_object *texObj, + GLuint face, GLuint level) +{ + if (ctx->DrawBuffer->Name) { + GLuint i; + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = + ctx->DrawBuffer->Attachment + i; + if (att->Type == GL_TEXTURE && + att->Texture == texObj && + att->TextureLevel == level && + att->CubeMapFace == face) { + ASSERT(att->Texture->Image[att->CubeMapFace][att->TextureLevel]); + /* Tell driver about the new renderbuffer texture */ + ctx->Driver.RenderTexture(ctx, ctx->DrawBuffer, att); + } + } + } } @@ -2002,56 +2300,58 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat, } if (target == GL_TEXTURE_1D) { + /* non-proxy target */ struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; + const GLuint face = texture_face(target); if (texture_error_check(ctx, target, level, internalFormat, format, type, 1, postConvWidth, 1, 1, border)) { return; /* error was recorded */ } + if (ctx->NewState & _IMAGE_NEW_TRANSFER_STATE) + _mesa_update_state(ctx); + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D"); - return; + ASSERT(texImage->Data == NULL); + + clear_teximage_fields(texImage); /* not really needed, but helpful */ + _mesa_init_teximage_fields(ctx, target, texImage, + postConvWidth, 1, 1, + border, internalFormat); + + ASSERT(ctx->Driver.TexImage1D); + + /* Give the texture to the driver! may be null! */ + (*ctx->Driver.TexImage1D)(ctx, target, level, internalFormat, + width, border, format, type, pixels, + &ctx->Unpack, texObj, texImage); + + ASSERT(texImage->TexFormat); + + update_fbo_texture(ctx, texObj, face, level); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - /* free the old texture data */ - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - clear_teximage_fields(texImage); /* not really needed, but helpful */ - _mesa_init_teximage_fields(ctx, target, texImage, - postConvWidth, 1, 1, - border, internalFormat); - - if (ctx->NewState & _IMAGE_NEW_TRANSFER_STATE) - _mesa_update_state(ctx); - - ASSERT(ctx->Driver.TexImage1D); - - /* Give the texture to the driver! may be null! */ - (*ctx->Driver.TexImage1D)(ctx, target, level, internalFormat, - width, border, format, type, pixels, - &ctx->Unpack, texObj, texImage); - - ASSERT(texImage->TexFormat); - - /* If driver didn't explicitly set this, use the defaults */ - if (!texImage->FetchTexelc) - texImage->FetchTexelc = texImage->TexFormat->FetchTexel1D; - if (!texImage->FetchTexelf) - texImage->FetchTexelf = texImage->TexFormat->FetchTexel1Df; - ASSERT(texImage->FetchTexelc); - ASSERT(texImage->FetchTexelf); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } else if (target == GL_PROXY_TEXTURE_1D) { /* Proxy texture: check for errors and update proxy state */ @@ -2105,6 +2405,7 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; + const GLuint face = texture_face(target); if (texture_error_check(ctx, target, level, internalFormat, format, type, 2, postConvWidth, postConvHeight, @@ -2112,46 +2413,46 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, return; /* error was recorded */ } + if (ctx->NewState & _IMAGE_NEW_TRANSFER_STATE) + _mesa_update_state(ctx); + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D"); - return; + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + + ASSERT(texImage->Data == NULL); + clear_teximage_fields(texImage); /* not really needed, but helpful */ + _mesa_init_teximage_fields(ctx, target, texImage, + postConvWidth, postConvHeight, 1, + border, internalFormat); + + ASSERT(ctx->Driver.TexImage2D); + + /* Give the texture to the driver! may be null! */ + (*ctx->Driver.TexImage2D)(ctx, target, level, internalFormat, + width, height, border, format, type, pixels, + &ctx->Unpack, texObj, texImage); + + ASSERT(texImage->TexFormat); + + update_fbo_texture(ctx, texObj, face, level); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - /* free the old texture data */ - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - clear_teximage_fields(texImage); /* not really needed, but helpful */ - _mesa_init_teximage_fields(ctx, target, texImage, - postConvWidth, postConvHeight, 1, - border, internalFormat); - - if (ctx->NewState & _IMAGE_NEW_TRANSFER_STATE) - _mesa_update_state(ctx); - - ASSERT(ctx->Driver.TexImage2D); - - /* Give the texture to the driver! may be null! */ - (*ctx->Driver.TexImage2D)(ctx, target, level, internalFormat, - width, height, border, format, type, pixels, - &ctx->Unpack, texObj, texImage); - - ASSERT(texImage->TexFormat); - - /* If driver didn't explicitly set these, use the defaults */ - if (!texImage->FetchTexelc) - texImage->FetchTexelc = texImage->TexFormat->FetchTexel2D; - if (!texImage->FetchTexelf) - texImage->FetchTexelf = texImage->TexFormat->FetchTexel2Df; - ASSERT(texImage->FetchTexelc); - ASSERT(texImage->FetchTexelf); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } else if (target == GL_PROXY_TEXTURE_2D || (target == GL_PROXY_TEXTURE_CUBE_MAP_ARB && @@ -2198,54 +2499,57 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat, ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); if (target == GL_TEXTURE_3D) { + /* non-proxy target */ struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; + const GLuint face = texture_face(target); if (texture_error_check(ctx, target, level, (GLint) internalFormat, format, type, 3, width, height, depth, border)) { return; /* error was recorded */ } + if (ctx->NewState & _IMAGE_NEW_TRANSFER_STATE) + _mesa_update_state(ctx); + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage3D"); - return; + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage3D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + + ASSERT(texImage->Data == NULL); + clear_teximage_fields(texImage); /* not really needed, but helpful */ + _mesa_init_teximage_fields(ctx, target, texImage, + width, height, depth, + border, internalFormat); + + ASSERT(ctx->Driver.TexImage3D); + + /* Give the texture to the driver! may be null! */ + (*ctx->Driver.TexImage3D)(ctx, target, level, internalFormat, + width, height, depth, border, format, type, + pixels, &ctx->Unpack, texObj, texImage); + + ASSERT(texImage->TexFormat); + + update_fbo_texture(ctx, texObj, face, level); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - clear_teximage_fields(texImage); /* not really needed, but helpful */ - _mesa_init_teximage_fields(ctx, target, texImage, - width, height, depth, - border, internalFormat); - - if (ctx->NewState & _IMAGE_NEW_TRANSFER_STATE) - _mesa_update_state(ctx); - - ASSERT(ctx->Driver.TexImage3D); - - /* Give the texture to the driver! may be null! */ - (*ctx->Driver.TexImage3D)(ctx, target, level, internalFormat, - width, height, depth, border, format, type, - pixels, &ctx->Unpack, texObj, texImage); - - ASSERT(texImage->TexFormat); - - /* If driver didn't explicitly set these, use the defaults */ - if (!texImage->FetchTexelc) - texImage->FetchTexelc = texImage->TexFormat->FetchTexel3D; - if (!texImage->FetchTexelf) - texImage->FetchTexelf = texImage->TexFormat->FetchTexel3Df; - ASSERT(texImage->FetchTexelc); - ASSERT(texImage->FetchTexelf); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } else if (target == GL_PROXY_TEXTURE_3D) { /* Proxy texture: check for errors and update proxy state */ @@ -2293,7 +2597,7 @@ _mesa_TexSubImage1D( GLenum target, GLint level, GLsizei postConvWidth = width; struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; - struct gl_texture_image *texImage; + struct gl_texture_image *texImage = NULL; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); @@ -2306,26 +2610,38 @@ _mesa_TexSubImage1D( GLenum target, GLint level, } if (subtexture_error_check(ctx, 1, target, level, xoffset, 0, 0, - postConvWidth, 1, 1, format, type)) { + postConvWidth, 1, 1, format, type)) { return; /* error was detected */ } + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - assert(texImage); + assert(texObj); - if (width == 0) - return; /* no-op, not an error */ + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); - /* If we have a border, xoffset=-1 is legal. Bias by border width */ - xoffset += texImage->Border; + if (subtexture_error_check2(ctx, 1, target, level, xoffset, 0, 0, + postConvWidth, 1, 1, format, type, texImage)) { + goto out; /* error was detected */ + } - ASSERT(ctx->Driver.TexSubImage1D); - (*ctx->Driver.TexSubImage1D)(ctx, target, level, xoffset, width, - format, type, pixels, &ctx->Unpack, - texObj, texImage); - ctx->NewState |= _NEW_TEXTURE; + if (width == 0) + goto out; /* no-op, not an error */ + + /* If we have a border, xoffset=-1 is legal. Bias by border width */ + xoffset += texImage->Border; + + ASSERT(ctx->Driver.TexSubImage1D); + (*ctx->Driver.TexSubImage1D)(ctx, target, level, xoffset, width, + format, type, pixels, &ctx->Unpack, + texObj, texImage); + ctx->NewState |= _NEW_TEXTURE; + } + out: + _mesa_unlock_texture(ctx, texObj); } @@ -2353,27 +2669,37 @@ _mesa_TexSubImage2D( GLenum target, GLint level, } if (subtexture_error_check(ctx, 2, target, level, xoffset, yoffset, 0, - postConvWidth, postConvHeight, 1, format, type)) { + postConvWidth, postConvHeight, 1, format, type)) { return; /* error was detected */ } texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - assert(texImage); + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); - if (width == 0 || height == 0) - return; /* no-op, not an error */ + if (subtexture_error_check2(ctx, 2, target, level, xoffset, yoffset, 0, + postConvWidth, postConvHeight, 1, format, type, + texImage)) { + goto out; /* error was detected */ + } - /* If we have a border, xoffset=-1 is legal. Bias by border width */ - xoffset += texImage->Border; - yoffset += texImage->Border; + if (width == 0 || height == 0) + goto out; /* no-op, not an error */ - ASSERT(ctx->Driver.TexSubImage2D); - (*ctx->Driver.TexSubImage2D)(ctx, target, level, xoffset, yoffset, - width, height, format, type, pixels, - &ctx->Unpack, texObj, texImage); - ctx->NewState |= _NEW_TEXTURE; + /* If we have a border, xoffset=-1 is legal. Bias by border width */ + xoffset += texImage->Border; + yoffset += texImage->Border; + + ASSERT(ctx->Driver.TexSubImage2D); + (*ctx->Driver.TexSubImage2D)(ctx, target, level, xoffset, yoffset, + width, height, format, type, pixels, + &ctx->Unpack, texObj, texImage); + ctx->NewState |= _NEW_TEXTURE; + } + out: + _mesa_unlock_texture(ctx, texObj); } @@ -2401,24 +2727,34 @@ _mesa_TexSubImage3D( GLenum target, GLint level, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - assert(texImage); - if (width == 0 || height == 0 || height == 0) - return; /* no-op, not an error */ + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); - /* If we have a border, xoffset=-1 is legal. Bias by border width */ - xoffset += texImage->Border; - yoffset += texImage->Border; - zoffset += texImage->Border; + if (subtexture_error_check2(ctx, 3, target, level, xoffset, yoffset, zoffset, + width, height, depth, format, type, texImage)) { + goto out; /* error was detected */ + } - ASSERT(ctx->Driver.TexSubImage3D); - (*ctx->Driver.TexSubImage3D)(ctx, target, level, - xoffset, yoffset, zoffset, - width, height, depth, - format, type, pixels, - &ctx->Unpack, texObj, texImage ); - ctx->NewState |= _NEW_TEXTURE; + if (width == 0 || height == 0 || height == 0) + goto out; /* no-op, not an error */ + + /* If we have a border, xoffset=-1 is legal. Bias by border width */ + xoffset += texImage->Border; + yoffset += texImage->Border; + zoffset += texImage->Border; + + ASSERT(ctx->Driver.TexSubImage3D); + (*ctx->Driver.TexSubImage3D)(ctx, target, level, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, pixels, + &ctx->Unpack, texObj, texImage ); + ctx->NewState |= _NEW_TEXTURE; + } + out: + _mesa_unlock_texture(ctx, texObj); } @@ -2433,6 +2769,7 @@ _mesa_CopyTexImage1D( GLenum target, GLint level, struct gl_texture_object *texObj; struct gl_texture_image *texImage; GLsizei postConvWidth = width; + const GLuint face = texture_face(target); GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); @@ -2449,39 +2786,39 @@ _mesa_CopyTexImage1D( GLenum target, GLint level, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage1D"); - return; + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage1D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + + ASSERT(texImage->Data == NULL); + + clear_teximage_fields(texImage); /* not really needed, but helpful */ + _mesa_init_teximage_fields(ctx, target, texImage, postConvWidth, 1, 1, + border, internalFormat); + + + ASSERT(ctx->Driver.CopyTexImage1D); + (*ctx->Driver.CopyTexImage1D)(ctx, target, level, internalFormat, + x, y, width, border); + + ASSERT(texImage->TexFormat); + + update_fbo_texture(ctx, texObj, face, level); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - /* free the old texture data */ - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - - clear_teximage_fields(texImage); /* not really needed, but helpful */ - _mesa_init_teximage_fields(ctx, target, texImage, postConvWidth, 1, 1, - border, internalFormat); - - - ASSERT(ctx->Driver.CopyTexImage1D); - (*ctx->Driver.CopyTexImage1D)(ctx, target, level, internalFormat, - x, y, width, border); - - ASSERT(texImage->TexFormat); - - /* If driver didn't explicitly set these, use the defaults */ - if (!texImage->FetchTexelc) - texImage->FetchTexelc = texImage->TexFormat->FetchTexel1D; - if (!texImage->FetchTexelf) - texImage->FetchTexelf = texImage->TexFormat->FetchTexel1Df; - ASSERT(texImage->FetchTexelc); - ASSERT(texImage->FetchTexelf); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } @@ -2495,6 +2832,7 @@ _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat, struct gl_texture_object *texObj; struct gl_texture_image *texImage; GLsizei postConvWidth = width, postConvHeight = height; + const GLuint face = texture_face(target); GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); @@ -2512,48 +2850,50 @@ _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage2D"); - return; + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage2D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + + ASSERT(texImage->Data == NULL); + + clear_teximage_fields(texImage); /* not really needed, but helpful */ + _mesa_init_teximage_fields(ctx, target, texImage, + postConvWidth, postConvHeight, 1, + border, internalFormat); + + ASSERT(ctx->Driver.CopyTexImage2D); + (*ctx->Driver.CopyTexImage2D)(ctx, target, level, internalFormat, + x, y, width, height, border); + + ASSERT(texImage->TexFormat); + + update_fbo_texture(ctx, texObj, face, level); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - /* free the old texture data */ - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - - clear_teximage_fields(texImage); /* not really needed, but helpful */ - _mesa_init_teximage_fields(ctx, target, texImage, - postConvWidth, postConvHeight, 1, - border, internalFormat); - - ASSERT(ctx->Driver.CopyTexImage2D); - (*ctx->Driver.CopyTexImage2D)(ctx, target, level, internalFormat, - x, y, width, height, border); - - ASSERT(texImage->TexFormat); - - /* If driver didn't explicitly set these, use the defaults */ - if (!texImage->FetchTexelc) - texImage->FetchTexelc = texImage->TexFormat->FetchTexel2D; - if (!texImage->FetchTexelf) - texImage->FetchTexelf = texImage->TexFormat->FetchTexel2Df; - ASSERT(texImage->FetchTexelc); - ASSERT(texImage->FetchTexelf); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } - void GLAPIENTRY _mesa_CopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width ) { struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; struct gl_texture_image *texImage; GLsizei postConvWidth = width; GET_CURRENT_CONTEXT(ctx); @@ -2570,15 +2910,27 @@ _mesa_CopyTexSubImage1D( GLenum target, GLint level, return; texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - ASSERT(texImage); + texObj = _mesa_select_tex_object(ctx, texUnit, target); - /* If we have a border, xoffset=-1 is legal. Bias by border width */ - xoffset += texImage->Border; + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); - ASSERT(ctx->Driver.CopyTexSubImage1D); - (*ctx->Driver.CopyTexSubImage1D)(ctx, target, level, xoffset, x, y, width); - ctx->NewState |= _NEW_TEXTURE; + if (copytexsubimage_error_check2(ctx, 1, target, level, + xoffset, 0, 0, postConvWidth, 1, + texImage)) + goto out; + + + /* If we have a border, xoffset=-1 is legal. Bias by border width */ + xoffset += texImage->Border; + + ASSERT(ctx->Driver.CopyTexSubImage1D); + (*ctx->Driver.CopyTexSubImage1D)(ctx, target, level, xoffset, x, y, width); + ctx->NewState |= _NEW_TEXTURE; + } + out: + _mesa_unlock_texture(ctx, texObj); } @@ -2589,6 +2941,7 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level, GLint x, GLint y, GLsizei width, GLsizei height ) { struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; struct gl_texture_image *texImage; GLsizei postConvWidth = width, postConvHeight = height; GET_CURRENT_CONTEXT(ctx); @@ -2605,17 +2958,27 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level, return; texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - ASSERT(texImage); + texObj = _mesa_select_tex_object(ctx, texUnit, target); - /* If we have a border, xoffset=-1 is legal. Bias by border width */ - xoffset += texImage->Border; - yoffset += texImage->Border; + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); - ASSERT(ctx->Driver.CopyTexSubImage2D); - (*ctx->Driver.CopyTexSubImage2D)(ctx, target, level, - xoffset, yoffset, x, y, width, height); - ctx->NewState |= _NEW_TEXTURE; + if (copytexsubimage_error_check2(ctx, 2, target, level, xoffset, yoffset, 0, + postConvWidth, postConvHeight, texImage)) + goto out; + + /* If we have a border, xoffset=-1 is legal. Bias by border width */ + xoffset += texImage->Border; + yoffset += texImage->Border; + + ASSERT(ctx->Driver.CopyTexSubImage2D); + (*ctx->Driver.CopyTexSubImage2D)(ctx, target, level, + xoffset, yoffset, x, y, width, height); + ctx->NewState |= _NEW_TEXTURE; + } + out: + _mesa_unlock_texture(ctx, texObj); } @@ -2626,6 +2989,7 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level, GLint x, GLint y, GLsizei width, GLsizei height ) { struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; struct gl_texture_image *texImage; GLsizei postConvWidth = width, postConvHeight = height; GET_CURRENT_CONTEXT(ctx); @@ -2642,19 +3006,30 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level, return; texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - ASSERT(texImage); + texObj = _mesa_select_tex_object(ctx, texUnit, target); - /* If we have a border, xoffset=-1 is legal. Bias by border width */ - xoffset += texImage->Border; - yoffset += texImage->Border; - zoffset += texImage->Border; + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); - ASSERT(ctx->Driver.CopyTexSubImage3D); - (*ctx->Driver.CopyTexSubImage3D)(ctx, target, level, - xoffset, yoffset, zoffset, - x, y, width, height); - ctx->NewState |= _NEW_TEXTURE; + if (copytexsubimage_error_check2(ctx, 3, target, level, xoffset, yoffset, + zoffset, postConvWidth, postConvHeight, + texImage)) + goto out; + + /* If we have a border, xoffset=-1 is legal. Bias by border width */ + xoffset += texImage->Border; + yoffset += texImage->Border; + zoffset += texImage->Border; + + ASSERT(ctx->Driver.CopyTexSubImage3D); + (*ctx->Driver.CopyTexSubImage3D)(ctx, target, level, + xoffset, yoffset, zoffset, + x, y, width, height); + ctx->NewState |= _NEW_TEXTURE; + } + out: + _mesa_unlock_texture(ctx, texObj); } @@ -2711,9 +3086,11 @@ compressed_texture_error_check(GLcontext *ctx, GLint dimensions, maxTextureSize = 1 << (maxLevels - 1); + /* This will detect any invalid internalFormat value */ if (!is_compressed_format(ctx, internalFormat)) return GL_INVALID_ENUM; + /* This should really never fail */ if (_mesa_base_tex_format(ctx, internalFormat) < 0) return GL_INVALID_ENUM; @@ -2745,11 +3122,21 @@ compressed_texture_error_check(GLcontext *ctx, GLint dimensions, if (level < 0 || level >= maxLevels) return GL_INVALID_VALUE; - expectedSize = ctx->Driver.CompressedTextureSize(ctx, width, height, depth, - internalFormat); + expectedSize = _mesa_compressed_texture_size_glenum(ctx, width, height, + depth, internalFormat); if (expectedSize != imageSize) return GL_INVALID_VALUE; +#if FEATURE_EXT_texture_sRGB + if ((internalFormat == GL_COMPRESSED_SRGB_S3TC_DXT1_EXT || + internalFormat == GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT || + internalFormat == GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT || + internalFormat == GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT) + && border != 0) { + return GL_INVALID_OPERATION; + } +#endif + return GL_NO_ERROR; } @@ -2804,6 +3191,7 @@ compressed_subtexture_error_check(GLcontext *ctx, GLint dimensions, maxTextureSize = 1 << (maxLevels - 1); + /* this will catch any invalid compressed format token */ if (!is_compressed_format(ctx, format)) return GL_INVALID_ENUM; @@ -2829,8 +3217,8 @@ compressed_subtexture_error_check(GLcontext *ctx, GLint dimensions, if ((height & 3) != 0 && height != 2 && height != 1) return GL_INVALID_VALUE; - expectedSize = ctx->Driver.CompressedTextureSize(ctx, width, height, depth, - format); + expectedSize = _mesa_compressed_texture_size_glenum(ctx, width, height, + depth, format); if (expectedSize != imageSize) return GL_INVALID_VALUE; @@ -2849,6 +3237,7 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level, ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); if (target == GL_TEXTURE_1D) { + /* non-proxy target */ struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; @@ -2861,28 +3250,35 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage1D"); - return; + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage1D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + ASSERT(texImage->Data == NULL); + + _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1, + border, internalFormat); + + ASSERT(ctx->Driver.CompressedTexImage1D); + (*ctx->Driver.CompressedTexImage1D)(ctx, target, level, + internalFormat, width, border, + imageSize, data, + texObj, texImage); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - - _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1, - border, internalFormat); - - ASSERT(ctx->Driver.CompressedTexImage1D); - (*ctx->Driver.CompressedTexImage1D)(ctx, target, level, - internalFormat, width, border, - imageSize, data, - texObj, texImage); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } else if (target == GL_PROXY_TEXTURE_1D) { /* Proxy texture: check for errors and update proxy state */ @@ -2904,11 +3300,18 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level, else { /* store the teximage parameters */ struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; struct gl_texture_image *texImage; texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1, - border, internalFormat); + texObj = _mesa_select_tex_object(ctx, texUnit, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1, + border, internalFormat); + } + _mesa_unlock_texture(ctx, texObj); } } else { @@ -2931,6 +3334,7 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level, (ctx->Extensions.ARB_texture_cube_map && target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB && target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB)) { + /* non-proxy target */ struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; @@ -2943,28 +3347,35 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D"); - return; + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + ASSERT(texImage->Data == NULL); + + _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1, + border, internalFormat); + + ASSERT(ctx->Driver.CompressedTexImage2D); + (*ctx->Driver.CompressedTexImage2D)(ctx, target, level, + internalFormat, width, height, + border, imageSize, data, + texObj, texImage); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - - _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1, - border, internalFormat); - - ASSERT(ctx->Driver.CompressedTexImage2D); - (*ctx->Driver.CompressedTexImage2D)(ctx, target, level, - internalFormat, width, height, - border, imageSize, data, - texObj, texImage); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } else if (target == GL_PROXY_TEXTURE_2D || (target == GL_PROXY_TEXTURE_CUBE_MAP_ARB && @@ -2988,11 +3399,18 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level, else { /* store the teximage parameters */ struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; struct gl_texture_image *texImage; texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1, - border, internalFormat); + texObj = _mesa_select_tex_object(ctx, texUnit, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1, + border, internalFormat); + } + _mesa_unlock_texture(ctx, texObj); } } else { @@ -3012,6 +3430,7 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level, ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); if (target == GL_TEXTURE_3D) { + /* non-proxy target */ struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; @@ -3024,29 +3443,35 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_get_tex_image(ctx, texUnit, target, level); - if (!texImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage3D"); - return; + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage3D"); + goto out; + } + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + ASSERT(texImage->Data == NULL); + + _mesa_init_teximage_fields(ctx, target, texImage, width, height, depth, + border, internalFormat); + + ASSERT(ctx->Driver.CompressedTexImage3D); + (*ctx->Driver.CompressedTexImage3D)(ctx, target, level, + internalFormat, + width, height, depth, + border, imageSize, data, + texObj, texImage); + + /* state update */ + texObj->Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; } - else if (texImage->Data && !texImage->IsClientData) { - MESA_PBUFFER_FREE(texImage->Data); - } - texImage->Data = NULL; - - _mesa_init_teximage_fields(ctx, target, texImage, width, height, depth, - border, internalFormat); - - ASSERT(ctx->Driver.CompressedTexImage3D); - (*ctx->Driver.CompressedTexImage3D)(ctx, target, level, - internalFormat, - width, height, depth, - border, imageSize, data, - texObj, texImage); - - /* state update */ - texObj->Complete = GL_FALSE; - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } else if (target == GL_PROXY_TEXTURE_3D) { /* Proxy texture: check for errors and update proxy state */ @@ -3068,11 +3493,17 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level, else { /* store the teximage parameters */ struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; struct gl_texture_image *texImage; texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - _mesa_init_teximage_fields(ctx, target, texImage, width, height, - depth, border, internalFormat); + texObj = _mesa_select_tex_object(ctx, texUnit, target); + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + _mesa_init_teximage_fields(ctx, target, texImage, width, height, + depth, border, internalFormat); + } + _mesa_unlock_texture(ctx, texObj); } } else { @@ -3095,7 +3526,9 @@ _mesa_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); error = compressed_subtexture_error_check(ctx, 1, target, level, - xoffset, 0, 0, width, 1, 1, format, imageSize); + xoffset, 0, 0, /* pos */ + width, 1, 1, /* size */ + format, imageSize); if (error) { _mesa_error(ctx, error, "glCompressedTexSubImage1D"); return; @@ -3103,30 +3536,35 @@ _mesa_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - assert(texImage); + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + assert(texImage); - if ((GLint) format != texImage->IntFormat) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glCompressedTexSubImage1D(format)"); - return; - } + if ((GLint) format != texImage->InternalFormat) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCompressedTexSubImage1D(format)"); + goto out; + } - if ((width == 1 || width == 2) && (GLuint) width != texImage->Width) { - _mesa_error(ctx, GL_INVALID_VALUE, "glCompressedTexSubImage1D(width)"); - return; - } + if ((width == 1 || width == 2) && (GLuint) width != texImage->Width) { + _mesa_error(ctx, GL_INVALID_VALUE, "glCompressedTexSubImage1D(width)"); + goto out; + } - if (width == 0) - return; /* no-op, not an error */ + if (width == 0) + goto out; /* no-op, not an error */ - if (ctx->Driver.CompressedTexSubImage1D) { - (*ctx->Driver.CompressedTexSubImage1D)(ctx, target, level, - xoffset, width, - format, imageSize, data, - texObj, texImage); + if (ctx->Driver.CompressedTexSubImage1D) { + (*ctx->Driver.CompressedTexSubImage1D)(ctx, target, level, + xoffset, width, + format, imageSize, data, + texObj, texImage); + } + ctx->NewState |= _NEW_TEXTURE; } - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } @@ -3144,7 +3582,9 @@ _mesa_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); error = compressed_subtexture_error_check(ctx, 2, target, level, - xoffset, yoffset, 0, width, height, 1, format, imageSize); + xoffset, yoffset, 0, /* pos */ + width, height, 1, /* size */ + format, imageSize); if (error) { /* XXX proxy target? */ _mesa_error(ctx, error, "glCompressedTexSubImage2D"); @@ -3153,31 +3593,36 @@ _mesa_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - assert(texImage); + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + assert(texImage); - if ((GLint) format != texImage->IntFormat) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glCompressedTexSubImage2D(format)"); - return; - } + if ((GLint) format != texImage->InternalFormat) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCompressedTexSubImage2D(format)"); + goto out; + } - if (((width == 1 || width == 2) && (GLuint) width != texImage->Width) || - ((height == 1 || height == 2) && (GLuint) height != texImage->Height)) { - _mesa_error(ctx, GL_INVALID_VALUE, "glCompressedTexSubImage2D(size)"); - return; - } + if (((width == 1 || width == 2) && (GLuint) width != texImage->Width) || + ((height == 1 || height == 2) && (GLuint) height != texImage->Height)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glCompressedTexSubImage2D(size)"); + goto out; + } - if (width == 0 || height == 0) - return; /* no-op, not an error */ + if (width == 0 || height == 0) + goto out; /* no-op, not an error */ - if (ctx->Driver.CompressedTexSubImage2D) { - (*ctx->Driver.CompressedTexSubImage2D)(ctx, target, level, - xoffset, yoffset, width, height, - format, imageSize, data, - texObj, texImage); + if (ctx->Driver.CompressedTexSubImage2D) { + (*ctx->Driver.CompressedTexSubImage2D)(ctx, target, level, + xoffset, yoffset, width, height, + format, imageSize, data, + texObj, texImage); + } + ctx->NewState |= _NEW_TEXTURE; } - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } @@ -3195,7 +3640,9 @@ _mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); error = compressed_subtexture_error_check(ctx, 3, target, level, - xoffset, yoffset, zoffset, width, height, depth, format, imageSize); + xoffset, yoffset, zoffset,/*pos*/ + width, height, depth, /*size*/ + format, imageSize); if (error) { _mesa_error(ctx, error, "glCompressedTexSubImage2D"); return; @@ -3203,33 +3650,38 @@ _mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - assert(texImage); + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + assert(texImage); - if ((GLint) format != texImage->IntFormat) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glCompressedTexSubImage3D(format)"); - return; - } + if ((GLint) format != texImage->InternalFormat) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCompressedTexSubImage3D(format)"); + goto out; + } - if (((width == 1 || width == 2) && (GLuint) width != texImage->Width) || - ((height == 1 || height == 2) && (GLuint) height != texImage->Height) || - ((depth == 1 || depth == 2) && (GLuint) depth != texImage->Depth)) { - _mesa_error(ctx, GL_INVALID_VALUE, "glCompressedTexSubImage3D(size)"); - return; - } + if (((width == 1 || width == 2) && (GLuint) width != texImage->Width) || + ((height == 1 || height == 2) && (GLuint) height != texImage->Height) || + ((depth == 1 || depth == 2) && (GLuint) depth != texImage->Depth)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glCompressedTexSubImage3D(size)"); + goto out; + } - if (width == 0 || height == 0 || depth == 0) - return; /* no-op, not an error */ + if (width == 0 || height == 0 || depth == 0) + goto out; /* no-op, not an error */ - if (ctx->Driver.CompressedTexSubImage3D) { - (*ctx->Driver.CompressedTexSubImage3D)(ctx, target, level, - xoffset, yoffset, zoffset, - width, height, depth, - format, imageSize, data, - texObj, texImage); + if (ctx->Driver.CompressedTexSubImage3D) { + (*ctx->Driver.CompressedTexSubImage3D)(ctx, target, level, + xoffset, yoffset, zoffset, + width, height, depth, + format, imageSize, data, + texObj, texImage); + } + ctx->NewState |= _NEW_TEXTURE; } - ctx->NewState |= _NEW_TEXTURE; + out: + _mesa_unlock_texture(ctx, texObj); } @@ -3237,12 +3689,13 @@ void GLAPIENTRY _mesa_GetCompressedTexImageARB(GLenum target, GLint level, GLvoid *img) { const struct gl_texture_unit *texUnit; - const struct gl_texture_object *texObj; + struct gl_texture_object *texObj; struct gl_texture_image *texImage; GLint maxLevels; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; texObj = _mesa_select_tex_object(ctx, texUnit, target); if (!texObj) { @@ -3258,23 +3711,29 @@ _mesa_GetCompressedTexImageARB(GLenum target, GLint level, GLvoid *img) return; } - if (is_proxy_target(target)) { + if (_mesa_is_proxy_texture(target)) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetCompressedTexImageARB(target)"); return; } - texImage = _mesa_select_tex_image(ctx, texUnit, target, level); - if (!texImage) { - /* probably invalid mipmap level */ - _mesa_error(ctx, GL_INVALID_VALUE, "glGetCompressedTexImageARB(level)"); - return; - } - if (!texImage->IsCompressed) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetCompressedTexImageARB"); - return; - } + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + if (!texImage) { + /* probably invalid mipmap level */ + _mesa_error(ctx, GL_INVALID_VALUE, "glGetCompressedTexImageARB(level)"); + goto out; + } - /* this typically calls _mesa_get_compressed_teximage() */ - ctx->Driver.GetCompressedTexImage(ctx, target, level, img, texObj,texImage); + if (!texImage->IsCompressed) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetCompressedTexImageARB"); + goto out; + } + + /* this typically calls _mesa_get_compressed_teximage() */ + ctx->Driver.GetCompressedTexImage(ctx, target, level, img, texObj,texImage); + } + out: + _mesa_unlock_texture(ctx, texObj); } diff --git a/src/kits/opengl/mesa/main/teximage.h b/src/kits/opengl/mesa/main/teximage.h index d7b927ff64..68457f4728 100644 --- a/src/kits/opengl/mesa/main/teximage.h +++ b/src/kits/opengl/mesa/main/teximage.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -35,6 +35,13 @@ #include "mtypes.h" +extern void * +_mesa_alloc_texmemory(GLsizei bytes); + +extern void +_mesa_free_texmemory(void *m); + + /** \name Internal functions */ /*@{*/ @@ -42,12 +49,20 @@ extern GLint _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat ); +extern GLboolean +_mesa_is_proxy_texture(GLenum target); + + extern struct gl_texture_image * _mesa_new_texture_image( GLcontext *ctx ); extern void -_mesa_delete_texture_image( struct gl_texture_image *teximage ); +_mesa_delete_texture_image( GLcontext *ctx, struct gl_texture_image *teximage ); + +extern void +_mesa_free_texture_image_data( GLcontext *ctx, + struct gl_texture_image *texImage ); extern void @@ -69,12 +84,12 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit, extern struct gl_texture_image * -_mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit, +_mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_object *texObj, GLenum target, GLint level); extern struct gl_texture_image * -_mesa_get_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit, +_mesa_get_tex_image(GLcontext *ctx, struct gl_texture_object *texObj, GLenum target, GLint level); @@ -91,6 +106,23 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level, GLint internalFormat, GLenum format, GLenum type, GLint width, GLint height, GLint depth, GLint border); + +/* Lock a texture for updating. See also _mesa_lock_context_textures(). + */ +static INLINE void _mesa_lock_texture(GLcontext *ctx, + struct gl_texture_object *texObj) +{ + _glthread_LOCK_MUTEX(ctx->Shared->TexMutex); + ctx->Shared->TextureStateStamp++; + (void) texObj; +} + +static INLINE void _mesa_unlock_texture(GLcontext *ctx, + struct gl_texture_object *texObj) +{ + _glthread_UNLOCK_MUTEX(ctx->Shared->TexMutex); +} + /*@}*/ diff --git a/src/kits/opengl/mesa/main/texobj.c b/src/kits/opengl/mesa/main/texobj.c index 4bbd348658..1d27cd3f7c 100644 --- a/src/kits/opengl/mesa/main/texobj.c +++ b/src/kits/opengl/mesa/main/texobj.c @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 6.2 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -32,6 +32,7 @@ #include "colortab.h" #include "context.h" #include "enums.h" +#include "fbobject.h" #include "hash.h" #include "imports.h" #include "macros.h" @@ -41,10 +42,27 @@ #include "mtypes.h" +#ifdef __VMS +#define _mesa_sprintf sprintf +#endif + /**********************************************************************/ /** \name Internal functions */ /*@{*/ + +/** + * Return the gl_texture_object for a given ID. + */ +struct gl_texture_object * +_mesa_lookup_texture(GLcontext *ctx, GLuint id) +{ + return (struct gl_texture_object *) + _mesa_HashLookup(ctx->Shared->TexObjects, id); +} + + + /** * Allocate and initialize a new texture object. But don't put it into the * texture object hash table. @@ -144,7 +162,7 @@ _mesa_delete_texture_object( GLcontext *ctx, struct gl_texture_object *texObj ) for (face = 0; face < 6; face++) { for (i = 0; i < MAX_TEXTURE_LEVELS; i++) { if (texObj->Image[face][i]) { - _mesa_delete_texture_image( texObj->Image[face][i] ); + _mesa_delete_texture_image( ctx, texObj->Image[face][i] ); } } } @@ -157,63 +175,11 @@ _mesa_delete_texture_object( GLcontext *ctx, struct gl_texture_object *texObj ) } -/** - * Add the given texture object to the texture object pool. - */ -void -_mesa_save_texture_object( GLcontext *ctx, struct gl_texture_object *texObj ) -{ - /* insert into linked list */ - _glthread_LOCK_MUTEX(ctx->Shared->Mutex); - texObj->Next = ctx->Shared->TexObjectList; - ctx->Shared->TexObjectList = texObj; - _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); - if (texObj->Name > 0) { - /* insert into hash table */ - _mesa_HashInsert(ctx->Shared->TexObjects, texObj->Name, texObj); - } -} - - -/** - * Remove the given texture object from the texture object pool. - * Do not deallocate the texture object though. - */ -void -_mesa_remove_texture_object( GLcontext *ctx, struct gl_texture_object *texObj ) -{ - struct gl_texture_object *tprev, *tcurr; - - _glthread_LOCK_MUTEX(ctx->Shared->Mutex); - - /* unlink from the linked list */ - tprev = NULL; - tcurr = ctx->Shared->TexObjectList; - while (tcurr) { - if (tcurr == texObj) { - if (tprev) { - tprev->Next = texObj->Next; - } - else { - ctx->Shared->TexObjectList = texObj->Next; - } - break; - } - tprev = tcurr; - tcurr = tcurr->Next; - } - - _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); - - if (texObj->Name > 0) { - /* remove from hash table */ - _mesa_HashRemove(ctx->Shared->TexObjects, texObj->Name); - } -} /** * Copy texture object state from one texture object to another. + * Use for glPush/PopAttrib. * * \param dest destination texture object. * \param src source texture object. @@ -250,7 +216,6 @@ _mesa_copy_texture_object( struct gl_texture_object *dest, dest->GenerateMipmap = src->GenerateMipmap; dest->Palette = src->Palette; dest->Complete = src->Complete; - dest->_IsPowerOfTwo = src->_IsPowerOfTwo; } @@ -293,12 +258,11 @@ _mesa_test_texobj_completeness( const GLcontext *ctx, GLint maxLog2 = 0, maxLevels = 0; t->Complete = GL_TRUE; /* be optimistic */ - t->_IsPowerOfTwo = GL_TRUE; /* may be set FALSE below */ /* Always need the base level image */ if (!t->Image[0][baseLevel]) { char s[100]; - sprintf(s, "obj %p (%d) Image[baseLevel=%d] == NULL", + _mesa_sprintf(s, "obj %p (%d) Image[baseLevel=%d] == NULL", (void *) t, t->Name, baseLevel); incomplete(t, s); t->Complete = GL_FALSE; @@ -369,11 +333,6 @@ _mesa_test_texobj_completeness( const GLcontext *ctx, } } - /* check for non power of two */ - if (!t->Image[0][baseLevel]->_IsPowerOfTwo) { - t->_IsPowerOfTwo = GL_FALSE; - } - /* extra checking for mipmaps */ if (t->MinFilter != GL_NEAREST && t->MinFilter != GL_LINEAR) { /* @@ -484,7 +443,7 @@ _mesa_test_texobj_completeness( const GLcontext *ctx, t->Complete = GL_FALSE; return; } - if (t->Image[0][i]->Format == GL_DEPTH_COMPONENT) { + if (t->Image[0][i]->_BaseFormat == GL_DEPTH_COMPONENT) { t->Complete = GL_FALSE; incomplete(t, "GL_DEPTH_COMPONENT only works with 1/2D tex"); return; @@ -531,7 +490,7 @@ _mesa_test_texobj_completeness( const GLcontext *ctx, return; } /* Don't support GL_DEPTH_COMPONENT for cube maps */ - if (t->Image[face][i]->Format == GL_DEPTH_COMPONENT) { + if (t->Image[face][i]->_BaseFormat == GL_DEPTH_COMPONENT) { t->Complete = GL_FALSE; incomplete(t, "GL_DEPTH_COMPONENT only works with 1/2D tex"); return; @@ -617,10 +576,16 @@ _mesa_GenTextures( GLsizei n, GLuint *textures ) GLenum target = 0; texObj = (*ctx->Driver.NewTextureObject)( ctx, name, target); if (!texObj) { + _glthread_UNLOCK_MUTEX(GenTexturesLock); _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenTextures"); return; } - _mesa_save_texture_object(ctx, texObj); + + /* insert into hash table */ + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + _mesa_HashInsert(ctx->Shared->TexObjects, texObj->Name, texObj); + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); + textures[i] = name; } @@ -628,6 +593,82 @@ _mesa_GenTextures( GLsizei n, GLuint *textures ) } +/** + * Check if the given texture object is bound to the current draw or + * read framebuffer. If so, Unbind it. + */ +static void +unbind_texobj_from_fbo(GLcontext *ctx, struct gl_texture_object *texObj) +{ + const GLuint n = (ctx->DrawBuffer == ctx->ReadBuffer) ? 1 : 2; + GLuint i; + + for (i = 0; i < n; i++) { + struct gl_framebuffer *fb = (i == 0) ? ctx->DrawBuffer : ctx->ReadBuffer; + if (fb->Name) { + GLuint j; + for (j = 0; j < BUFFER_COUNT; j++) { + if (fb->Attachment[j].Type == GL_TEXTURE && + fb->Attachment[j].Texture == texObj) { + _mesa_remove_attachment(ctx, fb->Attachment + j); + } + } + } + } +} + + +/** + * Check if the given texture object is bound to any texture image units and + * unbind it if so. + * XXX all RefCount accesses should be protected by a mutex. + */ +static void +unbind_texobj_from_texunits(GLcontext *ctx, struct gl_texture_object *texObj) +{ + GLuint u; + + for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) { + struct gl_texture_unit *unit = &ctx->Texture.Unit[u]; + if (texObj == unit->Current1D) { + unit->Current1D = ctx->Shared->Default1D; + ctx->Shared->Default1D->RefCount++; + texObj->RefCount--; + if (texObj == unit->_Current) + unit->_Current = unit->Current1D; + } + else if (texObj == unit->Current2D) { + unit->Current2D = ctx->Shared->Default2D; + ctx->Shared->Default2D->RefCount++; + texObj->RefCount--; + if (texObj == unit->_Current) + unit->_Current = unit->Current2D; + } + else if (texObj == unit->Current3D) { + unit->Current3D = ctx->Shared->Default3D; + ctx->Shared->Default3D->RefCount++; + texObj->RefCount--; + if (texObj == unit->_Current) + unit->_Current = unit->Current3D; + } + else if (texObj == unit->CurrentCubeMap) { + unit->CurrentCubeMap = ctx->Shared->DefaultCubeMap; + ctx->Shared->DefaultCubeMap->RefCount++; + texObj->RefCount--; + if (texObj == unit->_Current) + unit->_Current = unit->CurrentCubeMap; + } + else if (texObj == unit->CurrentRect) { + unit->CurrentRect = ctx->Shared->DefaultRect; + ctx->Shared->DefaultRect->RefCount++; + texObj->RefCount--; + if (texObj == unit->_Current) + unit->_Current = unit->CurrentRect; + } + } +} + + /** * Delete named textures. * @@ -654,64 +695,48 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures) for (i = 0; i < n; i++) { if (textures[i] > 0) { - struct gl_texture_object *delObj = (struct gl_texture_object *) - _mesa_HashLookup(ctx->Shared->TexObjects, textures[i]); + struct gl_texture_object *delObj + = _mesa_lookup_texture(ctx, textures[i]); + if (delObj) { - /* First check if this texture is currently bound. + GLboolean delete; + + _mesa_lock_texture(ctx, delObj); + + /* Check if texture is bound to any framebuffer objects. + * If so, unbind. + * See section 4.4.2.3 of GL_EXT_framebuffer_object. + */ + unbind_texobj_from_fbo(ctx, delObj); + + /* Check if this texture is currently bound to any texture units. * If so, unbind it and decrement the reference count. */ - GLuint u; - for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) { - struct gl_texture_unit *unit = &ctx->Texture.Unit[u]; - if (delObj == unit->Current1D) { - unit->Current1D = ctx->Shared->Default1D; - ctx->Shared->Default1D->RefCount++; - delObj->RefCount--; - if (delObj == unit->_Current) - unit->_Current = unit->Current1D; - } - else if (delObj == unit->Current2D) { - unit->Current2D = ctx->Shared->Default2D; - ctx->Shared->Default2D->RefCount++; - delObj->RefCount--; - if (delObj == unit->_Current) - unit->_Current = unit->Current2D; - } - else if (delObj == unit->Current3D) { - unit->Current3D = ctx->Shared->Default3D; - ctx->Shared->Default3D->RefCount++; - delObj->RefCount--; - if (delObj == unit->_Current) - unit->_Current = unit->Current3D; - } - else if (delObj == unit->CurrentCubeMap) { - unit->CurrentCubeMap = ctx->Shared->DefaultCubeMap; - ctx->Shared->DefaultCubeMap->RefCount++; - delObj->RefCount--; - if (delObj == unit->_Current) - unit->_Current = unit->CurrentCubeMap; - } - else if (delObj == unit->CurrentRect) { - unit->CurrentRect = ctx->Shared->DefaultRect; - ctx->Shared->DefaultRect->RefCount++; - delObj->RefCount--; - if (delObj == unit->_Current) - unit->_Current = unit->CurrentRect; - } - } + unbind_texobj_from_texunits(ctx, delObj); + ctx->NewState |= _NEW_TEXTURE; - /* If user hasn't already tried to delete the texture... */ - if (!delObj->DeletePending) { - delObj->DeletePending = GL_TRUE; - delObj->RefCount--; - ASSERT(delObj->RefCount >= 0); - } + /* The texture _name_ is now free for re-use. + * Remove it from the hash table now. + */ + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + _mesa_HashRemove(ctx->Shared->TexObjects, delObj->Name); + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); - /* See if we can really delete the texture now */ - if (delObj->RefCount == 0) { - ASSERT(delObj->Name != 0); /* Never delete default tex objects */ - _mesa_remove_texture_object(ctx, delObj); + /* The actual texture object will not be freed until it's no + * longer bound in any context. + * XXX all RefCount accesses should be protected by a mutex. + */ + delObj->RefCount--; + delete = (delObj->RefCount == 0); + _mesa_unlock_texture(ctx, delObj); + + /* We know that refcount went to zero above, so this is + * the only pointer left to delObj, so we don't have to + * worry about locking any more: + */ + if (delete) { + ASSERT(delObj->Name != 0); /* Never delete default tex objs */ ASSERT(ctx->Driver.DeleteTexture); (*ctx->Driver.DeleteTexture)(ctx, delObj); } @@ -740,10 +765,10 @@ void GLAPIENTRY _mesa_BindTexture( GLenum target, GLuint texName ) { GET_CURRENT_CONTEXT(ctx); - GLuint unit = ctx->Texture.CurrentUnit; + const GLuint unit = ctx->Texture.CurrentUnit; struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; struct gl_texture_object *oldTexObj; - struct gl_texture_object *newTexObj = 0; + struct gl_texture_object *newTexObj = NULL; ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) @@ -782,12 +807,15 @@ _mesa_BindTexture( GLenum target, GLuint texName ) return; } - if (oldTexObj->Name == texName) + if (oldTexObj->Name == texName) { /* XXX this might be wrong. If the texobj is in use by another * context and a texobj parameter was changed, this might be our * only chance to update this context's hardware state. + * Note that some applications re-bind the same texture a lot so we + * want to handle that case quickly. */ return; /* rebinding the same texture- no change */ + } /* * Get pointer to new texture object (newTexObj) @@ -816,8 +844,7 @@ _mesa_BindTexture( GLenum target, GLuint texName ) } else { /* non-default texture object */ - const struct _mesa_HashTable *hash = ctx->Shared->TexObjects; - newTexObj = (struct gl_texture_object *) _mesa_HashLookup(hash, texName); + newTexObj = _mesa_lookup_texture(ctx, texName); if (newTexObj) { /* error checking */ if (newTexObj->Target != 0 && newTexObj->Target != target) { @@ -849,11 +876,16 @@ _mesa_BindTexture( GLenum target, GLuint texName ) _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindTexture"); return; } - _mesa_save_texture_object(ctx, newTexObj); + + /* and insert it into hash table */ + _glthread_LOCK_MUTEX(ctx->Shared->Mutex); + _mesa_HashInsert(ctx->Shared->TexObjects, texName, newTexObj); + _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); } newTexObj->Target = target; } + /* XXX all RefCount accesses should be protected by a mutex. */ newTexObj->RefCount++; /* do the actual binding, but first flush outstanding vertices: @@ -888,12 +920,11 @@ _mesa_BindTexture( GLenum target, GLuint texName ) /* Decrement the reference count on the old texture and check if it's * time to delete it. */ + /* XXX all RefCount accesses should be protected by a mutex. */ oldTexObj->RefCount--; ASSERT(oldTexObj->RefCount >= 0); if (oldTexObj->RefCount == 0) { ASSERT(oldTexObj->Name != 0); - ASSERT(oldTexObj->DeletePending); - _mesa_remove_texture_object(ctx, oldTexObj); ASSERT(ctx->Driver.DeleteTexture); (*ctx->Driver.DeleteTexture)( ctx, oldTexObj ); } @@ -930,8 +961,7 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName, for (i = 0; i < n; i++) { if (texName[i] > 0) { - struct gl_texture_object *t = (struct gl_texture_object *) - _mesa_HashLookup(ctx->Shared->TexObjects, texName[i]); + struct gl_texture_object *t = _mesa_lookup_texture(ctx, texName[i]); if (t) { t->Priority = CLAMP( priorities[i], 0.0F, 1.0F ); if (ctx->Driver.PrioritizeTexture) @@ -980,8 +1010,7 @@ _mesa_AreTexturesResident(GLsizei n, const GLuint *texName, _mesa_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident"); return GL_FALSE; } - t = (struct gl_texture_object *) - _mesa_HashLookup(ctx->Shared->TexObjects, texName[i]); + t = _mesa_lookup_texture(ctx, texName[i]); if (!t) { _mesa_error(ctx, GL_INVALID_VALUE, "glAreTexturesResident"); return GL_FALSE; @@ -1028,11 +1057,36 @@ _mesa_IsTexture( GLuint texture ) if (!texture) return GL_FALSE; - t = (struct gl_texture_object *) - _mesa_HashLookup(ctx->Shared->TexObjects, texture); + t = _mesa_lookup_texture(ctx, texture); /* IsTexture is true only after object has been bound once. */ return t && t->Target; } +/* Simplest implementation of texture locking: Grab the a new mutex in + * the shared context. Examine the shared context state timestamp and + * if there has been a change, set the appropriate bits in + * ctx->NewState. + * + * See also _mesa_lock/unlock_texture in texobj.h + */ +void _mesa_lock_context_textures( GLcontext *ctx ) +{ + _glthread_LOCK_MUTEX(ctx->Shared->TexMutex); + + if (ctx->Shared->TextureStateStamp != ctx->TextureStateTimestamp) { + ctx->NewState |= _NEW_TEXTURE; + ctx->TextureStateTimestamp = ctx->Shared->TextureStateStamp; + } +} + + +void _mesa_unlock_context_textures( GLcontext *ctx ) +{ + assert(ctx->Shared->TextureStateStamp == ctx->TextureStateTimestamp); + _glthread_UNLOCK_MUTEX(ctx->Shared->TexMutex); +} + /*@}*/ + + diff --git a/src/kits/opengl/mesa/main/texobj.h b/src/kits/opengl/mesa/main/texobj.h index c5cce28c37..ec7cf8cd86 100644 --- a/src/kits/opengl/mesa/main/texobj.h +++ b/src/kits/opengl/mesa/main/texobj.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -40,6 +40,9 @@ */ /*@{*/ +extern struct gl_texture_object * +_mesa_lookup_texture(GLcontext *ctx, GLuint id); + extern struct gl_texture_object * _mesa_new_texture_object( GLcontext *ctx, GLuint name, GLenum target ); @@ -50,12 +53,6 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj, extern void _mesa_delete_texture_object( GLcontext *ctx, struct gl_texture_object *obj ); -extern void -_mesa_save_texture_object( GLcontext *ctx, struct gl_texture_object *obj ); - -extern void -_mesa_remove_texture_object( GLcontext *ctx, struct gl_texture_object *obj ); - extern void _mesa_copy_texture_object( struct gl_texture_object *dest, const struct gl_texture_object *src ); @@ -64,6 +61,9 @@ extern void _mesa_test_texobj_completeness( const GLcontext *ctx, struct gl_texture_object *obj ); +extern void _mesa_unlock_context_textures( GLcontext *ctx ); +extern void _mesa_lock_context_textures( GLcontext *ctx ); + /*@}*/ @@ -98,4 +98,5 @@ _mesa_IsTexture( GLuint texture ); /*@}*/ + #endif diff --git a/src/kits/opengl/mesa/main/texrender.c b/src/kits/opengl/mesa/main/texrender.c new file mode 100644 index 0000000000..32e7b575f0 --- /dev/null +++ b/src/kits/opengl/mesa/main/texrender.c @@ -0,0 +1,434 @@ + +#include "context.h" +#include "fbobject.h" +#include "texformat.h" +#include "texrender.h" +#include "renderbuffer.h" + + +/* + * Render-to-texture code for GL_EXT_framebuffer_object + */ + + +/** + * Derived from gl_renderbuffer class + */ +struct texture_renderbuffer +{ + struct gl_renderbuffer Base; /* Base class object */ + struct gl_texture_image *TexImage; + StoreTexelFunc Store; + GLint Zoffset; +}; + + +/** + * Get row of values from the renderbuffer that wraps a texture image. + */ +static void +texture_get_row(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const struct texture_renderbuffer *trb + = (const struct texture_renderbuffer *) rb; + const GLint z = trb->Zoffset; + GLuint i; + + ASSERT(trb->TexImage->Width == rb->Width); + ASSERT(trb->TexImage->Height == rb->Height); + + if (rb->DataType == CHAN_TYPE) { + GLchan *rgbaOut = (GLchan *) values; + for (i = 0; i < count; i++) { + trb->TexImage->FetchTexelc(trb->TexImage, x + i, y, z, rgbaOut + 4 * i); + } + } + else if (rb->DataType == GL_UNSIGNED_INT) { + GLuint *zValues = (GLuint *) values; + /* + const GLdouble scale = (GLdouble) 0xffffffff; + */ + for (i = 0; i < count; i++) { + GLfloat flt; + trb->TexImage->FetchTexelf(trb->TexImage, x + i, y, z, &flt); +#if 0 + /* this should work, but doesn't (overflow due to low precision) */ + zValues[i] = (GLuint) (flt * scale); +#else + /* temporary hack */ + zValues[i] = ((GLuint) (flt * 0xffffff)) << 8; +#endif + } + } + else if (rb->DataType == GL_UNSIGNED_INT_24_8_EXT) { + GLuint *zValues = (GLuint *) values; + for (i = 0; i < count; i++) { + GLfloat flt; + trb->TexImage->FetchTexelf(trb->TexImage, x + i, y, z, &flt); + zValues[i] = ((GLuint) (flt * 0xffffff)) << 8; + } + } + else { + _mesa_problem(ctx, "invalid rb->DataType in texture_get_row"); + } +} + + +static void +texture_get_values(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + const struct texture_renderbuffer *trb + = (const struct texture_renderbuffer *) rb; + const GLint z = trb->Zoffset; + GLuint i; + + if (rb->DataType == CHAN_TYPE) { + GLchan *rgbaOut = (GLchan *) values; + for (i = 0; i < count; i++) { + trb->TexImage->FetchTexelc(trb->TexImage, x[i], y[i], z, + rgbaOut + 4 * i); + } + } + else if (rb->DataType == GL_UNSIGNED_INT) { + GLuint *zValues = (GLuint *) values; + for (i = 0; i < count; i++) { + GLfloat flt; + trb->TexImage->FetchTexelf(trb->TexImage, x[i], y[i], z, &flt); +#if 0 + zValues[i] = (GLuint) (flt * 0xffffffff); +#else + zValues[i] = ((GLuint) (flt * 0xffffff)) << 8; +#endif + } + } + else if (rb->DataType == GL_UNSIGNED_INT_24_8_EXT) { + GLuint *zValues = (GLuint *) values; + for (i = 0; i < count; i++) { + GLfloat flt; + trb->TexImage->FetchTexelf(trb->TexImage, x[i], y[i], z, &flt); + zValues[i] = ((GLuint) (flt * 0xffffff)) << 8; + } + } + else { + _mesa_problem(ctx, "invalid rb->DataType in texture_get_values"); + } +} + + +/** + * Put row of values into a renderbuffer that wraps a texture image. + */ +static void +texture_put_row(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + const struct texture_renderbuffer *trb + = (const struct texture_renderbuffer *) rb; + const GLint z = trb->Zoffset; + GLuint i; + + if (rb->DataType == CHAN_TYPE) { + const GLchan *rgba = (const GLchan *) values; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x + i, y, z, rgba); + } + rgba += 4; + } + } + else if (rb->DataType == GL_UNSIGNED_INT) { + const GLuint *zValues = (const GLuint *) values; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x + i, y, z, zValues + i); + } + } + } + else if (rb->DataType == GL_UNSIGNED_INT_24_8_EXT) { + const GLuint *zValues = (const GLuint *) values; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLfloat flt = (zValues[i] >> 8) * (1.0 / 0xffffff); + trb->Store(trb->TexImage, x + i, y, z, &flt); + } + } + } + else { + _mesa_problem(ctx, "invalid rb->DataType in texture_put_row"); + } +} + + +static void +texture_put_mono_row(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + const struct texture_renderbuffer *trb + = (const struct texture_renderbuffer *) rb; + const GLint z = trb->Zoffset; + GLuint i; + + if (rb->DataType == CHAN_TYPE) { + const GLchan *rgba = (const GLchan *) value; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x + i, y, z, rgba); + } + } + } + else if (rb->DataType == GL_UNSIGNED_INT) { + const GLuint zValue = *((const GLuint *) value); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x + i, y, z, &zValue); + } + } + } + else if (rb->DataType == GL_UNSIGNED_INT_24_8_EXT) { + const GLuint zValue = *((const GLuint *) value); + const GLfloat flt = (zValue >> 8) * (1.0 / 0xffffff); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x + i, y, z, &flt); + } + } + } + else { + _mesa_problem(ctx, "invalid rb->DataType in texture_put_mono_row"); + } +} + + +static void +texture_put_values(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], const void *values, + const GLubyte *mask) +{ + const struct texture_renderbuffer *trb + = (const struct texture_renderbuffer *) rb; + const GLint z = trb->Zoffset; + GLuint i; + + if (rb->DataType == CHAN_TYPE) { + const GLchan *rgba = (const GLchan *) values; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x[i], y[i], z, rgba); + } + rgba += 4; + } + } + else if (rb->DataType == GL_UNSIGNED_INT) { + const GLuint *zValues = (const GLuint *) values; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x[i], y[i], z, zValues + i); + } + } + } + else if (rb->DataType == GL_UNSIGNED_INT_24_8_EXT) { + const GLuint *zValues = (const GLuint *) values; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLfloat flt = (zValues[i] >> 8) * (1.0 / 0xffffff); + trb->Store(trb->TexImage, x[i], y[i], z, &flt); + } + } + } + else { + _mesa_problem(ctx, "invalid rb->DataType in texture_put_values"); + } +} + + +static void +texture_put_mono_values(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + const struct texture_renderbuffer *trb + = (const struct texture_renderbuffer *) rb; + const GLint z = trb->Zoffset; + GLuint i; + + if (rb->DataType == CHAN_TYPE) { + const GLchan *rgba = (const GLchan *) value; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x[i], y[i], z, rgba); + } + } + } + else if (rb->DataType == GL_UNSIGNED_INT) { + const GLuint zValue = *((const GLuint *) value); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x[i], y[i], z, &zValue); + } + } + } + else if (rb->DataType == GL_UNSIGNED_INT_24_8_EXT) { + const GLuint zValue = *((const GLuint *) value); + const GLfloat flt = (zValue >> 8) * (1.0 / 0xffffff); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + trb->Store(trb->TexImage, x[i], y[i], z, &flt); + } + } + } + else { + _mesa_problem(ctx, "invalid rb->DataType in texture_put_mono_values"); + } +} + + +static void +delete_texture_wrapper(struct gl_renderbuffer *rb) +{ + ASSERT(rb->RefCount == 0); + _mesa_free(rb); +} + + +/** + * This function creates a renderbuffer object which wraps a texture image. + * The new renderbuffer is plugged into the given attachment point. + * This allows rendering into the texture as if it were a renderbuffer. + */ +static void +wrap_texture(GLcontext *ctx, struct gl_renderbuffer_attachment *att) +{ + struct texture_renderbuffer *trb; + const GLuint name = 0; + + ASSERT(att->Type == GL_TEXTURE); + ASSERT(att->Renderbuffer == NULL); + + trb = CALLOC_STRUCT(texture_renderbuffer); + if (!trb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "wrap_texture"); + return; + } + + /* init base gl_renderbuffer fields */ + _mesa_init_renderbuffer(&trb->Base, name); + /* plug in our texture_renderbuffer-specific functions */ + trb->Base.Delete = delete_texture_wrapper; + trb->Base.AllocStorage = NULL; /* illegal! */ + trb->Base.GetRow = texture_get_row; + trb->Base.GetValues = texture_get_values; + trb->Base.PutRow = texture_put_row; + trb->Base.PutMonoRow = texture_put_mono_row; + trb->Base.PutValues = texture_put_values; + trb->Base.PutMonoValues = texture_put_mono_values; + + /* update attachment point */ + att->Renderbuffer = &(trb->Base); +} + + + +/** + * Update the renderbuffer wrapper for rendering to a texture. + * For example, update the width, height of the RB based on the texture size, + * update the internal format info, etc. + */ +static void +update_wrapper(GLcontext *ctx, const struct gl_renderbuffer_attachment *att) +{ + struct texture_renderbuffer *trb + = (struct texture_renderbuffer *) att->Renderbuffer; + + (void) ctx; + ASSERT(trb); + + trb->TexImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel]; + ASSERT(trb->TexImage); + + trb->Store = trb->TexImage->TexFormat->StoreTexel; + ASSERT(trb->Store); + + trb->Zoffset = att->Zoffset; + + trb->Base.Width = trb->TexImage->Width; + trb->Base.Height = trb->TexImage->Height; + trb->Base.InternalFormat = trb->TexImage->InternalFormat; + /* XXX may need more special cases here */ + if (trb->TexImage->TexFormat->MesaFormat == MESA_FORMAT_Z24_S8) { + trb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT; + trb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT; + } + else if (trb->TexImage->TexFormat->MesaFormat == MESA_FORMAT_Z16) { + trb->Base._ActualFormat = GL_DEPTH_COMPONENT; + trb->Base.DataType = GL_UNSIGNED_SHORT; + } + else if (trb->TexImage->TexFormat->MesaFormat == MESA_FORMAT_Z32) { + trb->Base._ActualFormat = GL_DEPTH_COMPONENT; + trb->Base.DataType = GL_UNSIGNED_INT; + } + else { + trb->Base._ActualFormat = trb->TexImage->InternalFormat; + trb->Base.DataType = CHAN_TYPE; + } + trb->Base._BaseFormat = trb->TexImage->TexFormat->BaseFormat; +#if 0 + /* fix/avoid this assertion someday */ + ASSERT(trb->Base._BaseFormat == GL_RGB || + trb->Base._BaseFormat == GL_RGBA || + trb->Base._BaseFormat == GL_DEPTH_COMPONENT); +#endif + trb->Base.Data = trb->TexImage->Data; + + trb->Base.RedBits = trb->TexImage->TexFormat->RedBits; + trb->Base.GreenBits = trb->TexImage->TexFormat->GreenBits; + trb->Base.BlueBits = trb->TexImage->TexFormat->BlueBits; + trb->Base.AlphaBits = trb->TexImage->TexFormat->AlphaBits; + trb->Base.DepthBits = trb->TexImage->TexFormat->DepthBits; +} + + + +/** + * Called when rendering to a texture image begins, or when changing + * the dest mipmap level, cube face, etc. + * This is a fallback routine for software render-to-texture. + * + * Called via the glRenderbufferTexture1D/2D/3D() functions + * and elsewhere (such as glTexImage2D). + * + * The image we're rendering into is + * att->Texture->Image[att->CubeMapFace][att->TextureLevel]; + * It'll never be NULL. + * + * \param fb the framebuffer object the texture is being bound to + * \param att the fb attachment point of the texture + * + * \sa _mesa_framebuffer_renderbuffer + */ +void +_mesa_render_texture(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att) +{ + (void) fb; + + if (!att->Renderbuffer) { + wrap_texture(ctx, att); + } + update_wrapper(ctx, att); +} + + +void +_mesa_finish_render_texture(GLcontext *ctx, + struct gl_renderbuffer_attachment *att) +{ + /* do nothing */ + /* The renderbuffer texture wrapper will get deleted by the + * normal mechanism for deleting renderbuffers. + */ + (void) ctx; + (void) att; +} diff --git a/src/kits/opengl/mesa/main/texrender.h b/src/kits/opengl/mesa/main/texrender.h new file mode 100644 index 0000000000..7c3fb0871b --- /dev/null +++ b/src/kits/opengl/mesa/main/texrender.h @@ -0,0 +1,15 @@ +#ifndef TEXRENDER_H +#define TEXRENDER_H + + +extern void +_mesa_render_texture(GLcontext *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att); + +extern void +_mesa_finish_render_texture(GLcontext *ctx, + struct gl_renderbuffer_attachment *att); + + +#endif /* TEXRENDER_H */ diff --git a/src/kits/opengl/mesa/main/texstate.c b/src/kits/opengl/mesa/main/texstate.c index 0f3eea6f33..bcedcafe19 100644 --- a/src/kits/opengl/mesa/main/texstate.c +++ b/src/kits/opengl/mesa/main/texstate.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -33,27 +33,21 @@ #include "colortab.h" #include "context.h" #include "enums.h" -#include "extensions.h" #include "macros.h" -#include "nvfragprog.h" +#include "texcompress.h" #include "texobj.h" #include "teximage.h" #include "texstate.h" +#include "texenvprogram.h" #include "mtypes.h" #include "math/m_xform.h" -#include "math/m_matrix.h" +#include "shaderobjects.h" -#ifdef SPECIALCAST -/* Needed for an Amiga compiler */ #define ENUM_TO_FLOAT(X) ((GLfloat)(GLint)(X)) #define ENUM_TO_DOUBLE(X) ((GLdouble)(GLint)(X)) -#else -/* all other compilers */ -#define ENUM_TO_FLOAT(X) ((GLfloat)(X)) -#define ENUM_TO_DOUBLE(X) ((GLdouble)(X)) -#endif + /** * Default texture combine environment state. This is used to initialize @@ -71,6 +65,35 @@ static const struct gl_tex_env_combine_state default_combine_state = { }; +/** + * Copy a texture binding. Helper used by _mesa_copy_texture_state(). + */ +static void +copy_texture_binding(const GLcontext *ctx, + struct gl_texture_object **dst, + struct gl_texture_object *src) +{ + /* only copy if names differ (per OpenGL SI) */ + if ((*dst)->Name != src->Name) { + /* unbind/delete dest binding which we're changing */ + (*dst)->RefCount--; + if ((*dst)->RefCount == 0) { + /* time to delete this texture object */ + ASSERT((*dst)->Name != 0); + ASSERT(ctx->Driver.DeleteTexture); + /* XXX cast-away const, unfortunately */ + (*ctx->Driver.DeleteTexture)((GLcontext *) ctx, *dst); + } + /* make new binding, incrementing ref count */ + *dst = src; + src->RefCount++; + } +} + + +/** + * Used by glXCopyContext to copy texture state from one context to another. + */ void _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst ) { @@ -120,17 +143,21 @@ _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst ) dst->Texture.Unit[i].Combine.ScaleShiftRGB = src->Texture.Unit[i].Combine.ScaleShiftRGB; dst->Texture.Unit[i].Combine.ScaleShiftA = src->Texture.Unit[i].Combine.ScaleShiftA; - /* texture object state */ - _mesa_copy_texture_object(dst->Texture.Unit[i].Current1D, - src->Texture.Unit[i].Current1D); - _mesa_copy_texture_object(dst->Texture.Unit[i].Current2D, - src->Texture.Unit[i].Current2D); - _mesa_copy_texture_object(dst->Texture.Unit[i].Current3D, - src->Texture.Unit[i].Current3D); - _mesa_copy_texture_object(dst->Texture.Unit[i].CurrentCubeMap, - src->Texture.Unit[i].CurrentCubeMap); - _mesa_copy_texture_object(dst->Texture.Unit[i].CurrentRect, - src->Texture.Unit[i].CurrentRect); + /* copy texture object bindings, not contents of texture objects */ + _mesa_lock_context_textures(dst); + + copy_texture_binding(src, &dst->Texture.Unit[i].Current1D, + src->Texture.Unit[i].Current1D); + copy_texture_binding(src, &dst->Texture.Unit[i].Current2D, + src->Texture.Unit[i].Current2D); + copy_texture_binding(src, &dst->Texture.Unit[i].Current3D, + src->Texture.Unit[i].Current3D); + copy_texture_binding(src, &dst->Texture.Unit[i].CurrentCubeMap, + src->Texture.Unit[i].CurrentCubeMap); + copy_texture_binding(src, &dst->Texture.Unit[i].CurrentRect, + src->Texture.Unit[i].CurrentRect); + + _mesa_unlock_context_textures(dst); } } @@ -290,10 +317,20 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state, void GLAPIENTRY _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) { + GLuint maxUnit; GET_CURRENT_CONTEXT(ctx); - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + struct gl_texture_unit *texUnit; ASSERT_OUTSIDE_BEGIN_END(ctx); + maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV) + ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxTextureImageUnits; + if (ctx->Texture.CurrentUnit >= maxUnit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexEnvfv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + #define TE_ERROR(errCode, msg, value) \ _mesa_error(ctx, errCode, msg, _mesa_lookup_enum_by_nr(value)); @@ -543,8 +580,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) } break; case GL_OPERAND2_RGB: - if (ctx->Extensions.EXT_texture_env_combine || - ctx->Extensions.ARB_texture_env_combine) { + if (ctx->Extensions.ARB_texture_env_combine) { const GLenum operand = (GLenum) (GLint) *param; if (texUnit->Combine.OperandRGB[2] == operand) return; @@ -561,14 +597,24 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) return; } } + else if (ctx->Extensions.EXT_texture_env_combine) { + const GLenum operand = (GLenum) (GLint) *param; + if (texUnit->Combine.OperandRGB[2] == operand) + return; + /* operand must be GL_SRC_ALPHA which is the initial value - thus + don't need to actually compare the operand to the possible value */ + else { + TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", operand); + return; + } + } else { TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname); return; } break; case GL_OPERAND2_ALPHA: - if (ctx->Extensions.EXT_texture_env_combine || - ctx->Extensions.ARB_texture_env_combine) { + if (ctx->Extensions.ARB_texture_env_combine) { const GLenum operand = (GLenum) (GLint) *param; if (texUnit->Combine.OperandA[2] == operand) return; @@ -583,6 +629,17 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) return; } } + else if (ctx->Extensions.EXT_texture_env_combine) { + const GLenum operand = (GLenum) (GLint) *param; + if (texUnit->Combine.OperandA[2] == operand) + return; + /* operand must be GL_SRC_ALPHA which is the initial value - thus + don't need to actually compare the operand to the possible value */ + else { + TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", operand); + return; + } + } else { TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname); return; @@ -753,10 +810,20 @@ _mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param ) void GLAPIENTRY _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) { + GLuint maxUnit; + const struct gl_texture_unit *texUnit; GET_CURRENT_CONTEXT(ctx); - const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); + maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV) + ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxTextureImageUnits; + if (ctx->Texture.CurrentUnit >= maxUnit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnvfv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + if (target == GL_TEXTURE_ENV) { switch (pname) { case GL_TEXTURE_ENV_MODE: @@ -964,10 +1031,20 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) void GLAPIENTRY _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) { + GLuint maxUnit; + const struct gl_texture_unit *texUnit; GET_CURRENT_CONTEXT(ctx); - const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); + maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV) + ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxTextureImageUnits; + if (ctx->Texture.CurrentUnit >= maxUnit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnviv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + if (target == GL_TEXTURE_ENV) { switch (pname) { case GL_TEXTURE_ENV_MODE: @@ -1222,10 +1299,10 @@ _mesa_TexParameterf( GLenum target, GLenum pname, GLfloat param ) void GLAPIENTRY _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) { - GET_CURRENT_CONTEXT(ctx); - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - GLenum eparam = (GLenum) (GLint) params[0]; + const GLenum eparam = (GLenum) (GLint) params[0]; + struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; + GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE)) @@ -1235,6 +1312,12 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) *params, _mesa_lookup_enum_by_nr(eparam)); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureImageUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexParameterfv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; switch (target) { case GL_TEXTURE_1D: @@ -1388,7 +1471,9 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) return; } FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texObj->MaxAnisotropy = params[0]; + /* clamp to max, that's what NVIDIA does */ + texObj->MaxAnisotropy = MIN2(params[0], + ctx->Const.MaxTextureMaxAnisotropy); } else { _mesa_error(ctx, GL_INVALID_ENUM, @@ -1618,14 +1703,23 @@ void GLAPIENTRY _mesa_GetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params ) { - GET_CURRENT_CONTEXT(ctx); - const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + const struct gl_texture_unit *texUnit; + struct gl_texture_object *texObj; const struct gl_texture_image *img = NULL; GLuint dimensions; GLboolean isProxy; GLint maxLevels; + GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureImageUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetTexLevelParameteriv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + /* this will catch bad target values */ dimensions = tex_image_dimensions(ctx, target); /* 1, 2 or 3 */ if (dimensions == 0) { @@ -1633,32 +1727,10 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, return; } - switch (target) { - case GL_TEXTURE_1D: - case GL_PROXY_TEXTURE_1D: - case GL_TEXTURE_2D: - case GL_PROXY_TEXTURE_2D: - maxLevels = ctx->Const.MaxTextureLevels; - break; - case GL_TEXTURE_3D: - case GL_PROXY_TEXTURE_3D: - maxLevels = ctx->Const.Max3DTextureLevels; - break; - case GL_TEXTURE_CUBE_MAP_POSITIVE_X: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: - case GL_PROXY_TEXTURE_CUBE_MAP: - maxLevels = ctx->Const.MaxCubeTextureLevels; - break; - case GL_TEXTURE_RECTANGLE_NV: - case GL_PROXY_TEXTURE_RECTANGLE_NV: - maxLevels = 1; - break; - default: - _mesa_problem(ctx, "switch in _mesa_GetTexLevelParameter"); + maxLevels = _mesa_max_texture_levels(ctx, target); + if (maxLevels == 0) { + /* should not happen since was just checked above */ + _mesa_problem(ctx, "maxLevels=0 in _mesa_GetTexLevelParameter"); return; } @@ -1667,111 +1739,125 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, return; } - img = _mesa_select_tex_image(ctx, texUnit, target, level); + texObj = _mesa_select_tex_object(ctx, texUnit, target); + _mesa_lock_texture(ctx, texObj); + + img = _mesa_select_tex_image(ctx, texObj, target, level); if (!img || !img->TexFormat) { /* undefined texture image */ if (pname == GL_TEXTURE_COMPONENTS) *params = 1; else *params = 0; - return; + goto out; } - isProxy = (target == GL_PROXY_TEXTURE_1D) || - (target == GL_PROXY_TEXTURE_2D) || - (target == GL_PROXY_TEXTURE_3D) || - (target == GL_PROXY_TEXTURE_CUBE_MAP) || - (target == GL_PROXY_TEXTURE_RECTANGLE_NV); + isProxy = _mesa_is_proxy_texture(target); switch (pname) { case GL_TEXTURE_WIDTH: *params = img->Width; - return; + break; case GL_TEXTURE_HEIGHT: *params = img->Height; - return; + break; case GL_TEXTURE_DEPTH: *params = img->Depth; - return; + break; case GL_TEXTURE_INTERNAL_FORMAT: - *params = img->IntFormat; - return; + *params = img->InternalFormat; + break; case GL_TEXTURE_BORDER: *params = img->Border; - return; + break; case GL_TEXTURE_RED_SIZE: - if (img->Format == GL_RGB || img->Format == GL_RGBA) + if (img->_BaseFormat == GL_RGB || img->_BaseFormat == GL_RGBA) *params = img->TexFormat->RedBits; else *params = 0; - return; + break; case GL_TEXTURE_GREEN_SIZE: - if (img->Format == GL_RGB || img->Format == GL_RGBA) + if (img->_BaseFormat == GL_RGB || img->_BaseFormat == GL_RGBA) *params = img->TexFormat->GreenBits; else *params = 0; - return; + break; case GL_TEXTURE_BLUE_SIZE: - if (img->Format == GL_RGB || img->Format == GL_RGBA) + if (img->_BaseFormat == GL_RGB || img->_BaseFormat == GL_RGBA) *params = img->TexFormat->BlueBits; else *params = 0; - return; + break; case GL_TEXTURE_ALPHA_SIZE: - if (img->Format == GL_ALPHA || img->Format == GL_LUMINANCE_ALPHA || - img->Format == GL_RGBA) + if (img->_BaseFormat == GL_ALPHA || + img->_BaseFormat == GL_LUMINANCE_ALPHA || + img->_BaseFormat == GL_RGBA) *params = img->TexFormat->AlphaBits; else *params = 0; - return; + break; case GL_TEXTURE_INTENSITY_SIZE: - if (img->Format != GL_INTENSITY) + if (img->_BaseFormat != GL_INTENSITY) *params = 0; else if (img->TexFormat->IntensityBits > 0) *params = img->TexFormat->IntensityBits; else /* intensity probably stored as rgb texture */ *params = MIN2(img->TexFormat->RedBits, img->TexFormat->GreenBits); - return; + break; case GL_TEXTURE_LUMINANCE_SIZE: - if (img->Format != GL_LUMINANCE && - img->Format != GL_LUMINANCE_ALPHA) + if (img->_BaseFormat != GL_LUMINANCE && + img->_BaseFormat != GL_LUMINANCE_ALPHA) *params = 0; else if (img->TexFormat->LuminanceBits > 0) *params = img->TexFormat->LuminanceBits; else /* luminance probably stored as rgb texture */ *params = MIN2(img->TexFormat->RedBits, img->TexFormat->GreenBits); - return; + break; case GL_TEXTURE_INDEX_SIZE_EXT: - if (img->Format == GL_COLOR_INDEX) + if (img->_BaseFormat == GL_COLOR_INDEX) *params = img->TexFormat->IndexBits; else *params = 0; - return; - case GL_DEPTH_BITS: - /* XXX this isn't in the GL_SGIX_depth_texture spec - * but seems appropriate. - */ - if (ctx->Extensions.SGIX_depth_texture) + break; + case GL_TEXTURE_DEPTH_SIZE_ARB: + if (ctx->Extensions.SGIX_depth_texture || + ctx->Extensions.ARB_depth_texture) *params = img->TexFormat->DepthBits; else _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); - return; - - /* GL_ARB_texture_compression */ - case GL_TEXTURE_COMPRESSED_IMAGE_SIZE: - if (ctx->Extensions.ARB_texture_compression) { - if (img->IsCompressed && !isProxy) - *params = img->CompressedSize; - else - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGetTexLevelParameter[if]v(pname)"); + break; + case GL_TEXTURE_STENCIL_SIZE_EXT: + if (ctx->Extensions.EXT_packed_depth_stencil) { + *params = img->TexFormat->StencilBits; } else { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; + + /* GL_ARB_texture_compression */ + case GL_TEXTURE_COMPRESSED_IMAGE_SIZE: + if (ctx->Extensions.ARB_texture_compression) { + if (img->IsCompressed && !isProxy) { + /* Don't use ctx->Driver.CompressedTextureSize() since that + * may returned a padded hardware size. + */ + *params = _mesa_compressed_texture_size(ctx, img->Width, + img->Height, img->Depth, + img->TexFormat->MesaFormat); + } + else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetTexLevelParameter[if]v(pname)"); + } + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetTexLevelParameter[if]v(pname)"); + } + break; case GL_TEXTURE_COMPRESSED: if (ctx->Extensions.ARB_texture_compression) { *params = (GLint) img->IsCompressed; @@ -1780,7 +1866,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; /* GL_ARB_texture_float */ case GL_TEXTURE_RED_TYPE_ARB: @@ -1791,7 +1877,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; case GL_TEXTURE_GREEN_TYPE_ARB: if (ctx->Extensions.ARB_texture_float) { *params = img->TexFormat->GreenBits ? img->TexFormat->DataType : GL_NONE; @@ -1800,7 +1886,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; case GL_TEXTURE_BLUE_TYPE_ARB: if (ctx->Extensions.ARB_texture_float) { *params = img->TexFormat->BlueBits ? img->TexFormat->DataType : GL_NONE; @@ -1809,7 +1895,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; case GL_TEXTURE_ALPHA_TYPE_ARB: if (ctx->Extensions.ARB_texture_float) { *params = img->TexFormat->AlphaBits ? img->TexFormat->DataType : GL_NONE; @@ -1818,7 +1904,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; case GL_TEXTURE_LUMINANCE_TYPE_ARB: if (ctx->Extensions.ARB_texture_float) { *params = img->TexFormat->LuminanceBits ? img->TexFormat->DataType : GL_NONE; @@ -1827,7 +1913,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; case GL_TEXTURE_INTENSITY_TYPE_ARB: if (ctx->Extensions.ARB_texture_float) { *params = img->TexFormat->IntensityBits ? img->TexFormat->DataType : GL_NONE; @@ -1836,7 +1922,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; case GL_TEXTURE_DEPTH_TYPE_ARB: if (ctx->Extensions.ARB_texture_float) { *params = img->TexFormat->DepthBits ? img->TexFormat->DataType : GL_NONE; @@ -1845,11 +1931,15 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } - return; + break; + default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(pname)"); } + + out: + _mesa_unlock_texture(ctx, texObj); } @@ -1857,39 +1947,49 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, void GLAPIENTRY _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params ) { - GET_CURRENT_CONTEXT(ctx); - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + struct gl_texture_unit *texUnit; struct gl_texture_object *obj; + GLboolean error = GL_FALSE; + GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureImageUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetTexParameterfv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + obj = _mesa_select_tex_object(ctx, texUnit, target); if (!obj) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(target)"); return; } + _mesa_lock_texture(ctx, obj); switch (pname) { case GL_TEXTURE_MAG_FILTER: *params = ENUM_TO_FLOAT(obj->MagFilter); - return; + break; case GL_TEXTURE_MIN_FILTER: *params = ENUM_TO_FLOAT(obj->MinFilter); - return; + break; case GL_TEXTURE_WRAP_S: *params = ENUM_TO_FLOAT(obj->WrapS); - return; + break; case GL_TEXTURE_WRAP_T: *params = ENUM_TO_FLOAT(obj->WrapT); - return; + break; case GL_TEXTURE_WRAP_R: *params = ENUM_TO_FLOAT(obj->WrapR); - return; + break; case GL_TEXTURE_BORDER_COLOR: params[0] = CLAMP(obj->BorderColor[0], 0.0F, 1.0F); params[1] = CLAMP(obj->BorderColor[1], 0.0F, 1.0F); params[2] = CLAMP(obj->BorderColor[2], 0.0F, 1.0F); params[3] = CLAMP(obj->BorderColor[3], 0.0F, 1.0F); - return; + break; case GL_TEXTURE_RESIDENT: { GLboolean resident; @@ -1899,93 +1999,113 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params ) resident = GL_TRUE; *params = ENUM_TO_FLOAT(resident); } - return; + break; case GL_TEXTURE_PRIORITY: *params = obj->Priority; - return; + break; case GL_TEXTURE_MIN_LOD: *params = obj->MinLod; - return; + break; case GL_TEXTURE_MAX_LOD: *params = obj->MaxLod; - return; + break; case GL_TEXTURE_BASE_LEVEL: *params = (GLfloat) obj->BaseLevel; - return; + break; case GL_TEXTURE_MAX_LEVEL: *params = (GLfloat) obj->MaxLevel; - return; + break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (ctx->Extensions.EXT_texture_filter_anisotropic) { *params = obj->MaxAnisotropy; - return; } + else + error = 1; break; case GL_TEXTURE_COMPARE_SGIX: if (ctx->Extensions.SGIX_shadow) { *params = (GLfloat) obj->CompareFlag; - return; } + else + error = 1; break; case GL_TEXTURE_COMPARE_OPERATOR_SGIX: if (ctx->Extensions.SGIX_shadow) { *params = (GLfloat) obj->CompareOperator; - return; } + else + error = 1; break; case GL_SHADOW_AMBIENT_SGIX: /* aka GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ if (ctx->Extensions.SGIX_shadow_ambient) { *params = obj->ShadowAmbient; - return; } + else + error = 1; break; case GL_GENERATE_MIPMAP_SGIS: if (ctx->Extensions.SGIS_generate_mipmap) { *params = (GLfloat) obj->GenerateMipmap; - return; } + else + error = 1; break; case GL_TEXTURE_COMPARE_MODE_ARB: if (ctx->Extensions.ARB_shadow) { *params = (GLfloat) obj->CompareMode; - return; } + else + error = 1; break; case GL_TEXTURE_COMPARE_FUNC_ARB: if (ctx->Extensions.ARB_shadow) { *params = (GLfloat) obj->CompareFunc; - return; } + else + error = 1; break; case GL_DEPTH_TEXTURE_MODE_ARB: if (ctx->Extensions.ARB_depth_texture) { *params = (GLfloat) obj->DepthMode; - return; } + else + error = 1; break; case GL_TEXTURE_LOD_BIAS: if (ctx->Extensions.EXT_texture_lod_bias) { *params = obj->LodBias; - return; } + else + error = 1; break; default: - ; /* silence warnings */ + error = 1; + break; } - /* If we get here, pname was an unrecognized enum */ - _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)", - pname); + if (error) + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)", + pname); + + _mesa_unlock_texture(ctx, obj); } void GLAPIENTRY _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params ) { - GET_CURRENT_CONTEXT(ctx); - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + struct gl_texture_unit *texUnit; struct gl_texture_object *obj; + GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureImageUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetTexParameteriv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + obj = _mesa_select_tex_object(ctx, texUnit, target); if (!obj) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameteriv(target)"); @@ -2119,8 +2239,7 @@ void GLAPIENTRY _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) { GET_CURRENT_CONTEXT(ctx); - GLuint tUnit = ctx->Texture.CurrentUnit; - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit]; + struct gl_texture_unit *texUnit; ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE)) @@ -2130,11 +2249,18 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) *params, _mesa_lookup_enum_by_nr((GLenum) (GLint) *params)); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexGen(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + switch (coord) { case GL_S: if (pname==GL_TEXTURE_GEN_MODE) { GLenum mode = (GLenum) (GLint) *params; - GLuint bits; + GLbitfield bits; switch (mode) { case GL_OBJECT_LINEAR: bits = TEXGEN_OBJ_LINEAR; @@ -2165,16 +2291,12 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) if (TEST_EQ_4V(texUnit->ObjectPlaneS, params)) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->ObjectPlaneS[0] = params[0]; - texUnit->ObjectPlaneS[1] = params[1]; - texUnit->ObjectPlaneS[2] = params[2]; - texUnit->ObjectPlaneS[3] = params[3]; + COPY_4FV(texUnit->ObjectPlaneS, params); } else if (pname==GL_EYE_PLANE) { GLfloat tmp[4]; - /* Transform plane equation by the inverse modelview matrix */ - if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY_INVERSE) { + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); } _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); @@ -2191,7 +2313,7 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) case GL_T: if (pname==GL_TEXTURE_GEN_MODE) { GLenum mode = (GLenum) (GLint) *params; - GLuint bitt; + GLbitfield bitt; switch (mode) { case GL_OBJECT_LINEAR: bitt = TEXGEN_OBJ_LINEAR; @@ -2222,15 +2344,12 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) if (TEST_EQ_4V(texUnit->ObjectPlaneT, params)) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->ObjectPlaneT[0] = params[0]; - texUnit->ObjectPlaneT[1] = params[1]; - texUnit->ObjectPlaneT[2] = params[2]; - texUnit->ObjectPlaneT[3] = params[3]; + COPY_4FV(texUnit->ObjectPlaneT, params); } else if (pname==GL_EYE_PLANE) { GLfloat tmp[4]; /* Transform plane equation by the inverse modelview matrix */ - if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY_INVERSE) { + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); } _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); @@ -2247,7 +2366,7 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) case GL_R: if (pname==GL_TEXTURE_GEN_MODE) { GLenum mode = (GLenum) (GLint) *params; - GLuint bitr; + GLbitfield bitr; switch (mode) { case GL_OBJECT_LINEAR: bitr = TEXGEN_OBJ_LINEAR; @@ -2275,15 +2394,12 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) if (TEST_EQ_4V(texUnit->ObjectPlaneR, params)) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->ObjectPlaneR[0] = params[0]; - texUnit->ObjectPlaneR[1] = params[1]; - texUnit->ObjectPlaneR[2] = params[2]; - texUnit->ObjectPlaneR[3] = params[3]; + COPY_4FV(texUnit->ObjectPlaneR, params); } else if (pname==GL_EYE_PLANE) { GLfloat tmp[4]; /* Transform plane equation by the inverse modelview matrix */ - if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY_INVERSE) { + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); } _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); @@ -2300,7 +2416,7 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) case GL_Q: if (pname==GL_TEXTURE_GEN_MODE) { GLenum mode = (GLenum) (GLint) *params; - GLuint bitq; + GLbitfield bitq; switch (mode) { case GL_OBJECT_LINEAR: bitq = TEXGEN_OBJ_LINEAR; @@ -2322,15 +2438,12 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) if (TEST_EQ_4V(texUnit->ObjectPlaneQ, params)) return; FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->ObjectPlaneQ[0] = params[0]; - texUnit->ObjectPlaneQ[1] = params[1]; - texUnit->ObjectPlaneQ[2] = params[2]; - texUnit->ObjectPlaneQ[3] = params[3]; + COPY_4FV(texUnit->ObjectPlaneQ, params); } else if (pname==GL_EYE_PLANE) { GLfloat tmp[4]; /* Transform plane equation by the inverse modelview matrix */ - if (ctx->ModelviewMatrixStack.Top->flags & MAT_DIRTY_INVERSE) { + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); } _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); @@ -2414,11 +2527,17 @@ _mesa_TexGeni( GLenum coord, GLenum pname, GLint param ) void GLAPIENTRY _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params ) { + const struct gl_texture_unit *texUnit; GET_CURRENT_CONTEXT(ctx); - GLuint tUnit = ctx->Texture.CurrentUnit; - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexGendv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + switch (coord) { case GL_S: if (pname==GL_TEXTURE_GEN_MODE) { @@ -2491,11 +2610,17 @@ _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params ) void GLAPIENTRY _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) { + const struct gl_texture_unit *texUnit; GET_CURRENT_CONTEXT(ctx); - GLuint tUnit = ctx->Texture.CurrentUnit; - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexGenfv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + switch (coord) { case GL_S: if (pname==GL_TEXTURE_GEN_MODE) { @@ -2568,11 +2693,17 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) void GLAPIENTRY _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params ) { + const struct gl_texture_unit *texUnit; GET_CURRENT_CONTEXT(ctx); - GLuint tUnit = ctx->Texture.CurrentUnit; - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit]; ASSERT_OUTSIDE_BEGIN_END(ctx); + if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexGeniv(current unit)"); + return; + } + + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + switch (coord) { case GL_S: if (pname==GL_TEXTURE_GEN_MODE) { @@ -2665,21 +2796,22 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params ) } #endif + /* GL_ARB_multitexture */ void GLAPIENTRY -_mesa_ActiveTextureARB( GLenum target ) +_mesa_ActiveTextureARB(GLenum texture) { GET_CURRENT_CONTEXT(ctx); - const GLuint texUnit = target - GL_TEXTURE0; + const GLuint texUnit = texture - GL_TEXTURE0; ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) _mesa_debug(ctx, "glActiveTexture %s\n", - _mesa_lookup_enum_by_nr(target)); + _mesa_lookup_enum_by_nr(texture)); - /* Cater for texture unit 0 is first, therefore use >= */ + /* XXX error-check against max(coordunits, imageunits) */ if (texUnit >= ctx->Const.MaxTextureUnits) { - _mesa_error(ctx, GL_INVALID_ENUM, "glActiveTexture(target)"); + _mesa_error(ctx, GL_INVALID_ENUM, "glActiveTexture(texture)"); return; } @@ -2702,14 +2834,14 @@ _mesa_ActiveTextureARB( GLenum target ) /* GL_ARB_multitexture */ void GLAPIENTRY -_mesa_ClientActiveTextureARB( GLenum target ) +_mesa_ClientActiveTextureARB(GLenum texture) { GET_CURRENT_CONTEXT(ctx); - GLuint texUnit = target - GL_TEXTURE0; + GLuint texUnit = texture - GL_TEXTURE0; ASSERT_OUTSIDE_BEGIN_END(ctx); - if (texUnit > ctx->Const.MaxTextureUnits) { - _mesa_error(ctx, GL_INVALID_ENUM, "glClientActiveTexture(target)"); + if (texUnit >= ctx->Const.MaxTextureCoordUnits) { + _mesa_error(ctx, GL_INVALID_ENUM, "glClientActiveTexture(texture)"); return; } @@ -2719,138 +2851,6 @@ _mesa_ClientActiveTextureARB( GLenum target ) -/**********************************************************************/ -/* Pixel Texgen Extensions */ -/**********************************************************************/ - -void GLAPIENTRY -_mesa_PixelTexGenSGIX(GLenum mode) -{ - GLenum newRgbSource, newAlphaSource; - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); - - switch (mode) { - case GL_NONE: - newRgbSource = GL_PIXEL_GROUP_COLOR_SGIS; - newAlphaSource = GL_PIXEL_GROUP_COLOR_SGIS; - break; - case GL_ALPHA: - newRgbSource = GL_PIXEL_GROUP_COLOR_SGIS; - newAlphaSource = GL_CURRENT_RASTER_COLOR; - break; - case GL_RGB: - newRgbSource = GL_CURRENT_RASTER_COLOR; - newAlphaSource = GL_PIXEL_GROUP_COLOR_SGIS; - break; - case GL_RGBA: - newRgbSource = GL_CURRENT_RASTER_COLOR; - newAlphaSource = GL_CURRENT_RASTER_COLOR; - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glPixelTexGenSGIX(mode)"); - return; - } - - if (newRgbSource == ctx->Pixel.FragmentRgbSource && - newAlphaSource == ctx->Pixel.FragmentAlphaSource) - return; - - FLUSH_VERTICES(ctx, _NEW_PIXEL); - ctx->Pixel.FragmentRgbSource = newRgbSource; - ctx->Pixel.FragmentAlphaSource = newAlphaSource; -} - - -void GLAPIENTRY -_mesa_PixelTexGenParameterfSGIS(GLenum target, GLfloat value) -{ - _mesa_PixelTexGenParameteriSGIS(target, (GLint) value); -} - - -void GLAPIENTRY -_mesa_PixelTexGenParameterfvSGIS(GLenum target, const GLfloat *value) -{ - _mesa_PixelTexGenParameteriSGIS(target, (GLint) *value); -} - - -void GLAPIENTRY -_mesa_PixelTexGenParameteriSGIS(GLenum target, GLint value) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (value != GL_CURRENT_RASTER_COLOR && value != GL_PIXEL_GROUP_COLOR_SGIS) { - _mesa_error(ctx, GL_INVALID_ENUM, "glPixelTexGenParameterSGIS(value)"); - return; - } - - switch (target) { - case GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS: - if (ctx->Pixel.FragmentRgbSource == (GLenum) value) - return; - FLUSH_VERTICES(ctx, _NEW_PIXEL); - ctx->Pixel.FragmentRgbSource = (GLenum) value; - break; - case GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS: - if (ctx->Pixel.FragmentAlphaSource == (GLenum) value) - return; - FLUSH_VERTICES(ctx, _NEW_PIXEL); - ctx->Pixel.FragmentAlphaSource = (GLenum) value; - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glPixelTexGenParameterSGIS(target)"); - return; - } -} - - -void GLAPIENTRY -_mesa_PixelTexGenParameterivSGIS(GLenum target, const GLint *value) -{ - _mesa_PixelTexGenParameteriSGIS(target, *value); -} - - -void GLAPIENTRY -_mesa_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (target == GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS) { - *value = (GLfloat) ctx->Pixel.FragmentRgbSource; - } - else if (target == GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS) { - *value = (GLfloat) ctx->Pixel.FragmentAlphaSource; - } - else { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPixelTexGenParameterfvSGIS(target)"); - } -} - - -void GLAPIENTRY -_mesa_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (target == GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS) { - *value = (GLint) ctx->Pixel.FragmentRgbSource; - } - else if (target == GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS) { - *value = (GLint) ctx->Pixel.FragmentAlphaSource; - } - else { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPixelTexGenParameterivSGIS(target)"); - } -} - - - /**********************************************************************/ /***** State management *****/ /**********************************************************************/ @@ -2872,7 +2872,7 @@ update_texture_matrices( GLcontext *ctx ) ctx->Texture._TexMatEnabled = 0; for (i=0; i < ctx->Const.MaxTextureUnits; i++) { - if (ctx->TextureMatrixStack[i].Top->flags & MAT_DIRTY) { + if (_math_matrix_is_dirty(ctx->TextureMatrixStack[i].Top)) { _math_matrix_analyse( ctx->TextureMatrixStack[i].Top ); if (ctx->Texture.Unit[i]._ReallyEnabled && @@ -2886,6 +2886,25 @@ update_texture_matrices( GLcontext *ctx ) } +/** + * Helper function for determining which texture object (1D, 2D, cube, etc) + * should actually be used. + */ +static void +texture_override(GLcontext *ctx, + struct gl_texture_unit *texUnit, GLbitfield enableBits, + struct gl_texture_object *texObj, GLuint textureBit) +{ + if (!texUnit->_ReallyEnabled && (enableBits & textureBit)) { + if (!texObj->Complete) { + _mesa_test_texobj_completeness(ctx, texObj); + } + if (texObj->Complete) { + texUnit->_ReallyEnabled = textureBit; + texUnit->_Current = texObj; + } + } +} /** @@ -2901,6 +2920,11 @@ update_texture_state( GLcontext *ctx ) { GLuint unit; +#if FEATURE_ARB_fragment_shader + struct gl2_program_intf **prog = ctx->ShaderObjects.CurrentProgram; + GLbitfield progteximageusage[MAX_TEXTURE_IMAGE_UNITS]; +#endif + ctx->NewState |= _NEW_TEXTURE; /* TODO: only set this if there are * actual changes. */ @@ -2910,19 +2934,35 @@ update_texture_state( GLcontext *ctx ) ctx->Texture._TexMatEnabled = 0; ctx->Texture._TexGenEnabled = 0; - /* Update texture unit state. - * XXX this loop should probably be broken into separate loops for - * texture coord units and texture image units. +#if FEATURE_ARB_fragment_shader + /* + * Grab texture image usage state from shader program. It must be + * grabbed every time uniform sampler changes, so maybe there is a + * better place to perform these rather expensive computations. + */ + if (ctx->ShaderObjects._FragmentShaderPresent) { + (**prog).GetTextureImageUsage (prog, progteximageusage); + } +#endif /* FEATURE_ARB_fragment_shader */ + + /* + * Update texture unit state. */ for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) { struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; - GLuint enableBits; + GLbitfield enableBits; texUnit->_Current = NULL; texUnit->_ReallyEnabled = 0; texUnit->_GenFlags = 0; /* Get the bitmask of texture enables */ +#if FEATURE_ARB_fragment_shader + if (ctx->ShaderObjects._FragmentShaderPresent) { + enableBits = progteximageusage[unit]; + } + else +#endif if (ctx->FragmentProgram._Enabled) { enableBits = ctx->FragmentProgram.Current->TexturesUsed[unit]; } @@ -2936,60 +2976,16 @@ update_texture_state( GLcontext *ctx ) * complete. That's the one we'll use for texturing. If we're using * a fragment program we're guaranteed that bitcount(enabledBits) <= 1. */ - if (enableBits & TEXTURE_CUBE_BIT) { - struct gl_texture_object *texObj = texUnit->CurrentCubeMap; - if (!texObj->Complete) { - _mesa_test_texobj_completeness(ctx, texObj); - } - if (texObj->Complete) { - texUnit->_ReallyEnabled = TEXTURE_CUBE_BIT; - texUnit->_Current = texObj; - } - } - - if (!texUnit->_ReallyEnabled && (enableBits & TEXTURE_3D_BIT)) { - struct gl_texture_object *texObj = texUnit->Current3D; - if (!texObj->Complete) { - _mesa_test_texobj_completeness(ctx, texObj); - } - if (texObj->Complete) { - texUnit->_ReallyEnabled = TEXTURE_3D_BIT; - texUnit->_Current = texObj; - } - } - - if (!texUnit->_ReallyEnabled && (enableBits & TEXTURE_RECT_BIT)) { - struct gl_texture_object *texObj = texUnit->CurrentRect; - if (!texObj->Complete) { - _mesa_test_texobj_completeness(ctx, texObj); - } - if (texObj->Complete) { - texUnit->_ReallyEnabled = TEXTURE_RECT_BIT; - texUnit->_Current = texObj; - } - } - - if (!texUnit->_ReallyEnabled && (enableBits & TEXTURE_2D_BIT)) { - struct gl_texture_object *texObj = texUnit->Current2D; - if (!texObj->Complete) { - _mesa_test_texobj_completeness(ctx, texObj); - } - if (texObj->Complete) { - texUnit->_ReallyEnabled = TEXTURE_2D_BIT; - texUnit->_Current = texObj; - } - } - - if (!texUnit->_ReallyEnabled && (enableBits & TEXTURE_1D_BIT)) { - struct gl_texture_object *texObj = texUnit->Current1D; - if (!texObj->Complete) { - _mesa_test_texobj_completeness(ctx, texObj); - } - if (texObj->Complete) { - texUnit->_ReallyEnabled = TEXTURE_1D_BIT; - texUnit->_Current = texObj; - } - } + texture_override(ctx, texUnit, enableBits, + texUnit->CurrentCubeMap, TEXTURE_CUBE_BIT); + texture_override(ctx, texUnit, enableBits, + texUnit->Current3D, TEXTURE_3D_BIT); + texture_override(ctx, texUnit, enableBits, + texUnit->CurrentRect, TEXTURE_RECT_BIT); + texture_override(ctx, texUnit, enableBits, + texUnit->Current2D, TEXTURE_2D_BIT); + texture_override(ctx, texUnit, enableBits, + texUnit->Current1D, TEXTURE_1D_BIT); if (!texUnit->_ReallyEnabled) { continue; @@ -3002,12 +2998,14 @@ update_texture_state( GLcontext *ctx ) texUnit->_CurrentCombine = & texUnit->Combine; } else { - GLenum format = texUnit->_Current->Image[0][0]->Format; + const struct gl_texture_object *texObj = texUnit->_Current; + GLenum format = texObj->Image[0][texObj->BaseLevel]->_BaseFormat; if (format == GL_COLOR_INDEX) { format = GL_RGBA; /* a bit of a hack */ } - else if (format == GL_DEPTH_COMPONENT) { - format = texUnit->_Current->DepthMode; + else if (format == GL_DEPTH_COMPONENT + || format == GL_DEPTH_STENCIL_EXT) { + format = texObj->DepthMode; } calculate_derived_texenv(&texUnit->_EnvMode, texUnit->EnvMode, format); texUnit->_CurrentCombine = & texUnit->_EnvMode; @@ -3087,9 +3085,12 @@ update_texture_state( GLcontext *ctx ) /* Fragment programs may need texture coordinates but not the * corresponding texture images. */ - if (ctx->FragmentProgram._Enabled) { + if (ctx->ShaderObjects.CurrentProgram != NULL) { + ctx->Texture._EnabledCoordUnits |= (1 << ctx->Const.MaxTextureCoordUnits) - 1; + } + else if (ctx->FragmentProgram._Enabled) { ctx->Texture._EnabledCoordUnits |= - (ctx->FragmentProgram.Current->InputsRead >> FRAG_ATTRIB_TEX0); + (ctx->FragmentProgram.Current->Base.InputsRead >> FRAG_ATTRIB_TEX0); } } @@ -3103,6 +3104,7 @@ void _mesa_update_texture( GLcontext *ctx, GLuint new_state ) update_texture_state( ctx ); } + /**********************************************************************/ /***** Initialization *****/ /**********************************************************************/ @@ -3203,9 +3205,13 @@ init_texture_unit( GLcontext *ctx, GLuint unit ) } -GLboolean _mesa_init_texture( GLcontext * ctx ) +/** + * Initialize texture state for the given context. + */ +GLboolean +_mesa_init_texture(GLcontext *ctx) { - int i; + GLuint i; assert(MAX_TEXTURE_LEVELS >= MAX_3D_TEXTURE_LEVELS); assert(MAX_TEXTURE_LEVELS >= MAX_CUBE_TEXTURE_LEVELS); @@ -3225,6 +3231,8 @@ GLboolean _mesa_init_texture( GLcontext * ctx ) ctx->Texture.SharedPalette = GL_FALSE; _mesa_init_colortable(&ctx->Texture.Palette); + _mesa_TexEnvProgramCacheInit( ctx ); + /* Allocate proxy textures */ if (!alloc_proxy_textures( ctx )) return GL_FALSE; @@ -3232,9 +3240,14 @@ GLboolean _mesa_init_texture( GLcontext * ctx ) return GL_TRUE; } -void _mesa_free_texture_data( GLcontext *ctx ) + +/** + * Free dynamically-allocted texture data attached to the given context. + */ +void +_mesa_free_texture_data(GLcontext *ctx) { - int i; + GLuint i; /* Free proxy texture objects */ (ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy1D ); @@ -3245,4 +3258,6 @@ void _mesa_free_texture_data( GLcontext *ctx ) for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++) _mesa_free_colortable_data( &ctx->Texture.Unit[i].ColorTable ); + + _mesa_TexEnvProgramCacheDestroy( ctx ); } diff --git a/src/kits/opengl/mesa/main/texstate.h b/src/kits/opengl/mesa/main/texstate.h index 7cc3d2c19c..ca29c6a23f 100644 --- a/src/kits/opengl/mesa/main/texstate.h +++ b/src/kits/opengl/mesa/main/texstate.h @@ -5,9 +5,9 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.5 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -133,46 +133,6 @@ extern void GLAPIENTRY _mesa_ClientActiveTextureARB( GLenum target ); -/* - * Pixel Texture Extensions - */ - -extern void GLAPIENTRY -_mesa_PixelTexGenSGIX(GLenum mode); - -extern void GLAPIENTRY -_mesa_PixelTexGenParameterfSGIS(GLenum target, GLfloat value); - -#ifdef VMS -#define _mesa_PixelTexGenParameterfvSGIS _mesa_PixelTexGenParameterfv -#endif -extern void GLAPIENTRY -_mesa_PixelTexGenParameterfvSGIS(GLenum target, const GLfloat *value); - -extern void GLAPIENTRY -_mesa_PixelTexGenParameteriSGIS(GLenum target, GLint value); - -#ifdef VMS -#define _mesa_PixelTexGenParameterivSGIS _mesa_PixelTexGenParameteriv -#endif -extern void GLAPIENTRY -_mesa_PixelTexGenParameterivSGIS(GLenum target, const GLint *value); - -#ifdef VMS -#define _mesa_GetPixelTexGenParameterfvSGIS _mesa_GetPixelTexGenParameterfv -#endif -extern void GLAPIENTRY -_mesa_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value); - -#ifdef VMS -#define _mesa_GetPixelTexGenParameterivSGIS _mesa_GetPixelTexGenParameteriv -#endif -extern void GLAPIENTRY -_mesa_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value); - -/*@}*/ - - /** * \name Initialization, state maintenance */ diff --git a/src/kits/opengl/mesa/main/texstore.c b/src/kits/opengl/mesa/main/texstore.c index 7356910132..89563842c2 100644 --- a/src/kits/opengl/mesa/main/texstore.c +++ b/src/kits/opengl/mesa/main/texstore.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -27,7 +27,7 @@ * Brian Paul */ -/* +/** * The GL texture image functions in teximage.c basically just do * error checking and data structure allocation. They in turn call * device driver functions which actually copy/convert/store the user's @@ -58,83 +58,214 @@ #include "convolve.h" #include "image.h" #include "macros.h" +#include "mipmap.h" #include "imports.h" #include "texcompress.h" #include "texformat.h" #include "teximage.h" #include "texstore.h" +#include "enums.h" -static const GLint ZERO = 1000, ONE = 1001; +enum { + ZERO = 4, + ONE = 5 +}; + + +/** + * Return GL_TRUE if the given image format is one that be converted + * to another format by swizzling. + */ +static GLboolean +can_swizzle(GLenum logicalBaseFormat) +{ + switch (logicalBaseFormat) { + case GL_RGBA: + case GL_RGB: + case GL_LUMINANCE_ALPHA: + case GL_INTENSITY: + case GL_ALPHA: + case GL_LUMINANCE: + case GL_RED: + case GL_GREEN: + case GL_BLUE: + case GL_BGR: + case GL_BGRA: + case GL_ABGR_EXT: + return GL_TRUE; + default: + return GL_FALSE; + } +} + + + +enum { + IDX_LUMINANCE = 0, + IDX_ALPHA, + IDX_INTENSITY, + IDX_LUMINANCE_ALPHA, + IDX_RGB, + IDX_RGBA, + IDX_RED, + IDX_GREEN, + IDX_BLUE, + IDX_BGR, + IDX_BGRA, + IDX_ABGR, + MAX_IDX +}; + +#define MAP1(x) MAP4(x, ZERO, ZERO, ZERO) +#define MAP2(x,y) MAP4(x, y, ZERO, ZERO) +#define MAP3(x,y,z) MAP4(x, y, z, ZERO) +#define MAP4(x,y,z,w) { x, y, z, w, ZERO, ONE } + + +static const struct { + GLubyte format_idx; + GLubyte to_rgba[6]; + GLubyte from_rgba[6]; +} mappings[MAX_IDX] = +{ + { + IDX_LUMINANCE, + MAP4(0,0,0,ONE), + MAP1(0) + }, + + { + IDX_ALPHA, + MAP4(ZERO, ZERO, ZERO, 0), + MAP1(3) + }, + + { + IDX_INTENSITY, + MAP4(0, 0, 0, 0), + MAP1(0), + }, + + { + IDX_LUMINANCE_ALPHA, + MAP4(0,0,0,1), + MAP2(0,3) + }, + + { + IDX_RGB, + MAP4(0,1,2,ONE), + MAP3(0,1,2) + }, + + { + IDX_RGBA, + MAP4(0,1,2,3), + MAP4(0,1,2,3), + }, + + + { + IDX_RED, + MAP4(0, ZERO, ZERO, ONE), + MAP1(0), + }, + + { + IDX_GREEN, + MAP4(ZERO, 0, ZERO, ONE), + MAP1(1), + }, + + { + IDX_BLUE, + MAP4(ZERO, ZERO, 0, ONE), + MAP1(2), + }, + + { + IDX_BGR, + MAP4(2,1,0,ONE), + MAP3(2,1,0) + }, + + { + IDX_BGRA, + MAP4(2,1,0,3), + MAP4(2,1,0,3) + }, + + { + IDX_ABGR, + MAP4(3,2,1,0), + MAP4(3,2,1,0) + }, +}; + + + +/** + * Convert a GL image format enum to an IDX_* value (see above). + */ +static int +get_map_idx(GLenum value) +{ + switch (value) { + case GL_LUMINANCE: return IDX_LUMINANCE; + case GL_ALPHA: return IDX_ALPHA; + case GL_INTENSITY: return IDX_INTENSITY; + case GL_LUMINANCE_ALPHA: return IDX_LUMINANCE_ALPHA; + case GL_RGB: return IDX_RGB; + case GL_RGBA: return IDX_RGBA; + case GL_RED: return IDX_RED; + case GL_GREEN: return IDX_GREEN; + case GL_BLUE: return IDX_BLUE; + case GL_BGR: return IDX_BGR; + case GL_BGRA: return IDX_BGRA; + case GL_ABGR_EXT: return IDX_ABGR; + default: + _mesa_problem(NULL, "Unexpected inFormat"); + return 0; + } +} + /** * When promoting texture formats (see below) we need to compute the * mapping of dest components back to source components. * This function does that. - * \param logicalBaseFormat the logical format of the texture - * \param textureBaseFormat the final texture format - * \return map[4] the four mapping values + * \param inFormat the incoming format of the texture + * \param outFormat the final texture format + * \return map[6] a full 6-component map */ static void -compute_component_mapping(GLenum logicalBaseFormat, GLenum textureBaseFormat, - GLint map[4]) +compute_component_mapping(GLenum inFormat, GLenum outFormat, + GLubyte *map) { - /* compute mapping from dest components back to src components */ - switch (textureBaseFormat) { - case GL_RGB: - case GL_RGBA: - switch (logicalBaseFormat) { - case GL_LUMINANCE: - map[0] = map[1] = map[2] = 0; - if (textureBaseFormat == GL_RGBA) - map[3] = ONE; - break; - case GL_ALPHA: - ASSERT(textureBaseFormat == GL_RGBA); - map[0] = map[1] = map[2] = ZERO; - map[3] = 0; - break; - case GL_INTENSITY: - map[0] = map[1] = map[2] = 0; - if (textureBaseFormat == GL_RGBA) - map[3] = 0; - break; - case GL_LUMINANCE_ALPHA: - ASSERT(textureBaseFormat == GL_RGBA); - map[0] = map[1] = map[2] = 0; - map[3] = 1; - break; - case GL_RGB: - ASSERT(textureBaseFormat == GL_RGBA); - map[0] = 0; - map[1] = 1; - map[2] = 2; - map[3] = ONE; - break; - default: - _mesa_problem(NULL, "Unexpected logicalBaseFormat"); - map[0] = map[1] = map[2] = map[3] = 0; - } - break; - case GL_LUMINANCE_ALPHA: - switch (logicalBaseFormat) { - case GL_LUMINANCE: - map[0] = 0; - map[1] = ONE; - break; - case GL_ALPHA: - map[0] = ZERO; - map[1] = 0; - break; - case GL_INTENSITY: - map[0] = 0; - map[1] = 0; - break; - default: - _mesa_problem(NULL, "Unexpected logicalBaseFormat"); - map[0] = map[1] = 0; - } - } + const int inFmt = get_map_idx(inFormat); + const int outFmt = get_map_idx(outFormat); + const GLubyte *in2rgba = mappings[inFmt].to_rgba; + const GLubyte *rgba2out = mappings[outFmt].from_rgba; + int i; + + for (i = 0; i < 4; i++) + map[i] = in2rgba[rgba2out[i]]; + + map[ZERO] = ZERO; + map[ONE] = ONE; + +/* + _mesa_printf("from %x/%s to %x/%s map %d %d %d %d %d %d\n", + inFormat, _mesa_lookup_enum_by_nr(inFormat), + outFormat, _mesa_lookup_enum_by_nr(outFormat), + map[0], + map[1], + map[2], + map[3], + map[4], + map[5]); +*/ } @@ -267,7 +398,7 @@ make_temp_float_image(GLcontext *ctx, GLuint dims, GLfloat *dst = tempImage + img * (convWidth * convHeight * 4); for (row = 0; row < convHeight; row++) { _mesa_pack_rgba_span_float(ctx, convWidth, - (const GLfloat (*)[4]) src, + (GLfloat (*)[4]) src, logicalBaseFormat, GL_FLOAT, dst, &ctx->DefaultPacking, postConvTransferOps); @@ -319,7 +450,7 @@ make_temp_float_image(GLcontext *ctx, GLuint dims, GLint logComponents = _mesa_components_in_format(logicalBaseFormat); GLfloat *newImage; GLint i, n; - GLint map[4]; + GLubyte map[6]; /* we only promote up to RGB, RGBA and LUMINANCE_ALPHA formats for now */ ASSERT(textureBaseFormat == GL_RGB || textureBaseFormat == GL_RGBA || @@ -473,7 +604,7 @@ _mesa_make_temp_chan_image(GLcontext *ctx, GLuint dims, GLint logComponents = _mesa_components_in_format(logicalBaseFormat); GLchan *newImage; GLint i, n; - GLint map[4]; + GLubyte map[6]; /* we only promote up to RGB, RGBA and LUMINANCE_ALPHA formats for now */ ASSERT(textureBaseFormat == GL_RGB || textureBaseFormat == GL_RGBA || @@ -485,7 +616,7 @@ _mesa_make_temp_chan_image(GLcontext *ctx, GLuint dims, ASSERT(texComponents >= logComponents); newImage = (GLchan *) _mesa_malloc(srcWidth * srcHeight * srcDepth - * texComponents * sizeof(GLchan)); + * texComponents * sizeof(GLchan)); if (!newImage) { _mesa_free(tempImage); return NULL; @@ -515,6 +646,195 @@ _mesa_make_temp_chan_image(GLcontext *ctx, GLuint dims, } +/** + * Copy GLubyte pixels from to with swizzling. + * \param dst destination pixels + * \param dstComponents number of color components in destination pixels + * \param src source pixels + * \param srcComponents number of color components in source pixels + * \param map the swizzle mapping. map[X] says where to find the X component + * in the source image's pixels. For example, if the source image + * is GL_BGRA and X = red, map[0] yields 2. + * \param count number of pixels to copy/swizzle. + */ +static void +swizzle_copy(GLubyte *dst, GLuint dstComponents, const GLubyte *src, + GLuint srcComponents, const GLubyte *map, GLuint count) +{ + GLubyte tmp[6]; + GLuint i; + + tmp[ZERO] = 0x0; + tmp[ONE] = 0xff; + + switch (dstComponents) { + case 4: + for (i = 0; i < count; i++) { + COPY_4UBV(tmp, src); + src += srcComponents; + dst[0] = tmp[map[0]]; + dst[1] = tmp[map[1]]; + dst[2] = tmp[map[2]]; + dst[3] = tmp[map[3]]; + dst += 4; + } + break; + case 3: + for (i = 0; i < count; i++) { + COPY_4UBV(tmp, src); + src += srcComponents; + dst[0] = tmp[map[0]]; + dst[1] = tmp[map[1]]; + dst[2] = tmp[map[2]]; + dst += 3; + } + break; + case 2: + for (i = 0; i < count; i++) { + COPY_4UBV(tmp, src); + src += srcComponents; + dst[0] = tmp[map[0]]; + dst[1] = tmp[map[1]]; + dst += 2; + } + break; + case 1: + /* XXX investigate valgrind invalid read when running demos/texenv.c */ + for (i = 0; i < count; i++) { + COPY_4UBV(tmp, src); + src += srcComponents; + dst[0] = tmp[map[0]]; + dst += 1; + } + break; + } +} + + +static const GLubyte map_identity[6] = { 0, 1, 2, 3, ZERO, ONE }; +static const GLubyte map_3210[6] = { 3, 2, 1, 0, ZERO, ONE }; + +/* Deal with the _REV input types: + */ +static const GLubyte * +type_mapping( GLenum srcType ) +{ + switch (srcType) { + case GL_UNSIGNED_BYTE: + return map_identity; + case GL_UNSIGNED_INT_8_8_8_8: + return _mesa_little_endian() ? map_3210 : map_identity; + case GL_UNSIGNED_INT_8_8_8_8_REV: + return _mesa_little_endian() ? map_identity : map_3210; + default: + return NULL; + } +} + +/* Mapping required if input type is + */ +static const GLubyte * +byteswap_mapping( GLboolean swapBytes, + GLenum srcType ) +{ + if (!swapBytes) + return map_identity; + + switch (srcType) { + case GL_UNSIGNED_BYTE: + return map_identity; + case GL_UNSIGNED_INT_8_8_8_8: + case GL_UNSIGNED_INT_8_8_8_8_REV: + return map_3210; + default: + return NULL; + } +} + + + +/** + * Transfer a GLubyte texture image with component swizzling. + */ +static void +_mesa_swizzle_ubyte_image(GLcontext *ctx, + GLuint dimensions, + GLenum srcFormat, + GLenum srcType, + + GLenum baseInternalFormat, + + const GLubyte *rgba2dst, + GLuint dstComponents, + + GLvoid *dstAddr, + GLint dstXoffset, GLint dstYoffset, GLint dstZoffset, + GLint dstRowStride, + const GLuint *dstImageOffsets, + + GLint srcWidth, GLint srcHeight, GLint srcDepth, + const GLvoid *srcAddr, + const struct gl_pixelstore_attrib *srcPacking ) +{ + GLint srcComponents = _mesa_components_in_format(srcFormat); + const GLubyte *srctype2ubyte, *swap; + GLubyte map[4], src2base[6], base2rgba[6]; + GLint i; + const GLint srcRowStride = + _mesa_image_row_stride(srcPacking, srcWidth, + srcFormat, GL_UNSIGNED_BYTE); + const GLint srcImageStride + = _mesa_image_image_stride(srcPacking, srcWidth, srcHeight, srcFormat, + GL_UNSIGNED_BYTE); + const GLubyte *srcImage + = (const GLubyte *) _mesa_image_address(dimensions, srcPacking, srcAddr, + srcWidth, srcHeight, srcFormat, + GL_UNSIGNED_BYTE, 0, 0, 0); + + (void) ctx; + + /* Translate from src->baseInternal->GL_RGBA->dst. This will + * correctly deal with RGBA->RGB->RGBA conversions where the final + * A value must be 0xff regardless of the incoming alpha values. + */ + compute_component_mapping(srcFormat, baseInternalFormat, src2base); + compute_component_mapping(baseInternalFormat, GL_RGBA, base2rgba); + swap = byteswap_mapping(srcPacking->SwapBytes, srcType); + srctype2ubyte = type_mapping(srcType); + + + for (i = 0; i < 4; i++) + map[i] = srctype2ubyte[swap[src2base[base2rgba[rgba2dst[i]]]]]; + +/* _mesa_printf("map %d %d %d %d\n", map[0], map[1], map[2], map[3]); */ + + if (srcRowStride == srcWidth * srcComponents && + dimensions < 3) { + /* 1 and 2D images only */ + GLubyte *dstImage = (GLubyte *) dstAddr + + dstYoffset * dstRowStride + + dstXoffset * dstComponents; + swizzle_copy(dstImage, dstComponents, srcImage, srcComponents, map, + srcWidth * srcHeight); + } + else { + GLint img, row; + for (img = 0; img < srcDepth; img++) { + const GLubyte *srcRow = srcImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstComponents + + dstYoffset * dstRowStride + + dstXoffset * dstComponents; + for (row = 0; row < srcHeight; row++) { + swizzle_copy(dstRow, dstComponents, srcRow, srcComponents, map, srcWidth); + dstRow += dstRowStride; + srcRow += srcRowStride; + } + srcImage += srcImageStride; + } + } +} + /** * Teximage storage routine for when a simple memcpy will do. @@ -522,11 +842,13 @@ _mesa_make_temp_chan_image(GLcontext *ctx, GLuint dims, * 1D, 2D and 3D images supported. */ static void -memcpy_texture(GLuint dimensions, +memcpy_texture(GLcontext *ctx, + GLuint dimensions, const struct gl_texture_format *dstFormat, GLvoid *dstAddr, GLint dstXoffset, GLint dstYoffset, GLint dstZoffset, - GLint dstRowStride, GLint dstImageStride, + GLint dstRowStride, + const GLuint *dstImageOffsets, GLint srcWidth, GLint srcHeight, GLint srcDepth, GLenum srcFormat, GLenum srcType, const GLvoid *srcAddr, @@ -539,6 +861,9 @@ memcpy_texture(GLuint dimensions, const GLubyte *srcImage = (const GLubyte *) _mesa_image_address(dimensions, srcPacking, srcAddr, srcWidth, srcHeight, srcFormat, srcType, 0, 0, 0); const GLint bytesPerRow = srcWidth * dstFormat->TexelBytes; + +#if 0 + /* XXX update/re-enable for dstImageOffsets array */ const GLint bytesPerImage = srcHeight * bytesPerRow; const GLint bytesPerTexture = srcDepth * bytesPerImage; GLubyte *dstImage = (GLubyte *) dstAddr @@ -552,15 +877,16 @@ memcpy_texture(GLuint dimensions, dstImageStride == bytesPerImage) || (srcDepth == 1))) { /* one big memcpy */ - _mesa_memcpy(dstImage, srcImage, bytesPerTexture); + ctx->Driver.TextureMemCpy(dstImage, srcImage, bytesPerTexture); } - else { + else + { GLint img, row; for (img = 0; img < srcDepth; img++) { const GLubyte *srcRow = srcImage; GLubyte *dstRow = dstImage; for (row = 0; row < srcHeight; row++) { - _mesa_memcpy(dstRow, srcRow, bytesPerRow); + ctx->Driver.TextureMemCpy(dstRow, srcRow, bytesPerRow); dstRow += dstRowStride; srcRow += srcRowStride; } @@ -568,6 +894,22 @@ memcpy_texture(GLuint dimensions, dstImage += dstImageStride; } } +#endif + + GLint img, row; + for (img = 0; img < srcDepth; img++) { + const GLubyte *srcRow = srcImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; + for (row = 0; row < srcHeight; row++) { + ctx->Driver.TextureMemCpy(dstRow, srcRow, bytesPerRow); + dstRow += dstRowStride; + srcRow += srcRowStride; + } + srcImage += srcImageStride; + } } @@ -581,30 +923,9 @@ memcpy_texture(GLuint dimensions, * _mesa_texformat_luminance_alpha * _mesa_texformat_intensity * - * \param dims either 1 or 2 or 3 - * \param baseInternalFormat user-specified base internal format - * \param dstFormat destination Mesa texture format - * \param dstAddr destination image address - * \param dstX/Y/Zoffset destination x/y/z offset (ala TexSubImage), in texels - * \param dstRowStride destination image row stride, in bytes - * \param dstImageStride destination image layer stride, in bytes - * \param srcWidth/Height/Depth source image size, in pixels - * \param srcFormat incoming image format - * \param srcType incoming image data type - * \param srcAddr source image address - * \param srcPacking source image packing parameters */ GLboolean -_mesa_texstore_rgba(GLcontext *ctx, GLuint dims, - GLenum baseInternalFormat, - const struct gl_texture_format *dstFormat, - GLvoid *dstAddr, - GLint dstXoffset, GLint dstYoffset, GLint dstZoffset, - GLint dstRowStride, GLint dstImageStride, - GLint srcWidth, GLint srcHeight, GLint srcDepth, - GLenum srcFormat, GLenum srcType, - const GLvoid *srcAddr, - const struct gl_pixelstore_attrib *srcPacking) +_mesa_texstore_rgba(TEXSTORE_PARAMS) { const GLint components = _mesa_components_in_format(baseInternalFormat); @@ -627,9 +948,10 @@ _mesa_texstore_rgba(GLcontext *ctx, GLuint dims, baseInternalFormat == srcFormat && srcType == CHAN_TYPE) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -639,12 +961,14 @@ _mesa_texstore_rgba(GLcontext *ctx, GLuint dims, srcFormat == GL_RGBA && srcType == CHAN_TYPE) { /* extract RGB from RGBA */ - int img, row, col; - GLchan *dstImage = (GLchan *) (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; + GLint img, row, col; for (img = 0; img < srcDepth; img++) { + GLchan *dstImage = (GLchan *) + ((GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes); + const GLint srcRowStride = _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType); GLchan *srcRow = (GLchan *) _mesa_image_address(dims, srcPacking, @@ -656,12 +980,63 @@ _mesa_texstore_rgba(GLcontext *ctx, GLuint dims, dstRow[col * 3 + GCOMP] = srcRow[col * 4 + GCOMP]; dstRow[col * 3 + BCOMP] = srcRow[col * 4 + BCOMP]; } - dstRow += dstRowStride; + dstRow += dstRowStride / sizeof(GLchan); srcRow = (GLchan *) ((GLubyte *) srcRow + srcRowStride); } - dstImage += dstImageStride; } } + else if (!ctx->_ImageTransferState && + CHAN_TYPE == GL_UNSIGNED_BYTE && + (srcType == GL_UNSIGNED_BYTE || + srcType == GL_UNSIGNED_INT_8_8_8_8 || + srcType == GL_UNSIGNED_INT_8_8_8_8_REV) && + can_swizzle(baseInternalFormat) && + can_swizzle(srcFormat)) { + + const GLubyte *dstmap; + GLuint components; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + if (dstFormat == &_mesa_texformat_rgba) { + dstmap = mappings[IDX_RGBA].from_rgba; + components = 4; + } + else if (dstFormat == &_mesa_texformat_rgb) { + dstmap = mappings[IDX_RGB].from_rgba; + components = 3; + } + else if (dstFormat == &_mesa_texformat_alpha) { + dstmap = mappings[IDX_ALPHA].from_rgba; + components = 1; + } + else if (dstFormat == &_mesa_texformat_luminance) { + dstmap = mappings[IDX_LUMINANCE].from_rgba; + components = 1; + } + else if (dstFormat == &_mesa_texformat_luminance_alpha) { + dstmap = mappings[IDX_LUMINANCE_ALPHA].from_rgba; + components = 2; + } + else if (dstFormat == &_mesa_texformat_intensity) { + dstmap = mappings[IDX_INTENSITY].from_rgba; + components = 1; + } + else { + _mesa_problem(ctx, "Unexpected dstFormat in _mesa_texstore_rgba"); + return GL_FALSE; + } + + _mesa_swizzle_ubyte_image(ctx, dims, + srcFormat, + srcType, + baseInternalFormat, + dstmap, components, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } else { /* general path */ const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims, @@ -672,23 +1047,21 @@ _mesa_texstore_rgba(GLcontext *ctx, GLuint dims, srcPacking); const GLchan *src = tempImage; GLint bytesPerRow; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); bytesPerRow = srcWidth * components * sizeof(GLchan); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { _mesa_memcpy(dstRow, src, bytesPerRow); dstRow += dstRowStride; src += srcWidth * components; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); @@ -698,58 +1071,61 @@ _mesa_texstore_rgba(GLcontext *ctx, GLuint dims, /** - * Store a floating point depth component texture image. + * Store a 32-bit integer depth component texture image. */ GLboolean -_mesa_texstore_depth_component_float32(STORE_PARAMS) +_mesa_texstore_z32(TEXSTORE_PARAMS) { + const GLfloat depthScale = (GLfloat) 0xffffffff; (void) dims; - ASSERT(dstFormat == &_mesa_texformat_depth_component_float32); - ASSERT(dstFormat->TexelBytes == sizeof(GLfloat)); + ASSERT(dstFormat == &_mesa_texformat_z32); + ASSERT(dstFormat->TexelBytes == sizeof(GLuint)); if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && baseInternalFormat == GL_DEPTH_COMPONENT && srcFormat == GL_DEPTH_COMPONENT && - srcType == GL_FLOAT) { + srcType == GL_UNSIGNED_INT) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } else { /* general path */ - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row; for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { const GLvoid *src = _mesa_image_address(dims, srcPacking, srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, row, 0); - _mesa_unpack_depth_span(ctx, srcWidth, (GLfloat *) dstRow, - srcType, src, srcPacking); + _mesa_unpack_depth_span(ctx, srcWidth, + GL_UNSIGNED_INT, (GLuint *) dstRow, + depthScale, srcType, src, srcPacking); dstRow += dstRowStride; } - dstImage += dstImageStride; } } return GL_TRUE; } +#define STRIDE_3D 0 /** * Store a 16-bit integer depth component texture image. */ GLboolean -_mesa_texstore_depth_component16(STORE_PARAMS) +_mesa_texstore_z16(TEXSTORE_PARAMS) { + const GLfloat depthScale = 65535.0f; (void) dims; - ASSERT(dstFormat == &_mesa_texformat_depth_component16); + ASSERT(dstFormat == &_mesa_texformat_z16); ASSERT(dstFormat->TexelBytes == sizeof(GLushort)); if (!ctx->_ImageTransferState && @@ -758,34 +1134,30 @@ _mesa_texstore_depth_component16(STORE_PARAMS) srcFormat == GL_DEPTH_COMPONENT && srcType == GL_UNSIGNED_SHORT) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } else { /* general path */ - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; - GLint img, row, col; + GLint img, row; for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { - GLfloat depthTemp[MAX_WIDTH]; const GLvoid *src = _mesa_image_address(dims, srcPacking, srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, row, 0); GLushort *dst16 = (GLushort *) dstRow; - _mesa_unpack_depth_span(ctx, srcWidth, depthTemp, + _mesa_unpack_depth_span(ctx, srcWidth, + GL_UNSIGNED_SHORT, dst16, depthScale, srcType, src, srcPacking); - for (col = 0; col < srcWidth; col++) { - dst16[col] = (GLushort) (depthTemp[col] * 65535.0F); - } dstRow += dstRowStride; } - dstImage += dstImageStride; } } return GL_TRUE; @@ -796,7 +1168,7 @@ _mesa_texstore_depth_component16(STORE_PARAMS) * Store an rgb565 or rgb565_rev texture image. */ GLboolean -_mesa_texstore_rgb565(STORE_PARAMS) +_mesa_texstore_rgb565(TEXSTORE_PARAMS) { ASSERT(dstFormat == &_mesa_texformat_rgb565 || dstFormat == &_mesa_texformat_rgb565_rev); @@ -809,9 +1181,10 @@ _mesa_texstore_rgb565(STORE_PARAMS) srcFormat == GL_RGB && srcType == GL_UNSIGNED_SHORT_5_6_5) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -828,7 +1201,6 @@ _mesa_texstore_rgb565(STORE_PARAMS) _mesa_image_address(dims, srcPacking, srcAddr, srcWidth, srcHeight, srcFormat, srcType, 0, 0, 0); GLubyte *dst = (GLubyte *) dstAddr - + dstZoffset * dstImageStride + dstYoffset * dstRowStride + dstXoffset * dstFormat->TexelBytes; GLint row, col; @@ -861,16 +1233,15 @@ _mesa_texstore_rgb565(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { GLushort *dstUS = (GLushort *) dstRow; /* check for byteswapped format */ @@ -892,7 +1263,6 @@ _mesa_texstore_rgb565(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -900,9 +1270,14 @@ _mesa_texstore_rgb565(STORE_PARAMS) } +/** + * Store a texture in MESA_FORMAT_RGBA8888 or MESA_FORMAT_RGBA8888_REV. + */ GLboolean -_mesa_texstore_rgba8888(STORE_PARAMS) +_mesa_texstore_rgba8888(TEXSTORE_PARAMS) { + const GLboolean littleEndian = _mesa_little_endian(); + ASSERT(dstFormat == &_mesa_texformat_rgba8888 || dstFormat == &_mesa_texformat_rgba8888_rev); ASSERT(dstFormat->TexelBytes == 4); @@ -912,14 +1287,68 @@ _mesa_texstore_rgba8888(STORE_PARAMS) dstFormat == &_mesa_texformat_rgba8888 && baseInternalFormat == GL_RGBA && ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8) || - (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8_REV))) { - /* simple memcpy path */ - memcpy_texture(dims, + (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && !littleEndian) || + (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8_REV) || + (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_BYTE && littleEndian))) { + /* simple memcpy path */ + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } + else if (!ctx->_ImageTransferState && + !srcPacking->SwapBytes && + dstFormat == &_mesa_texformat_rgba8888_rev && + baseInternalFormat == GL_RGBA && + ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8_REV) || + (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && littleEndian) || + (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8) || + (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_BYTE && !littleEndian))) { + /* simple memcpy path */ + memcpy_texture(ctx, dims, + dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, + dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcFormat, srcType, + srcAddr, srcPacking); + } + else if (!ctx->_ImageTransferState && + (srcType == GL_UNSIGNED_BYTE || + srcType == GL_UNSIGNED_INT_8_8_8_8 || + srcType == GL_UNSIGNED_INT_8_8_8_8_REV) && + can_swizzle(baseInternalFormat) && + can_swizzle(srcFormat)) { + + GLubyte dstmap[4]; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + if ((littleEndian && dstFormat == &_mesa_texformat_rgba8888) || + (!littleEndian && dstFormat == &_mesa_texformat_rgba8888_rev)) { + dstmap[3] = 0; + dstmap[2] = 1; + dstmap[1] = 2; + dstmap[0] = 3; + } + else { + dstmap[3] = 3; + dstmap[2] = 2; + dstmap[1] = 1; + dstmap[0] = 0; + } + + _mesa_swizzle_ubyte_image(ctx, dims, + srcFormat, + srcType, + baseInternalFormat, + dstmap, 4, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } else { /* general path */ const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims, @@ -929,16 +1358,15 @@ _mesa_texstore_rgba8888(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { GLuint *dstUI = (GLuint *) dstRow; if (dstFormat == &_mesa_texformat_rgba8888) { @@ -961,7 +1389,6 @@ _mesa_texstore_rgba8888(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -970,10 +1397,9 @@ _mesa_texstore_rgba8888(STORE_PARAMS) GLboolean -_mesa_texstore_argb8888(STORE_PARAMS) +_mesa_texstore_argb8888(TEXSTORE_PARAMS) { - const GLuint ui = 1; - const GLubyte littleEndian = *((const GLubyte *) &ui); + const GLboolean littleEndian = _mesa_little_endian(); ASSERT(dstFormat == &_mesa_texformat_argb8888 || dstFormat == &_mesa_texformat_argb8888_rev); @@ -987,9 +1413,10 @@ _mesa_texstore_argb8888(STORE_PARAMS) ((srcType == GL_UNSIGNED_BYTE && littleEndian) || srcType == GL_UNSIGNED_INT_8_8_8_8_REV)) { /* simple memcpy path (little endian) */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1001,12 +1428,146 @@ _mesa_texstore_argb8888(STORE_PARAMS) ((srcType == GL_UNSIGNED_BYTE && !littleEndian) || srcType == GL_UNSIGNED_INT_8_8_8_8)) { /* simple memcpy path (big endian) */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } + else if (!ctx->_ImageTransferState && + !srcPacking->SwapBytes && + dstFormat == &_mesa_texformat_argb8888 && + srcFormat == GL_RGB && + (baseInternalFormat == GL_RGBA || + baseInternalFormat == GL_RGB) && + srcType == GL_UNSIGNED_BYTE) { + + int img, row, col; + for (img = 0; img < srcDepth; img++) { + const GLint srcRowStride = _mesa_image_row_stride(srcPacking, + srcWidth, srcFormat, srcType); + GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking, + srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0); + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; + for (row = 0; row < srcHeight; row++) { + for (col = 0; col < srcWidth; col++) { + dstRow[col * 4 + 0] = srcRow[col * 3 + BCOMP]; + dstRow[col * 4 + 1] = srcRow[col * 3 + GCOMP]; + dstRow[col * 4 + 2] = srcRow[col * 3 + RCOMP]; + dstRow[col * 4 + 3] = 0xff; + } + dstRow += dstRowStride; + srcRow += srcRowStride; + } + } + } + else if (!ctx->_ImageTransferState && + !srcPacking->SwapBytes && + dstFormat == &_mesa_texformat_argb8888 && + srcFormat == GL_RGBA && + baseInternalFormat == GL_RGBA && + (srcType == GL_UNSIGNED_BYTE && littleEndian)) { + GLint img, row, col; + /* For some reason, streaming copies to write-combined regions + * are extremely sensitive to the characteristics of how the + * source data is retrieved. By reordering the source reads to + * be in-order, the speed of this operation increases by half. + * Strangely the same isn't required for the RGB path, above. + */ + for (img = 0; img < srcDepth; img++) { + const GLint srcRowStride = _mesa_image_row_stride(srcPacking, + srcWidth, srcFormat, srcType); + GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking, + srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0); + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; + + for (row = 0; row < srcHeight; row++) { + for (col = 0; col < srcWidth; col++) { + *(GLuint *)(dstRow + col * 4) = (srcRow[col * 4 + RCOMP] << 16 | + srcRow[col * 4 + GCOMP] << 8 | + srcRow[col * 4 + BCOMP] << 0 | + srcRow[col * 4 + ACOMP] << 24); + } + dstRow += dstRowStride; + srcRow += srcRowStride; + } + } + } + else if (!ctx->_ImageTransferState && + !srcPacking->SwapBytes && + dstFormat == &_mesa_texformat_argb8888 && + srcFormat == GL_RGBA && + baseInternalFormat == GL_RGBA && + srcType == GL_UNSIGNED_BYTE) { + + GLint img, row, col; + for (img = 0; img < srcDepth; img++) { + const GLint srcRowStride = _mesa_image_row_stride(srcPacking, + srcWidth, srcFormat, srcType); + GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking, + srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0); + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; + for (row = 0; row < srcHeight; row++) { + for (col = 0; col < srcWidth; col++) { + dstRow[col * 4 + 0] = srcRow[col * 4 + BCOMP]; + dstRow[col * 4 + 1] = srcRow[col * 4 + GCOMP]; + dstRow[col * 4 + 2] = srcRow[col * 4 + RCOMP]; + dstRow[col * 4 + 3] = srcRow[col * 4 + ACOMP]; + } + dstRow += dstRowStride; + srcRow += srcRowStride; + } + } + } + else if (!ctx->_ImageTransferState && + (srcType == GL_UNSIGNED_BYTE || + srcType == GL_UNSIGNED_INT_8_8_8_8 || + srcType == GL_UNSIGNED_INT_8_8_8_8_REV) && + can_swizzle(baseInternalFormat) && + can_swizzle(srcFormat)) { + + GLubyte dstmap[4]; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + if ((littleEndian && dstFormat == &_mesa_texformat_argb8888) || + (!littleEndian && dstFormat == &_mesa_texformat_argb8888_rev)) { + dstmap[3] = 3; /* alpha */ + dstmap[2] = 0; /* red */ + dstmap[1] = 1; /* green */ + dstmap[0] = 2; /* blue */ + } + else { + assert((littleEndian && dstFormat == &_mesa_texformat_argb8888_rev) || + (!littleEndian && dstFormat == &_mesa_texformat_argb8888)); + dstmap[3] = 2; + dstmap[2] = 1; + dstmap[1] = 0; + dstmap[0] = 3; + } + + _mesa_swizzle_ubyte_image(ctx, dims, + srcFormat, + srcType, + + baseInternalFormat, + dstmap, 4, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, + dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } else { /* general path */ const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims, @@ -1016,16 +1577,15 @@ _mesa_texstore_argb8888(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { GLuint *dstUI = (GLuint *) dstRow; if (dstFormat == &_mesa_texformat_argb8888) { @@ -1048,7 +1608,6 @@ _mesa_texstore_argb8888(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1057,10 +1616,9 @@ _mesa_texstore_argb8888(STORE_PARAMS) GLboolean -_mesa_texstore_rgb888(STORE_PARAMS) +_mesa_texstore_rgb888(TEXSTORE_PARAMS) { - const GLuint ui = 1; - const GLubyte littleEndian = *((const GLubyte *) &ui); + const GLboolean littleEndian = _mesa_little_endian(); ASSERT(dstFormat == &_mesa_texformat_rgb888); ASSERT(dstFormat->TexelBytes == 3); @@ -1072,9 +1630,10 @@ _mesa_texstore_rgb888(STORE_PARAMS) srcType == GL_UNSIGNED_BYTE && littleEndian) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1083,17 +1642,16 @@ _mesa_texstore_rgb888(STORE_PARAMS) srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE) { /* extract RGB from RGBA */ - int img, row, col; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; + GLint img, row, col; for (img = 0; img < srcDepth; img++) { const GLint srcRowStride = _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType); GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking, srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0); - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { for (col = 0; col < srcWidth; col++) { dstRow[col * 3 + 0] = srcRow[col * 4 + BCOMP]; @@ -1103,9 +1661,32 @@ _mesa_texstore_rgb888(STORE_PARAMS) dstRow += dstRowStride; srcRow += srcRowStride; } - dstImage += dstImageStride; } } + else if (!ctx->_ImageTransferState && + srcType == GL_UNSIGNED_BYTE && + can_swizzle(baseInternalFormat) && + can_swizzle(srcFormat)) { + + GLubyte dstmap[4]; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + dstmap[0] = 2; + dstmap[1] = 1; + dstmap[2] = 0; + dstmap[3] = ONE; /* ? */ + + _mesa_swizzle_ubyte_image(ctx, dims, + srcFormat, + srcType, + baseInternalFormat, + dstmap, 3, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } else { /* general path */ const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims, @@ -1115,16 +1696,15 @@ _mesa_texstore_rgb888(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = (const GLchan *) tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { #if 0 if (littleEndian) { @@ -1153,7 +1733,6 @@ _mesa_texstore_rgb888(STORE_PARAMS) #endif dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1162,10 +1741,9 @@ _mesa_texstore_rgb888(STORE_PARAMS) GLboolean -_mesa_texstore_bgr888(STORE_PARAMS) +_mesa_texstore_bgr888(TEXSTORE_PARAMS) { - const GLuint ui = 1; - const GLubyte littleEndian = *((const GLubyte *) &ui); + const GLboolean littleEndian = _mesa_little_endian(); ASSERT(dstFormat == &_mesa_texformat_bgr888); ASSERT(dstFormat->TexelBytes == 3); @@ -1177,9 +1755,10 @@ _mesa_texstore_bgr888(STORE_PARAMS) srcType == GL_UNSIGNED_BYTE && littleEndian) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1189,16 +1768,15 @@ _mesa_texstore_bgr888(STORE_PARAMS) srcType == GL_UNSIGNED_BYTE) { /* extract BGR from RGBA */ int img, row, col; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; for (img = 0; img < srcDepth; img++) { const GLint srcRowStride = _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType); GLubyte *srcRow = (GLubyte *) _mesa_image_address(dims, srcPacking, srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, 0, 0); - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { for (col = 0; col < srcWidth; col++) { dstRow[col * 3 + 0] = srcRow[col * 4 + RCOMP]; @@ -1208,9 +1786,32 @@ _mesa_texstore_bgr888(STORE_PARAMS) dstRow += dstRowStride; srcRow += srcRowStride; } - dstImage += dstImageStride; } } + else if (!ctx->_ImageTransferState && + srcType == GL_UNSIGNED_BYTE && + can_swizzle(baseInternalFormat) && + can_swizzle(srcFormat)) { + + GLubyte dstmap[4]; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + dstmap[0] = 0; + dstmap[1] = 1; + dstmap[2] = 2; + dstmap[3] = ONE; /* ? */ + + _mesa_swizzle_ubyte_image(ctx, dims, + srcFormat, + srcType, + baseInternalFormat, + dstmap, 3, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } else { /* general path */ const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims, @@ -1220,16 +1821,15 @@ _mesa_texstore_bgr888(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = (const GLchan *) tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { for (col = 0; col < srcWidth; col++) { dstRow[col * 3 + 0] = CHAN_TO_UBYTE(src[RCOMP]); @@ -1239,7 +1839,6 @@ _mesa_texstore_bgr888(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1248,7 +1847,7 @@ _mesa_texstore_bgr888(STORE_PARAMS) GLboolean -_mesa_texstore_argb4444(STORE_PARAMS) +_mesa_texstore_argb4444(TEXSTORE_PARAMS) { ASSERT(dstFormat == &_mesa_texformat_argb4444 || dstFormat == &_mesa_texformat_argb4444_rev); @@ -1261,9 +1860,10 @@ _mesa_texstore_argb4444(STORE_PARAMS) srcFormat == GL_BGRA && srcType == GL_UNSIGNED_SHORT_4_4_4_4_REV) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1276,16 +1876,15 @@ _mesa_texstore_argb4444(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { GLushort *dstUS = (GLushort *) dstRow; if (dstFormat == &_mesa_texformat_argb4444) { @@ -1308,7 +1907,6 @@ _mesa_texstore_argb4444(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1318,7 +1916,7 @@ _mesa_texstore_argb4444(STORE_PARAMS) GLboolean -_mesa_texstore_argb1555(STORE_PARAMS) +_mesa_texstore_argb1555(TEXSTORE_PARAMS) { ASSERT(dstFormat == &_mesa_texformat_argb1555 || dstFormat == &_mesa_texformat_argb1555_rev); @@ -1331,9 +1929,10 @@ _mesa_texstore_argb1555(STORE_PARAMS) srcFormat == GL_BGRA && srcType == GL_UNSIGNED_SHORT_1_5_5_5_REV) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1346,16 +1945,15 @@ _mesa_texstore_argb1555(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src =tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { GLushort *dstUS = (GLushort *) dstRow; if (dstFormat == &_mesa_texformat_argb1555) { @@ -1378,7 +1976,6 @@ _mesa_texstore_argb1555(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1387,10 +1984,9 @@ _mesa_texstore_argb1555(STORE_PARAMS) GLboolean -_mesa_texstore_al88(STORE_PARAMS) +_mesa_texstore_al88(TEXSTORE_PARAMS) { - const GLuint ui = 1; - const GLubyte littleEndian = *((const GLubyte *) &ui); + const GLboolean littleEndian = _mesa_little_endian(); ASSERT(dstFormat == &_mesa_texformat_al88 || dstFormat == &_mesa_texformat_al88_rev); @@ -1404,12 +2000,45 @@ _mesa_texstore_al88(STORE_PARAMS) srcType == GL_UNSIGNED_BYTE && littleEndian) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } + else if (!ctx->_ImageTransferState && + littleEndian && + srcType == GL_UNSIGNED_BYTE && + can_swizzle(baseInternalFormat) && + can_swizzle(srcFormat)) { + + GLubyte dstmap[4]; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + if ((littleEndian && dstFormat == &_mesa_texformat_al88) || + (!littleEndian && dstFormat == &_mesa_texformat_al88_rev)) { + dstmap[0] = 0; + dstmap[1] = 3; + } + else { + dstmap[0] = 3; + dstmap[1] = 0; + } + dstmap[2] = ZERO; /* ? */ + dstmap[3] = ONE; /* ? */ + + _mesa_swizzle_ubyte_image(ctx, dims, + srcFormat, + srcType, + baseInternalFormat, + dstmap, 2, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } else { /* general path */ const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims, @@ -1419,16 +2048,15 @@ _mesa_texstore_al88(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { GLushort *dstUS = (GLushort *) dstRow; if (dstFormat == &_mesa_texformat_al88) { @@ -1449,7 +2077,6 @@ _mesa_texstore_al88(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1458,7 +2085,7 @@ _mesa_texstore_al88(STORE_PARAMS) GLboolean -_mesa_texstore_rgb332(STORE_PARAMS) +_mesa_texstore_rgb332(TEXSTORE_PARAMS) { ASSERT(dstFormat == &_mesa_texformat_rgb332); ASSERT(dstFormat->TexelBytes == 1); @@ -1468,9 +2095,10 @@ _mesa_texstore_rgb332(STORE_PARAMS) baseInternalFormat == GL_RGB && srcFormat == GL_RGB && srcType == GL_UNSIGNED_BYTE_3_3_2) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1483,16 +2111,15 @@ _mesa_texstore_rgb332(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { for (col = 0; col < srcWidth; col++) { dstRow[col] = PACK_COLOR_332( CHAN_TO_UBYTE(src[RCOMP]), @@ -1502,7 +2129,6 @@ _mesa_texstore_rgb332(STORE_PARAMS) } dstRow += dstRowStride; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1514,7 +2140,7 @@ _mesa_texstore_rgb332(STORE_PARAMS) * Texstore for _mesa_texformat_a8, _mesa_texformat_l8, _mesa_texformat_i8. */ GLboolean -_mesa_texstore_a8(STORE_PARAMS) +_mesa_texstore_a8(TEXSTORE_PARAMS) { ASSERT(dstFormat == &_mesa_texformat_a8 || dstFormat == &_mesa_texformat_l8 || @@ -1526,12 +2152,42 @@ _mesa_texstore_a8(STORE_PARAMS) baseInternalFormat == srcFormat && srcType == GL_UNSIGNED_BYTE) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } + else if (!ctx->_ImageTransferState && + srcType == GL_UNSIGNED_BYTE && + can_swizzle(baseInternalFormat) && + can_swizzle(srcFormat)) { + + GLubyte dstmap[4]; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + if (dstFormat == &_mesa_texformat_a8) { + dstmap[0] = 3; + } + else { + dstmap[0] = 0; + } + dstmap[1] = ZERO; /* ? */ + dstmap[2] = ZERO; /* ? */ + dstmap[3] = ONE; /* ? */ + + _mesa_swizzle_ubyte_image(ctx, dims, + srcFormat, + srcType, + baseInternalFormat, + dstmap, 1, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } else { /* general path */ const GLchan *tempImage = _mesa_make_temp_chan_image(ctx, dims, @@ -1541,16 +2197,15 @@ _mesa_texstore_a8(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLchan *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row, col; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { for (col = 0; col < srcWidth; col++) { dstRow[col] = CHAN_TO_UBYTE(src[col]); @@ -1558,7 +2213,6 @@ _mesa_texstore_a8(STORE_PARAMS) dstRow += dstRowStride; src += srcWidth; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); } @@ -1568,7 +2222,7 @@ _mesa_texstore_a8(STORE_PARAMS) GLboolean -_mesa_texstore_ci8(STORE_PARAMS) +_mesa_texstore_ci8(TEXSTORE_PARAMS) { (void) dims; (void) baseInternalFormat; ASSERT(dstFormat == &_mesa_texformat_ci8); @@ -1580,21 +2234,21 @@ _mesa_texstore_ci8(STORE_PARAMS) srcFormat == GL_COLOR_INDEX && srcType == GL_UNSIGNED_BYTE) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } else { /* general path */ - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row; for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { const GLvoid *src = _mesa_image_address(dims, srcPacking, srcAddr, srcWidth, srcHeight, srcFormat, srcType, img, row, 0); @@ -1603,7 +2257,6 @@ _mesa_texstore_ci8(STORE_PARAMS) ctx->_ImageTransferState); dstRow += dstRowStride; } - dstImage += dstImageStride; } } return GL_TRUE; @@ -1614,10 +2267,9 @@ _mesa_texstore_ci8(STORE_PARAMS) * Texstore for _mesa_texformat_ycbcr or _mesa_texformat_ycbcr_rev. */ GLboolean -_mesa_texstore_ycbcr(STORE_PARAMS) +_mesa_texstore_ycbcr(TEXSTORE_PARAMS) { - const GLuint ui = 1; - const GLubyte littleEndian = *((const GLubyte *) &ui); + const GLboolean littleEndian = _mesa_little_endian(); (void) ctx; (void) dims; (void) baseInternalFormat; ASSERT((dstFormat == &_mesa_texformat_ycbcr) || @@ -1630,9 +2282,10 @@ _mesa_texstore_ycbcr(STORE_PARAMS) ASSERT(baseInternalFormat == GL_YCBCR_MESA); /* always just memcpy since no pixel transfer ops apply */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); @@ -1642,18 +2295,16 @@ _mesa_texstore_ycbcr(STORE_PARAMS) (srcType == GL_UNSIGNED_SHORT_8_8_REV_MESA) ^ (dstFormat == &_mesa_texformat_ycbcr_rev) ^ !littleEndian) { - GLushort *pImage = (GLushort *) ((GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes); GLint img, row; for (img = 0; img < srcDepth; img++) { - GLushort *pRow = pImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { - _mesa_swap2(pRow, srcWidth); - pRow += dstRowStride; + _mesa_swap2((GLushort *) dstRow, srcWidth); + dstRow += dstRowStride; } - pImage += dstImageStride; } } return GL_TRUE; @@ -1661,6 +2312,71 @@ _mesa_texstore_ycbcr(STORE_PARAMS) +/** + * Store a combined depth/stencil texture image. + */ +GLboolean +_mesa_texstore_z24_s8(TEXSTORE_PARAMS) +{ + ASSERT(dstFormat == &_mesa_texformat_z24_s8); + ASSERT(srcFormat == GL_DEPTH_STENCIL_EXT); + ASSERT(srcType == GL_UNSIGNED_INT_24_8_EXT); + + if (!ctx->_ImageTransferState && + !srcPacking->SwapBytes) { + /* simple path */ + memcpy_texture(ctx, dims, + dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, + dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcFormat, srcType, + srcAddr, srcPacking); + } + else { + /* general path */ + const GLint srcRowStride + = _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType) + / sizeof(GLuint); + GLint img, row; + + for (img = 0; img < srcDepth; img++) { + GLuint *dstRow = (GLuint *) dstAddr + + dstImageOffsets[dstZoffset + img] + + dstYoffset * dstRowStride / sizeof(GLuint) + + dstXoffset; + const GLuint *src + = (const GLuint *) _mesa_image_address(dims, srcPacking, srcAddr, + srcWidth, srcHeight, + srcFormat, srcType, + img, 0, 0); + for (row = 0; row < srcHeight; row++) { + GLubyte stencil[MAX_WIDTH]; + GLint i; + /* the 24 depth bits will be in the high position: */ + _mesa_unpack_depth_span(ctx, srcWidth, + GL_UNSIGNED_INT, /* dst type */ + dstRow, /* dst addr */ + (GLfloat) 0xffffff, /* depthScale */ + srcType, src, srcPacking); + /* get the 8-bit stencil values */ + _mesa_unpack_stencil_span(ctx, srcWidth, + GL_UNSIGNED_BYTE, /* dst type */ + stencil, /* dst addr */ + srcType, src, srcPacking, + ctx->_ImageTransferState); + /* merge stencil values into depth values */ + for (i = 0; i < srcWidth; i++) + dstRow[i] |= stencil[i]; + + src += srcRowStride; + dstRow += dstRowStride / sizeof(GLuint); + } + } + } + return GL_TRUE; +} + + /** * Store an image in any of the formats: @@ -1672,9 +2388,9 @@ _mesa_texstore_ycbcr(STORE_PARAMS) * _mesa_texformat_intensity_float32 */ GLboolean -_mesa_texstore_rgba_float32(STORE_PARAMS) +_mesa_texstore_rgba_float32(TEXSTORE_PARAMS) { - const GLint components = _mesa_components_in_format(baseInternalFormat); + const GLint components = _mesa_components_in_format(dstFormat->BaseFormat); ASSERT(dstFormat == &_mesa_texformat_rgba_float32 || dstFormat == &_mesa_texformat_rgb_float32 || @@ -1695,9 +2411,10 @@ _mesa_texstore_rgba_float32(STORE_PARAMS) baseInternalFormat == srcFormat && srcType == GL_FLOAT) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1709,25 +2426,23 @@ _mesa_texstore_rgba_float32(STORE_PARAMS) srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); - const GLfloat *src = tempImage; + const GLfloat *srcRow = tempImage; GLint bytesPerRow; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); bytesPerRow = srcWidth * components * sizeof(GLfloat); for (img = 0; img < srcDepth; img++) { - GLubyte *dst = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { - _mesa_memcpy(dst, src, bytesPerRow); - dst += dstRowStride; - src += srcWidth * components; + _mesa_memcpy(dstRow, srcRow, bytesPerRow); + dstRow += dstRowStride; + srcRow += srcWidth * components; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); @@ -1740,9 +2455,9 @@ _mesa_texstore_rgba_float32(STORE_PARAMS) * As above, but store 16-bit floats. */ GLboolean -_mesa_texstore_rgba_float16(STORE_PARAMS) +_mesa_texstore_rgba_float16(TEXSTORE_PARAMS) { - const GLint components = _mesa_components_in_format(baseInternalFormat); + const GLint components = _mesa_components_in_format(dstFormat->BaseFormat); ASSERT(dstFormat == &_mesa_texformat_rgba_float16 || dstFormat == &_mesa_texformat_rgb_float16 || @@ -1763,9 +2478,10 @@ _mesa_texstore_rgba_float16(STORE_PARAMS) baseInternalFormat == srcFormat && srcType == GL_HALF_FLOAT_ARB) { /* simple memcpy path */ - memcpy_texture(dims, + memcpy_texture(ctx, dims, dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, - dstRowStride, dstImageStride, + dstRowStride, + dstImageOffsets, srcWidth, srcHeight, srcDepth, srcFormat, srcType, srcAddr, srcPacking); } @@ -1778,16 +2494,15 @@ _mesa_texstore_rgba_float16(STORE_PARAMS) srcFormat, srcType, srcAddr, srcPacking); const GLfloat *src = tempImage; - GLubyte *dstImage = (GLubyte *) dstAddr - + dstZoffset * dstImageStride - + dstYoffset * dstRowStride - + dstXoffset * dstFormat->TexelBytes; GLint img, row; if (!tempImage) return GL_FALSE; _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight); for (img = 0; img < srcDepth; img++) { - GLubyte *dstRow = dstImage; + GLubyte *dstRow = (GLubyte *) dstAddr + + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; for (row = 0; row < srcHeight; row++) { GLhalfARB *dstTexel = (GLhalfARB *) dstRow; GLint i; @@ -1797,7 +2512,6 @@ _mesa_texstore_rgba_float16(STORE_PARAMS) dstRow += dstRowStride; src += srcWidth * components; } - dstImage += dstImageStride; } _mesa_free((void *) tempImage); @@ -1806,19 +2520,126 @@ _mesa_texstore_rgba_float16(STORE_PARAMS) } +#if FEATURE_EXT_texture_sRGB +GLboolean +_mesa_texstore_srgb8(TEXSTORE_PARAMS) +{ + const GLboolean littleEndian = _mesa_little_endian(); + const struct gl_texture_format *newDstFormat; + StoreTexImageFunc store; + GLboolean k; + + ASSERT(dstFormat == &_mesa_texformat_srgb8); + + /* reuse normal rgb texstore code */ + if (littleEndian) { + newDstFormat = &_mesa_texformat_bgr888; + store = _mesa_texstore_bgr888; + } + else { + newDstFormat = &_mesa_texformat_rgb888; + store = _mesa_texstore_rgb888; + } + + k = store(ctx, dims, baseInternalFormat, + newDstFormat, dstAddr, + dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, + srcFormat, srcType, + srcAddr, srcPacking); + return k; +} + + +GLboolean +_mesa_texstore_srgba8(TEXSTORE_PARAMS) +{ + const GLboolean littleEndian = _mesa_little_endian(); + const struct gl_texture_format *newDstFormat; + GLboolean k; + + ASSERT(dstFormat == &_mesa_texformat_srgba8); + + /* reuse normal rgba texstore code */ + if (littleEndian) + newDstFormat = &_mesa_texformat_rgba8888_rev; + else + newDstFormat = &_mesa_texformat_rgba8888; + + k = _mesa_texstore_rgba8888(ctx, dims, baseInternalFormat, + newDstFormat, dstAddr, + dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, + srcFormat, srcType, + srcAddr, srcPacking); + return k; +} + + +GLboolean +_mesa_texstore_sl8(TEXSTORE_PARAMS) +{ + const struct gl_texture_format *newDstFormat; + GLboolean k; + + ASSERT(dstFormat == &_mesa_texformat_sl8); + + newDstFormat = &_mesa_texformat_l8; + + /* _mesa_textore_a8 handles luminance8 too */ + k = _mesa_texstore_a8(ctx, dims, baseInternalFormat, + newDstFormat, dstAddr, + dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, + srcFormat, srcType, + srcAddr, srcPacking); + return k; +} + + +GLboolean +_mesa_texstore_sla8(TEXSTORE_PARAMS) +{ + const GLboolean littleEndian = _mesa_little_endian(); + const struct gl_texture_format *newDstFormat; + GLboolean k; + + ASSERT(dstFormat == &_mesa_texformat_sla8); + + /* reuse normal luminance/alpha texstore code */ + if (littleEndian) + newDstFormat = &_mesa_texformat_al88; + else + newDstFormat = &_mesa_texformat_al88_rev; + + k = _mesa_texstore_al88(ctx, dims, baseInternalFormat, + newDstFormat, dstAddr, + dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, + srcFormat, srcType, + srcAddr, srcPacking); + return k; +} + +#endif /* FEATURE_EXT_texture_sRGB */ + /** * Check if an unpack PBO is active prior to fetching a texture image. * If so, do bounds checking and map the buffer into main memory. * Any errors detected will be recorded. - * The caller _must_ call unmap_teximage_pbo() too! + * The caller _must_ call _mesa_unmap_teximage_pbo() too! */ -static const GLvoid * -validate_pbo_teximage(GLcontext *ctx, GLuint dimensions, - GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const GLvoid *pixels, - const struct gl_pixelstore_attrib *unpack, - const char *funcName) +const GLvoid * +_mesa_validate_pbo_teximage(GLcontext *ctx, GLuint dimensions, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, const GLvoid *pixels, + const struct gl_pixelstore_attrib *unpack, + const char *funcName) { GLubyte *buf; @@ -1848,10 +2669,10 @@ validate_pbo_teximage(GLcontext *ctx, GLuint dimensions, * image. * If so, do bounds checking and map the buffer into main memory. * Any errors detected will be recorded. - * The caller _must_ call unmap_teximage_pbo() too! + * The caller _must_ call _mesa_unmap_teximage_pbo() too! */ -static const GLvoid * -validate_pbo_compressed_teximage(GLcontext *ctx, +const GLvoid * +_mesa_validate_pbo_compressed_teximage(GLcontext *ctx, GLsizei imageSize, const GLvoid *pixels, const struct gl_pixelstore_attrib *packing, const char *funcName) @@ -1863,7 +2684,7 @@ validate_pbo_compressed_teximage(GLcontext *ctx, return pixels; } if ((const GLubyte *) pixels + imageSize > - (const GLubyte *) packing->BufferObj->Size) { + ((const GLubyte *) 0) + packing->BufferObj->Size) { /* out of bounds read! */ _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(invalid PBO access"); return NULL; @@ -1884,8 +2705,9 @@ validate_pbo_compressed_teximage(GLcontext *ctx, * This function must be called after either of the validate_pbo_*_teximage() * functions. It unmaps the PBO buffer if it was mapped earlier. */ -static void -unmap_teximage_pbo(GLcontext *ctx, const struct gl_pixelstore_attrib *unpack) +void +_mesa_unmap_teximage_pbo(GLcontext *ctx, + const struct gl_pixelstore_attrib *unpack) { if (unpack->BufferObj->Name) { ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT, @@ -1894,6 +2716,140 @@ unmap_teximage_pbo(GLcontext *ctx, const struct gl_pixelstore_attrib *unpack) } + +/** + * Adaptor for fetching a GLchan texel from a float-valued texture. + */ +static void +fetch_texel_float_to_chan(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLchan *texelOut) +{ + GLfloat temp[4]; + ASSERT(texImage->FetchTexelf); + texImage->FetchTexelf(texImage, i, j, k, temp); + if (texImage->TexFormat->BaseFormat == GL_DEPTH_COMPONENT || + texImage->TexFormat->BaseFormat == GL_DEPTH_STENCIL_EXT) { + /* just one channel */ + UNCLAMPED_FLOAT_TO_CHAN(texelOut[0], temp[0]); + } + else { + /* four channels */ + UNCLAMPED_FLOAT_TO_CHAN(texelOut[0], temp[0]); + UNCLAMPED_FLOAT_TO_CHAN(texelOut[1], temp[1]); + UNCLAMPED_FLOAT_TO_CHAN(texelOut[2], temp[2]); + UNCLAMPED_FLOAT_TO_CHAN(texelOut[3], temp[3]); + } +} + + +/** + * Adaptor for fetching a float texel from a GLchan-valued texture. + */ +static void +fetch_texel_chan_to_float(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texelOut) +{ + GLchan temp[4]; + ASSERT(texImage->FetchTexelc); + texImage->FetchTexelc(texImage, i, j, k, temp); + if (texImage->TexFormat->BaseFormat == GL_DEPTH_COMPONENT || + texImage->TexFormat->BaseFormat == GL_DEPTH_STENCIL_EXT) { + /* just one channel */ + texelOut[0] = CHAN_TO_FLOAT(temp[0]); + } + else { + /* four channels */ + texelOut[0] = CHAN_TO_FLOAT(temp[0]); + texelOut[1] = CHAN_TO_FLOAT(temp[1]); + texelOut[2] = CHAN_TO_FLOAT(temp[2]); + texelOut[3] = CHAN_TO_FLOAT(temp[3]); + } +} + + +/** + * Initialize the texture image's FetchTexelc and FetchTexelf methods. + */ +static void +set_fetch_functions(struct gl_texture_image *texImage, GLuint dims) +{ + ASSERT(dims == 1 || dims == 2 || dims == 3); + ASSERT(texImage->TexFormat); + + switch (dims) { + case 1: + texImage->FetchTexelc = texImage->TexFormat->FetchTexel1D; + texImage->FetchTexelf = texImage->TexFormat->FetchTexel1Df; + break; + case 2: + texImage->FetchTexelc = texImage->TexFormat->FetchTexel2D; + texImage->FetchTexelf = texImage->TexFormat->FetchTexel2Df; + break; + case 3: + texImage->FetchTexelc = texImage->TexFormat->FetchTexel3D; + texImage->FetchTexelf = texImage->TexFormat->FetchTexel3Df; + break; + default: + ; + } + + /* now check if we need to use a float/chan adaptor */ + if (!texImage->FetchTexelc) { + texImage->FetchTexelc = fetch_texel_float_to_chan; + } + else if (!texImage->FetchTexelf) { + texImage->FetchTexelf = fetch_texel_chan_to_float; + } + + + ASSERT(texImage->FetchTexelc); + ASSERT(texImage->FetchTexelf); +} + + +/** + * Choose the actual storage format for a new texture image. + * Mainly, this is a wrapper for the driver's ChooseTextureFormat() function. + * Also set some other texImage fields related to texture compression, etc. + * \param ctx rendering context + * \param texImage the gl_texture_image + * \param dims texture dimensions (1, 2 or 3) + * \param format the user-specified format parameter + * \param type the user-specified type parameter + * \param internalFormat the user-specified internal format hint + */ +static void +choose_texture_format(GLcontext *ctx, struct gl_texture_image *texImage, + GLuint dims, + GLenum format, GLenum type, GLint internalFormat) +{ + ASSERT(dims == 1 || dims == 2 || dims == 3); + ASSERT(ctx->Driver.ChooseTextureFormat); + + texImage->TexFormat + = ctx->Driver.ChooseTextureFormat(ctx, internalFormat, format, type); + + ASSERT(texImage->TexFormat); + + set_fetch_functions(texImage, dims); + + if (texImage->TexFormat->TexelBytes == 0) { + /* must be a compressed format */ + texImage->IsCompressed = GL_TRUE; + texImage->CompressedSize = + ctx->Driver.CompressedTextureSize(ctx, texImage->Width, + texImage->Height, texImage->Depth, + texImage->TexFormat->MesaFormat); + } + else { + /* non-compressed format */ + texImage->IsCompressed = GL_FALSE; + texImage->CompressedSize = 0; + } +} + + + /* * This is the software fallback for Driver.TexImage1D() * and Driver.CopyTexImage1D(). @@ -1916,27 +2872,21 @@ _mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level, _mesa_adjust_image_for_convolution(ctx, 1, &postConvWidth, NULL); } - /* choose the texture format */ - assert(ctx->Driver.ChooseTextureFormat); - texImage->TexFormat = ctx->Driver.ChooseTextureFormat(ctx, internalFormat, - format, type); - assert(texImage->TexFormat); - texImage->FetchTexelc = texImage->TexFormat->FetchTexel1D; - texImage->FetchTexelf = texImage->TexFormat->FetchTexel1Df; + choose_texture_format(ctx, texImage, 1, format, type, internalFormat); /* allocate memory */ if (texImage->IsCompressed) sizeInBytes = texImage->CompressedSize; else sizeInBytes = postConvWidth * texImage->TexFormat->TexelBytes; - texImage->Data = MESA_PBUFFER_ALLOC(sizeInBytes); + texImage->Data = _mesa_alloc_texmemory(sizeInBytes); if (!texImage->Data) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D"); return; } - pixels = validate_pbo_teximage(ctx, 1, width, 1, 1, format, type, pixels, - packing, "glTexImage1D"); + pixels = _mesa_validate_pbo_teximage(ctx, 1, width, 1, 1, format, type, + pixels, packing, "glTexImage1D"); if (!pixels) { /* Note: we check for a NULL image pointer here, _after_ we allocated * memory for the texture. That's what the GL spec calls for. @@ -1944,14 +2894,15 @@ _mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level, return; } else { - const GLint dstRowStride = 0, dstImageStride = 0; + const GLint dstRowStride = 0; GLboolean success; ASSERT(texImage->TexFormat->StoreImage); - success = texImage->TexFormat->StoreImage(ctx, 1, texImage->Format, + success = texImage->TexFormat->StoreImage(ctx, 1, texImage->_BaseFormat, texImage->TexFormat, texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */ - dstRowStride, dstImageStride, + dstRowStride, + texImage->ImageOffsets, width, 1, 1, format, type, pixels, packing); if (!success) { @@ -1966,23 +2917,19 @@ _mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level, texObj); } - unmap_teximage_pbo(ctx, packing); + _mesa_unmap_teximage_pbo(ctx, packing); } /** * This is the software fallback for Driver.TexImage2D() * and Driver.CopyTexImage2D(). - * We store the image in heap memory. We know nothing about on-board - * VRAM here. But since most DRI drivers rely on keeping a copy of all - * textures in main memory, this routine will typically be used by - * hardware drivers too. * - * Reasons why a driver might override this function: - * - Special memory allocation needs (VRAM, AGP, etc) - * - Unusual row/image strides or padding - * - Special housekeeping - * - Using VRAM-based Pixel Buffer Objects + * This function is oriented toward storing images in main memory, rather + * than VRAM. Device driver's can easily plug in their own replacement. + * + * Note: width and height may be pre-convolved dimensions, but + * texImage->Width and texImage->Height will be post-convolved dimensions. */ void _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level, @@ -2002,13 +2949,7 @@ _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level, &postConvHeight); } - /* choose the texture format */ - assert(ctx->Driver.ChooseTextureFormat); - texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx, - internalFormat, format, type); - assert(texImage->TexFormat); - texImage->FetchTexelc = texImage->TexFormat->FetchTexel2D; - texImage->FetchTexelf = texImage->TexFormat->FetchTexel2Df; + choose_texture_format(ctx, texImage, 2, format, type, internalFormat); texelBytes = texImage->TexFormat->TexelBytes; @@ -2017,14 +2958,14 @@ _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level, sizeInBytes = texImage->CompressedSize; else sizeInBytes = postConvWidth * postConvHeight * texelBytes; - texImage->Data = MESA_PBUFFER_ALLOC(sizeInBytes); + texImage->Data = _mesa_alloc_texmemory(sizeInBytes); if (!texImage->Data) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D"); return; } - pixels = validate_pbo_teximage(ctx, 2, width, height, 1, format, type, - pixels, packing, "glTexImage2D"); + pixels = _mesa_validate_pbo_teximage(ctx, 2, width, height, 1, format, type, + pixels, packing, "glTexImage2D"); if (!pixels) { /* Note: we check for a NULL image pointer here, _after_ we allocated * memory for the texture. That's what the GL spec calls for. @@ -2032,20 +2973,22 @@ _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level, return; } else { - GLint dstRowStride, dstImageStride = 0; + GLint dstRowStride; GLboolean success; if (texImage->IsCompressed) { - dstRowStride = _mesa_compressed_row_stride(texImage->IntFormat,width); + dstRowStride + = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, width); } else { - dstRowStride = postConvWidth * texImage->TexFormat->TexelBytes; + dstRowStride = texImage->RowStride * texImage->TexFormat->TexelBytes; } ASSERT(texImage->TexFormat->StoreImage); - success = texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, + success = texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat, texImage->TexFormat, texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */ - dstRowStride, dstImageStride, + dstRowStride, + texImage->ImageOffsets, width, height, 1, format, type, pixels, packing); if (!success) { @@ -2060,7 +3003,7 @@ _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level, texObj); } - unmap_teximage_pbo(ctx, packing); + _mesa_unmap_teximage_pbo(ctx, packing); } @@ -2082,13 +3025,7 @@ _mesa_store_teximage3d(GLcontext *ctx, GLenum target, GLint level, GLint texelBytes, sizeInBytes; (void) border; - /* choose the texture format */ - assert(ctx->Driver.ChooseTextureFormat); - texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx, - internalFormat, format, type); - assert(texImage->TexFormat); - texImage->FetchTexelc = texImage->TexFormat->FetchTexel3D; - texImage->FetchTexelf = texImage->TexFormat->FetchTexel3Df; + choose_texture_format(ctx, texImage, 3, format, type, internalFormat); texelBytes = texImage->TexFormat->TexelBytes; @@ -2097,14 +3034,14 @@ _mesa_store_teximage3d(GLcontext *ctx, GLenum target, GLint level, sizeInBytes = texImage->CompressedSize; else sizeInBytes = width * height * depth * texelBytes; - texImage->Data = MESA_PBUFFER_ALLOC(sizeInBytes); + texImage->Data = _mesa_alloc_texmemory(sizeInBytes); if (!texImage->Data) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage3D"); return; } - pixels = validate_pbo_teximage(ctx, 3, width, height, depth, format, type, - pixels, packing, "glTexImage3D"); + pixels = _mesa_validate_pbo_teximage(ctx, 3, width, height, depth, format, + type, pixels, packing, "glTexImage3D"); if (!pixels) { /* Note: we check for a NULL image pointer here, _after_ we allocated * memory for the texture. That's what the GL spec calls for. @@ -2112,22 +3049,22 @@ _mesa_store_teximage3d(GLcontext *ctx, GLenum target, GLint level, return; } else { - GLint dstRowStride, dstImageStride; + GLint dstRowStride; GLboolean success; if (texImage->IsCompressed) { - dstRowStride = _mesa_compressed_row_stride(texImage->IntFormat,width); - dstImageStride = 0; + dstRowStride + = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, width); } else { - dstRowStride = width * texImage->TexFormat->TexelBytes; - dstImageStride = dstRowStride * height; + dstRowStride = texImage->RowStride * texImage->TexFormat->TexelBytes; } ASSERT(texImage->TexFormat->StoreImage); - success = texImage->TexFormat->StoreImage(ctx, 3, texImage->Format, + success = texImage->TexFormat->StoreImage(ctx, 3, texImage->_BaseFormat, texImage->TexFormat, texImage->Data, 0, 0, 0, /* dstX/Y/Zoffset */ - dstRowStride, dstImageStride, + dstRowStride, + texImage->ImageOffsets, width, height, depth, format, type, pixels, packing); if (!success) { @@ -2142,7 +3079,7 @@ _mesa_store_teximage3d(GLcontext *ctx, GLenum target, GLint level, texObj); } - unmap_teximage_pbo(ctx, packing); + _mesa_unmap_teximage_pbo(ctx, packing); } @@ -2160,20 +3097,22 @@ _mesa_store_texsubimage1d(GLcontext *ctx, GLenum target, GLint level, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - pixels = validate_pbo_teximage(ctx, 1, width, 1, 1, format, type, pixels, - packing, "glTexSubImage1D"); + /* get pointer to src pixels (may be in a pbo which we'll map here) */ + pixels = _mesa_validate_pbo_teximage(ctx, 1, width, 1, 1, format, type, + pixels, packing, "glTexSubImage1D"); if (!pixels) return; { - const GLint dstRowStride = 0, dstImageStride = 0; + const GLint dstRowStride = 0; GLboolean success; ASSERT(texImage->TexFormat->StoreImage); - success = texImage->TexFormat->StoreImage(ctx, 1, texImage->Format, + success = texImage->TexFormat->StoreImage(ctx, 1, texImage->_BaseFormat, texImage->TexFormat, texImage->Data, xoffset, 0, 0, /* offsets */ - dstRowStride, dstImageStride, + dstRowStride, + texImage->ImageOffsets, width, 1, 1, format, type, pixels, packing); if (!success) { @@ -2188,7 +3127,7 @@ _mesa_store_texsubimage1d(GLcontext *ctx, GLenum target, GLint level, texObj); } - unmap_teximage_pbo(ctx, packing); + _mesa_unmap_teximage_pbo(ctx, packing); } @@ -2206,27 +3145,29 @@ _mesa_store_texsubimage2d(GLcontext *ctx, GLenum target, GLint level, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - pixels = validate_pbo_teximage(ctx, 2, width, height, 1, format, type, - pixels, packing, "glTexSubImage2D"); + /* get pointer to src pixels (may be in a pbo which we'll map here) */ + pixels = _mesa_validate_pbo_teximage(ctx, 2, width, height, 1, format, type, + pixels, packing, "glTexSubImage2D"); if (!pixels) return; { - GLint dstRowStride = 0, dstImageStride = 0; + GLint dstRowStride = 0; GLboolean success; if (texImage->IsCompressed) { - dstRowStride = _mesa_compressed_row_stride(texImage->IntFormat, + dstRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, texImage->Width); } else { - dstRowStride = texImage->Width * texImage->TexFormat->TexelBytes; + dstRowStride = texImage->RowStride * texImage->TexFormat->TexelBytes; } ASSERT(texImage->TexFormat->StoreImage); - success = texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, + success = texImage->TexFormat->StoreImage(ctx, 2, texImage->_BaseFormat, texImage->TexFormat, texImage->Data, xoffset, yoffset, 0, - dstRowStride, dstImageStride, + dstRowStride, + texImage->ImageOffsets, width, height, 1, format, type, pixels, packing); if (!success) { @@ -2241,7 +3182,7 @@ _mesa_store_texsubimage2d(GLcontext *ctx, GLenum target, GLint level, texObj); } - unmap_teximage_pbo(ctx, packing); + _mesa_unmap_teximage_pbo(ctx, packing); } @@ -2258,29 +3199,30 @@ _mesa_store_texsubimage3d(GLcontext *ctx, GLenum target, GLint level, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - pixels = validate_pbo_teximage(ctx, 3, width, height, depth, format, type, - pixels, packing, "glTexSubImage3D"); + /* get pointer to src pixels (may be in a pbo which we'll map here) */ + pixels = _mesa_validate_pbo_teximage(ctx, 3, width, height, depth, format, + type, pixels, packing, + "glTexSubImage3D"); if (!pixels) return; { - GLint dstRowStride, dstImageStride; + GLint dstRowStride; GLboolean success; if (texImage->IsCompressed) { - dstRowStride = _mesa_compressed_row_stride(texImage->IntFormat, + dstRowStride = _mesa_compressed_row_stride(texImage->TexFormat->MesaFormat, texImage->Width); - dstImageStride = 0; /* XXX fix */ } else { - dstRowStride = texImage->Width * texImage->TexFormat->TexelBytes; - dstImageStride = dstRowStride * texImage->Height; + dstRowStride = texImage->RowStride * texImage->TexFormat->TexelBytes; } ASSERT(texImage->TexFormat->StoreImage); - success = texImage->TexFormat->StoreImage(ctx, 3, texImage->Format, + success = texImage->TexFormat->StoreImage(ctx, 3, texImage->_BaseFormat, texImage->TexFormat, texImage->Data, xoffset, yoffset, zoffset, - dstRowStride, dstImageStride, + dstRowStride, + texImage->ImageOffsets, width, height, depth, format, type, pixels, packing); if (!success) { @@ -2295,7 +3237,7 @@ _mesa_store_texsubimage3d(GLcontext *ctx, GLenum target, GLint level, texObj); } - unmap_teximage_pbo(ctx, packing); + _mesa_unmap_teximage_pbo(ctx, packing); } @@ -2322,7 +3264,7 @@ _mesa_store_compressed_teximage1d(GLcontext *ctx, GLenum target, GLint level, -/* +/** * Fallback for Driver.CompressedTexImage2D() */ void @@ -2345,23 +3287,18 @@ _mesa_store_compressed_teximage2d(GLcontext *ctx, GLenum target, GLint level, ASSERT(texImage->Depth == 1); ASSERT(texImage->Data == NULL); /* was freed in glCompressedTexImage2DARB */ - /* choose the texture format */ - assert(ctx->Driver.ChooseTextureFormat); - texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx, - internalFormat, 0, 0); - assert(texImage->TexFormat); - texImage->FetchTexelc = texImage->TexFormat->FetchTexel2D; - texImage->FetchTexelf = texImage->TexFormat->FetchTexel2Df; + choose_texture_format(ctx, texImage, 2, 0, 0, internalFormat); /* allocate storage */ - texImage->Data = MESA_PBUFFER_ALLOC(imageSize); + texImage->Data = _mesa_alloc_texmemory(imageSize); if (!texImage->Data) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2DARB"); return; } - data = validate_pbo_compressed_teximage(ctx, imageSize, data, &ctx->Unpack, - "glCompressedTexImage2D"); + data = _mesa_validate_pbo_compressed_teximage(ctx, imageSize, data, + &ctx->Unpack, + "glCompressedTexImage2D"); if (!data) return; @@ -2376,7 +3313,7 @@ _mesa_store_compressed_teximage2d(GLcontext *ctx, GLenum target, GLint level, texObj); } - unmap_teximage_pbo(ctx, &ctx->Unpack); + _mesa_unmap_teximage_pbo(ctx, &ctx->Unpack); } @@ -2418,7 +3355,7 @@ _mesa_store_compressed_texsubimage1d(GLcontext *ctx, GLenum target, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - /* this space intentionally left blank */ + /* there are no compressed 1D texture formats yet */ (void) ctx; (void) target; (void) level; (void) xoffset; (void) width; @@ -2446,6 +3383,8 @@ _mesa_store_compressed_texsubimage2d(GLcontext *ctx, GLenum target, GLint i, rows; GLubyte *dest; const GLubyte *src; + const GLuint mesaFormat = texImage->TexFormat->MesaFormat; + (void) format; /* these should have been caught sooner */ @@ -2454,20 +3393,21 @@ _mesa_store_compressed_texsubimage2d(GLcontext *ctx, GLenum target, ASSERT((xoffset & 3) == 0); ASSERT((yoffset & 3) == 0); - data = validate_pbo_compressed_teximage(ctx, imageSize, data, &ctx->Unpack, - "glCompressedTexSubImage2D"); + /* get pointer to src pixels (may be in a pbo which we'll map here) */ + data = _mesa_validate_pbo_compressed_teximage(ctx, imageSize, data, + &ctx->Unpack, + "glCompressedTexSubImage2D"); if (!data) return; - srcRowStride = _mesa_compressed_row_stride(texImage->IntFormat, width); + srcRowStride = _mesa_compressed_row_stride(mesaFormat, width); src = (const GLubyte *) data; - destRowStride = _mesa_compressed_row_stride(texImage->IntFormat, - texImage->Width); + destRowStride = _mesa_compressed_row_stride(mesaFormat, texImage->Width); dest = _mesa_compressed_image_address(xoffset, yoffset, 0, - texImage->IntFormat, + texImage->TexFormat->MesaFormat, texImage->Width, - (GLubyte*) texImage->Data); + (GLubyte *) texImage->Data); bytesPerRow = srcRowStride; rows = height / 4; @@ -2485,7 +3425,7 @@ _mesa_store_compressed_texsubimage2d(GLcontext *ctx, GLenum target, texObj); } - unmap_teximage_pbo(ctx, &ctx->Unpack); + _mesa_unmap_teximage_pbo(ctx, &ctx->Unpack); } @@ -2502,7 +3442,7 @@ _mesa_store_compressed_texsubimage3d(GLcontext *ctx, GLenum target, struct gl_texture_object *texObj, struct gl_texture_image *texImage) { - /* this space intentionally left blank */ + /* there are no compressed 3D texture formats yet */ (void) ctx; (void) target; (void) level; (void) xoffset; (void) yoffset; (void) zoffset; @@ -2514,1090 +3454,28 @@ _mesa_store_compressed_texsubimage3d(GLcontext *ctx, GLenum target, } -/* - * Average together two rows of a source image to produce a single new - * row in the dest image. It's legal for the two source rows to point - * to the same data. The source width must be equal to either the - * dest width or two times the dest width. - */ -static void -do_row(const struct gl_texture_format *format, GLint srcWidth, - const GLvoid *srcRowA, const GLvoid *srcRowB, - GLint dstWidth, GLvoid *dstRow) -{ - const GLuint k0 = (srcWidth == dstWidth) ? 0 : 1; - const GLuint colStride = (srcWidth == dstWidth) ? 1 : 2; - - /* This assertion is no longer valid with non-power-of-2 textures - assert(srcWidth == dstWidth || srcWidth == 2 * dstWidth); - */ - - switch (format->MesaFormat) { - case MESA_FORMAT_RGBA: - { - GLuint i, j, k; - const GLchan (*rowA)[4] = (const GLchan (*)[4]) srcRowA; - const GLchan (*rowB)[4] = (const GLchan (*)[4]) srcRowB; - GLchan (*dst)[4] = (GLchan (*)[4]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) / 4; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) / 4; - dst[i][2] = (rowA[j][2] + rowA[k][2] + - rowB[j][2] + rowB[k][2]) / 4; - dst[i][3] = (rowA[j][3] + rowA[k][3] + - rowB[j][3] + rowB[k][3]) / 4; - } - } - return; - case MESA_FORMAT_RGB: - { - GLuint i, j, k; - const GLchan (*rowA)[3] = (const GLchan (*)[3]) srcRowA; - const GLchan (*rowB)[3] = (const GLchan (*)[3]) srcRowB; - GLchan (*dst)[3] = (GLchan (*)[3]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) / 4; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) / 4; - dst[i][2] = (rowA[j][2] + rowA[k][2] + - rowB[j][2] + rowB[k][2]) / 4; - } - } - return; - case MESA_FORMAT_ALPHA: - case MESA_FORMAT_LUMINANCE: - case MESA_FORMAT_INTENSITY: - { - GLuint i, j, k; - const GLchan *rowA = (const GLchan *) srcRowA; - const GLchan *rowB = (const GLchan *) srcRowB; - GLchan *dst = (GLchan *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4; - } - } - return; - case MESA_FORMAT_LUMINANCE_ALPHA: - { - GLuint i, j, k; - const GLchan (*rowA)[2] = (const GLchan (*)[2]) srcRowA; - const GLchan (*rowB)[2] = (const GLchan (*)[2]) srcRowB; - GLchan (*dst)[2] = (GLchan (*)[2]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) / 4; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) / 4; - } - } - return; - case MESA_FORMAT_DEPTH_COMPONENT_FLOAT32: - { - GLuint i, j, k; - const GLfloat *rowA = (const GLfloat *) srcRowA; - const GLfloat *rowB = (const GLfloat *) srcRowB; - GLfloat *dst = (GLfloat *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) * 0.25F; - } - } - return; - case MESA_FORMAT_DEPTH_COMPONENT16: - { - GLuint i, j, k; - const GLushort *rowA = (const GLushort *) srcRowA; - const GLushort *rowB = (const GLushort *) srcRowB; - GLushort *dst = (GLushort *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4; - } - } - return; - /* Begin hardware formats */ - case MESA_FORMAT_RGBA8888: - case MESA_FORMAT_RGBA8888_REV: - case MESA_FORMAT_ARGB8888: - case MESA_FORMAT_ARGB8888_REV: - { - GLuint i, j, k; - const GLubyte (*rowA)[4] = (const GLubyte (*)[4]) srcRowA; - const GLubyte (*rowB)[4] = (const GLubyte (*)[4]) srcRowB; - GLubyte (*dst)[4] = (GLubyte (*)[4]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) / 4; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) / 4; - dst[i][2] = (rowA[j][2] + rowA[k][2] + - rowB[j][2] + rowB[k][2]) / 4; - dst[i][3] = (rowA[j][3] + rowA[k][3] + - rowB[j][3] + rowB[k][3]) / 4; - } - } - return; - case MESA_FORMAT_RGB888: - case MESA_FORMAT_BGR888: - { - GLuint i, j, k; - const GLubyte (*rowA)[3] = (const GLubyte (*)[3]) srcRowA; - const GLubyte (*rowB)[3] = (const GLubyte (*)[3]) srcRowB; - GLubyte (*dst)[3] = (GLubyte (*)[3]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) / 4; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) / 4; - dst[i][2] = (rowA[j][2] + rowA[k][2] + - rowB[j][2] + rowB[k][2]) / 4; - } - } - return; - case MESA_FORMAT_RGB565: - case MESA_FORMAT_RGB565_REV: - { - GLuint i, j, k; - const GLushort *rowA = (const GLushort *) srcRowA; - const GLushort *rowB = (const GLushort *) srcRowB; - GLushort *dst = (GLushort *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - const GLint rowAr0 = rowA[j] & 0x1f; - const GLint rowAr1 = rowA[k] & 0x1f; - const GLint rowBr0 = rowB[j] & 0x1f; - const GLint rowBr1 = rowB[k] & 0x1f; - const GLint rowAg0 = (rowA[j] >> 5) & 0x3f; - const GLint rowAg1 = (rowA[k] >> 5) & 0x3f; - const GLint rowBg0 = (rowB[j] >> 5) & 0x3f; - const GLint rowBg1 = (rowB[k] >> 5) & 0x3f; - const GLint rowAb0 = (rowA[j] >> 11) & 0x1f; - const GLint rowAb1 = (rowA[k] >> 11) & 0x1f; - const GLint rowBb0 = (rowB[j] >> 11) & 0x1f; - const GLint rowBb1 = (rowB[k] >> 11) & 0x1f; - const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; - const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; - const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; - dst[i] = (blue << 11) | (green << 5) | red; - } - } - return; - case MESA_FORMAT_ARGB4444: - case MESA_FORMAT_ARGB4444_REV: - { - GLuint i, j, k; - const GLushort *rowA = (const GLushort *) srcRowA; - const GLushort *rowB = (const GLushort *) srcRowB; - GLushort *dst = (GLushort *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - const GLint rowAr0 = rowA[j] & 0xf; - const GLint rowAr1 = rowA[k] & 0xf; - const GLint rowBr0 = rowB[j] & 0xf; - const GLint rowBr1 = rowB[k] & 0xf; - const GLint rowAg0 = (rowA[j] >> 4) & 0xf; - const GLint rowAg1 = (rowA[k] >> 4) & 0xf; - const GLint rowBg0 = (rowB[j] >> 4) & 0xf; - const GLint rowBg1 = (rowB[k] >> 4) & 0xf; - const GLint rowAb0 = (rowA[j] >> 8) & 0xf; - const GLint rowAb1 = (rowA[k] >> 8) & 0xf; - const GLint rowBb0 = (rowB[j] >> 8) & 0xf; - const GLint rowBb1 = (rowB[k] >> 8) & 0xf; - const GLint rowAa0 = (rowA[j] >> 12) & 0xf; - const GLint rowAa1 = (rowA[k] >> 12) & 0xf; - const GLint rowBa0 = (rowB[j] >> 12) & 0xf; - const GLint rowBa1 = (rowB[k] >> 12) & 0xf; - const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; - const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; - const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; - const GLint alpha = (rowAa0 + rowAa1 + rowBa0 + rowBa1) >> 2; - dst[i] = (alpha << 12) | (blue << 8) | (green << 4) | red; - } - } - return; - case MESA_FORMAT_ARGB1555: - case MESA_FORMAT_ARGB1555_REV: /* XXX broken? */ - { - GLuint i, j, k; - const GLushort *rowA = (const GLushort *) srcRowA; - const GLushort *rowB = (const GLushort *) srcRowB; - GLushort *dst = (GLushort *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - const GLint rowAr0 = rowA[j] & 0x1f; - const GLint rowAr1 = rowA[k] & 0x1f; - const GLint rowBr0 = rowB[j] & 0x1f; - const GLint rowBr1 = rowB[k] & 0xf; - const GLint rowAg0 = (rowA[j] >> 5) & 0x1f; - const GLint rowAg1 = (rowA[k] >> 5) & 0x1f; - const GLint rowBg0 = (rowB[j] >> 5) & 0x1f; - const GLint rowBg1 = (rowB[k] >> 5) & 0x1f; - const GLint rowAb0 = (rowA[j] >> 10) & 0x1f; - const GLint rowAb1 = (rowA[k] >> 10) & 0x1f; - const GLint rowBb0 = (rowB[j] >> 10) & 0x1f; - const GLint rowBb1 = (rowB[k] >> 10) & 0x1f; - const GLint rowAa0 = (rowA[j] >> 15) & 0x1; - const GLint rowAa1 = (rowA[k] >> 15) & 0x1; - const GLint rowBa0 = (rowB[j] >> 15) & 0x1; - const GLint rowBa1 = (rowB[k] >> 15) & 0x1; - const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; - const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; - const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; - const GLint alpha = (rowAa0 + rowAa1 + rowBa0 + rowBa1) >> 2; - dst[i] = (alpha << 15) | (blue << 10) | (green << 5) | red; - } - } - return; - case MESA_FORMAT_AL88: - case MESA_FORMAT_AL88_REV: - { - GLuint i, j, k; - const GLubyte (*rowA)[2] = (const GLubyte (*)[2]) srcRowA; - const GLubyte (*rowB)[2] = (const GLubyte (*)[2]) srcRowB; - GLubyte (*dst)[2] = (GLubyte (*)[2]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) >> 2; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) >> 2; - } - } - return; - case MESA_FORMAT_RGB332: - { - GLuint i, j, k; - const GLubyte *rowA = (const GLubyte *) srcRowA; - const GLubyte *rowB = (const GLubyte *) srcRowB; - GLubyte *dst = (GLubyte *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - const GLint rowAr0 = rowA[j] & 0x3; - const GLint rowAr1 = rowA[k] & 0x3; - const GLint rowBr0 = rowB[j] & 0x3; - const GLint rowBr1 = rowB[k] & 0x3; - const GLint rowAg0 = (rowA[j] >> 2) & 0x7; - const GLint rowAg1 = (rowA[k] >> 2) & 0x7; - const GLint rowBg0 = (rowB[j] >> 2) & 0x7; - const GLint rowBg1 = (rowB[k] >> 2) & 0x7; - const GLint rowAb0 = (rowA[j] >> 5) & 0x7; - const GLint rowAb1 = (rowA[k] >> 5) & 0x7; - const GLint rowBb0 = (rowB[j] >> 5) & 0x7; - const GLint rowBb1 = (rowB[k] >> 5) & 0x7; - const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; - const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; - const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; - dst[i] = (blue << 5) | (green << 2) | red; - } - } - return; - case MESA_FORMAT_A8: - case MESA_FORMAT_L8: - case MESA_FORMAT_I8: - case MESA_FORMAT_CI8: - { - GLuint i, j, k; - const GLubyte *rowA = (const GLubyte *) srcRowA; - const GLubyte *rowB = (const GLubyte *) srcRowB; - GLubyte *dst = (GLubyte *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) >> 2; - } - } - return; - case MESA_FORMAT_RGBA_FLOAT32: - { - GLuint i, j, k; - const GLfloat (*rowA)[4] = (const GLfloat (*)[4]) srcRowA; - const GLfloat (*rowB)[4] = (const GLfloat (*)[4]) srcRowB; - GLfloat (*dst)[4] = (GLfloat (*)[4]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) * 0.25F; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) * 0.25F; - dst[i][2] = (rowA[j][2] + rowA[k][2] + - rowB[j][2] + rowB[k][2]) * 0.25F; - dst[i][3] = (rowA[j][3] + rowA[k][3] + - rowB[j][3] + rowB[k][3]) * 0.25F; - } - } - return; - case MESA_FORMAT_RGBA_FLOAT16: - { - GLuint i, j, k, comp; - const GLhalfARB (*rowA)[4] = (const GLhalfARB (*)[4]) srcRowA; - const GLhalfARB (*rowB)[4] = (const GLhalfARB (*)[4]) srcRowB; - GLhalfARB (*dst)[4] = (GLhalfARB (*)[4]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - for (comp = 0; comp < 4; comp++) { - GLfloat aj, ak, bj, bk; - aj = _mesa_half_to_float(rowA[j][comp]); - ak = _mesa_half_to_float(rowA[k][comp]); - bj = _mesa_half_to_float(rowB[j][comp]); - bk = _mesa_half_to_float(rowB[k][comp]); - dst[i][comp] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); - } - } - } - return; - case MESA_FORMAT_RGB_FLOAT32: - { - GLuint i, j, k; - const GLfloat (*rowA)[3] = (const GLfloat (*)[3]) srcRowA; - const GLfloat (*rowB)[3] = (const GLfloat (*)[3]) srcRowB; - GLfloat (*dst)[3] = (GLfloat (*)[3]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) * 0.25F; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) * 0.25F; - dst[i][2] = (rowA[j][2] + rowA[k][2] + - rowB[j][2] + rowB[k][2]) * 0.25F; - } - } - return; - case MESA_FORMAT_RGB_FLOAT16: - { - GLuint i, j, k, comp; - const GLhalfARB (*rowA)[3] = (const GLhalfARB (*)[3]) srcRowA; - const GLhalfARB (*rowB)[3] = (const GLhalfARB (*)[3]) srcRowB; - GLhalfARB (*dst)[3] = (GLhalfARB (*)[3]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - for (comp = 0; comp < 3; comp++) { - GLfloat aj, ak, bj, bk; - aj = _mesa_half_to_float(rowA[j][comp]); - ak = _mesa_half_to_float(rowA[k][comp]); - bj = _mesa_half_to_float(rowB[j][comp]); - bk = _mesa_half_to_float(rowB[k][comp]); - dst[i][comp] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); - } - } - } - return; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32: - { - GLuint i, j, k; - const GLfloat (*rowA)[2] = (const GLfloat (*)[2]) srcRowA; - const GLfloat (*rowB)[2] = (const GLfloat (*)[2]) srcRowB; - GLfloat (*dst)[2] = (GLfloat (*)[2]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i][0] = (rowA[j][0] + rowA[k][0] + - rowB[j][0] + rowB[k][0]) * 0.25F; - dst[i][1] = (rowA[j][1] + rowA[k][1] + - rowB[j][1] + rowB[k][1]) * 0.25F; - } - } - return; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16: - { - GLuint i, j, k, comp; - const GLhalfARB (*rowA)[2] = (const GLhalfARB (*)[2]) srcRowA; - const GLhalfARB (*rowB)[2] = (const GLhalfARB (*)[2]) srcRowB; - GLhalfARB (*dst)[2] = (GLhalfARB (*)[2]) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - for (comp = 0; comp < 2; comp++) { - GLfloat aj, ak, bj, bk; - aj = _mesa_half_to_float(rowA[j][comp]); - ak = _mesa_half_to_float(rowA[k][comp]); - bj = _mesa_half_to_float(rowB[j][comp]); - bk = _mesa_half_to_float(rowB[k][comp]); - dst[i][comp] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); - } - } - } - return; - case MESA_FORMAT_ALPHA_FLOAT32: - case MESA_FORMAT_LUMINANCE_FLOAT32: - case MESA_FORMAT_INTENSITY_FLOAT32: - { - GLuint i, j, k; - const GLfloat *rowA = (const GLfloat *) srcRowA; - const GLfloat *rowB = (const GLfloat *) srcRowB; - GLfloat *dst = (GLfloat *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) * 0.25F; - } - } - return; - case MESA_FORMAT_ALPHA_FLOAT16: - case MESA_FORMAT_LUMINANCE_FLOAT16: - case MESA_FORMAT_INTENSITY_FLOAT16: - { - GLuint i, j, k; - const GLhalfARB *rowA = (const GLhalfARB *) srcRowA; - const GLhalfARB *rowB = (const GLhalfARB *) srcRowB; - GLhalfARB *dst = (GLhalfARB *) dstRow; - for (i = j = 0, k = k0; i < (GLuint) dstWidth; - i++, j += colStride, k += colStride) { - GLfloat aj, ak, bj, bk; - aj = _mesa_half_to_float(rowA[j]); - ak = _mesa_half_to_float(rowA[k]); - bj = _mesa_half_to_float(rowB[j]); - bk = _mesa_half_to_float(rowB[k]); - dst[i] = _mesa_float_to_half((aj + ak + bj + bk) * 0.25F); - } - } - return; - - default: - _mesa_problem(NULL, "bad format in do_row()"); - } -} -/* - * These functions generate a 1/2-size mipmap image from a source image. - * Texture borders are handled by copying or averaging the source image's - * border texels, depending on the scale-down factor. - */ - -static void -make_1d_mipmap(const struct gl_texture_format *format, GLint border, - GLint srcWidth, const GLubyte *srcPtr, - GLint dstWidth, GLubyte *dstPtr) -{ - const GLint bpt = format->TexelBytes; - const GLubyte *src; - GLubyte *dst; - - /* skip the border pixel, if any */ - src = srcPtr + border * bpt; - dst = dstPtr + border * bpt; - - /* we just duplicate the input row, kind of hack, saves code */ - do_row(format, srcWidth - 2 * border, src, src, - dstWidth - 2 * border, dst); - - if (border) { - /* copy left-most pixel from source */ - MEMCPY(dstPtr, srcPtr, bpt); - /* copy right-most pixel from source */ - MEMCPY(dstPtr + (dstWidth - 1) * bpt, - srcPtr + (srcWidth - 1) * bpt, - bpt); - } -} - - -static void -make_2d_mipmap(const struct gl_texture_format *format, GLint border, - GLint srcWidth, GLint srcHeight, const GLubyte *srcPtr, - GLint dstWidth, GLint dstHeight, GLubyte *dstPtr) -{ - const GLint bpt = format->TexelBytes; - const GLint srcWidthNB = srcWidth - 2 * border; /* sizes w/out border */ - const GLint dstWidthNB = dstWidth - 2 * border; - const GLint dstHeightNB = dstHeight - 2 * border; - const GLint srcRowStride = bpt * srcWidth; - const GLint dstRowStride = bpt * dstWidth; - const GLubyte *srcA, *srcB; - GLubyte *dst; - GLint row; - - /* Compute src and dst pointers, skipping any border */ - srcA = srcPtr + border * ((srcWidth + 1) * bpt); - if (srcHeight > 1) - srcB = srcA + srcRowStride; - else - srcB = srcA; - dst = dstPtr + border * ((dstWidth + 1) * bpt); - - for (row = 0; row < dstHeightNB; row++) { - do_row(format, srcWidthNB, srcA, srcB, - dstWidthNB, dst); - srcA += 2 * srcRowStride; - srcB += 2 * srcRowStride; - dst += dstRowStride; - } - - /* This is ugly but probably won't be used much */ - if (border > 0) { - /* fill in dest border */ - /* lower-left border pixel */ - MEMCPY(dstPtr, srcPtr, bpt); - /* lower-right border pixel */ - MEMCPY(dstPtr + (dstWidth - 1) * bpt, - srcPtr + (srcWidth - 1) * bpt, bpt); - /* upper-left border pixel */ - MEMCPY(dstPtr + dstWidth * (dstHeight - 1) * bpt, - srcPtr + srcWidth * (srcHeight - 1) * bpt, bpt); - /* upper-right border pixel */ - MEMCPY(dstPtr + (dstWidth * dstHeight - 1) * bpt, - srcPtr + (srcWidth * srcHeight - 1) * bpt, bpt); - /* lower border */ - do_row(format, srcWidthNB, - srcPtr + bpt, - srcPtr + bpt, - dstWidthNB, dstPtr + bpt); - /* upper border */ - do_row(format, srcWidthNB, - srcPtr + (srcWidth * (srcHeight - 1) + 1) * bpt, - srcPtr + (srcWidth * (srcHeight - 1) + 1) * bpt, - dstWidthNB, - dstPtr + (dstWidth * (dstHeight - 1) + 1) * bpt); - /* left and right borders */ - if (srcHeight == dstHeight) { - /* copy border pixel from src to dst */ - for (row = 1; row < srcHeight; row++) { - MEMCPY(dstPtr + dstWidth * row * bpt, - srcPtr + srcWidth * row * bpt, bpt); - MEMCPY(dstPtr + (dstWidth * row + dstWidth - 1) * bpt, - srcPtr + (srcWidth * row + srcWidth - 1) * bpt, bpt); - } - } - else { - /* average two src pixels each dest pixel */ - for (row = 0; row < dstHeightNB; row += 2) { - do_row(format, 1, - srcPtr + (srcWidth * (row * 2 + 1)) * bpt, - srcPtr + (srcWidth * (row * 2 + 2)) * bpt, - 1, dstPtr + (dstWidth * row + 1) * bpt); - do_row(format, 1, - srcPtr + (srcWidth * (row * 2 + 1) + srcWidth - 1) * bpt, - srcPtr + (srcWidth * (row * 2 + 2) + srcWidth - 1) * bpt, - 1, dstPtr + (dstWidth * row + 1 + dstWidth - 1) * bpt); - } - } - } -} - - -static void -make_3d_mipmap(const struct gl_texture_format *format, GLint border, - GLint srcWidth, GLint srcHeight, GLint srcDepth, - const GLubyte *srcPtr, - GLint dstWidth, GLint dstHeight, GLint dstDepth, - GLubyte *dstPtr) -{ - const GLint bpt = format->TexelBytes; - const GLint srcWidthNB = srcWidth - 2 * border; /* sizes w/out border */ - const GLint srcDepthNB = srcDepth - 2 * border; - const GLint dstWidthNB = dstWidth - 2 * border; - const GLint dstHeightNB = dstHeight - 2 * border; - const GLint dstDepthNB = dstDepth - 2 * border; - GLvoid *tmpRowA, *tmpRowB; - GLint img, row; - GLint bytesPerSrcImage, bytesPerDstImage; - GLint bytesPerSrcRow, bytesPerDstRow; - GLint srcImageOffset, srcRowOffset; - - (void) srcDepthNB; /* silence warnings */ - - /* Need two temporary row buffers */ - tmpRowA = MALLOC(srcWidth * bpt); - if (!tmpRowA) - return; - tmpRowB = MALLOC(srcWidth * bpt); - if (!tmpRowB) { - FREE(tmpRowA); - return; - } - - bytesPerSrcImage = srcWidth * srcHeight * bpt; - bytesPerDstImage = dstWidth * dstHeight * bpt; - - bytesPerSrcRow = srcWidth * bpt; - bytesPerDstRow = dstWidth * bpt; - - /* Offset between adjacent src images to be averaged together */ - srcImageOffset = (srcDepth == dstDepth) ? 0 : bytesPerSrcImage; - - /* Offset between adjacent src rows to be averaged together */ - srcRowOffset = (srcHeight == dstHeight) ? 0 : srcWidth * bpt; - - /* - * Need to average together up to 8 src pixels for each dest pixel. - * Break that down into 3 operations: - * 1. take two rows from source image and average them together. - * 2. take two rows from next source image and average them together. - * 3. take the two averaged rows and average them for the final dst row. - */ - - /* - _mesa_printf("mip3d %d x %d x %d -> %d x %d x %d\n", - srcWidth, srcHeight, srcDepth, dstWidth, dstHeight, dstDepth); - */ - - for (img = 0; img < dstDepthNB; img++) { - /* first source image pointer, skipping border */ - const GLubyte *imgSrcA = srcPtr - + (bytesPerSrcImage + bytesPerSrcRow + border) * bpt * border - + img * (bytesPerSrcImage + srcImageOffset); - /* second source image pointer, skipping border */ - const GLubyte *imgSrcB = imgSrcA + srcImageOffset; - /* address of the dest image, skipping border */ - GLubyte *imgDst = dstPtr - + (bytesPerDstImage + bytesPerDstRow + border) * bpt * border - + img * bytesPerDstImage; - - /* setup the four source row pointers and the dest row pointer */ - const GLubyte *srcImgARowA = imgSrcA; - const GLubyte *srcImgARowB = imgSrcA + srcRowOffset; - const GLubyte *srcImgBRowA = imgSrcB; - const GLubyte *srcImgBRowB = imgSrcB + srcRowOffset; - GLubyte *dstImgRow = imgDst; - - for (row = 0; row < dstHeightNB; row++) { - /* Average together two rows from first src image */ - do_row(format, srcWidthNB, srcImgARowA, srcImgARowB, - srcWidthNB, tmpRowA); - /* Average together two rows from second src image */ - do_row(format, srcWidthNB, srcImgBRowA, srcImgBRowB, - srcWidthNB, tmpRowB); - /* Average together the temp rows to make the final row */ - do_row(format, srcWidthNB, tmpRowA, tmpRowB, - dstWidthNB, dstImgRow); - /* advance to next rows */ - srcImgARowA += bytesPerSrcRow + srcRowOffset; - srcImgARowB += bytesPerSrcRow + srcRowOffset; - srcImgBRowA += bytesPerSrcRow + srcRowOffset; - srcImgBRowB += bytesPerSrcRow + srcRowOffset; - dstImgRow += bytesPerDstRow; - } - } - - FREE(tmpRowA); - FREE(tmpRowB); - - /* Luckily we can leverage the make_2d_mipmap() function here! */ - if (border > 0) { - /* do front border image */ - make_2d_mipmap(format, 1, srcWidth, srcHeight, srcPtr, - dstWidth, dstHeight, dstPtr); - /* do back border image */ - make_2d_mipmap(format, 1, srcWidth, srcHeight, - srcPtr + bytesPerSrcImage * (srcDepth - 1), - dstWidth, dstHeight, - dstPtr + bytesPerDstImage * (dstDepth - 1)); - /* do four remaining border edges that span the image slices */ - if (srcDepth == dstDepth) { - /* just copy border pixels from src to dst */ - for (img = 0; img < dstDepthNB; img++) { - const GLubyte *src; - GLubyte *dst; - - /* do border along [img][row=0][col=0] */ - src = srcPtr + (img + 1) * bytesPerSrcImage; - dst = dstPtr + (img + 1) * bytesPerDstImage; - MEMCPY(dst, src, bpt); - - /* do border along [img][row=dstHeight-1][col=0] */ - src = srcPtr + (img * 2 + 1) * bytesPerSrcImage - + (srcHeight - 1) * bytesPerSrcRow; - dst = dstPtr + (img + 1) * bytesPerDstImage - + (dstHeight - 1) * bytesPerDstRow; - MEMCPY(dst, src, bpt); - - /* do border along [img][row=0][col=dstWidth-1] */ - src = srcPtr + (img * 2 + 1) * bytesPerSrcImage - + (srcWidth - 1) * bpt; - dst = dstPtr + (img + 1) * bytesPerDstImage - + (dstWidth - 1) * bpt; - MEMCPY(dst, src, bpt); - - /* do border along [img][row=dstHeight-1][col=dstWidth-1] */ - src = srcPtr + (img * 2 + 1) * bytesPerSrcImage - + (bytesPerSrcImage - bpt); - dst = dstPtr + (img + 1) * bytesPerDstImage - + (bytesPerDstImage - bpt); - MEMCPY(dst, src, bpt); - } - } - else { - /* average border pixels from adjacent src image pairs */ - ASSERT(srcDepthNB == 2 * dstDepthNB); - for (img = 0; img < dstDepthNB; img++) { - const GLubyte *src; - GLubyte *dst; - - /* do border along [img][row=0][col=0] */ - src = srcPtr + (img * 2 + 1) * bytesPerSrcImage; - dst = dstPtr + (img + 1) * bytesPerDstImage; - do_row(format, 1, src, src + srcImageOffset, 1, dst); - - /* do border along [img][row=dstHeight-1][col=0] */ - src = srcPtr + (img * 2 + 1) * bytesPerSrcImage - + (srcHeight - 1) * bytesPerSrcRow; - dst = dstPtr + (img + 1) * bytesPerDstImage - + (dstHeight - 1) * bytesPerDstRow; - do_row(format, 1, src, src + srcImageOffset, 1, dst); - - /* do border along [img][row=0][col=dstWidth-1] */ - src = srcPtr + (img * 2 + 1) * bytesPerSrcImage - + (srcWidth - 1) * bpt; - dst = dstPtr + (img + 1) * bytesPerDstImage - + (dstWidth - 1) * bpt; - do_row(format, 1, src, src + srcImageOffset, 1, dst); - - /* do border along [img][row=dstHeight-1][col=dstWidth-1] */ - src = srcPtr + (img * 2 + 1) * bytesPerSrcImage - + (bytesPerSrcImage - bpt); - dst = dstPtr + (img + 1) * bytesPerDstImage - + (bytesPerDstImage - bpt); - do_row(format, 1, src, src + srcImageOffset, 1, dst); - } - } - } -} - - -/* - * For GL_SGIX_generate_mipmap: - * Generate a complete set of mipmaps from texObj's base-level image. - * Stop at texObj's MaxLevel or when we get to the 1x1 texture. - */ -void -_mesa_generate_mipmap(GLcontext *ctx, GLenum target, - const struct gl_texture_unit *texUnit, - struct gl_texture_object *texObj) -{ - const struct gl_texture_image *srcImage; - const struct gl_texture_format *convertFormat; - const GLubyte *srcData = NULL; - GLubyte *dstData = NULL; - GLint level, maxLevels; - - ASSERT(texObj); - srcImage = texObj->Image[0][texObj->BaseLevel]; - ASSERT(srcImage); - - maxLevels = _mesa_max_texture_levels(ctx, texObj->Target); - ASSERT(maxLevels > 0); /* bad target */ - - /* Find convertFormat - the format that do_row() will process */ - if (srcImage->IsCompressed) { - /* setup for compressed textures */ - GLuint row; - GLint components, size; - GLchan *dst; - - assert(texObj->Target == GL_TEXTURE_2D); - - if (srcImage->Format == GL_RGB) { - convertFormat = &_mesa_texformat_rgb; - components = 3; - } - else if (srcImage->Format == GL_RGBA) { - convertFormat = &_mesa_texformat_rgba; - components = 4; - } - else { - _mesa_problem(ctx, "bad srcImage->Format in _mesa_generate_mipmaps"); - return; - } - - /* allocate storage for uncompressed GL_RGB or GL_RGBA images */ - size = _mesa_bytes_per_pixel(srcImage->Format, CHAN_TYPE) - * srcImage->Width * srcImage->Height * srcImage->Depth + 20; - /* 20 extra bytes, just be safe when calling last FetchTexel */ - srcData = (GLubyte *) MALLOC(size); - if (!srcData) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "generate mipmaps"); - return; - } - dstData = (GLubyte *) MALLOC(size / 2); /* 1/4 would probably be OK */ - if (!dstData) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "generate mipmaps"); - FREE((void *) srcData); - return; - } - - /* decompress base image here */ - dst = (GLchan *) srcData; - for (row = 0; row < srcImage->Height; row++) { - GLuint col; - for (col = 0; col < srcImage->Width; col++) { - srcImage->FetchTexelc(srcImage, col, row, 0, dst); - dst += components; - } - } - } - else { - /* uncompressed */ - convertFormat = srcImage->TexFormat; - } - - for (level = texObj->BaseLevel; level < texObj->MaxLevel - && level < maxLevels - 1; level++) { - /* generate image[level+1] from image[level] */ - const struct gl_texture_image *srcImage; - struct gl_texture_image *dstImage; - GLint srcWidth, srcHeight, srcDepth; - GLint dstWidth, dstHeight, dstDepth; - GLint border, bytesPerTexel; - - /* get src image parameters */ - srcImage = _mesa_select_tex_image(ctx, texUnit, target, level); - ASSERT(srcImage); - srcWidth = srcImage->Width; - srcHeight = srcImage->Height; - srcDepth = srcImage->Depth; - border = srcImage->Border; - - /* compute next (level+1) image size */ - if (srcWidth - 2 * border > 1) { - dstWidth = (srcWidth - 2 * border) / 2 + 2 * border; - } - else { - dstWidth = srcWidth; /* can't go smaller */ - } - if (srcHeight - 2 * border > 1) { - dstHeight = (srcHeight - 2 * border) / 2 + 2 * border; - } - else { - dstHeight = srcHeight; /* can't go smaller */ - } - if (srcDepth - 2 * border > 1) { - dstDepth = (srcDepth - 2 * border) / 2 + 2 * border; - } - else { - dstDepth = srcDepth; /* can't go smaller */ - } - - if (dstWidth == srcWidth && - dstHeight == srcHeight && - dstDepth == srcDepth) { - /* all done */ - if (srcImage->IsCompressed) { - FREE((void *) srcData); - FREE(dstData); - } - return; - } - - /* get dest gl_texture_image */ - dstImage = _mesa_get_tex_image(ctx, texUnit, target, level + 1); - if (!dstImage) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps"); - return; - } - - /* Free old image data */ - if (dstImage->Data) - MESA_PBUFFER_FREE(dstImage->Data); - - /* initialize new image */ - _mesa_init_teximage_fields(ctx, target, dstImage, dstWidth, dstHeight, - dstDepth, border, srcImage->IntFormat); - dstImage->DriverData = NULL; - dstImage->TexFormat = srcImage->TexFormat; - dstImage->FetchTexelc = srcImage->FetchTexelc; - dstImage->FetchTexelf = srcImage->FetchTexelf; - ASSERT(dstImage->TexFormat); - ASSERT(dstImage->FetchTexelc); - ASSERT(dstImage->FetchTexelf); - - /* Alloc new teximage data buffer. - * Setup src and dest data pointers. - */ - if (dstImage->IsCompressed) { - ASSERT(dstImage->CompressedSize > 0); /* set by init_teximage_fields*/ - dstImage->Data = MESA_PBUFFER_ALLOC(dstImage->CompressedSize); - if (!dstImage->Data) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps"); - return; - } - /* srcData and dstData are already set */ - ASSERT(srcData); - ASSERT(dstData); - } - else { - bytesPerTexel = srcImage->TexFormat->TexelBytes; - ASSERT(dstWidth * dstHeight * dstDepth * bytesPerTexel > 0); - dstImage->Data = MESA_PBUFFER_ALLOC(dstWidth * dstHeight * dstDepth - * bytesPerTexel); - if (!dstImage->Data) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps"); - return; - } - srcData = (const GLubyte *) srcImage->Data; - dstData = (GLubyte *) dstImage->Data; - } - - /* - * We use simple 2x2 averaging to compute the next mipmap level. - */ - switch (target) { - case GL_TEXTURE_1D: - make_1d_mipmap(convertFormat, border, - srcWidth, srcData, - dstWidth, dstData); - break; - case GL_TEXTURE_2D: - case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: - make_2d_mipmap(convertFormat, border, - srcWidth, srcHeight, srcData, - dstWidth, dstHeight, dstData); - break; - case GL_TEXTURE_3D: - make_3d_mipmap(convertFormat, border, - srcWidth, srcHeight, srcDepth, srcData, - dstWidth, dstHeight, dstDepth, dstData); - break; - case GL_TEXTURE_RECTANGLE_NV: - /* no mipmaps, do nothing */ - break; - default: - _mesa_problem(ctx, "bad dimensions in _mesa_generate_mipmaps"); - return; - } - - if (dstImage->IsCompressed) { - GLubyte *temp; - /* compress image from dstData into dstImage->Data */ - const GLenum srcFormat = convertFormat->BaseFormat; - GLint dstRowStride = _mesa_compressed_row_stride(srcImage->IntFormat, - dstWidth); - ASSERT(srcFormat == GL_RGB || srcFormat == GL_RGBA); - dstImage->TexFormat->StoreImage(ctx, 2, dstImage->Format, - dstImage->TexFormat, - dstImage->Data, - 0, 0, 0, /* dstX/Y/Zoffset */ - dstRowStride, 0, /* strides */ - dstWidth, dstHeight, 1, /* size */ - srcFormat, CHAN_TYPE, - dstData, /* src data, actually */ - &ctx->DefaultPacking); - /* swap src and dest pointers */ - temp = (GLubyte *) srcData; - srcData = dstData; - dstData = temp; - } - - } /* loop over mipmap levels */ -} - +#if FEATURE_EXT_texture_sRGB /** - * Helper function for drivers which need to rescale texture images to - * certain aspect ratios. - * Nearest filtering only (for broken hardware that can't support - * all aspect ratios). This can be made a lot faster, but I don't - * really care enough... + * Test if given texture image is an sRGB format. */ -void -_mesa_rescale_teximage2d (GLuint bytesPerPixel, - GLuint srcStrideInPixels, - GLuint dstRowStride, - GLint srcWidth, GLint srcHeight, - GLint dstWidth, GLint dstHeight, - const GLvoid *srcImage, GLvoid *dstImage) +static GLboolean +is_srgb_teximage(const struct gl_texture_image *texImage) { - GLint row, col; - -#define INNER_LOOP( TYPE, HOP, WOP ) \ - for ( row = 0 ; row < dstHeight ; row++ ) { \ - GLint srcRow = row HOP hScale; \ - for ( col = 0 ; col < dstWidth ; col++ ) { \ - GLint srcCol = col WOP wScale; \ - dst[col] = src[srcRow * srcStrideInPixels + srcCol]; \ - } \ - dst = (TYPE *) ((GLubyte *) dst + dstRowStride); \ - } \ - -#define RESCALE_IMAGE( TYPE ) \ -do { \ - const TYPE *src = (const TYPE *)srcImage; \ - TYPE *dst = (TYPE *)dstImage; \ - \ - if ( srcHeight < dstHeight ) { \ - const GLint hScale = dstHeight / srcHeight; \ - if ( srcWidth < dstWidth ) { \ - const GLint wScale = dstWidth / srcWidth; \ - INNER_LOOP( TYPE, /, / ); \ - } \ - else { \ - const GLint wScale = srcWidth / dstWidth; \ - INNER_LOOP( TYPE, /, * ); \ - } \ - } \ - else { \ - const GLint hScale = srcHeight / dstHeight; \ - if ( srcWidth < dstWidth ) { \ - const GLint wScale = dstWidth / srcWidth; \ - INNER_LOOP( TYPE, *, / ); \ - } \ - else { \ - const GLint wScale = srcWidth / dstWidth; \ - INNER_LOOP( TYPE, *, * ); \ - } \ - } \ -} while (0) - - switch ( bytesPerPixel ) { - case 4: - RESCALE_IMAGE( GLuint ); - break; - - case 2: - RESCALE_IMAGE( GLushort ); - break; - - case 1: - RESCALE_IMAGE( GLubyte ); - break; + switch (texImage->TexFormat->MesaFormat) { + case MESA_FORMAT_SRGB8: + case MESA_FORMAT_SRGBA8: + case MESA_FORMAT_SL8: + case MESA_FORMAT_SLA8: + return GL_TRUE; default: - _mesa_problem(NULL,"unexpected bytes/pixel in _mesa_rescale_teximage2d"); - } -} - - -/** - * Upscale an image by replication, not (typical) stretching. - * We use this when the image width or height is less than a - * certain size (4, 8) and we need to upscale an image. - */ -void -_mesa_upscale_teximage2d (GLsizei inWidth, GLsizei inHeight, - GLsizei outWidth, GLsizei outHeight, - GLint comps, const GLchan *src, GLint srcRowStride, - GLchan *dest ) -{ - GLint i, j, k; - - ASSERT(outWidth >= inWidth); - ASSERT(outHeight >= inHeight); -#if 0 - ASSERT(inWidth == 1 || inWidth == 2 || inHeight == 1 || inHeight == 2); - ASSERT((outWidth & 3) == 0); - ASSERT((outHeight & 3) == 0); -#endif - - for (i = 0; i < outHeight; i++) { - const GLint ii = i % inHeight; - for (j = 0; j < outWidth; j++) { - const GLint jj = j % inWidth; - for (k = 0; k < comps; k++) { - dest[(i * outWidth + j) * comps + k] - = src[ii * srcRowStride + jj * comps + k]; - } - } + return GL_FALSE; } } +#endif /* FEATURE_EXT_texture_sRGB */ /** @@ -3607,29 +3485,29 @@ _mesa_upscale_teximage2d (GLsizei inWidth, GLsizei inHeight, void _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels, - const struct gl_texture_object *texObj, - const struct gl_texture_image *texImage) + struct gl_texture_object *texObj, + struct gl_texture_image *texImage) { - GLuint dimensions = (target == GL_TEXTURE_3D) ? 3 : 2; + const GLuint dimensions = (target == GL_TEXTURE_3D) ? 3 : 2; if (ctx->Pack.BufferObj->Name) { - /* pack texture image into a PBO */ - GLubyte *buf; - if (!_mesa_validate_pbo_access(dimensions, &ctx->Pack, texImage->Width, - texImage->Height, texImage->Depth, - format, type, pixels)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGetTexImage(invalid PBO access)"); - return; - } - buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, - GL_WRITE_ONLY_ARB, - ctx->Pack.BufferObj); + /* Packing texture image into a PBO. + * Map the (potentially) VRAM-based buffer into our process space so + * we can write into it with the code below. + * A hardware driver might use a sophisticated blit to move the + * texture data to the PBO if the PBO is in VRAM along with the texture. + */ + GLubyte *buf = (GLubyte *) + ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, + GL_WRITE_ONLY_ARB, ctx->Pack.BufferObj); if (!buf) { /* buffer is already mapped - that's an error */ _mesa_error(ctx, GL_INVALID_OPERATION,"glGetTexImage(PBO is mapped)"); return; } + /* was an offset into the PBO. + * Now make it a real, client-side pointer inside the mapped region. + */ pixels = ADD_POINTERS(buf, pixels); } else if (!pixels) { @@ -3656,16 +3534,16 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level, /* Can't use FetchTexel here because that returns RGBA */ if (texImage->TexFormat->IndexBits == 8) { const GLubyte *src = (const GLubyte *) texImage->Data; + src += width * (img * texImage->Height + row); for (col = 0; col < width; col++) { - indexRow[col] = src[texImage->Width * - (img * texImage->Height + row) + col]; + indexRow[col] = src[col]; } } else if (texImage->TexFormat->IndexBits == 16) { const GLushort *src = (const GLushort *) texImage->Data; + src += width * (img * texImage->Height + row); for (col = 0; col < width; col++) { - indexRow[col] = src[texImage->Width * - (img * texImage->Height + row) + col]; + indexRow[col] = src[col]; } } else { @@ -3686,6 +3564,15 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level, _mesa_pack_depth_span(ctx, width, dest, type, depthRow, &ctx->Pack); } + else if (format == GL_DEPTH_STENCIL_EXT) { + /* XXX Note: we're bypassing texImage->FetchTexel()! */ + const GLuint *src = (const GLuint *) texImage->Data; + src += width * row + width * height * img; + _mesa_memcpy(dest, src, width * sizeof(GLuint)); + if (ctx->Pack.SwapBytes) { + _mesa_swap4((GLuint *) dest, width); + } + } else if (format == GL_YCBCR_MESA) { /* No pixel transfer */ const GLint rowstride = texImage->RowStride; @@ -3704,6 +3591,16 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level, _mesa_swap2((GLushort *) dest, width); } } +#if FEATURE_EXT_texture_sRGB + else if (is_srgb_teximage(texImage)) { + /* no pixel transfer and no non-linear to linear conversion */ + const GLint comps = texImage->TexFormat->TexelBytes; + const GLint rowstride = comps * texImage->RowStride; + MEMCPY(dest, + (const GLubyte *) texImage->Data + row * rowstride, + comps * width * sizeof(GLubyte)); + } +#endif /* FEATURE_EXT_texture_sRGB */ else { /* general case: convert row to RGBA format */ GLfloat rgba[MAX_WIDTH][4]; @@ -3711,10 +3608,9 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level, for (col = 0; col < width; col++) { (*texImage->FetchTexelf)(texImage, col, row, img, rgba[col]); } - _mesa_pack_rgba_span_float(ctx, width, - (const GLfloat (*)[4]) rgba, - format, type, dest, &ctx->Pack, - 0 /* no image transfer */); + _mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba, + format, type, dest, + &ctx->Pack, 0x0 /*image xfer ops*/); } /* format */ } /* row */ } /* img */ @@ -3738,6 +3634,8 @@ _mesa_get_compressed_teximage(GLcontext *ctx, GLenum target, GLint level, const struct gl_texture_object *texObj, const struct gl_texture_image *texImage) { + GLuint size; + if (ctx->Pack.BufferObj->Name) { /* pack texture image into a PBO */ GLubyte *buf; @@ -3763,8 +3661,13 @@ _mesa_get_compressed_teximage(GLcontext *ctx, GLenum target, GLint level, return; } + /* don't use texImage->CompressedSize since that may be padded out */ + size = _mesa_compressed_texture_size(ctx, texImage->Width, texImage->Height, + texImage->Depth, + texImage->TexFormat->MesaFormat); + /* just memcpy, no pixelstore or pixel transfer */ - MEMCPY(img, texImage->Data, texImage->CompressedSize); + _mesa_memcpy(img, texImage->Data, size); if (ctx->Pack.BufferObj->Name) { ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, diff --git a/src/kits/opengl/mesa/main/texstore.h b/src/kits/opengl/mesa/main/texstore.h index c7cbcb0cf9..f67defc503 100644 --- a/src/kits/opengl/mesa/main/texstore.h +++ b/src/kits/opengl/mesa/main/texstore.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -37,48 +37,42 @@ #include "mtypes.h" -/* Macro just to save some typing */ -#define STORE_PARAMS \ - GLcontext *ctx, GLuint dims, \ - GLenum baseInternalFormat, \ - const struct gl_texture_format *dstFormat, \ - GLvoid *dstAddr, \ - GLint dstXoffset, GLint dstYoffset, GLint dstZoffset, \ - GLint dstRowStride, GLint dstImageStride, \ - GLint srcWidth, GLint srcHeight, GLint srcDepth, \ - GLenum srcFormat, GLenum srcType, \ - const GLvoid *srcAddr, \ - const struct gl_pixelstore_attrib *srcPacking - -extern GLboolean _mesa_texstore_rgba(STORE_PARAMS); -extern GLboolean _mesa_texstore_color_index(STORE_PARAMS); -extern GLboolean _mesa_texstore_depth_component16(STORE_PARAMS); -extern GLboolean _mesa_texstore_depth_component_float32(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgba8888(STORE_PARAMS); -extern GLboolean _mesa_texstore_argb8888(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgb888(STORE_PARAMS); -extern GLboolean _mesa_texstore_bgr888(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgb565(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgb565_rev(STORE_PARAMS); -extern GLboolean _mesa_texstore_argb4444(STORE_PARAMS); -extern GLboolean _mesa_texstore_argb4444_rev(STORE_PARAMS); -extern GLboolean _mesa_texstore_argb1555(STORE_PARAMS); -extern GLboolean _mesa_texstore_argb1555_rev(STORE_PARAMS); -extern GLboolean _mesa_texstore_al88(STORE_PARAMS); -extern GLboolean _mesa_texstore_al88_rev(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgb332(STORE_PARAMS); -extern GLboolean _mesa_texstore_a8(STORE_PARAMS); -extern GLboolean _mesa_texstore_ci8(STORE_PARAMS); -extern GLboolean _mesa_texstore_ycbcr(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgba_float32(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgba_float16(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgb_fxt1(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgba_fxt1(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgb_dxt1(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgba_dxt1(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgba_dxt3(STORE_PARAMS); -extern GLboolean _mesa_texstore_rgba_dxt5(STORE_PARAMS); +extern GLboolean _mesa_texstore_rgba(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_color_index(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgba8888(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_argb8888(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgb888(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_bgr888(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgb565(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgb565_rev(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_argb4444(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_argb4444_rev(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_argb1555(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_argb1555_rev(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_al88(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_al88_rev(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgb332(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_a8(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_ci8(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_ycbcr(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_z24_s8(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_z16(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_z32(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgba_float32(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgba_float16(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgb_fxt1(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgba_fxt1(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgb_dxt1(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgba_dxt1(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgba_dxt3(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS); +#if FEATURE_EXT_texture_sRGB +extern GLboolean _mesa_texstore_srgb8(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_srgba8(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_sl8(TEXSTORE_PARAMS); +extern GLboolean _mesa_texstore_sla8(TEXSTORE_PARAMS); +#endif extern GLchan * @@ -206,32 +200,11 @@ _mesa_store_compressed_texsubimage3d(GLcontext *ctx, GLenum target, struct gl_texture_image *texImage); -extern void -_mesa_generate_mipmap(GLcontext *ctx, GLenum target, - const struct gl_texture_unit *texUnit, - struct gl_texture_object *texObj); - - -extern void -_mesa_rescale_teximage2d(GLuint bytesPerPixel, - GLuint srcStrideInPixels, - GLuint dstRowStride, - GLint srcWidth, GLint srcHeight, - GLint dstWidth, GLint dstHeight, - const GLvoid *srcImage, GLvoid *dstImage); - -extern void -_mesa_upscale_teximage2d(GLsizei inWidth, GLsizei inHeight, - GLsizei outWidth, GLsizei outHeight, - GLint comps, const GLchan *src, GLint srcRowStride, - GLchan *dest); - - extern void _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels, - const struct gl_texture_object *texObj, - const struct gl_texture_image *texImage); + struct gl_texture_object *texObj, + struct gl_texture_image *texImage); extern void @@ -240,5 +213,22 @@ _mesa_get_compressed_teximage(GLcontext *ctx, GLenum target, GLint level, const struct gl_texture_object *texObj, const struct gl_texture_image *texImage); +extern const GLvoid * +_mesa_validate_pbo_teximage(GLcontext *ctx, GLuint dimensions, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, const GLvoid *pixels, + const struct gl_pixelstore_attrib *unpack, + const char *funcName); + +extern const GLvoid * +_mesa_validate_pbo_compressed_teximage(GLcontext *ctx, + GLsizei imageSize, const GLvoid *pixels, + const struct gl_pixelstore_attrib *packing, + const char *funcName); + +extern void +_mesa_unmap_teximage_pbo(GLcontext *ctx, + const struct gl_pixelstore_attrib *unpack); + #endif diff --git a/src/kits/opengl/mesa/main/varray.c b/src/kits/opengl/mesa/main/varray.c index 404302873b..a048509e51 100644 --- a/src/kits/opengl/mesa/main/varray.c +++ b/src/kits/opengl/mesa/main/varray.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -29,25 +29,29 @@ #include "context.h" #include "enable.h" #include "enums.h" -#include "dlist.h" -#include "texstate.h" #include "mtypes.h" #include "varray.h" - - -#ifndef GL_BOOLEAN -#define GL_BOOLEAN 0x9999 -#endif +#include "arrayobj.h" +#include "dispatch.h" /** - * Update the fields of a vertex array structure. + * Update the fields of a vertex array object. * We need to do a few special things for arrays that live in * vertex buffer objects. + * + * \param array the array to update + * \param dirtyBit which bit to set in ctx->Array.NewState for this array + * \param elementSize size of each array element, in bytes + * \param size components per element (1, 2, 3 or 4) + * \param type datatype of each component (GL_FLOAT, GL_INT, etc) + * \param stride stride between elements, in elements + * \param normalized are integer types converted to floats in [-1, 1]? + * \param ptr the address (or offset inside VBO) of the array data */ static void update_array(GLcontext *ctx, struct gl_client_array *array, - GLuint dirtyFlag, GLsizei elementSize, + GLbitfield dirtyBit, GLsizei elementSize, GLint size, GLenum type, GLsizei stride, GLboolean normalized, const GLvoid *ptr) { @@ -78,7 +82,7 @@ update_array(GLcontext *ctx, struct gl_client_array *array, array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */ ctx->NewState |= _NEW_ARRAY; - ctx->Array.NewState |= dirtyFlag; + ctx->Array.NewState |= dirtyBit; } @@ -121,7 +125,7 @@ _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) return; } - update_array(ctx, &ctx->Array.Vertex, _NEW_ARRAY_VERTEX, + update_array(ctx, &ctx->Array.ArrayObj->Vertex, _NEW_ARRAY_VERTEX, elementSize, size, type, stride, GL_FALSE, ptr); if (ctx->Driver.VertexPointer) @@ -166,8 +170,8 @@ _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr ) return; } - update_array(ctx, &ctx->Array.Normal, _NEW_ARRAY_NORMAL, - elementSize, 3, type, stride, GL_FALSE, ptr); + update_array(ctx, &ctx->Array.ArrayObj->Normal, _NEW_ARRAY_NORMAL, + elementSize, 3, type, stride, GL_TRUE, ptr); if (ctx->Driver.NormalPointer) ctx->Driver.NormalPointer( ctx, type, stride, ptr ); @@ -224,8 +228,8 @@ _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) return; } - update_array(ctx, &ctx->Array.Color, _NEW_ARRAY_COLOR0, - elementSize, size, type, stride, GL_FALSE, ptr); + update_array(ctx, &ctx->Array.ArrayObj->Color, _NEW_ARRAY_COLOR0, + elementSize, size, type, stride, GL_TRUE, ptr); if (ctx->Driver.ColorPointer) ctx->Driver.ColorPointer( ctx, size, type, stride, ptr ); @@ -256,7 +260,7 @@ _mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr) return; } - update_array(ctx, &ctx->Array.FogCoord, _NEW_ARRAY_FOGCOORD, + update_array(ctx, &ctx->Array.ArrayObj->FogCoord, _NEW_ARRAY_FOGCOORD, elementSize, 1, type, stride, GL_FALSE, ptr); if (ctx->Driver.FogCoordPointer) @@ -297,7 +301,7 @@ _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr) return; } - update_array(ctx, &ctx->Array.Index, _NEW_ARRAY_INDEX, + update_array(ctx, &ctx->Array.ArrayObj->Index, _NEW_ARRAY_INDEX, elementSize, 1, type, stride, GL_FALSE, ptr); if (ctx->Driver.IndexPointer) @@ -356,8 +360,8 @@ _mesa_SecondaryColorPointerEXT(GLint size, GLenum type, return; } - update_array(ctx, &ctx->Array.SecondaryColor, _NEW_ARRAY_COLOR1, - elementSize, size, type, stride, GL_FALSE, ptr); + update_array(ctx, &ctx->Array.ArrayObj->SecondaryColor, _NEW_ARRAY_COLOR1, + elementSize, size, type, stride, GL_TRUE, ptr); if (ctx->Driver.SecondaryColorPointer) ctx->Driver.SecondaryColorPointer( ctx, size, type, stride, ptr ); @@ -405,7 +409,8 @@ _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, return; } - update_array(ctx, &ctx->Array.TexCoord[unit], _NEW_ARRAY_TEXCOORD(unit), + update_array(ctx, &ctx->Array.ArrayObj->TexCoord[unit], + _NEW_ARRAY_TEXCOORD(unit), elementSize, size, type, stride, GL_FALSE, ptr); if (ctx->Driver.TexCoordPointer) @@ -424,8 +429,8 @@ _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr) return; } - update_array(ctx, &ctx->Array.EdgeFlag, _NEW_ARRAY_EDGEFLAG, - sizeof(GLboolean), 1, GL_BOOLEAN, stride, GL_FALSE, ptr); + update_array(ctx, &ctx->Array.ArrayObj->EdgeFlag, _NEW_ARRAY_EDGEFLAG, + sizeof(GLboolean), 1, GL_UNSIGNED_BYTE, stride, GL_FALSE, ptr); if (ctx->Driver.EdgeFlagPointer) ctx->Driver.EdgeFlagPointer( ctx, stride, ptr ); @@ -437,11 +442,12 @@ void GLAPIENTRY _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) { + const GLboolean normalized = GL_FALSE; GLsizei elementSize; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (index >= VERT_ATTRIB_MAX) { + if (index >= MAX_VERTEX_PROGRAM_ATTRIBS) { _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerNV(index)"); return; } @@ -480,8 +486,9 @@ _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type, return; } - update_array(ctx, &ctx->Array.VertexAttrib[index], _NEW_ARRAY_ATTRIB(index), - elementSize, size, type, stride, GL_FALSE, ptr); + update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index], + _NEW_ARRAY_ATTRIB(index), + elementSize, size, type, stride, normalized, ptr); if (ctx->Driver.VertexAttribPointer) ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr ); @@ -499,7 +506,7 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type, GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (index >= ctx->Const.MaxVertexProgramAttribs) { + if (index >= ctx->Const.VertexProgram.MaxAttribs) { _mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(index)"); return; } @@ -551,13 +558,12 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type, return; } - update_array(ctx, &ctx->Array.VertexAttrib[index], _NEW_ARRAY_ATTRIB(index), + update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index], + _NEW_ARRAY_ATTRIB(index), elementSize, size, type, stride, normalized, ptr); - /* XXX fix if (ctx->Driver.VertexAttribPointer) - ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr ); - */ + ctx->Driver.VertexAttribPointer(ctx, index, size, type, stride, ptr); } #endif @@ -754,6 +760,7 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer) _mesa_DisableClientState( GL_EDGE_FLAG_ARRAY ); _mesa_DisableClientState( GL_INDEX_ARRAY ); + /* XXX also disable secondary color and generic arrays? */ /* Texcoords */ if (tflag) { @@ -851,7 +858,7 @@ _mesa_MultiDrawArraysEXT( GLenum mode, GLint *first, for (i = 0; i < primcount; i++) { if (count[i] > 0) { - (ctx->Exec->DrawArrays)(mode, first[i], count[i]); + CALL_DrawArrays(ctx->Exec, (mode, first[i], count[i])); } } } @@ -869,7 +876,7 @@ _mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type, for (i = 0; i < primcount; i++) { if (count[i] > 0) { - (ctx->Exec->DrawElements)(mode, count[i], type, indices[i]); + CALL_DrawElements(ctx->Exec, (mode, count[i], type, indices[i])); } } } @@ -889,7 +896,7 @@ _mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first, for ( i = 0 ; i < primcount ; i++ ) { if ( count[i] > 0 ) { GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride)); - (ctx->Exec->DrawArrays)( m, first[i], count[i] ); + CALL_DrawArrays(ctx->Exec, ( m, first[i], count[i] )); } } } @@ -911,84 +918,20 @@ _mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count, for ( i = 0 ; i < primcount ; i++ ) { if ( count[i] > 0 ) { GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride)); - (ctx->Exec->DrawElements)( m, count[i], type, indices[i] ); + CALL_DrawElements(ctx->Exec, ( m, count[i], type, indices[i] )); } } } -/**********************************************************************/ -/***** Initialization *****/ -/**********************************************************************/ - +/** + * Initialize vertex array state for given context. + */ void -_mesa_init_varray( GLcontext * ctx ) +_mesa_init_varray(GLcontext *ctx) { - GLuint i; + ctx->Array.DefaultArrayObj = _mesa_new_array_object(ctx, 0); + ctx->Array.ArrayObj = ctx->Array.DefaultArrayObj; - /* Vertex arrays */ - ctx->Array.Vertex.Size = 4; - ctx->Array.Vertex.Type = GL_FLOAT; - ctx->Array.Vertex.Stride = 0; - ctx->Array.Vertex.StrideB = 0; - ctx->Array.Vertex.Ptr = NULL; - ctx->Array.Vertex.Enabled = GL_FALSE; - ctx->Array.Vertex.Flags = CA_CLIENT_DATA; - ctx->Array.Normal.Type = GL_FLOAT; - ctx->Array.Normal.Stride = 0; - ctx->Array.Normal.StrideB = 0; - ctx->Array.Normal.Ptr = NULL; - ctx->Array.Normal.Enabled = GL_FALSE; - ctx->Array.Normal.Flags = CA_CLIENT_DATA; - ctx->Array.Color.Size = 4; - ctx->Array.Color.Type = GL_FLOAT; - ctx->Array.Color.Stride = 0; - ctx->Array.Color.StrideB = 0; - ctx->Array.Color.Ptr = NULL; - ctx->Array.Color.Enabled = GL_FALSE; - ctx->Array.Color.Flags = CA_CLIENT_DATA; - ctx->Array.SecondaryColor.Size = 4; - ctx->Array.SecondaryColor.Type = GL_FLOAT; - ctx->Array.SecondaryColor.Stride = 0; - ctx->Array.SecondaryColor.StrideB = 0; - ctx->Array.SecondaryColor.Ptr = NULL; - ctx->Array.SecondaryColor.Enabled = GL_FALSE; - ctx->Array.SecondaryColor.Flags = CA_CLIENT_DATA; - ctx->Array.FogCoord.Size = 1; - ctx->Array.FogCoord.Type = GL_FLOAT; - ctx->Array.FogCoord.Stride = 0; - ctx->Array.FogCoord.StrideB = 0; - ctx->Array.FogCoord.Ptr = NULL; - ctx->Array.FogCoord.Enabled = GL_FALSE; - ctx->Array.FogCoord.Flags = CA_CLIENT_DATA; - ctx->Array.Index.Type = GL_FLOAT; - ctx->Array.Index.Stride = 0; - ctx->Array.Index.StrideB = 0; - ctx->Array.Index.Ptr = NULL; - ctx->Array.Index.Enabled = GL_FALSE; - ctx->Array.Index.Flags = CA_CLIENT_DATA; - for (i = 0; i < MAX_TEXTURE_UNITS; i++) { - ctx->Array.TexCoord[i].Size = 4; - ctx->Array.TexCoord[i].Type = GL_FLOAT; - ctx->Array.TexCoord[i].Stride = 0; - ctx->Array.TexCoord[i].StrideB = 0; - ctx->Array.TexCoord[i].Ptr = NULL; - ctx->Array.TexCoord[i].Enabled = GL_FALSE; - ctx->Array.TexCoord[i].Flags = CA_CLIENT_DATA; - } - ctx->Array.EdgeFlag.Stride = 0; - ctx->Array.EdgeFlag.StrideB = 0; - ctx->Array.EdgeFlag.Ptr = NULL; - ctx->Array.EdgeFlag.Enabled = GL_FALSE; - ctx->Array.EdgeFlag.Flags = CA_CLIENT_DATA; ctx->Array.ActiveTexture = 0; /* GL_ARB_multitexture */ - for (i = 0; i < VERT_ATTRIB_MAX; i++) { - ctx->Array.VertexAttrib[i].Size = 4; - ctx->Array.VertexAttrib[i].Type = GL_FLOAT; - ctx->Array.VertexAttrib[i].Stride = 0; - ctx->Array.VertexAttrib[i].StrideB = 0; - ctx->Array.VertexAttrib[i].Ptr = NULL; - ctx->Array.VertexAttrib[i].Enabled = GL_FALSE; - ctx->Array.VertexAttrib[i].Flags = CA_CLIENT_DATA; - } } diff --git a/src/kits/opengl/mesa/main/version.h b/src/kits/opengl/mesa/main/version.h index 760c542740..e6196050b9 100644 --- a/src/kits/opengl/mesa/main/version.h +++ b/src/kits/opengl/mesa/main/version.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.3 + * Version: 6.5.2 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -29,9 +29,9 @@ /* Mesa version */ #define MESA_MAJOR 6 -#define MESA_MINOR 3 -#define MESA_PATCH 0 -#define MESA_VERSION_STRING "6.3" +#define MESA_MINOR 5 +#define MESA_PATCH 2 +#define MESA_VERSION_STRING "6.5.2" /* To make version comparison easy */ #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) diff --git a/src/kits/opengl/mesa/main/vtxfmt.c b/src/kits/opengl/mesa/main/vtxfmt.c index 1496fd1c00..0204979003 100644 --- a/src/kits/opengl/mesa/main/vtxfmt.c +++ b/src/kits/opengl/mesa/main/vtxfmt.c @@ -48,104 +48,111 @@ #define PRE_LOOPBACK( FUNC ) \ { \ GET_CURRENT_CONTEXT(ctx); \ - struct gl_tnl_module *tnl = &(ctx->TnlModule); \ - typedef void (*func_ptr_t)(void); \ + struct gl_tnl_module * const tnl = &(ctx->TnlModule); \ + const int tmp_offset = _gloffset_ ## FUNC ; \ \ ASSERT( tnl->Current ); \ ASSERT( tnl->SwapCount < NUM_VERTEX_FORMAT_ENTRIES ); \ + ASSERT( tmp_offset >= 0 ); \ \ /* Save the swapped function's dispatch entry so it can be */ \ /* restored later. */ \ - tnl->Swapped[tnl->SwapCount][0] = (void *)&(ctx->Exec->FUNC); \ - *(func_ptr_t *)(tnl->Swapped[tnl->SwapCount]+1) = (func_ptr_t)TAG(FUNC); \ + tnl->Swapped[tnl->SwapCount].location = & (((_glapi_proc *)ctx->Exec)[tmp_offset]); \ + tnl->Swapped[tnl->SwapCount].function = (_glapi_proc)TAG(FUNC); \ tnl->SwapCount++; \ \ if ( 0 ) \ _mesa_debug(ctx, " swapping gl" #FUNC"...\n" ); \ \ /* Install the tnl function pointer. */ \ - ctx->Exec->FUNC = tnl->Current->FUNC; \ + SET_ ## FUNC(ctx->Exec, tnl->Current->FUNC); \ } #define TAG(x) neutral_##x #include "vtxfmt_tmp.h" - +/** + * Use the per-vertex functions found in to initialze the given + * API dispatch table. + */ static void install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt ) { - tab->ArrayElement = vfmt->ArrayElement; - tab->Color3f = vfmt->Color3f; - tab->Color3fv = vfmt->Color3fv; - tab->Color4f = vfmt->Color4f; - tab->Color4fv = vfmt->Color4fv; - tab->EdgeFlag = vfmt->EdgeFlag; - tab->EdgeFlagv = vfmt->EdgeFlagv; - tab->EvalCoord1f = vfmt->EvalCoord1f; - tab->EvalCoord1fv = vfmt->EvalCoord1fv; - tab->EvalCoord2f = vfmt->EvalCoord2f; - tab->EvalCoord2fv = vfmt->EvalCoord2fv; - tab->EvalPoint1 = vfmt->EvalPoint1; - tab->EvalPoint2 = vfmt->EvalPoint2; - tab->FogCoordfEXT = vfmt->FogCoordfEXT; - tab->FogCoordfvEXT = vfmt->FogCoordfvEXT; - tab->Indexf = vfmt->Indexf; - tab->Indexfv = vfmt->Indexfv; - tab->Materialfv = vfmt->Materialfv; - tab->MultiTexCoord1fARB = vfmt->MultiTexCoord1fARB; - tab->MultiTexCoord1fvARB = vfmt->MultiTexCoord1fvARB; - tab->MultiTexCoord2fARB = vfmt->MultiTexCoord2fARB; - tab->MultiTexCoord2fvARB = vfmt->MultiTexCoord2fvARB; - tab->MultiTexCoord3fARB = vfmt->MultiTexCoord3fARB; - tab->MultiTexCoord3fvARB = vfmt->MultiTexCoord3fvARB; - tab->MultiTexCoord4fARB = vfmt->MultiTexCoord4fARB; - tab->MultiTexCoord4fvARB = vfmt->MultiTexCoord4fvARB; - tab->Normal3f = vfmt->Normal3f; - tab->Normal3fv = vfmt->Normal3fv; - tab->SecondaryColor3fEXT = vfmt->SecondaryColor3fEXT; - tab->SecondaryColor3fvEXT = vfmt->SecondaryColor3fvEXT; - tab->TexCoord1f = vfmt->TexCoord1f; - tab->TexCoord1fv = vfmt->TexCoord1fv; - tab->TexCoord2f = vfmt->TexCoord2f; - tab->TexCoord2fv = vfmt->TexCoord2fv; - tab->TexCoord3f = vfmt->TexCoord3f; - tab->TexCoord3fv = vfmt->TexCoord3fv; - tab->TexCoord4f = vfmt->TexCoord4f; - tab->TexCoord4fv = vfmt->TexCoord4fv; - tab->Vertex2f = vfmt->Vertex2f; - tab->Vertex2fv = vfmt->Vertex2fv; - tab->Vertex3f = vfmt->Vertex3f; - tab->Vertex3fv = vfmt->Vertex3fv; - tab->Vertex4f = vfmt->Vertex4f; - tab->Vertex4fv = vfmt->Vertex4fv; - tab->CallList = vfmt->CallList; - tab->CallLists = vfmt->CallLists; - tab->Begin = vfmt->Begin; - tab->End = vfmt->End; - tab->VertexAttrib1fNV = vfmt->VertexAttrib1fNV; - tab->VertexAttrib1fvNV = vfmt->VertexAttrib1fvNV; - tab->VertexAttrib2fNV = vfmt->VertexAttrib2fNV; - tab->VertexAttrib2fvNV = vfmt->VertexAttrib2fvNV; - tab->VertexAttrib3fNV = vfmt->VertexAttrib3fNV; - tab->VertexAttrib3fvNV = vfmt->VertexAttrib3fvNV; - tab->VertexAttrib4fNV = vfmt->VertexAttrib4fNV; - tab->VertexAttrib4fvNV = vfmt->VertexAttrib4fvNV; - tab->VertexAttrib1fARB = vfmt->VertexAttrib1fARB; - tab->VertexAttrib1fvARB = vfmt->VertexAttrib1fvARB; - tab->VertexAttrib2fARB = vfmt->VertexAttrib2fARB; - tab->VertexAttrib2fvARB = vfmt->VertexAttrib2fvARB; - tab->VertexAttrib3fARB = vfmt->VertexAttrib3fARB; - tab->VertexAttrib3fvARB = vfmt->VertexAttrib3fvARB; - tab->VertexAttrib4fARB = vfmt->VertexAttrib4fARB; - tab->VertexAttrib4fvARB = vfmt->VertexAttrib4fvARB; - tab->Rectf = vfmt->Rectf; - tab->DrawArrays = vfmt->DrawArrays; - tab->DrawElements = vfmt->DrawElements; - tab->DrawRangeElements = vfmt->DrawRangeElements; - tab->EvalMesh1 = vfmt->EvalMesh1; - tab->EvalMesh2 = vfmt->EvalMesh2; + SET_ArrayElement(tab, vfmt->ArrayElement); + SET_Color3f(tab, vfmt->Color3f); + SET_Color3fv(tab, vfmt->Color3fv); + SET_Color4f(tab, vfmt->Color4f); + SET_Color4fv(tab, vfmt->Color4fv); + SET_EdgeFlag(tab, vfmt->EdgeFlag); + SET_EvalCoord1f(tab, vfmt->EvalCoord1f); + SET_EvalCoord1fv(tab, vfmt->EvalCoord1fv); + SET_EvalCoord2f(tab, vfmt->EvalCoord2f); + SET_EvalCoord2fv(tab, vfmt->EvalCoord2fv); + SET_EvalPoint1(tab, vfmt->EvalPoint1); + SET_EvalPoint2(tab, vfmt->EvalPoint2); + SET_FogCoordfEXT(tab, vfmt->FogCoordfEXT); + SET_FogCoordfvEXT(tab, vfmt->FogCoordfvEXT); + SET_Indexf(tab, vfmt->Indexf); + SET_Indexfv(tab, vfmt->Indexfv); + SET_Materialfv(tab, vfmt->Materialfv); + SET_MultiTexCoord1fARB(tab, vfmt->MultiTexCoord1fARB); + SET_MultiTexCoord1fvARB(tab, vfmt->MultiTexCoord1fvARB); + SET_MultiTexCoord2fARB(tab, vfmt->MultiTexCoord2fARB); + SET_MultiTexCoord2fvARB(tab, vfmt->MultiTexCoord2fvARB); + SET_MultiTexCoord3fARB(tab, vfmt->MultiTexCoord3fARB); + SET_MultiTexCoord3fvARB(tab, vfmt->MultiTexCoord3fvARB); + SET_MultiTexCoord4fARB(tab, vfmt->MultiTexCoord4fARB); + SET_MultiTexCoord4fvARB(tab, vfmt->MultiTexCoord4fvARB); + SET_Normal3f(tab, vfmt->Normal3f); + SET_Normal3fv(tab, vfmt->Normal3fv); + SET_SecondaryColor3fEXT(tab, vfmt->SecondaryColor3fEXT); + SET_SecondaryColor3fvEXT(tab, vfmt->SecondaryColor3fvEXT); + SET_TexCoord1f(tab, vfmt->TexCoord1f); + SET_TexCoord1fv(tab, vfmt->TexCoord1fv); + SET_TexCoord2f(tab, vfmt->TexCoord2f); + SET_TexCoord2fv(tab, vfmt->TexCoord2fv); + SET_TexCoord3f(tab, vfmt->TexCoord3f); + SET_TexCoord3fv(tab, vfmt->TexCoord3fv); + SET_TexCoord4f(tab, vfmt->TexCoord4f); + SET_TexCoord4fv(tab, vfmt->TexCoord4fv); + SET_Vertex2f(tab, vfmt->Vertex2f); + SET_Vertex2fv(tab, vfmt->Vertex2fv); + SET_Vertex3f(tab, vfmt->Vertex3f); + SET_Vertex3fv(tab, vfmt->Vertex3fv); + SET_Vertex4f(tab, vfmt->Vertex4f); + SET_Vertex4fv(tab, vfmt->Vertex4fv); + SET_CallList(tab, vfmt->CallList); + SET_CallLists(tab, vfmt->CallLists); + SET_Begin(tab, vfmt->Begin); + SET_End(tab, vfmt->End); + SET_Rectf(tab, vfmt->Rectf); + SET_DrawArrays(tab, vfmt->DrawArrays); + SET_DrawElements(tab, vfmt->DrawElements); + SET_DrawRangeElements(tab, vfmt->DrawRangeElements); + SET_EvalMesh1(tab, vfmt->EvalMesh1); + SET_EvalMesh2(tab, vfmt->EvalMesh2); ASSERT(tab->EvalMesh2); + + /* GL_NV_vertex_program */ + SET_VertexAttrib1fNV(tab, vfmt->VertexAttrib1fNV); + SET_VertexAttrib1fvNV(tab, vfmt->VertexAttrib1fvNV); + SET_VertexAttrib2fNV(tab, vfmt->VertexAttrib2fNV); + SET_VertexAttrib2fvNV(tab, vfmt->VertexAttrib2fvNV); + SET_VertexAttrib3fNV(tab, vfmt->VertexAttrib3fNV); + SET_VertexAttrib3fvNV(tab, vfmt->VertexAttrib3fvNV); + SET_VertexAttrib4fNV(tab, vfmt->VertexAttrib4fNV); + SET_VertexAttrib4fvNV(tab, vfmt->VertexAttrib4fvNV); +#if FEATURE_ARB_vertex_program + SET_VertexAttrib1fARB(tab, vfmt->VertexAttrib1fARB); + SET_VertexAttrib1fvARB(tab, vfmt->VertexAttrib1fvARB); + SET_VertexAttrib2fARB(tab, vfmt->VertexAttrib2fARB); + SET_VertexAttrib2fvARB(tab, vfmt->VertexAttrib2fvARB); + SET_VertexAttrib3fARB(tab, vfmt->VertexAttrib3fARB); + SET_VertexAttrib3fvARB(tab, vfmt->VertexAttrib3fvARB); + SET_VertexAttrib4fARB(tab, vfmt->VertexAttrib4fARB); + SET_VertexAttrib4fvARB(tab, vfmt->VertexAttrib4fvARB); +#endif } @@ -177,7 +184,7 @@ void _mesa_restore_exec_vtxfmt( GLcontext *ctx ) /* Restore the neutral tnl module wrapper. */ for ( i = 0 ; i < tnl->SwapCount ; i++ ) { - *(void **)tnl->Swapped[i][0] = tnl->Swapped[i][1]; + *(tnl->Swapped[i].location) = tnl->Swapped[i].function; } tnl->SwapCount = 0; diff --git a/src/kits/opengl/mesa/main/vtxfmt_tmp.h b/src/kits/opengl/mesa/main/vtxfmt_tmp.h index 8b0bd79184..783b06558d 100644 --- a/src/kits/opengl/mesa/main/vtxfmt_tmp.h +++ b/src/kits/opengl/mesa/main/vtxfmt_tmp.h @@ -29,313 +29,310 @@ #define PRE_LOOPBACK( FUNC ) #endif +#include "dispatch.h" +#include "glapioffsets.h" + static void GLAPIENTRY TAG(ArrayElement)( GLint i ) { PRE_LOOPBACK( ArrayElement ); - GL_CALL(ArrayElement)( i ); + CALL_ArrayElement(GET_DISPATCH(), ( i )); } static void GLAPIENTRY TAG(Color3f)( GLfloat r, GLfloat g, GLfloat b ) { PRE_LOOPBACK( Color3f ); - GL_CALL(Color3f)( r, g, b ); + CALL_Color3f(GET_DISPATCH(), ( r, g, b )); } static void GLAPIENTRY TAG(Color3fv)( const GLfloat *v ) { PRE_LOOPBACK( Color3fv ); - GL_CALL(Color3fv)( v ); + CALL_Color3fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(Color4f)( GLfloat r, GLfloat g, GLfloat b, GLfloat a ) { PRE_LOOPBACK( Color4f ); - GL_CALL(Color4f)( r, g, b, a ); + CALL_Color4f(GET_DISPATCH(), ( r, g, b, a )); } static void GLAPIENTRY TAG(Color4fv)( const GLfloat *v ) { PRE_LOOPBACK( Color4fv ); - GL_CALL(Color4fv)( v ); + CALL_Color4fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(EdgeFlag)( GLboolean e ) { PRE_LOOPBACK( EdgeFlag ); - GL_CALL(EdgeFlag)( e ); -} - -static void GLAPIENTRY TAG(EdgeFlagv)( const GLboolean *v ) -{ - PRE_LOOPBACK( EdgeFlagv ); - GL_CALL(EdgeFlagv)( v ); + CALL_EdgeFlag(GET_DISPATCH(), ( e )); } static void GLAPIENTRY TAG(EvalCoord1f)( GLfloat s ) { PRE_LOOPBACK( EvalCoord1f ); - GL_CALL(EvalCoord1f)( s ); + CALL_EvalCoord1f(GET_DISPATCH(), ( s )); } static void GLAPIENTRY TAG(EvalCoord1fv)( const GLfloat *v ) { PRE_LOOPBACK( EvalCoord1fv ); - GL_CALL(EvalCoord1fv)( v ); + CALL_EvalCoord1fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(EvalCoord2f)( GLfloat s, GLfloat t ) { PRE_LOOPBACK( EvalCoord2f ); - GL_CALL(EvalCoord2f)( s, t ); + CALL_EvalCoord2f(GET_DISPATCH(), ( s, t )); } static void GLAPIENTRY TAG(EvalCoord2fv)( const GLfloat *v ) { PRE_LOOPBACK( EvalCoord2fv ); - GL_CALL(EvalCoord2fv)( v ); + CALL_EvalCoord2fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(EvalPoint1)( GLint i ) { PRE_LOOPBACK( EvalPoint1 ); - GL_CALL(EvalPoint1)( i ); + CALL_EvalPoint1(GET_DISPATCH(), ( i )); } static void GLAPIENTRY TAG(EvalPoint2)( GLint i, GLint j ) { PRE_LOOPBACK( EvalPoint2 ); - GL_CALL(EvalPoint2)( i, j ); + CALL_EvalPoint2(GET_DISPATCH(), ( i, j )); } static void GLAPIENTRY TAG(FogCoordfEXT)( GLfloat f ) { PRE_LOOPBACK( FogCoordfEXT ); - GL_CALL(FogCoordfEXT)( f ); + CALL_FogCoordfEXT(GET_DISPATCH(), ( f )); } static void GLAPIENTRY TAG(FogCoordfvEXT)( const GLfloat *v ) { PRE_LOOPBACK( FogCoordfvEXT ); - GL_CALL(FogCoordfvEXT)( v ); + CALL_FogCoordfvEXT(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(Indexf)( GLfloat f ) { PRE_LOOPBACK( Indexf ); - GL_CALL(Indexf)( f ); + CALL_Indexf(GET_DISPATCH(), ( f )); } static void GLAPIENTRY TAG(Indexfv)( const GLfloat *v ) { PRE_LOOPBACK( Indexfv ); - GL_CALL(Indexfv)( v ); + CALL_Indexfv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(Materialfv)( GLenum face, GLenum pname, const GLfloat *v ) { PRE_LOOPBACK( Materialfv ); - GL_CALL(Materialfv)( face, pname, v ); + CALL_Materialfv(GET_DISPATCH(), ( face, pname, v )); } static void GLAPIENTRY TAG(MultiTexCoord1fARB)( GLenum target, GLfloat a ) { PRE_LOOPBACK( MultiTexCoord1fARB ); - GL_CALL(MultiTexCoord1fARB)( target, a ); + CALL_MultiTexCoord1fARB(GET_DISPATCH(), ( target, a )); } static void GLAPIENTRY TAG(MultiTexCoord1fvARB)( GLenum target, const GLfloat *tc ) { PRE_LOOPBACK( MultiTexCoord1fvARB ); - GL_CALL(MultiTexCoord1fvARB)( target, tc ); + CALL_MultiTexCoord1fvARB(GET_DISPATCH(), ( target, tc )); } static void GLAPIENTRY TAG(MultiTexCoord2fARB)( GLenum target, GLfloat s, GLfloat t ) { PRE_LOOPBACK( MultiTexCoord2fARB ); - GL_CALL(MultiTexCoord2fARB)( target, s, t ); + CALL_MultiTexCoord2fARB(GET_DISPATCH(), ( target, s, t )); } static void GLAPIENTRY TAG(MultiTexCoord2fvARB)( GLenum target, const GLfloat *tc ) { PRE_LOOPBACK( MultiTexCoord2fvARB ); - GL_CALL(MultiTexCoord2fvARB)( target, tc ); + CALL_MultiTexCoord2fvARB(GET_DISPATCH(), ( target, tc )); } static void GLAPIENTRY TAG(MultiTexCoord3fARB)( GLenum target, GLfloat s, GLfloat t, GLfloat r ) { PRE_LOOPBACK( MultiTexCoord3fARB ); - GL_CALL(MultiTexCoord3fARB)( target, s, t, r ); + CALL_MultiTexCoord3fARB(GET_DISPATCH(), ( target, s, t, r )); } static void GLAPIENTRY TAG(MultiTexCoord3fvARB)( GLenum target, const GLfloat *tc ) { PRE_LOOPBACK( MultiTexCoord3fvARB ); - GL_CALL(MultiTexCoord3fvARB)( target, tc ); + CALL_MultiTexCoord3fvARB(GET_DISPATCH(), ( target, tc )); } static void GLAPIENTRY TAG(MultiTexCoord4fARB)( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ) { PRE_LOOPBACK( MultiTexCoord4fARB ); - GL_CALL(MultiTexCoord4fARB)( target, s, t, r, q ); + CALL_MultiTexCoord4fARB(GET_DISPATCH(), ( target, s, t, r, q )); } static void GLAPIENTRY TAG(MultiTexCoord4fvARB)( GLenum target, const GLfloat *tc ) { PRE_LOOPBACK( MultiTexCoord4fvARB ); - GL_CALL(MultiTexCoord4fvARB)( target, tc ); + CALL_MultiTexCoord4fvARB(GET_DISPATCH(), ( target, tc )); } static void GLAPIENTRY TAG(Normal3f)( GLfloat x, GLfloat y, GLfloat z ) { PRE_LOOPBACK( Normal3f ); - GL_CALL(Normal3f)( x, y, z ); + CALL_Normal3f(GET_DISPATCH(), ( x, y, z )); } static void GLAPIENTRY TAG(Normal3fv)( const GLfloat *v ) { PRE_LOOPBACK( Normal3fv ); - GL_CALL(Normal3fv)( v ); + CALL_Normal3fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(SecondaryColor3fEXT)( GLfloat r, GLfloat g, GLfloat b ) { PRE_LOOPBACK( SecondaryColor3fEXT ); - GL_CALL(SecondaryColor3fEXT)( r, g, b ); + CALL_SecondaryColor3fEXT(GET_DISPATCH(), ( r, g, b )); } static void GLAPIENTRY TAG(SecondaryColor3fvEXT)( const GLfloat *v ) { PRE_LOOPBACK( SecondaryColor3fvEXT ); - GL_CALL(SecondaryColor3fvEXT)( v ); + CALL_SecondaryColor3fvEXT(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(TexCoord1f)( GLfloat s ) { PRE_LOOPBACK( TexCoord1f ); - GL_CALL(TexCoord1f)( s ); + CALL_TexCoord1f(GET_DISPATCH(), ( s )); } static void GLAPIENTRY TAG(TexCoord1fv)( const GLfloat *tc ) { PRE_LOOPBACK( TexCoord1fv ); - GL_CALL(TexCoord1fv)( tc ); + CALL_TexCoord1fv(GET_DISPATCH(), ( tc )); } static void GLAPIENTRY TAG(TexCoord2f)( GLfloat s, GLfloat t ) { PRE_LOOPBACK( TexCoord2f ); - GL_CALL(TexCoord2f)( s, t ); + CALL_TexCoord2f(GET_DISPATCH(), ( s, t )); } static void GLAPIENTRY TAG(TexCoord2fv)( const GLfloat *tc ) { PRE_LOOPBACK( TexCoord2fv ); - GL_CALL(TexCoord2fv)( tc ); + CALL_TexCoord2fv(GET_DISPATCH(), ( tc )); } static void GLAPIENTRY TAG(TexCoord3f)( GLfloat s, GLfloat t, GLfloat r ) { PRE_LOOPBACK( TexCoord3f ); - GL_CALL(TexCoord3f)( s, t, r ); + CALL_TexCoord3f(GET_DISPATCH(), ( s, t, r )); } static void GLAPIENTRY TAG(TexCoord3fv)( const GLfloat *tc ) { PRE_LOOPBACK( TexCoord3fv ); - GL_CALL(TexCoord3fv)( tc ); + CALL_TexCoord3fv(GET_DISPATCH(), ( tc )); } static void GLAPIENTRY TAG(TexCoord4f)( GLfloat s, GLfloat t, GLfloat r, GLfloat q ) { PRE_LOOPBACK( TexCoord4f ); - GL_CALL(TexCoord4f)( s, t, r, q ); + CALL_TexCoord4f(GET_DISPATCH(), ( s, t, r, q )); } static void GLAPIENTRY TAG(TexCoord4fv)( const GLfloat *tc ) { PRE_LOOPBACK( TexCoord4fv ); - GL_CALL(TexCoord4fv)( tc ); + CALL_TexCoord4fv(GET_DISPATCH(), ( tc )); } static void GLAPIENTRY TAG(Vertex2f)( GLfloat x, GLfloat y ) { PRE_LOOPBACK( Vertex2f ); - GL_CALL(Vertex2f)( x, y ); + CALL_Vertex2f(GET_DISPATCH(), ( x, y )); } static void GLAPIENTRY TAG(Vertex2fv)( const GLfloat *v ) { PRE_LOOPBACK( Vertex2fv ); - GL_CALL(Vertex2fv)( v ); + CALL_Vertex2fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(Vertex3f)( GLfloat x, GLfloat y, GLfloat z ) { PRE_LOOPBACK( Vertex3f ); - GL_CALL(Vertex3f)( x, y, z ); + CALL_Vertex3f(GET_DISPATCH(), ( x, y, z )); } static void GLAPIENTRY TAG(Vertex3fv)( const GLfloat *v ) { PRE_LOOPBACK( Vertex3fv ); - GL_CALL(Vertex3fv)( v ); + CALL_Vertex3fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(Vertex4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w ) { PRE_LOOPBACK( Vertex4f ); - GL_CALL(Vertex4f)( x, y, z, w ); + CALL_Vertex4f(GET_DISPATCH(), ( x, y, z, w )); } static void GLAPIENTRY TAG(Vertex4fv)( const GLfloat *v ) { PRE_LOOPBACK( Vertex4fv ); - GL_CALL(Vertex4fv)( v ); + CALL_Vertex4fv(GET_DISPATCH(), ( v )); } static void GLAPIENTRY TAG(CallList)( GLuint i ) { PRE_LOOPBACK( CallList ); - GL_CALL(CallList)( i ); + CALL_CallList(GET_DISPATCH(), ( i )); } static void GLAPIENTRY TAG(CallLists)( GLsizei sz, GLenum type, const GLvoid *v ) { PRE_LOOPBACK( CallLists ); - GL_CALL(CallLists)( sz, type, v ); + CALL_CallLists(GET_DISPATCH(), ( sz, type, v )); } static void GLAPIENTRY TAG(Begin)( GLenum mode ) { PRE_LOOPBACK( Begin ); - GL_CALL(Begin)( mode ); + CALL_Begin(GET_DISPATCH(), ( mode )); } static void GLAPIENTRY TAG(End)( void ) { PRE_LOOPBACK( End ); - GL_CALL(End)(); + CALL_End(GET_DISPATCH(), ()); } static void GLAPIENTRY TAG(Rectf)( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ) { PRE_LOOPBACK( Rectf ); - GL_CALL(Rectf)( x1, y1, x2, y2 ); + CALL_Rectf(GET_DISPATCH(), ( x1, y1, x2, y2 )); } static void GLAPIENTRY TAG(DrawArrays)( GLenum mode, GLint start, GLsizei count ) { PRE_LOOPBACK( DrawArrays ); - GL_CALL(DrawArrays)( mode, start, count ); + CALL_DrawArrays(GET_DISPATCH(), ( mode, start, count )); } static void GLAPIENTRY TAG(DrawElements)( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ) { PRE_LOOPBACK( DrawElements ); - GL_CALL(DrawElements)( mode, count, type, indices ); + CALL_DrawElements(GET_DISPATCH(), ( mode, count, type, indices )); } static void GLAPIENTRY TAG(DrawRangeElements)( GLenum mode, GLuint start, @@ -343,117 +340,117 @@ static void GLAPIENTRY TAG(DrawRangeElements)( GLenum mode, GLuint start, GLenum type, const GLvoid *indices ) { PRE_LOOPBACK( DrawRangeElements ); - GL_CALL(DrawRangeElements)( mode, start, end, count, type, indices ); + CALL_DrawRangeElements(GET_DISPATCH(), ( mode, start, end, count, type, indices )); } static void GLAPIENTRY TAG(EvalMesh1)( GLenum mode, GLint i1, GLint i2 ) { PRE_LOOPBACK( EvalMesh1 ); - GL_CALL(EvalMesh1)( mode, i1, i2 ); + CALL_EvalMesh1(GET_DISPATCH(), ( mode, i1, i2 )); } static void GLAPIENTRY TAG(EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) { PRE_LOOPBACK( EvalMesh2 ); - GL_CALL(EvalMesh2)( mode, i1, i2, j1, j2 ); + CALL_EvalMesh2(GET_DISPATCH(), ( mode, i1, i2, j1, j2 )); } static void GLAPIENTRY TAG(VertexAttrib1fNV)( GLuint index, GLfloat x ) { PRE_LOOPBACK( VertexAttrib1fNV ); - GL_CALL(VertexAttrib1fNV)( index, x ); + CALL_VertexAttrib1fNV(GET_DISPATCH(), ( index, x )); } static void GLAPIENTRY TAG(VertexAttrib1fvNV)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib1fvNV ); - GL_CALL(VertexAttrib1fvNV)( index, v ); + CALL_VertexAttrib1fvNV(GET_DISPATCH(), ( index, v )); } static void GLAPIENTRY TAG(VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y ) { PRE_LOOPBACK( VertexAttrib2fNV ); - GL_CALL(VertexAttrib2fNV)( index, x, y ); + CALL_VertexAttrib2fNV(GET_DISPATCH(), ( index, x, y )); } static void GLAPIENTRY TAG(VertexAttrib2fvNV)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib2fvNV ); - GL_CALL(VertexAttrib2fvNV)( index, v ); + CALL_VertexAttrib2fvNV(GET_DISPATCH(), ( index, v )); } static void GLAPIENTRY TAG(VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z ) { PRE_LOOPBACK( VertexAttrib3fNV ); - GL_CALL(VertexAttrib3fNV)( index, x, y, z ); + CALL_VertexAttrib3fNV(GET_DISPATCH(), ( index, x, y, z )); } static void GLAPIENTRY TAG(VertexAttrib3fvNV)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib3fvNV ); - GL_CALL(VertexAttrib3fvNV)( index, v ); + CALL_VertexAttrib3fvNV(GET_DISPATCH(), ( index, v )); } static void GLAPIENTRY TAG(VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) { PRE_LOOPBACK( VertexAttrib4fNV ); - GL_CALL(VertexAttrib4fNV)( index, x, y, z, w ); + CALL_VertexAttrib4fNV(GET_DISPATCH(), ( index, x, y, z, w )); } static void GLAPIENTRY TAG(VertexAttrib4fvNV)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib4fvNV ); - GL_CALL(VertexAttrib4fvNV)( index, v ); + CALL_VertexAttrib4fvNV(GET_DISPATCH(), ( index, v )); } static void GLAPIENTRY TAG(VertexAttrib1fARB)( GLuint index, GLfloat x ) { PRE_LOOPBACK( VertexAttrib1fARB ); - GL_CALL(VertexAttrib1fARB)( index, x ); + CALL_VertexAttrib1fARB(GET_DISPATCH(), ( index, x )); } static void GLAPIENTRY TAG(VertexAttrib1fvARB)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib1fvARB ); - GL_CALL(VertexAttrib1fvARB)( index, v ); + CALL_VertexAttrib1fvARB(GET_DISPATCH(), ( index, v )); } static void GLAPIENTRY TAG(VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y ) { PRE_LOOPBACK( VertexAttrib2fARB ); - GL_CALL(VertexAttrib2fARB)( index, x, y ); + CALL_VertexAttrib2fARB(GET_DISPATCH(), ( index, x, y )); } static void GLAPIENTRY TAG(VertexAttrib2fvARB)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib2fvARB ); - GL_CALL(VertexAttrib2fvARB)( index, v ); + CALL_VertexAttrib2fvARB(GET_DISPATCH(), ( index, v )); } static void GLAPIENTRY TAG(VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z ) { PRE_LOOPBACK( VertexAttrib3fARB ); - GL_CALL(VertexAttrib3fARB)( index, x, y, z ); + CALL_VertexAttrib3fARB(GET_DISPATCH(), ( index, x, y, z )); } static void GLAPIENTRY TAG(VertexAttrib3fvARB)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib3fvARB ); - GL_CALL(VertexAttrib3fvARB)( index, v ); + CALL_VertexAttrib3fvARB(GET_DISPATCH(), ( index, v )); } static void GLAPIENTRY TAG(VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) { PRE_LOOPBACK( VertexAttrib4fARB ); - GL_CALL(VertexAttrib4fARB)( index, x, y, z, w ); + CALL_VertexAttrib4fARB(GET_DISPATCH(), ( index, x, y, z, w )); } static void GLAPIENTRY TAG(VertexAttrib4fvARB)( GLuint index, const GLfloat *v ) { PRE_LOOPBACK( VertexAttrib4fvARB ); - GL_CALL(VertexAttrib4fvARB)( index, v ); + CALL_VertexAttrib4fvARB(GET_DISPATCH(), ( index, v )); } @@ -464,7 +461,6 @@ static GLvertexformat TAG(vtxfmt) = { TAG(Color4f), TAG(Color4fv), TAG(EdgeFlag), - TAG(EdgeFlagv), TAG(EvalCoord1f), TAG(EvalCoord1fv), TAG(EvalCoord2f), diff --git a/src/kits/opengl/mesa/math/m_debug_clip.c b/src/kits/opengl/mesa/math/m_debug_clip.c index ae8108b88a..ab28818359 100644 --- a/src/kits/opengl/mesa/math/m_debug_clip.c +++ b/src/kits/opengl/mesa/math/m_debug_clip.c @@ -41,7 +41,7 @@ static char dummy; #endif -#ifdef DEBUG /* This code only used for debugging */ +#ifdef DEBUG_MATH /* This code only used for debugging */ static clip_func *clip_tab[2] = { _mesa_clip_tab, @@ -245,7 +245,7 @@ static int test_cliptest_function( clip_func func, int np, ref->flags = 0; dco = rco = 0; - dca = rca = CLIP_ALL_BITS; + dca = rca = CLIP_FRUSTUM_BITS; ref_cliptest[psize]( source, ref, rm, &rco, &rca ); @@ -368,4 +368,4 @@ void _math_test_all_cliptest_functions( char *description ) } -#endif /* DEBUG */ +#endif /* DEBUG_MATH */ diff --git a/src/kits/opengl/mesa/math/m_debug_norm.c b/src/kits/opengl/mesa/math/m_debug_norm.c index e403998550..11cae6bba7 100644 --- a/src/kits/opengl/mesa/math/m_debug_norm.c +++ b/src/kits/opengl/mesa/math/m_debug_norm.c @@ -43,7 +43,7 @@ static char dummy; #endif -#ifdef DEBUG /* This code only used for debugging */ +#ifdef DEBUG_MATH /* This code only used for debugging */ static int m_norm_identity[16] = { @@ -165,7 +165,7 @@ static void ref_norm_transform_normalize( const GLmatrix *mat, /* Hmmm, don't know how we could test the precalculated * length case... */ - scale = 1.0 / sqrt( len ); + scale = 1.0 / SQRTF( len ); SCALE_SCALAR_3V( out[i], scale, t ); } else { out[i][0] = out[i][1] = out[i][2] = 0; @@ -230,7 +230,7 @@ static int test_norm_function( normal_func func, int mtype, long *cycles ) case VAR: break; default: - abort(); + _mesa_exit(1); } } } @@ -241,7 +241,7 @@ static int test_norm_function( normal_func func, int mtype, long *cycles ) ASSIGN_3V( d2[i], 0.0, 0.0, 0.0 ); for ( j = 0 ; j < 3 ; j++ ) s[i][j] = rnd(); - length[i] = 1 / sqrt( LEN_SQUARED_3FV( s[i] ) ); + length[i] = 1 / SQRTF( LEN_SQUARED_3FV( s[i] ) ); } source->data = (GLfloat(*)[4]) s; @@ -339,7 +339,7 @@ void _math_test_all_normal_transform_functions( char *description ) if ( first_time ) { first_time = 0; - mesa_profile = getenv( "MESA_PROFILE" ); + mesa_profile = _mesa_getenv( "MESA_PROFILE" ); } #ifdef RUN_DEBUG_BENCHMARK @@ -375,10 +375,9 @@ void _math_test_all_normal_transform_functions( char *description ) #ifdef RUN_DEBUG_BENCHMARK if ( mesa_profile ) { _mesa_printf( "\n" ); - fflush( stdout ); } #endif } -#endif /* DEBUG */ +#endif /* DEBUG_MATH */ diff --git a/src/kits/opengl/mesa/math/m_debug_util.h b/src/kits/opengl/mesa/math/m_debug_util.h index c07cdcf7ba..f7ce4679b6 100644 --- a/src/kits/opengl/mesa/math/m_debug_util.h +++ b/src/kits/opengl/mesa/math/m_debug_util.h @@ -29,7 +29,7 @@ #define __M_DEBUG_UTIL_H__ -#ifdef DEBUG /* This code only used for debugging */ +#ifdef DEBUG_MATH /* This code only used for debugging */ /* Comment this out to deactivate the cycle counter. @@ -185,6 +185,44 @@ extern char *mesa_profile; #endif +#elif defined(__amd64__) + +#define rdtscll(val) do { \ + unsigned int a,d; \ + __asm__ volatile("rdtsc" : "=a" (a), "=d" (d)); \ + (val) = ((unsigned long)a) | (((unsigned long)d)<<32); \ +} while(0) + +/* Copied from i386 PIII version */ +#define INIT_COUNTER() \ + do { \ + int cycle_i; \ + counter_overhead = LONG_MAX; \ + for ( cycle_i = 0 ; cycle_i < 16 ; cycle_i++ ) { \ + unsigned long cycle_tmp1, cycle_tmp2; \ + rdtscll(cycle_tmp1); \ + rdtscll(cycle_tmp2); \ + if ( counter_overhead > (cycle_tmp2 - cycle_tmp1) ) { \ + counter_overhead = cycle_tmp2 - cycle_tmp1; \ + } \ + } \ + } while (0) + + +#define BEGIN_RACE(x) \ + x = LONG_MAX; \ + for ( cycle_i = 0 ; cycle_i < 10 ; cycle_i++ ) { \ + unsigned long cycle_tmp1, cycle_tmp2; \ + rdtscll(cycle_tmp1); \ + +#define END_RACE(x) \ + rdtscll(cycle_tmp2); \ + if ( x > (cycle_tmp2 - cycle_tmp1) ) { \ + x = cycle_tmp2 - cycle_tmp1; \ + } \ + } \ + x -= counter_overhead; + #elif defined(__sparc__) #define INIT_COUNTER() \ @@ -248,9 +286,9 @@ static int significand_match( GLfloat a, GLfloat b ) return 0; } - frexp( a, &a_ex ); - frexp( b, &b_ex ); - frexp( d, &d_ex ); + FREXPF( a, &a_ex ); + FREXPF( b, &b_ex ); + FREXPF( d, &d_ex ); if ( a_ex < b_ex ) { return a_ex - d_ex; @@ -277,6 +315,6 @@ enum { NIL = 0, ONE = 1, NEG = -1, VAR = 2 }; #endif -#endif /* DEBUG */ +#endif /* DEBUG_MATH */ #endif /* __M_DEBUG_UTIL_H__ */ diff --git a/src/kits/opengl/mesa/math/m_debug_xform.c b/src/kits/opengl/mesa/math/m_debug_xform.c index b634527b24..2af837cf64 100644 --- a/src/kits/opengl/mesa/math/m_debug_xform.c +++ b/src/kits/opengl/mesa/math/m_debug_xform.c @@ -42,7 +42,7 @@ static char dummy; #endif -#ifdef DEBUG /* This code only used for debugging */ +#ifdef DEBUG_MATH /* This code only used for debugging */ /* Overhead of profiling counter in cycles. Automatically adjusted to @@ -166,7 +166,7 @@ ALIGN16(static GLfloat, d[TEST_COUNT][4]); ALIGN16(static GLfloat, r[TEST_COUNT][4]); static int test_transform_function( transform_func func, int psize, - int mtype, long *cycles ) + int mtype, unsigned long *cycles ) { GLvector4f source[1], dest[1], ref[1]; GLmatrix mat[1]; @@ -187,7 +187,7 @@ static int test_transform_function( transform_func func, int psize, mat->type = mtypes[mtype]; m = mat->m; - ASSERT( ((GLuint)m & 15) == 0 ); + ASSERT( ((long)m & 15) == 0 ); init_matrix( m ); @@ -279,19 +279,19 @@ static int test_transform_function( transform_func func, int psize, void _math_test_all_transform_functions( char *description ) { int psize, mtype; - long benchmark_tab[4][7]; + unsigned long benchmark_tab[4][7]; static int first_time = 1; if ( first_time ) { first_time = 0; - mesa_profile = getenv( "MESA_PROFILE" ); + mesa_profile = _mesa_getenv( "MESA_PROFILE" ); } #ifdef RUN_DEBUG_BENCHMARK if ( mesa_profile ) { if ( !counter_overhead ) { INIT_COUNTER(); - _mesa_printf("counter overhead: %ld cycles\n\n", counter_overhead ); + _mesa_printf("counter overhead: %lu cycles\n\n", counter_overhead ); } _mesa_printf("transform results after hooking in %s functions:\n", description ); } @@ -310,7 +310,7 @@ void _math_test_all_transform_functions( char *description ) for ( mtype = 0 ; mtype < 7 ; mtype++ ) { for ( psize = 1 ; psize <= 4 ; psize++ ) { transform_func func = _mesa_transform_tab[psize][mtypes[mtype]]; - long *cycles = &(benchmark_tab[psize-1][mtype]); + unsigned long *cycles = &(benchmark_tab[psize-1][mtype]); if ( test_transform_function( func, psize, mtype, cycles ) == 0 ) { char buf[100]; @@ -335,4 +335,4 @@ void _math_test_all_transform_functions( char *description ) } -#endif /* DEBUG */ +#endif /* DEBUG_MATH */ diff --git a/src/kits/opengl/mesa/math/m_matrix.c b/src/kits/opengl/mesa/math/m_matrix.c index a1a625c57e..b4ba1bc2a0 100644 --- a/src/kits/opengl/mesa/math/m_matrix.c +++ b/src/kits/opengl/mesa/math/m_matrix.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.2 + * Version: 6.3 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -42,6 +42,79 @@ #include "m_matrix.h" +/** + * \defgroup MatFlags MAT_FLAG_XXX-flags + * + * Bitmasks to indicate different kinds of 4x4 matrices in GLmatrix::flags + * It would be nice to make all these flags private to m_matrix.c + */ +/*@{*/ +#define MAT_FLAG_IDENTITY 0 /**< is an identity matrix flag. + * (Not actually used - the identity + * matrix is identified by the absense + * of all other flags.) + */ +#define MAT_FLAG_GENERAL 0x1 /**< is a general matrix flag */ +#define MAT_FLAG_ROTATION 0x2 /**< is a rotation matrix flag */ +#define MAT_FLAG_TRANSLATION 0x4 /**< is a translation matrix flag */ +#define MAT_FLAG_UNIFORM_SCALE 0x8 /**< is an uniform scaling matrix flag */ +#define MAT_FLAG_GENERAL_SCALE 0x10 /**< is a general scaling matrix flag */ +#define MAT_FLAG_GENERAL_3D 0x20 /**< general 3D matrix flag */ +#define MAT_FLAG_PERSPECTIVE 0x40 /**< is a perspective proj matrix flag */ +#define MAT_FLAG_SINGULAR 0x80 /**< is a singular matrix flag */ +#define MAT_DIRTY_TYPE 0x100 /**< matrix type is dirty */ +#define MAT_DIRTY_FLAGS 0x200 /**< matrix flags are dirty */ +#define MAT_DIRTY_INVERSE 0x400 /**< matrix inverse is dirty */ + +/** angle preserving matrix flags mask */ +#define MAT_FLAGS_ANGLE_PRESERVING (MAT_FLAG_ROTATION | \ + MAT_FLAG_TRANSLATION | \ + MAT_FLAG_UNIFORM_SCALE) + +/** geometry related matrix flags mask */ +#define MAT_FLAGS_GEOMETRY (MAT_FLAG_GENERAL | \ + MAT_FLAG_ROTATION | \ + MAT_FLAG_TRANSLATION | \ + MAT_FLAG_UNIFORM_SCALE | \ + MAT_FLAG_GENERAL_SCALE | \ + MAT_FLAG_GENERAL_3D | \ + MAT_FLAG_PERSPECTIVE | \ + MAT_FLAG_SINGULAR) + +/** length preserving matrix flags mask */ +#define MAT_FLAGS_LENGTH_PRESERVING (MAT_FLAG_ROTATION | \ + MAT_FLAG_TRANSLATION) + + +/** 3D (non-perspective) matrix flags mask */ +#define MAT_FLAGS_3D (MAT_FLAG_ROTATION | \ + MAT_FLAG_TRANSLATION | \ + MAT_FLAG_UNIFORM_SCALE | \ + MAT_FLAG_GENERAL_SCALE | \ + MAT_FLAG_GENERAL_3D) + +/** dirty matrix flags mask */ +#define MAT_DIRTY (MAT_DIRTY_TYPE | \ + MAT_DIRTY_FLAGS | \ + MAT_DIRTY_INVERSE) + +/*@}*/ + + +/** + * Test geometry related matrix flags. + * + * \param mat a pointer to a GLmatrix structure. + * \param a flags mask. + * + * \returns non-zero if all geometry related matrix flags are contained within + * the mask, or zero otherwise. + */ +#define TEST_MAT_FLAGS(mat, a) \ + ((MAT_FLAGS_GEOMETRY & (~(a)) & ((mat)->flags) ) == 0) + + + /** * Names of the corresponding GLmatrixtype values. */ @@ -188,7 +261,8 @@ _math_matrix_mul_floats( GLmatrix *dest, const GLfloat *m ) { dest->flags |= (MAT_FLAG_GENERAL | MAT_DIRTY_TYPE | - MAT_DIRTY_INVERSE); + MAT_DIRTY_INVERSE | + MAT_DIRTY_FLAGS); matmul4( dest->m, dest->m, m ); } @@ -308,9 +382,9 @@ static GLboolean invert_matrix_general( GLmatrix *mat ) r3[7] = 1.0, r3[4] = r3[5] = r3[6] = 0.0; /* choose pivot - or die */ - if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2); - if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1); - if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0); + if (FABSF(r3[0])>FABSF(r2[0])) SWAP_ROWS(r3, r2); + if (FABSF(r2[0])>FABSF(r1[0])) SWAP_ROWS(r2, r1); + if (FABSF(r1[0])>FABSF(r0[0])) SWAP_ROWS(r1, r0); if (0.0 == r0[0]) return GL_FALSE; /* eliminate first variable */ @@ -328,8 +402,8 @@ static GLboolean invert_matrix_general( GLmatrix *mat ) if (s != 0.0) { r1[7] -= m1 * s; r2[7] -= m2 * s; r3[7] -= m3 * s; } /* choose pivot - or die */ - if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2); - if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1); + if (FABSF(r3[1])>FABSF(r2[1])) SWAP_ROWS(r3, r2); + if (FABSF(r2[1])>FABSF(r1[1])) SWAP_ROWS(r2, r1); if (0.0 == r1[1]) return GL_FALSE; /* eliminate second variable */ @@ -342,7 +416,7 @@ static GLboolean invert_matrix_general( GLmatrix *mat ) s = r1[7]; if (0.0 != s) { r2[7] -= m2 * s; r3[7] -= m3 * s; } /* choose pivot - or die */ - if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2); + if (FABSF(r3[2])>FABSF(r2[2])) SWAP_ROWS(r3, r2); if (0.0 == r2[2]) return GL_FALSE; /* eliminate third variable */ @@ -730,8 +804,8 @@ _math_matrix_rotate( GLmatrix *mat, GLfloat m[16]; GLboolean optimized; - s = (GLfloat) sin( angle * DEG2RAD ); - c = (GLfloat) cos( angle * DEG2RAD ); + s = (GLfloat) _mesa_sin( angle * DEG2RAD ); + c = (GLfloat) _mesa_cos( angle * DEG2RAD ); MEMCPY(m, Identity, sizeof(GLfloat)*16); optimized = GL_FALSE; @@ -1001,7 +1075,7 @@ _math_matrix_scale( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z ) m[2] *= x; m[6] *= y; m[10] *= z; m[3] *= x; m[7] *= y; m[11] *= z; - if (fabs(x - y) < 1e-8 && fabs(x - z) < 1e-8) + if (FABSF(x - y) < 1e-8 && FABSF(x - z) < 1e-8) mat->flags |= MAT_FLAG_UNIFORM_SCALE; else mat->flags |= MAT_FLAG_GENERAL_SCALE; @@ -1036,6 +1110,26 @@ _math_matrix_translate( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z ) MAT_DIRTY_INVERSE); } + +/** + * Set matrix to do viewport and depthrange mapping. + * Transforms Normalized Device Coords to window/Z values. + */ +void +_math_matrix_viewport(GLmatrix *m, GLint x, GLint y, GLint width, GLint height, + GLfloat zNear, GLfloat zFar, GLfloat depthMax) +{ + m->m[MAT_SX] = (GLfloat) width / 2.0F; + m->m[MAT_TX] = m->m[MAT_SX] + x; + m->m[MAT_SY] = (GLfloat) height / 2.0F; + m->m[MAT_TY] = m->m[MAT_SY] + y; + m->m[MAT_SZ] = depthMax * ((zFar - zNear) / 2.0F); + m->m[MAT_TZ] = depthMax * ((zFar - zNear) / 2.0F + zNear); + m->flags = MAT_FLAG_GENERAL_SCALE | MAT_FLAG_TRANSLATION; + m->type = MATRIX_3D_NO_ROT; +} + + /** * Set a matrix to the identity matrix. * @@ -1295,6 +1389,47 @@ _math_matrix_analyse( GLmatrix *mat ) /*@}*/ +/** + * Test if the given matrix preserves vector lengths. + */ +GLboolean +_math_matrix_is_length_preserving( const GLmatrix *m ) +{ + return TEST_MAT_FLAGS( m, MAT_FLAGS_LENGTH_PRESERVING); +} + + +/** + * Test if the given matrix does any rotation. + * (or perhaps if the upper-left 3x3 is non-identity) + */ +GLboolean +_math_matrix_has_rotation( const GLmatrix *m ) +{ + if (m->flags & (MAT_FLAG_GENERAL | + MAT_FLAG_ROTATION | + MAT_FLAG_GENERAL_3D | + MAT_FLAG_PERSPECTIVE)) + return GL_TRUE; + else + return GL_FALSE; +} + + +GLboolean +_math_matrix_is_general_scale( const GLmatrix *m ) +{ + return (m->flags & MAT_FLAG_GENERAL_SCALE) ? GL_TRUE : GL_FALSE; +} + + +GLboolean +_math_matrix_is_dirty( const GLmatrix *m ) +{ + return (m->flags & MAT_DIRTY) ? GL_TRUE : GL_FALSE; +} + + /**********************************************************************/ /** \name Matrix setup */ /*@{*/ diff --git a/src/kits/opengl/mesa/math/m_matrix.h b/src/kits/opengl/mesa/math/m_matrix.h index 04a5a3c2bc..e8303f3ac5 100644 --- a/src/kits/opengl/mesa/math/m_matrix.h +++ b/src/kits/opengl/mesa/math/m_matrix.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.2 + * Version: 6.3 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -48,77 +48,6 @@ /*@}*/ -/** - * \defgroup MatFlags MAT_FLAG_XXX-flags - * - * Bitmasks to indicate different kinds of 4x4 matrices in GLmatrix::flags - * It would be nice to make all these flags private to m_matrix.c - */ -/*@{*/ -#define MAT_FLAG_IDENTITY 0 /**< is an identity matrix flag. - * (Not actually used - the identity - * matrix is identified by the absense - * of all other flags.) - */ -#define MAT_FLAG_GENERAL 0x1 /**< is a general matrix flag */ -#define MAT_FLAG_ROTATION 0x2 /**< is a rotation matrix flag */ -#define MAT_FLAG_TRANSLATION 0x4 /**< is a translation matrix flag */ -#define MAT_FLAG_UNIFORM_SCALE 0x8 /**< is an uniform scaling matrix flag */ -#define MAT_FLAG_GENERAL_SCALE 0x10 /**< is a general scaling matrix flag */ -#define MAT_FLAG_GENERAL_3D 0x20 /**< general 3D matrix flag */ -#define MAT_FLAG_PERSPECTIVE 0x40 /**< is a perspective proj matrix flag */ -#define MAT_FLAG_SINGULAR 0x80 /**< is a singular matrix flag */ -#define MAT_DIRTY_TYPE 0x100 /**< matrix type is dirty */ -#define MAT_DIRTY_FLAGS 0x200 /**< matrix flags are dirty */ -#define MAT_DIRTY_INVERSE 0x400 /**< matrix inverse is dirty */ - -/** angle preserving matrix flags mask */ -#define MAT_FLAGS_ANGLE_PRESERVING (MAT_FLAG_ROTATION | \ - MAT_FLAG_TRANSLATION | \ - MAT_FLAG_UNIFORM_SCALE) - -/** length preserving matrix flags mask */ -#define MAT_FLAGS_LENGTH_PRESERVING (MAT_FLAG_ROTATION | \ - MAT_FLAG_TRANSLATION) - -/** 3D (non-perspective) matrix flags mask */ -#define MAT_FLAGS_3D (MAT_FLAG_ROTATION | \ - MAT_FLAG_TRANSLATION | \ - MAT_FLAG_UNIFORM_SCALE | \ - MAT_FLAG_GENERAL_SCALE | \ - MAT_FLAG_GENERAL_3D) - -/** geometry related matrix flags mask */ -#define MAT_FLAGS_GEOMETRY (MAT_FLAG_GENERAL | \ - MAT_FLAG_ROTATION | \ - MAT_FLAG_TRANSLATION | \ - MAT_FLAG_UNIFORM_SCALE | \ - MAT_FLAG_GENERAL_SCALE | \ - MAT_FLAG_GENERAL_3D | \ - MAT_FLAG_PERSPECTIVE | \ - MAT_FLAG_SINGULAR) - -/** dirty matrix flags mask */ -#define MAT_DIRTY (MAT_DIRTY_TYPE | \ - MAT_DIRTY_FLAGS | \ - MAT_DIRTY_INVERSE) - -/*@}*/ - - -/** - * Test geometry related matrix flags. - * - * \param mat a pointer to a GLmatrix structure. - * \param a flags mask. - * - * \returns non-zero if all geometry related matrix flags are contained within - * the mask, or zero otherwise. - */ -#define TEST_MAT_FLAGS(mat, a) \ - ((MAT_FLAGS_GEOMETRY & (~(a)) & ((mat)->flags) ) == 0) - - /** * Different kinds of 4x4 transformation matrices. * We use these to select specific optimized vertex transformation routines. @@ -188,6 +117,10 @@ _math_matrix_frustum( GLmatrix *mat, GLfloat bottom, GLfloat top, GLfloat nearval, GLfloat farval ); +extern void +_math_matrix_viewport(GLmatrix *m, GLint x, GLint y, GLint width, GLint height, + GLfloat zNear, GLfloat zFar, GLfloat depthMax); + extern void _math_matrix_set_identity( GLmatrix *dest ); @@ -200,6 +133,17 @@ _math_matrix_analyse( GLmatrix *mat ); extern void _math_matrix_print( const GLmatrix *m ); +extern GLboolean +_math_matrix_is_length_preserving( const GLmatrix *m ); + +extern GLboolean +_math_matrix_has_rotation( const GLmatrix *m ); + +extern GLboolean +_math_matrix_is_general_scale( const GLmatrix *m ); + +extern GLboolean +_math_matrix_is_dirty( const GLmatrix *m ); /** diff --git a/src/kits/opengl/mesa/math/m_trans_tmp.h b/src/kits/opengl/mesa/math/m_trans_tmp.h index c1f0f76743..08fb4d1e9c 100644 --- a/src/kits/opengl/mesa/math/m_trans_tmp.h +++ b/src/kits/opengl/mesa/math/m_trans_tmp.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -22,17 +22,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* - * New (3.1) transformation code written by Keith Whitwell. +/** + * \brief Templates for vector conversions. + * \author Keith Whitwell. */ - -/* KW: This file also included by tnl/trans_elt.c to build code - * specific to the implementation of array-elements in the - * tnl module. - */ - - #ifdef DEST_4F static void DEST_4F( GLfloat (*t)[4], CONST void *ptr, @@ -59,8 +53,8 @@ static void DEST_4F( GLfloat (*t)[4], -#ifdef DEST_4FC -static void DEST_4FC( GLfloat (*t)[4], +#ifdef DEST_4FN +static void DEST_4FN( GLfloat (*t)[4], CONST void *ptr, GLuint stride, ARGS ) @@ -74,18 +68,18 @@ static void DEST_4FC( GLfloat (*t)[4], for (i = DST_START ; i < n ; i++, NEXT_F) { CHECK { NEXT_F2; - if (SZ >= 1) t[i][0] = TRX_4FC(f, 0); - if (SZ >= 2) t[i][1] = TRX_4FC(f, 1); - if (SZ >= 3) t[i][2] = TRX_4FC(f, 2); - if (SZ == 4) t[i][3] = TRX_4FC(f, 3); else t[i][3] = 1.0; + if (SZ >= 1) t[i][0] = TRX_4FN(f, 0); + if (SZ >= 2) t[i][1] = TRX_4FN(f, 1); + if (SZ >= 3) t[i][2] = TRX_4FN(f, 2); + if (SZ == 4) t[i][3] = TRX_4FN(f, 3); else t[i][3] = 1.0; } } } #endif -#ifdef DEST_3F -static void DEST_3F( GLfloat (*t)[3], +#ifdef DEST_3FN +static void DEST_3FN( GLfloat (*t)[3], CONST void *ptr, GLuint stride, ARGS ) @@ -98,9 +92,9 @@ static void DEST_3F( GLfloat (*t)[3], for (i = DST_START ; i < n ; i++, NEXT_F) { CHECK { NEXT_F2; - t[i][0] = TRX_3F(f, 0); - t[i][1] = TRX_3F(f, 1); - t[i][2] = TRX_3F(f, 2); + t[i][0] = TRX_3FN(f, 0); + t[i][1] = TRX_3FN(f, 1); + t[i][2] = TRX_3FN(f, 2); } } } @@ -231,9 +225,9 @@ static void INIT(void) ASSERT(SZ == 1); TAB(_1f)[SRC_IDX] = DEST_1F; #endif -#ifdef DEST_3F +#ifdef DEST_3FN ASSERT(SZ == 3); - TAB(_3f)[SRC_IDX] = DEST_3F; + TAB(_3fn)[SRC_IDX] = DEST_3FN; #endif #ifdef DEST_4UB TAB(_4ub)[SZ][SRC_IDX] = DEST_4UB; @@ -244,8 +238,8 @@ static void INIT(void) #ifdef DEST_4F TAB(_4f)[SZ][SRC_IDX] = DEST_4F; #endif -#ifdef DEST_4FC - TAB(_4fc)[SZ][SRC_IDX] = DEST_4FC; +#ifdef DEST_4FN + TAB(_4fn)[SZ][SRC_IDX] = DEST_4FN; #endif } @@ -266,14 +260,14 @@ static void INIT(void) #ifdef DEST_4US #undef DEST_4US #endif -#ifdef DEST_3F -#undef DEST_3F +#ifdef DEST_3FN +#undef DEST_3FN #endif #ifdef DEST_4F #undef DEST_4F #endif -#ifdef DEST_4FC -#undef DEST_4FC +#ifdef DEST_4FN +#undef DEST_4FN #endif #ifdef DEST_1F #undef DEST_1F diff --git a/src/kits/opengl/mesa/math/m_translate.c b/src/kits/opengl/mesa/math/m_translate.c index 14beabb978..c7423e9d9d 100644 --- a/src/kits/opengl/mesa/math/m_translate.c +++ b/src/kits/opengl/mesa/math/m_translate.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -22,8 +22,9 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* - * New (3.1) transformation code written by Keith Whitwell. +/** + * \brief Translate vectors of numbers between various types. + * \author Keith Whitwell. */ @@ -71,7 +72,7 @@ typedef void (*trans_4f_func)(GLfloat (*to)[4], GLuint start, GLuint n ); -typedef void (*trans_3f_func)(GLfloat (*to)[3], +typedef void (*trans_3fn_func)(GLfloat (*to)[3], CONST void *ptr, GLuint stride, GLuint start, @@ -91,11 +92,11 @@ typedef void (*trans_3f_func)(GLfloat (*to)[3], static trans_1f_func _math_trans_1f_tab[MAX_TYPES]; static trans_1ui_func _math_trans_1ui_tab[MAX_TYPES]; static trans_1ub_func _math_trans_1ub_tab[MAX_TYPES]; -static trans_3f_func _math_trans_3f_tab[MAX_TYPES]; +static trans_3fn_func _math_trans_3fn_tab[MAX_TYPES]; static trans_4ub_func _math_trans_4ub_tab[5][MAX_TYPES]; static trans_4us_func _math_trans_4us_tab[5][MAX_TYPES]; static trans_4f_func _math_trans_4f_tab[5][MAX_TYPES]; -static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; +static trans_4f_func _math_trans_4fn_tab[5][MAX_TYPES]; #define PTR_ELT(ptr, elt) (((SRC *)ptr)[elt]) @@ -113,13 +114,18 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; -/* GL_BYTE +/** + * Translate from GL_BYTE. */ #define SRC GLbyte #define SRC_IDX TYPE_IDX(GL_BYTE) -#define TRX_3F(f,n) BYTE_TO_FLOAT( PTR_ELT(f,n) ) +#define TRX_3FN(f,n) BYTE_TO_FLOAT( PTR_ELT(f,n) ) +#if 1 #define TRX_4F(f,n) BYTE_TO_FLOAT( PTR_ELT(f,n) ) -#define TRX_4FC(f,n) BYTE_TO_FLOAT( PTR_ELT(f,n) ) +#else +#define TRX_4F(f,n) (GLfloat)( PTR_ELT(f,n) ) +#endif +#define TRX_4FN(f,n) BYTE_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_UB(ub, f,n) ub = BYTE_TO_UBYTE( PTR_ELT(f,n) ) #define TRX_US(ch, f,n) ch = BYTE_TO_USHORT( PTR_ELT(f,n) ) #define TRX_UI(f,n) (PTR_ELT(f,n) < 0 ? 0 : (GLuint) PTR_ELT(f,n)) @@ -128,7 +134,7 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 4 #define INIT init_trans_4_GLbyte_raw #define DEST_4F trans_4_GLbyte_4f_raw -#define DEST_4FC trans_4_GLbyte_4fc_raw +#define DEST_4FN trans_4_GLbyte_4fn_raw #define DEST_4UB trans_4_GLbyte_4ub_raw #define DEST_4US trans_4_GLbyte_4us_raw #include "m_trans_tmp.h" @@ -136,43 +142,44 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 3 #define INIT init_trans_3_GLbyte_raw #define DEST_4F trans_3_GLbyte_4f_raw -#define DEST_4FC trans_3_GLbyte_4fc_raw +#define DEST_4FN trans_3_GLbyte_4fn_raw #define DEST_4UB trans_3_GLbyte_4ub_raw #define DEST_4US trans_3_GLbyte_4us_raw -#define DEST_3F trans_3_GLbyte_3f_raw +#define DEST_3FN trans_3_GLbyte_3fn_raw #include "m_trans_tmp.h" #define SZ 2 #define INIT init_trans_2_GLbyte_raw #define DEST_4F trans_2_GLbyte_4f_raw -#define DEST_4FC trans_2_GLbyte_4fc_raw +#define DEST_4FN trans_2_GLbyte_4fn_raw #include "m_trans_tmp.h" #define SZ 1 #define INIT init_trans_1_GLbyte_raw #define DEST_4F trans_1_GLbyte_4f_raw -#define DEST_4FC trans_1_GLbyte_4fc_raw +#define DEST_4FN trans_1_GLbyte_4fn_raw #define DEST_1UB trans_1_GLbyte_1ub_raw #define DEST_1UI trans_1_GLbyte_1ui_raw #include "m_trans_tmp.h" #undef SRC -#undef TRX_3F +#undef TRX_3FN #undef TRX_4F -#undef TRX_4FC +#undef TRX_4FN #undef TRX_UB #undef TRX_US #undef TRX_UI #undef SRC_IDX -/* GL_UNSIGNED_BYTE +/** + * Translate from GL_UNSIGNED_BYTE. */ #define SRC GLubyte #define SRC_IDX TYPE_IDX(GL_UNSIGNED_BYTE) -#define TRX_3F(f,n) UBYTE_TO_FLOAT(PTR_ELT(f,n)) -#define TRX_4F(f,n) UBYTE_TO_FLOAT(PTR_ELT(f,n)) -#define TRX_4FC(f,n) UBYTE_TO_FLOAT(PTR_ELT(f,n)) +#define TRX_3FN(f,n) UBYTE_TO_FLOAT(PTR_ELT(f,n)) +#define TRX_4F(f,n) (GLfloat)( PTR_ELT(f,n) ) +#define TRX_4FN(f,n) UBYTE_TO_FLOAT(PTR_ELT(f,n)) #define TRX_UB(ub, f,n) ub = PTR_ELT(f,n) #define TRX_US(us, f,n) us = UBYTE_TO_USHORT(PTR_ELT(f,n)) #define TRX_UI(f,n) (GLuint)PTR_ELT(f,n) @@ -182,7 +189,7 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 4 #define INIT init_trans_4_GLubyte_raw #define DEST_4F trans_4_GLubyte_4f_raw -#define DEST_4FC trans_4_GLubyte_4fc_raw +#define DEST_4FN trans_4_GLubyte_4fn_raw #define DEST_4US trans_4_GLubyte_4us_raw #include "m_trans_tmp.h" @@ -191,9 +198,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define INIT init_trans_3_GLubyte_raw #define DEST_4UB trans_3_GLubyte_4ub_raw #define DEST_4US trans_3_GLubyte_4us_raw -#define DEST_3F trans_3_GLubyte_3f_raw +#define DEST_3FN trans_3_GLubyte_3fn_raw #define DEST_4F trans_3_GLubyte_4f_raw -#define DEST_4FC trans_3_GLubyte_4fc_raw +#define DEST_4FN trans_3_GLubyte_4fn_raw #include "m_trans_tmp.h" @@ -205,9 +212,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #undef SRC #undef SRC_IDX -#undef TRX_3F +#undef TRX_3FN #undef TRX_4F -#undef TRX_4FC +#undef TRX_4FN #undef TRX_UB #undef TRX_US #undef TRX_UI @@ -217,9 +224,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; */ #define SRC GLshort #define SRC_IDX TYPE_IDX(GL_SHORT) -#define TRX_3F(f,n) SHORT_TO_FLOAT( PTR_ELT(f,n) ) +#define TRX_3FN(f,n) SHORT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_4F(f,n) (GLfloat)( PTR_ELT(f,n) ) -#define TRX_4FC(f,n) (GLfloat)( PTR_ELT(f,n) ) +#define TRX_4FN(f,n) SHORT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_UB(ub, f,n) ub = SHORT_TO_UBYTE(PTR_ELT(f,n)) #define TRX_US(us, f,n) us = SHORT_TO_USHORT(PTR_ELT(f,n)) #define TRX_UI(f,n) (PTR_ELT(f,n) < 0 ? 0 : (GLuint) PTR_ELT(f,n)) @@ -228,7 +235,7 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 4 #define INIT init_trans_4_GLshort_raw #define DEST_4F trans_4_GLshort_4f_raw -#define DEST_4FC trans_4_GLshort_4fc_raw +#define DEST_4FN trans_4_GLshort_4fn_raw #define DEST_4UB trans_4_GLshort_4ub_raw #define DEST_4US trans_4_GLshort_4us_raw #include "m_trans_tmp.h" @@ -236,22 +243,22 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 3 #define INIT init_trans_3_GLshort_raw #define DEST_4F trans_3_GLshort_4f_raw -#define DEST_4FC trans_3_GLshort_4fc_raw +#define DEST_4FN trans_3_GLshort_4fn_raw #define DEST_4UB trans_3_GLshort_4ub_raw #define DEST_4US trans_3_GLshort_4us_raw -#define DEST_3F trans_3_GLshort_3f_raw +#define DEST_3FN trans_3_GLshort_3fn_raw #include "m_trans_tmp.h" #define SZ 2 #define INIT init_trans_2_GLshort_raw #define DEST_4F trans_2_GLshort_4f_raw -#define DEST_4FC trans_2_GLshort_4fc_raw +#define DEST_4FN trans_2_GLshort_4fn_raw #include "m_trans_tmp.h" #define SZ 1 #define INIT init_trans_1_GLshort_raw #define DEST_4F trans_1_GLshort_4f_raw -#define DEST_4FC trans_1_GLshort_4fc_raw +#define DEST_4FN trans_1_GLshort_4fn_raw #define DEST_1UB trans_1_GLshort_1ub_raw #define DEST_1UI trans_1_GLshort_1ui_raw #include "m_trans_tmp.h" @@ -259,9 +266,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #undef SRC #undef SRC_IDX -#undef TRX_3F +#undef TRX_3FN #undef TRX_4F -#undef TRX_4FC +#undef TRX_4FN #undef TRX_UB #undef TRX_US #undef TRX_UI @@ -271,18 +278,18 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; */ #define SRC GLushort #define SRC_IDX TYPE_IDX(GL_UNSIGNED_SHORT) -#define TRX_3F(f,n) USHORT_TO_FLOAT( PTR_ELT(f,n) ) +#define TRX_3FN(f,n) USHORT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_4F(f,n) (GLfloat)( PTR_ELT(f,n) ) -#define TRX_4FC(f,n) (GLfloat)( PTR_ELT(f,n) ) +#define TRX_4FN(f,n) USHORT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_UB(ub,f,n) ub = (GLubyte) (PTR_ELT(f,n) >> 8) -#define TRX_US(us,f,n) us = (GLushort) (PTR_ELT(f,n) >> 8) +#define TRX_US(us,f,n) us = PTR_ELT(f,n) #define TRX_UI(f,n) (GLuint) PTR_ELT(f,n) #define SZ 4 #define INIT init_trans_4_GLushort_raw #define DEST_4F trans_4_GLushort_4f_raw -#define DEST_4FC trans_4_GLushort_4fc_raw +#define DEST_4FN trans_4_GLushort_4fn_raw #define DEST_4UB trans_4_GLushort_4ub_raw #define DEST_4US trans_4_GLushort_4us_raw #include "m_trans_tmp.h" @@ -290,31 +297,31 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 3 #define INIT init_trans_3_GLushort_raw #define DEST_4F trans_3_GLushort_4f_raw -#define DEST_4FC trans_3_GLushort_4fc_raw +#define DEST_4FN trans_3_GLushort_4fn_raw #define DEST_4UB trans_3_GLushort_4ub_raw #define DEST_4US trans_3_GLushort_4us_raw -#define DEST_3F trans_3_GLushort_3f_raw +#define DEST_3FN trans_3_GLushort_3fn_raw #include "m_trans_tmp.h" #define SZ 2 #define INIT init_trans_2_GLushort_raw #define DEST_4F trans_2_GLushort_4f_raw -#define DEST_4FC trans_2_GLushort_4fc_raw +#define DEST_4FN trans_2_GLushort_4fn_raw #include "m_trans_tmp.h" #define SZ 1 #define INIT init_trans_1_GLushort_raw #define DEST_4F trans_1_GLushort_4f_raw -#define DEST_4FC trans_1_GLushort_4fc_raw +#define DEST_4FN trans_1_GLushort_4fn_raw #define DEST_1UB trans_1_GLushort_1ub_raw #define DEST_1UI trans_1_GLushort_1ui_raw #include "m_trans_tmp.h" #undef SRC #undef SRC_IDX -#undef TRX_3F +#undef TRX_3FN #undef TRX_4F -#undef TRX_4FC +#undef TRX_4FN #undef TRX_UB #undef TRX_US #undef TRX_UI @@ -324,9 +331,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; */ #define SRC GLint #define SRC_IDX TYPE_IDX(GL_INT) -#define TRX_3F(f,n) INT_TO_FLOAT( PTR_ELT(f,n) ) +#define TRX_3FN(f,n) INT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_4F(f,n) (GLfloat)( PTR_ELT(f,n) ) -#define TRX_4FC(f,n) (GLfloat)( PTR_ELT(f,n) ) +#define TRX_4FN(f,n) INT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_UB(ub, f,n) ub = INT_TO_UBYTE(PTR_ELT(f,n)) #define TRX_US(us, f,n) us = INT_TO_USHORT(PTR_ELT(f,n)) #define TRX_UI(f,n) (PTR_ELT(f,n) < 0 ? 0 : (GLuint) PTR_ELT(f,n)) @@ -335,7 +342,7 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 4 #define INIT init_trans_4_GLint_raw #define DEST_4F trans_4_GLint_4f_raw -#define DEST_4FC trans_4_GLint_4fc_raw +#define DEST_4FN trans_4_GLint_4fn_raw #define DEST_4UB trans_4_GLint_4ub_raw #define DEST_4US trans_4_GLint_4us_raw #include "m_trans_tmp.h" @@ -343,22 +350,22 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 3 #define INIT init_trans_3_GLint_raw #define DEST_4F trans_3_GLint_4f_raw -#define DEST_4FC trans_3_GLint_4fc_raw +#define DEST_4FN trans_3_GLint_4fn_raw #define DEST_4UB trans_3_GLint_4ub_raw #define DEST_4US trans_3_GLint_4us_raw -#define DEST_3F trans_3_GLint_3f_raw +#define DEST_3FN trans_3_GLint_3fn_raw #include "m_trans_tmp.h" #define SZ 2 #define INIT init_trans_2_GLint_raw #define DEST_4F trans_2_GLint_4f_raw -#define DEST_4FC trans_2_GLint_4fc_raw +#define DEST_4FN trans_2_GLint_4fn_raw #include "m_trans_tmp.h" #define SZ 1 #define INIT init_trans_1_GLint_raw #define DEST_4F trans_1_GLint_4f_raw -#define DEST_4FC trans_1_GLint_4fc_raw +#define DEST_4FN trans_1_GLint_4fn_raw #define DEST_1UB trans_1_GLint_1ub_raw #define DEST_1UI trans_1_GLint_1ui_raw #include "m_trans_tmp.h" @@ -366,9 +373,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #undef SRC #undef SRC_IDX -#undef TRX_3F +#undef TRX_3FN #undef TRX_4F -#undef TRX_4FC +#undef TRX_4FN #undef TRX_UB #undef TRX_US #undef TRX_UI @@ -378,9 +385,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; */ #define SRC GLuint #define SRC_IDX TYPE_IDX(GL_UNSIGNED_INT) -#define TRX_3F(f,n) INT_TO_FLOAT( PTR_ELT(f,n) ) +#define TRX_3FN(f,n) INT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_4F(f,n) (GLfloat)( PTR_ELT(f,n) ) -#define TRX_4FC(f,n) (GLfloat)( PTR_ELT(f,n) ) +#define TRX_4FN(f,n) UINT_TO_FLOAT( PTR_ELT(f,n) ) #define TRX_UB(ub, f,n) ub = (GLubyte) (PTR_ELT(f,n) >> 24) #define TRX_US(us, f,n) us = (GLshort) (PTR_ELT(f,n) >> 16) #define TRX_UI(f,n) PTR_ELT(f,n) @@ -389,7 +396,7 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 4 #define INIT init_trans_4_GLuint_raw #define DEST_4F trans_4_GLuint_4f_raw -#define DEST_4FC trans_4_GLuint_4fc_raw +#define DEST_4FN trans_4_GLuint_4fn_raw #define DEST_4UB trans_4_GLuint_4ub_raw #define DEST_4US trans_4_GLuint_4us_raw #include "m_trans_tmp.h" @@ -397,31 +404,31 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 3 #define INIT init_trans_3_GLuint_raw #define DEST_4F trans_3_GLuint_4f_raw -#define DEST_4FC trans_3_GLuint_4fc_raw +#define DEST_4FN trans_3_GLuint_4fn_raw #define DEST_4UB trans_3_GLuint_4ub_raw #define DEST_4US trans_3_GLuint_4us_raw -#define DEST_3F trans_3_GLuint_3f_raw +#define DEST_3FN trans_3_GLuint_3fn_raw #include "m_trans_tmp.h" #define SZ 2 #define INIT init_trans_2_GLuint_raw #define DEST_4F trans_2_GLuint_4f_raw -#define DEST_4FC trans_2_GLuint_4fc_raw +#define DEST_4FN trans_2_GLuint_4fn_raw #include "m_trans_tmp.h" #define SZ 1 #define INIT init_trans_1_GLuint_raw #define DEST_4F trans_1_GLuint_4f_raw -#define DEST_4FC trans_1_GLuint_4fc_raw +#define DEST_4FN trans_1_GLuint_4fn_raw #define DEST_1UB trans_1_GLuint_1ub_raw #define DEST_1UI trans_1_GLuint_1ui_raw #include "m_trans_tmp.h" #undef SRC #undef SRC_IDX -#undef TRX_3F +#undef TRX_3FN #undef TRX_4F -#undef TRX_4FC +#undef TRX_4FN #undef TRX_UB #undef TRX_US #undef TRX_UI @@ -431,9 +438,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; */ #define SRC GLdouble #define SRC_IDX TYPE_IDX(GL_DOUBLE) -#define TRX_3F(f,n) (GLfloat) PTR_ELT(f,n) +#define TRX_3FN(f,n) (GLfloat) PTR_ELT(f,n) #define TRX_4F(f,n) (GLfloat) PTR_ELT(f,n) -#define TRX_4FC(f,n) (GLfloat) PTR_ELT(f,n) +#define TRX_4FN(f,n) (GLfloat) PTR_ELT(f,n) #define TRX_UB(ub,f,n) UNCLAMPED_FLOAT_TO_UBYTE(ub, PTR_ELT(f,n)) #define TRX_US(us,f,n) UNCLAMPED_FLOAT_TO_USHORT(us, PTR_ELT(f,n)) #define TRX_UI(f,n) (GLuint) (GLint) PTR_ELT(f,n) @@ -443,7 +450,7 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 4 #define INIT init_trans_4_GLdouble_raw #define DEST_4F trans_4_GLdouble_4f_raw -#define DEST_4FC trans_4_GLdouble_4fc_raw +#define DEST_4FN trans_4_GLdouble_4fn_raw #define DEST_4UB trans_4_GLdouble_4ub_raw #define DEST_4US trans_4_GLdouble_4us_raw #include "m_trans_tmp.h" @@ -451,22 +458,22 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define SZ 3 #define INIT init_trans_3_GLdouble_raw #define DEST_4F trans_3_GLdouble_4f_raw -#define DEST_4FC trans_3_GLdouble_4fc_raw +#define DEST_4FN trans_3_GLdouble_4fn_raw #define DEST_4UB trans_3_GLdouble_4ub_raw #define DEST_4US trans_3_GLdouble_4us_raw -#define DEST_3F trans_3_GLdouble_3f_raw +#define DEST_3FN trans_3_GLdouble_3fn_raw #include "m_trans_tmp.h" #define SZ 2 #define INIT init_trans_2_GLdouble_raw #define DEST_4F trans_2_GLdouble_4f_raw -#define DEST_4FC trans_2_GLdouble_4fc_raw +#define DEST_4FN trans_2_GLdouble_4fn_raw #include "m_trans_tmp.h" #define SZ 1 #define INIT init_trans_1_GLdouble_raw #define DEST_4F trans_1_GLdouble_4f_raw -#define DEST_4FC trans_1_GLdouble_4fc_raw +#define DEST_4FN trans_1_GLdouble_4fn_raw #define DEST_1UB trans_1_GLdouble_1ub_raw #define DEST_1UI trans_1_GLdouble_1ui_raw #define DEST_1F trans_1_GLdouble_1f_raw @@ -484,28 +491,28 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #define DEST_4UB trans_4_GLfloat_4ub_raw #define DEST_4US trans_4_GLfloat_4us_raw #define DEST_4F trans_4_GLfloat_4f_raw -#define DEST_4FC trans_4_GLfloat_4fc_raw +#define DEST_4FN trans_4_GLfloat_4fn_raw #include "m_trans_tmp.h" #define SZ 3 #define INIT init_trans_3_GLfloat_raw #define DEST_4F trans_3_GLfloat_4f_raw -#define DEST_4FC trans_3_GLfloat_4fc_raw +#define DEST_4FN trans_3_GLfloat_4fn_raw #define DEST_4UB trans_3_GLfloat_4ub_raw #define DEST_4US trans_3_GLfloat_4us_raw -#define DEST_3F trans_3_GLfloat_3f_raw +#define DEST_3FN trans_3_GLfloat_3fn_raw #include "m_trans_tmp.h" #define SZ 2 #define INIT init_trans_2_GLfloat_raw #define DEST_4F trans_2_GLfloat_4f_raw -#define DEST_4FC trans_2_GLfloat_4fc_raw +#define DEST_4FN trans_2_GLfloat_4fn_raw #include "m_trans_tmp.h" #define SZ 1 #define INIT init_trans_1_GLfloat_raw #define DEST_4F trans_1_GLfloat_4f_raw -#define DEST_4FC trans_1_GLfloat_4fc_raw +#define DEST_4FN trans_1_GLfloat_4fn_raw #define DEST_1UB trans_1_GLfloat_1ub_raw #define DEST_1UI trans_1_GLfloat_1ui_raw #define DEST_1F trans_1_GLfloat_1f_raw @@ -514,9 +521,9 @@ static trans_4f_func _math_trans_4fc_tab[5][MAX_TYPES]; #undef SRC #undef SRC_IDX -#undef TRX_3F +#undef TRX_3FN #undef TRX_4F -#undef TRX_4FC +#undef TRX_4FN #undef TRX_UB #undef TRX_US #undef TRX_UI @@ -530,7 +537,7 @@ static void trans_4_GLubyte_4ub_raw(GLubyte (*t)[4], const GLubyte *f = (GLubyte *) Ptr + SRC_START * stride; GLuint i; - if (((((long) f | (long) stride)) & 3L) == 0L) { + if (((((uintptr_t) f | (uintptr_t) stride)) & 3L) == 0L) { /* Aligned. */ for (i = DST_START ; i < n ; i++, f += stride) { @@ -551,11 +558,11 @@ static void init_translate_raw(void) { MEMSET( TAB(_1ui), 0, sizeof(TAB(_1ui)) ); MEMSET( TAB(_1ub), 0, sizeof(TAB(_1ub)) ); - MEMSET( TAB(_3f), 0, sizeof(TAB(_3f)) ); + MEMSET( TAB(_3fn), 0, sizeof(TAB(_3fn)) ); MEMSET( TAB(_4ub), 0, sizeof(TAB(_4ub)) ); MEMSET( TAB(_4us), 0, sizeof(TAB(_4us)) ); MEMSET( TAB(_4f), 0, sizeof(TAB(_4f)) ); - MEMSET( TAB(_4fc), 0, sizeof(TAB(_4fc)) ); + MEMSET( TAB(_4fn), 0, sizeof(TAB(_4fn)) ); init_trans_4_GLbyte_raw(); init_trans_3_GLbyte_raw(); @@ -614,7 +621,9 @@ void _math_init_translate( void ) } - +/** + * Translate vector of values to GLfloat [1]. + */ void _math_trans_1f(GLfloat *to, CONST void *ptr, GLuint stride, @@ -625,6 +634,9 @@ void _math_trans_1f(GLfloat *to, _math_trans_1f_tab[TYPE_IDX(type)]( to, ptr, stride, start, n ); } +/** + * Translate vector of values to GLuint [1]. + */ void _math_trans_1ui(GLuint *to, CONST void *ptr, GLuint stride, @@ -635,6 +647,9 @@ void _math_trans_1ui(GLuint *to, _math_trans_1ui_tab[TYPE_IDX(type)]( to, ptr, stride, start, n ); } +/** + * Translate vector of values to GLubyte [1]. + */ void _math_trans_1ub(GLubyte *to, CONST void *ptr, GLuint stride, @@ -646,6 +661,9 @@ void _math_trans_1ub(GLubyte *to, } +/** + * Translate vector of values to GLubyte [4]. + */ void _math_trans_4ub(GLubyte (*to)[4], CONST void *ptr, GLuint stride, @@ -657,6 +675,9 @@ void _math_trans_4ub(GLubyte (*to)[4], _math_trans_4ub_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n ); } +/** + * Translate vector of values to GLchan [4]. + */ void _math_trans_4chan( GLchan (*to)[4], CONST void *ptr, GLuint stride, @@ -670,10 +691,13 @@ void _math_trans_4chan( GLchan (*to)[4], #elif CHAN_TYPE == GL_UNSIGNED_SHORT _math_trans_4us( to, ptr, stride, type, size, start, n ); #elif CHAN_TYPE == GL_FLOAT - _math_trans_4fc( to, ptr, stride, type, size, start, n ); + _math_trans_4fn( to, ptr, stride, type, size, start, n ); #endif } +/** + * Translate vector of values to GLushort [4]. + */ void _math_trans_4us(GLushort (*to)[4], CONST void *ptr, GLuint stride, @@ -685,6 +709,9 @@ void _math_trans_4us(GLushort (*to)[4], _math_trans_4us_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n ); } +/** + * Translate vector of values to GLfloat [4]. + */ void _math_trans_4f(GLfloat (*to)[4], CONST void *ptr, GLuint stride, @@ -696,7 +723,10 @@ void _math_trans_4f(GLfloat (*to)[4], _math_trans_4f_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n ); } -void _math_trans_4fc(GLfloat (*to)[4], +/** + * Translate vector of values to GLfloat[4], normalized to [-1, 1]. + */ +void _math_trans_4fn(GLfloat (*to)[4], CONST void *ptr, GLuint stride, GLenum type, @@ -704,15 +734,18 @@ void _math_trans_4fc(GLfloat (*to)[4], GLuint start, GLuint n ) { - _math_trans_4fc_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n ); + _math_trans_4fn_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n ); } -void _math_trans_3f(GLfloat (*to)[3], +/** + * Translate vector of values to GLfloat[3], normalized to [-1, 1]. + */ +void _math_trans_3fn(GLfloat (*to)[3], CONST void *ptr, GLuint stride, GLenum type, GLuint start, GLuint n ) { - _math_trans_3f_tab[TYPE_IDX(type)]( to, ptr, stride, start, n ); + _math_trans_3fn_tab[TYPE_IDX(type)]( to, ptr, stride, start, n ); } diff --git a/src/kits/opengl/mesa/math/m_translate.h b/src/kits/opengl/mesa/math/m_translate.h index 527c7063d6..0bcf96005c 100644 --- a/src/kits/opengl/mesa/math/m_translate.h +++ b/src/kits/opengl/mesa/math/m_translate.h @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 6.5.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,6 +30,21 @@ #include "mtypes.h" /* hack for GLchan */ +/** + * Array translation. + * For example, convert array of GLushort[3] to GLfloat[4]. + * The function name specifies the destination format/size. + * \param to the destination address + * \param ptr the source address + * \param stride the source stride (in bytes) between elements + * \param type the source datatype (GL_SHORT, GL_UNSIGNED_INT, etc) + * \param size number of values per element in source array (1,2,3 or 4) + * \param start first element in source array to convert + * \param n number of elements to convert + * + * Note: "element" means a tuple like GLfloat[3] or GLubyte[4]. + */ + extern void _math_trans_1f(GLfloat *to, CONST void *ptr, @@ -77,6 +91,7 @@ extern void _math_trans_4us(GLushort (*to)[4], GLuint start, GLuint n ); +/** Convert to floats w/out normalization (i.e. just cast) */ extern void _math_trans_4f(GLfloat (*to)[4], CONST void *ptr, GLuint stride, @@ -85,7 +100,8 @@ extern void _math_trans_4f(GLfloat (*to)[4], GLuint start, GLuint n ); -extern void _math_trans_4fc(GLfloat (*to)[4], +/** Convert to normalized floats in [0,1] or [-1, 1] */ +extern void _math_trans_4fn(GLfloat (*to)[4], CONST void *ptr, GLuint stride, GLenum type, @@ -93,7 +109,7 @@ extern void _math_trans_4fc(GLfloat (*to)[4], GLuint start, GLuint n ); -extern void _math_trans_3f(GLfloat (*to)[3], +extern void _math_trans_3fn(GLfloat (*to)[3], CONST void *ptr, GLuint stride, GLenum type, diff --git a/src/kits/opengl/mesa/math/m_xform.c b/src/kits/opengl/mesa/math/m_xform.c index 66dc44d954..fa3f57a8e5 100644 --- a/src/kits/opengl/mesa/math/m_xform.c +++ b/src/kits/opengl/mesa/math/m_xform.c @@ -43,7 +43,7 @@ #include "mathmod.h" -#ifdef DEBUG +#ifdef DEBUG_MATH #include "m_debug.h" #endif @@ -51,6 +51,10 @@ #include "x86/common_x86_asm.h" #endif +#ifdef USE_X86_64_ASM +#include "x86-64/x86-64.h" +#endif + #ifdef USE_SPARC_ASM #include "sparc/sparc.h" #endif @@ -200,7 +204,7 @@ _math_init_transformation( void ) init_copy0(); init_dotprod(); -#ifdef DEBUG +#ifdef DEBUG_MATH _math_test_all_transform_functions( "default" ); _math_test_all_normal_transform_functions( "default" ); _math_test_all_cliptest_functions( "default" ); @@ -212,6 +216,8 @@ _math_init_transformation( void ) _mesa_init_all_sparc_transform_asm(); #elif defined( USE_PPC_ASM ) _mesa_init_all_ppc_transform_asm(); +#elif defined( USE_X86_64_ASM ) + _mesa_init_all_x86_64_transform_asm(); #endif } diff --git a/src/kits/opengl/mesa/math/m_xform.h b/src/kits/opengl/mesa/math/m_xform.h index 63f1062fc8..99b071a46b 100644 --- a/src/kits/opengl/mesa/math/m_xform.h +++ b/src/kits/opengl/mesa/math/m_xform.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -99,7 +99,7 @@ _math_init_transformation(void); #define CLIP_FAR_BIT 0x20 #define CLIP_USER_BIT 0x40 #define CLIP_CULL_BIT 0x80 -#define CLIP_ALL_BITS 0x3f +#define CLIP_FRUSTUM_BITS 0x3f typedef GLvector4f * (_XFORMAPIP clip_func)( GLvector4f *vClip, diff --git a/src/kits/opengl/mesa/ppc/glapi_ppc.S b/src/kits/opengl/mesa/ppc/glapi_ppc.S deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/kits/opengl/mesa/shader/arbfragparse.c b/src/kits/opengl/mesa/shader/arbfragparse.c deleted file mode 100644 index 9c85d3413a..0000000000 --- a/src/kits/opengl/mesa/shader/arbfragparse.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 6.2 - * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define DEBUG_FP 0 - -/** - * \file arbfragparse.c - * ARB_fragment_program parser. - * \author Karl Rasche - */ - -#include "glheader.h" -#include "context.h" -#include "imports.h" -#include "macros.h" -#include "mtypes.h" -#include "arbprogparse.h" -#include "arbfragparse.h" - -void -_mesa_debug_fp_inst(GLint num, struct fp_instruction *fp) -{ - GLint a; - - fprintf(stderr, "PROGRAM_OUTPUT: 0x%x\n", PROGRAM_OUTPUT); - fprintf(stderr, "PROGRAM_INPUT: 0x%x\n", PROGRAM_INPUT); - fprintf(stderr, "PROGRAM_TEMPORARY: 0x%x\n", PROGRAM_TEMPORARY); - - for (a=0; aInstructions = (struct fp_instruction *) _mesa_malloc ( - sizeof(struct fp_instruction) ); - program->Instructions[0].Opcode = FP_OPCODE_END; - return; - } - - /* copy the relvant contents of the arb_program struct into the - * fragment_program struct - */ - program->Base.String = ap.Base.String; - program->Base.NumInstructions = ap.Base.NumInstructions; - program->Base.NumTemporaries = ap.Base.NumTemporaries; - program->Base.NumParameters = ap.Base.NumParameters; - program->Base.NumAttributes = ap.Base.NumAttributes; - program->Base.NumAddressRegs = ap.Base.NumAddressRegs; - - program->InputsRead = ap.InputsRead; - program->OutputsWritten = ap.OutputsWritten; - for (a=0; aTexturesUsed[a] = ap.TexturesUsed[a]; - program->NumAluInstructions = ap.NumAluInstructions; - program->NumTexInstructions = ap.NumTexInstructions; - program->NumTexIndirections = ap.NumTexIndirections; - program->Parameters = ap.Parameters; - program->FogOption = ap.FogOption; - -#if DEBUG_FP - _mesa_debug_fp_inst(ap.Base.NumInstructions, ap.FPInstructions); -#endif - - program->Instructions = ap.FPInstructions; -} diff --git a/src/kits/opengl/mesa/shader/arbprogparse.c b/src/kits/opengl/mesa/shader/arbprogparse.c index 678d40bb68..5a61f30193 100644 --- a/src/kits/opengl/mesa/shader/arbprogparse.c +++ b/src/kits/opengl/mesa/shader/arbprogparse.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.2 + * Version: 6.5.1 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -30,24 +30,53 @@ * \author Karl Rasche */ -#include "mtypes.h" #include "glheader.h" -#include "context.h" -#include "hash.h" #include "imports.h" -#include "macros.h" -#include "program.h" -#include "nvvertprog.h" -#include "nvfragprog.h" #include "arbprogparse.h" #include "grammar_mesa.h" +#include "program.h" +#include "context.h" +#include "macros.h" +#include "mtypes.h" +#include "program_instruction.h" + + +/* For ARB programs, use the NV instruction limits */ +#define MAX_INSTRUCTIONS MAX2(MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS, \ + MAX_NV_VERTEX_PROGRAM_INSTRUCTIONS) + + +/** + * This is basically a union of the vertex_program and fragment_program + * structs that we can use to parse the program into + * + * XXX we can probably get rid of this entirely someday. + */ +struct arb_program +{ + struct gl_program Base; + + GLuint Position; /* Just used for error reporting while parsing */ + GLuint MajorVersion; + GLuint MinorVersion; + + /* ARB_vertex_progmra options */ + GLboolean HintPositionInvariant; + + /* ARB_fragment_progmra options */ + GLenum PrecisionOption; /* GL_DONT_CARE, GL_NICEST or GL_FASTEST */ + GLenum FogOption; /* GL_NONE, GL_LINEAR, GL_EXP or GL_EXP2 */ + + /* ARB_fragment_program specifics */ + GLbitfield TexturesUsed[MAX_TEXTURE_IMAGE_UNITS]; + GLuint NumAluInstructions; + GLuint NumTexInstructions; + GLuint NumTexIndirections; + + GLboolean UsesKill; +}; + -#ifndef __extension__ -#if !defined(__GNUC__) || (__GNUC__ < 2) || \ - ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 7)) -# define __extension__ -#endif -#endif /* TODO: * Fragment Program Stuff: @@ -133,10 +162,11 @@ typedef GLubyte *production; + /** * This is the text describing the rules to parse the grammar */ -__extension__ static char arb_grammar_text[] = +LONGSTRING static char arb_grammar_text[] = #include "arbprogram_syn.h" ; @@ -480,25 +510,21 @@ typedef enum } var_type; -/* - * Setting an explicit field for each of the binding properties is a bit wasteful - * of space, but it should be much more clear when reading later on.. +/** + * Setting an explicit field for each of the binding properties is a bit + * wasteful of space, but it should be much more clear when reading later on.. */ struct var_cache { - GLubyte *name; + const GLubyte *name; /* don't free() - no need */ var_type type; GLuint address_binding; /* The index of the address register we should * be using */ GLuint attrib_binding; /* For type vt_attrib, see nvfragprog.h for values */ - GLuint attrib_binding_idx; /* The index into the attrib register file corresponding - * to the state in attrib_binding */ GLuint attrib_is_generic; /* If the attrib was specified through a generic * vertex attrib */ GLuint temp_binding; /* The index of the temp register we are to use */ - GLuint output_binding; /* For type vt_output, see nvfragprog.h for values */ - GLuint output_binding_idx; /* This is the index into the result register file - * corresponding to the bound result state */ + GLuint output_binding; /* Output/result register number */ struct var_cache *alias_binding; /* For type vt_alias, points to the var_cache entry * that this is aliased to */ GLuint param_binding_type; /* {PROGRAM_STATE_VAR, PROGRAM_LOCAL_PARAM, @@ -524,7 +550,6 @@ var_cache_create (struct var_cache **va) (**va).attrib_is_generic = 0; (**va).temp_binding = ~0; (**va).output_binding = ~0; - (**va).output_binding_idx = ~0; (**va).param_binding_type = ~0; (**va).param_binding_begin = ~0; (**va).param_binding_length = ~0; @@ -553,14 +578,14 @@ var_cache_append (struct var_cache **va, struct var_cache *nv) } static struct var_cache * -var_cache_find (struct var_cache *va, GLubyte * name) +var_cache_find (struct var_cache *va, const GLubyte * name) { - struct var_cache *first = va; + /*struct var_cache *first = va;*/ while (va) { - if (!strcmp ( (const char*) name, (const char*) va->name)) { + if (!_mesa_strcmp ( (const char*) name, (const char*) va->name)) { if (va->type == vt_alias) - return var_cache_find (first, va->name); + return va->alias_binding; return va; } @@ -570,11 +595,39 @@ var_cache_find (struct var_cache *va, GLubyte * name) return NULL; } + + +/** + * Called when an error is detected while parsing/compiling a program. + * Sets the ctx->Program.ErrorString field to descript and records a + * GL_INVALID_OPERATION error. + * \param position position of error in program string + * \param descrip verbose error description + */ +static void +program_error(GLcontext *ctx, GLint position, const char *descrip) +{ + if (descrip) { + const char *prefix = "glProgramString(", *suffix = ")"; + char *str = (char *) _mesa_malloc(_mesa_strlen(descrip) + + _mesa_strlen(prefix) + + _mesa_strlen(suffix) + 1); + if (str) { + _mesa_sprintf(str, "%s%s%s", prefix, descrip, suffix); + _mesa_error(ctx, GL_INVALID_OPERATION, str); + _mesa_free(str); + } + } + _mesa_set_program_error(ctx, position, descrip); +} + + + /** * constructs an integer from 4 GLubytes in LE format */ static GLuint -parse_position (GLubyte ** inst) +parse_position (const GLubyte ** inst) { GLuint value; @@ -596,10 +649,10 @@ parse_position (GLubyte ** inst) * \return The location on the var_cache corresponding the the string starting at I */ static struct var_cache * -parse_string (GLubyte ** inst, struct var_cache **vc_head, +parse_string (const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, GLuint * found) { - GLubyte *i = *inst; + const GLubyte *i = *inst; struct var_cache *va = NULL; (void) Program; @@ -614,7 +667,7 @@ parse_string (GLubyte ** inst, struct var_cache **vc_head, *found = 0; var_cache_create (&va); - va->name = i; + va->name = (const GLubyte *) i; var_cache_append (vc_head, va); @@ -622,9 +675,9 @@ parse_string (GLubyte ** inst, struct var_cache **vc_head, } static char * -parse_string_without_adding (GLubyte ** inst, struct arb_program *Program) +parse_string_without_adding (const GLubyte ** inst, struct arb_program *Program) { - GLubyte *i = *inst; + const GLubyte *i = *inst; (void) Program; *inst += _mesa_strlen ((char *) i) + 1; @@ -636,7 +689,7 @@ parse_string_without_adding (GLubyte ** inst, struct arb_program *Program) * \return -1 if we parse '-', return 1 otherwise */ static GLint -parse_sign (GLubyte ** inst) +parse_sign (const GLubyte ** inst) { /*return *(*inst)++ != '+'; */ @@ -656,7 +709,7 @@ parse_sign (GLubyte ** inst) * parses and returns signed integer */ static GLint -parse_integer (GLubyte ** inst, struct arb_program *Program) +parse_integer (const GLubyte ** inst, struct arb_program *Program) { GLint sign; GLint value; @@ -686,46 +739,67 @@ parse_integer (GLubyte ** inst, struct arb_program *Program) } /** + Accumulate this string of digits, and return them as + a large integer represented in floating point (for range). + If scale is not NULL, also accumulates a power-of-ten + integer scale factor that represents the number of digits + in the string. +*/ +static GLdouble +parse_float_string(const GLubyte ** inst, struct arb_program *Program, GLdouble *scale) +{ + GLdouble value = 0.0; + GLdouble oscale = 1.0; + + if (**inst == 0) { /* this string of digits is empty-- do nothing */ + (*inst)++; + } + else { /* nonempty string-- parse out the digits */ + while (**inst >= '0' && **inst <= '9') { + GLubyte digit = *((*inst)++); + value = value * 10.0 + (GLint) (digit - '0'); + oscale *= 10.0; + } + assert(**inst == 0); /* integer string should end with 0 */ + (*inst)++; /* skip over terminating 0 */ + Program->Position = parse_position(inst); /* skip position (from integer) */ + } + if (scale) + *scale = oscale; + return value; +} + +/** + Parse an unsigned floating-point number from this stream of tokenized + characters. Example floating-point formats supported: + 12.34 + 12 + 0.34 + .34 + 12.34e-4 */ static GLfloat -parse_float (GLubyte ** inst, struct arb_program *Program) +parse_float (const GLubyte ** inst, struct arb_program *Program) { - GLint tmp[5], denom; - GLuint leading_zeros =0; - GLfloat value = 0; + GLint exponent; + GLdouble whole, fraction, fracScale = 1.0; - tmp[1] = parse_integer (inst, Program); /* This is the integer portion of the number */ + whole = parse_float_string(inst, Program, 0); + fraction = parse_float_string(inst, Program, &fracScale); + + /* Parse signed exponent */ + exponent = parse_integer(inst, Program); /* This is the exponent */ - /* Now we grab the fractional portion of the number (the digits after - * the .). We can have leading 0's here, which parse_integer will ignore, - * so we'll check for those first - */ - while ((**inst == '0') && ( *(*inst+1) != 0)) - { - leading_zeros++; - (*inst)++; - } - tmp[2] = parse_integer (inst, Program); /* This is the fractional portion of the number */ - tmp[3] = parse_sign (inst); /* This is the sign of the exponent */ - tmp[4] = parse_integer (inst, Program); /* This is the exponent */ - - value = (GLfloat) tmp[1]; - denom = 1; - while (denom < tmp[2]) - denom *= 10; - denom *= (GLint) _mesa_pow( 10, leading_zeros ); - value += (GLfloat) tmp[2] / (GLfloat) denom; - - value *= (GLfloat) _mesa_pow (10, (GLfloat) tmp[3] * (GLfloat) tmp[4]); - - return value; + /* Assemble parts of floating-point number: */ + return (GLfloat) ((whole + fraction / fracScale) * + _mesa_pow(10.0, (GLfloat) exponent)); } /** */ static GLfloat -parse_signed_float (GLubyte ** inst, struct arb_program *Program) +parse_signed_float (const GLubyte ** inst, struct arb_program *Program) { GLint sign = parse_sign (inst); GLfloat value = parse_float (inst, Program); @@ -739,7 +813,7 @@ parse_signed_float (GLubyte ** inst, struct arb_program *Program) * \param values - The 4 component vector with the constant value in it */ static GLvoid -parse_constant (GLubyte ** inst, GLfloat *values, struct arb_program *Program, +parse_constant (const GLubyte ** inst, GLfloat *values, struct arb_program *Program, GLboolean use) { GLuint components, i; @@ -777,9 +851,10 @@ parse_constant (GLubyte ** inst, GLfloat *values, struct arb_program *Program, * \return 0 on sucess, 1 on error */ static GLuint -parse_relative_offset (GLcontext *ctx, GLubyte **inst, struct arb_program *Program, - GLint *offset) +parse_relative_offset(GLcontext *ctx, const GLubyte **inst, + struct arb_program *Program, GLint *offset) { + (void) ctx; *offset = parse_integer(inst, Program); return 0; } @@ -789,7 +864,7 @@ parse_relative_offset (GLcontext *ctx, GLubyte **inst, struct arb_program *Progr * \return 0 on sucess, 1 on error */ static GLuint -parse_color_type (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, +parse_color_type (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLint * color) { (void) ctx; (void) Program; @@ -803,17 +878,15 @@ parse_color_type (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, * \return 0 on sucess, 1 on error */ static GLuint -parse_generic_attrib_num(GLcontext *ctx, GLubyte ** inst, +parse_generic_attrib_num(GLcontext *ctx, const GLubyte ** inst, struct arb_program *Program, GLuint *attrib) { GLint i = parse_integer(inst, Program); - if ((i < 0) || (i > MAX_VERTEX_PROGRAM_ATTRIBS)) + if ((i < 0) || (i >= MAX_VERTEX_PROGRAM_ATTRIBS)) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid generic vertex attribute index"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Invalid generic vertex attribute index"); - + program_error(ctx, Program->Position, + "Invalid generic vertex attribute index"); return 1; } @@ -828,15 +901,13 @@ parse_generic_attrib_num(GLcontext *ctx, GLubyte ** inst, * \return 0 on sucess, 1 on error */ static GLuint -parse_output_color_num (GLcontext * ctx, GLubyte ** inst, +parse_output_color_num (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLuint * color) { GLint i = parse_integer (inst, Program); if ((i < 0) || (i >= (int)ctx->Const.MaxDrawBuffers)) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid draw buffer index"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Invalid draw buffer index"); + program_error(ctx, Program->Position, "Invalid draw buffer index"); return 1; } @@ -850,15 +921,13 @@ parse_output_color_num (GLcontext * ctx, GLubyte ** inst, * \return 0 on sucess, 1 on error */ static GLuint -parse_texcoord_num (GLcontext * ctx, GLubyte ** inst, +parse_texcoord_num (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLuint * coord) { GLint i = parse_integer (inst, Program); if ((i < 0) || (i >= (int)ctx->Const.MaxTextureUnits)) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid texture unit index"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Invalid texture unit index"); + program_error(ctx, Program->Position, "Invalid texture unit index"); return 1; } @@ -871,15 +940,13 @@ parse_texcoord_num (GLcontext * ctx, GLubyte ** inst, * \return 0 on sucess, 1 on error */ static GLuint -parse_weight_num (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, +parse_weight_num (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLint * coord) { *coord = parse_integer (inst, Program); if ((*coord < 0) || (*coord >= 1)) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid weight index"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Invalid weight index"); + program_error(ctx, Program->Position, "Invalid weight index"); return 1; } @@ -891,15 +958,13 @@ parse_weight_num (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, * \return 0 on sucess, 1 on error */ static GLuint -parse_clipplane_num (GLcontext * ctx, GLubyte ** inst, +parse_clipplane_num (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLint * coord) { *coord = parse_integer (inst, Program); if ((*coord < 0) || (*coord >= (GLint) ctx->Const.MaxClipPlanes)) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid clip plane index"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Invalid clip plane index"); + program_error(ctx, Program->Position, "Invalid clip plane index"); return 1; } @@ -911,7 +976,7 @@ parse_clipplane_num (GLcontext * ctx, GLubyte ** inst, * \return 0 on front face, 1 on back face */ static GLuint -parse_face_type (GLubyte ** inst) +parse_face_type (const GLubyte ** inst) { switch (*(*inst)++) { case FACE_FRONT: @@ -934,7 +999,7 @@ parse_face_type (GLubyte ** inst) * \return 0 on sucess, 1 on failure */ static GLuint -parse_matrix (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, +parse_matrix (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLint * matrix, GLint * matrix_idx, GLint * matrix_modifier) { GLubyte mat = *(*inst)++; @@ -946,10 +1011,8 @@ parse_matrix (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, *matrix = STATE_MODELVIEW; *matrix_idx = parse_integer (inst, Program); if (*matrix_idx > 0) { - _mesa_set_program_error (ctx, Program->Position, - "ARB_vertex_blend not supported\n"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "ARB_vertex_blend not supported\n"); + program_error(ctx, Program->Position, + "ARB_vertex_blend not supported"); return 1; } break; @@ -966,10 +1029,8 @@ parse_matrix (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, *matrix = STATE_TEXTURE; *matrix_idx = parse_integer (inst, Program); if (*matrix_idx >= (GLint) ctx->Const.MaxTextureUnits) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid Texture Unit"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Invalid Texture Unit: %d", *matrix_idx); + program_error(ctx, Program->Position, "Invalid Texture Unit"); + /* bad *matrix_id */ return 1; } break; @@ -977,10 +1038,8 @@ parse_matrix (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, /* This is not currently supported (ARB_matrix_palette) */ case MATRIX_PALETTE: *matrix_idx = parse_integer (inst, Program); - _mesa_set_program_error (ctx, Program->Position, - "ARB_matrix_palette not supported\n"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "ARB_matrix_palette not supported\n"); + program_error(ctx, Program->Position, + "ARB_matrix_palette not supported"); return 1; break; @@ -988,10 +1047,8 @@ parse_matrix (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, *matrix = STATE_PROGRAM; *matrix_idx = parse_integer (inst, Program); if (*matrix_idx >= (GLint) ctx->Const.MaxProgramMatrices) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid Program Matrix"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Invalid Program Matrix: %d", *matrix_idx); + program_error(ctx, Program->Position, "Invalid Program Matrix"); + /* bad *matrix_idx */ return 1; } break; @@ -1025,7 +1082,7 @@ parse_matrix (GLcontext * ctx, GLubyte ** inst, struct arb_program *Program, * \return - 0 on sucess, 1 on error */ static GLuint -parse_state_single_item (GLcontext * ctx, GLubyte ** inst, +parse_state_single_item (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLint * state_tokens) { switch (*(*inst)++) { @@ -1057,10 +1114,8 @@ parse_state_single_item (GLcontext * ctx, GLubyte ** inst, /* Check the value of state_tokens[1] against the # of lights */ if (state_tokens[1] >= (GLint) ctx->Const.MaxLights) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid Light Number"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Invalid Light Number: %d", state_tokens[1]); + program_error(ctx, Program->Position, "Invalid Light Number"); + /* bad state_tokens[1] */ return 1; } @@ -1107,10 +1162,8 @@ parse_state_single_item (GLcontext * ctx, GLubyte ** inst, /* Check the value of state_tokens[1] against the # of lights */ if (state_tokens[1] >= (GLint) ctx->Const.MaxLights) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid Light Number"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Invalid Light Number: %d", state_tokens[1]); + program_error(ctx, Program->Position, "Invalid Light Number"); + /* bad state_tokens[1] */ return 1; } @@ -1241,11 +1294,9 @@ parse_state_single_item (GLcontext * ctx, GLubyte ** inst, if ((**inst) != 0) { /* Either the last row, 0 */ state_tokens[4] = parse_integer (inst, Program); if (state_tokens[4] < state_tokens[3]) { - _mesa_set_program_error (ctx, Program->Position, - "Second matrix index less than the first"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Second matrix index (%d) less than the first (%d)", - state_tokens[4], state_tokens[3]); + program_error(ctx, Program->Position, + "Second matrix index less than the first"); + /* state_tokens[4] vs. state_tokens[3] */ return 1; } } @@ -1290,7 +1341,7 @@ parse_state_single_item (GLcontext * ctx, GLubyte ** inst, * \return - 0 on sucess, 1 on failure */ static GLuint -parse_program_single_item (GLcontext * ctx, GLubyte ** inst, +parse_program_single_item (GLcontext * ctx, const GLubyte ** inst, struct arb_program *Program, GLint * state_tokens) { if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) @@ -1306,15 +1357,13 @@ parse_program_single_item (GLcontext * ctx, GLubyte ** inst, /* Check state_tokens[2] against the number of ENV parameters available */ if (((Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) && - (state_tokens[2] >= (GLint) ctx->Const.MaxFragmentProgramEnvParams)) + (state_tokens[2] >= (GLint) ctx->Const.FragmentProgram.MaxEnvParams)) || ((Program->Base.Target == GL_VERTEX_PROGRAM_ARB) && - (state_tokens[2] >= (GLint) ctx->Const.MaxVertexProgramEnvParams))) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid Program Env Parameter"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Invalid Program Env Parameter: %d", - state_tokens[2]); + (state_tokens[2] >= (GLint) ctx->Const.VertexProgram.MaxEnvParams))) { + program_error(ctx, Program->Position, + "Invalid Program Env Parameter"); + /* bad state_tokens[2] */ return 1; } @@ -1326,15 +1375,13 @@ parse_program_single_item (GLcontext * ctx, GLubyte ** inst, /* Check state_tokens[2] against the number of LOCAL parameters available */ if (((Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) && - (state_tokens[2] >= (GLint) ctx->Const.MaxFragmentProgramLocalParams)) + (state_tokens[2] >= (GLint) ctx->Const.FragmentProgram.MaxLocalParams)) || ((Program->Base.Target == GL_VERTEX_PROGRAM_ARB) && - (state_tokens[2] >= (GLint) ctx->Const.MaxVertexProgramLocalParams))) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid Program Local Parameter"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Invalid Program Local Parameter: %d", - state_tokens[2]); + (state_tokens[2] >= (GLint) ctx->Const.VertexProgram.MaxLocalParams))) { + program_error(ctx, Program->Position, + "Invalid Program Local Parameter"); + /* bad state_tokens[2] */ return 1; } break; @@ -1369,9 +1416,9 @@ generic_attrib_check(struct var_cache *vc_head) while (curr) { if (curr->type == vt_attrib) { if (curr->attrib_is_generic) - genericAttrib[ curr->attrib_binding_idx ] = GL_TRUE; + genericAttrib[ curr->attrib_binding ] = GL_TRUE; else - explicitAttrib[ curr->attrib_binding_idx ] = GL_TRUE; + explicitAttrib[ curr->attrib_binding ] = GL_TRUE; } curr = curr->next; @@ -1388,46 +1435,41 @@ generic_attrib_check(struct var_cache *vc_head) /** * This will handle the binding side of an ATTRIB var declaration * - * \param binding - the fragment input register state, defined in nvfragprog.h - * \param binding_idx - the index in the attrib register file that binding is associated with - * \return returns 0 on sucess, 1 on error - * - * See nvfragparse.c for attrib register file layout + * \param inputReg returns the input register index, one of the + * VERT_ATTRIB_* or FRAG_ATTRIB_* values. + * \return returns 0 on success, 1 on error */ static GLuint -parse_attrib_binding (GLcontext * ctx, GLubyte ** inst, - struct arb_program *Program, GLuint * binding, - GLuint * binding_idx, GLuint *is_generic) +parse_attrib_binding(GLcontext * ctx, const GLubyte ** inst, + struct arb_program *Program, + GLuint *inputReg, GLuint *is_generic) { - GLuint texcoord; - GLint coord; GLint err = 0; *is_generic = 0; + if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) { switch (*(*inst)++) { case FRAGMENT_ATTRIB_COLOR: - err = parse_color_type (ctx, inst, Program, &coord); - *binding = FRAG_ATTRIB_COL0 + coord; - *binding_idx = 1 + coord; + { + GLint coord; + err = parse_color_type (ctx, inst, Program, &coord); + *inputReg = FRAG_ATTRIB_COL0 + coord; + } break; - case FRAGMENT_ATTRIB_TEXCOORD: - err = parse_texcoord_num (ctx, inst, Program, &texcoord); - *binding = FRAG_ATTRIB_TEX0 + texcoord; - *binding_idx = 4 + texcoord; + { + GLuint texcoord; + err = parse_texcoord_num (ctx, inst, Program, &texcoord); + *inputReg = FRAG_ATTRIB_TEX0 + texcoord; + } break; - case FRAGMENT_ATTRIB_FOGCOORD: - *binding = FRAG_ATTRIB_FOGC; - *binding_idx = 3; + *inputReg = FRAG_ATTRIB_FOGC; break; - case FRAGMENT_ATTRIB_POSITION: - *binding = FRAG_ATTRIB_WPOS; - *binding_idx = 0; + *inputReg = FRAG_ATTRIB_WPOS; break; - default: err = 1; break; @@ -1436,105 +1478,77 @@ parse_attrib_binding (GLcontext * ctx, GLubyte ** inst, else { switch (*(*inst)++) { case VERTEX_ATTRIB_POSITION: - *binding = VERT_ATTRIB_POS; - *binding_idx = 0; + *inputReg = VERT_ATTRIB_POS; break; case VERTEX_ATTRIB_WEIGHT: { GLint weight; - err = parse_weight_num (ctx, inst, Program, &weight); - *binding = VERT_ATTRIB_WEIGHT; - *binding_idx = 1; + *inputReg = VERT_ATTRIB_WEIGHT; +#if 1 + /* hack for Warcraft (see bug 8060) */ + _mesa_warning(ctx, "Application error: vertex program uses 'vertex.weight' but GL_ARB_vertex_blend not supported."); + break; +#else + program_error(ctx, Program->Position, + "ARB_vertex_blend not supported"); + return 1; +#endif } - _mesa_set_program_error (ctx, Program->Position, - "ARB_vertex_blend not supported\n"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "ARB_vertex_blend not supported\n"); - return 1; - break; case VERTEX_ATTRIB_NORMAL: - *binding = VERT_ATTRIB_NORMAL; - *binding_idx = 2; + *inputReg = VERT_ATTRIB_NORMAL; break; case VERTEX_ATTRIB_COLOR: { GLint color; - err = parse_color_type (ctx, inst, Program, &color); if (color) { - *binding = VERT_ATTRIB_COLOR1; - *binding_idx = 4; + *inputReg = VERT_ATTRIB_COLOR1; } else { - *binding = VERT_ATTRIB_COLOR0; - *binding_idx = 3; + *inputReg = VERT_ATTRIB_COLOR0; } } break; case VERTEX_ATTRIB_FOGCOORD: - *binding = VERT_ATTRIB_FOG; - *binding_idx = 5; + *inputReg = VERT_ATTRIB_FOG; break; case VERTEX_ATTRIB_TEXCOORD: { GLuint unit; - err = parse_texcoord_num (ctx, inst, Program, &unit); - *binding = VERT_ATTRIB_TEX0 + unit; - *binding_idx = 8 + unit; + *inputReg = VERT_ATTRIB_TEX0 + unit; } break; - /* It looks like we don't support this at all, atm */ case VERTEX_ATTRIB_MATRIXINDEX: - parse_integer (inst, Program); - _mesa_set_program_error (ctx, Program->Position, - "ARB_palette_matrix not supported"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "ARB_palette_matrix not supported"); + /* Not supported at this time */ + { + const char *msg = "ARB_palette_matrix not supported"; + parse_integer (inst, Program); + program_error(ctx, Program->Position, msg); + } return 1; - break; case VERTEX_ATTRIB_GENERIC: { GLuint attrib; - - if (!parse_generic_attrib_num(ctx, inst, Program, &attrib)) { + err = parse_generic_attrib_num(ctx, inst, Program, &attrib); + if (!err) { *is_generic = 1; - switch (attrib) { - case 0: - *binding = VERT_ATTRIB_POS; - break; - case 1: - *binding = VERT_ATTRIB_WEIGHT; - break; - case 2: - *binding = VERT_ATTRIB_NORMAL; - break; - case 3: - *binding = VERT_ATTRIB_COLOR0; - break; - case 4: - *binding = VERT_ATTRIB_COLOR1; - break; - case 5: - *binding = VERT_ATTRIB_FOG; - break; - case 6: - break; - case 7: - break; - default: - *binding = VERT_ATTRIB_TEX0 + (attrib-8); - break; - } - *binding_idx = attrib; + /* Add VERT_ATTRIB_GENERIC0 here because ARB_vertex_program's + * attributes do not alias the conventional vertex + * attributes. + */ + if (attrib > 0) + *inputReg = attrib + VERT_ATTRIB_GENERIC0; + else + *inputReg = 0; } } break; @@ -1545,120 +1559,107 @@ parse_attrib_binding (GLcontext * ctx, GLubyte ** inst, } } - /* Can this even happen? */ if (err) { - _mesa_set_program_error (ctx, Program->Position, - "Bad attribute binding"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Bad attribute binding"); + program_error(ctx, Program->Position, "Bad attribute binding"); } - Program->InputsRead |= (1 << *binding_idx); + Program->Base.InputsRead |= (1 << *inputReg); return err; } + /** * This translates between a binary token for an output variable type * and the mesa token for the same thing. * - * - * XXX: What is the 'name' for vertex program state? -> do we need it? - * I don't think we do; - * - * See nvfragprog.h for definitions - * - * \param inst - The parsed tokens - * \param binding - The name of the state we are binding too - * \param binding_idx - The index into the result register file that this is bound too - * - * See nvfragparse.c for the register file layout for fragment programs - * See nvvertparse.c for the register file layout for vertex programs + * \param inst The parsed tokens + * \param outputReg Returned index/number of the output register, + * one of the VERT_RESULT_* or FRAG_RESULT_* values. */ static GLuint -parse_result_binding (GLcontext * ctx, GLubyte ** inst, GLuint * binding, - GLuint * binding_idx, struct arb_program *Program) +parse_result_binding(GLcontext *ctx, const GLubyte **inst, + GLuint *outputReg, struct arb_program *Program) { - GLuint b, out_color; + const GLubyte token = *(*inst)++; - switch (*(*inst)++) { + switch (token) { case FRAGMENT_RESULT_COLOR: - /* for frag programs, this is FRAGMENT_RESULT_COLOR */ if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) { + GLuint out_color; + /* This gets result of the color buffer we're supposed to - * draw into + * draw into. This pertains to GL_ARB_draw_buffers. */ parse_output_color_num(ctx, inst, Program, &out_color); - - *binding = FRAG_OUTPUT_COLR; - - /* XXX: We're ignoring the color buffer for now. */ - *binding_idx = 0; + ASSERT(out_color < MAX_DRAW_BUFFERS); + *outputReg = FRAG_RESULT_COLR; } - /* for vtx programs, this is VERTEX_RESULT_POSITION */ else { - *binding_idx = 0; + /* for vtx programs, this is VERTEX_RESULT_POSITION */ + *outputReg = VERT_RESULT_HPOS; } break; case FRAGMENT_RESULT_DEPTH: - /* for frag programs, this is FRAGMENT_RESULT_DEPTH */ if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) { - *binding = FRAG_OUTPUT_DEPR; - *binding_idx = 2; + /* for frag programs, this is FRAGMENT_RESULT_DEPTH */ + *outputReg = FRAG_RESULT_DEPR; } - /* for vtx programs, this is VERTEX_RESULT_COLOR */ else { + /* for vtx programs, this is VERTEX_RESULT_COLOR */ GLint color_type; GLuint face_type = parse_face_type(inst); - GLint color_type_ret = parse_color_type(ctx, inst, Program, &color_type); + GLint err = parse_color_type(ctx, inst, Program, &color_type); + if (err) + return 1; - /* back face */ if (face_type) { - if (color_type_ret) return 1; - - /* secondary color */ + /* back face */ if (color_type) { - *binding_idx = 4; + *outputReg = VERT_RESULT_BFC1; /* secondary color */ } - /* primary color */ else { - *binding_idx = 3; + *outputReg = VERT_RESULT_BFC0; /* primary color */ } } - /* front face */ else { - /* secondary color */ + /* front face */ if (color_type) { - *binding_idx = 2; + *outputReg = VERT_RESULT_COL1; /* secondary color */ } /* primary color */ else { - *binding_idx = 1; + *outputReg = VERT_RESULT_COL0; /* primary color */ } } } break; case VERTEX_RESULT_FOGCOORD: - *binding_idx = 5; + *outputReg = VERT_RESULT_FOGC; break; case VERTEX_RESULT_POINTSIZE: - *binding_idx = 6; + *outputReg = VERT_RESULT_PSIZ; break; case VERTEX_RESULT_TEXCOORD: - if (parse_texcoord_num (ctx, inst, Program, &b)) - return 1; - *binding_idx = 7 + b; + { + GLuint unit; + if (parse_texcoord_num (ctx, inst, Program, &unit)) + return 1; + *outputReg = VERT_RESULT_TEX0 + unit; + } break; } - Program->OutputsWritten |= (1 << *binding_idx); + Program->Base.OutputsWritten |= (1 << *outputReg); return 0; } + /** * This handles the declaration of ATTRIB variables * @@ -1668,7 +1669,7 @@ parse_result_binding (GLcontext * ctx, GLubyte ** inst, GLuint * binding, * \return 0 on sucess, 1 on error */ static GLint -parse_attrib (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_attrib (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program) { GLuint found; @@ -1682,32 +1683,22 @@ parse_attrib (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, _mesa_malloc (_mesa_strlen ((char *) attrib_var->name) + 40); _mesa_sprintf (error_msg, "Duplicate Varible Declaration: %s", attrib_var->name); - - _mesa_set_program_error (ctx, Program->Position, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, error_msg); - + program_error(ctx, Program->Position, error_msg); _mesa_free (error_msg); return 1; } attrib_var->type = vt_attrib; - /* I think this is ok now - karl */ - /* XXX: */ - /*if (Program->type == GL_FRAGMENT_PROGRAM_ARB) */ - { - if (parse_attrib_binding - (ctx, inst, Program, &attrib_var->attrib_binding, - &attrib_var->attrib_binding_idx, &attrib_var->attrib_is_generic)) - return 1; - if (generic_attrib_check(*vc_head)) { - _mesa_set_program_error (ctx, Program->Position, - "Cannot use both a generic vertex attribute and a specific attribute of the same type"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Cannot use both a generic vertex attribute and a specific attribute of the same type"); - return 1; - } + if (parse_attrib_binding(ctx, inst, Program, &attrib_var->attrib_binding, + &attrib_var->attrib_is_generic)) + return 1; + if (generic_attrib_check(*vc_head)) { + program_error(ctx, Program->Position, + "Cannot use both a generic vertex attribute " + "and a specific attribute of the same type"); + return 1; } Program->Base.NumAttributes++; @@ -1720,20 +1711,17 @@ parse_attrib (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * if we get a signed or unsigned float for scalar constants */ static GLuint -parse_param_elements (GLcontext * ctx, GLubyte ** inst, +parse_param_elements (GLcontext * ctx, const GLubyte ** inst, struct var_cache *param_var, struct arb_program *Program, GLboolean use) { GLint idx; - GLuint err; + GLuint err = 0; GLint state_tokens[6]; GLfloat const_values[4]; - err = 0; - switch (*(*inst)++) { case PARAM_STATE_ELEMENT: - if (parse_state_single_item (ctx, inst, Program, state_tokens)) return 1; @@ -1749,9 +1737,8 @@ parse_param_elements (GLcontext * ctx, GLubyte ** inst, for (row = first_row; row <= last_row; row++) { state_tokens[3] = state_tokens[4] = row; - idx = - _mesa_add_state_reference (Program->Parameters, - state_tokens); + idx = _mesa_add_state_reference(Program->Base.Parameters, + state_tokens); if (param_var->param_binding_begin == ~0U) param_var->param_binding_begin = idx; param_var->param_binding_length++; @@ -1759,8 +1746,8 @@ parse_param_elements (GLcontext * ctx, GLubyte ** inst, } } else { - idx = - _mesa_add_state_reference (Program->Parameters, state_tokens); + idx = _mesa_add_state_reference(Program->Base.Parameters, + state_tokens); if (param_var->param_binding_begin == ~0U) param_var->param_binding_begin = idx; param_var->param_binding_length++; @@ -1769,10 +1756,9 @@ parse_param_elements (GLcontext * ctx, GLubyte ** inst, break; case PARAM_PROGRAM_ELEMENT: - if (parse_program_single_item (ctx, inst, Program, state_tokens)) return 1; - idx = _mesa_add_state_reference (Program->Parameters, state_tokens); + idx = _mesa_add_state_reference (Program->Base.Parameters, state_tokens); if (param_var->param_binding_begin == ~0U) param_var->param_binding_begin = idx; param_var->param_binding_length++; @@ -1787,48 +1773,44 @@ parse_param_elements (GLcontext * ctx, GLubyte ** inst, out_of_range = 0; if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) { if (((state_tokens[1] == STATE_ENV) - && (end_idx >= ctx->Const.MaxFragmentProgramEnvParams)) + && (end_idx >= ctx->Const.FragmentProgram.MaxEnvParams)) || ((state_tokens[1] == STATE_LOCAL) && (end_idx >= - ctx->Const.MaxFragmentProgramLocalParams))) + ctx->Const.FragmentProgram.MaxLocalParams))) out_of_range = 1; } else { if (((state_tokens[1] == STATE_ENV) - && (end_idx >= ctx->Const.MaxVertexProgramEnvParams)) + && (end_idx >= ctx->Const.VertexProgram.MaxEnvParams)) || ((state_tokens[1] == STATE_LOCAL) && (end_idx >= - ctx->Const.MaxVertexProgramLocalParams))) + ctx->Const.VertexProgram.MaxLocalParams))) out_of_range = 1; } if (out_of_range) { - _mesa_set_program_error (ctx, Program->Position, - "Invalid Program Parameter"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Invalid Program Parameter: %d", end_idx); + program_error(ctx, Program->Position, + "Invalid Program Parameter"); /*end_idx*/ return 1; } for (new_idx = start_idx; new_idx <= end_idx; new_idx++) { state_tokens[2] = new_idx; - idx = - _mesa_add_state_reference (Program->Parameters, - state_tokens); + idx = _mesa_add_state_reference(Program->Base.Parameters, + state_tokens); param_var->param_binding_length++; Program->Base.NumParameters++; } } - else - { - (*inst)++; - } + else { + (*inst)++; + } break; case PARAM_CONSTANT: parse_constant (inst, const_values, Program, use); - idx = - _mesa_add_named_constant (Program->Parameters, - (char *) param_var->name, const_values); + idx = _mesa_add_named_constant(Program->Base.Parameters, + (char *) param_var->name, + const_values, 4); if (param_var->param_binding_begin == ~0U) param_var->param_binding_begin = idx; param_var->param_binding_length++; @@ -1836,29 +1818,26 @@ parse_param_elements (GLcontext * ctx, GLubyte ** inst, break; default: - _mesa_set_program_error (ctx, Program->Position, - "Unexpected token in parse_param_elements()"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Unexpected token in parse_param_elements()"); + program_error(ctx, Program->Position, + "Unexpected token (in parse_param_elements())"); return 1; } /* Make sure we haven't blown past our parameter limits */ if (((Program->Base.Target == GL_VERTEX_PROGRAM_ARB) && (Program->Base.NumParameters >= - ctx->Const.MaxVertexProgramLocalParams)) + ctx->Const.VertexProgram.MaxLocalParams)) || ((Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) && (Program->Base.NumParameters >= - ctx->Const.MaxFragmentProgramLocalParams))) { - _mesa_set_program_error (ctx, Program->Position, - "Too many parameter variables"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Too many parameter variables"); + ctx->Const.FragmentProgram.MaxLocalParams))) { + program_error(ctx, Program->Position, "Too many parameter variables"); return 1; } return err; } + /** * This picks out PARAM program parameter bindings. * @@ -1867,12 +1846,11 @@ parse_param_elements (GLcontext * ctx, GLubyte ** inst, * \return 0 on sucess, 1 on error */ static GLuint -parse_param (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_param (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program) { GLuint found, err; GLint specified_length; - char *error_msg; struct var_cache *param_var; err = 0; @@ -1880,13 +1858,11 @@ parse_param (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, Program->Position = parse_position (inst); if (found) { - error_msg = (char *) _mesa_malloc (_mesa_strlen ((char *) param_var->name) + 40); + char *error_msg = (char *) + _mesa_malloc (_mesa_strlen ((char *) param_var->name) + 40); _mesa_sprintf (error_msg, "Duplicate Varible Declaration: %s", param_var->name); - - _mesa_set_program_error (ctx, Program->Position, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, error_msg); - + program_error (ctx, Program->Position, error_msg); _mesa_free (error_msg); return 1; } @@ -1894,10 +1870,7 @@ parse_param (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, specified_length = parse_integer (inst, Program); if (specified_length < 0) { - _mesa_set_program_error (ctx, Program->Position, - "Negative parameter array length"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Negative parameter array length: %d", specified_length); + program_error(ctx, Program->Position, "Negative parameter array length"); return 1; } @@ -1925,10 +1898,8 @@ parse_param (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, /* Test array length here! */ if (specified_length) { if (specified_length != (int)param_var->param_binding_length) { - _mesa_set_program_error (ctx, Program->Position, - "Declared parameter array lenght does not match parameter list"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Declared parameter array lenght does not match parameter list"); + program_error(ctx, Program->Position, + "Declared parameter array length does not match parameter list"); } } @@ -1941,14 +1912,14 @@ parse_param (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * */ static GLuint -parse_param_use (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_param_use (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, struct var_cache **new_var) { struct var_cache *param_var; /* First, insert a dummy entry into the var_cache */ var_cache_create (¶m_var); - param_var->name = (GLubyte *) _mesa_strdup (" "); + param_var->name = (const GLubyte *) " "; param_var->type = vt_param; param_var->param_binding_length = 0; @@ -1977,25 +1948,21 @@ parse_param_use (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * \return 0 on sucess, 1 on error */ static GLuint -parse_temp (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_temp (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program) { GLuint found; struct var_cache *temp_var; - char *error_msg; while (**inst != 0) { temp_var = parse_string (inst, vc_head, Program, &found); Program->Position = parse_position (inst); if (found) { - error_msg = (char *) + char *error_msg = (char *) _mesa_malloc (_mesa_strlen ((char *) temp_var->name) + 40); _mesa_sprintf (error_msg, "Duplicate Varible Declaration: %s", temp_var->name); - - _mesa_set_program_error (ctx, Program->Position, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, error_msg); - + program_error(ctx, Program->Position, error_msg); _mesa_free (error_msg); return 1; } @@ -2004,14 +1971,12 @@ parse_temp (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, if (((Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) && (Program->Base.NumTemporaries >= - ctx->Const.MaxFragmentProgramTemps)) + ctx->Const.FragmentProgram.MaxTemps)) || ((Program->Base.Target == GL_VERTEX_PROGRAM_ARB) && (Program->Base.NumTemporaries >= - ctx->Const.MaxVertexProgramTemps))) { - _mesa_set_program_error (ctx, Program->Position, - "Too many TEMP variables declared"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Too many TEMP variables declared"); + ctx->Const.VertexProgram.MaxTemps))) { + program_error(ctx, Program->Position, + "Too many TEMP variables declared"); return 1; } @@ -2029,31 +1994,29 @@ parse_temp (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * \return 0 on sucess, 1 on error */ static GLuint -parse_output (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_output (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program) { GLuint found; struct var_cache *output_var; + GLuint err; output_var = parse_string (inst, vc_head, Program, &found); Program->Position = parse_position (inst); if (found) { - char *error_msg; - error_msg = (char *) + char *error_msg = (char *) _mesa_malloc (_mesa_strlen ((char *) output_var->name) + 40); _mesa_sprintf (error_msg, "Duplicate Varible Declaration: %s", output_var->name); - - _mesa_set_program_error (ctx, Program->Position, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, error_msg); - + program_error (ctx, Program->Position, error_msg); _mesa_free (error_msg); return 1; } output_var->type = vt_output; - return parse_result_binding (ctx, inst, &output_var->output_binding, - &output_var->output_binding_idx, Program); + + err = parse_result_binding(ctx, inst, &output_var->output_binding, Program); + return err; } /** @@ -2062,26 +2025,21 @@ parse_output (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * \return 0 on sucess, 1 on error */ static GLuint -parse_alias (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_alias (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program) { GLuint found; struct var_cache *temp_var; - char *error_msg; - temp_var = parse_string (inst, vc_head, Program, &found); Program->Position = parse_position (inst); if (found) { - error_msg = (char *) + char *error_msg = (char *) _mesa_malloc (_mesa_strlen ((char *) temp_var->name) + 40); _mesa_sprintf (error_msg, "Duplicate Varible Declaration: %s", temp_var->name); - - _mesa_set_program_error (ctx, Program->Position, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, error_msg); - + program_error(ctx, Program->Position, error_msg); _mesa_free (error_msg); return 1; } @@ -2092,14 +2050,11 @@ parse_alias (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, if (!found) { - error_msg = (char *) + char *error_msg = (char *) _mesa_malloc (_mesa_strlen ((char *) temp_var->name) + 40); _mesa_sprintf (error_msg, "Alias value %s is not defined", temp_var->alias_binding->name); - - _mesa_set_program_error (ctx, Program->Position, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, error_msg); - + program_error (ctx, Program->Position, error_msg); _mesa_free (error_msg); return 1; } @@ -2113,25 +2068,21 @@ parse_alias (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * \return 0 on sucess, 1 on error */ static GLuint -parse_address (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_address (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program) { GLuint found; struct var_cache *temp_var; - char *error_msg; while (**inst != 0) { temp_var = parse_string (inst, vc_head, Program, &found); Program->Position = parse_position (inst); if (found) { - error_msg = (char *) + char *error_msg = (char *) _mesa_malloc (_mesa_strlen ((char *) temp_var->name) + 40); _mesa_sprintf (error_msg, "Duplicate Varible Declaration: %s", temp_var->name); - - _mesa_set_program_error (ctx, Program->Position, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, error_msg); - + program_error (ctx, Program->Position, error_msg); _mesa_free (error_msg); return 1; } @@ -2139,11 +2090,9 @@ parse_address (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, temp_var->type = vt_address; if (Program->Base.NumAddressRegs >= - ctx->Const.MaxVertexProgramAddressRegs) { - _mesa_set_program_error (ctx, Program->Position, - "Too many ADDRESS variables declared"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Too many ADDRESS variables declared"); + ctx->Const.VertexProgram.MaxAddressRegs) { + const char *msg = "Too many ADDRESS variables declared"; + program_error(ctx, Program->Position, msg); return 1; } @@ -2161,7 +2110,7 @@ parse_address (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * \return 0 on sucess, 1 on error */ static GLint -parse_declaration (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, +parse_declaration (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program) { GLint err = 0; @@ -2196,10 +2145,11 @@ parse_declaration (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, } /** - * Handle the parsing out of a masked destination register + * Handle the parsing out of a masked destination register, either for a + * vertex or fragment program. * * If we are a vertex program, make sure we don't write to - * result.position of we have specified that the program is + * result.position if we have specified that the program is * position invariant * * \param File - The register file we write to @@ -2209,12 +2159,11 @@ parse_declaration (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, * \return 0 on sucess, 1 on error */ static GLuint -parse_masked_dst_reg (GLcontext * ctx, GLubyte ** inst, +parse_masked_dst_reg (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, - GLint * File, GLint * Index, GLboolean * WriteMask) + enum register_file *File, GLuint *Index, GLint *WriteMask) { - GLuint result; - GLubyte mask; + GLuint tmp, result; struct var_cache *dst; /* We either have a result register specified, or a @@ -2222,8 +2171,7 @@ parse_masked_dst_reg (GLcontext * ctx, GLubyte ** inst, */ switch (*(*inst)++) { case REGISTER_RESULT: - if (parse_result_binding - (ctx, inst, &result, (GLuint *) Index, Program)) + if (parse_result_binding(ctx, inst, Index, Program)) return 1; *File = PROGRAM_OUTPUT; break; @@ -2234,17 +2182,14 @@ parse_masked_dst_reg (GLcontext * ctx, GLubyte ** inst, /* If the name has never been added to our symbol table, we're hosed */ if (!result) { - _mesa_set_program_error (ctx, Program->Position, - "0: Undefined variable"); - _mesa_error (ctx, GL_INVALID_OPERATION, "0: Undefined variable: %s", - dst->name); + program_error(ctx, Program->Position, "0: Undefined variable"); return 1; } switch (dst->type) { case vt_output: *File = PROGRAM_OUTPUT; - *Index = dst->output_binding_idx; + *Index = dst->output_binding; break; case vt_temp: @@ -2254,20 +2199,15 @@ parse_masked_dst_reg (GLcontext * ctx, GLubyte ** inst, /* If the var type is not vt_output or vt_temp, no go */ default: - _mesa_set_program_error (ctx, Program->Position, - "Destination register is read only"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Destination register is read only: %s", - dst->name); + program_error(ctx, Program->Position, + "Destination register is read only"); return 1; } break; default: - _mesa_set_program_error (ctx, Program->Position, - "Unexpected opcode in parse_masked_dst_reg()"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Unexpected opcode in parse_masked_dst_reg()"); + program_error(ctx, Program->Position, + "Unexpected opcode in parse_masked_dst_reg()"); return 1; } @@ -2279,9 +2219,7 @@ parse_masked_dst_reg (GLcontext * ctx, GLubyte ** inst, */ /*if ((Program->HintPositionInvariant) && (*File == PROGRAM_OUTPUT) && (*Index == 0)) { - _mesa_set_program_error (ctx, Program->Position, - "Vertex program specified position invariance and wrote vertex position"); - _mesa_error (ctx, GL_INVALID_OPERATION, + program_error(ctx, Program->Position, "Vertex program specified position invariance and wrote vertex position"); }*/ @@ -2290,13 +2228,14 @@ parse_masked_dst_reg (GLcontext * ctx, GLubyte ** inst, * z,b -> bit 1 * y,g -> bit 2 * x,r -> bit 3 + * + * ==> Need to reverse the order of bits for this! */ - mask = *(*inst)++; - - WriteMask[0] = (GLboolean) (mask & (1 << 3)) >> 3; - WriteMask[1] = (GLboolean) (mask & (1 << 2)) >> 2; - WriteMask[2] = (GLboolean) (mask & (1 << 1)) >> 1; - WriteMask[3] = (GLboolean) (mask & (1)); + tmp = (GLint) *(*inst)++; + *WriteMask = (((tmp>>3) & 0x1) | + ((tmp>>1) & 0x2) | + ((tmp<<1) & 0x4) | + ((tmp<<3) & 0x8)); return 0; } @@ -2310,36 +2249,33 @@ parse_masked_dst_reg (GLcontext * ctx, GLubyte ** inst, * \return 0 on sucess, 1 on error */ static GLuint -parse_address_reg (GLcontext * ctx, GLubyte ** inst, +parse_address_reg (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, GLint * Index) { struct var_cache *dst; GLuint result; - (void) Index; + + *Index = 0; /* XXX */ dst = parse_string (inst, vc_head, Program, &result); Program->Position = parse_position (inst); /* If the name has never been added to our symbol table, we're hosed */ if (!result) { - _mesa_set_program_error (ctx, Program->Position, "Undefined variable"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Undefined variable: %s", - dst->name); + program_error(ctx, Program->Position, "Undefined variable"); return 1; } if (dst->type != vt_address) { - _mesa_set_program_error (ctx, Program->Position, - "Variable is not of type ADDRESS"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Variable: %s is not of type ADDRESS", dst->name); + program_error(ctx, Program->Position, "Variable is not of type ADDRESS"); return 1; } return 0; } +#if 0 /* unused */ /** * Handle the parsing out of a masked address register * @@ -2349,7 +2285,7 @@ parse_address_reg (GLcontext * ctx, GLubyte ** inst, * \return 0 on sucess, 1 on error */ static GLuint -parse_masked_address_reg (GLcontext * ctx, GLubyte ** inst, +parse_masked_address_reg (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, GLint * Index, GLboolean * WriteMask) @@ -2366,141 +2302,128 @@ parse_masked_address_reg (GLcontext * ctx, GLubyte ** inst, return 0; } - +#endif /** * Parse out a swizzle mask. * - * The values in the input stream are: - * COMPONENT_X -> x/r - * COMPONENT_Y -> y/g - * COMPONENT_Z-> z/b - * COMPONENT_W-> w/a - * - * The values in the output mask are: - * 0 -> x/r - * 1 -> y/g - * 2 -> z/b - * 3 -> w/a + * Basically convert COMPONENT_X/Y/Z/W to SWIZZLE_X/Y/Z/W * * The len parameter allows us to grab 4 components for a vector * swizzle, or just 1 component for a scalar src register selection */ -static GLuint -parse_swizzle_mask (GLubyte ** inst, GLubyte * mask, GLint len) +static void +parse_swizzle_mask(const GLubyte ** inst, GLubyte *swizzle, GLint len) { - GLint a; + GLint i; - for (a = 0; a < 4; a++) - mask[a] = a; + for (i = 0; i < 4; i++) + swizzle[i] = i; - for (a = 0; a < len; a++) { + for (i = 0; i < len; i++) { switch (*(*inst)++) { case COMPONENT_X: - mask[a] = 0; + swizzle[i] = SWIZZLE_X; break; - case COMPONENT_Y: - mask[a] = 1; + swizzle[i] = SWIZZLE_Y; break; - case COMPONENT_Z: - mask[a] = 2; + swizzle[i] = SWIZZLE_Z; break; - case COMPONENT_W: - mask[a] = 3; + swizzle[i] = SWIZZLE_W; break; + default: + _mesa_problem(NULL, "bad component in parse_swizzle_mask()"); + return; } } - - return 0; } -/** - */ -static GLuint -parse_extended_swizzle_mask (GLubyte ** inst, GLubyte * mask, GLboolean * Negate) -{ - GLint a; - GLubyte swz; - *Negate = GL_FALSE; - for (a = 0; a < 4; a++) { - if (parse_sign (inst) == -1) - *Negate = GL_TRUE; +/** + * Parse an extended swizzle mask which is a sequence of + * four x/y/z/w/0/1 tokens. + * \return swizzle four swizzle values + * \return negateMask four element bitfield + */ +static void +parse_extended_swizzle_mask(const GLubyte **inst, GLubyte swizzle[4], + GLubyte *negateMask) +{ + GLint i; + + *negateMask = 0x0; + for (i = 0; i < 4; i++) { + GLubyte swz; + if (parse_sign(inst) == -1) + *negateMask |= (1 << i); swz = *(*inst)++; switch (swz) { case COMPONENT_0: - mask[a] = SWIZZLE_ZERO; + swizzle[i] = SWIZZLE_ZERO; break; case COMPONENT_1: - mask[a] = SWIZZLE_ONE; + swizzle[i] = SWIZZLE_ONE; break; case COMPONENT_X: - mask[a] = SWIZZLE_X; + swizzle[i] = SWIZZLE_X; break; case COMPONENT_Y: - mask[a] = SWIZZLE_Y; + swizzle[i] = SWIZZLE_Y; break; case COMPONENT_Z: - mask[a] = SWIZZLE_Z; + swizzle[i] = SWIZZLE_Z; break; case COMPONENT_W: - mask[a] = SWIZZLE_W; + swizzle[i] = SWIZZLE_W; break; - + default: + _mesa_problem(NULL, "bad case in parse_extended_swizzle_mask()"); + return; } -#if 0 - if (swz == 0) - mask[a] = SWIZZLE_ZERO; - else if (swz == 1) - mask[a] = SWIZZLE_ONE; - else - mask[a] = swz - 2; -#endif - } - - return 0; } static GLuint -parse_src_reg (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, - struct arb_program *Program, GLint * File, GLint * Index, +parse_src_reg (GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, + struct arb_program *Program, + enum register_file * File, GLint * Index, GLboolean *IsRelOffset ) { struct var_cache *src; - GLuint binding_state, binding_idx, is_generic, found; + GLuint binding, is_generic, found; GLint offset; + *IsRelOffset = 0; + /* And the binding for the src */ switch (*(*inst)++) { case REGISTER_ATTRIB: if (parse_attrib_binding - (ctx, inst, Program, &binding_state, &binding_idx, &is_generic)) + (ctx, inst, Program, &binding, &is_generic)) return 1; *File = PROGRAM_INPUT; - *Index = binding_idx; + *Index = binding; /* We need to insert a dummy variable into the var_cache so we can * catch generic vertex attrib aliasing errors */ var_cache_create(&src); src->type = vt_attrib; - src->name = (GLubyte *)_mesa_strdup("Dummy Attrib Variable"); - src->attrib_binding = binding_state; - src->attrib_binding_idx = binding_idx; - src->attrib_is_generic = is_generic; + src->name = (const GLubyte *) "Dummy Attrib Variable"; + src->attrib_binding = binding; + src->attrib_is_generic = is_generic; var_cache_append(vc_head, src); if (generic_attrib_check(*vc_head)) { - _mesa_set_program_error (ctx, Program->Position, - "Cannot use both a generic vertex attribute and a specific attribute of the same type"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Cannot use both a generic vertex attribute and a specific attribute of the same type"); + program_error(ctx, Program->Position, + "Cannot use both a generic vertex attribute " + "and a specific attribute of the same type"); return 1; } break; @@ -2513,14 +2436,12 @@ parse_src_reg (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, Program->Position = parse_position (inst); if (!found) { - _mesa_set_program_error (ctx, Program->Position, - "2: Undefined variable"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "2: Undefined variable: %s", src->name); + program_error(ctx, Program->Position, + "2: Undefined variable"); /* src->name */ return 1; } - *File = src->param_binding_type; + *File = (enum register_file) src->param_binding_type; switch (*(*inst)++) { case ARRAY_INDEX_ABSOLUTE: @@ -2528,11 +2449,9 @@ parse_src_reg (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, if ((offset < 0) || (offset >= (int)src->param_binding_length)) { - _mesa_set_program_error (ctx, Program->Position, - "Index out of range"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Index %d out of range for %s", offset, - src->name); + program_error(ctx, Program->Position, + "Index out of range"); + /* offset, src->name */ return 1; } @@ -2565,39 +2484,35 @@ parse_src_reg (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, break; default: - if (parse_param_use (ctx, inst, vc_head, Program, &src)) return 1; - *File = src->param_binding_type; + *File = (enum register_file) src->param_binding_type; *Index = src->param_binding_begin; break; } break; case REGISTER_ESTABLISHED_NAME: - src = parse_string (inst, vc_head, Program, &found); Program->Position = parse_position (inst); /* If the name has never been added to our symbol table, we're hosed */ if (!found) { - _mesa_set_program_error (ctx, Program->Position, - "3: Undefined variable"); - _mesa_error (ctx, GL_INVALID_OPERATION, "3: Undefined variable: %s", - src->name); + program_error(ctx, Program->Position, + "3: Undefined variable"); /* src->name */ return 1; } switch (src->type) { case vt_attrib: *File = PROGRAM_INPUT; - *Index = src->attrib_binding_idx; + *Index = src->attrib_binding; break; /* XXX: We have to handle offsets someplace in here! -- or are those above? */ case vt_param: - *File = src->param_binding_type; + *File = (enum register_file) src->param_binding_type; *Index = src->param_binding_begin; break; @@ -2608,20 +2523,16 @@ parse_src_reg (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, /* If the var type is vt_output no go */ default: - _mesa_set_program_error (ctx, Program->Position, - "destination register is read only"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "destination register is read only: %s", - src->name); + program_error(ctx, Program->Position, + "destination register is read only"); + /* bad src->name */ return 1; } break; default: - _mesa_set_program_error (ctx, Program->Position, - "Unknown token in parse_src_reg"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Unknown token in parse_src_reg"); + program_error(ctx, Program->Position, + "Unknown token in parse_src_reg"); return 1; } @@ -2629,64 +2540,112 @@ parse_src_reg (GLcontext * ctx, GLubyte ** inst, struct var_cache **vc_head, } /** + * Parse fragment program vector source register. */ static GLuint -parse_vector_src_reg (GLcontext * ctx, GLubyte ** inst, - struct var_cache **vc_head, struct arb_program *Program, - GLint * File, GLint * Index, GLboolean * Negate, - GLubyte * Swizzle, GLboolean *IsRelOffset) +parse_fp_vector_src_reg(GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, + struct arb_program *program, + struct prog_src_register *reg) { + enum register_file file; + GLint index; + GLboolean negate; + GLubyte swizzle[4]; + GLboolean isRelOffset; + /* Grab the sign */ - *Negate = (parse_sign (inst) == -1); + negate = (parse_sign (inst) == -1) ? 0xf : 0x0; /* And the src reg */ - if (parse_src_reg (ctx, inst, vc_head, Program, File, Index, IsRelOffset)) + if (parse_src_reg(ctx, inst, vc_head, program, &file, &index, &isRelOffset)) return 1; /* finally, the swizzle */ - parse_swizzle_mask (inst, Swizzle, 4); + parse_swizzle_mask(inst, swizzle, 4); + reg->File = file; + reg->Index = index; + reg->NegateBase = negate; + reg->Swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1], swizzle[2], swizzle[3]); return 0; } + /** + * Parse fragment program destination register. + * \return 1 if error, 0 if no error. */ -static GLuint -parse_scalar_src_reg (GLcontext * ctx, GLubyte ** inst, - struct var_cache **vc_head, struct arb_program *Program, - GLint * File, GLint * Index, GLboolean * Negate, - GLubyte * Swizzle, GLboolean *IsRelOffset) +static GLuint +parse_fp_dst_reg(GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, struct arb_program *Program, + struct prog_dst_register *reg ) { - /* Grab the sign */ - *Negate = (parse_sign (inst) == -1); + GLint mask; + GLuint idx; + enum register_file file; - /* And the src reg */ - if (parse_src_reg (ctx, inst, vc_head, Program, File, Index, IsRelOffset)) + if (parse_masked_dst_reg (ctx, inst, vc_head, Program, &file, &idx, &mask)) return 1; - /* Now, get the component and shove it into all the swizzle slots */ - parse_swizzle_mask (inst, Swizzle, 1); + reg->File = file; + reg->Index = idx; + reg->WriteMask = mask; + return 0; +} + + +/** + * Parse fragment program scalar src register. + * \return 1 if error, 0 if no error. + */ +static GLuint +parse_fp_scalar_src_reg (GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, + struct arb_program *Program, + struct prog_src_register *reg ) +{ + enum register_file File; + GLint Index; + GLubyte Negate; + GLubyte Swizzle[4]; + GLboolean IsRelOffset; + + /* Grab the sign */ + Negate = (parse_sign (inst) == -1) ? 0x1 : 0x0; + + /* And the src reg */ + if (parse_src_reg (ctx, inst, vc_head, Program, &File, &Index, &IsRelOffset)) + return 1; + + /* finally, the swizzle */ + parse_swizzle_mask(inst, Swizzle, 1); + + reg->File = File; + reg->Index = Index; + reg->NegateBase = Negate; + reg->Swizzle = (Swizzle[0] << 0); return 0; } + /** * This is a big mother that handles getting opcodes into the instruction * and handling the src & dst registers for fragment program instructions + * \return 1 if error, 0 if no error */ static GLuint -parse_fp_instruction (GLcontext * ctx, GLubyte ** inst, +parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, - struct fp_instruction *fp) + struct prog_instruction *fp) { - GLint a, b; - GLubyte swz[4]; /* FP's swizzle mask is a GLubyte, while VP's is GLuint */ + GLint a; GLuint texcoord; GLubyte instClass, type, code; GLboolean rel; - /* No condition codes in ARB_fp */ - fp->UpdateCondRegister = 0; + _mesa_init_instructions(fp, 1); /* Record the position in the program string for debugging */ fp->StringPos = Program->Position; @@ -2712,145 +2671,115 @@ parse_fp_instruction (GLcontext * ctx, GLubyte ** inst, break; } - fp->Saturate = 0; - fp->Precision = FLOAT32; - - fp->DstReg.CondMask = COND_TR; - switch (type) { case OP_ALU_VECTOR: switch (code) { case OP_ABS_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_ABS: - fp->Opcode = FP_OPCODE_ABS; + fp->Opcode = OPCODE_ABS; break; case OP_FLR_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_FLR: - fp->Opcode = FP_OPCODE_FLR; + fp->Opcode = OPCODE_FLR; break; case OP_FRC_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_FRC: - fp->Opcode = FP_OPCODE_FRC; + fp->Opcode = OPCODE_FRC; break; case OP_LIT_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_LIT: - fp->Opcode = FP_OPCODE_LIT; + fp->Opcode = OPCODE_LIT; break; case OP_MOV_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_MOV: - fp->Opcode = FP_OPCODE_MOV; + fp->Opcode = OPCODE_MOV; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->DstReg.File, - &fp->DstReg.Index, fp->DstReg.WriteMask)) + if (parse_fp_dst_reg (ctx, inst, vc_head, Program, &fp->DstReg)) return 1; - fp->SrcReg[0].Abs = GL_FALSE; - fp->SrcReg[0].NegateAbs = GL_FALSE; - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[0].File, - &fp->SrcReg[0].Index, &fp->SrcReg[0].NegateBase, - swz, &rel)) + if (parse_fp_vector_src_reg(ctx, inst, vc_head, Program, &fp->SrcReg[0])) return 1; - for (b=0; b<4; b++) - fp->SrcReg[0].Swizzle[b] = swz[b]; break; case OP_ALU_SCALAR: switch (code) { case OP_COS_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_COS: - fp->Opcode = FP_OPCODE_COS; + fp->Opcode = OPCODE_COS; break; case OP_EX2_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_EX2: - fp->Opcode = FP_OPCODE_EX2; + fp->Opcode = OPCODE_EX2; break; case OP_LG2_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_LG2: - fp->Opcode = FP_OPCODE_LG2; + fp->Opcode = OPCODE_LG2; break; case OP_RCP_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_RCP: - fp->Opcode = FP_OPCODE_RCP; + fp->Opcode = OPCODE_RCP; break; case OP_RSQ_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_RSQ: - fp->Opcode = FP_OPCODE_RSQ; + fp->Opcode = OPCODE_RSQ; break; case OP_SIN_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_SIN: - fp->Opcode = FP_OPCODE_SIN; + fp->Opcode = OPCODE_SIN; break; case OP_SCS_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_SCS: - fp->Opcode = FP_OPCODE_SCS; + fp->Opcode = OPCODE_SCS; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->DstReg.File, - &fp->DstReg.Index, fp->DstReg.WriteMask)) + if (parse_fp_dst_reg (ctx, inst, vc_head, Program, &fp->DstReg)) return 1; - fp->SrcReg[0].Abs = GL_FALSE; - fp->SrcReg[0].NegateAbs = GL_FALSE; - if (parse_scalar_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[0].File, - &fp->SrcReg[0].Index, &fp->SrcReg[0].NegateBase, - swz, &rel)) + + if (parse_fp_scalar_src_reg(ctx, inst, vc_head, Program, &fp->SrcReg[0])) return 1; - for (b=0; b<4; b++) - fp->SrcReg[0].Swizzle[b] = swz[b]; break; case OP_ALU_BINSC: switch (code) { case OP_POW_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_POW: - fp->Opcode = FP_OPCODE_POW; + fp->Opcode = OPCODE_POW; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->DstReg.File, - &fp->DstReg.Index, fp->DstReg.WriteMask)) + if (parse_fp_dst_reg(ctx, inst, vc_head, Program, &fp->DstReg)) return 1; + for (a = 0; a < 2; a++) { - fp->SrcReg[a].Abs = GL_FALSE; - fp->SrcReg[a].NegateAbs = GL_FALSE; - if (parse_scalar_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[a].File, - &fp->SrcReg[a].Index, &fp->SrcReg[a].NegateBase, - swz, &rel)) + if (parse_fp_scalar_src_reg(ctx, inst, vc_head, Program, &fp->SrcReg[a])) return 1; - for (b=0; b<4; b++) - fp->SrcReg[a].Swizzle[b] = swz[b]; } break; @@ -2858,191 +2787,172 @@ parse_fp_instruction (GLcontext * ctx, GLubyte ** inst, case OP_ALU_BIN: switch (code) { case OP_ADD_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_ADD: - fp->Opcode = FP_OPCODE_ADD; + fp->Opcode = OPCODE_ADD; break; case OP_DP3_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_DP3: - fp->Opcode = FP_OPCODE_DP3; + fp->Opcode = OPCODE_DP3; break; case OP_DP4_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_DP4: - fp->Opcode = FP_OPCODE_DP4; + fp->Opcode = OPCODE_DP4; break; case OP_DPH_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_DPH: - fp->Opcode = FP_OPCODE_DPH; + fp->Opcode = OPCODE_DPH; break; case OP_DST_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_DST: - fp->Opcode = FP_OPCODE_DST; + fp->Opcode = OPCODE_DST; break; case OP_MAX_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_MAX: - fp->Opcode = FP_OPCODE_MAX; + fp->Opcode = OPCODE_MAX; break; case OP_MIN_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_MIN: - fp->Opcode = FP_OPCODE_MIN; + fp->Opcode = OPCODE_MIN; break; case OP_MUL_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_MUL: - fp->Opcode = FP_OPCODE_MUL; + fp->Opcode = OPCODE_MUL; break; case OP_SGE_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_SGE: - fp->Opcode = FP_OPCODE_SGE; + fp->Opcode = OPCODE_SGE; break; case OP_SLT_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_SLT: - fp->Opcode = FP_OPCODE_SLT; + fp->Opcode = OPCODE_SLT; break; case OP_SUB_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_SUB: - fp->Opcode = FP_OPCODE_SUB; + fp->Opcode = OPCODE_SUB; break; case OP_XPD_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_XPD: - fp->Opcode = FP_OPCODE_XPD; + fp->Opcode = OPCODE_XPD; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->DstReg.File, - &fp->DstReg.Index, fp->DstReg.WriteMask)) + if (parse_fp_dst_reg (ctx, inst, vc_head, Program, &fp->DstReg)) return 1; for (a = 0; a < 2; a++) { - fp->SrcReg[a].Abs = GL_FALSE; - fp->SrcReg[a].NegateAbs = GL_FALSE; - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[a].File, - &fp->SrcReg[a].Index, &fp->SrcReg[a].NegateBase, - swz, &rel)) - return 1; - for (b=0; b<4; b++) - fp->SrcReg[a].Swizzle[b] = swz[b]; + if (parse_fp_vector_src_reg(ctx, inst, vc_head, Program, &fp->SrcReg[a])) + return 1; } break; case OP_ALU_TRI: switch (code) { case OP_CMP_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_CMP: - fp->Opcode = FP_OPCODE_CMP; + fp->Opcode = OPCODE_CMP; break; case OP_LRP_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_LRP: - fp->Opcode = FP_OPCODE_LRP; + fp->Opcode = OPCODE_LRP; break; case OP_MAD_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_MAD: - fp->Opcode = FP_OPCODE_MAD; + fp->Opcode = OPCODE_MAD; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->DstReg.File, - &fp->DstReg.Index, fp->DstReg.WriteMask)) + if (parse_fp_dst_reg (ctx, inst, vc_head, Program, &fp->DstReg)) return 1; + for (a = 0; a < 3; a++) { - fp->SrcReg[a].Abs = GL_FALSE; - fp->SrcReg[a].NegateAbs = GL_FALSE; - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[a].File, - &fp->SrcReg[a].Index, &fp->SrcReg[a].NegateBase, - swz, &rel)) - return 1; - for (b=0; b<4; b++) - fp->SrcReg[a].Swizzle[b] = swz[b]; + if (parse_fp_vector_src_reg(ctx, inst, vc_head, Program, &fp->SrcReg[a])) + return 1; } break; case OP_ALU_SWZ: switch (code) { case OP_SWZ_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_SWZ: - fp->Opcode = FP_OPCODE_SWZ; + fp->Opcode = OPCODE_SWZ; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->DstReg.File, - &fp->DstReg.Index, fp->DstReg.WriteMask)) + if (parse_fp_dst_reg (ctx, inst, vc_head, Program, &fp->DstReg)) return 1; - if (parse_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[0].File, - &fp->SrcReg[0].Index, &rel)) - return 1; - parse_extended_swizzle_mask (inst, swz, - &fp->SrcReg[0].NegateBase); - for (b=0; b<4; b++) - fp->SrcReg[0].Swizzle[b] = swz[b]; + { + GLubyte swizzle[4]; + GLubyte negateMask; + enum register_file file; + GLint index; + + if (parse_src_reg(ctx, inst, vc_head, Program, &file, &index, &rel)) + return 1; + parse_extended_swizzle_mask(inst, swizzle, &negateMask); + fp->SrcReg[0].File = file; + fp->SrcReg[0].Index = index; + fp->SrcReg[0].NegateBase = negateMask; + fp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0], + swizzle[1], + swizzle[2], + swizzle[3]); + } break; case OP_TEX_SAMPLE: switch (code) { case OP_TEX_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_TEX: - fp->Opcode = FP_OPCODE_TEX; + fp->Opcode = OPCODE_TEX; break; case OP_TXP_SAT: - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_TXP: - fp->Opcode = FP_OPCODE_TXP; + fp->Opcode = OPCODE_TXP; break; case OP_TXB_SAT: - - fp->Saturate = 1; + fp->SaturateMode = SATURATE_ZERO_ONE; case OP_TXB: - fp->Opcode = FP_OPCODE_TXB; + fp->Opcode = OPCODE_TXB; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->DstReg.File, - &fp->DstReg.Index, fp->DstReg.WriteMask)) + if (parse_fp_dst_reg (ctx, inst, vc_head, Program, &fp->DstReg)) return 1; - fp->SrcReg[0].Abs = GL_FALSE; - fp->SrcReg[0].NegateAbs = GL_FALSE; - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[0].File, - &fp->SrcReg[0].Index, &fp->SrcReg[0].NegateBase, - swz, &rel)) + + if (parse_fp_vector_src_reg(ctx, inst, vc_head, Program, &fp->SrcReg[0])) return 1; - for (b=0; b<4; b++) - fp->SrcReg[0].Swizzle[b] = swz[b]; /* texImageUnit */ if (parse_texcoord_num (ctx, inst, Program, &texcoord)) @@ -3052,19 +2962,19 @@ parse_fp_instruction (GLcontext * ctx, GLubyte ** inst, /* texTarget */ switch (*(*inst)++) { case TEXTARGET_1D: - fp->TexSrcBit = TEXTURE_1D_BIT; + fp->TexSrcTarget = TEXTURE_1D_INDEX; break; case TEXTARGET_2D: - fp->TexSrcBit = TEXTURE_2D_BIT; + fp->TexSrcTarget = TEXTURE_2D_INDEX; break; case TEXTARGET_3D: - fp->TexSrcBit = TEXTURE_3D_BIT; + fp->TexSrcTarget = TEXTURE_3D_INDEX; break; case TEXTARGET_RECT: - fp->TexSrcBit = TEXTURE_RECT_BIT; + fp->TexSrcTarget = TEXTURE_RECT_INDEX; break; case TEXTARGET_CUBE: - fp->TexSrcBit = TEXTURE_CUBE_BIT; + fp->TexSrcTarget = TEXTURE_CUBE_INDEX; break; case TEXTARGET_SHADOW1D: case TEXTARGET_SHADOW2D: @@ -3072,34 +2982,151 @@ parse_fp_instruction (GLcontext * ctx, GLubyte ** inst, /* TODO ARB_fragment_program_shadow code */ break; } - Program->TexturesUsed[texcoord] |= fp->TexSrcBit; + Program->TexturesUsed[texcoord] |= (1 << fp->TexSrcTarget); + /* Check that both "2D" and "CUBE" (for example) aren't both used */ + if (_mesa_bitcount(Program->TexturesUsed[texcoord]) > 1) { + program_error(ctx, Program->Position, + "multiple targets used on one texture image unit"); + return 1; + } break; case OP_TEX_KIL: - fp->Opcode = FP_OPCODE_KIL; - fp->SrcReg[0].Abs = GL_FALSE; - fp->SrcReg[0].NegateAbs = GL_FALSE; - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & fp->SrcReg[0].File, - &fp->SrcReg[0].Index, &fp->SrcReg[0].NegateBase, - swz, &rel)) + Program->UsesKill = 1; + if (parse_fp_vector_src_reg(ctx, inst, vc_head, Program, &fp->SrcReg[0])) return 1; - for (b=0; b<4; b++) - fp->SrcReg[0].Swizzle[b] = swz[b]; + fp->Opcode = OPCODE_KIL; break; + default: + _mesa_problem(ctx, "bad type 0x%x in parse_fp_instruction()", type); + return 1; } return 0; } +static GLuint +parse_vp_dst_reg(GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, struct arb_program *Program, + struct prog_dst_register *reg ) +{ + GLint mask; + GLuint idx; + enum register_file file; + + if (parse_masked_dst_reg(ctx, inst, vc_head, Program, &file, &idx, &mask)) + return 1; + + reg->File = file; + reg->Index = idx; + reg->WriteMask = mask; + return 0; +} + +/** + * Handle the parsing out of a masked address register + * + * \param Index - The register index we write to + * \param WriteMask - The mask controlling which components we write (1->write) + * + * \return 0 on sucess, 1 on error + */ +static GLuint +parse_vp_address_reg (GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, + struct arb_program *Program, + struct prog_dst_register *reg) +{ + GLint idx; + + if (parse_address_reg (ctx, inst, vc_head, Program, &idx)) + return 1; + + /* This should be 0x8 */ + (*inst)++; + + reg->File = PROGRAM_ADDRESS; + reg->Index = idx; + + /* Writemask of .x is implied */ + reg->WriteMask = 0x1; + return 0; +} + +/** + * Parse vertex program vector source register. + */ +static GLuint +parse_vp_vector_src_reg(GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, + struct arb_program *program, + struct prog_src_register *reg ) +{ + enum register_file file; + GLint index; + GLubyte negateMask; + GLubyte swizzle[4]; + GLboolean isRelOffset; + + /* Grab the sign */ + negateMask = (parse_sign (inst) == -1) ? 0xf : 0x0; + + /* And the src reg */ + if (parse_src_reg (ctx, inst, vc_head, program, &file, &index, &isRelOffset)) + return 1; + + /* finally, the swizzle */ + parse_swizzle_mask(inst, swizzle, 4); + + reg->File = file; + reg->Index = index; + reg->Swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1], + swizzle[2], swizzle[3]); + reg->NegateBase = negateMask; + reg->RelAddr = isRelOffset; + return 0; +} + + +static GLuint +parse_vp_scalar_src_reg (GLcontext * ctx, const GLubyte ** inst, + struct var_cache **vc_head, + struct arb_program *Program, + struct prog_src_register *reg ) +{ + enum register_file File; + GLint Index; + GLubyte Negate; + GLubyte Swizzle[4]; + GLboolean IsRelOffset; + + /* Grab the sign */ + Negate = (parse_sign (inst) == -1) ? 0x1 : 0x0; + + /* And the src reg */ + if (parse_src_reg (ctx, inst, vc_head, Program, &File, &Index, &IsRelOffset)) + return 1; + + /* finally, the swizzle */ + parse_swizzle_mask(inst, Swizzle, 1); + + reg->File = File; + reg->Index = Index; + reg->Swizzle = (Swizzle[0] << 0); + reg->NegateBase = Negate; + reg->RelAddr = IsRelOffset; + return 0; +} + + /** * This is a big mother that handles getting opcodes into the instruction * and handling the src & dst registers for vertex program instructions */ static GLuint -parse_vp_instruction (GLcontext * ctx, GLubyte ** inst, +parse_vp_instruction (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, - struct vp_instruction *vp) + struct prog_instruction *vp) { GLint a; GLubyte type, code; @@ -3110,37 +3137,25 @@ parse_vp_instruction (GLcontext * ctx, GLubyte ** inst, /* The actual opcode name */ code = *(*inst)++; + _mesa_init_instructions(vp, 1); /* Record the position in the program string for debugging */ vp->StringPos = Program->Position; - vp->SrcReg[0].RelAddr = vp->SrcReg[1].RelAddr = vp->SrcReg[2].RelAddr = 0; - - for (a = 0; a < 4; a++) { - vp->SrcReg[0].Swizzle[a] = a; - vp->SrcReg[1].Swizzle[a] = a; - vp->SrcReg[2].Swizzle[a] = a; - vp->DstReg.WriteMask[a] = 1; - } - switch (type) { /* XXX: */ case OP_ALU_ARL: - vp->Opcode = VP_OPCODE_ARL; + vp->Opcode = OPCODE_ARL; /* Remember to set SrcReg.RelAddr; */ /* Get the masked address register [dst] */ - if (parse_masked_address_reg - (ctx, inst, vc_head, Program, &vp->DstReg.Index, - vp->DstReg.WriteMask)) + if (parse_vp_address_reg(ctx, inst, vc_head, Program, &vp->DstReg)) return 1; + vp->DstReg.File = PROGRAM_ADDRESS; /* Get a scalar src register */ - if (parse_scalar_src_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->SrcReg[0].File, - &vp->SrcReg[0].Index, &vp->SrcReg[0].Negate, - vp->SrcReg[0].Swizzle, &vp->SrcReg[0].RelAddr)) + if (parse_vp_scalar_src_reg(ctx, inst, vc_head, Program, &vp->SrcReg[0])) return 1; break; @@ -3148,79 +3163,68 @@ parse_vp_instruction (GLcontext * ctx, GLubyte ** inst, case OP_ALU_VECTOR: switch (code) { case OP_ABS: - vp->Opcode = VP_OPCODE_ABS; + vp->Opcode = OPCODE_ABS; break; case OP_FLR: - vp->Opcode = VP_OPCODE_FLR; + vp->Opcode = OPCODE_FLR; break; case OP_FRC: - vp->Opcode = VP_OPCODE_FRC; + vp->Opcode = OPCODE_FRC; break; case OP_LIT: - vp->Opcode = VP_OPCODE_LIT; + vp->Opcode = OPCODE_LIT; break; case OP_MOV: - vp->Opcode = VP_OPCODE_MOV; + vp->Opcode = OPCODE_MOV; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->DstReg.File, - &vp->DstReg.Index, vp->DstReg.WriteMask)) + + if (parse_vp_dst_reg(ctx, inst, vc_head, Program, &vp->DstReg)) return 1; - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->SrcReg[0].File, - &vp->SrcReg[0].Index, &vp->SrcReg[0].Negate, - vp->SrcReg[0].Swizzle, &vp->SrcReg[0].RelAddr)) + + if (parse_vp_vector_src_reg(ctx, inst, vc_head, Program, &vp->SrcReg[0])) return 1; break; case OP_ALU_SCALAR: switch (code) { case OP_EX2: - vp->Opcode = VP_OPCODE_EX2; + vp->Opcode = OPCODE_EX2; break; case OP_EXP: - vp->Opcode = VP_OPCODE_EXP; + vp->Opcode = OPCODE_EXP; break; case OP_LG2: - vp->Opcode = VP_OPCODE_LG2; + vp->Opcode = OPCODE_LG2; break; case OP_LOG: - vp->Opcode = VP_OPCODE_LOG; + vp->Opcode = OPCODE_LOG; break; case OP_RCP: - vp->Opcode = VP_OPCODE_RCP; + vp->Opcode = OPCODE_RCP; break; case OP_RSQ: - vp->Opcode = VP_OPCODE_RSQ; + vp->Opcode = OPCODE_RSQ; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->DstReg.File, - &vp->DstReg.Index, vp->DstReg.WriteMask)) + if (parse_vp_dst_reg(ctx, inst, vc_head, Program, &vp->DstReg)) return 1; - if (parse_scalar_src_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->SrcReg[0].File, - &vp->SrcReg[0].Index, &vp->SrcReg[0].Negate, - vp->SrcReg[0].Swizzle, &vp->SrcReg[0].RelAddr)) + + if (parse_vp_scalar_src_reg(ctx, inst, vc_head, Program, &vp->SrcReg[0])) return 1; break; case OP_ALU_BINSC: switch (code) { case OP_POW: - vp->Opcode = VP_OPCODE_POW; + vp->Opcode = OPCODE_POW; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->DstReg.File, - &vp->DstReg.Index, vp->DstReg.WriteMask)) + if (parse_vp_dst_reg(ctx, inst, vc_head, Program, &vp->DstReg)) return 1; + for (a = 0; a < 2; a++) { - if (parse_scalar_src_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->SrcReg[a].File, - &vp->SrcReg[a].Index, &vp->SrcReg[a].Negate, - vp->SrcReg[a].Swizzle, &vp->SrcReg[a].RelAddr)) + if (parse_vp_scalar_src_reg(ctx, inst, vc_head, Program, &vp->SrcReg[a])) return 1; } break; @@ -3228,51 +3232,47 @@ parse_vp_instruction (GLcontext * ctx, GLubyte ** inst, case OP_ALU_BIN: switch (code) { case OP_ADD: - vp->Opcode = VP_OPCODE_ADD; + vp->Opcode = OPCODE_ADD; break; case OP_DP3: - vp->Opcode = VP_OPCODE_DP3; + vp->Opcode = OPCODE_DP3; break; case OP_DP4: - vp->Opcode = VP_OPCODE_DP4; + vp->Opcode = OPCODE_DP4; break; case OP_DPH: - vp->Opcode = VP_OPCODE_DPH; + vp->Opcode = OPCODE_DPH; break; case OP_DST: - vp->Opcode = VP_OPCODE_DST; + vp->Opcode = OPCODE_DST; break; case OP_MAX: - vp->Opcode = VP_OPCODE_MAX; + vp->Opcode = OPCODE_MAX; break; case OP_MIN: - vp->Opcode = VP_OPCODE_MIN; + vp->Opcode = OPCODE_MIN; break; case OP_MUL: - vp->Opcode = VP_OPCODE_MUL; + vp->Opcode = OPCODE_MUL; break; case OP_SGE: - vp->Opcode = VP_OPCODE_SGE; + vp->Opcode = OPCODE_SGE; break; case OP_SLT: - vp->Opcode = VP_OPCODE_SLT; + vp->Opcode = OPCODE_SLT; break; case OP_SUB: - vp->Opcode = VP_OPCODE_SUB; + vp->Opcode = OPCODE_SUB; break; case OP_XPD: - vp->Opcode = VP_OPCODE_XPD; + vp->Opcode = OPCODE_XPD; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->DstReg.File, - &vp->DstReg.Index, vp->DstReg.WriteMask)) + if (parse_vp_dst_reg(ctx, inst, vc_head, Program, &vp->DstReg)) return 1; + for (a = 0; a < 2; a++) { - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->SrcReg[a].File, - &vp->SrcReg[a].Index, &vp->SrcReg[a].Negate, - vp->SrcReg[a].Swizzle, &vp->SrcReg[a].RelAddr)) + if (parse_vp_vector_src_reg(ctx, inst, vc_head, Program, &vp->SrcReg[a])) return 1; } break; @@ -3280,19 +3280,15 @@ parse_vp_instruction (GLcontext * ctx, GLubyte ** inst, case OP_ALU_TRI: switch (code) { case OP_MAD: - vp->Opcode = VP_OPCODE_MAD; + vp->Opcode = OPCODE_MAD; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->DstReg.File, - &vp->DstReg.Index, vp->DstReg.WriteMask)) + if (parse_vp_dst_reg(ctx, inst, vc_head, Program, &vp->DstReg)) return 1; + for (a = 0; a < 3; a++) { - if (parse_vector_src_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->SrcReg[a].File, - &vp->SrcReg[a].Index, &vp->SrcReg[a].Negate, - vp->SrcReg[a].Swizzle, &vp->SrcReg[a].RelAddr)) + if (parse_vp_vector_src_reg(ctx, inst, vc_head, Program, &vp->SrcReg[a])) return 1; } break; @@ -3300,20 +3296,31 @@ parse_vp_instruction (GLcontext * ctx, GLubyte ** inst, case OP_ALU_SWZ: switch (code) { case OP_SWZ: - vp->Opcode = VP_OPCODE_SWZ; + vp->Opcode = OPCODE_SWZ; break; } - if (parse_masked_dst_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->DstReg.File, - &vp->DstReg.Index, vp->DstReg.WriteMask)) - return 1; + { + GLubyte swizzle[4]; + GLubyte negateMask; + GLboolean relAddr; + enum register_file file; + GLint index; - if (parse_src_reg - (ctx, inst, vc_head, Program, (GLint *) & vp->SrcReg[0].File, - &vp->SrcReg[0].Index, &vp->SrcReg[0].RelAddr)) - return 1; - parse_extended_swizzle_mask (inst, vp->SrcReg[0].Swizzle, - &vp->SrcReg[0].Negate); + if (parse_vp_dst_reg(ctx, inst, vc_head, Program, &vp->DstReg)) + return 1; + + if (parse_src_reg(ctx, inst, vc_head, Program, &file, &index, &relAddr)) + return 1; + parse_extended_swizzle_mask (inst, swizzle, &negateMask); + vp->SrcReg[0].File = file; + vp->SrcReg[0].Index = index; + vp->SrcReg[0].NegateBase = negateMask; + vp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0], + swizzle[1], + swizzle[2], + swizzle[3]); + vp->SrcReg[0].RelAddr = relAddr; + } break; } return 0; @@ -3569,20 +3576,25 @@ debug_variables (GLcontext * ctx, struct var_cache *vc_head, } } -#endif +#endif /* DEBUG_PARSING */ /** * The main loop for parsing a fragment or vertex program * - * \return 0 on sucess, 1 on error + * \return 1 on error, 0 on success */ static GLint -parse_arb_program (GLcontext * ctx, GLubyte * inst, struct var_cache **vc_head, - struct arb_program *Program) +parse_instructions(GLcontext * ctx, const GLubyte * inst, + struct var_cache **vc_head, struct arb_program *Program) { + const GLuint maxInst = (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) + ? ctx->Const.FragmentProgram.MaxInstructions + : ctx->Const.VertexProgram.MaxInstructions; GLint err = 0; + ASSERT(MAX_INSTRUCTIONS >= maxInst); + Program->MajorVersion = (GLuint) * inst++; Program->MinorVersion = (GLuint) * inst++; @@ -3613,7 +3625,7 @@ parse_arb_program (GLcontext * ctx, GLubyte * inst, struct var_cache **vc_head, case ARB_POSITION_INVARIANT: if (Program->Base.Target == GL_VERTEX_PROGRAM_ARB) - Program->HintPositionInvariant = 1; + Program->HintPositionInvariant = GL_TRUE; break; case ARB_FRAGMENT_PROGRAM_SHADOW: @@ -3631,54 +3643,24 @@ parse_arb_program (GLcontext * ctx, GLubyte * inst, struct var_cache **vc_head, break; case INSTRUCTION: + /* check length */ + if (Program->Base.NumInstructions + 1 >= maxInst) { + program_error(ctx, Program->Position, + "Max instruction count exceeded"); + return 1; + } Program->Position = parse_position (&inst); - + /* parse the current instruction */ if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) { - - /* Check the instruction count - * XXX: Does END count as an instruction? - */ - if (Program->Base.NumInstructions+1 == MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS) { - _mesa_set_program_error (ctx, Program->Position, - "Max instruction count exceeded!"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Max instruction count exceeded!"); - } - - /* Realloc Program->FPInstructions */ - Program->FPInstructions = - (struct fp_instruction *) _mesa_realloc (Program->FPInstructions, - Program->Base.NumInstructions*sizeof(struct fp_instruction), - (Program->Base.NumInstructions+1)*sizeof (struct fp_instruction)); - - /* parse the current instruction */ err = parse_fp_instruction (ctx, &inst, vc_head, Program, - &Program->FPInstructions[Program->Base.NumInstructions]); - + &Program->Base.Instructions[Program->Base.NumInstructions]); } else { - /* Check the instruction count - * XXX: Does END count as an instruction? - */ - if (Program->Base.NumInstructions+1 == MAX_NV_VERTEX_PROGRAM_INSTRUCTIONS) { - _mesa_set_program_error (ctx, Program->Position, - "Max instruction count exceeded!"); - _mesa_error (ctx, GL_INVALID_OPERATION, - "Max instruction count exceeded!"); - } - - /* Realloc Program->VPInstructions */ - Program->VPInstructions = - (struct vp_instruction *) _mesa_realloc (Program->VPInstructions, - Program->Base.NumInstructions*sizeof(struct vp_instruction), - (Program->Base.NumInstructions +1)*sizeof(struct vp_instruction)); - - /* parse the current instruction */ err = parse_vp_instruction (ctx, &inst, vc_head, Program, - &Program->VPInstructions[Program->Base.NumInstructions]); + &Program->Base.Instructions[Program->Base.NumInstructions]); } - /* increment Program->Base.NumInstructions */ + /* increment instuction count */ Program->Base.NumInstructions++; break; @@ -3695,48 +3677,50 @@ parse_arb_program (GLcontext * ctx, GLubyte * inst, struct var_cache **vc_head, } /* Finally, tag on an OPCODE_END instruction */ - if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) { - Program->FPInstructions = - (struct fp_instruction *) _mesa_realloc (Program->FPInstructions, - Program->Base.NumInstructions*sizeof(struct fp_instruction), - (Program->Base.NumInstructions+1)*sizeof(struct fp_instruction)); - - Program->FPInstructions[Program->Base.NumInstructions].Opcode = FP_OPCODE_END; + { + const GLuint numInst = Program->Base.NumInstructions; + _mesa_init_instructions(Program->Base.Instructions + numInst, 1); + Program->Base.Instructions[numInst].Opcode = OPCODE_END; /* YYY Wrong Position in program, whatever, at least not random -> crash Program->Position = parse_position (&inst); */ - Program->FPInstructions[Program->Base.NumInstructions].StringPos = Program->Position; + Program->Base.Instructions[numInst].StringPos = Program->Position; } - else { - Program->VPInstructions = - (struct vp_instruction *) _mesa_realloc (Program->VPInstructions, - Program->Base.NumInstructions*sizeof(struct vp_instruction), - (Program->Base.NumInstructions+1)*sizeof(struct vp_instruction)); - - Program->VPInstructions[Program->Base.NumInstructions].Opcode = VP_OPCODE_END; - /* YYY Wrong Position in program, whatever, at least not random -> crash - Program->Position = parse_position (&inst); - */ - Program->VPInstructions[Program->Base.NumInstructions].StringPos = Program->Position; - } - - /* increment Program->Base.NumInstructions */ Program->Base.NumInstructions++; + /* + * Initialize native counts to logical counts. The device driver may + * change them if program is translated into a hardware program. + */ + Program->Base.NumNativeInstructions = Program->Base.NumInstructions; + Program->Base.NumNativeTemporaries = Program->Base.NumTemporaries; + Program->Base.NumNativeParameters = Program->Base.NumParameters; + Program->Base.NumNativeAttributes = Program->Base.NumAttributes; + Program->Base.NumNativeAddressRegs = Program->Base.NumAddressRegs; + return err; } + /* XXX temporary */ __extension__ static char core_grammar_text[] = #include "grammar_syn.h" ; -static int set_reg8 (GLcontext *ctx, grammar id, const byte *name, byte value) + +/** + * Set a grammar parameter. + * \param name the grammar parameter + * \param value the new parameter value + * \return 0 if OK, 1 if error + */ +static int +set_reg8 (GLcontext *ctx, grammar id, const char *name, GLubyte value) { char error_msg[300]; GLint error_pos; - if (grammar_set_reg8 (id, name, value)) + if (grammar_set_reg8 (id, (const byte *) name, value)) return 0; grammar_get_last_error ((byte *) error_msg, 300, &error_pos); @@ -3745,46 +3729,78 @@ static int set_reg8 (GLcontext *ctx, grammar id, const byte *name, byte value) return 1; } -static int extension_is_supported (const GLubyte *ext) + +/** + * Enable support for the given language option in the parser. + * \return 1 if OK, 0 if error + */ +static int +enable_ext(GLcontext *ctx, grammar id, const char *name) { - const GLubyte *extensions = GL_CALL(GetString)(GL_EXTENSIONS); - const GLubyte *end = extensions + _mesa_strlen ((const char *) extensions); - const GLint ext_len = _mesa_strlen ((const char *) ext); - - while (extensions < end) - { - const GLubyte *name_end = (const GLubyte *) strchr ((const char *) extensions, ' '); - if (name_end == NULL) - name_end = end; - if (name_end - extensions == ext_len && _mesa_strncmp ((const char *) ext, - (const char *) extensions, ext_len) == 0) - return 1; - extensions = name_end + 1; - } - - return 0; + return !set_reg8(ctx, id, name, 1); } -static int enable_ext (GLcontext *ctx, grammar id, const byte *name, const byte *extname) + +/** + * Enable parser extensions based on which OpenGL extensions are supported + * by this rendering context. + * + * \return GL_TRUE if OK, GL_FALSE if error. + */ +static GLboolean +enable_parser_extensions(GLcontext *ctx, grammar id) { - if (extension_is_supported (extname)) - if (set_reg8 (ctx, id, name, 0x01)) - return 1; - return 0; +#if 0 + /* These are not supported at this time */ + if ((ctx->Extensions.ARB_vertex_blend || + ctx->Extensions.EXT_vertex_weighting) + && !enable_ext(ctx, id, "vertex_blend")) + return GL_FALSE; + if (ctx->Extensions.ARB_matrix_palette + && !enable_ext(ctx, id, "matrix_palette")) + return GL_FALSE; + if (ctx->Extensions.ARB_fragment_program_shadow + && !enable_ext(ctx, id, "fragment_program_shadow")) + return GL_FALSE; +#endif + if (ctx->Extensions.EXT_point_parameters + && !enable_ext(ctx, id, "point_parameters")) + return GL_FALSE; + if (ctx->Extensions.EXT_secondary_color + && !enable_ext(ctx, id, "secondary_color")) + return GL_FALSE; + if (ctx->Extensions.EXT_fog_coord + && !enable_ext(ctx, id, "fog_coord")) + return GL_FALSE; + if (ctx->Extensions.NV_texture_rectangle + && !enable_ext(ctx, id, "texture_rectangle")) + return GL_FALSE; + if (ctx->Extensions.ARB_draw_buffers + && !enable_ext(ctx, id, "draw_buffers")) + return GL_FALSE; + +#if 1 + /* hack for Warcraft (see bug 8060) */ + enable_ext(ctx, id, "vertex_blend"); +#endif + + return GL_TRUE; } + /** * This kicks everything off. * * \param ctx - The GL Context * \param str - The program string * \param len - The program string length - * \param Program - The arb_program struct to return all the parsed info in - * \return 0 on sucess, 1 on error + * \param program - The arb_program struct to return all the parsed info in + * \return GL_TRUE on sucess, GL_FALSE on error */ -GLuint -_mesa_parse_arb_program (GLcontext * ctx, const GLubyte * str, GLsizei len, - struct arb_program * program) +static GLboolean +_mesa_parse_arb_program(GLcontext *ctx, GLenum target, + const GLubyte *str, GLsizei len, + struct arb_program *program) { GLint a, err, error_pos; char error_msg[300]; @@ -3795,42 +3811,46 @@ _mesa_parse_arb_program (GLcontext * ctx, const GLubyte * str, GLsizei len, GLubyte *strz = NULL; static int arbprogram_syn_is_ok = 0; /* XXX temporary */ + /* set the program target before parsing */ + program->Base.Target = target; + /* Reset error state */ _mesa_set_program_error(ctx, -1, NULL); -#if DEBUG_PARSING - fprintf (stderr, "Loading grammar text!\n"); -#endif - - /* check if the arb_grammar_text (arbprogram.syn) is syntactically correct */ + /* check if arb_grammar_text (arbprogram.syn) is syntactically correct */ if (!arbprogram_syn_is_ok) { + /* One-time initialization of parsing system */ grammar grammar_syn_id; - GLint err; GLuint parsed_len; - byte *parsed; grammar_syn_id = grammar_load_from_text ((byte *) core_grammar_text); if (grammar_syn_id == 0) { grammar_get_last_error ((byte *) error_msg, 300, &error_pos); + /* XXX this is not a GL error - it's an implementation bug! - FIX */ _mesa_set_program_error (ctx, error_pos, error_msg); _mesa_error (ctx, GL_INVALID_OPERATION, - "Error loading grammar rule set"); - return 1; + "glProgramStringARB(Error loading grammar rule set)"); + return GL_FALSE; } - err = grammar_check (grammar_syn_id, (byte *) arb_grammar_text, &parsed, &parsed_len); + err = !grammar_check(grammar_syn_id, (byte *) arb_grammar_text, + &parsed, &parsed_len); - /* NOTE: we cant destroy grammar_syn_id right here because grammar_destroy() can - reset the last error - */ + /* 'parsed' is unused here */ + _mesa_free (parsed); + parsed = NULL; - if (err == 0) { + /* NOTE: we can't destroy grammar_syn_id right here because + * grammar_destroy() can reset the last error + */ + if (err) { + /* XXX this is not a GL error - it's an implementation bug! - FIX */ grammar_get_last_error ((byte *) error_msg, 300, &error_pos); _mesa_set_program_error (ctx, error_pos, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, "Error loading grammar rule set"); - + _mesa_error (ctx, GL_INVALID_OPERATION, + "glProgramString(Error loading grammar rule set"); grammar_destroy (grammar_syn_id); - return 1; + return GL_FALSE; } grammar_destroy (grammar_syn_id); @@ -3841,143 +3861,122 @@ _mesa_parse_arb_program (GLcontext * ctx, const GLubyte * str, GLsizei len, /* create the grammar object */ arbprogram_syn_id = grammar_load_from_text ((byte *) arb_grammar_text); if (arbprogram_syn_id == 0) { + /* XXX this is not a GL error - it's an implementation bug! - FIX */ grammar_get_last_error ((GLubyte *) error_msg, 300, &error_pos); _mesa_set_program_error (ctx, error_pos, error_msg); _mesa_error (ctx, GL_INVALID_OPERATION, - "Error loading grammer rule set"); - return 1; + "glProgramString(Error loading grammer rule set)"); + return GL_FALSE; } /* Set program_target register value */ - if (set_reg8 (ctx, arbprogram_syn_id, (byte *) "program_target", + if (set_reg8 (ctx, arbprogram_syn_id, "program_target", program->Base.Target == GL_FRAGMENT_PROGRAM_ARB ? 0x10 : 0x20)) { grammar_destroy (arbprogram_syn_id); - return 1; + return GL_FALSE; } - /* Enable all active extensions */ - if (enable_ext (ctx, arbprogram_syn_id, - (byte *) "vertex_blend", (byte *) "GL_ARB_vertex_blend") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "vertex_blend", (byte *) "GL_EXT_vertex_weighting") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "matrix_palette", (byte *) "GL_ARB_matrix_palette") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "point_parameters", (byte *) "GL_ARB_point_parameters") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "point_parameters", (byte *) "GL_EXT_point_parameters") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "secondary_color", (byte *) "GL_EXT_secondary_color") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "fog_coord", (byte *) "GL_EXT_fog_coord") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "texture_rectangle", (byte *) "GL_ARB_texture_rectangle") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "texture_rectangle", (byte *) "GL_EXT_texture_rectangle") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "texture_rectangle", (byte *) "GL_NV_texture_rectangle") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "fragment_program_shadow", (byte *) "GL_ARB_fragment_program_shadow") || - enable_ext (ctx, arbprogram_syn_id, - (byte *) "draw_buffers", (byte *) "GL_ARB_draw_buffers")) { - grammar_destroy (arbprogram_syn_id); - return 1; + if (!enable_parser_extensions(ctx, arbprogram_syn_id)) { + grammar_destroy(arbprogram_syn_id); + return GL_FALSE; } /* check for NULL character occurences */ { - int i; - for (i = 0; i < len; i++) + GLint i; + for (i = 0; i < len; i++) { if (str[i] == '\0') { - _mesa_set_program_error (ctx, i, "invalid character"); - _mesa_error (ctx, GL_INVALID_OPERATION, "Lexical Error"); - + program_error(ctx, i, "illegal character"); grammar_destroy (arbprogram_syn_id); - return 1; + return GL_FALSE; } + } } /* copy the program string to a null-terminated string */ - /* XXX should I check for NULL from malloc()? */ strz = (GLubyte *) _mesa_malloc (len + 1); + if (!strz) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glProgramStringARB"); + grammar_destroy (arbprogram_syn_id); + return GL_FALSE; + } _mesa_memcpy (strz, str, len); strz[len] = '\0'; -#if DEBUG_PARSING - printf ("Checking Grammar!\n"); -#endif /* do a fast check on program string - initial production buffer is 4K */ - err = grammar_fast_check (arbprogram_syn_id, strz, &parsed, &parsed_len, 0x1000); + err = !grammar_fast_check(arbprogram_syn_id, strz, + &parsed, &parsed_len, 0x1000); /* Syntax parse error */ - if (err == 0) { - _mesa_free (strz); - grammar_get_last_error ((GLubyte *) error_msg, 300, &error_pos); - _mesa_set_program_error (ctx, error_pos, error_msg); - _mesa_error (ctx, GL_INVALID_OPERATION, "glProgramStringARB(syntax error)"); - - /* useful for debugging */ - if (0) { - int line, col; - char *s; - printf("Program: %s\n", (char *) strz); - printf("Error Pos: %d\n", ctx->Program.ErrorPos); - s = (char *) _mesa_find_line_column(strz, strz+ctx->Program.ErrorPos, &line, &col); - printf("line %d col %d: %s\n", line, col, s); - } - - grammar_destroy (arbprogram_syn_id); - return 1; - } + if (err) { + grammar_get_last_error((GLubyte *) error_msg, 300, &error_pos); + program_error(ctx, error_pos, error_msg); #if DEBUG_PARSING - printf ("Destroying grammer dict [parse retval: %d]\n", err); + /* useful for debugging */ + do { + int line, col; + char *s; + fprintf(stderr, "program: %s\n", (char *) strz); + fprintf(stderr, "Error Pos: %d\n", ctx->program.ErrorPos); + s = (char *) _mesa_find_line_column(strz, strz+ctx->program.ErrorPos, + &line, &col); + fprintf(stderr, "line %d col %d: %s\n", line, col, s); + } while (0) #endif + + _mesa_free(strz); + _mesa_free(parsed); + + grammar_destroy (arbprogram_syn_id); + return GL_FALSE; + } + grammar_destroy (arbprogram_syn_id); + /* + * Program string is syntactically correct at this point + * Parse the tokenized version of the program now, generating + * vertex/fragment program instructions. + */ + /* Initialize the arb_program struct */ program->Base.String = strz; + program->Base.Instructions = _mesa_alloc_instructions(MAX_INSTRUCTIONS); program->Base.NumInstructions = program->Base.NumTemporaries = program->Base.NumParameters = program->Base.NumAttributes = program->Base.NumAddressRegs = 0; - program->Parameters = _mesa_new_parameter_list (); - program->InputsRead = 0; - program->OutputsWritten = 0; + program->Base.Parameters = _mesa_new_parameter_list (); + program->Base.InputsRead = 0x0; + program->Base.OutputsWritten = 0x0; program->Position = 0; program->MajorVersion = program->MinorVersion = 0; program->PrecisionOption = GL_DONT_CARE; program->FogOption = GL_NONE; program->HintPositionInvariant = GL_FALSE; for (a = 0; a < MAX_TEXTURE_IMAGE_UNITS; a++) - program->TexturesUsed[a] = 0; + program->TexturesUsed[a] = 0x0; program->NumAluInstructions = program->NumTexInstructions = program->NumTexIndirections = 0; - - program->FPInstructions = NULL; - program->VPInstructions = NULL; + program->UsesKill = 0; vc_head = NULL; - err = 0; + err = GL_FALSE; /* Start examining the tokens in the array */ inst = parsed; /* Check the grammer rev */ if (*inst++ != REVISION) { - _mesa_set_program_error (ctx, 0, "Grammar version mismatch"); - _mesa_error (ctx, GL_INVALID_OPERATION, "glProgramStringARB(Grammar verison mismatch)"); - err = 1; + program_error (ctx, 0, "Grammar version mismatch"); + err = GL_TRUE; } else { /* ignore program target */ inst++; - - err = parse_arb_program (ctx, inst, &vc_head, program); -#if DEBUG_PARSING - fprintf (stderr, "Symantic analysis returns %d [1 is bad!]\n", err); -#endif + err = parse_instructions(ctx, inst, &vc_head, program); } /*debug_variables(ctx, vc_head, program); */ @@ -3986,8 +3985,123 @@ _mesa_parse_arb_program (GLcontext * ctx, const GLubyte * str, GLsizei len, var_cache_destroy (&vc_head); _mesa_free (parsed); -#if DEBUG_PARSING - printf ("_mesa_parse_arb_program() done\n"); -#endif - return err; + + /* Reallocate the instruction array from size [MAX_INSTRUCTIONS] + * to size [ap.Base.NumInstructions]. + */ + program->Base.Instructions + = _mesa_realloc_instructions(program->Base.Instructions, + MAX_INSTRUCTIONS, + program->Base.NumInstructions); + + return !err; +} + + + +void +_mesa_parse_arb_fragment_program(GLcontext* ctx, GLenum target, + const GLvoid *str, GLsizei len, + struct gl_fragment_program *program) +{ + struct arb_program ap; + GLuint i; + + ASSERT(target == GL_FRAGMENT_PROGRAM_ARB); + if (!_mesa_parse_arb_program(ctx, target, (const GLubyte*) str, len, &ap)) { + /* Error in the program. Just return. */ + return; + } + + /* Copy the relevant contents of the arb_program struct into the + * fragment_program struct. + */ + program->Base.String = ap.Base.String; + program->Base.NumInstructions = ap.Base.NumInstructions; + program->Base.NumTemporaries = ap.Base.NumTemporaries; + program->Base.NumParameters = ap.Base.NumParameters; + program->Base.NumAttributes = ap.Base.NumAttributes; + program->Base.NumAddressRegs = ap.Base.NumAddressRegs; + program->Base.NumNativeInstructions = ap.Base.NumNativeInstructions; + program->Base.NumNativeTemporaries = ap.Base.NumNativeTemporaries; + program->Base.NumNativeParameters = ap.Base.NumNativeParameters; + program->Base.NumNativeAttributes = ap.Base.NumNativeAttributes; + program->Base.NumNativeAddressRegs = ap.Base.NumNativeAddressRegs; + program->NumAluInstructions = ap.NumAluInstructions; + program->NumTexInstructions = ap.NumTexInstructions; + program->NumTexIndirections = ap.NumTexIndirections; + program->NumNativeAluInstructions = ap.NumAluInstructions; + program->NumNativeTexInstructions = ap.NumTexInstructions; + program->NumNativeTexIndirections = ap.NumTexIndirections; + program->Base.InputsRead = ap.Base.InputsRead; + program->Base.OutputsWritten = ap.Base.OutputsWritten; + for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++) + program->TexturesUsed[i] = ap.TexturesUsed[i]; + program->FogOption = ap.FogOption; + + if (program->Base.Instructions) + _mesa_free(program->Base.Instructions); + program->Base.Instructions = ap.Base.Instructions; + + if (program->Base.Parameters) + _mesa_free_parameter_list(program->Base.Parameters); + program->Base.Parameters = ap.Base.Parameters; + +#if DEBUG_FP + _mesa_printf("____________Fragment program %u ________\n", program->Base.ID); + _mesa_print_program(&program->Base); +#endif +} + + + +/** + * Parse the vertex program string. If success, update the given + * vertex_program object with the new program. Else, leave the vertex_program + * object unchanged. + */ +void +_mesa_parse_arb_vertex_program(GLcontext *ctx, GLenum target, + const GLvoid *str, GLsizei len, + struct gl_vertex_program *program) +{ + struct arb_program ap; + + ASSERT(target == GL_VERTEX_PROGRAM_ARB); + + if (!_mesa_parse_arb_program(ctx, target, (const GLubyte*) str, len, &ap)) { + /* Error in the program. Just return. */ + return; + } + + /* Copy the relevant contents of the arb_program struct into the + * vertex_program struct. + */ + program->Base.String = ap.Base.String; + program->Base.NumInstructions = ap.Base.NumInstructions; + program->Base.NumTemporaries = ap.Base.NumTemporaries; + program->Base.NumParameters = ap.Base.NumParameters; + program->Base.NumAttributes = ap.Base.NumAttributes; + program->Base.NumAddressRegs = ap.Base.NumAddressRegs; + program->Base.NumNativeInstructions = ap.Base.NumNativeInstructions; + program->Base.NumNativeTemporaries = ap.Base.NumNativeTemporaries; + program->Base.NumNativeParameters = ap.Base.NumNativeParameters; + program->Base.NumNativeAttributes = ap.Base.NumNativeAttributes; + program->Base.NumNativeAddressRegs = ap.Base.NumNativeAddressRegs; + program->Base.InputsRead = ap.Base.InputsRead; + program->Base.OutputsWritten = ap.Base.OutputsWritten; + program->IsPositionInvariant = ap.HintPositionInvariant; + + if (program->Base.Instructions) + _mesa_free(program->Base.Instructions); + program->Base.Instructions = ap.Base.Instructions; + + if (program->Base.Parameters) + _mesa_free_parameter_list(program->Base.Parameters); + program->Base.Parameters = ap.Base.Parameters; + +#if DEBUG_VP + _mesa_printf("____________Vertex program %u __________\n", program->Base.ID); + _mesa_print_program(&program->Base); +#endif } diff --git a/src/kits/opengl/mesa/shader/arbprogparse.h b/src/kits/opengl/mesa/shader/arbprogparse.h index a7b97e92ce..4574e5cd55 100644 --- a/src/kits/opengl/mesa/shader/arbprogparse.h +++ b/src/kits/opengl/mesa/shader/arbprogparse.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.5 * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -26,49 +26,16 @@ #ifndef ARBPROGPARSE_H #define ARBPROGPARSE_H -#include "context.h" #include "mtypes.h" -#include "nvvertprog.h" -#include "nvfragprog.h" -/** - * This is basically a union of the vertex_program and fragment_program - * structs that we can use to parse the program into - * - * XXX: this should go into mtypes.h? - */ -struct arb_program -{ - struct program Base; - struct program_parameter_list *Parameters; - GLuint InputsRead; - GLuint OutputsWritten; +extern void +_mesa_parse_arb_vertex_program(GLcontext *ctx, GLenum target, + const GLvoid *str, GLsizei len, + struct gl_vertex_program *program); - GLuint Position; /* Just used for error reporting while parsing */ - GLuint MajorVersion; - GLuint MinorVersion; +extern void +_mesa_parse_arb_fragment_program(GLcontext *ctx, GLenum target, + const GLvoid *str, GLsizei len, + struct gl_fragment_program *program); - /* ARB_vertex_program specifics */ - struct vp_instruction *VPInstructions; - - /* Options currently recognized by the parser */ - /* ARB_fp */ - GLenum PrecisionOption; /* GL_DONT_CARE, GL_NICEST or GL_FASTEST */ - GLenum FogOption; /* GL_NONE, GL_LINEAR, GL_EXP or GL_EXP2 */ - - /* ARB_fp & _vp */ - GLboolean HintPositionInvariant; - - /* ARB_fragment_program sepecifics */ - struct fp_instruction *FPInstructions; - GLuint TexturesUsed[MAX_TEXTURE_IMAGE_UNITS]; - GLuint NumAluInstructions; - GLuint NumTexInstructions; - GLuint NumTexIndirections; -}; - -extern GLuint -_mesa_parse_arb_program( GLcontext *ctx, const GLubyte *str, GLsizei len, - struct arb_program *Program ); - #endif diff --git a/src/kits/opengl/mesa/shader/arbprogram.c b/src/kits/opengl/mesa/shader/arbprogram.c index ad8683f00b..bff80d7ee3 100644 --- a/src/kits/opengl/mesa/shader/arbprogram.c +++ b/src/kits/opengl/mesa/shader/arbprogram.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.5.2 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,17 +31,12 @@ #include "glheader.h" #include "arbprogram.h" -#include "arbfragparse.h" -#include "arbvertparse.h" +#include "arbprogparse.h" #include "context.h" #include "imports.h" #include "macros.h" #include "mtypes.h" -#include "nvprogram.h" -#include "nvfragparse.h" -#include "nvfragprog.h" -#include "nvvertparse.h" -#include "nvvertprog.h" +#include "program.h" void GLAPIENTRY @@ -50,15 +45,15 @@ _mesa_EnableVertexAttribArrayARB(GLuint index) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (index >= ctx->Const.MaxVertexProgramAttribs) { + if (index >= ctx->Const.VertexProgram.MaxAttribs) { _mesa_error(ctx, GL_INVALID_VALUE, "glEnableVertexAttribArrayARB(index)"); return; } FLUSH_VERTICES(ctx, _NEW_ARRAY); - ctx->Array.VertexAttrib[index].Enabled = GL_TRUE; - ctx->Array._Enabled |= _NEW_ARRAY_ATTRIB(index); + ctx->Array.ArrayObj->VertexAttrib[index].Enabled = GL_TRUE; + ctx->Array.ArrayObj->_Enabled |= _NEW_ARRAY_ATTRIB(index); ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index); } @@ -69,15 +64,15 @@ _mesa_DisableVertexAttribArrayARB(GLuint index) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (index >= ctx->Const.MaxVertexProgramAttribs) { + if (index >= ctx->Const.VertexProgram.MaxAttribs) { _mesa_error(ctx, GL_INVALID_VALUE, "glEnableVertexAttribArrayARB(index)"); return; } FLUSH_VERTICES(ctx, _NEW_ARRAY); - ctx->Array.VertexAttrib[index].Enabled = GL_FALSE; - ctx->Array._Enabled &= ~_NEW_ARRAY_ATTRIB(index); + ctx->Array.ArrayObj->VertexAttrib[index].Enabled = GL_FALSE; + ctx->Array.ArrayObj->_Enabled &= ~_NEW_ARRAY_ATTRIB(index); ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index); } @@ -107,40 +102,43 @@ _mesa_GetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (index == 0 || index >= MAX_VERTEX_PROGRAM_ATTRIBS) { + if (index >= MAX_VERTEX_PROGRAM_ATTRIBS) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetVertexAttribfvARB(index)"); return; } switch (pname) { case GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB: - params[0] = (GLfloat) ctx->Array.VertexAttrib[index].Enabled; + params[0] = (GLfloat) ctx->Array.ArrayObj->VertexAttrib[index].Enabled; break; case GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB: - params[0] = (GLfloat) ctx->Array.VertexAttrib[index].Size; + params[0] = (GLfloat) ctx->Array.ArrayObj->VertexAttrib[index].Size; break; case GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB: - params[0] = (GLfloat) ctx->Array.VertexAttrib[index].Stride; + params[0] = (GLfloat) ctx->Array.ArrayObj->VertexAttrib[index].Stride; break; case GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB: - params[0] = (GLfloat) ctx->Array.VertexAttrib[index].Type; + params[0] = (GLfloat) ctx->Array.ArrayObj->VertexAttrib[index].Type; break; case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB: - params[0] = ctx->Array.VertexAttrib[index].Normalized; + params[0] = ctx->Array.ArrayObj->VertexAttrib[index].Normalized; break; case GL_CURRENT_VERTEX_ATTRIB_ARB: - FLUSH_CURRENT(ctx, 0); - /* XXX should read: - COPY_4V(params, ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index]); - */ - COPY_4V(params, ctx->Current.Attrib[index]); + if (index == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetVertexAttribfvARB(index==0)"); + return; + } + FLUSH_CURRENT(ctx, 0); + COPY_4V(params, ctx->Current.Attrib[VERT_ATTRIB_GENERIC0 + index]); break; case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB: if (!ctx->Extensions.ARB_vertex_buffer_object) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribfvARB(pname)"); return; } - params[0] = (GLfloat) ctx->Array.VertexAttrib[index].BufferObj->Name; + params[0] = (GLfloat) ctx->Array.ArrayObj->VertexAttrib[index].BufferObj->Name; + break; default: _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribfvARB(pname)"); return; @@ -173,7 +171,7 @@ _mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); - if (index >= ctx->Const.MaxVertexProgramAttribs) { + if (index >= ctx->Const.VertexProgram.MaxAttribs) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetVertexAttribPointerARB(index)"); return; } @@ -183,7 +181,32 @@ _mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer) return; } - *pointer = (GLvoid *) ctx->Array.VertexAttrib[index].Ptr;; + *pointer = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[index].Ptr; +} + + +/** + * Determine if id names a vertex or fragment program. + * \note Not compiled into display lists. + * \note Called from both glIsProgramNV and glIsProgramARB. + * \param id is the program identifier + * \return GL_TRUE if id is a program, else GL_FALSE. + */ +GLboolean GLAPIENTRY +_mesa_IsProgramARB(GLuint id) +{ + struct gl_program *prog = NULL; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); + + if (id == 0) + return GL_FALSE; + + prog = _mesa_lookup_program(ctx, id); + if (prog && (prog != &_mesa_DummyProgram)) + return GL_TRUE; + else + return GL_FALSE; } @@ -196,28 +219,23 @@ _mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len, FLUSH_VERTICES(ctx, _NEW_PROGRAM); + if (format != GL_PROGRAM_FORMAT_ASCII_ARB) { + _mesa_error(ctx, GL_INVALID_ENUM, "glProgramStringARB(format)"); + return; + } + if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { - struct vertex_program *prog = ctx->VertexProgram.Current; - if (format != GL_PROGRAM_FORMAT_ASCII_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramStringARB(format)"); - return; - } - _mesa_parse_arb_vertex_program(ctx, target, (const GLubyte *) string, - len, prog); + struct gl_vertex_program *prog = ctx->VertexProgram.Current; + _mesa_parse_arb_vertex_program(ctx, target, string, len, prog); if (ctx->Driver.ProgramStringNotify) ctx->Driver.ProgramStringNotify( ctx, target, &prog->Base ); } else if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { - struct fragment_program *prog = ctx->FragmentProgram.Current; - if (format != GL_PROGRAM_FORMAT_ASCII_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramStringARB(format)"); - return; - } - _mesa_parse_arb_fragment_program(ctx, target, (const GLubyte *) string, - len, prog); + struct gl_fragment_program *prog = ctx->FragmentProgram.Current; + _mesa_parse_arb_fragment_program(ctx, target, string, len, prog); if (ctx->Driver.ProgramStringNotify) ctx->Driver.ProgramStringNotify( ctx, target, &prog->Base ); @@ -259,7 +277,7 @@ _mesa_ProgramEnvParameter4fARB(GLenum target, GLuint index, if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { - if (index >= ctx->Const.MaxFragmentProgramEnvParams) { + if (index >= ctx->Const.FragmentProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameter(index)"); return; } @@ -267,7 +285,7 @@ _mesa_ProgramEnvParameter4fARB(GLenum target, GLuint index, } else if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { - if (index >= ctx->Const.MaxVertexProgramEnvParams) { + if (index >= ctx->Const.VertexProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameter(index)"); return; } @@ -289,6 +307,50 @@ _mesa_ProgramEnvParameter4fvARB(GLenum target, GLuint index, } +void GLAPIENTRY +_mesa_ProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, + const GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + unsigned i; + GLfloat * dest; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + FLUSH_VERTICES(ctx, _NEW_PROGRAM); + + if (count <= 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameters4fv(count)"); + } + + if (target == GL_FRAGMENT_PROGRAM_ARB + && ctx->Extensions.ARB_fragment_program) { + if ((index + count) > ctx->Const.FragmentProgram.MaxEnvParams) { + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameters4fv(index + count)"); + return; + } + dest = ctx->FragmentProgram.Parameters[index]; + } + else if (target == GL_VERTEX_PROGRAM_ARB + && ctx->Extensions.ARB_vertex_program) { + if ((index + count) > ctx->Const.VertexProgram.MaxEnvParams) { + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameters4fv(index + count)"); + return; + } + dest = ctx->VertexProgram.Parameters[index]; + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, "glProgramEnvParameters4fv(target)"); + return; + } + + for ( i = 0 ; i < count ; i++ ) { + COPY_4V(dest, params); + params += 4; + dest += 4; + } +} + + void GLAPIENTRY _mesa_GetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble *params) @@ -319,7 +381,7 @@ _mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index, if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { - if (index >= ctx->Const.MaxFragmentProgramEnvParams) { + if (index >= ctx->Const.FragmentProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramEnvParameter(index)"); return; } @@ -327,7 +389,7 @@ _mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index, } else if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { - if (index >= ctx->Const.MaxVertexProgramEnvParams) { + if (index >= ctx->Const.VertexProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramEnvParameter(index)"); return; } @@ -348,7 +410,7 @@ _mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); - struct program *prog; + struct gl_program *prog; ASSERT_OUTSIDE_BEGIN_END(ctx); FLUSH_VERTICES(ctx, _NEW_PROGRAM); @@ -357,7 +419,7 @@ _mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index, && ctx->Extensions.NV_fragment_program) || (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program)) { - if (index >= ctx->Const.MaxFragmentProgramLocalParams) { + if (index >= ctx->Const.FragmentProgram.MaxLocalParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramLocalParameterARB"); return; } @@ -365,7 +427,7 @@ _mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index, } else if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { - if (index >= ctx->Const.MaxVertexProgramLocalParams) { + if (index >= ctx->Const.VertexProgram.MaxLocalParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramLocalParameterARB"); return; } @@ -396,6 +458,50 @@ _mesa_ProgramLocalParameter4fvARB(GLenum target, GLuint index, } +void GLAPIENTRY +_mesa_ProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, + const GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_program *prog; + unsigned i; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + FLUSH_VERTICES(ctx, _NEW_PROGRAM); + + if (count <= 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramLocalParameters4fv(count)"); + } + + if (target == GL_FRAGMENT_PROGRAM_ARB + && ctx->Extensions.ARB_fragment_program) { + if ((index + count) > ctx->Const.FragmentProgram.MaxLocalParams) { + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramLocalParameters4fvEXT(index + count)"); + return; + } + prog = &(ctx->FragmentProgram.Current->Base); + } + else if (target == GL_VERTEX_PROGRAM_ARB + && ctx->Extensions.ARB_vertex_program) { + if ((index + count) > ctx->Const.VertexProgram.MaxLocalParams) { + _mesa_error(ctx, GL_INVALID_VALUE, "glProgramLocalParameters4fvEXT(index + count)"); + return; + } + prog = &(ctx->VertexProgram.Current->Base); + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, "glProgramLocalParameters4fvEXT(target)"); + return; + } + + for (i = 0; i < count; i++) { + ASSERT((index + i) < MAX_PROGRAM_LOCAL_PARAMS); + COPY_4V(prog->LocalParams[index + i], params); + params += 4; + } +} + + /** * Note, this function is also used by the GL_NV_fragment_program extension. */ @@ -429,7 +535,7 @@ void GLAPIENTRY _mesa_GetProgramLocalParameterfvARB(GLenum target, GLuint index, GLfloat *params) { - const struct program *prog; + const struct gl_program *prog; GLuint maxParams; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -437,12 +543,12 @@ _mesa_GetProgramLocalParameterfvARB(GLenum target, GLuint index, if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { prog = &(ctx->VertexProgram.Current->Base); - maxParams = ctx->Const.MaxVertexProgramLocalParams; + maxParams = ctx->Const.VertexProgram.MaxLocalParams; } else if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { prog = &(ctx->FragmentProgram.Current->Base); - maxParams = ctx->Const.MaxFragmentProgramLocalParams; + maxParams = ctx->Const.FragmentProgram.MaxLocalParams; } else if (target == GL_FRAGMENT_PROGRAM_NV && ctx->Extensions.NV_fragment_program) { @@ -486,7 +592,8 @@ _mesa_GetProgramLocalParameterdvARB(GLenum target, GLuint index, void GLAPIENTRY _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params) { - struct program *prog; + const struct gl_program_constants *limits; + struct gl_program *prog; GET_CURRENT_CONTEXT(ctx); if (!ctx->_CurrentProgram) @@ -495,10 +602,12 @@ _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params) if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { prog = &(ctx->VertexProgram.Current->Base); + limits = &ctx->Const.VertexProgram; } else if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { prog = &(ctx->FragmentProgram.Current->Base); + limits = &ctx->Const.FragmentProgram; } else { _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(target)"); @@ -506,188 +615,150 @@ _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params) } ASSERT(prog); + ASSERT(limits); + /* Queries supported for both vertex and fragment programs */ switch (pname) { case GL_PROGRAM_LENGTH_ARB: - *params = prog->String ? _mesa_strlen((char *) prog->String) : 0; - break; + *params + = prog->String ? (GLint) _mesa_strlen((char *) prog->String) : 0; + return; case GL_PROGRAM_FORMAT_ARB: *params = prog->Format; - break; + return; case GL_PROGRAM_BINDING_ARB: *params = prog->Id; - break; + return; case GL_PROGRAM_INSTRUCTIONS_ARB: *params = prog->NumInstructions; - break; + return; case GL_MAX_PROGRAM_INSTRUCTIONS_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramInstructions; - else - *params = ctx->Const.MaxFragmentProgramInstructions; - break; + *params = limits->MaxInstructions; + return; case GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB: - *params = prog->NumInstructions; - break; + *params = prog->NumNativeInstructions; + return; case GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramInstructions; - else - *params = ctx->Const.MaxFragmentProgramInstructions; - break; + *params = limits->MaxNativeInstructions; + return; case GL_PROGRAM_TEMPORARIES_ARB: *params = prog->NumTemporaries; - break; + return; case GL_MAX_PROGRAM_TEMPORARIES_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramTemps; - else - *params = ctx->Const.MaxFragmentProgramTemps; - break; + *params = limits->MaxTemps; + return; case GL_PROGRAM_NATIVE_TEMPORARIES_ARB: - /* XXX same as GL_PROGRAM_TEMPORARIES_ARB? */ - *params = prog->NumTemporaries; - break; + *params = prog->NumNativeTemporaries; + return; case GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB: - /* XXX same as GL_MAX_PROGRAM_TEMPORARIES_ARB? */ - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramTemps; - else - *params = ctx->Const.MaxFragmentProgramTemps; - break; + *params = limits->MaxNativeTemps; + return; case GL_PROGRAM_PARAMETERS_ARB: *params = prog->NumParameters; - break; + return; case GL_MAX_PROGRAM_PARAMETERS_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramLocalParams; - else - *params = ctx->Const.MaxFragmentProgramLocalParams; - break; + *params = limits->MaxParameters; + return; case GL_PROGRAM_NATIVE_PARAMETERS_ARB: - /* XXX same as GL_MAX_PROGRAM_PARAMETERS_ARB? */ - *params = prog->NumParameters; - break; + *params = prog->NumNativeParameters; + return; case GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB: - /* XXX same as GL_MAX_PROGRAM_PARAMETERS_ARB? */ - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramLocalParams; - else - *params = ctx->Const.MaxFragmentProgramLocalParams; - break; + *params = limits->MaxNativeParameters; + return; case GL_PROGRAM_ATTRIBS_ARB: *params = prog->NumAttributes; - break; + return; case GL_MAX_PROGRAM_ATTRIBS_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramAttribs; - else - *params = ctx->Const.MaxFragmentProgramAttribs; - break; + *params = limits->MaxAttribs; + return; case GL_PROGRAM_NATIVE_ATTRIBS_ARB: - /* XXX same as GL_PROGRAM_ATTRIBS_ARB? */ - *params = prog->NumAttributes; - break; + *params = prog->NumNativeAttributes; + return; case GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB: - /* XXX same as GL_MAX_PROGRAM_ATTRIBS_ARB? */ - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramAttribs; - else - *params = ctx->Const.MaxFragmentProgramAttribs; - break; + *params = limits->MaxNativeAttribs; + return; case GL_PROGRAM_ADDRESS_REGISTERS_ARB: *params = prog->NumAddressRegs; - break; + return; case GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramAddressRegs; - else - *params = ctx->Const.MaxFragmentProgramAddressRegs; - break; + *params = limits->MaxAddressRegs; + return; case GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB: - /* XXX same as GL_PROGRAM_ADDRESS_REGISTERS_ARB? */ - *params = prog->NumAddressRegs; - break; + *params = prog->NumNativeAddressRegs; + return; case GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB: - /* XXX same as GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB? */ - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramAddressRegs; - else - *params = ctx->Const.MaxFragmentProgramAddressRegs; - break; + *params = limits->MaxNativeAddressRegs; + return; case GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramLocalParams; - else - *params = ctx->Const.MaxFragmentProgramLocalParams; - break; + *params = limits->MaxLocalParams; + return; case GL_MAX_PROGRAM_ENV_PARAMETERS_ARB: - if (target == GL_VERTEX_PROGRAM_ARB) - *params = ctx->Const.MaxVertexProgramEnvParams; - else - *params = ctx->Const.MaxFragmentProgramEnvParams; - break; + *params = limits->MaxEnvParams; + return; case GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB: + /* + * XXX we may not really need a driver callback here. + * If the number of native instructions, registers, etc. used + * are all below the maximums, we could return true. + * The spec says that even if this query returns true, there's + * no guarantee that the program will run in hardware. + */ if (ctx->Driver.IsProgramNative) *params = ctx->Driver.IsProgramNative( ctx, target, prog ); else *params = GL_TRUE; - break; - - /* - * The following apply to fragment programs only. - */ - case GL_PROGRAM_ALU_INSTRUCTIONS_ARB: - case GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: - if (target != GL_FRAGMENT_PROGRAM_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(target)"); - return; - } - *params = ctx->FragmentProgram.Current->NumAluInstructions; - break; - case GL_PROGRAM_TEX_INSTRUCTIONS_ARB: - case GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: - if (target != GL_FRAGMENT_PROGRAM_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(target)"); - return; - } - *params = ctx->FragmentProgram.Current->NumTexInstructions; - break; - case GL_PROGRAM_TEX_INDIRECTIONS_ARB: - case GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: - if (target != GL_FRAGMENT_PROGRAM_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(target)"); - return; - } - *params = ctx->FragmentProgram.Current->NumTexIndirections; - break; - case GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB: - case GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: - if (target != GL_FRAGMENT_PROGRAM_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(target)"); - return; - } - *params = ctx->Const.MaxFragmentProgramAluInstructions; - break; - case GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB: - case GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: - if (target != GL_FRAGMENT_PROGRAM_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(target)"); - return; - } - *params = ctx->Const.MaxFragmentProgramTexInstructions; - break; - case GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB: - case GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: - if (target != GL_FRAGMENT_PROGRAM_ARB) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(target)"); - return; - } - *params = ctx->Const.MaxFragmentProgramTexIndirections; - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(pname)"); return; + default: + /* continue with fragment-program only queries below */ + break; + } + + /* + * The following apply to fragment programs only (at this time) + */ + if (target == GL_FRAGMENT_PROGRAM_ARB) { + const struct gl_fragment_program *fp = ctx->FragmentProgram.Current; + switch (pname) { + case GL_PROGRAM_ALU_INSTRUCTIONS_ARB: + *params = fp->NumNativeAluInstructions; + return; + case GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: + *params = fp->NumAluInstructions; + return; + case GL_PROGRAM_TEX_INSTRUCTIONS_ARB: + *params = fp->NumTexInstructions; + return; + case GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: + *params = fp->NumNativeTexInstructions; + return; + case GL_PROGRAM_TEX_INDIRECTIONS_ARB: + *params = fp->NumTexIndirections; + return; + case GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: + *params = fp->NumNativeTexIndirections; + return; + case GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB: + *params = limits->MaxAluInstructions; + return; + case GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: + *params = limits->MaxNativeAluInstructions; + return; + case GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB: + *params = limits->MaxTexInstructions; + return; + case GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: + *params = limits->MaxNativeTexInstructions; + return; + case GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB: + *params = limits->MaxTexIndirections; + return; + case GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: + *params = limits->MaxNativeTexIndirections; + return; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramivARB(pname)"); + return; + } } } @@ -695,7 +766,8 @@ _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params) void GLAPIENTRY _mesa_GetProgramStringARB(GLenum target, GLenum pname, GLvoid *string) { - struct program *prog; + const struct gl_program *prog; + char *dst = (char *) string; GET_CURRENT_CONTEXT(ctx); if (!ctx->_CurrentProgram) @@ -719,6 +791,8 @@ _mesa_GetProgramStringARB(GLenum target, GLenum pname, GLvoid *string) return; } - MEMCPY(string, prog->String, _mesa_strlen((char *) prog->String)); + if (prog->String) + _mesa_memcpy(dst, prog->String, _mesa_strlen((char *) prog->String)); + else + *dst = '\0'; } - diff --git a/src/kits/opengl/mesa/shader/arbprogram.h b/src/kits/opengl/mesa/shader/arbprogram.h index e1b99ab686..233f662965 100644 --- a/src/kits/opengl/mesa/shader/arbprogram.h +++ b/src/kits/opengl/mesa/shader/arbprogram.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.5.2 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -51,6 +51,10 @@ extern void GLAPIENTRY _mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer); +extern GLboolean GLAPIENTRY +_mesa_IsProgramARB(GLuint id); + + extern void GLAPIENTRY _mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string); @@ -76,6 +80,11 @@ _mesa_ProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat *params); +extern void GLAPIENTRY +_mesa_ProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, + const GLfloat *params); + + extern void GLAPIENTRY _mesa_ProgramLocalParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, @@ -97,6 +106,11 @@ _mesa_ProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat *params); +extern void GLAPIENTRY +_mesa_ProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, + const GLfloat *params); + + extern void GLAPIENTRY _mesa_GetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble *params); diff --git a/src/kits/opengl/mesa/shader/arbprogram.syn b/src/kits/opengl/mesa/shader/arbprogram.syn deleted file mode 100644 index 6ab0f26938..0000000000 --- a/src/kits/opengl/mesa/shader/arbprogram.syn +++ /dev/null @@ -1,2786 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 6.2 - * - * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - /** - * \file arbprogram.syn - * ARB_fragment/vertex_program syntax - * \author Michal Krol - */ - -.syntax program; - -/* - This value must be incremented every time emit code values or structure of the production - array changes. This value is placed at the beginning of the production array. The loader - compares the value with its REVISION value. If they do not match, the loader is not up - to date. -*/ -.emtcode REVISION 0x09 - -/* program type */ -.emtcode FRAGMENT_PROGRAM 0x01 -.emtcode VERTEX_PROGRAM 0x02 - -/* program section */ -.emtcode OPTION 0x01 -.emtcode INSTRUCTION 0x02 -.emtcode DECLARATION 0x03 -.emtcode END 0x04 - -/* GL_ARB_fragment_program option */ -.emtcode ARB_PRECISION_HINT_FASTEST 0x00 -.emtcode ARB_PRECISION_HINT_NICEST 0x01 -.emtcode ARB_FOG_EXP 0x02 -.emtcode ARB_FOG_EXP2 0x03 -.emtcode ARB_FOG_LINEAR 0x04 - -/* GL_ARB_vertex_program option */ -.emtcode ARB_POSITION_INVARIANT 0x05 - -/* GL_ARB_fragment_program_shadow option */ -.emtcode ARB_FRAGMENT_PROGRAM_SHADOW 0x06 - -/* GL_ARB_draw_buffers option */ -.emtcode ARB_DRAW_BUFFERS 0x07 - -/* GL_ARB_fragment_program instruction class */ -.emtcode OP_ALU_INST 0x00 -.emtcode OP_TEX_INST 0x01 - -/* GL_ARB_vertex_program instruction class */ -/* OP_ALU_INST */ - -/* GL_ARB_fragment_program instruction type */ -.emtcode OP_ALU_VECTOR 0x00 -.emtcode OP_ALU_SCALAR 0x01 -.emtcode OP_ALU_BINSC 0x02 -.emtcode OP_ALU_BIN 0x03 -.emtcode OP_ALU_TRI 0x04 -.emtcode OP_ALU_SWZ 0x05 -.emtcode OP_TEX_SAMPLE 0x06 -.emtcode OP_TEX_KIL 0x07 - -/* GL_ARB_vertex_program instruction type */ -.emtcode OP_ALU_ARL 0x08 -/* OP_ALU_VECTOR */ -/* OP_ALU_SCALAR */ -/* OP_ALU_BINSC */ -/* OP_ALU_BIN */ -/* OP_ALU_TRI */ -/* OP_ALU_SWZ */ - -/* GL_ARB_fragment_program instruction code */ -.emtcode OP_ABS 0x00 -.emtcode OP_ABS_SAT 0x1B -.emtcode OP_FLR 0x09 -.emtcode OP_FLR_SAT 0x26 -.emtcode OP_FRC 0x0A -.emtcode OP_FRC_SAT 0x27 -.emtcode OP_LIT 0x0C -.emtcode OP_LIT_SAT 0x2A -.emtcode OP_MOV 0x11 -.emtcode OP_MOV_SAT 0x30 -.emtcode OP_COS 0x1F -.emtcode OP_COS_SAT 0x20 -.emtcode OP_EX2 0x07 -.emtcode OP_EX2_SAT 0x25 -.emtcode OP_LG2 0x0B -.emtcode OP_LG2_SAT 0x29 -.emtcode OP_RCP 0x14 -.emtcode OP_RCP_SAT 0x33 -.emtcode OP_RSQ 0x15 -.emtcode OP_RSQ_SAT 0x34 -.emtcode OP_SIN 0x38 -.emtcode OP_SIN_SAT 0x39 -.emtcode OP_SCS 0x35 -.emtcode OP_SCS_SAT 0x36 -.emtcode OP_POW 0x13 -.emtcode OP_POW_SAT 0x32 -.emtcode OP_ADD 0x01 -.emtcode OP_ADD_SAT 0x1C -.emtcode OP_DP3 0x03 -.emtcode OP_DP3_SAT 0x21 -.emtcode OP_DP4 0x04 -.emtcode OP_DP4_SAT 0x22 -.emtcode OP_DPH 0x05 -.emtcode OP_DPH_SAT 0x23 -.emtcode OP_DST 0x06 -.emtcode OP_DST_SAT 0x24 -.emtcode OP_MAX 0x0F -.emtcode OP_MAX_SAT 0x2E -.emtcode OP_MIN 0x10 -.emtcode OP_MIN_SAT 0x2F -.emtcode OP_MUL 0x12 -.emtcode OP_MUL_SAT 0x31 -.emtcode OP_SGE 0x16 -.emtcode OP_SGE_SAT 0x37 -.emtcode OP_SLT 0x17 -.emtcode OP_SLT_SAT 0x3A -.emtcode OP_SUB 0x18 -.emtcode OP_SUB_SAT 0x3B -.emtcode OP_XPD 0x1A -.emtcode OP_XPD_SAT 0x43 -.emtcode OP_CMP 0x1D -.emtcode OP_CMP_SAT 0x1E -.emtcode OP_LRP 0x2B -.emtcode OP_LRP_SAT 0x2C -.emtcode OP_MAD 0x0E -.emtcode OP_MAD_SAT 0x2D -.emtcode OP_SWZ 0x19 -.emtcode OP_SWZ_SAT 0x3C -.emtcode OP_TEX 0x3D -.emtcode OP_TEX_SAT 0x3E -.emtcode OP_TXB 0x3F -.emtcode OP_TXB_SAT 0x40 -.emtcode OP_TXP 0x41 -.emtcode OP_TXP_SAT 0x42 -.emtcode OP_KIL 0x28 - -/* GL_ARB_vertex_program instruction code */ -.emtcode OP_ARL 0x02 -/* OP_ABS */ -/* OP_FLR */ -/* OP_FRC */ -/* OP_LIT */ -/* OP_MOV */ -/* OP_EX2 */ -.emtcode OP_EXP 0x08 -/* OP_LG2 */ -.emtcode OP_LOG 0x0D -/* OP_RCP */ -/* OP_RSQ */ -/* OP_POW */ -/* OP_ADD */ -/* OP_DP3 */ -/* OP_DP4 */ -/* OP_DPH */ -/* OP_DST */ -/* OP_MAX */ -/* OP_MIN */ -/* OP_MUL */ -/* OP_SGE */ -/* OP_SLT */ -/* OP_SUB */ -/* OP_XPD */ -/* OP_MAD */ -/* OP_SWZ */ - -/* fragment attribute binding */ -.emtcode FRAGMENT_ATTRIB_COLOR 0x01 -.emtcode FRAGMENT_ATTRIB_TEXCOORD 0x02 -.emtcode FRAGMENT_ATTRIB_FOGCOORD 0x03 -.emtcode FRAGMENT_ATTRIB_POSITION 0x04 - -/* vertex attribute binding */ -.emtcode VERTEX_ATTRIB_POSITION 0x01 -.emtcode VERTEX_ATTRIB_WEIGHT 0x02 -.emtcode VERTEX_ATTRIB_NORMAL 0x03 -.emtcode VERTEX_ATTRIB_COLOR 0x04 -.emtcode VERTEX_ATTRIB_FOGCOORD 0x05 -.emtcode VERTEX_ATTRIB_TEXCOORD 0x06 -.emtcode VERTEX_ATTRIB_MATRIXINDEX 0x07 -.emtcode VERTEX_ATTRIB_GENERIC 0x08 - -/* fragment result binding */ -.emtcode FRAGMENT_RESULT_COLOR 0x01 -.emtcode FRAGMENT_RESULT_DEPTH 0x02 - -/* vertex result binding */ -.emtcode VERTEX_RESULT_POSITION 0x01 -.emtcode VERTEX_RESULT_COLOR 0x02 -.emtcode VERTEX_RESULT_FOGCOORD 0x03 -.emtcode VERTEX_RESULT_POINTSIZE 0x04 -.emtcode VERTEX_RESULT_TEXCOORD 0x05 - -/* texture target */ -.emtcode TEXTARGET_1D 0x01 -.emtcode TEXTARGET_2D 0x02 -.emtcode TEXTARGET_3D 0x03 -.emtcode TEXTARGET_RECT 0x04 -.emtcode TEXTARGET_CUBE 0x05 -/* GL_ARB_fragment_program_shadow */ -.emtcode TEXTARGET_SHADOW1D 0x06 -.emtcode TEXTARGET_SHADOW2D 0x07 -.emtcode TEXTARGET_SHADOWRECT 0x08 - -/* face type */ -.emtcode FACE_FRONT 0x00 -.emtcode FACE_BACK 0x01 - -/* color type */ -.emtcode COLOR_PRIMARY 0x00 -.emtcode COLOR_SECONDARY 0x01 - -/* component */ -.emtcode COMPONENT_X 0x00 -.emtcode COMPONENT_Y 0x01 -.emtcode COMPONENT_Z 0x02 -.emtcode COMPONENT_W 0x03 -.emtcode COMPONENT_0 0x04 -.emtcode COMPONENT_1 0x05 - -/* array index type */ -.emtcode ARRAY_INDEX_ABSOLUTE 0x00 -.emtcode ARRAY_INDEX_RELATIVE 0x01 - -/* matrix name */ -.emtcode MATRIX_MODELVIEW 0x01 -.emtcode MATRIX_PROJECTION 0x02 -.emtcode MATRIX_MVP 0x03 -.emtcode MATRIX_TEXTURE 0x04 -.emtcode MATRIX_PALETTE 0x05 -.emtcode MATRIX_PROGRAM 0x06 - -/* matrix modifier */ -.emtcode MATRIX_MODIFIER_IDENTITY 0x00 -.emtcode MATRIX_MODIFIER_INVERSE 0x01 -.emtcode MATRIX_MODIFIER_TRANSPOSE 0x02 -.emtcode MATRIX_MODIFIER_INVTRANS 0x03 - -/* constant type */ -.emtcode CONSTANT_SCALAR 0x01 -.emtcode CONSTANT_VECTOR 0x02 - -/* program param type */ -.emtcode PROGRAM_PARAM_ENV 0x01 -.emtcode PROGRAM_PARAM_LOCAL 0x02 - -/* register type */ -.emtcode REGISTER_ATTRIB 0x01 -.emtcode REGISTER_PARAM 0x02 -.emtcode REGISTER_RESULT 0x03 -.emtcode REGISTER_ESTABLISHED_NAME 0x04 - -/* param binding */ -.emtcode PARAM_NULL 0x00 -.emtcode PARAM_ARRAY_ELEMENT 0x01 -.emtcode PARAM_STATE_ELEMENT 0x02 -.emtcode PARAM_PROGRAM_ELEMENT 0x03 -.emtcode PARAM_PROGRAM_ELEMENTS 0x04 -.emtcode PARAM_CONSTANT 0x05 - -/* param state property */ -.emtcode STATE_MATERIAL 0x01 -.emtcode STATE_LIGHT 0x02 -.emtcode STATE_LIGHT_MODEL 0x03 -.emtcode STATE_LIGHT_PROD 0x04 -.emtcode STATE_FOG 0x05 -.emtcode STATE_MATRIX_ROWS 0x06 -/* GL_ARB_fragment_program */ -.emtcode STATE_TEX_ENV 0x07 -.emtcode STATE_DEPTH 0x08 -/* GL_ARB_vertex_program */ -.emtcode STATE_TEX_GEN 0x09 -.emtcode STATE_CLIP_PLANE 0x0A -.emtcode STATE_POINT 0x0B - -/* state material property */ -.emtcode MATERIAL_AMBIENT 0x01 -.emtcode MATERIAL_DIFFUSE 0x02 -.emtcode MATERIAL_SPECULAR 0x03 -.emtcode MATERIAL_EMISSION 0x04 -.emtcode MATERIAL_SHININESS 0x05 - -/* state light property */ -.emtcode LIGHT_AMBIENT 0x01 -.emtcode LIGHT_DIFFUSE 0x02 -.emtcode LIGHT_SPECULAR 0x03 -.emtcode LIGHT_POSITION 0x04 -.emtcode LIGHT_ATTENUATION 0x05 -.emtcode LIGHT_HALF 0x06 -.emtcode LIGHT_SPOT_DIRECTION 0x07 - -/* state light model property */ -.emtcode LIGHT_MODEL_AMBIENT 0x01 -.emtcode LIGHT_MODEL_SCENECOLOR 0x02 - -/* state light product property */ -.emtcode LIGHT_PROD_AMBIENT 0x01 -.emtcode LIGHT_PROD_DIFFUSE 0x02 -.emtcode LIGHT_PROD_SPECULAR 0x03 - -/* state texture environment property */ -.emtcode TEX_ENV_COLOR 0x01 - -/* state texture generation coord property */ -.emtcode TEX_GEN_EYE 0x01 -.emtcode TEX_GEN_OBJECT 0x02 - -/* state fog property */ -.emtcode FOG_COLOR 0x01 -.emtcode FOG_PARAMS 0x02 - -/* state depth property */ -.emtcode DEPTH_RANGE 0x01 - -/* state point parameters property */ -.emtcode POINT_SIZE 0x01 -.emtcode POINT_ATTENUATION 0x02 - -/* declaration */ -.emtcode ATTRIB 0x01 -.emtcode PARAM 0x02 -.emtcode TEMP 0x03 -.emtcode OUTPUT 0x04 -.emtcode ALIAS 0x05 -/* GL_ARB_vertex_program */ -.emtcode ADDRESS 0x06 - -/* error messages */ -.errtext UNKNOWN_PROGRAM_SIGNATURE "1001: '$e_signature$': unknown program signature" -.errtext MISSING_END_OR_INVALID_STATEMENT "1002: '$e_statement$': invalid statement" -.errtext CODE_AFTER_END "1003: '$e_statement$': code after 'END' keyword" -.errtext INVALID_PROGRAM_OPTION "1004: '$e_identifier$': invalid program option" -.errtext EXT_SWIZ_COMP_EXPECTED "1005: extended swizzle component expected but '$e_token$' found" -.errtext TEX_TARGET_EXPECTED "1006: texture target expected but '$e_token$' found" -.errtext TEXTURE_EXPECTED "1007: 'texture' expected but '$e_identifier$' found" -.errtext SOURCE_REGISTER_EXPECTED "1008: source register expected but '$e_token$' found" -.errtext DESTINATION_REGISTER_EXPECTED "1009: destination register expected but '$e_token$' found" -.errtext INVALID_ADDRESS_COMPONENT "1010: '$e_identifier$': invalid address component" -.errtext INVALID_ADDRESS_WRITEMASK "1011: '$e_identifier$': invalid address writemask" -.errtext INVALID_COMPONENT "1012: '$e_charordigit$': invalid component" -.errtext INVALID_SUFFIX "1013: '$e_identifier$': invalid suffix" -.errtext INVALID_WRITEMASK "1014: '$e_identifier$': invalid writemask" -.errtext FRAGMENT_EXPECTED "1015: 'fragment' expected but '$e_identifier$' found" -.errtext VERTEX_EXPECTED "1016: 'vertex' expected but '$e_identifier$' found" -.errtext INVALID_FRAGMENT_PROPERTY "1017: '$e_identifier$': invalid fragment property" -.errtext INVALID_VERTEX_PROPERTY "1018: '$e_identifier$': invalid vertex property" -.errtext INVALID_STATE_PROPERTY "1019: '$e_identifier$': invalid state property" -.errtext INVALID_MATERIAL_PROPERTY "1020: '$e_identifier$': invalid material property" -.errtext INVALID_LIGHT_PROPERTY "1021: '$e_identifier$': invalid light property" -.errtext INVALID_SPOT_PROPERTY "1022: '$e_identifier$': invalid spot property" -.errtext INVALID_LIGHTMODEL_PROPERTY "1023: '$e_identifier$': invalid light model property" -.errtext INVALID_LIGHTPROD_PROPERTY "1024: '$e_identifier$': invalid light product property" -.errtext INVALID_TEXENV_PROPERTY "1025: '$e_identifier$': invalid texture environment property" -.errtext INVALID_TEXGEN_PROPERTY "1026: '$e_identifier$': invalid texture generating property" -.errtext INVALID_TEXGEN_COORD "1027: '$e_identifier$': invalid texture generating coord" -.errtext INVALID_FOG_PROPERTY "1028: '$e_identifier$': invalid fog property" -.errtext INVALID_DEPTH_PROPERTY "1029: '$e_identifier$': invalid depth property" -.errtext INVALID_CLIPPLANE_PROPERTY "1030: '$e_identifier$': invalid clip plane property" -.errtext INVALID_POINT_PROPERTY "1031: '$e_identifier$': invalid point property" -.errtext MATRIX_ROW_SELECTOR_OR_MODIFIER_EXPECTED "1032: matrix row selector or modifier expected but '$e_token$' found" -.errtext INVALID_MATRIX_NAME "1033: '$e_identifier$': invalid matrix name" -.errtext INVALID_PROGRAM_PROPERTY "1034: '$e_identifier$': invalid program property" -.errtext RESULT_EXPECTED "1035: 'result' expected but '$e_token$' found" -.errtext INVALID_RESULT_PROPERTY "1036: '$e_identifier$': invalid result property" -.errtext INVALID_FACE_PROPERTY "1037: '$e_identifier$': invalid face property" -.errtext INVALID_COLOR_PROPERTY "1038: '$e_identifier$': invalid color property" -.errtext IDENTIFIER_EXPECTED "1039: identifier expected but '$e_token$' found" -.errtext RESERVED_KEYWORD "1040: use of reserved keyword as an identifier" -.errtext INTEGER_EXPECTED "1041: integer value expected but '$e_token$' found" -.errtext MISSING_SEMICOLON "1042: ';' expected but '$e_token$' found" -.errtext MISSING_COMMA "1043: ',' expected but '$e_token$' found" -.errtext MISSING_LBRACKET "1044: '[' expected but '$e_token$' found" -.errtext MISSING_RBRACKET "1045: ']' expected but '$e_token$' found" -.errtext MISSING_DOT "1046: '.' expected but '$e_token$' found" -.errtext MISSING_EQUAL "1047: '=' expected but '$e_token$' found" -.errtext MISSING_LBRACE "1048: '{' expected but '$e_token$' found" -.errtext MISSING_RBRACE "1049: '}' expected but '$e_token$' found" -.errtext MISSING_DOTDOT "1050: '..' expected but '$e_token$' found" -.errtext MISSING_FRACTION_OR_EXPONENT "1051: missing fraction part or exponent" -.errtext MISSING_DOT_OR_EXPONENT "1052: missing '.' or exponent" -.errtext EXPONENT_VALUE_EXPECTED "1053: exponent value expected" -.errtext INTEGER_OUT_OF_RANGE "1054: integer value out of range" -.errtext OPERATION_NEEDS_DESTINATION_VARIABLE "1055: operation needs destination variable" -.errtext OPERATION_NEEDS_SOURCE_VARIABLE "1056: operation needs source variable" -.errtext ADDRESS_REGISTER_EXPECTED "1057: address register expected but '$e_token$' found" -.errtext ADDRESS_REGISTER_OR_INTEGER_EXPECTED "1058: address register or integer literal expected but '$e_token$' found" - -/* extension presence condition registers */ - -/* GL_ARB_vertex_blend */ -/* GL_EXT_vertex_weighting */ -.regbyte vertex_blend 0x00 - -/* GL_ARB_matrix_palette */ -.regbyte matrix_palette 0x00 - -/* GL_ARB_point_parameters */ -/* GL_EXT_point_parameters */ -.regbyte point_parameters 0x00 - -/* GL_EXT_secondary_color */ -.regbyte secondary_color 0x00 - -/* GL_EXT_fog_coord */ -.regbyte fog_coord 0x00 - -/* GL_EXT_texture_rectangle */ -/* GL_NV_texture_rectangle */ -.regbyte texture_rectangle 0x00 - -/* GL_ARB_fragment_program_shadow */ -.regbyte fragment_program_shadow 0x00 - -/* GL_ARB_draw_buffers */ -.regbyte draw_buffers 0x00 - -/* option presence condition registers */ -/* they are all initially set to zero - when a particular OPTION is encountered, the appropriate */ -/* register is set to 1 to indicate that the OPTION was specified. */ - -/* GL_ARB_fragment_program */ -.regbyte ARB_precision_hint_fastest 0x00 -.regbyte ARB_precision_hint_nicest 0x00 -.regbyte ARB_fog_exp 0x00 -.regbyte ARB_fog_exp2 0x00 -.regbyte ARB_fog_linear 0x00 - -/* GL_ARB_vertex_program */ -.regbyte ARB_position_invariant 0x00 - -/* GL_ARB_fragment_program_shadow */ -.regbyte ARB_fragment_program_shadow 0x00 - -/* GL_ARB_draw_buffers */ -.regbyte ARB_draw_buffers 0x00 - -/* program target condition register */ -/* this syntax script deals with two program targets - VERTEX_PROGRAM and FRAGMENT_PROGRAM. */ -/* to distinguish between them we need a register that will store for us the current target. */ -/* the client will typically set the register to apropriate value before parsing a particular */ -/* program. the mapping between program targets and their values is listed below. */ -/* */ -/* program target register value */ -/* ---------------------------------------------- */ -/* FRAGMENT_PROGRAM 0x10 */ -/* VERTEX_PROGRAM 0x20 */ -/* */ -/* the initial value of the register is 0 to catch potential errors with not setting the register */ -/* with the proper value. */ -.regbyte program_target 0x00 - -/* - ::= "END" -*/ -program - programs .error UNKNOWN_PROGRAM_SIGNATURE .emit REVISION; -programs - .if (program_target == 0x10) frag_program_1_0 .emit FRAGMENT_PROGRAM .emit 0x01 .emit 0x00 .or - .if (program_target == 0x20) vert_program_1_0 .emit VERTEX_PROGRAM .emit 0x01 .emit 0x00; -frag_program_1_0 - '!' .and '!' .and 'A' .and 'R' .and 'B' .and 'f' .and 'p' .and '1' .and '.' .and '0' .and - optional_space .and fp_optionSequence .and fp_statementSequence .and - "END" .error MISSING_END_OR_INVALID_STATEMENT .emit END .and optional_space .and - '\0' .error CODE_AFTER_END; -vert_program_1_0 - '!' .and '!' .and 'A' .and 'R' .and 'B' .and 'v' .and 'p' .and '1' .and '.' .and '0' .and - optional_space .and vp_optionSequence .and vp_statementSequence .and - "END" .error MISSING_END_OR_INVALID_STATEMENT .emit END .and optional_space .and - '\0' .error CODE_AFTER_END; - -/* - ::=