summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Cristau <jcristau@debian.org>2008-07-13 19:20:03 +0200
committerJulien Cristau <jcristau@debian.org>2008-07-13 19:20:03 +0200
commit64e57ed257c559ea31cf162c67a7ef61fdc562e4 (patch)
treedee99970e9d1e6d892f21db31488470bc7929d18
parentdabd09f5a92e5497ac6ac9b4ba26f806ddb25206 (diff)
parent4fab47b13c214dc79e0ae5d8001521029ce34231 (diff)
Merge branch 'master' of git://anongit.freedesktop.org/git/mesa/mesa into debian-experimental
Conflicts: progs/tests/antialias.c progs/tools/trace/Makefile
-rw-r--r--Makefile12
-rw-r--r--configs/autoconf.in8
-rw-r--r--configs/default8
-rw-r--r--configure.ac23
-rw-r--r--docs/install.html17
-rw-r--r--docs/relnotes-7.1.html7
-rw-r--r--src/egl/drivers/demo/Makefile5
-rw-r--r--src/egl/drivers/dri/Makefile3
-rw-r--r--src/egl/main/Makefile3
-rw-r--r--src/glu/Makefile12
-rw-r--r--src/glu/glu.pc.in4
-rw-r--r--src/glu/mesa/Makefile2
-rw-r--r--src/glu/sgi/Makefile2
-rw-r--r--src/glut/beos/Makefile6
-rw-r--r--src/glut/directfb/Makefile2
-rw-r--r--src/glut/fbdev/Makefile10
-rw-r--r--src/glut/ggi/Makefile2
-rw-r--r--src/glut/glx/Makefile18
-rw-r--r--src/glut/glx/glut.pc.in4
-rw-r--r--src/glut/mini/Makefile19
-rw-r--r--src/glut/mini/glut.pc.in4
-rw-r--r--src/glw/Makefile19
-rw-r--r--src/glw/glw.pc.in4
-rw-r--r--src/glx/mini/Makefile2
-rw-r--r--src/glx/x11/.gitignore1
-rw-r--r--src/glx/x11/Makefile2
-rw-r--r--src/glx/x11/dri2_glx.c2
-rw-r--r--src/glx/x11/dri_common.c4
-rw-r--r--src/glx/x11/dri_common.h2
-rw-r--r--src/glx/x11/dri_glx.c2
-rw-r--r--src/glx/x11/drisw_glx.c2
-rw-r--r--src/glx/x11/glxext.c11
-rw-r--r--src/mesa/Makefile24
-rw-r--r--src/mesa/drivers/beos/Makefile5
-rw-r--r--src/mesa/drivers/directfb/Makefile2
-rw-r--r--src/mesa/drivers/dri/Makefile16
-rw-r--r--src/mesa/drivers/dri/Makefile.template2
-rw-r--r--src/mesa/drivers/dri/common/extension_helper.h32
-rw-r--r--src/mesa/drivers/dri/dri.pc.in4
-rw-r--r--src/mesa/drivers/dri/i915/i915_texstate.c11
-rw-r--r--src/mesa/drivers/dri/i965/brw_clip_line.c2
-rw-r--r--src/mesa/drivers/dri/i965/brw_clip_state.c2
-rw-r--r--src/mesa/drivers/dri/i965/brw_clip_tri.c2
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.c2
-rw-r--r--src/mesa/drivers/dri/i965/brw_defines.h13
-rw-r--r--src/mesa/drivers/dri/i965/brw_eu_emit.c16
-rw-r--r--src/mesa/drivers/dri/i965/brw_misc_state.c8
-rw-r--r--src/mesa/drivers/dri/i965/brw_structs.h4
-rw-r--r--src/mesa/drivers/dri/i965/brw_vs_emit.c2
-rw-r--r--src/mesa/drivers/dri/intel/intel_batchbuffer.h4
-rw-r--r--src/mesa/drivers/dri/intel/intel_blit.c5
-rw-r--r--src/mesa/drivers/dri/intel/intel_chipset.h10
-rw-r--r--src/mesa/drivers/dri/intel/intel_context.c4
-rw-r--r--src/mesa/drivers/dri/r300/Makefile3
-rw-r--r--src/mesa/drivers/dri/r300/r300_cmdbuf.c11
-rw-r--r--src/mesa/drivers/dri/r300/r300_context.h51
-rw-r--r--src/mesa/drivers/dri/r300/r300_fragprog.c184
-rw-r--r--src/mesa/drivers/dri/r300/r300_fragprog.h30
-rw-r--r--src/mesa/drivers/dri/r300/r300_fragprog_emit.c2092
-rw-r--r--src/mesa/drivers/dri/r300/r300_fragprog_swizzle.c227
-rw-r--r--src/mesa/drivers/dri/r300/r300_fragprog_swizzle.h42
-rw-r--r--src/mesa/drivers/dri/r300/r300_ioctl.c9
-rw-r--r--src/mesa/drivers/dri/r300/r300_reg.h7
-rw-r--r--src/mesa/drivers/dri/r300/r300_render.c2
-rw-r--r--src/mesa/drivers/dri/r300/r300_state.c109
-rw-r--r--src/mesa/drivers/dri/r300/r500_fragprog.c207
-rw-r--r--src/mesa/drivers/dri/r300/r500_fragprog.h32
-rw-r--r--src/mesa/drivers/dri/r300/r500_fragprog_emit.c1596
-rw-r--r--src/mesa/drivers/dri/r300/radeon_nqssadce.c282
-rw-r--r--src/mesa/drivers/dri/r300/radeon_nqssadce.h96
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program.c275
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program.h113
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program_alu.c475
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program_alu.h12
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program_pair.c983
-rw-r--r--src/mesa/drivers/dri/r300/radeon_program_pair.h126
-rw-r--r--src/mesa/drivers/fbdev/Makefile3
-rw-r--r--src/mesa/drivers/osmesa/Makefile12
-rw-r--r--src/mesa/drivers/x11/Makefile7
-rw-r--r--src/mesa/gl.pc.in4
-rw-r--r--src/mesa/glapi/gl_API.xml90
-rw-r--r--src/mesa/glapi/glapi.c7
-rw-r--r--src/mesa/main/api_validate.c23
-rw-r--r--src/mesa/main/buffers.c2
-rw-r--r--src/mesa/main/context.c1
-rw-r--r--src/mesa/main/dd.h2
-rw-r--r--src/mesa/main/enums.c5874
-rw-r--r--src/mesa/main/execmem.c8
-rw-r--r--src/mesa/main/fbobject.c26
-rw-r--r--src/mesa/main/fbobject.h7
-rw-r--r--src/mesa/main/mtypes.h1
-rw-r--r--src/mesa/main/shaders.c14
-rw-r--r--src/mesa/main/state.c17
-rw-r--r--src/mesa/main/texstate.c28
-rw-r--r--src/mesa/main/version.h2
-rw-r--r--src/mesa/shader/arbprogparse.c9
-rw-r--r--src/mesa/shader/program.c62
-rw-r--r--src/mesa/shader/program.h13
-rw-r--r--src/mesa/shader/shader_api.c281
-rw-r--r--src/mesa/shader/slang/library/slang_common_builtin.gc35
-rw-r--r--src/mesa/shader/slang/library/slang_common_builtin_gc.h315
-rw-r--r--src/mesa/shader/slang/library/slang_core.gc46
-rw-r--r--src/mesa/shader/slang/library/slang_core_gc.h1509
-rw-r--r--src/mesa/shader/slang/slang_codegen.c449
-rw-r--r--src/mesa/shader/slang/slang_compile.c24
-rw-r--r--src/mesa/shader/slang/slang_emit.c17
-rw-r--r--src/mesa/shader/slang/slang_emit.h8
-rw-r--r--src/mesa/shader/slang/slang_ir.c10
-rw-r--r--src/mesa/shader/slang/slang_link.c14
-rw-r--r--src/mesa/shader/slang/slang_log.c3
-rw-r--r--src/mesa/shader/slang/slang_print.c84
-rw-r--r--src/mesa/shader/slang/slang_vartable.c3
-rw-r--r--src/mesa/swrast/s_fragprog.c28
-rw-r--r--src/mesa/swrast/s_points.c2
-rw-r--r--src/mesa/tnl/t_vb_program.c2
-rw-r--r--src/mesa/tnl_dd/t_dd_tritmp.h4
116 files changed, 8013 insertions, 8389 deletions
diff --git a/Makefile b/Makefile
index 21cf0b5009d..a31ce386aae 100644
--- a/Makefile
+++ b/Makefile
@@ -174,10 +174,10 @@ ultrix-gcc:
# Rules for making release tarballs
-DIRECTORY = Mesa-7.1-rc1
-LIB_NAME = MesaLib-7.1-rc1
-DEMO_NAME = MesaDemos-7.1-rc1
-GLUT_NAME = MesaGLUT-7.1-rc1
+DIRECTORY = Mesa-7.1-rc3
+LIB_NAME = MesaLib-7.1-rc3
+DEMO_NAME = MesaDemos-7.1-rc3
+GLUT_NAME = MesaGLUT-7.1-rc3
MAIN_FILES = \
$(DIRECTORY)/Makefile* \
@@ -258,6 +258,7 @@ MAIN_FILES = \
$(DIRECTORY)/src/mesa/tnl_dd/*.[ch] \
$(DIRECTORY)/src/mesa/tnl_dd/imm/*.[ch] \
$(DIRECTORY)/src/mesa/tnl_dd/imm/NOTES.imm \
+ $(DIRECTORY)/src/mesa/drivers/Makefile \
$(DIRECTORY)/src/mesa/drivers/beos/*.cpp \
$(DIRECTORY)/src/mesa/drivers/beos/Makefile \
$(DIRECTORY)/src/mesa/drivers/common/*.[ch] \
@@ -265,6 +266,7 @@ MAIN_FILES = \
$(DIRECTORY)/src/mesa/drivers/directfb/*.[ch] \
$(DIRECTORY)/src/mesa/drivers/directfb/Makefile \
$(DIRECTORY)/src/mesa/drivers/dos/*.[chS] \
+ $(DIRECTORY)/src/mesa/drivers/fbdev/Makefile \
$(DIRECTORY)/src/mesa/drivers/fbdev/glfbdev.c \
$(DIRECTORY)/src/mesa/drivers/glide/*.[ch] \
$(DIRECTORY)/src/mesa/drivers/ggi/*.[ch] \
@@ -274,6 +276,7 @@ MAIN_FILES = \
$(DIRECTORY)/src/mesa/drivers/ggi/display/*.c \
$(DIRECTORY)/src/mesa/drivers/ggi/display/fbdev.conf.in \
$(DIRECTORY)/src/mesa/drivers/ggi/include/ggi/mesa/*.h \
+ $(DIRECTORY)/src/mesa/drivers/osmesa/Makefile \
$(DIRECTORY)/src/mesa/drivers/osmesa/Makefile.win \
$(DIRECTORY)/src/mesa/drivers/osmesa/descrip.mms \
$(DIRECTORY)/src/mesa/drivers/osmesa/osmesa.def \
@@ -281,6 +284,7 @@ MAIN_FILES = \
$(DIRECTORY)/src/mesa/drivers/svga/*.[ch] \
$(DIRECTORY)/src/mesa/drivers/windows/*/*.[ch] \
$(DIRECTORY)/src/mesa/drivers/windows/*/*.def \
+ $(DIRECTORY)/src/mesa/drivers/x11/Makefile \
$(DIRECTORY)/src/mesa/drivers/x11/descrip.mms \
$(DIRECTORY)/src/mesa/drivers/x11/*.[ch] \
$(DIRECTORY)/src/mesa/ppc/*.[ch] \
diff --git a/configs/autoconf.in b/configs/autoconf.in
index ed44a0f1a68..8ed1c93d11a 100644
--- a/configs/autoconf.in
+++ b/configs/autoconf.in
@@ -27,10 +27,10 @@ ASM_API = @ASM_API@
# Misc tools and flags
MAKE = @MAKE@
+SHELL = @SHELL@
MKLIB_OPTIONS = @MKLIB_OPTIONS@
MKDEP = @MKDEP@
MKDEP_OPTIONS = @MKDEP_OPTIONS@
-INSTALL = $(TOP)/bin/minstall
# Python and flags (generally only needed by the developers)
PYTHON2 = python
@@ -89,15 +89,15 @@ EXPAT_INCLUDES = @EXPAT_INCLUDES@
prefix = @prefix@
exec_prefix = @exec_prefix@
libdir = @libdir@
+includedir = @includedir@
# Installation directories (for make install)
INSTALL_DIR = $(prefix)
+INSTALL_LIB_DIR = $(libdir)
+INSTALL_INC_DIR = $(includedir)
# DRI installation directories
DRI_DRIVER_INSTALL_DIR = @DRI_DRIVER_INSTALL_DIR@
# Where libGL will look for DRI hardware drivers
DRI_DRIVER_SEARCH_DIR = $(DRI_DRIVER_INSTALL_DIR)
-
-# Additional per-platform configuration settings
-@EXTRA_CONFIG_LINES@
diff --git a/configs/default b/configs/default
index 37b693932d6..a14078fa269 100644
--- a/configs/default
+++ b/configs/default
@@ -25,11 +25,13 @@ LDFLAGS =
GLU_CFLAGS =
# Misc tools and flags
+SHELL = /bin/sh
+MKLIB = $(SHELL) $(TOP)/bin/mklib
MKLIB_OPTIONS =
MKDEP = makedepend
MKDEP_OPTIONS = -fdepend
MAKE = make
-INSTALL = $(TOP)/bin/minstall
+INSTALL = $(SHELL) $(TOP)/bin/minstall
# Tools for regenerating glapi (generally only needed by the developers)
PYTHON2 = python
@@ -84,7 +86,9 @@ APP_LIB_DEPS = -lm
# Installation directories (for make install)
INSTALL_DIR = /usr/local
-DRI_DRIVER_INSTALL_DIR = $(INSTALL_DIR)/$(LIB_DIR)/dri
+INSTALL_LIB_DIR = $(INSTALL_DIR)/$(LIB_DIR)
+INSTALL_INC_DIR = $(INSTALL_DIR)/include
+DRI_DRIVER_INSTALL_DIR = $(INSTALL_LIB_DIR)/dri
# Where libGL will look for DRI hardware drivers
DRI_DRIVER_SEARCH_DIR = $(DRI_DRIVER_INSTALL_DIR)
diff --git a/configure.ac b/configure.ac
index f15d9ff94a6..acb29e44686 100644
--- a/configure.ac
+++ b/configure.ac
@@ -12,6 +12,10 @@ m4_ifval(mesa_version,[],[
m4_exit([1])
])
+dnl Tell the user about autoconf.html in the --help output
+m4_divert_once([HELP_END], [
+See docs/autoconf.html for more details on the options for Mesa.])
+
AC_INIT([Mesa],[mesa_version],
[https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
AC_CONFIG_AUX_DIR([bin])
@@ -29,18 +33,16 @@ AC_CHECK_PROGS([MAKE], [gmake make])
AC_PATH_PROG([MKDEP], [makedepend])
AC_PATH_PROG([SED], [sed])
-dnl Platform-specific program settings
-EXTRA_CONFIG_LINES=""
-AC_SUBST([EXTRA_CONFIG_LINES])
+dnl We need a POSIX shell for parts of the build. Assume we have one
+dnl in most cases.
case "$host_os" in
solaris*)
# Solaris /bin/sh is too old/non-POSIX compliant
AC_PATH_PROGS(POSIX_SHELL, [ksh93 ksh sh])
- EXTRA_CONFIG_LINES="SHELL=$POSIX_SHELL"
+ SHELL="$POSIX_SHELL"
;;
esac
-
MKDEP_OPTIONS=-fdepend
dnl Ask gcc where it's keeping its secret headers
if test "x$GCC" = xyes; then
@@ -452,7 +454,7 @@ esac
dnl
dnl Find out if X is available. The variable have_x is set if libX11 is
-dnl to mimic AC_PATH_XTRA.
+dnl found to mimic AC_PATH_XTRA.
dnl
if test -n "$PKG_CONFIG"; then
AC_MSG_CHECKING([pkg-config files for X11 are available])
@@ -471,6 +473,12 @@ if test "$x11_pkgconfig" = no; then
AC_PATH_XTRA
fi
+dnl Try to tell the user that the --x-* options are only used when
+dnl pkg-config is not available. This must be right after AC_PATH_XTRA.
+m4_divert_once([HELP_BEGIN],
+[These options are only used when the X libraries cannot be found by the
+pkg-config utility.])
+
dnl We need X for xlib and dri, so bomb now if it's not found
case "$mesa_driver" in
xlib|dri)
@@ -619,7 +627,7 @@ case "$with_dri_drivers" in
no|yes) ;;
*)
# verify the requested driver directories exist
- dri_drivers=`IFS=,; echo $with_dri_drivers`
+ dri_drivers=`IFS=', '; echo $with_dri_drivers`
for driver in $dri_drivers; do
test -d "$srcdir/src/mesa/drivers/dri/$driver" || \
AC_MSG_ERROR([DRI driver directory '$driver' doesn't exist])
@@ -994,6 +1002,7 @@ echo ""
echo " prefix: $prefix"
echo " exec_prefix: $exec_prefix"
echo " libdir: $libdir"
+echo " includedir: $includedir"
dnl Driver info
echo ""
diff --git a/docs/install.html b/docs/install.html
index 30565a1dc4f..16ef013688a 100644
--- a/docs/install.html
+++ b/docs/install.html
@@ -25,23 +25,12 @@
<h3>1.1 Prerequisites for DRI and Hardware Acceleration</h3>
<p>
-To build Mesa with DRI-based hardware acceleration you must first have
-the right version of DRM.
+To build Mesa 7.1 with DRI-based hardware acceleration you must first have
+the <a href="http://dri.freedesktop.org/libdrm/" target="_parent">DRM version 2.3.1</a>.
</p>
<p>
-For Mesa 7.1 a particular snapshot of
-<a href="http://dri.freedesktop.org/libdrm/">DRM</a> from git is required:
-</p>
-
-<pre>
-git-clone git://anongit.freedesktop.org/git/mesa/drm
-git-checkout (XXXX HASH ID TBD)
-</pre>
-</li>
-
-<p>
-You should also be using Xorg server version 1.4
+You should also be using the Xorg server version 1.4 or 1.5.
</p>
diff --git a/docs/relnotes-7.1.html b/docs/relnotes-7.1.html
index 7720ca19d06..c9d7cddcab0 100644
--- a/docs/relnotes-7.1.html
+++ b/docs/relnotes-7.1.html
@@ -33,6 +33,13 @@ TBD
</ul>
+<h2>Bug fixes</h2>
+<ul>
+<li>Fixed a number of minor GLSL intrinsic function/constructor bugs
+<li>Fixed some error code/detection bugs in the GLSL-related API functions
+</ul>
+
+
<h2>To Do (someday) items</h2>
<ul>
<li>Remove the MEMCPY() and _mesa_memcpy() wrappers and just use memcpy().
diff --git a/src/egl/drivers/demo/Makefile b/src/egl/drivers/demo/Makefile
index 9653c8805cc..6ca25aa5d65 100644
--- a/src/egl/drivers/demo/Makefile
+++ b/src/egl/drivers/demo/Makefile
@@ -21,8 +21,9 @@ default: $(TOP)/$(LIB_DIR)/demodriver.so
$(TOP)/$(LIB_DIR)/demodriver.so: $(OBJECTS)
- $(TOP)/bin/mklib -o demodriver.so -noprefix -ldflags '$(LDFLAGS)' \
- -install $(TOP)/$(LIB_DIR) $(OBJECTS)
+ $(MKLIB) -o demodriver.so -noprefix -linker '$(CC)' \
+ -ldflags '$(LDFLAGS)' -install $(TOP)/$(LIB_DIR) \
+ $(OBJECTS)
diff --git a/src/egl/drivers/dri/Makefile b/src/egl/drivers/dri/Makefile
index 52d46cac564..af0c40fe2b7 100644
--- a/src/egl/drivers/dri/Makefile
+++ b/src/egl/drivers/dri/Makefile
@@ -42,7 +42,8 @@ default: depend library Makefile
library: $(TOP)/$(LIB_DIR)/libEGLdri.so
$(TOP)/$(LIB_DIR)/libEGLdri.so: $(OBJECTS)
- $(TOP)/bin/mklib -o EGLdri -ldflags '$(LDFLAGS)' -major 1 -minor 0 \
+ $(MKLIB) -o EGLdri -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ -major 1 -minor 0 \
-install $(TOP)/$(LIB_DIR) -ldl $(OBJECTS)
diff --git a/src/egl/main/Makefile b/src/egl/main/Makefile
index 52e16a76e3a..7ab78197c7b 100644
--- a/src/egl/main/Makefile
+++ b/src/egl/main/Makefile
@@ -46,7 +46,8 @@ default: depend library
library: $(TOP)/$(LIB_DIR)/libEGL.so
$(TOP)/$(LIB_DIR)/libEGL.so: $(OBJECTS)
- $(TOP)/bin/mklib -o EGL -ldflags '$(LDFLAGS)' -major 1 -minor 0 \
+ $(MKLIB) -o EGL -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ -major 1 -minor 0 \
-install $(TOP)/$(LIB_DIR) -ldl $(OBJECTS)
diff --git a/src/glu/Makefile b/src/glu/Makefile
index 23161b50156..599b3fc75a3 100644
--- a/src/glu/Makefile
+++ b/src/glu/Makefile
@@ -16,18 +16,20 @@ default: $(TOP)/configs/current
# GLU pkg-config file
pcedit = sed \
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
- -e 's,@LIB_DIR@,$(LIB_DIR),' \
+ -e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
+ -e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
-e 's,@VERSION@,$(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY),'
glu.pc: glu.pc.in
$(pcedit) $< > $@
install: glu.pc
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
- $(INSTALL) $(TOP)/$(LIB_DIR)/libGLU.* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -m 644 glu.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
+ $(INSTALL) $(TOP)/$(LIB_DIR)/libGLU.* $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -m 644 glu.pc $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
clean:
-@for dir in $(SUBDIRS) ; do \
(cd $$dir && $(MAKE) clean) ; \
done
+ -rm -f *.pc
diff --git a/src/glu/glu.pc.in b/src/glu/glu.pc.in
index 5d6e52a75e4..8606b9b222c 100644
--- a/src/glu/glu.pc.in
+++ b/src/glu/glu.pc.in
@@ -1,7 +1,7 @@
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
-libdir=${exec_prefix}/@LIB_DIR@
-includedir=${prefix}/include
+libdir=@INSTALL_LIB_DIR@
+includedir=@INSTALL_INC_DIR@
Name: glu
Description: Mesa OpenGL Utility library
diff --git a/src/glu/mesa/Makefile b/src/glu/mesa/Makefile
index 1064bbd2d4f..c468ce62100 100644
--- a/src/glu/mesa/Makefile
+++ b/src/glu/mesa/Makefile
@@ -45,7 +45,7 @@ $(TOP)/$(LIB_DIR):
# Make the library:
$(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME): $(OBJECTS)
- @ $(TOP)/bin/mklib -o $(GLU_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ @ $(MKLIB) -o $(GLU_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLU_MAJOR) -minor $(GLU_MINOR) -patch $(GLU_TINY) \
$(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(GLU_LIB_DEPS) $(OBJECTS)
diff --git a/src/glu/sgi/Makefile b/src/glu/sgi/Makefile
index 207247ad87a..63eca5cbe77 100644
--- a/src/glu/sgi/Makefile
+++ b/src/glu/sgi/Makefile
@@ -136,7 +136,7 @@ $(TOP)/$(LIB_DIR):
# Make the library:
$(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME): $(OBJECTS)
- $(TOP)/bin/mklib -o $(GLU_LIB) -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GLU_LIB) -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
-major $(GLU_MAJOR) -minor $(GLU_MINOR) -patch $(GLU_TINY) \
-cplusplus $(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(GLU_LIB_DEPS) $(OBJECTS)
diff --git a/src/glut/beos/Makefile b/src/glut/beos/Makefile
index 165f43a6ce3..14f4f43f84a 100644
--- a/src/glut/beos/Makefile
+++ b/src/glut/beos/Makefile
@@ -83,10 +83,10 @@ $(TOP)/$(LIB_DIR):
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
- @$(TOP)/bin/mklib -o $(GLUT_LIB) -ldflags '$(LDFLAGS)' \
+ @$(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
- -install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) $(GLUT_LIB_DEPS) \
- $(OBJECTS)
+ -install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
+ $(GLUT_LIB_DEPS) $(OBJECTS)
clean:
-rm -f *.o
diff --git a/src/glut/directfb/Makefile b/src/glut/directfb/Makefile
index 36b0ea34ed5..34c3743ef45 100644
--- a/src/glut/directfb/Makefile
+++ b/src/glut/directfb/Makefile
@@ -61,7 +61,7 @@ default: depend $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
- $(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(GLUT_LIB_DEPS) -install $(TOP)/$(LIB_DIR) \
$(MKLIB_OPTIONS) $(OBJECTS)
diff --git a/src/glut/fbdev/Makefile b/src/glut/fbdev/Makefile
index 95893b7dd1b..4081ccec74e 100644
--- a/src/glut/fbdev/Makefile
+++ b/src/glut/fbdev/Makefile
@@ -63,16 +63,16 @@ default: depend $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
- $(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(GLUT_LIB_DEPS) -install $(TOP)/$(LIB_DIR) \
$(MKLIB_OPTIONS) $(OBJECTS)
install:
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_LIB_DIR)
# Run 'make -f Makefile.solo dep' to update the dependencies if you change
# what's included by any source file.
diff --git a/src/glut/ggi/Makefile b/src/glut/ggi/Makefile
index c8805c27c02..1ae1ba0d707 100644
--- a/src/glut/ggi/Makefile
+++ b/src/glut/ggi/Makefile
@@ -32,7 +32,7 @@ default: $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
- $(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) \
-patch $(GLUT_TINY) $(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(GLUT_LIB_DEPS) $(OBJECTS)
diff --git a/src/glut/glx/Makefile b/src/glut/glx/Makefile
index 674d5a5dcef..307a6d22164 100644
--- a/src/glut/glx/Makefile
+++ b/src/glut/glx/Makefile
@@ -91,7 +91,7 @@ default: $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
- $(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(GLUT_LIB_DEPS) $(OBJECTS)
@@ -100,24 +100,26 @@ $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
# glut pkgconfig file
pcedit = sed \
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
- -e 's,@LIB_DIR@,$(LIB_DIR),' \
+ -e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
+ -e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
-e 's,@VERSION@,$(GLUT_MAJOR).$(GLUT_MINOR).$(GLUT_TINY),'
glut.pc: glut.pc.in
$(pcedit) $< > $@
install: glut.pc
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
- $(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -m 644 glut.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
+ $(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -m 644 glut.pc $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
clean:
-rm -f *.o *~
-rm -f *.lo
-rm -f *.la
+ -rm -f *.pc
-rm -rf .libs
-rm -f depend depend.bak
diff --git a/src/glut/glx/glut.pc.in b/src/glut/glx/glut.pc.in
index f732f2990d0..e8638fe1488 100644
--- a/src/glut/glx/glut.pc.in
+++ b/src/glut/glx/glut.pc.in
@@ -1,7 +1,7 @@
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
-libdir=${exec_prefix}/@LIB_DIR@
-includedir=${prefix}/include
+libdir=@INSTALL_LIB_DIR@
+includedir=@INSTALL_INC_DIR@
Name: glut
Description: Mesa OpenGL Utility Toolkit library
diff --git a/src/glut/mini/Makefile b/src/glut/mini/Makefile
index d3860503901..e47d09edb71 100644
--- a/src/glut/mini/Makefile
+++ b/src/glut/mini/Makefile
@@ -55,7 +55,7 @@ default: depend $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
- $(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GLUT_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(GLUT_LIB_DEPS) -install $(TOP)/$(LIB_DIR) \
$(MKLIB_OPTIONS) $(OBJECTS)
@@ -75,23 +75,24 @@ tags:
# glut pkgconfig file
pcedit = sed \
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
- -e 's,@LIB_DIR@,$(LIB_DIR),' \
+ -e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
+ -e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
-e 's,@VERSION@,$(GLUT_MAJOR).$(GLUT_MINOR).$(GLUT_TINY),'
glut.pc: glut.pc.in
$(pcedit) $< > $@
install: glut.pc
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
- $(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -m 644 glut.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
+ $(INSTALL) -m 644 $(TOP)/include/GL/glut.h $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) $(TOP)/$(LIB_DIR)/libglut* $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -m 644 glut.pc $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
# Remove .o and backup files
clean: depend
-rm -f depend depend.bak
- -rm -f *.o *~ *.o *~ *.so libglut.so.3.7
+ -rm -f *.o *~ *.o *~ *.so *.pc libglut.so.3.7
include depend
diff --git a/src/glut/mini/glut.pc.in b/src/glut/mini/glut.pc.in
index f732f2990d0..e8638fe1488 100644
--- a/src/glut/mini/glut.pc.in
+++ b/src/glut/mini/glut.pc.in
@@ -1,7 +1,7 @@
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
-libdir=${exec_prefix}/@LIB_DIR@
-includedir=${prefix}/include
+libdir=@INSTALL_LIB_DIR@
+includedir=@INSTALL_INC_DIR@
Name: glut
Description: Mesa OpenGL Utility Toolkit library
diff --git a/src/glw/Makefile b/src/glw/Makefile
index 88bf99d44f3..a9a174508f5 100644
--- a/src/glw/Makefile
+++ b/src/glw/Makefile
@@ -28,27 +28,28 @@ default: $(TOP)/$(LIB_DIR)/$(GLW_LIB_NAME)
# GLU pkg-config file
pcedit = sed \
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
- -e 's,@LIB_DIR@,$(LIB_DIR),' \
+ -e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
+ -e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
-e 's,@VERSION@,$(MAJOR).$(MINOR).$(TINY),'
glw.pc: glw.pc.in
$(pcedit) $< > $@
install: glw.pc
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
- $(INSTALL) -m 644 *.h $(DESTDIR)$(INSTALL_DIR)/include/GL
- $(INSTALL) $(TOP)/$(LIB_DIR)/libGLw.* $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -m 644 glw.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
+ $(INSTALL) -m 644 *.h $(DESTDIR)$(INSTALL_INC_DIR)/GL
+ $(INSTALL) $(TOP)/$(LIB_DIR)/libGLw.* $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -m 644 glw.pc $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
clean:
-rm -f depend depend.bak
- -rm -f *.o *~
+ -rm -f *.o *.pc *~
# Make the library
$(TOP)/$(LIB_DIR)/$(GLW_LIB_NAME): $(OBJECTS)
- $(TOP)/bin/mklib -o $(GLW_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GLW_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(MAJOR) -minor $(MINOR) -patch $(TINY) \
$(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(GLW_LIB_DEPS) $(OBJECTS)
diff --git a/src/glw/glw.pc.in b/src/glw/glw.pc.in
index 9c2682fbf34..25f3f73b8c6 100644
--- a/src/glw/glw.pc.in
+++ b/src/glw/glw.pc.in
@@ -1,7 +1,7 @@
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
-libdir=${exec_prefix}/@LIB_DIR@
-includedir=${prefix}/include
+libdir=@INSTALL_LIB_DIR@
+includedir=@INSTALL_INC_DIR@
Name: glw
Description: Mesa OpenGL widget library
diff --git a/src/glx/mini/Makefile b/src/glx/mini/Makefile
index 69c3d683e8c..aabc1d2be30 100644
--- a/src/glx/mini/Makefile
+++ b/src/glx/mini/Makefile
@@ -49,7 +49,7 @@ default: depend $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) $(TOP)/$(LIB_DIR)/miniglx.conf
# Make libGL
$(TOP)/$(LIB_DIR)/$(GL_LIB_NAME): $(OBJECTS) Makefile
- @ $(TOP)/bin/mklib -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ @ $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major 1 -minor 2 $(MKLIB_OPTIONS) \
-install $(TOP)/$(LIB_DIR) $(GL_LIB_DEPS) $(OBJECTS) \
$(LIBDRM_LIB) $(PCIACCESS_LIB)
diff --git a/src/glx/x11/.gitignore b/src/glx/x11/.gitignore
deleted file mode 100644
index ffc14ab7660..00000000000
--- a/src/glx/x11/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-glcontextmodes.c
diff --git a/src/glx/x11/Makefile b/src/glx/x11/Makefile
index c45c7de6d6d..121f3dfac00 100644
--- a/src/glx/x11/Makefile
+++ b/src/glx/x11/Makefile
@@ -71,7 +71,7 @@ default: depend $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME)
# Make libGL
$(TOP)/$(LIB_DIR)/$(GL_LIB_NAME): $(OBJECTS) Makefile
- $(TOP)/bin/mklib -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major 1 -minor 2 $(MKLIB_OPTIONS) \
-install $(TOP)/$(LIB_DIR) $(GL_LIB_DEPS) $(OBJECTS)
diff --git a/src/glx/x11/dri2_glx.c b/src/glx/x11/dri2_glx.c
index b679c72c103..0be65bce624 100644
--- a/src/glx/x11/dri2_glx.c
+++ b/src/glx/x11/dri2_glx.c
@@ -308,7 +308,7 @@ static __GLXDRIscreen *dri2CreateScreen(__GLXscreenConfigs *psc, int screen,
return NULL;
}
- driBindExtensions(psc);
+ driBindExtensions(psc, 1);
psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs);
psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs);
diff --git a/src/glx/x11/dri_common.c b/src/glx/x11/dri_common.c
index b159d193a51..8175f46c547 100644
--- a/src/glx/x11/dri_common.c
+++ b/src/glx/x11/dri_common.c
@@ -329,7 +329,7 @@ driConvertConfigs(const __DRIcoreExtension *core,
}
_X_HIDDEN void
-driBindExtensions(__GLXscreenConfigs *psc)
+driBindExtensions(__GLXscreenConfigs *psc, int dri2)
{
const __DRIextension **extensions;
int i;
@@ -386,7 +386,7 @@ driBindExtensions(__GLXscreenConfigs *psc)
#endif
#ifdef __DRI_TEX_BUFFER
- if (strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0) {
+ if ((strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0) && dri2) {
psc->texBuffer = (__DRItexBufferExtension *) extensions[i];
__glXEnableDirectExtension(psc, "GLX_EXT_texture_from_pixmap");
}
diff --git a/src/glx/x11/dri_common.h b/src/glx/x11/dri_common.h
index 3556510335a..15f6cc87b9f 100644
--- a/src/glx/x11/dri_common.h
+++ b/src/glx/x11/dri_common.h
@@ -55,6 +55,6 @@ extern void ErrorMessageF(const char *f, ...);
extern void *driOpenDriver(const char *driverName);
-extern void driBindExtensions(__GLXscreenConfigs *psc);
+extern void driBindExtensions(__GLXscreenConfigs *psc, int dri2);
#endif /* _DRI_COMMON_H */
diff --git a/src/glx/x11/dri_glx.c b/src/glx/x11/dri_glx.c
index d53f2d98541..82653f1625b 100644
--- a/src/glx/x11/dri_glx.c
+++ b/src/glx/x11/dri_glx.c
@@ -635,7 +635,7 @@ static __GLXDRIscreen *driCreateScreen(__GLXscreenConfigs *psc, int screen,
return NULL;
}
- driBindExtensions(psc);
+ driBindExtensions(psc, 0);
psp->destroyScreen = driDestroyScreen;
psp->createContext = driCreateContext;
diff --git a/src/glx/x11/drisw_glx.c b/src/glx/x11/drisw_glx.c
index f7ff0011216..bcf7e144ef6 100644
--- a/src/glx/x11/drisw_glx.c
+++ b/src/glx/x11/drisw_glx.c
@@ -390,7 +390,7 @@ static __GLXDRIscreen *driCreateScreen(__GLXscreenConfigs *psc, int screen,
goto handle_error;
}
- driBindExtensions(psc);
+ driBindExtensions(psc, 0);
psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs);
psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs);
diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c
index 777828569f4..d13d636699e 100644
--- a/src/glx/x11/glxext.c
+++ b/src/glx/x11/glxext.c
@@ -631,6 +631,9 @@ _X_HIDDEN __GLXdisplayPrivate *__glXInitialize(Display* dpy)
__GLXdisplayPrivate *dpyPriv;
XEDataObject dataObj;
int major, minor;
+#ifdef GLX_DIRECT_RENDERING
+ Bool glx_direct, glx_accel;
+#endif
#if defined(USE_XTHREADS)
{
@@ -698,16 +701,20 @@ _X_HIDDEN __GLXdisplayPrivate *__glXInitialize(Display* dpy)
dpyPriv->serverGLXversion = 0x0;
#ifdef GLX_DIRECT_RENDERING
+ glx_direct = (getenv("LIBGL_ALWAYS_INDIRECT") == NULL);
+ glx_accel = (getenv("LIBGL_ALWAYS_SOFTWARE") == NULL);
+
/*
** Initialize the direct rendering per display data and functions.
** Note: This _must_ be done before calling any other DRI routines
** (e.g., those called in AllocAndFetchScreenConfigs).
*/
- if (getenv("LIBGL_ALWAYS_INDIRECT") == NULL) {
+ if (glx_direct && glx_accel) {
dpyPriv->dri2Display = dri2CreateDisplay(dpy);
dpyPriv->driDisplay = driCreateDisplay(dpy);
- dpyPriv->driswDisplay = driswCreateDisplay(dpy);
}
+ if (glx_direct)
+ dpyPriv->driswDisplay = driswCreateDisplay(dpy);
#endif
if (!AllocAndFetchScreenConfigs(dpy, dpyPriv)) {
diff --git a/src/mesa/Makefile b/src/mesa/Makefile
index e0b641b921e..605e70083c5 100644
--- a/src/mesa/Makefile
+++ b/src/mesa/Makefile
@@ -30,11 +30,11 @@ default: depend asm_subdirs libmesa.a libglapi.a driver_subdirs
# Make archive of core mesa object files
libmesa.a: $(MESA_OBJECTS)
- @ $(TOP)/bin/mklib -o mesa -static $(MESA_OBJECTS)
+ @ $(MKLIB) -o mesa -static $(MESA_OBJECTS)
# Make archive of gl* API dispatcher functions only
libglapi.a: $(GLAPI_OBJECTS)
- @ $(TOP)/bin/mklib -o glapi -static $(GLAPI_OBJECTS)
+ @ $(MKLIB) -o glapi -static $(GLAPI_OBJECTS)
######################################################################
@@ -90,28 +90,29 @@ install: default
pcedit = sed \
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
- -e 's,@LIB_DIR@,$(LIB_DIR),' \
+ -e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
+ -e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
-e 's,@VERSION@,$(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY),'
gl.pc: gl.pc.in
$(pcedit) $< > $@
install-headers:
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_INC_DIR)/GL
$(INSTALL) -m 644 $(TOP)/include/GL/*.h \
- $(DESTDIR)$(INSTALL_DIR)/include/GL
+ $(DESTDIR)$(INSTALL_INC_DIR)/GL
install-libgl: default gl.pc install-headers
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
$(INSTALL) $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME)* \
- $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
- $(INSTALL) -m 644 gl.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
+ $(DESTDIR)$(INSTALL_LIB_DIR)
+ $(INSTALL) -m 644 gl.pc $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
install-osmesa: default
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
$(INSTALL) $(TOP)/$(LIB_DIR)/$(OSMESA_LIB_NAME)* \
- $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)
+ $(DESTDIR)$(INSTALL_LIB_DIR)
install-dri: default
cd drivers/dri && $(MAKE) install
@@ -128,6 +129,7 @@ clean:
-rm -f */*/*.o
-rm -f depend depend.bak libmesa.a libglapi.a
-rm -f drivers/*/*.o
+ -rm -f *.pc
-@cd drivers/dri && $(MAKE) clean
-@cd drivers/x11 && $(MAKE) clean
-@cd drivers/osmesa && $(MAKE) clean
diff --git a/src/mesa/drivers/beos/Makefile b/src/mesa/drivers/beos/Makefile
index 342d7ce0243..c79dd24c390 100644
--- a/src/mesa/drivers/beos/Makefile
+++ b/src/mesa/drivers/beos/Makefile
@@ -181,9 +181,10 @@ $(TOP)/$(LIB_DIR):
mkdir $(TOP)/$(LIB_DIR)
$(TOP)/$(LIB_DIR)/$(GL_LIB_NAME): $(OBJECTS) $(MESA_MODULES) $(GLU_MODULES)
- @$(TOP)/bin/mklib -o $(GL_LIB) -ldflags '$(LDFLAGS)' -install $(TOP)/$(LIB_DIR) \
+ @$(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(MESA_TINY) \
- $(MKLIB_OPTIONS) $(GL_LIB_DEPS) $(OBJECTS) $(MESA_MODULES) $(GLU_MODULES)
+ -install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) $(GL_LIB_DEPS) \
+ $(OBJECTS) $(MESA_MODULES) $(GLU_MODULES)
# $(GLU_OBJECTS):
# cd $(GLU_DIR) && $(MAKE) $< ;
diff --git a/src/mesa/drivers/directfb/Makefile b/src/mesa/drivers/directfb/Makefile
index ece0457cffa..94c82a2c9c9 100644
--- a/src/mesa/drivers/directfb/Makefile
+++ b/src/mesa/drivers/directfb/Makefile
@@ -37,7 +37,7 @@ default: directfb-libgl directfbgl_mesa
# XXX this used to be in src/mesa/Makefile and is probably broken now
directfb-libgl: $(LIBS)
- @ $(TOP)/bin/mklib -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ @ $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(MESA_TINY) \
-install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) $(LIBS) \
$(GL_LIB_DEPS)
diff --git a/src/mesa/drivers/dri/Makefile b/src/mesa/drivers/dri/Makefile
index 3f87782fb1b..3b3fcf11df1 100644
--- a/src/mesa/drivers/dri/Makefile
+++ b/src/mesa/drivers/dri/Makefile
@@ -22,7 +22,8 @@ subdirs:
pcedit = sed \
-e 's,@INSTALL_DIR@,$(INSTALL_DIR),' \
- -e 's,@LIB_DIR@,$(LIB_DIR),' \
+ -e 's,@INSTALL_LIB_DIR@,$(INSTALL_LIB_DIR),' \
+ -e 's,@INSTALL_INC_DIR@,$(INSTALL_INC_DIR),' \
-e 's,@VERSION@,$(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY),' \
-e 's,@DRI_DRIVER_DIR@,$(DRI_DRIVER_SEARCH_DIR),'
@@ -36,11 +37,13 @@ install: dri.pc
(cd $$dir && $(MAKE) install) || exit 1 ; \
fi \
done
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/include/GL/internal
- $(INSTALL) -m 0644 $(TOP)/include/GL/internal/dri_interface.h $(DESTDIR)$(INSTALL_DIR)/include/GL/internal
- $(INSTALL) -m 0644 $(TOP)/include/GL/internal/dri_sarea.h $(DESTDIR)$(INSTALL_DIR)/include/GL/internal
- $(INSTALL) -d $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
- $(INSTALL) -m 0644 dri.pc $(DESTDIR)$(INSTALL_DIR)/$(LIB_DIR)/pkgconfig
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_INC_DIR)/GL/internal
+ $(INSTALL) -m 0644 $(TOP)/include/GL/internal/dri_interface.h \
+ $(DESTDIR)$(INSTALL_INC_DIR)/GL/internal
+ $(INSTALL) -m 0644 $(TOP)/include/GL/internal/dri_sarea.h \
+ $(DESTDIR)$(INSTALL_INC_DIR)/GL/internal
+ $(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
+ $(INSTALL) -m 0644 dri.pc $(DESTDIR)$(INSTALL_LIB_DIR)/pkgconfig
clean:
@@ -50,3 +53,4 @@ clean:
fi \
done
-rm -f common/*.o
+ -rm -f *.pc
diff --git a/src/mesa/drivers/dri/Makefile.template b/src/mesa/drivers/dri/Makefile.template
index 07e181e2cd8..95eeecc7c4f 100644
--- a/src/mesa/drivers/dri/Makefile.template
+++ b/src/mesa/drivers/dri/Makefile.template
@@ -68,7 +68,7 @@ default: symlinks depend $(LIBNAME) $(TOP)/$(LIB_DIR)/$(LIBNAME)
$(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(WINOBJ) Makefile $(TOP)/src/mesa/drivers/dri/Makefile.template
- $(TOP)/bin/mklib -ldflags '$(LDFLAGS)' -noprefix -o $@ \
+ $(MKLIB) -o $@ -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
$(OBJECTS) $(MESA_MODULES) $(WINOBJ) $(DRI_LIB_DEPS)
diff --git a/src/mesa/drivers/dri/common/extension_helper.h b/src/mesa/drivers/dri/common/extension_helper.h
index 65e96657b8a..ea5b9973dde 100644
--- a/src/mesa/drivers/dri/common/extension_helper.h
+++ b/src/mesa/drivers/dri/common/extension_helper.h
@@ -1077,13 +1077,6 @@ static const char AreTexturesResident_names[] =
"";
#endif
-#if defined(need_GL_EXT_framebuffer_object)
-static const char IsRenderbufferEXT_names[] =
- "i\0" /* Parameter signature */
- "glIsRenderbufferEXT\0"
- "";
-#endif
-
#if defined(need_GL_VERSION_2_0) || defined(need_GL_ATI_separate_stencil)
static const char StencilOpSeparate_names[] =
"iiii\0" /* Parameter signature */
@@ -1763,13 +1756,6 @@ static const char DeleteFencesNV_names[] =
"";
#endif
-#if defined(need_GL_SGIX_polynomial_ffd)
-static const char DeformationMap3dSGIX_names[] =
- "iddiiddiiddiip\0" /* Parameter signature */
- "glDeformationMap3dSGIX\0"
- "";
-#endif
-
#if defined(need_GL_VERSION_2_0)
static const char IsShader_names[] =
"i\0" /* Parameter signature */
@@ -2015,6 +2001,13 @@ static const char WeightfvARB_names[] =
"";
#endif
+#if defined(need_GL_EXT_framebuffer_object)
+static const char IsRenderbufferEXT_names[] =
+ "i\0" /* Parameter signature */
+ "glIsRenderbufferEXT\0"
+ "";
+#endif
+
#if defined(need_GL_MESA_window_pos)
static const char WindowPos4fMESA_names[] =
"ffff\0" /* Parameter signature */
@@ -4530,6 +4523,13 @@ static const char Minmax_names[] =
"";
#endif
+#if defined(need_GL_SGIX_polynomial_ffd)
+static const char DeformationMap3dSGIX_names[] =
+ "iddiiddiiddiip\0" /* Parameter signature */
+ "glDeformationMap3dSGIX\0"
+ "";
+#endif
+
#if defined(need_GL_VERSION_1_4) || defined(need_GL_EXT_fog_coord)
static const char FogCoorddvEXT_names[] =
"p\0" /* Parameter signature */
@@ -5319,13 +5319,13 @@ static const struct dri_extension_function GL_EXT_framebuffer_blit_functions[] =
#if defined(need_GL_EXT_framebuffer_object)
static const struct dri_extension_function GL_EXT_framebuffer_object_functions[] = {
{ GenerateMipmapEXT_names, GenerateMipmapEXT_remap_index, -1 },
- { IsRenderbufferEXT_names, IsRenderbufferEXT_remap_index, -1 },
{ RenderbufferStorageEXT_names, RenderbufferStorageEXT_remap_index, -1 },
{ CheckFramebufferStatusEXT_names, CheckFramebufferStatusEXT_remap_index, -1 },
{ DeleteRenderbuffersEXT_names, DeleteRenderbuffersEXT_remap_index, -1 },
{ FramebufferTexture3DEXT_names, FramebufferTexture3DEXT_remap_index, -1 },
{ FramebufferRenderbufferEXT_names, FramebufferRenderbufferEXT_remap_index, -1 },
{ FramebufferTexture1DEXT_names, FramebufferTexture1DEXT_remap_index, -1 },
+ { IsRenderbufferEXT_names, IsRenderbufferEXT_remap_index, -1 },
{ BindFramebufferEXT_names, BindFramebufferEXT_remap_index, -1 },
{ GenRenderbuffersEXT_names, GenRenderbuffersEXT_remap_index, -1 },
{ IsFramebufferEXT_names, IsFramebufferEXT_remap_index, -1 },
@@ -5965,9 +5965,9 @@ static const struct dri_extension_function GL_SGIX_pixel_texture_functions[] = {
#if defined(need_GL_SGIX_polynomial_ffd)
static const struct dri_extension_function GL_SGIX_polynomial_ffd_functions[] = {
{ LoadIdentityDeformationMapSGIX_names, LoadIdentityDeformationMapSGIX_remap_index, -1 },
- { DeformationMap3dSGIX_names, DeformationMap3dSGIX_remap_index, -1 },
{ DeformSGIX_names, DeformSGIX_remap_index, -1 },
{ DeformationMap3fSGIX_names, DeformationMap3fSGIX_remap_index, -1 },
+ { DeformationMap3dSGIX_names, DeformationMap3dSGIX_remap_index, -1 },
{ NULL, 0, 0 }
};
#endif
diff --git a/src/mesa/drivers/dri/dri.pc.in b/src/mesa/drivers/dri/dri.pc.in
index 58d890d0cb6..c47ee9c7e7d 100644
--- a/src/mesa/drivers/dri/dri.pc.in
+++ b/src/mesa/drivers/dri/dri.pc.in
@@ -1,7 +1,7 @@
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
-libdir=${exec_prefix}/@LIB_DIR@
-includedir=${prefix}/include
+libdir=@INSTALL_LIB_DIR@
+includedir=@INSTALL_INC_DIR@
dridriverdir=@DRI_DRIVER_DIR@
Name: dri
diff --git a/src/mesa/drivers/dri/i915/i915_texstate.c b/src/mesa/drivers/dri/i915/i915_texstate.c
index af7166e681d..69c1e0755ef 100644
--- a/src/mesa/drivers/dri/i915/i915_texstate.c
+++ b/src/mesa/drivers/dri/i915/i915_texstate.c
@@ -257,18 +257,15 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
*/
if (tObj->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB &&
tObj->Target != GL_TEXTURE_3D) {
+ if (tObj->Target == GL_TEXTURE_1D)
+ return GL_FALSE;
state[I915_TEXREG_SS2] |=
(SS2_SHADOW_ENABLE |
intel_translate_shadow_compare_func(tObj->CompareFunc));
- if (tObj->Target == GL_TEXTURE_1D) {
- minFilt = FILTER_NEAREST;
- magFilt = FILTER_NEAREST;
- } else {
- minFilt = FILTER_4X4_FLAT;
- magFilt = FILTER_4X4_FLAT;
- }
+ minFilt = FILTER_4X4_FLAT;
+ magFilt = FILTER_4X4_FLAT;
}
state[I915_TEXREG_SS2] |= ((minFilt << SS2_MIN_FILTER_SHIFT) |
diff --git a/src/mesa/drivers/dri/i965/brw_clip_line.c b/src/mesa/drivers/dri/i965/brw_clip_line.c
index 7d51cddfc3d..0930e6a5739 100644
--- a/src/mesa/drivers/dri/i965/brw_clip_line.c
+++ b/src/mesa/drivers/dri/i965/brw_clip_line.c
@@ -148,7 +148,7 @@ static void clip_and_emit_line( struct brw_clip_compile *c )
brw_clip_init_clipmask(c);
/* -ve rhw workaround */
- if (!BRW_IS_IGD(p->brw)) {
+ if (!(BRW_IS_GM45(p->brw) || BRW_IS_G4X(p->brw))) {
brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
brw_AND(p, brw_null_reg(), get_element_ud(c->reg.R0, 2),
brw_imm_ud(1<<20));
diff --git a/src/mesa/drivers/dri/i965/brw_clip_state.c b/src/mesa/drivers/dri/i965/brw_clip_state.c
index 7cb21f894eb..2d0b24c5cae 100644
--- a/src/mesa/drivers/dri/i965/brw_clip_state.c
+++ b/src/mesa/drivers/dri/i965/brw_clip_state.c
@@ -102,7 +102,7 @@ clip_unit_create_from_key(struct brw_context *brw,
clip.clip5.api_mode = BRW_CLIP_API_OGL;
clip.clip5.clip_mode = key->clip_mode;
- if (BRW_IS_IGD(brw))
+ if (BRW_IS_GM45(brw) || BRW_IS_G4X(brw))
clip.clip5.negative_w_clip_test = 1;
clip.clip6.clipper_viewport_state_ptr = 0;
diff --git a/src/mesa/drivers/dri/i965/brw_clip_tri.c b/src/mesa/drivers/dri/i965/brw_clip_tri.c
index f1fc6e1e9da..7c703179fea 100644
--- a/src/mesa/drivers/dri/i965/brw_clip_tri.c
+++ b/src/mesa/drivers/dri/i965/brw_clip_tri.c
@@ -536,7 +536,7 @@ void brw_emit_tri_clip( struct brw_clip_compile *c )
/* if -ve rhw workaround bit is set,
do cliptest */
- if (!BRW_IS_IGD(p->brw)) {
+ if (!(BRW_IS_GM45(p->brw) || BRW_IS_G4X(p->brw))) {
brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
brw_AND(p, brw_null_reg(), get_element_ud(c->reg.R0, 2),
brw_imm_ud(1<<20));
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 33f1bba085b..1c7ad5c9c8f 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -125,7 +125,7 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
ctx->Const.MaxTextureUnits = BRW_MAX_TEX_UNIT;
ctx->Const.MaxTextureImageUnits = BRW_MAX_TEX_UNIT;
ctx->Const.MaxTextureCoordUnits = BRW_MAX_TEX_UNIT;
-
+ ctx->Const.MaxVertexTextureImageUnits = 0; /* no vertex shader textures */
/* Advertise the full hardware capabilities. The new memory
* manager should cope much better with overload situations:
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 3aada8cab1a..92c058ade8d 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -804,7 +804,7 @@
#define CMD_STATE_BASE_ADDRESS 0x6101
#define CMD_STATE_INSN_POINTER 0x6102
#define CMD_PIPELINE_SELECT_965 0x6104
-#define CMD_PIPELINE_SELECT_IGD 0x6904
+#define CMD_PIPELINE_SELECT_GM45 0x6904
#define CMD_PIPELINED_STATE_POINTERS 0x7800
#define CMD_BINDING_TABLE_PTRS 0x7801
@@ -836,7 +836,7 @@
#define CMD_INDEX_BUFFER 0x780a
#define CMD_VF_STATISTICS_965 0x780b
-#define CMD_VF_STATISTICS_IGD 0x680b
+#define CMD_VF_STATISTICS_GM45 0x680b
#define CMD_DRAW_RECT 0x7900
#define CMD_BLEND_CONSTANT_COLOR 0x7901
@@ -862,9 +862,10 @@
#include "intel_chipset.h"
-#define BRW_IS_IGD(brw) (IS_IGD((brw)->intel.intelScreen->deviceID))
-#define CMD_PIPELINE_SELECT(brw) ((BRW_IS_IGD(brw)) ? CMD_PIPELINE_SELECT_IGD : CMD_PIPELINE_SELECT_965)
-#define CMD_VF_STATISTICS(brw) ((BRW_IS_IGD(brw)) ? CMD_VF_STATISTICS_IGD : CMD_VF_STATISTICS_965)
-#define URB_SIZES(brw) ((BRW_IS_IGD(brw)) ? 384 : 256) /* 512 bit unit */
+#define BRW_IS_GM45(brw) (IS_GM45_GM((brw)->intel.intelScreen->deviceID))
+#define BRW_IS_G4X(brw) (IS_G4X((brw)->intel.intelScreen->deviceID))
+#define CMD_PIPELINE_SELECT(brw) ((BRW_IS_GM45(brw) || BRW_IS_G4X(brw)) ? CMD_PIPELINE_SELECT_GM45 : CMD_PIPELINE_SELECT_965)
+#define CMD_VF_STATISTICS(brw) ((BRW_IS_GM45(brw) || BRW_IS_G4X(brw)) ? CMD_VF_STATISTICS_GM45 : CMD_VF_STATISTICS_965)
+#define URB_SIZES(brw) ((BRW_IS_GM45(brw) || BRW_IS_G4X(brw)) ? 384 : 256) /* 512 bit unit */
#endif
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index fefd30bc7f5..6b97f8b170c 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -329,14 +329,14 @@ static void brw_set_sampler_message(struct brw_context *brw,
{
brw_set_src1(insn, brw_imm_d(0));
- if (BRW_IS_IGD(brw)) {
- insn->bits3.sampler_igd.binding_table_index = binding_table_index;
- insn->bits3.sampler_igd.sampler = sampler;
- insn->bits3.sampler_igd.msg_type = msg_type;
- insn->bits3.sampler_igd.response_length = response_length;
- insn->bits3.sampler_igd.msg_length = msg_length;
- insn->bits3.sampler_igd.end_of_thread = eot;
- insn->bits3.sampler_igd.msg_target = BRW_MESSAGE_TARGET_SAMPLER;
+ if (BRW_IS_GM45(brw) || BRW_IS_G4X(brw)) {
+ insn->bits3.sampler_gm45_g4x.binding_table_index = binding_table_index;
+ insn->bits3.sampler_gm45_g4x.sampler = sampler;
+ insn->bits3.sampler_gm45_g4x.msg_type = msg_type;
+ insn->bits3.sampler_gm45_g4x.response_length = response_length;
+ insn->bits3.sampler_gm45_g4x.msg_length = msg_length;
+ insn->bits3.sampler_gm45_g4x.end_of_thread = eot;
+ insn->bits3.sampler_gm45_g4x.msg_target = BRW_MESSAGE_TARGET_SAMPLER;
} else {
insn->bits3.sampler.binding_table_index = binding_table_index;
insn->bits3.sampler.sampler = sampler;
diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index 26ec797b5fd..62df2590f35 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -192,7 +192,7 @@ static void emit_depthbuffer(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
struct intel_region *region = brw->state.depth_region;
- unsigned int len = BRW_IS_IGD(brw) ? sizeof(struct brw_depthbuffer_igd) / 4 : sizeof(struct brw_depthbuffer) / 4;
+ unsigned int len = (BRW_IS_GM45(brw) || BRW_IS_G4X(brw)) ? sizeof(struct brw_depthbuffer_gm45_g4x) / 4 : sizeof(struct brw_depthbuffer) / 4;
if (region == NULL) {
BEGIN_BATCH(len, IGNORE_CLIPRECTS);
@@ -203,7 +203,7 @@ static void emit_depthbuffer(struct brw_context *brw)
OUT_BATCH(0);
OUT_BATCH(0);
- if (BRW_IS_IGD(brw))
+ if (BRW_IS_GM45(brw) || BRW_IS_G4X(brw))
OUT_BATCH(0);
ADVANCE_BATCH();
@@ -239,7 +239,7 @@ static void emit_depthbuffer(struct brw_context *brw)
((region->height - 1) << 19));
OUT_BATCH(0);
- if (BRW_IS_IGD(brw))
+ if (BRW_IS_GM45(brw) || BRW_IS_G4X(brw))
OUT_BATCH(0);
ADVANCE_BATCH();
@@ -324,7 +324,7 @@ static void upload_aa_line_parameters(struct brw_context *brw)
{
struct brw_aa_line_parameters balp;
- if (!BRW_IS_IGD(brw))
+ if (!(BRW_IS_GM45(brw) || BRW_IS_G4X(brw)))
return;
/* use legacy aa line coverage computation */
diff --git a/src/mesa/drivers/dri/i965/brw_structs.h b/src/mesa/drivers/dri/i965/brw_structs.h
index 1326280e00a..ec865c925a7 100644
--- a/src/mesa/drivers/dri/i965/brw_structs.h
+++ b/src/mesa/drivers/dri/i965/brw_structs.h
@@ -175,7 +175,7 @@ struct brw_depthbuffer
} dword4;
};
-struct brw_depthbuffer_igd
+struct brw_depthbuffer_gm45_g4x
{
union header_union header;
@@ -1405,7 +1405,7 @@ struct brw_instruction
GLuint msg_target:4;
GLuint pad1:3;
GLuint end_of_thread:1;
- } sampler_igd;
+ } sampler_gm45_g4x;
struct brw_urb_immediate urb;
diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 3cac97c71f4..7767d1369ce 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -867,7 +867,7 @@ static void emit_vertex_write( struct brw_vs_compile *c)
* Later, clipping will detect ucp[6] and ensure the primitive is
* clipped against all fixed planes.
*/
- if (!BRW_IS_IGD(p->brw) && !c->key.know_w_is_one) {
+ if (!(BRW_IS_GM45(p->brw) || BRW_IS_G4X(p->brw)) && !c->key.know_w_is_one) {
brw_CMP(p,
vec8(brw_null_reg()),
BRW_CONDITIONAL_L,
diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index 2d636df2ce5..0da602010e8 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -118,8 +118,10 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
if (batch->cliprect_mode == IGNORE_CLIPRECTS) {
batch->cliprect_mode = cliprect_mode;
} else {
- if (batch->cliprect_mode != cliprect_mode)
+ if (batch->cliprect_mode != cliprect_mode) {
intel_batchbuffer_flush(batch);
+ batch->cliprect_mode = cliprect_mode;
+ }
}
}
}
diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c
index d9dbbb24825..25ac609f133 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -123,7 +123,8 @@ intelCopyBuffer(const __DRIdrawablePrivate * dPriv,
dst_pitch /= 4;
}
#endif
-
+ /* do space/cliprects check before going any further */
+ intel_batchbuffer_require_space(intel->batch, 8 * 4, REFERENCES_CLIPRECTS);
again:
ret = dri_bufmgr_check_aperture_space(dst->buffer);
ret |= dri_bufmgr_check_aperture_space(src->buffer);
@@ -278,6 +279,8 @@ intelEmitCopyBlit(struct intel_context *intel,
int ret;
BATCH_LOCALS;
+ /* do space/cliprects check before going any further */
+ intel_batchbuffer_require_space(intel->batch, 8 * 4, NO_LOOP_CLIPRECTS);
again:
ret = dri_bufmgr_check_aperture_space(dst_buffer);
ret |= dri_bufmgr_check_aperture_space(src_buffer);
diff --git a/src/mesa/drivers/dri/intel/intel_chipset.h b/src/mesa/drivers/dri/intel/intel_chipset.h
index 4a5166263ac..15b9ef43127 100644
--- a/src/mesa/drivers/dri/intel/intel_chipset.h
+++ b/src/mesa/drivers/dri/intel/intel_chipset.h
@@ -53,7 +53,7 @@
#define PCI_CHIP_I965_GM 0x2A02
#define PCI_CHIP_I965_GME 0x2A12
-#define PCI_CHIP_IGD_GM 0x2A42
+#define PCI_CHIP_GM45_GM 0x2A42
#define PCI_CHIP_IGD_E_G 0x2E02
#define PCI_CHIP_Q45_G 0x2E12
@@ -65,13 +65,12 @@
devid == PCI_CHIP_I945_GME || \
devid == PCI_CHIP_I965_GM || \
devid == PCI_CHIP_I965_GME || \
- devid == PCI_CHIP_IGD_GM)
+ devid == PCI_CHIP_GM45_GM)
-#define IS_IGD_GM(devid) (devid == PCI_CHIP_IGD_GM)
+#define IS_GM45_GM(devid) (devid == PCI_CHIP_GM45_GM)
#define IS_G4X(devid) (devid == PCI_CHIP_IGD_E_G || \
devid == PCI_CHIP_Q45_G || \
devid == PCI_CHIP_G45_G)
-#define IS_IGD(devid) (IS_IGD_GM(devid) || IS_G4X(devid))
#define IS_915(devid) (devid == PCI_CHIP_I915_G || \
devid == PCI_CHIP_E7221_G || \
@@ -90,7 +89,8 @@
devid == PCI_CHIP_I965_GM || \
devid == PCI_CHIP_I965_GME || \
devid == PCI_CHIP_I946_GZ || \
- IS_IGD(devid))
+ IS_GM45_GM(devid) || \
+ IS_G4X(devid))
#define IS_9XX(devid) (IS_915(devid) || \
IS_945(devid) || \
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index 671b3f68a3e..f8ea6461c9c 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -166,7 +166,9 @@ intelGetString(GLcontext * ctx, GLenum name)
case PCI_CHIP_I965_GME:
chipset = "Intel(R) 965GME/GLE";
break;
- case PCI_CHIP_IGD_GM:
+ case PCI_CHIP_GM45_GM:
+ chipset = "Mobile Intel® GM45 Express Chipset";
+ break;
case PCI_CHIP_IGD_E_G:
chipset = "Intel(R) Integrated Graphics Device";
break;
diff --git a/src/mesa/drivers/dri/r300/Makefile b/src/mesa/drivers/dri/r300/Makefile
index d52b2b4c36d..6ca934204f3 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -38,8 +38,11 @@ DRIVER_SOURCES = \
r300_texstate.c \
radeon_program.c \
radeon_program_alu.c \
+ radeon_program_pair.c \
+ radeon_nqssadce.c \
r300_vertprog.c \
r300_fragprog.c \
+ r300_fragprog_swizzle.c \
r300_fragprog_emit.c \
r500_fragprog.c \
r500_fragprog_emit.c \
diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
index d378045b983..4dc31614492 100644
--- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c
+++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c
@@ -405,7 +405,7 @@ void r300InitCmdBuf(r300ContextPtr r300)
ALLOC_STATE(ri, always, R500_RI_CMDSIZE, 0);
r300->hw.ri.cmd[R300_RI_CMD_0] = cmdpacket0(R500_RS_IP_0, 16);
for (i = 0; i < 8; i++) {
- r300->hw.ri.cmd[R300_RI_CMD_0 + i +1] =
+ r300->hw.ri.cmd[R300_RI_CMD_0 + i +1] =
(R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_S_SHIFT) |
(R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_T_SHIFT) |
(R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_R_SHIFT) |
@@ -470,8 +470,13 @@ void r300InitCmdBuf(r300ContextPtr r300)
r300->hw.bld.cmd[R300_BLD_CMD_0] = cmdpacket0(R300_RB3D_CBLEND, 2);
ALLOC_STATE(cmk, always, R300_CMK_CMDSIZE, 0);
r300->hw.cmk.cmd[R300_CMK_CMD_0] = cmdpacket0(RB3D_COLOR_CHANNEL_MASK, 1);
- ALLOC_STATE(blend_color, always, 4, 0);
- r300->hw.blend_color.cmd[0] = cmdpacket0(R300_RB3D_BLEND_COLOR, 3);
+ if (is_r500) {
+ ALLOC_STATE(blend_color, always, 3, 0);
+ r300->hw.blend_color.cmd[0] = cmdpacket0(R500_RB3D_CONSTANT_COLOR_AR, 2);
+ } else {
+ ALLOC_STATE(blend_color, always, 2, 0);
+ r300->hw.blend_color.cmd[0] = cmdpacket0(R300_RB3D_BLEND_COLOR, 1);
+ }
ALLOC_STATE(cb, always, R300_CB_CMDSIZE, 0);
r300->hw.cb.cmd[R300_CB_CMD_0] = cmdpacket0(R300_RB3D_COLOROFFSET0, 1);
r300->hw.cb.cmd[R300_CB_CMD_1] = cmdpacket0(R300_RB3D_COLORPITCH0, 1);
diff --git a/src/mesa/drivers/dri/r300/r300_context.h b/src/mesa/drivers/dri/r300/r300_context.h
index a24ab0cad76..98af6d8f10a 100644
--- a/src/mesa/drivers/dri/r300/r300_context.h
+++ b/src/mesa/drivers/dri/r300/r300_context.h
@@ -683,16 +683,25 @@ struct r300_fragment_program_external_state {
};
+struct r300_fragment_program_node {
+ int tex_offset; /**< first tex instruction */
+ int tex_end; /**< last tex instruction, relative to tex_offset */
+ int alu_offset; /**< first ALU instruction */
+ int alu_end; /**< last ALU instruction, relative to alu_offset */
+ int flags;
+};
+
/**
* Stores an R300 fragment program in its compiled-to-hardware form.
*/
struct r300_fragment_program_code {
struct {
- int length;
+ int length; /**< total # of texture instructions used */
GLuint inst[PFS_MAX_TEX_INST];
} tex;
struct {
+ int length; /**< total # of ALU instructions used */
struct {
GLuint inst0;
GLuint inst1;
@@ -701,29 +710,15 @@ struct r300_fragment_program_code {
} inst[PFS_MAX_ALU_INST];
} alu;
- struct {
- int tex_offset;
- int tex_end;
- int alu_offset;
- int alu_end;
- int flags;
- } node[4];
+ struct r300_fragment_program_node node[4];
int cur_node;
int first_node_has_tex;
- int alu_offset;
- int alu_end;
- int tex_offset;
- int tex_end;
-
- /* Hardware constants.
- * Contains a pointer to the value. The destination of the pointer
- * is supposed to be updated when GL state changes.
- * Typically, this is either a pointer into
- * gl_program_parameter_list::ParameterValues, or a pointer to a
- * global constant (e.g. for sin/cos-approximation)
+ /**
+ * Remember which program register a given hardware constant
+ * belongs to.
*/
- const GLfloat *constant[PFS_NUM_CONST_REGS];
+ struct prog_src_register constant[PFS_NUM_CONST_REGS];
int const_nr;
int max_temp_idx;
@@ -780,21 +775,15 @@ struct r500_fragment_program_code {
GLuint inst4;
GLuint inst5;
} inst[512];
- /* TODO: This is magic! */
-
- int temp_reg_offset;
int inst_offset;
int inst_end;
- /* Hardware constants.
- * Contains a pointer to the value. The destination of the pointer
- * is supposed to be updated when GL state changes.
- * Typically, this is either a pointer into
- * gl_program_parameter_list::ParameterValues, or a pointer to a
- * global constant (e.g. for sin/cos-approximation)
- */
- const GLfloat *constant[PFS_NUM_CONST_REGS];
+ /**
+ * Remember which program register a given hardware constant
+ * belongs to.
+ */
+ struct prog_src_register constant[PFS_NUM_CONST_REGS];
int const_nr;
int max_temp_idx;
diff --git a/src/mesa/drivers/dri/r300/r300_fragprog.c b/src/mesa/drivers/dri/r300/r300_fragprog.c
index 6d24d266fec..d390de54b8a 100644
--- a/src/mesa/drivers/dri/r300/r300_fragprog.c
+++ b/src/mesa/drivers/dri/r300/r300_fragprog.c
@@ -29,10 +29,8 @@
* \file
*
* Fragment program compiler. Perform transformations on the intermediate
- * \ref radeon_program representation (which is essentially the Mesa
- * program representation plus the notion of clauses) until the program
- * is in a form where we can translate it more or less directly into
- * machine-readable form.
+ * representation until the program is in a form where we can translate
+ * it more or less directly into machine-readable form.
*
* \author Ben Skeggs <darktama@iinet.net.au>
* \author Jerome Glisse <j.glisse@gmail.com>
@@ -47,8 +45,10 @@
#include "r300_context.h"
#include "r300_fragprog.h"
+#include "r300_fragprog_swizzle.h"
#include "r300_state.h"
+#include "radeon_nqssadce.h"
#include "radeon_program_alu.h"
@@ -68,7 +68,7 @@ static void reset_srcreg(struct prog_src_register* reg)
* be reused.
*/
static GLboolean transform_TEX(
- struct radeon_program_transform_context* context,
+ struct radeon_transform_context *t,
struct prog_instruction* orig_inst, void* data)
{
struct r300_fragment_program_compiler *compiler =
@@ -84,12 +84,11 @@ static GLboolean transform_TEX(
return GL_FALSE;
if (inst.Opcode != OPCODE_KIL &&
- compiler->fp->mesa_program.Base.ShadowSamplers & (1 << inst.TexSrcUnit)) {
+ t->Program->ShadowSamplers & (1 << inst.TexSrcUnit)) {
GLuint comparefunc = GL_NEVER + compiler->fp->state.unit[inst.TexSrcUnit].texture_compare_func;
if (comparefunc == GL_NEVER || comparefunc == GL_ALWAYS) {
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
+ tgt = radeonAppendInstructions(t->Program, 1);
tgt->Opcode = OPCODE_MOV;
tgt->DstReg = inst.DstReg;
@@ -99,7 +98,7 @@ static GLboolean transform_TEX(
}
inst.DstReg.File = PROGRAM_TEMPORARY;
- inst.DstReg.Index = radeonCompilerAllocateTemporary(context->compiler);
+ inst.DstReg.Index = radeonFindFreeTemporary(t);
inst.DstReg.WriteMask = WRITEMASK_XYZW;
}
@@ -114,16 +113,13 @@ static GLboolean transform_TEX(
0
};
- int tempreg = radeonCompilerAllocateTemporary(context->compiler);
+ int tempreg = radeonFindFreeTemporary(t);
int factor_index;
tokens[2] = inst.TexSrcUnit;
- factor_index =
- _mesa_add_state_reference(
- compiler->fp->mesa_program.Base.Parameters, tokens);
+ factor_index = _mesa_add_state_reference(t->Program->Parameters, tokens);
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
+ tgt = radeonAppendInstructions(t->Program, 1);
tgt->Opcode = OPCODE_MUL;
tgt->DstReg.File = PROGRAM_TEMPORARY;
@@ -137,30 +133,10 @@ static GLboolean transform_TEX(
inst.SrcReg[0].Index = tempreg;
}
- /* Texture operations do not support swizzles etc. in hardware,
- * so emit an additional arithmetic operation if necessary.
- */
- if (inst.SrcReg[0].Swizzle != SWIZZLE_NOOP ||
- inst.SrcReg[0].Abs || inst.SrcReg[0].NegateBase || inst.SrcReg[0].NegateAbs) {
- int tempreg = radeonCompilerAllocateTemporary(context->compiler);
-
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
-
- tgt->Opcode = OPCODE_MOV;
- tgt->DstReg.File = PROGRAM_TEMPORARY;
- tgt->DstReg.Index = tempreg;
- tgt->SrcReg[0] = inst.SrcReg[0];
-
- reset_srcreg(&inst.SrcReg[0]);
- inst.SrcReg[0].File = PROGRAM_TEMPORARY;
- inst.SrcReg[0].Index = tempreg;
- }
-
if (inst.Opcode != OPCODE_KIL) {
if (inst.DstReg.File != PROGRAM_TEMPORARY ||
inst.DstReg.WriteMask != WRITEMASK_XYZW) {
- int tempreg = radeonCompilerAllocateTemporary(context->compiler);
+ int tempreg = radeonFindFreeTemporary(t);
inst.DstReg.File = PROGRAM_TEMPORARY;
inst.DstReg.Index = tempreg;
@@ -169,55 +145,63 @@ static GLboolean transform_TEX(
}
}
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
+ tgt = radeonAppendInstructions(t->Program, 1);
_mesa_copy_instructions(tgt, &inst, 1);
if (inst.Opcode != OPCODE_KIL &&
- compiler->fp->mesa_program.Base.ShadowSamplers & (1 << inst.TexSrcUnit)) {
+ t->Program->ShadowSamplers & (1 << inst.TexSrcUnit)) {
GLuint comparefunc = GL_NEVER + compiler->fp->state.unit[inst.TexSrcUnit].texture_compare_func;
GLuint depthmode = compiler->fp->state.unit[inst.TexSrcUnit].depth_texture_mode;
-
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 2);
-
- tgt[0].Opcode = OPCODE_ADD;
- tgt[0].DstReg = inst.DstReg;
- tgt[0].DstReg.WriteMask = orig_inst->DstReg.WriteMask;
- tgt[0].SrcReg[0].File = PROGRAM_TEMPORARY;
- tgt[0].SrcReg[0].Index = inst.DstReg.Index;
+ int rcptemp = radeonFindFreeTemporary(t);
+
+ tgt = radeonAppendInstructions(t->Program, 3);
+
+ tgt[0].Opcode = OPCODE_RCP;
+ tgt[0].DstReg.File = PROGRAM_TEMPORARY;
+ tgt[0].DstReg.Index = rcptemp;
+ tgt[0].DstReg.WriteMask = WRITEMASK_W;
+ tgt[0].SrcReg[0] = inst.SrcReg[0];
+ tgt[0].SrcReg[0].Swizzle = SWIZZLE_WWWW;
+
+ tgt[1].Opcode = OPCODE_MAD;
+ tgt[1].DstReg = inst.DstReg;
+ tgt[1].DstReg.WriteMask = orig_inst->DstReg.WriteMask;
+ tgt[1].SrcReg[0] = inst.SrcReg[0];
+ tgt[1].SrcReg[0].Swizzle = SWIZZLE_ZZZZ;
+ tgt[1].SrcReg[1].File = PROGRAM_TEMPORARY;
+ tgt[1].SrcReg[1].Index = rcptemp;
+ tgt[1].SrcReg[1].Swizzle = SWIZZLE_WWWW;
+ tgt[1].SrcReg[2].File = PROGRAM_TEMPORARY;
+ tgt[1].SrcReg[2].Index = inst.DstReg.Index;
if (depthmode == 0) /* GL_LUMINANCE */
- tgt[0].SrcReg[0].Swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z);
+ tgt[1].SrcReg[2].Swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z);
else if (depthmode == 2) /* GL_ALPHA */
- tgt[0].SrcReg[0].Swizzle = SWIZZLE_WWWW;
- tgt[0].SrcReg[1] = inst.SrcReg[0];
- tgt[0].SrcReg[1].Swizzle = SWIZZLE_ZZZZ;
+ tgt[1].SrcReg[2].Swizzle = SWIZZLE_WWWW;
/* Recall that SrcReg[0] is tex, SrcReg[2] is r and:
* r < tex <=> -tex+r < 0
* r >= tex <=> not (-tex+r < 0 */
if (comparefunc == GL_LESS || comparefunc == GL_GEQUAL)
- tgt[0].SrcReg[0].NegateBase = tgt[0].SrcReg[0].NegateBase ^ NEGATE_XYZW;
+ tgt[1].SrcReg[2].NegateBase = tgt[0].SrcReg[2].NegateBase ^ NEGATE_XYZW;
else
- tgt[0].SrcReg[1].NegateBase = tgt[0].SrcReg[1].NegateBase ^ NEGATE_XYZW;
+ tgt[1].SrcReg[0].NegateBase = tgt[0].SrcReg[0].NegateBase ^ NEGATE_XYZW;
- tgt[1].Opcode = OPCODE_CMP;
- tgt[1].DstReg = orig_inst->DstReg;
- tgt[1].SrcReg[0].File = PROGRAM_TEMPORARY;
- tgt[1].SrcReg[0].Index = tgt[0].DstReg.Index;
- tgt[1].SrcReg[1].File = PROGRAM_BUILTIN;
- tgt[1].SrcReg[2].File = PROGRAM_BUILTIN;
+ tgt[2].Opcode = OPCODE_CMP;
+ tgt[2].DstReg = orig_inst->DstReg;
+ tgt[2].SrcReg[0].File = PROGRAM_TEMPORARY;
+ tgt[2].SrcReg[0].Index = tgt[1].DstReg.Index;
+ tgt[2].SrcReg[1].File = PROGRAM_BUILTIN;
+ tgt[2].SrcReg[2].File = PROGRAM_BUILTIN;
if (comparefunc == GL_LESS || comparefunc == GL_GREATER) {
- tgt[1].SrcReg[1].Swizzle = SWIZZLE_1111;
- tgt[1].SrcReg[2].Swizzle = SWIZZLE_0000;
+ tgt[2].SrcReg[1].Swizzle = SWIZZLE_1111;
+ tgt[2].SrcReg[2].Swizzle = SWIZZLE_0000;
} else {
- tgt[1].SrcReg[1].Swizzle = SWIZZLE_0000;
- tgt[1].SrcReg[2].Swizzle = SWIZZLE_1111;
+ tgt[2].SrcReg[1].Swizzle = SWIZZLE_0000;
+ tgt[2].SrcReg[2].Swizzle = SWIZZLE_1111;
}
} else if (destredirect) {
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
+ tgt = radeonAppendInstructions(t->Program, 1);
tgt->Opcode = OPCODE_MOV;
tgt->DstReg = orig_inst->DstReg;
@@ -263,9 +247,10 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler)
struct prog_instruction *fpi;
GLuint window_index;
int i = 0;
- GLuint tempregi = radeonCompilerAllocateTemporary(&compiler->compiler);
+ GLuint tempregi = _mesa_find_free_register(compiler->program, PROGRAM_TEMPORARY);
- fpi = radeonClauseInsertInstructions(&compiler->compiler, &compiler->compiler.Clauses[0], 0, 3);
+ _mesa_insert_instructions(compiler->program, 0, 3);
+ fpi = compiler->program->Instructions;
/* perspective divide */
fpi[i].Opcode = OPCODE_RCP;
@@ -297,7 +282,7 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler)
i++;
/* viewport transformation */
- window_index = _mesa_add_state_reference(compiler->fp->mesa_program.Base.Parameters, tokens);
+ window_index = _mesa_add_state_reference(compiler->program->Parameters, tokens);
fpi[i].Opcode = OPCODE_MAD;
@@ -322,7 +307,7 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler)
MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_ZERO);
i++;
- for (; i < compiler->compiler.Clauses[0].NumInstructions; ++i) {
+ for (; i < compiler->program->NumInstructions; ++i) {
int reg;
for (reg = 0; reg < 3; reg++) {
if (fpi[i].SrcReg[reg].File == PROGRAM_INPUT &&
@@ -335,6 +320,13 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler)
}
+static void nqssadce_init(struct nqssadce_state* s)
+{
+ s->Outputs[FRAG_RESULT_COLR].Sourced = WRITEMASK_XYZW;
+ s->Outputs[FRAG_RESULT_DEPR].Sourced = WRITEMASK_W;
+}
+
+
static GLuint build_dtm(GLuint depthmode)
{
switch(depthmode) {
@@ -393,28 +385,52 @@ void r300TranslateFragmentShader(r300ContextPtr r300,
compiler.r300 = r300;
compiler.fp = fp;
compiler.code = &fp->code;
+ compiler.program = _mesa_clone_program(r300->radeon.glCtx, &fp->mesa_program.Base);
- radeonCompilerInit(&compiler.compiler, r300->radeon.glCtx, &fp->mesa_program.Base);
+ if (RADEON_DEBUG & DEBUG_PIXEL) {
+ _mesa_printf("Fragment Program: Initial program:\n");
+ _mesa_print_program(compiler.program);
+ }
insert_WPOS_trailer(&compiler);
struct radeon_program_transformation transformations[] = {
{ &transform_TEX, &compiler },
- { &radeonTransformALU, 0 }
+ { &radeonTransformALU, 0 },
+ { &radeonTransformTrigSimple, 0 }
};
- radeonClauseLocalTransform(&compiler.compiler,
- &compiler.compiler.Clauses[0],
- 2, transformations);
+ radeonLocalTransform(
+ r300->radeon.glCtx,
+ compiler.program,
+ 3, transformations);
if (RADEON_DEBUG & DEBUG_PIXEL) {
- _mesa_printf("Compiler state after transformations:\n");
- radeonCompilerDump(&compiler.compiler);
+ _mesa_printf("Fragment Program: After native rewrite:\n");
+ _mesa_print_program(compiler.program);
+ }
+
+ struct radeon_nqssadce_descr nqssadce = {
+ .Init = &nqssadce_init,
+ .IsNativeSwizzle = &r300FPIsNativeSwizzle,
+ .BuildSwizzle = &r300FPBuildSwizzle,
+ .RewriteDepthOut = GL_TRUE
+ };
+ radeonNqssaDce(r300->radeon.glCtx, compiler.program, &nqssadce);
+
+ if (RADEON_DEBUG & DEBUG_PIXEL) {
+ _mesa_printf("Compiler: after NqSSA-DCE:\n");
+ _mesa_print_program(compiler.program);
}
if (!r300FragmentProgramEmit(&compiler))
fp->error = GL_TRUE;
- radeonCompilerCleanup(&compiler.compiler);
+ /* Subtle: Rescue any parameters that have been added during transformations */
+ _mesa_free_parameter_list(fp->mesa_program.Base.Parameters);
+ fp->mesa_program.Base.Parameters = compiler.program->Parameters;
+ compiler.program->Parameters = 0;
+
+ _mesa_reference_program(r300->radeon.glCtx, &compiler.program, NULL);
if (!fp->error)
fp->translated = GL_TRUE;
@@ -436,22 +452,18 @@ void r300FragmentProgramDump(
fprintf(stderr, "pc=%d*************************************\n", pc++);
- fprintf(stderr, "Mesa program:\n");
- fprintf(stderr, "-------------\n");
- _mesa_print_program(&fp->mesa_program.Base);
- fflush(stdout);
-
fprintf(stderr, "Hardware program\n");
fprintf(stderr, "----------------\n");
for (n = 0; n < (code->cur_node + 1); n++) {
fprintf(stderr, "NODE %d: alu_offset: %d, tex_offset: %d, "
- "alu_end: %d, tex_end: %d\n", n,
+ "alu_end: %d, tex_end: %d, flags: %08x\n", n,
code->node[n].alu_offset,
code->node[n].tex_offset,
- code->node[n].alu_end, code->node[n].tex_end);
+ code->node[n].alu_end, code->node[n].tex_end,
+ code->node[n].flags);
- if (code->tex.length) {
+ if (n > 0 || code->first_node_has_tex) {
fprintf(stderr, " TEX:\n");
for (i = code->node[n].tex_offset;
i <= code->node[n].tex_offset + code->node[n].tex_end;
diff --git a/src/mesa/drivers/dri/r300/r300_fragprog.h b/src/mesa/drivers/dri/r300/r300_fragprog.h
index 7c1e210b044..b3a3cd2e04c 100644
--- a/src/mesa/drivers/dri/r300/r300_fragprog.h
+++ b/src/mesa/drivers/dri/r300/r300_fragprog.h
@@ -42,33 +42,6 @@
#include "r300_context.h"
#include "radeon_program.h"
-/* supported hw opcodes */
-#define PFS_OP_MAD 0
-#define PFS_OP_DP3 1
-#define PFS_OP_DP4 2
-#define PFS_OP_MIN 3
-#define PFS_OP_MAX 4
-#define PFS_OP_CMP 5
-#define PFS_OP_FRC 6
-#define PFS_OP_EX2 7
-#define PFS_OP_LG2 8
-#define PFS_OP_RCP 9
-#define PFS_OP_RSQ 10
-#define PFS_OP_REPL_ALPHA 11
-#define PFS_OP_CMPH 12
-#define MAX_PFS_OP 12
-
-#define PFS_FLAG_SAT (1 << 0)
-#define PFS_FLAG_ABS (1 << 1)
-
-#define ARG_NEG (1 << 5)
-#define ARG_ABS (1 << 6)
-#define ARG_MASK (127 << 0)
-#define ARG_STRIDE 7
-#define SRC_CONST (1 << 5)
-#define SRC_MASK (63 << 0)
-#define SRC_STRIDE 6
-
#define DRI_CONF_FP_OPTIMIZATION_SPEED 0
#define DRI_CONF_FP_OPTIMIZATION_QUALITY 1
@@ -146,10 +119,9 @@ struct r300_fragment_program_compiler {
r300ContextPtr r300;
struct r300_fragment_program *fp;
struct r300_fragment_program_code *code;
- struct radeon_compiler compiler;
+ struct gl_program *program;
};
-extern void r300FPTransformTextures(struct r300_fragment_program_compiler *compiler);
extern GLboolean r300FragmentProgramEmit(struct r300_fragment_program_compiler *compiler);
diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_emit.c b/src/mesa/drivers/dri/r300/r300_fragprog_emit.c
index d72b92832c9..9f0b7e35349 100644
--- a/src/mesa/drivers/dri/r300/r300_fragprog_emit.c
+++ b/src/mesa/drivers/dri/r300/r300_fragprog_emit.c
@@ -36,2022 +36,308 @@
* \author Jerome Glisse <j.glisse@gmail.com>
*
* \todo FogOption
- *
- * \todo Verify results of opcodes for accuracy, I've only checked them in
- * specific cases.
*/
-#include "glheader.h"
-#include "macros.h"
-#include "enums.h"
-#include "shader/prog_instruction.h"
-#include "shader/prog_parameter.h"
-#include "shader/prog_print.h"
-
-#include "r300_context.h"
#include "r300_fragprog.h"
-#include "r300_reg.h"
-#include "r300_state.h"
-
-/* Mapping Mesa registers to R300 temporaries */
-struct reg_acc {
- int reg; /* Assigned hw temp */
- unsigned int refcount; /* Number of uses by mesa program */
-};
-
-/**
- * Describe the current lifetime information for an R300 temporary
- */
-struct reg_lifetime {
- /* Index of the first slot where this register is free in the sense
- that it can be used as a new destination register.
- This is -1 if the register has been assigned to a Mesa register
- and the last access to the register has not yet been emitted */
- int free;
-
- /* Index of the first slot where this register is currently reserved.
- This is used to stop e.g. a scalar operation from being moved
- before the allocation time of a register that was first allocated
- for a vector operation. */
- int reserved;
-
- /* Index of the first slot in which the register can be used as a
- source without losing the value that is written by the last
- emitted instruction that writes to the register */
- int vector_valid;
- int scalar_valid;
-
- /* Index to the slot where the register was last read.
- This is also the first slot in which the register may be written again */
- int vector_lastread;
- int scalar_lastread;
-};
-
-/**
- * Store usage information about an ALU instruction slot during the
- * compilation of a fragment program.
- */
-#define SLOT_SRC_VECTOR (1<<0)
-#define SLOT_SRC_SCALAR (1<<3)
-#define SLOT_SRC_BOTH (SLOT_SRC_VECTOR | SLOT_SRC_SCALAR)
-#define SLOT_OP_VECTOR (1<<16)
-#define SLOT_OP_SCALAR (1<<17)
-#define SLOT_OP_BOTH (SLOT_OP_VECTOR | SLOT_OP_SCALAR)
-
-struct r300_pfs_compile_slot {
- /* Bitmask indicating which parts of the slot are used, using SLOT_ constants
- defined above */
- unsigned int used;
-
- /* Selected sources */
- int vsrc[3];
- int ssrc[3];
-};
-
-/**
- * Store information during compilation of fragment programs.
- */
-struct r300_pfs_compile_state {
- struct r300_fragment_program_compiler *compiler;
-
- int nrslots; /* number of ALU slots used so far */
-
- /* Track which (parts of) slots are already filled with instructions */
- struct r300_pfs_compile_slot slot[PFS_MAX_ALU_INST];
-
- /* Track the validity of R300 temporaries */
- struct reg_lifetime hwtemps[PFS_NUM_TEMP_REGS];
- /* Used to map Mesa's inputs/temps onto hardware temps */
- int temp_in_use;
- struct reg_acc temps[PFS_NUM_TEMP_REGS];
- struct reg_acc inputs[32]; /* don't actually need 32... */
+#include "radeon_program_pair.h"
+#include "r300_fragprog_swizzle.h"
+#include "r300_reg.h"
- /* Track usage of hardware temps, for register allocation,
- * indirection detection, etc. */
- GLuint used_in_node;
- GLuint dest_in_node;
-};
+#define PROG_CODE \
+ struct r300_fragment_program_compiler *c = (struct r300_fragment_program_compiler*)data; \
+ struct r300_fragment_program_code *code = c->code
-/*
- * Usefull macros and values
- */
-#define ERROR(fmt, args...) do { \
+#define error(fmt, args...) do { \
fprintf(stderr, "%s::%s(): " fmt "\n", \
__FILE__, __FUNCTION__, ##args); \
- fp->error = GL_TRUE; \
} while(0)
-#define PFS_INVAL 0xFFFFFFFF
-#define COMPILE_STATE \
- struct r300_fragment_program *fp = cs->compiler->fp; \
- struct r300_fragment_program_code *code = cs->compiler->code; \
- (void)code; (void)fp
-
-#define SWIZZLE_XYZ 0
-#define SWIZZLE_XXX 1
-#define SWIZZLE_YYY 2
-#define SWIZZLE_ZZZ 3
-#define SWIZZLE_WWW 4
-#define SWIZZLE_YZX 5
-#define SWIZZLE_ZXY 6
-#define SWIZZLE_WZY 7
-#define SWIZZLE_111 8
-#define SWIZZLE_000 9
-#define SWIZZLE_HHH 10
-
-#define swizzle(r, x, y, z, w) do_swizzle(cs, r, \
- ((SWIZZLE_##x<<0)| \
- (SWIZZLE_##y<<3)| \
- (SWIZZLE_##z<<6)| \
- (SWIZZLE_##w<<9)), \
- 0)
-
-#define REG_TYPE_INPUT 0
-#define REG_TYPE_OUTPUT 1
-#define REG_TYPE_TEMP 2
-#define REG_TYPE_CONST 3
-
-#define REG_TYPE_SHIFT 0
-#define REG_INDEX_SHIFT 2
-#define REG_VSWZ_SHIFT 8
-#define REG_SSWZ_SHIFT 13
-#define REG_NEGV_SHIFT 18
-#define REG_NEGS_SHIFT 19
-#define REG_ABS_SHIFT 20
-#define REG_NO_USE_SHIFT 21 // Hack for refcounting
-#define REG_VALID_SHIFT 22 // Does the register contain a defined value?
-#define REG_BUILTIN_SHIFT 23 // Is it a builtin (like all zero/all one)?
-
-#define REG_TYPE_MASK (0x03 << REG_TYPE_SHIFT)
-#define REG_INDEX_MASK (0x3F << REG_INDEX_SHIFT)
-#define REG_VSWZ_MASK (0x1F << REG_VSWZ_SHIFT)
-#define REG_SSWZ_MASK (0x1F << REG_SSWZ_SHIFT)
-#define REG_NEGV_MASK (0x01 << REG_NEGV_SHIFT)
-#define REG_NEGS_MASK (0x01 << REG_NEGS_SHIFT)
-#define REG_ABS_MASK (0x01 << REG_ABS_SHIFT)
-#define REG_NO_USE_MASK (0x01 << REG_NO_USE_SHIFT)
-#define REG_VALID_MASK (0x01 << REG_VALID_SHIFT)
-#define REG_BUILTIN_MASK (0x01 << REG_BUILTIN_SHIFT)
-
-#define REG(type, index, vswz, sswz, nouse, valid, builtin) \
- (((type << REG_TYPE_SHIFT) & REG_TYPE_MASK) | \
- ((index << REG_INDEX_SHIFT) & REG_INDEX_MASK) | \
- ((nouse << REG_NO_USE_SHIFT) & REG_NO_USE_MASK) | \
- ((valid << REG_VALID_SHIFT) & REG_VALID_MASK) | \
- ((builtin << REG_BUILTIN_SHIFT) & REG_BUILTIN_MASK) | \
- ((vswz << REG_VSWZ_SHIFT) & REG_VSWZ_MASK) | \
- ((sswz << REG_SSWZ_SHIFT) & REG_SSWZ_MASK))
-#define REG_GET_TYPE(reg) \
- ((reg & REG_TYPE_MASK) >> REG_TYPE_SHIFT)
-#define REG_GET_INDEX(reg) \
- ((reg & REG_INDEX_MASK) >> REG_INDEX_SHIFT)
-#define REG_GET_VSWZ(reg) \
- ((reg & REG_VSWZ_MASK) >> REG_VSWZ_SHIFT)
-#define REG_GET_SSWZ(reg) \
- ((reg & REG_SSWZ_MASK) >> REG_SSWZ_SHIFT)
-#define REG_GET_NO_USE(reg) \
- ((reg & REG_NO_USE_MASK) >> REG_NO_USE_SHIFT)
-#define REG_GET_VALID(reg) \
- ((reg & REG_VALID_MASK) >> REG_VALID_SHIFT)
-#define REG_GET_BUILTIN(reg) \
- ((reg & REG_BUILTIN_MASK) >> REG_BUILTIN_SHIFT)
-#define REG_SET_TYPE(reg, type) \
- reg = ((reg & ~REG_TYPE_MASK) | \
- ((type << REG_TYPE_SHIFT) & REG_TYPE_MASK))
-#define REG_SET_INDEX(reg, index) \
- reg = ((reg & ~REG_INDEX_MASK) | \
- ((index << REG_INDEX_SHIFT) & REG_INDEX_MASK))
-#define REG_SET_VSWZ(reg, vswz) \
- reg = ((reg & ~REG_VSWZ_MASK) | \
- ((vswz << REG_VSWZ_SHIFT) & REG_VSWZ_MASK))
-#define REG_SET_SSWZ(reg, sswz) \
- reg = ((reg & ~REG_SSWZ_MASK) | \
- ((sswz << REG_SSWZ_SHIFT) & REG_SSWZ_MASK))
-#define REG_SET_NO_USE(reg, nouse) \
- reg = ((reg & ~REG_NO_USE_MASK) | \
- ((nouse << REG_NO_USE_SHIFT) & REG_NO_USE_MASK))
-#define REG_SET_VALID(reg, valid) \
- reg = ((reg & ~REG_VALID_MASK) | \
- ((valid << REG_VALID_SHIFT) & REG_VALID_MASK))
-#define REG_SET_BUILTIN(reg, builtin) \
- reg = ((reg & ~REG_BUILTIN_MASK) | \
- ((builtin << REG_BUILTIN_SHIFT) & REG_BUILTIN_MASK))
-#define REG_ABS(reg) \
- reg = (reg | REG_ABS_MASK)
-#define REG_NEGV(reg) \
- reg = (reg | REG_NEGV_MASK)
-#define REG_NEGS(reg) \
- reg = (reg | REG_NEGS_MASK)
-
-#define NOP_INST0 ( \
- (R300_ALU_OUTC_MAD) | \
- (R300_ALU_ARGC_ZERO << R300_ALU_ARG0C_SHIFT) | \
- (R300_ALU_ARGC_ZERO << R300_ALU_ARG1C_SHIFT) | \
- (R300_ALU_ARGC_ZERO << R300_ALU_ARG2C_SHIFT))
-#define NOP_INST1 ( \
- ((0 | SRC_CONST) << R300_ALU_SRC0C_SHIFT) | \
- ((0 | SRC_CONST) << R300_ALU_SRC1C_SHIFT) | \
- ((0 | SRC_CONST) << R300_ALU_SRC2C_SHIFT))
-#define NOP_INST2 ( \
- (R300_ALU_OUTA_MAD) | \
- (R300_ALU_ARGA_ZERO << R300_ALU_ARG0A_SHIFT) | \
- (R300_ALU_ARGA_ZERO << R300_ALU_ARG1A_SHIFT) | \
- (R300_ALU_ARGA_ZERO << R300_ALU_ARG2A_SHIFT))
-#define NOP_INST3 ( \
- ((0 | SRC_CONST) << R300_ALU_SRC0A_SHIFT) | \
- ((0 | SRC_CONST) << R300_ALU_SRC1A_SHIFT) | \
- ((0 | SRC_CONST) << R300_ALU_SRC2A_SHIFT))
-
-
-/*
- * Datas structures for fragment program generation
- */
-
-/* description of r300 native hw instructions */
-static const struct {
- const char *name;
- int argc;
- int v_op;
- int s_op;
-} r300_fpop[] = {
- /* *INDENT-OFF* */
- {"MAD", 3, R300_ALU_OUTC_MAD, R300_ALU_OUTA_MAD},
- {"DP3", 2, R300_ALU_OUTC_DP3, R300_ALU_OUTA_DP4},
- {"DP4", 2, R300_ALU_OUTC_DP4, R300_ALU_OUTA_DP4},
- {"MIN", 2, R300_ALU_OUTC_MIN, R300_ALU_OUTA_MIN},
- {"MAX", 2, R300_ALU_OUTC_MAX, R300_ALU_OUTA_MAX},
- {"CMP", 3, R300_ALU_OUTC_CMP, R300_ALU_OUTA_CMP},
- {"FRC", 1, R300_ALU_OUTC_FRC, R300_ALU_OUTA_FRC},
- {"EX2", 1, R300_ALU_OUTC_REPL_ALPHA, R300_ALU_OUTA_EX2},
- {"LG2", 1, R300_ALU_OUTC_REPL_ALPHA, R300_ALU_OUTA_LG2},
- {"RCP", 1, R300_ALU_OUTC_REPL_ALPHA, R300_ALU_OUTA_RCP},
- {"RSQ", 1, R300_ALU_OUTC_REPL_ALPHA, R300_ALU_OUTA_RSQ},
- {"REPL_ALPHA", 1, R300_ALU_OUTC_REPL_ALPHA, PFS_INVAL},
- {"CMPH", 3, R300_ALU_OUTC_CMPH, PFS_INVAL},
- /* *INDENT-ON* */
-};
-
-/* vector swizzles r300 can support natively, with a couple of
- * cases we handle specially
- *
- * REG_VSWZ/REG_SSWZ is an index into this table
- */
-
-/* mapping from SWIZZLE_* to r300 native values for scalar insns */
-#define SWIZZLE_HALF 6
-
-#define MAKE_SWZ3(x, y, z) (MAKE_SWIZZLE4(SWIZZLE_##x, \
- SWIZZLE_##y, \
- SWIZZLE_##z, \
- SWIZZLE_ZERO))
-/* native swizzles */
-static const struct r300_pfs_swizzle {
- GLuint hash; /* swizzle value this matches */
- GLuint base; /* base value for hw swizzle */
- GLuint stride; /* difference in base between arg0/1/2 */
- GLuint flags;
-} v_swiz[] = {
- /* *INDENT-OFF* */
- {MAKE_SWZ3(X, Y, Z), R300_ALU_ARGC_SRC0C_XYZ, 4, SLOT_SRC_VECTOR},
- {MAKE_SWZ3(X, X, X), R300_ALU_ARGC_SRC0C_XXX, 4, SLOT_SRC_VECTOR},
- {MAKE_SWZ3(Y, Y, Y), R300_ALU_ARGC_SRC0C_YYY, 4, SLOT_SRC_VECTOR},
- {MAKE_SWZ3(Z, Z, Z), R300_ALU_ARGC_SRC0C_ZZZ, 4, SLOT_SRC_VECTOR},
- {MAKE_SWZ3(W, W, W), R300_ALU_ARGC_SRC0A, 1, SLOT_SRC_SCALAR},
- {MAKE_SWZ3(Y, Z, X), R300_ALU_ARGC_SRC0C_YZX, 1, SLOT_SRC_VECTOR},
- {MAKE_SWZ3(Z, X, Y), R300_ALU_ARGC_SRC0C_ZXY, 1, SLOT_SRC_VECTOR},
- {MAKE_SWZ3(W, Z, Y), R300_ALU_ARGC_SRC0CA_WZY, 1, SLOT_SRC_BOTH},
- {MAKE_SWZ3(ONE, ONE, ONE), R300_ALU_ARGC_ONE, 0, 0},
- {MAKE_SWZ3(ZERO, ZERO, ZERO), R300_ALU_ARGC_ZERO, 0, 0},
- {MAKE_SWZ3(HALF, HALF, HALF), R300_ALU_ARGC_HALF, 0, 0},
- {PFS_INVAL, 0, 0, 0},
- /* *INDENT-ON* */
-};
-
-/* used during matching of non-native swizzles */
-#define SWZ_X_MASK (7 << 0)
-#define SWZ_Y_MASK (7 << 3)
-#define SWZ_Z_MASK (7 << 6)
-#define SWZ_W_MASK (7 << 9)
-static const struct {
- GLuint hash; /* used to mask matching swizzle components */
- int mask; /* actual outmask */
- int count; /* count of components matched */
-} s_mask[] = {
- /* *INDENT-OFF* */
- {SWZ_X_MASK | SWZ_Y_MASK | SWZ_Z_MASK, 1 | 2 | 4, 3},
- {SWZ_X_MASK | SWZ_Y_MASK, 1 | 2, 2},
- {SWZ_X_MASK | SWZ_Z_MASK, 1 | 4, 2},
- {SWZ_Y_MASK | SWZ_Z_MASK, 2 | 4, 2},
- {SWZ_X_MASK, 1, 1},
- {SWZ_Y_MASK, 2, 1},
- {SWZ_Z_MASK, 4, 1},
- {PFS_INVAL, PFS_INVAL, PFS_INVAL}
- /* *INDENT-ON* */
-};
-
-static const struct {
- int base; /* hw value of swizzle */
- int stride; /* difference between SRC0/1/2 */
- GLuint flags;
-} s_swiz[] = {
- /* *INDENT-OFF* */
- {R300_ALU_ARGA_SRC0C_X, 3, SLOT_SRC_VECTOR},
- {R300_ALU_ARGA_SRC0C_Y, 3, SLOT_SRC_VECTOR},
- {R300_ALU_ARGA_SRC0C_Z, 3, SLOT_SRC_VECTOR},
- {R300_ALU_ARGA_SRC0A, 1, SLOT_SRC_SCALAR},
- {R300_ALU_ARGA_ZERO, 0, 0},
- {R300_ALU_ARGA_ONE, 0, 0},
- {R300_ALU_ARGA_HALF, 0, 0}
- /* *INDENT-ON* */
-};
-
-/* boiler-plate reg, for convenience */
-static const GLuint undef = REG(REG_TYPE_TEMP,
- 0,
- SWIZZLE_XYZ,
- SWIZZLE_W,
- GL_FALSE,
- GL_FALSE,
- GL_FALSE);
-
-/* constant one source */
-static const GLuint pfs_one = REG(REG_TYPE_CONST,
- 0,
- SWIZZLE_111,
- SWIZZLE_ONE,
- GL_FALSE,
- GL_TRUE,
- GL_TRUE);
-
-/* constant half source */
-static const GLuint pfs_half = REG(REG_TYPE_CONST,
- 0,
- SWIZZLE_HHH,
- SWIZZLE_HALF,
- GL_FALSE,
- GL_TRUE,
- GL_TRUE);
-
-/* constant zero source */
-static const GLuint pfs_zero = REG(REG_TYPE_CONST,
- 0,
- SWIZZLE_000,
- SWIZZLE_ZERO,
- GL_FALSE,
- GL_TRUE,
- GL_TRUE);
-
-/*
- * Common functions prototypes
- */
-static void emit_arith(struct r300_pfs_compile_state *cs, int op,
- GLuint dest, int mask,
- GLuint src0, GLuint src1, GLuint src2, int flags);
-
-/**
- * Get an R300 temporary that can be written to in the given slot.
- */
-static int get_hw_temp(struct r300_pfs_compile_state *cs, int slot)
-{
- COMPILE_STATE;
- int r;
-
- for (r = 0; r < PFS_NUM_TEMP_REGS; ++r) {
- if (cs->hwtemps[r].free >= 0 && cs->hwtemps[r].free <= slot)
- break;
- }
-
- if (r >= PFS_NUM_TEMP_REGS) {
- ERROR("Out of hardware temps\n");
- return 0;
- }
- // Reserved is used to avoid the following scenario:
- // R300 temporary X is first assigned to Mesa temporary Y during vector ops
- // R300 temporary X is then assigned to Mesa temporary Z for further vector ops
- // Then scalar ops on Mesa temporary Z are emitted and move back in time
- // to overwrite the value of temporary Y.
- // End scenario.
- cs->hwtemps[r].reserved = cs->hwtemps[r].free;
- cs->hwtemps[r].free = -1;
-
- // Reset to some value that won't mess things up when the user
- // tries to read from a temporary that hasn't been assigned a value yet.
- // In the normal case, vector_valid and scalar_valid should be set to
- // a sane value by the first emit that writes to this temporary.
- cs->hwtemps[r].vector_valid = 0;
- cs->hwtemps[r].scalar_valid = 0;
-
- if (r > code->max_temp_idx)
- code->max_temp_idx = r;
-
- return r;
-}
-
-/**
- * Get an R300 temporary that will act as a TEX destination register.
- */
-static int get_hw_temp_tex(struct r300_pfs_compile_state *cs)
-{
- COMPILE_STATE;
- int r;
-
- for (r = 0; r < PFS_NUM_TEMP_REGS; ++r) {
- if (cs->used_in_node & (1 << r))
- continue;
-
- // Note: Be very careful here
- if (cs->hwtemps[r].free >= 0 && cs->hwtemps[r].free <= 0)
- break;
- }
-
- if (r >= PFS_NUM_TEMP_REGS)
- return get_hw_temp(cs, 0); /* Will cause an indirection */
-
- cs->hwtemps[r].reserved = cs->hwtemps[r].free;
- cs->hwtemps[r].free = -1;
-
- // Reset to some value that won't mess things up when the user
- // tries to read from a temporary that hasn't been assigned a value yet.
- // In the normal case, vector_valid and scalar_valid should be set to
- // a sane value by the first emit that writes to this temporary.
- cs->hwtemps[r].vector_valid = cs->nrslots;
- cs->hwtemps[r].scalar_valid = cs->nrslots;
-
- if (r > code->max_temp_idx)
- code->max_temp_idx = r;
-
- return r;
-}
-
-/**
- * Mark the given hardware register as free.
- */
-static void free_hw_temp(struct r300_pfs_compile_state *cs, int idx)
-{
- // Be very careful here. Consider sequences like
- // MAD r0, r1,r2,r3
- // TEX r4, ...
- // The TEX instruction may be moved in front of the MAD instruction
- // due to the way nodes work. We don't want to alias r1 and r4 in
- // this case.
- // I'm certain the register allocation could be further sanitized,
- // but it's tricky because of stuff that can happen inside emit_tex
- // and emit_arith.
- cs->hwtemps[idx].free = cs->nrslots + 1;
-}
-
-/**
- * Create a new Mesa temporary register.
- */
-static GLuint get_temp_reg(struct r300_pfs_compile_state *cs)
-{
- COMPILE_STATE;
- GLuint r = undef;
- GLuint index;
-
- index = ffs(~cs->temp_in_use);
- if (!index) {
- ERROR("Out of program temps\n");
- return r;
- }
-
- cs->temp_in_use |= (1 << --index);
- cs->temps[index].refcount = 0xFFFFFFFF;
- cs->temps[index].reg = -1;
-
- REG_SET_TYPE(r, REG_TYPE_TEMP);
- REG_SET_INDEX(r, index);
- REG_SET_VALID(r, GL_TRUE);
- return r;
-}
-
-/**
- * Free a Mesa temporary and the associated R300 temporary.
- */
-static void free_temp(struct r300_pfs_compile_state *cs, GLuint r)
-{
- GLuint index = REG_GET_INDEX(r);
-
- if (!(cs->temp_in_use & (1 << index)))
- return;
-
- if (REG_GET_TYPE(r) == REG_TYPE_TEMP) {
- free_hw_temp(cs, cs->temps[index].reg);
- cs->temps[index].reg = -1;
- cs->temp_in_use &= ~(1 << index);
- } else if (REG_GET_TYPE(r) == REG_TYPE_INPUT) {
- free_hw_temp(cs, cs->inputs[index].reg);
- cs->inputs[index].reg = -1;
- }
-}
-/**
- * Emit a hardware constant/parameter.
- *
- * \p cp Stable pointer to an array of 4 floats.
- * The pointer must be stable in the sense that it remains to be valid
- * and hold the contents of the constant/parameter throughout the lifetime
- * of the fragment program (actually, up until the next time the fragment
- * program is translated).
- */
-static GLuint emit_const4fv(struct r300_pfs_compile_state *cs,
- const GLfloat * cp)
+static GLboolean emit_const(void* data, GLuint file, GLuint index, GLuint *hwindex)
{
- COMPILE_STATE;
- GLuint reg = undef;
- int index;
+ PROG_CODE;
- for (index = 0; index < code->const_nr; ++index) {
- if (code->constant[index] == cp)
+ for (*hwindex = 0; *hwindex < code->const_nr; ++*hwindex) {
+ if (code->constant[*hwindex].File == file &&
+ code->constant[*hwindex].Index == index)
break;
}
- if (index >= code->const_nr) {
- if (index >= PFS_NUM_CONST_REGS) {
- ERROR("Out of hw constants!\n");
- return reg;
+ if (*hwindex >= code->const_nr) {
+ if (*hwindex >= PFS_NUM_CONST_REGS) {
+ error("Out of hw constants!\n");
+ return GL_FALSE;
}
code->const_nr++;
- code->constant[index] = cp;
+ code->constant[*hwindex].File = file;
+ code->constant[*hwindex].Index = index;
}
- REG_SET_TYPE(reg, REG_TYPE_CONST);
- REG_SET_INDEX(reg, index);
- REG_SET_VALID(reg, GL_TRUE);
- return reg;
+ return GL_TRUE;
}
-static INLINE GLuint negate(GLuint r)
-{
- REG_NEGS(r);
- REG_NEGV(r);
- return r;
-}
-/* Hack, to prevent clobbering sources used multiple times when
- * emulating non-native instructions
+/**
+ * Mark a temporary register as used.
*/
-static INLINE GLuint keep(GLuint r)
-{
- REG_SET_NO_USE(r, GL_TRUE);
- return r;
-}
-
-static INLINE GLuint absolute(GLuint r)
-{
- REG_ABS(r);
- return r;
-}
-
-static int swz_native(struct r300_pfs_compile_state *cs,
- GLuint src, GLuint * r, GLuint arbneg)
-{
- COMPILE_STATE;
-
- /* Native swizzle, handle negation */
- src = (src & ~REG_NEGS_MASK) | (((arbneg >> 3) & 1) << REG_NEGS_SHIFT);
-
- if ((arbneg & 0x7) == 0x0) {
- src = src & ~REG_NEGV_MASK;
- *r = src;
- } else if ((arbneg & 0x7) == 0x7) {
- src |= REG_NEGV_MASK;
- *r = src;
- } else {
- if (!REG_GET_VALID(*r))
- *r = get_temp_reg(cs);
- src |= REG_NEGV_MASK;
- emit_arith(cs,
- PFS_OP_MAD,
- *r, arbneg & 0x7, keep(src), pfs_one, pfs_zero, 0);
- src = src & ~REG_NEGV_MASK;
- emit_arith(cs,
- PFS_OP_MAD,
- *r,
- (arbneg ^ 0x7) | WRITEMASK_W,
- src, pfs_one, pfs_zero, 0);
- }
-
- return 3;
-}
-
-static int swz_emit_partial(struct r300_pfs_compile_state *cs,
- GLuint src,
- GLuint * r, int mask, int mc, GLuint arbneg)
-{
- COMPILE_STATE;
- GLuint tmp;
- GLuint wmask = 0;
-
- if (!REG_GET_VALID(*r))
- *r = get_temp_reg(cs);
-
- /* A partial match, VSWZ/mask define what parts of the
- * desired swizzle we match
- */
- if (mc + s_mask[mask].count == 3) {
- wmask = WRITEMASK_W;
- src |= ((arbneg >> 3) & 1) << REG_NEGS_SHIFT;
- }
-
- tmp = arbneg & s_mask[mask].mask;
- if (tmp) {
- tmp = tmp ^ s_mask[mask].mask;
- if (tmp) {
- emit_arith(cs,
- PFS_OP_MAD,
- *r,
- arbneg & s_mask[mask].mask,
- keep(src) | REG_NEGV_MASK,
- pfs_one, pfs_zero, 0);
- if (!wmask) {
- REG_SET_NO_USE(src, GL_TRUE);
- } else {
- REG_SET_NO_USE(src, GL_FALSE);
- }
- emit_arith(cs,
- PFS_OP_MAD,
- *r, tmp | wmask, src, pfs_one, pfs_zero, 0);
- } else {
- if (!wmask) {
- REG_SET_NO_USE(src, GL_TRUE);
- } else {
- REG_SET_NO_USE(src, GL_FALSE);
- }
- emit_arith(cs,
- PFS_OP_MAD,
- *r,
- (arbneg & s_mask[mask].mask) | wmask,
- src | REG_NEGV_MASK, pfs_one, pfs_zero, 0);
- }
- } else {
- if (!wmask) {
- REG_SET_NO_USE(src, GL_TRUE);
- } else {
- REG_SET_NO_USE(src, GL_FALSE);
- }
- emit_arith(cs, PFS_OP_MAD,
- *r,
- s_mask[mask].mask | wmask,
- src, pfs_one, pfs_zero, 0);
- }
-
- return s_mask[mask].count;
-}
-
-static GLuint do_swizzle(struct r300_pfs_compile_state *cs,
- GLuint src, GLuint arbswz, GLuint arbneg)
+static void use_temporary(struct r300_fragment_program_code *code, GLuint index)
{
- COMPILE_STATE;
- GLuint r = undef;
- GLuint vswz;
- int c_mask = 0;
- int v_match = 0;
-
- /* If swizzling from something without an XYZW native swizzle,
- * emit result to a temp, and do new swizzle from the temp.
- */
-#if 0
- if (REG_GET_VSWZ(src) != SWIZZLE_XYZ || REG_GET_SSWZ(src) != SWIZZLE_W) {
- GLuint temp = get_temp_reg(fp);
- emit_arith(fp,
- PFS_OP_MAD,
- temp, WRITEMASK_XYZW, src, pfs_one, pfs_zero, 0);
- src = temp;
- }
-#endif
-
- if (REG_GET_VSWZ(src) != SWIZZLE_XYZ || REG_GET_SSWZ(src) != SWIZZLE_W) {
- GLuint vsrcswz =
- (v_swiz[REG_GET_VSWZ(src)].
- hash & (SWZ_X_MASK | SWZ_Y_MASK | SWZ_Z_MASK)) |
- REG_GET_SSWZ(src) << 9;
- GLint i;
-
- GLuint newswz = 0;
- GLuint offset;
- for (i = 0; i < 4; ++i) {
- offset = GET_SWZ(arbswz, i);
-
- newswz |=
- (offset <= 3) ? GET_SWZ(vsrcswz,
- offset) << i *
- 3 : offset << i * 3;
- }
-
- arbswz = newswz & (SWZ_X_MASK | SWZ_Y_MASK | SWZ_Z_MASK);
- REG_SET_SSWZ(src, GET_SWZ(newswz, 3));
- } else {
- /* set scalar swizzling */
- REG_SET_SSWZ(src, GET_SWZ(arbswz, 3));
-
- }
- do {
- vswz = REG_GET_VSWZ(src);
- do {
- int chash;
-
- REG_SET_VSWZ(src, vswz);
- chash = v_swiz[REG_GET_VSWZ(src)].hash &
- s_mask[c_mask].hash;
-
- if (chash == (arbswz & s_mask[c_mask].hash)) {
- if (s_mask[c_mask].count == 3) {
- v_match += swz_native(cs,
- src, &r, arbneg);
- } else {
- v_match += swz_emit_partial(cs,
- src,
- &r,
- c_mask,
- v_match,
- arbneg);
- }
-
- if (v_match == 3)
- return r;
-
- /* Fill with something invalid.. all 0's was
- * wrong before, matched SWIZZLE_X. So all
- * 1's will be okay for now
- */
- arbswz |= (PFS_INVAL & s_mask[c_mask].hash);
- }
- } while (v_swiz[++vswz].hash != PFS_INVAL);
- REG_SET_VSWZ(src, SWIZZLE_XYZ);
- } while (s_mask[++c_mask].hash != PFS_INVAL);
-
- ERROR("should NEVER get here\n");
- return r;
+ if (index > code->max_temp_idx)
+ code->max_temp_idx = index;
}
-static GLuint t_src(struct r300_pfs_compile_state *cs,
- struct prog_src_register fpsrc)
-{
- COMPILE_STATE;
- GLuint r = undef;
-
- switch (fpsrc.File) {
- case PROGRAM_TEMPORARY:
- REG_SET_INDEX(r, fpsrc.Index);
- REG_SET_VALID(r, GL_TRUE);
- REG_SET_TYPE(r, REG_TYPE_TEMP);
- break;
- case PROGRAM_INPUT:
- REG_SET_INDEX(r, fpsrc.Index);
- REG_SET_VALID(r, GL_TRUE);
- REG_SET_TYPE(r, REG_TYPE_INPUT);
- break;
- case PROGRAM_LOCAL_PARAM:
- r = emit_const4fv(cs,
- fp->mesa_program.Base.LocalParams[fpsrc.
- Index]);
- break;
- case PROGRAM_ENV_PARAM:
- r = emit_const4fv(cs,
- cs->compiler->r300->radeon.glCtx->FragmentProgram.Parameters[fpsrc.Index]);
- break;
- case PROGRAM_STATE_VAR:
- case PROGRAM_NAMED_PARAM:
- case PROGRAM_CONSTANT:
- r = emit_const4fv(cs,
- fp->mesa_program.Base.Parameters->
- ParameterValues[fpsrc.Index]);
- break;
- case PROGRAM_BUILTIN:
- switch(fpsrc.Swizzle) {
- case SWIZZLE_1111: r = pfs_one; break;
- case SWIZZLE_0000: r = pfs_zero; break;
- default:
- ERROR("bad PROGRAM_BUILTIN swizzle %u\n", fpsrc.Swizzle);
- break;
- }
- break;
- default:
- ERROR("unknown SrcReg->File %x\n", fpsrc.File);
- return r;
- }
-
- /* no point swizzling ONE/ZERO/HALF constants... */
- if (REG_GET_VSWZ(r) < SWIZZLE_111 || REG_GET_SSWZ(r) < SWIZZLE_ZERO)
- r = do_swizzle(cs, r, fpsrc.Swizzle, fpsrc.NegateBase);
- if (fpsrc.Abs)
- r = absolute(r);
- if (fpsrc.NegateAbs)
- r = negate(r);
- return r;
-}
-static GLuint t_scalar_src(struct r300_pfs_compile_state *cs,
- struct prog_src_register fpsrc)
+static GLuint translate_rgb_opcode(GLuint opcode)
{
- struct prog_src_register src = fpsrc;
- int sc = GET_SWZ(fpsrc.Swizzle, 0); /* X */
-
- src.Swizzle = ((sc << 0) | (sc << 3) | (sc << 6) | (sc << 9));
-
- return t_src(cs, src);
-}
-
-static GLuint t_dst(struct r300_pfs_compile_state *cs,
- struct prog_dst_register dest)
-{
- COMPILE_STATE;
- GLuint r = undef;
-
- switch (dest.File) {
- case PROGRAM_TEMPORARY:
- REG_SET_INDEX(r, dest.Index);
- REG_SET_VALID(r, GL_TRUE);
- REG_SET_TYPE(r, REG_TYPE_TEMP);
- return r;
- case PROGRAM_OUTPUT:
- REG_SET_TYPE(r, REG_TYPE_OUTPUT);
- switch (dest.Index) {
- case FRAG_RESULT_COLR:
- case FRAG_RESULT_DEPR:
- REG_SET_INDEX(r, dest.Index);
- REG_SET_VALID(r, GL_TRUE);
- return r;
- default:
- ERROR("Bad DstReg->Index 0x%x\n", dest.Index);
- return r;
- }
+ switch(opcode) {
+ case OPCODE_CMP: return R300_ALU_OUTC_CMP;
+ case OPCODE_DP3: return R300_ALU_OUTC_DP3;
+ case OPCODE_DP4: return R300_ALU_OUTC_DP4;
+ case OPCODE_FRC: return R300_ALU_OUTC_FRC;
default:
- ERROR("Bad DstReg->File 0x%x\n", dest.File);
- return r;
+ error("translate_rgb_opcode(%i): Unknown opcode", opcode);
+ /* fall through */
+ case OPCODE_NOP:
+ /* fall through */
+ case OPCODE_MAD: return R300_ALU_OUTC_MAD;
+ case OPCODE_MAX: return R300_ALU_OUTC_MAX;
+ case OPCODE_MIN: return R300_ALU_OUTC_MIN;
+ case OPCODE_REPL_ALPHA: return R300_ALU_OUTC_REPL_ALPHA;
}
}
-static int t_hw_src(struct r300_pfs_compile_state *cs, GLuint src, GLboolean tex)
+static GLuint translate_alpha_opcode(GLuint opcode)
{
- COMPILE_STATE;
- int idx;
- int index = REG_GET_INDEX(src);
-
- switch (REG_GET_TYPE(src)) {
- case REG_TYPE_TEMP:
- /* NOTE: if reg==-1 here, a source is being read that
- * hasn't been written to. Undefined results.
- */
- if (cs->temps[index].reg == -1)
- cs->temps[index].reg = get_hw_temp(cs, cs->nrslots);
-
- idx = cs->temps[index].reg;
-
- if (!REG_GET_NO_USE(src) && (--cs->temps[index].refcount == 0))
- free_temp(cs, src);
- break;
- case REG_TYPE_INPUT:
- idx = cs->inputs[index].reg;
-
- if (!REG_GET_NO_USE(src) && (--cs->inputs[index].refcount == 0))
- free_hw_temp(cs, cs->inputs[index].reg);
- break;
- case REG_TYPE_CONST:
- return (index | SRC_CONST);
- default:
- ERROR("Invalid type for source reg\n");
- return (0 | SRC_CONST);
- }
-
- if (!tex)
- cs->used_in_node |= (1 << idx);
-
- return idx;
-}
-
-static int t_hw_dst(struct r300_pfs_compile_state *cs,
- GLuint dest, GLboolean tex, int slot)
-{
- COMPILE_STATE;
- int idx;
- GLuint index = REG_GET_INDEX(dest);
- assert(REG_GET_VALID(dest));
-
- switch (REG_GET_TYPE(dest)) {
- case REG_TYPE_TEMP:
- if (cs->temps[REG_GET_INDEX(dest)].reg == -1) {
- if (!tex) {
- cs->temps[index].reg = get_hw_temp(cs, slot);
- } else {
- cs->temps[index].reg = get_hw_temp_tex(cs);
- }
- }
- idx = cs->temps[index].reg;
-
- if (!REG_GET_NO_USE(dest) && (--cs->temps[index].refcount == 0))
- free_temp(cs, dest);
-
- cs->dest_in_node |= (1 << idx);
- cs->used_in_node |= (1 << idx);
- break;
- case REG_TYPE_OUTPUT:
- switch (index) {
- case FRAG_RESULT_COLR:
- code->node[code->cur_node].flags |= R300_RGBA_OUT;
- break;
- case FRAG_RESULT_DEPR:
- fp->WritesDepth = GL_TRUE;
- code->node[code->cur_node].flags |= R300_W_OUT;
- break;
- }
- return index;
- break;
+ switch(opcode) {
+ case OPCODE_CMP: return R300_ALU_OUTA_CMP;
+ case OPCODE_DP3: return R300_ALU_OUTA_DP4;
+ case OPCODE_DP4: return R300_ALU_OUTA_DP4;
+ case OPCODE_EX2: return R300_ALU_OUTA_EX2;
+ case OPCODE_FRC: return R300_ALU_OUTA_FRC;
+ case OPCODE_LG2: return R300_ALU_OUTA_LG2;
default:
- ERROR("invalid dest reg type %d\n", REG_GET_TYPE(dest));
- return 0;
- }
-
- return idx;
-}
-
-static void emit_nop(struct r300_pfs_compile_state *cs)
-{
- COMPILE_STATE;
-
- if (cs->nrslots >= PFS_MAX_ALU_INST) {
- ERROR("Out of ALU instruction slots\n");
- return;
+ error("translate_rgb_opcode(%i): Unknown opcode", opcode);
+ /* fall through */
+ case OPCODE_NOP:
+ /* fall through */
+ case OPCODE_MAD: return R300_ALU_OUTA_MAD;
+ case OPCODE_MAX: return R300_ALU_OUTA_MAX;
+ case OPCODE_MIN: return R300_ALU_OUTA_MIN;
+ case OPCODE_RCP: return R300_ALU_OUTA_RCP;
+ case OPCODE_RSQ: return R300_ALU_OUTA_RSQ;
}
-
- code->alu.inst[cs->nrslots].inst0 = NOP_INST0;
- code->alu.inst[cs->nrslots].inst1 = NOP_INST1;
- code->alu.inst[cs->nrslots].inst2 = NOP_INST2;
- code->alu.inst[cs->nrslots].inst3 = NOP_INST3;
- cs->nrslots++;
-}
-
-static void emit_tex(struct r300_pfs_compile_state *cs,
- struct prog_instruction *fpi, int opcode)
-{
- COMPILE_STATE;
- GLuint coord = t_src(cs, fpi->SrcReg[0]);
- GLuint dest = undef;
- GLuint din, uin;
- int unit = fpi->TexSrcUnit;
- int hwsrc, hwdest;
-
- /* Ensure correct node indirection */
- uin = cs->used_in_node;
- din = cs->dest_in_node;
-
- /* Resolve source/dest to hardware registers */
- hwsrc = t_hw_src(cs, coord, GL_TRUE);
-
- if (opcode != R300_TEX_OP_KIL) {
- dest = t_dst(cs, fpi->DstReg);
-
- hwdest =
- t_hw_dst(cs, dest, GL_TRUE,
- code->node[code->cur_node].alu_offset);
-
- /* Use a temp that hasn't been used in this node, rather
- * than causing an indirection
- */
- if (uin & (1 << hwdest)) {
- free_hw_temp(cs, hwdest);
- hwdest = get_hw_temp_tex(cs);
- cs->temps[REG_GET_INDEX(dest)].reg = hwdest;
- }
- } else {
- hwdest = 0;
- unit = 0;
- }
-
- /* Indirection if source has been written in this node, or if the
- * dest has been read/written in this node
- */
- if ((REG_GET_TYPE(coord) != REG_TYPE_CONST &&
- (din & (1 << hwsrc))) || (uin & (1 << hwdest))) {
-
- /* Finish off current node */
- if (code->node[code->cur_node].alu_offset == cs->nrslots)
- emit_nop(cs);
-
- code->node[code->cur_node].alu_end =
- cs->nrslots - code->node[code->cur_node].alu_offset - 1;
- assert(code->node[code->cur_node].alu_end >= 0);
-
- if (++code->cur_node >= PFS_MAX_TEX_INDIRECT) {
- ERROR("too many levels of texture indirection\n");
- return;
- }
-
- /* Start new node */
- code->node[code->cur_node].tex_offset = code->tex.length;
- code->node[code->cur_node].alu_offset = cs->nrslots;
- code->node[code->cur_node].tex_end = -1;
- code->node[code->cur_node].alu_end = -1;
- code->node[code->cur_node].flags = 0;
- cs->used_in_node = 0;
- cs->dest_in_node = 0;
- }
-
- if (code->cur_node == 0)
- code->first_node_has_tex = 1;
-
- code->tex.inst[code->tex.length++] = 0 | (hwsrc << R300_SRC_ADDR_SHIFT)
- | (hwdest << R300_DST_ADDR_SHIFT)
- | (unit << R300_TEX_ID_SHIFT)
- | (opcode << R300_TEX_INST_SHIFT);
-
- cs->dest_in_node |= (1 << hwdest);
- if (REG_GET_TYPE(coord) != REG_TYPE_CONST)
- cs->used_in_node |= (1 << hwsrc);
-
- code->node[code->cur_node].tex_end++;
}
/**
- * Returns the first slot where we could possibly allow writing to dest,
- * according to register allocation.
+ * Emit one paired ALU instruction.
*/
-static int get_earliest_allowed_write(struct r300_pfs_compile_state *cs,
- GLuint dest, int mask)
+static GLboolean emit_alu(void* data, struct radeon_pair_instruction* inst)
{
- COMPILE_STATE;
- int idx;
- int pos;
- GLuint index = REG_GET_INDEX(dest);
- assert(REG_GET_VALID(dest));
+ PROG_CODE;
- switch (REG_GET_TYPE(dest)) {
- case REG_TYPE_TEMP:
- if (cs->temps[index].reg == -1)
- return 0;
-
- idx = cs->temps[index].reg;
- break;
- case REG_TYPE_OUTPUT:
- return 0;
- default:
- ERROR("invalid dest reg type %d\n", REG_GET_TYPE(dest));
- return 0;
- }
-
- pos = cs->hwtemps[idx].reserved;
- if (mask & WRITEMASK_XYZ) {
- if (pos < cs->hwtemps[idx].vector_lastread)
- pos = cs->hwtemps[idx].vector_lastread;
- }
- if (mask & WRITEMASK_W) {
- if (pos < cs->hwtemps[idx].scalar_lastread)
- pos = cs->hwtemps[idx].scalar_lastread;
+ if (code->alu.length >= PFS_MAX_ALU_INST) {
+ error("Too many ALU instructions");
+ return GL_FALSE;
}
- return pos;
-}
-
-/**
- * Allocates a slot for an ALU instruction that can consist of
- * a vertex part or a scalar part or both.
- *
- * Sources from src (src[0] to src[argc-1]) are added to the slot in the
- * appropriate position (vector and/or scalar), and their positions are
- * recorded in the srcpos array.
- *
- * This function emits instruction code for the source fetch and the
- * argument selection. It does not emit instruction code for the
- * opcode or the destination selection.
- *
- * @return the index of the slot
- */
-static int find_and_prepare_slot(struct r300_pfs_compile_state *cs,
- GLboolean emit_vop,
- GLboolean emit_sop,
- int argc, GLuint * src, GLuint dest, int mask)
-{
- COMPILE_STATE;
- int hwsrc[3];
- int srcpos[3];
- unsigned int used;
- int tempused;
- int tempvsrc[3];
- int tempssrc[3];
- int pos;
- int regnr;
- int i, j;
+ int ip = code->alu.length++;
+ int j;
+ code->node[code->cur_node].alu_end++;
- // Determine instruction slots, whether sources are required on
- // vector or scalar side, and the smallest slot number where
- // all source registers are available
- used = 0;
- if (emit_vop)
- used |= SLOT_OP_VECTOR;
- if (emit_sop)
- used |= SLOT_OP_SCALAR;
+ code->alu.inst[ip].inst0 = translate_rgb_opcode(inst->RGB.Opcode);
+ code->alu.inst[ip].inst2 = translate_alpha_opcode(inst->Alpha.Opcode);
- pos = get_earliest_allowed_write(cs, dest, mask);
+ for(j = 0; j < 3; ++j) {
+ GLuint src = inst->RGB.Src[j].Index | (inst->RGB.Src[j].Constant << 5);
+ if (!inst->RGB.Src[j].Constant)
+ use_temporary(code, inst->RGB.Src[j].Index);
+ code->alu.inst[ip].inst1 |= src << (6*j);
- if (code->node[code->cur_node].alu_offset > pos)
- pos = code->node[code->cur_node].alu_offset;
- for (i = 0; i < argc; ++i) {
- if (!REG_GET_BUILTIN(src[i])) {
- if (emit_vop)
- used |= v_swiz[REG_GET_VSWZ(src[i])].flags << i;
- if (emit_sop)
- used |= s_swiz[REG_GET_SSWZ(src[i])].flags << i;
- }
+ src = inst->Alpha.Src[j].Index | (inst->Alpha.Src[j].Constant << 5);
+ if (!inst->Alpha.Src[j].Constant)
+ use_temporary(code, inst->Alpha.Src[j].Index);
+ code->alu.inst[ip].inst3 |= src << (6*j);
- hwsrc[i] = t_hw_src(cs, src[i], GL_FALSE); /* Note: sideeffects wrt refcounting! */
- regnr = hwsrc[i] & 31;
+ GLuint arg = r300FPTranslateRGBSwizzle(inst->RGB.Arg[j].Source, inst->RGB.Arg[j].Swizzle);
+ arg |= inst->RGB.Arg[j].Abs << 6;
+ arg |= inst->RGB.Arg[j].Negate << 5;
+ code->alu.inst[ip].inst0 |= arg << (7*j);
- if (REG_GET_TYPE(src[i]) == REG_TYPE_TEMP) {
- if (used & (SLOT_SRC_VECTOR << i)) {
- if (cs->hwtemps[regnr].vector_valid > pos)
- pos = cs->hwtemps[regnr].vector_valid;
- }
- if (used & (SLOT_SRC_SCALAR << i)) {
- if (cs->hwtemps[regnr].scalar_valid > pos)
- pos = cs->hwtemps[regnr].scalar_valid;
- }
- }
+ arg = r300FPTranslateAlphaSwizzle(inst->Alpha.Arg[j].Source, inst->Alpha.Arg[j].Swizzle);
+ arg |= inst->Alpha.Arg[j].Abs << 6;
+ arg |= inst->Alpha.Arg[j].Negate << 5;
+ code->alu.inst[ip].inst2 |= arg << (7*j);
}
- // Find a slot that fits
- for (;; ++pos) {
- if (cs->slot[pos].used & used & SLOT_OP_BOTH)
- continue;
-
- if (pos >= cs->nrslots) {
- if (cs->nrslots >= PFS_MAX_ALU_INST) {
- ERROR("Out of ALU instruction slots\n");
- return -1;
- }
-
- code->alu.inst[pos].inst0 = NOP_INST0;
- code->alu.inst[pos].inst1 = NOP_INST1;
- code->alu.inst[pos].inst2 = NOP_INST2;
- code->alu.inst[pos].inst3 = NOP_INST3;
-
- cs->nrslots++;
- }
- // Note: When we need both parts (vector and scalar) of a source,
- // we always try to put them into the same position. This makes the
- // code easier to read, and it is optimal (i.e. one doesn't gain
- // anything by splitting the parts).
- // It also avoids headaches with swizzles that access both parts (i.e WXY)
- tempused = cs->slot[pos].used;
- for (i = 0; i < 3; ++i) {
- tempvsrc[i] = cs->slot[pos].vsrc[i];
- tempssrc[i] = cs->slot[pos].ssrc[i];
- }
-
- for (i = 0; i < argc; ++i) {
- int flags = (used >> i) & SLOT_SRC_BOTH;
-
- if (!flags) {
- srcpos[i] = 0;
- continue;
- }
-
- for (j = 0; j < 3; ++j) {
- if ((tempused >> j) & flags & SLOT_SRC_VECTOR) {
- if (tempvsrc[j] != hwsrc[i])
- continue;
- }
-
- if ((tempused >> j) & flags & SLOT_SRC_SCALAR) {
- if (tempssrc[j] != hwsrc[i])
- continue;
- }
-
- break;
- }
+ if (inst->RGB.Saturate)
+ code->alu.inst[ip].inst0 |= R300_ALU_OUTC_CLAMP;
+ if (inst->Alpha.Saturate)
+ code->alu.inst[ip].inst2 |= R300_ALU_OUTA_CLAMP;
- if (j == 3)
- break;
-
- srcpos[i] = j;
- tempused |= flags << j;
- if (flags & SLOT_SRC_VECTOR)
- tempvsrc[j] = hwsrc[i];
- if (flags & SLOT_SRC_SCALAR)
- tempssrc[j] = hwsrc[i];
- }
-
- if (i == argc)
- break;
+ if (inst->RGB.WriteMask) {
+ use_temporary(code, inst->RGB.DestIndex);
+ code->alu.inst[ip].inst1 |=
+ (inst->RGB.DestIndex << R300_ALU_DSTC_SHIFT) |
+ (inst->RGB.WriteMask << R300_ALU_DSTC_REG_MASK_SHIFT);
}
-
- // Found a slot, reserve it
- cs->slot[pos].used = tempused | (used & SLOT_OP_BOTH);
- for (i = 0; i < 3; ++i) {
- cs->slot[pos].vsrc[i] = tempvsrc[i];
- cs->slot[pos].ssrc[i] = tempssrc[i];
+ if (inst->RGB.OutputWriteMask) {
+ code->alu.inst[ip].inst1 |= (inst->RGB.OutputWriteMask << R300_ALU_DSTC_OUTPUT_MASK_SHIFT);
+ code->node[code->cur_node].flags |= R300_RGBA_OUT;
}
- for (i = 0; i < argc; ++i) {
- if (REG_GET_TYPE(src[i]) == REG_TYPE_TEMP) {
- int regnr = hwsrc[i] & 31;
-
- if (used & (SLOT_SRC_VECTOR << i)) {
- if (cs->hwtemps[regnr].vector_lastread < pos)
- cs->hwtemps[regnr].vector_lastread =
- pos;
- }
- if (used & (SLOT_SRC_SCALAR << i)) {
- if (cs->hwtemps[regnr].scalar_lastread < pos)
- cs->hwtemps[regnr].scalar_lastread =
- pos;
- }
- }
+ if (inst->Alpha.WriteMask) {
+ use_temporary(code, inst->Alpha.DestIndex);
+ code->alu.inst[ip].inst3 |=
+ (inst->Alpha.DestIndex << R300_ALU_DSTA_SHIFT) |
+ R300_ALU_DSTA_REG;
}
-
- // Emit the source fetch code
- code->alu.inst[pos].inst1 &= ~R300_ALU_SRC_MASK;
- code->alu.inst[pos].inst1 |=
- ((cs->slot[pos].vsrc[0] << R300_ALU_SRC0C_SHIFT) |
- (cs->slot[pos].vsrc[1] << R300_ALU_SRC1C_SHIFT) |
- (cs->slot[pos].vsrc[2] << R300_ALU_SRC2C_SHIFT));
-
- code->alu.inst[pos].inst3 &= ~R300_ALU_SRC_MASK;
- code->alu.inst[pos].inst3 |=
- ((cs->slot[pos].ssrc[0] << R300_ALU_SRC0A_SHIFT) |
- (cs->slot[pos].ssrc[1] << R300_ALU_SRC1A_SHIFT) |
- (cs->slot[pos].ssrc[2] << R300_ALU_SRC2A_SHIFT));
-
- // Emit the argument selection code
- if (emit_vop) {
- int swz[3];
-
- for (i = 0; i < 3; ++i) {
- if (i < argc) {
- swz[i] = (v_swiz[REG_GET_VSWZ(src[i])].base +
- (srcpos[i] *
- v_swiz[REG_GET_VSWZ(src[i])].
- stride)) | ((src[i] & REG_NEGV_MASK)
- ? ARG_NEG : 0) | ((src[i]
- &
- REG_ABS_MASK)
- ?
- ARG_ABS
- : 0);
- } else {
- swz[i] = R300_ALU_ARGC_ZERO;
- }
- }
-
- code->alu.inst[pos].inst0 &=
- ~(R300_ALU_ARG0C_MASK | R300_ALU_ARG1C_MASK |
- R300_ALU_ARG2C_MASK);
- code->alu.inst[pos].inst0 |=
- (swz[0] << R300_ALU_ARG0C_SHIFT) | (swz[1] <<
- R300_ALU_ARG1C_SHIFT)
- | (swz[2] << R300_ALU_ARG2C_SHIFT);
+ if (inst->Alpha.OutputWriteMask) {
+ code->alu.inst[ip].inst3 |= R300_ALU_DSTA_OUTPUT;
+ code->node[code->cur_node].flags |= R300_RGBA_OUT;
}
-
- if (emit_sop) {
- int swz[3];
-
- for (i = 0; i < 3; ++i) {
- if (i < argc) {
- swz[i] = (s_swiz[REG_GET_SSWZ(src[i])].base +
- (srcpos[i] *
- s_swiz[REG_GET_SSWZ(src[i])].
- stride)) | ((src[i] & REG_NEGS_MASK)
- ? ARG_NEG : 0) | ((src[i]
- &
- REG_ABS_MASK)
- ?
- ARG_ABS
- : 0);
- } else {
- swz[i] = R300_ALU_ARGA_ZERO;
- }
- }
-
- code->alu.inst[pos].inst2 &=
- ~(R300_ALU_ARG0A_MASK | R300_ALU_ARG1A_MASK |
- R300_ALU_ARG2A_MASK);
- code->alu.inst[pos].inst2 |=
- (swz[0] << R300_ALU_ARG0A_SHIFT) | (swz[1] <<
- R300_ALU_ARG1A_SHIFT)
- | (swz[2] << R300_ALU_ARG2A_SHIFT);
+ if (inst->Alpha.DepthWriteMask) {
+ code->alu.inst[ip].inst3 |= R300_ALU_DSTA_DEPTH;
+ code->node[code->cur_node].flags |= R300_W_OUT;
+ c->fp->WritesDepth = GL_TRUE;
}
- return pos;
+ return GL_TRUE;
}
+
/**
- * Append an ALU instruction to the instruction list.
+ * Finish the current node without advancing to the next one.
*/
-static void emit_arith(struct r300_pfs_compile_state *cs,
- int op,
- GLuint dest,
- int mask,
- GLuint src0, GLuint src1, GLuint src2, int flags)
+static GLboolean finish_node(struct r300_fragment_program_compiler *c)
{
- COMPILE_STATE;
- GLuint src[3] = { src0, src1, src2 };
- int hwdest;
- GLboolean emit_vop, emit_sop;
- int vop, sop, argc;
- int pos;
-
- vop = r300_fpop[op].v_op;
- sop = r300_fpop[op].s_op;
- argc = r300_fpop[op].argc;
+ struct r300_fragment_program_code *code = c->code;
+ struct r300_fragment_program_node *node = &code->node[code->cur_node];
- if (REG_GET_TYPE(dest) == REG_TYPE_OUTPUT &&
- REG_GET_INDEX(dest) == FRAG_RESULT_DEPR) {
- if (mask & WRITEMASK_Z) {
- mask = WRITEMASK_W;
- } else {
- return;
- }
+ if (node->alu_end < 0) {
+ /* Generate a single NOP for this node */
+ struct radeon_pair_instruction inst;
+ _mesa_bzero(&inst, sizeof(inst));
+ if (!emit_alu(c, &inst))
+ return GL_FALSE;
}
- emit_vop = GL_FALSE;
- emit_sop = GL_FALSE;
- if ((mask & WRITEMASK_XYZ) || vop == R300_ALU_OUTC_DP3)
- emit_vop = GL_TRUE;
- if ((mask & WRITEMASK_W) || vop == R300_ALU_OUTC_REPL_ALPHA)
- emit_sop = GL_TRUE;
-
- pos =
- find_and_prepare_slot(cs, emit_vop, emit_sop, argc, src, dest,
- mask);
- if (pos < 0)
- return;
-
- hwdest = t_hw_dst(cs, dest, GL_FALSE, pos); /* Note: Side effects wrt register allocation */
-
- if (flags & PFS_FLAG_SAT) {
- vop |= R300_ALU_OUTC_CLAMP;
- sop |= R300_ALU_OUTA_CLAMP;
- }
-
- /* Throw the pieces together and get ALU/1 */
- if (emit_vop) {
- code->alu.inst[pos].inst0 |= vop;
-
- code->alu.inst[pos].inst1 |= hwdest << R300_ALU_DSTC_SHIFT;
-
- if (REG_GET_TYPE(dest) == REG_TYPE_OUTPUT) {
- if (REG_GET_INDEX(dest) == FRAG_RESULT_COLR) {
- code->alu.inst[pos].inst1 |=
- (mask & WRITEMASK_XYZ) <<
- R300_ALU_DSTC_OUTPUT_MASK_SHIFT;
- } else
- assert(0);
+ if (node->tex_end < 0) {
+ if (code->cur_node == 0) {
+ node->tex_end = 0;
} else {
- code->alu.inst[pos].inst1 |=
- (mask & WRITEMASK_XYZ) <<
- R300_ALU_DSTC_REG_MASK_SHIFT;
-
- cs->hwtemps[hwdest].vector_valid = pos + 1;
- }
- }
-
- /* And now ALU/3 */
- if (emit_sop) {
- code->alu.inst[pos].inst2 |= sop;
-
- if (mask & WRITEMASK_W) {
- if (REG_GET_TYPE(dest) == REG_TYPE_OUTPUT) {
- if (REG_GET_INDEX(dest) == FRAG_RESULT_COLR) {
- code->alu.inst[pos].inst3 |=
- (hwdest << R300_ALU_DSTA_SHIFT) |
- R300_ALU_DSTA_OUTPUT;
- } else if (REG_GET_INDEX(dest) ==
- FRAG_RESULT_DEPR) {
- code->alu.inst[pos].inst3 |=
- R300_ALU_DSTA_DEPTH;
- } else
- assert(0);
- } else {
- code->alu.inst[pos].inst3 |=
- (hwdest << R300_ALU_DSTA_SHIFT) |
- R300_ALU_DSTA_REG;
-
- cs->hwtemps[hwdest].scalar_valid = pos + 1;
- }
+ error("Node %i has no TEX instructions", code->cur_node);
+ return GL_FALSE;
}
+ } else {
+ if (code->cur_node == 0)
+ code->first_node_has_tex = 1;
}
- return;
+ return GL_TRUE;
}
-static GLfloat SinCosConsts[2][4] = {
- {
- 1.273239545, // 4/PI
- -0.405284735, // -4/(PI*PI)
- 3.141592654, // PI
- 0.2225 // weight
- },
- {
- 0.75,
- 0.0,
- 0.159154943, // 1/(2*PI)
- 6.283185307 // 2*PI
- }
-};
/**
- * Emit a LIT instruction.
- * \p flags may be PFS_FLAG_SAT
- *
- * Definition of LIT (from ARB_fragment_program):
- * tmp = VectorLoad(op0);
- * if (tmp.x < 0) tmp.x = 0;
- * if (tmp.y < 0) tmp.y = 0;
- * if (tmp.w < -(128.0-epsilon)) tmp.w = -(128.0-epsilon);
- * else if (tmp.w > 128-epsilon) tmp.w = 128-epsilon;
- * result.x = 1.0;
- * result.y = tmp.x;
- * result.z = (tmp.x > 0) ? RoughApproxPower(tmp.y, tmp.w) : 0.0;
- * result.w = 1.0;
- *
- * The longest path of computation is the one leading to result.z,
- * consisting of 5 operations. This implementation of LIT takes
- * 5 slots. So unless there's some special undocumented opcode,
- * this implementation is potentially optimal. Unfortunately,
- * emit_arith is a bit too conservative because it doesn't understand
- * partial writes to the vector component.
+ * Begin a block of texture instructions.
+ * Create the necessary indirection.
*/
-static const GLfloat LitConst[4] =
- { 127.999999, 127.999999, 127.999999, -127.999999 };
-
-static void emit_lit(struct r300_pfs_compile_state *cs,
- GLuint dest, int mask, GLuint src, int flags)
+static GLboolean begin_tex(void* data)
{
- COMPILE_STATE;
- GLuint cnst;
- int needTemporary;
- GLuint temp;
-
- cnst = emit_const4fv(cs, LitConst);
-
- needTemporary = 0;
- if ((mask & WRITEMASK_XYZW) != WRITEMASK_XYZW) {
- needTemporary = 1;
- } else if (REG_GET_TYPE(dest) == REG_TYPE_OUTPUT) {
- // LIT is typically followed by DP3/DP4, so there's no point
- // in creating special code for this case
- needTemporary = 1;
- }
-
- if (needTemporary) {
- temp = keep(get_temp_reg(cs));
- } else {
- temp = keep(dest);
- }
+ PROG_CODE;
- // Note: The order of emit_arith inside the slots is relevant,
- // because emit_arith only looks at scalar vs. vector when resolving
- // dependencies, and it does not consider individual vector components,
- // so swizzling between the two parts can create fake dependencies.
-
- // First slot
- emit_arith(cs, PFS_OP_MAX, temp, WRITEMASK_XY,
- keep(src), pfs_zero, undef, 0);
- emit_arith(cs, PFS_OP_MAX, temp, WRITEMASK_W, src, cnst, undef, 0);
-
- // Second slot
- emit_arith(cs, PFS_OP_MIN, temp, WRITEMASK_Z,
- swizzle(temp, W, W, W, W), cnst, undef, 0);
- emit_arith(cs, PFS_OP_LG2, temp, WRITEMASK_W,
- swizzle(temp, Y, Y, Y, Y), undef, undef, 0);
-
- // Third slot
- // If desired, we saturate the y result here.
- // This does not affect the use as a condition variable in the CMP later
- emit_arith(cs, PFS_OP_MAD, temp, WRITEMASK_W,
- temp, swizzle(temp, Z, Z, Z, Z), pfs_zero, 0);
- emit_arith(cs, PFS_OP_MAD, temp, WRITEMASK_Y,
- swizzle(temp, X, X, X, X), pfs_one, pfs_zero, flags);
-
- // Fourth slot
- emit_arith(cs, PFS_OP_MAD, temp, WRITEMASK_X,
- pfs_one, pfs_one, pfs_zero, 0);
- emit_arith(cs, PFS_OP_EX2, temp, WRITEMASK_W, temp, undef, undef, 0);
-
- // Fifth slot
- emit_arith(cs, PFS_OP_CMP, temp, WRITEMASK_Z,
- pfs_zero, swizzle(temp, W, W, W, W),
- negate(swizzle(temp, Y, Y, Y, Y)), flags);
- emit_arith(cs, PFS_OP_MAD, temp, WRITEMASK_W, pfs_one, pfs_one,
- pfs_zero, 0);
-
- if (needTemporary) {
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- temp, pfs_one, pfs_zero, flags);
- free_temp(cs, temp);
- } else {
- // Decrease refcount of the destination
- t_hw_dst(cs, dest, GL_FALSE, cs->nrslots);
+ if (code->cur_node == 0) {
+ if (code->node[0].alu_end < 0 &&
+ code->node[0].tex_end < 0)
+ return GL_TRUE;
}
-}
-
-static void emit_instruction(struct r300_pfs_compile_state *cs, struct prog_instruction *fpi)
-{
- COMPILE_STATE;
- GLuint src[3], dest, temp[2];
- int flags, mask = 0;
- int const_sin[2];
-
- if (fpi->SaturateMode == SATURATE_ZERO_ONE)
- flags = PFS_FLAG_SAT;
- else
- flags = 0;
-
- if (fpi->Opcode != OPCODE_KIL) {
- dest = t_dst(cs, fpi->DstReg);
- mask = fpi->DstReg.WriteMask;
- }
-
- switch (fpi->Opcode) {
- case OPCODE_ADD:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- src[0], pfs_one, src[1], flags);
- break;
- case OPCODE_CMP:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- src[2] = t_src(cs, fpi->SrcReg[2]);
- /* ARB_f_p - if src0.c < 0.0 ? src1.c : src2.c
- * r300 - if src2.c < 0.0 ? src1.c : src0.c
- */
- emit_arith(cs, PFS_OP_CMP, dest, mask,
- src[2], src[1], src[0], flags);
- break;
- case OPCODE_COS:
- /*
- * cos using a parabola (see SIN):
- * cos(x):
- * x = (x/(2*PI))+0.75
- * x = frac(x)
- * x = (x*2*PI)-PI
- * result = sin(x)
- */
- temp[0] = get_temp_reg(cs);
- const_sin[0] = emit_const4fv(cs, SinCosConsts[0]);
- const_sin[1] = emit_const4fv(cs, SinCosConsts[1]);
- src[0] = t_scalar_src(cs, fpi->SrcReg[0]);
-
- /* add 0.5*PI and do range reduction */
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_X,
- swizzle(src[0], X, X, X, X),
- swizzle(const_sin[1], Z, Z, Z, Z),
- swizzle(const_sin[1], X, X, X, X), 0);
-
- emit_arith(cs, PFS_OP_FRC, temp[0], WRITEMASK_X,
- swizzle(temp[0], X, X, X, X),
- undef, undef, 0);
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_Z, swizzle(temp[0], X, X, X, X), swizzle(const_sin[1], W, W, W, W), //2*PI
- negate(swizzle(const_sin[0], Z, Z, Z, Z)), //-PI
- 0);
-
- /* SIN */
-
- emit_arith(cs, PFS_OP_MAD, temp[0],
- WRITEMASK_X | WRITEMASK_Y, swizzle(temp[0],
- Z, Z, Z,
- Z),
- const_sin[0], pfs_zero, 0);
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_X,
- swizzle(temp[0], Y, Y, Y, Y),
- absolute(swizzle(temp[0], Z, Z, Z, Z)),
- swizzle(temp[0], X, X, X, X), 0);
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_Y,
- swizzle(temp[0], X, X, X, X),
- absolute(swizzle(temp[0], X, X, X, X)),
- negate(swizzle(temp[0], X, X, X, X)), 0);
-
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- swizzle(temp[0], Y, Y, Y, Y),
- swizzle(const_sin[0], W, W, W, W),
- swizzle(temp[0], X, X, X, X), flags);
-
- free_temp(cs, temp[0]);
- break;
- case OPCODE_DP3:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- emit_arith(cs, PFS_OP_DP3, dest, mask,
- src[0], src[1], undef, flags);
- break;
- case OPCODE_DP4:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- emit_arith(cs, PFS_OP_DP4, dest, mask,
- src[0], src[1], undef, flags);
- break;
- case OPCODE_DST:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- /* dest.y = src0.y * src1.y */
- if (mask & WRITEMASK_Y)
- emit_arith(cs, PFS_OP_MAD, dest, WRITEMASK_Y,
- keep(src[0]), keep(src[1]),
- pfs_zero, flags);
- /* dest.z = src0.z */
- if (mask & WRITEMASK_Z)
- emit_arith(cs, PFS_OP_MAD, dest, WRITEMASK_Z,
- src[0], pfs_one, pfs_zero, flags);
- /* result.x = 1.0
- * result.w = src1.w */
- if (mask & WRITEMASK_XW) {
- REG_SET_VSWZ(src[1], SWIZZLE_111); /*Cheat */
- emit_arith(cs, PFS_OP_MAD, dest,
- mask & WRITEMASK_XW,
- src[1], pfs_one, pfs_zero, flags);
- }
- break;
- case OPCODE_EX2:
- src[0] = t_scalar_src(cs, fpi->SrcReg[0]);
- emit_arith(cs, PFS_OP_EX2, dest, mask,
- src[0], undef, undef, flags);
- break;
- case OPCODE_FRC:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- emit_arith(cs, PFS_OP_FRC, dest, mask,
- src[0], undef, undef, flags);
- break;
- case OPCODE_KIL:
- emit_tex(cs, fpi, R300_TEX_OP_KIL);
- break;
- case OPCODE_LG2:
- src[0] = t_scalar_src(cs, fpi->SrcReg[0]);
- emit_arith(cs, PFS_OP_LG2, dest, mask,
- src[0], undef, undef, flags);
- break;
- case OPCODE_LIT:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- emit_lit(cs, dest, mask, src[0], flags);
- break;
- case OPCODE_LRP:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- src[2] = t_src(cs, fpi->SrcReg[2]);
- /* result = tmp0tmp1 + (1 - tmp0)tmp2
- * = tmp0tmp1 + tmp2 + (-tmp0)tmp2
- * MAD temp, -tmp0, tmp2, tmp2
- * MAD result, tmp0, tmp1, temp
- */
- temp[0] = get_temp_reg(cs);
- emit_arith(cs, PFS_OP_MAD, temp[0], mask,
- negate(keep(src[0])), keep(src[2]), src[2],
- 0);
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- src[0], src[1], temp[0], flags);
- free_temp(cs, temp[0]);
- break;
- case OPCODE_MAD:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- src[2] = t_src(cs, fpi->SrcReg[2]);
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- src[0], src[1], src[2], flags);
- break;
- case OPCODE_MAX:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- emit_arith(cs, PFS_OP_MAX, dest, mask,
- src[0], src[1], undef, flags);
- break;
- case OPCODE_MIN:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- emit_arith(cs, PFS_OP_MIN, dest, mask,
- src[0], src[1], undef, flags);
- break;
- case OPCODE_MOV:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- src[0], pfs_one, pfs_zero, flags);
- break;
- case OPCODE_MUL:
- src[0] = t_src(cs, fpi->SrcReg[0]);
- src[1] = t_src(cs, fpi->SrcReg[1]);
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- src[0], src[1], pfs_zero, flags);
- break;
- case OPCODE_RCP:
- src[0] = t_scalar_src(cs, fpi->SrcReg[0]);
- emit_arith(cs, PFS_OP_RCP, dest, mask,
- src[0], undef, undef, flags);
- break;
- case OPCODE_RSQ:
- src[0] = t_scalar_src(cs, fpi->SrcReg[0]);
- emit_arith(cs, PFS_OP_RSQ, dest, mask,
- absolute(src[0]), pfs_zero, pfs_zero, flags);
- break;
- case OPCODE_SCS:
- /*
- * scs using a parabola :
- * scs(x):
- * result.x = sin(-abs(x)+0.5*PI) (cos)
- * result.y = sin(x) (sin)
- *
- */
- temp[0] = get_temp_reg(cs);
- temp[1] = get_temp_reg(cs);
- const_sin[0] = emit_const4fv(cs, SinCosConsts[0]);
- const_sin[1] = emit_const4fv(cs, SinCosConsts[1]);
- src[0] = t_scalar_src(cs, fpi->SrcReg[0]);
-
- /* x = -abs(x)+0.5*PI */
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_Z, swizzle(const_sin[0], Z, Z, Z, Z), //PI
- pfs_half,
- negate(abs
- (swizzle(keep(src[0]), X, X, X, X))),
- 0);
-
- /* C*x (sin) */
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_W,
- swizzle(const_sin[0], Y, Y, Y, Y),
- swizzle(keep(src[0]), X, X, X, X),
- pfs_zero, 0);
-
- /* B*x, C*x (cos) */
- emit_arith(cs, PFS_OP_MAD, temp[0],
- WRITEMASK_X | WRITEMASK_Y, swizzle(temp[0],
- Z, Z, Z,
- Z),
- const_sin[0], pfs_zero, 0);
-
- /* B*x (sin) */
- emit_arith(cs, PFS_OP_MAD, temp[1], WRITEMASK_W,
- swizzle(const_sin[0], X, X, X, X),
- keep(src[0]), pfs_zero, 0);
-
- /* y = B*x + C*x*abs(x) (sin) */
- emit_arith(cs, PFS_OP_MAD, temp[1], WRITEMASK_Z,
- absolute(src[0]),
- swizzle(temp[0], W, W, W, W),
- swizzle(temp[1], W, W, W, W), 0);
-
- /* y = B*x + C*x*abs(x) (cos) */
- emit_arith(cs, PFS_OP_MAD, temp[1], WRITEMASK_W,
- swizzle(temp[0], Y, Y, Y, Y),
- absolute(swizzle(temp[0], Z, Z, Z, Z)),
- swizzle(temp[0], X, X, X, X), 0);
-
- /* y*abs(y) - y (cos), y*abs(y) - y (sin) */
- emit_arith(cs, PFS_OP_MAD, temp[0],
- WRITEMASK_X | WRITEMASK_Y, swizzle(temp[1],
- W, Z, Y,
- X),
- absolute(swizzle(temp[1], W, Z, Y, X)),
- negate(swizzle(temp[1], W, Z, Y, X)), 0);
-
- /* dest.xy = mad(temp.xy, P, temp2.wz) */
- emit_arith(cs, PFS_OP_MAD, dest,
- mask & (WRITEMASK_X | WRITEMASK_Y), temp[0],
- swizzle(const_sin[0], W, W, W, W),
- swizzle(temp[1], W, Z, Y, X), flags);
-
- free_temp(cs, temp[0]);
- free_temp(cs, temp[1]);
- break;
- case OPCODE_SIN:
- /*
- * using a parabola:
- * sin(x) = 4/pi * x + -4/(pi*pi) * x * abs(x)
- * extra precision is obtained by weighting against
- * itself squared.
- */
-
- temp[0] = get_temp_reg(cs);
- const_sin[0] = emit_const4fv(cs, SinCosConsts[0]);
- const_sin[1] = emit_const4fv(cs, SinCosConsts[1]);
- src[0] = t_scalar_src(cs, fpi->SrcReg[0]);
- /* do range reduction */
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_X,
- swizzle(keep(src[0]), X, X, X, X),
- swizzle(const_sin[1], Z, Z, Z, Z),
- pfs_half, 0);
-
- emit_arith(cs, PFS_OP_FRC, temp[0], WRITEMASK_X,
- swizzle(temp[0], X, X, X, X),
- undef, undef, 0);
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_Z, swizzle(temp[0], X, X, X, X), swizzle(const_sin[1], W, W, W, W), //2*PI
- negate(swizzle(const_sin[0], Z, Z, Z, Z)), //PI
- 0);
-
- /* SIN */
-
- emit_arith(cs, PFS_OP_MAD, temp[0],
- WRITEMASK_X | WRITEMASK_Y, swizzle(temp[0],
- Z, Z, Z,
- Z),
- const_sin[0], pfs_zero, 0);
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_X,
- swizzle(temp[0], Y, Y, Y, Y),
- absolute(swizzle(temp[0], Z, Z, Z, Z)),
- swizzle(temp[0], X, X, X, X), 0);
-
- emit_arith(cs, PFS_OP_MAD, temp[0], WRITEMASK_Y,
- swizzle(temp[0], X, X, X, X),
- absolute(swizzle(temp[0], X, X, X, X)),
- negate(swizzle(temp[0], X, X, X, X)), 0);
-
- emit_arith(cs, PFS_OP_MAD, dest, mask,
- swizzle(temp[0], Y, Y, Y, Y),
- swizzle(const_sin[0], W, W, W, W),
- swizzle(temp[0], X, X, X, X), flags);
-
- free_temp(cs, temp[0]);
- break;
- case OPCODE_TEX:
- emit_tex(cs, fpi, R300_TEX_OP_LD);
- break;
- case OPCODE_TXB:
- emit_tex(cs, fpi, R300_TEX_OP_TXB);
- break;
- case OPCODE_TXP:
- emit_tex(cs, fpi, R300_TEX_OP_TXP);
- break;
- default:
- ERROR("unknown fpi->Opcode %d\n", fpi->Opcode);
- break;
+ if (code->cur_node == 3) {
+ error("Too many texture indirections");
+ return GL_FALSE;
}
-}
-static GLboolean parse_program(struct r300_pfs_compile_state *cs)
-{
- COMPILE_STATE;
- int clauseidx;
-
- for (clauseidx = 0; clauseidx < cs->compiler->compiler.NumClauses; ++clauseidx) {
- struct radeon_clause* clause = &cs->compiler->compiler.Clauses[clauseidx];
- int ip;
-
- for(ip = 0; ip < clause->NumInstructions; ++ip) {
- emit_instruction(cs, clause->Instructions + ip);
-
- if (fp->error)
- return GL_FALSE;
- }
- }
+ if (!finish_node(c))
+ return GL_FALSE;
+ struct r300_fragment_program_node *node = &code->node[++code->cur_node];
+ node->alu_offset = code->alu.length;
+ node->alu_end = -1;
+ node->tex_offset = code->tex.length;
+ node->tex_end = -1;
return GL_TRUE;
}
-/* - Init structures
- * - Determine what hwregs each input corresponds to
- */
-static void init_program(struct r300_pfs_compile_state *cs)
+static GLboolean emit_tex(void* data, struct prog_instruction* inst)
{
- COMPILE_STATE;
- struct gl_fragment_program *mp = &fp->mesa_program;
- GLuint InputsRead = mp->Base.InputsRead;
- GLuint temps_used = 0; /* for fp->temps[] */
- int i, j;
-
- /* New compile, reset tracking data */
- fp->optimization =
- driQueryOptioni(&cs->compiler->r300->radeon.optionCache, "fp_optimization");
- fp->translated = GL_FALSE;
- fp->error = GL_FALSE;
- fp->WritesDepth = GL_FALSE;
- code->tex.length = 0;
- code->cur_node = 0;
- code->first_node_has_tex = 0;
- code->const_nr = 0;
- code->max_temp_idx = 0;
- code->node[0].alu_end = -1;
- code->node[0].tex_end = -1;
+ PROG_CODE;
- for (i = 0; i < PFS_MAX_ALU_INST; i++) {
- for (j = 0; j < 3; j++) {
- cs->slot[i].vsrc[j] = SRC_CONST;
- cs->slot[i].ssrc[j] = SRC_CONST;
- }
- }
-
- /* Work out what temps the Mesa inputs correspond to, this must match
- * what setup_rs_unit does, which shouldn't be a problem as rs_unit
- * configures itself based on the fragprog's InputsRead
- *
- * NOTE: this depends on get_hw_temp() allocating registers in order,
- * starting from register 0.
- */
-
- /* Texcoords come first */
- for (i = 0; i < cs->compiler->r300->radeon.glCtx->Const.MaxTextureUnits; i++) {
- if (InputsRead & (FRAG_BIT_TEX0 << i)) {
- cs->inputs[FRAG_ATTRIB_TEX0 + i].refcount = 0;
- cs->inputs[FRAG_ATTRIB_TEX0 + i].reg =
- get_hw_temp(cs, 0);
- }
- }
- InputsRead &= ~FRAG_BITS_TEX_ANY;
-
- /* fragment position treated as a texcoord */
- if (InputsRead & FRAG_BIT_WPOS) {
- cs->inputs[FRAG_ATTRIB_WPOS].refcount = 0;
- cs->inputs[FRAG_ATTRIB_WPOS].reg = get_hw_temp(cs, 0);
+ if (code->tex.length >= PFS_MAX_TEX_INST) {
+ error("Too many TEX instructions");
+ return GL_FALSE;
}
- InputsRead &= ~FRAG_BIT_WPOS;
- /* Then primary colour */
- if (InputsRead & FRAG_BIT_COL0) {
- cs->inputs[FRAG_ATTRIB_COL0].refcount = 0;
- cs->inputs[FRAG_ATTRIB_COL0].reg = get_hw_temp(cs, 0);
- }
- InputsRead &= ~FRAG_BIT_COL0;
+ GLuint unit = inst->TexSrcUnit;
+ GLuint dest = inst->DstReg.Index;
+ GLuint opcode;
- /* Secondary color */
- if (InputsRead & FRAG_BIT_COL1) {
- cs->inputs[FRAG_ATTRIB_COL1].refcount = 0;
- cs->inputs[FRAG_ATTRIB_COL1].reg = get_hw_temp(cs, 0);
+ switch(inst->Opcode) {
+ case OPCODE_KIL: opcode = R300_TEX_OP_KIL; break;
+ case OPCODE_TEX: opcode = R300_TEX_OP_LD; break;
+ case OPCODE_TXB: opcode = R300_TEX_OP_TXB; break;
+ case OPCODE_TXP: opcode = R300_TEX_OP_TXP; break;
+ default:
+ error("Unknown texture opcode %i", inst->Opcode);
+ return GL_FALSE;
}
- InputsRead &= ~FRAG_BIT_COL1;
- /* Anything else */
- if (InputsRead) {
- WARN_ONCE("Don't know how to handle inputs 0x%x\n", InputsRead);
- /* force read from hwreg 0 for now */
- for (i = 0; i < 32; i++)
- if (InputsRead & (1 << i))
- cs->inputs[i].reg = 0;
+ if (inst->Opcode == OPCODE_KIL) {
+ unit = 0;
+ dest = 0;
+ } else {
+ use_temporary(code, dest);
}
- /* Pre-parse the program, grabbing refcounts on input/temp regs.
- * That way, we can free up the reg when it's no longer needed
- */
- for (i = 0; i < cs->compiler->compiler.Clauses[0].NumInstructions; ++i) {
- struct prog_instruction *fpi = cs->compiler->compiler.Clauses[0].Instructions + i;
- int idx;
+ use_temporary(code, inst->SrcReg[0].Index);
- for (j = 0; j < 3; j++) {
- idx = fpi->SrcReg[j].Index;
- switch (fpi->SrcReg[j].File) {
- case PROGRAM_TEMPORARY:
- if (!(temps_used & (1 << idx))) {
- cs->temps[idx].reg = -1;
- cs->temps[idx].refcount = 1;
- temps_used |= (1 << idx);
- } else
- cs->temps[idx].refcount++;
- break;
- case PROGRAM_INPUT:
- cs->inputs[idx].refcount++;
- break;
- default:
- break;
- }
- }
-
- idx = fpi->DstReg.Index;
- if (fpi->DstReg.File == PROGRAM_TEMPORARY) {
- if (!(temps_used & (1 << idx))) {
- cs->temps[idx].reg = -1;
- cs->temps[idx].refcount = 1;
- temps_used |= (1 << idx);
- } else
- cs->temps[idx].refcount++;
- }
- }
- cs->temp_in_use = temps_used;
+ code->node[code->cur_node].tex_end++;
+ code->tex.inst[code->tex.length++] =
+ (inst->SrcReg[0].Index << R300_SRC_ADDR_SHIFT) |
+ (dest << R300_DST_ADDR_SHIFT) |
+ (unit << R300_TEX_ID_SHIFT) |
+ (opcode << R300_TEX_INST_SHIFT);
+ return GL_TRUE;
}
+static const struct radeon_pair_handler pair_handler = {
+ .EmitConst = &emit_const,
+ .EmitPaired = &emit_alu,
+ .EmitTex = &emit_tex,
+ .BeginTexBlock = &begin_tex,
+ .MaxHwTemps = PFS_NUM_TEMP_REGS
+};
+
/**
* Final compilation step: Turn the intermediate radeon_program into
* machine-readable instructions.
*/
GLboolean r300FragmentProgramEmit(struct r300_fragment_program_compiler *compiler)
{
- struct r300_pfs_compile_state cs;
struct r300_fragment_program_code *code = compiler->code;
- _mesa_memset(&cs, 0, sizeof(cs));
- cs.compiler = compiler;
- init_program(&cs);
+ _mesa_bzero(code, sizeof(struct r300_fragment_program_code));
+ code->node[0].alu_end = -1;
+ code->node[0].tex_end = -1;
- if (!parse_program(&cs))
+ if (!radeonPairProgram(compiler->r300->radeon.glCtx, compiler->program, &pair_handler, compiler))
return GL_FALSE;
- /* Finish off */
- code->node[code->cur_node].alu_end =
- cs.nrslots - code->node[code->cur_node].alu_offset - 1;
- if (code->node[code->cur_node].tex_end < 0)
- code->node[code->cur_node].tex_end = 0;
- code->alu_offset = 0;
- code->alu_end = cs.nrslots - 1;
- code->tex_offset = 0;
- code->tex_end = code->tex.length ? code->tex.length - 1 : 0;
- assert(code->node[code->cur_node].alu_end >= 0);
- assert(code->alu_end >= 0);
+ if (!finish_node(compiler))
+ return GL_FALSE;
return GL_TRUE;
}
diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_swizzle.c b/src/mesa/drivers/dri/r300/r300_fragprog_swizzle.c
new file mode 100644
index 00000000000..a86d2bd4712
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/r300_fragprog_swizzle.c
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2008 Nicolai Haehnle.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/**
+ * @file
+ * Utilities to deal with the somewhat odd restriction on R300 fragment
+ * program swizzles.
+ */
+
+#include "r300_fragprog_swizzle.h"
+
+#include "r300_reg.h"
+#include "radeon_nqssadce.h"
+
+#define MAKE_SWZ3(x, y, z) (MAKE_SWIZZLE4(SWIZZLE_##x, SWIZZLE_##y, SWIZZLE_##z, SWIZZLE_ZERO))
+
+struct swizzle_data {
+ GLuint hash; /**< swizzle value this matches */
+ GLuint base; /**< base value for hw swizzle */
+ GLuint stride; /**< difference in base between arg0/1/2 */
+};
+
+static const struct swizzle_data native_swizzles[] = {
+ {MAKE_SWZ3(X, Y, Z), R300_ALU_ARGC_SRC0C_XYZ, 4},
+ {MAKE_SWZ3(X, X, X), R300_ALU_ARGC_SRC0C_XXX, 4},
+ {MAKE_SWZ3(Y, Y, Y), R300_ALU_ARGC_SRC0C_YYY, 4},
+ {MAKE_SWZ3(Z, Z, Z), R300_ALU_ARGC_SRC0C_ZZZ, 4},
+ {MAKE_SWZ3(W, W, W), R300_ALU_ARGC_SRC0A, 1},
+ {MAKE_SWZ3(Y, Z, X), R300_ALU_ARGC_SRC0C_YZX, 1},
+ {MAKE_SWZ3(Z, X, Y), R300_ALU_ARGC_SRC0C_ZXY, 1},
+ {MAKE_SWZ3(W, Z, Y), R300_ALU_ARGC_SRC0CA_WZY, 1},
+ {MAKE_SWZ3(ONE, ONE, ONE), R300_ALU_ARGC_ONE, 0},
+ {MAKE_SWZ3(ZERO, ZERO, ZERO), R300_ALU_ARGC_ZERO, 0}
+};
+
+static const int num_native_swizzles = sizeof(native_swizzles)/sizeof(native_swizzles[0]);
+
+
+/**
+ * Find a native RGB swizzle that matches the given swizzle.
+ * Returns 0 if none found.
+ */
+static const struct swizzle_data* lookup_native_swizzle(GLuint swizzle)
+{
+ int i, comp;
+
+ for(i = 0; i < num_native_swizzles; ++i) {
+ const struct swizzle_data* sd = &native_swizzles[i];
+ for(comp = 0; comp < 3; ++comp) {
+ GLuint swz = GET_SWZ(swizzle, comp);
+ if (swz == SWIZZLE_NIL)
+ continue;
+ if (swz != GET_SWZ(sd->hash, comp))
+ break;
+ }
+ if (comp == 3)
+ return sd;
+ }
+
+ return 0;
+}
+
+
+/**
+ * Check whether the given instruction supports the swizzle and negate
+ * combinations in the given source register.
+ */
+GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg)
+{
+ if (reg.Abs)
+ reg.NegateBase = 0;
+
+ if (opcode == OPCODE_KIL ||
+ opcode == OPCODE_TEX ||
+ opcode == OPCODE_TXB ||
+ opcode == OPCODE_TXP) {
+ int j;
+
+ if (reg.Abs || reg.NegateBase != (15*reg.NegateAbs))
+ return GL_FALSE;
+
+ for(j = 0; j < 4; ++j) {
+ GLuint swz = GET_SWZ(reg.Swizzle, j);
+ if (swz == SWIZZLE_NIL)
+ continue;
+ if (swz != j)
+ return GL_FALSE;
+ }
+
+ return GL_TRUE;
+ }
+
+ GLuint relevant = 0;
+ int j;
+
+ for(j = 0; j < 3; ++j)
+ if (GET_SWZ(reg.Swizzle, j) != SWIZZLE_NIL)
+ relevant |= 1 << j;
+
+ if ((reg.NegateBase & relevant) && (reg.NegateBase & relevant) != relevant)
+ return GL_FALSE;
+
+ if (!lookup_native_swizzle(reg.Swizzle))
+ return GL_FALSE;
+
+ return GL_TRUE;
+}
+
+
+/**
+ * Generate MOV dst, src using only native swizzles.
+ */
+void r300FPBuildSwizzle(struct nqssadce_state *s, struct prog_dst_register dst, struct prog_src_register src)
+{
+ if (src.Abs)
+ src.NegateBase = 0;
+
+ while(dst.WriteMask) {
+ const struct swizzle_data *best_swizzle = 0;
+ GLuint best_matchcount = 0;
+ GLuint best_matchmask = 0;
+ GLboolean rgbnegate;
+ int i, comp;
+
+ for(i = 0; i < num_native_swizzles; ++i) {
+ const struct swizzle_data *sd = &native_swizzles[i];
+ GLuint matchcount = 0;
+ GLuint matchmask = 0;
+ for(comp = 0; comp < 3; ++comp) {
+ if (!GET_BIT(dst.WriteMask, comp))
+ continue;
+ GLuint swz = GET_SWZ(src.Swizzle, comp);
+ if (swz == SWIZZLE_NIL)
+ continue;
+ if (swz == GET_SWZ(sd->hash, comp)) {
+ matchcount++;
+ matchmask |= 1 << comp;
+ }
+ }
+ if (matchcount > best_matchcount) {
+ best_swizzle = sd;
+ best_matchcount = matchcount;
+ best_matchmask = matchmask;
+ if (matchmask == (dst.WriteMask & WRITEMASK_XYZ))
+ break;
+ }
+ }
+
+ if ((src.NegateBase & best_matchmask) != 0) {
+ best_matchmask &= src.NegateBase;
+ rgbnegate = !src.NegateAbs;
+ } else {
+ rgbnegate = src.NegateAbs;
+ }
+
+ struct prog_instruction *inst;
+
+ _mesa_insert_instructions(s->Program, s->IP, 1);
+ inst = s->Program->Instructions + s->IP++;
+ inst->Opcode = OPCODE_MOV;
+ inst->DstReg = dst;
+ inst->DstReg.WriteMask &= (best_matchmask | WRITEMASK_W);
+ inst->SrcReg[0] = src;
+ /* Note: We rely on NqSSA/DCE to set unused swizzle components to NIL */
+
+ dst.WriteMask &= ~inst->DstReg.WriteMask;
+ }
+}
+
+
+/**
+ * Translate an RGB (XYZ) swizzle into the hardware code for the given
+ * instruction source.
+ */
+GLuint r300FPTranslateRGBSwizzle(GLuint src, GLuint swizzle)
+{
+ const struct swizzle_data* sd = lookup_native_swizzle(swizzle);
+
+ if (!sd) {
+ _mesa_printf("Not a native swizzle: %08x\n", swizzle);
+ return 0;
+ }
+
+ return sd->base + src*sd->stride;
+}
+
+
+/**
+ * Translate an Alpha (W) swizzle into the hardware code for the given
+ * instruction source.
+ */
+GLuint r300FPTranslateAlphaSwizzle(GLuint src, GLuint swizzle)
+{
+ if (swizzle < 3)
+ return swizzle + 3*src;
+
+ switch(swizzle) {
+ case SWIZZLE_W: return R300_ALU_ARGA_SRC0A + src;
+ case SWIZZLE_ONE: return R300_ALU_ARGA_ONE;
+ case SWIZZLE_ZERO: return R300_ALU_ARGA_ZERO;
+ default: return R300_ALU_ARGA_ONE;
+ }
+}
diff --git a/src/mesa/drivers/dri/r300/r300_fragprog_swizzle.h b/src/mesa/drivers/dri/r300/r300_fragprog_swizzle.h
new file mode 100644
index 00000000000..3da99a9dbe2
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/r300_fragprog_swizzle.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2008 Nicolai Haehnle.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __R300_FRAGPROG_SWIZZLE_H_
+#define __R300_FRAGPROG_SWIZZLE_H_
+
+#include "glheader.h"
+#include "shader/prog_instruction.h"
+
+struct nqssadce_state;
+
+GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg);
+void r300FPBuildSwizzle(struct nqssadce_state*, struct prog_dst_register dst, struct prog_src_register src);
+
+GLuint r300FPTranslateRGBSwizzle(GLuint src, GLuint swizzle);
+GLuint r300FPTranslateAlphaSwizzle(GLuint src, GLuint swizzle);
+
+#endif /* __R300_FRAGPROG_SWIZZLE_H_ */
diff --git a/src/mesa/drivers/dri/r300/r300_ioctl.c b/src/mesa/drivers/dri/r300/r300_ioctl.c
index 71821a01ea0..bd7f060435f 100644
--- a/src/mesa/drivers/dri/r300/r300_ioctl.c
+++ b/src/mesa/drivers/dri/r300/r300_ioctl.c
@@ -419,13 +419,14 @@ static void r300EmitClearState(GLcontext * ctx)
if (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV515)
vap_cntl |= (2 << R300_PVS_NUM_FPUS_SHIFT);
else if ((r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV530) ||
- (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV560))
+ (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV560) ||
+ (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV570))
vap_cntl |= (5 << R300_PVS_NUM_FPUS_SHIFT);
- else if (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_R420)
+ else if ((r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV410) ||
+ (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_R420))
vap_cntl |= (6 << R300_PVS_NUM_FPUS_SHIFT);
else if ((r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_R520) ||
- (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_R580) ||
- (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV570))
+ (r300->radeon.radeonScreen->chip_family == CHIP_FAMILY_R580))
vap_cntl |= (8 << R300_PVS_NUM_FPUS_SHIFT);
else
vap_cntl |= (4 << R300_PVS_NUM_FPUS_SHIFT);
diff --git a/src/mesa/drivers/dri/r300/r300_reg.h b/src/mesa/drivers/dri/r300/r300_reg.h
index 58a19554c71..ec2b58377c5 100644
--- a/src/mesa/drivers/dri/r300/r300_reg.h
+++ b/src/mesa/drivers/dri/r300/r300_reg.h
@@ -2705,6 +2705,7 @@ enum {
# define R500_ALPHA_OP_MDV 15
# define R500_ALPHA_ADDRD(x) (x << 4)
# define R500_ALPHA_ADDRD_REL (1 << 11)
+# define R500_ALPHA_SEL_A_SHIFT 12
# define R500_ALPHA_SEL_A_SRC0 (0 << 12)
# define R500_ALPHA_SEL_A_SRC1 (1 << 12)
# define R500_ALPHA_SEL_A_SRC2 (2 << 12)
@@ -2721,6 +2722,7 @@ enum {
# define R500_ALPHA_MOD_A_NEG (1 << 17)
# define R500_ALPHA_MOD_A_ABS (2 << 17)
# define R500_ALPHA_MOD_A_NAB (3 << 17)
+# define R500_ALPHA_SEL_B_SHIFT 19
# define R500_ALPHA_SEL_B_SRC0 (0 << 19)
# define R500_ALPHA_SEL_B_SRC1 (1 << 19)
# define R500_ALPHA_SEL_B_SRC2 (2 << 19)
@@ -2777,6 +2779,7 @@ enum {
# define R500_ALU_RGBA_OP_MDV (12 << 0)
# define R500_ALU_RGBA_ADDRD(x) (x << 4)
# define R500_ALU_RGBA_ADDRD_REL (1 << 11)
+# define R500_ALU_RGBA_SEL_C_SHIFT 12
# define R500_ALU_RGBA_SEL_C_SRC0 (0 << 12)
# define R500_ALU_RGBA_SEL_C_SRC1 (1 << 12)
# define R500_ALU_RGBA_SEL_C_SRC2 (2 << 12)
@@ -2809,6 +2812,7 @@ enum {
# define R500_ALU_RGBA_MOD_C_NEG (1 << 23)
# define R500_ALU_RGBA_MOD_C_ABS (2 << 23)
# define R500_ALU_RGBA_MOD_C_NAB (3 << 23)
+# define R500_ALU_RGBA_ALPHA_SEL_C_SHIFT 25
# define R500_ALU_RGBA_ALPHA_SEL_C_SRC0 (0 << 25)
# define R500_ALU_RGBA_ALPHA_SEL_C_SRC1 (1 << 25)
# define R500_ALU_RGBA_ALPHA_SEL_C_SRC2 (2 << 25)
@@ -2826,6 +2830,7 @@ enum {
# define R500_ALU_RGBA_ALPHA_MOD_C_ABS (2 << 30)
# define R500_ALU_RGBA_ALPHA_MOD_C_NAB (3 << 30)
#define R500_US_ALU_RGB_INST_0 0xa000
+# define R500_ALU_RGB_SEL_A_SHIFT 0
# define R500_ALU_RGB_SEL_A_SRC0 (0 << 0)
# define R500_ALU_RGB_SEL_A_SRC1 (1 << 0)
# define R500_ALU_RGB_SEL_A_SRC2 (2 << 0)
@@ -2858,6 +2863,7 @@ enum {
# define R500_ALU_RGB_MOD_A_NEG (1 << 11)
# define R500_ALU_RGB_MOD_A_ABS (2 << 11)
# define R500_ALU_RGB_MOD_A_NAB (3 << 11)
+# define R500_ALU_RGB_SEL_B_SHIFT 13
# define R500_ALU_RGB_SEL_B_SRC0 (0 << 13)
# define R500_ALU_RGB_SEL_B_SRC1 (1 << 13)
# define R500_ALU_RGB_SEL_B_SRC2 (2 << 13)
@@ -2915,6 +2921,7 @@ enum {
# define R500_RGB_SRCP_OP_RGB1_PLUS_RGB0 (2 << 30)
# define R500_RGB_SRCP_OP_1_MINUS_RGB0 (3 << 30)
#define R500_US_CMN_INST_0 0xb800
+# define R500_INST_TYPE_MASK (3 << 0)
# define R500_INST_TYPE_ALU (0 << 0)
# define R500_INST_TYPE_OUT (1 << 0)
# define R500_INST_TYPE_FC (2 << 0)
diff --git a/src/mesa/drivers/dri/r300/r300_render.c b/src/mesa/drivers/dri/r300/r300_render.c
index 8f74f9d785e..69ff6d573e2 100644
--- a/src/mesa/drivers/dri/r300/r300_render.c
+++ b/src/mesa/drivers/dri/r300/r300_render.c
@@ -373,7 +373,7 @@ static int r300Fallback(GLcontext * ctx)
if (!r300->disable_lowimpact_fallback) {
FALLBACK_IF(ctx->Polygon.StippleFlag);
- FALLBACK_IF(ctx->Multisample.Enabled);
+ FALLBACK_IF(ctx->Multisample._Enabled);
FALLBACK_IF(ctx->Line.StippleFlag);
FALLBACK_IF(ctx->Line.SmoothFlag);
FALLBACK_IF(ctx->Point.SmoothFlag);
diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 592ee9ccc10..6931de4421d 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -70,20 +70,28 @@ extern void _tnl_UpdateFixedFunctionProgram(GLcontext * ctx);
static void r300BlendColor(GLcontext * ctx, const GLfloat cf[4])
{
- GLubyte color[4];
r300ContextPtr rmesa = R300_CONTEXT(ctx);
R300_STATECHANGE(rmesa, blend_color);
- CLAMPED_FLOAT_TO_UBYTE(color[0], cf[0]);
- CLAMPED_FLOAT_TO_UBYTE(color[1], cf[1]);
- CLAMPED_FLOAT_TO_UBYTE(color[2], cf[2]);
- CLAMPED_FLOAT_TO_UBYTE(color[3], cf[3]);
+ if (rmesa->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515) {
+ GLuint r = IROUND(cf[0]*1023.0f);
+ GLuint g = IROUND(cf[1]*1023.0f);
+ GLuint b = IROUND(cf[2]*1023.0f);
+ GLuint a = IROUND(cf[3]*1023.0f);
- rmesa->hw.blend_color.cmd[1] = PACK_COLOR_8888(color[3], color[0],
- color[1], color[2]);
- rmesa->hw.blend_color.cmd[2] = 0;
- rmesa->hw.blend_color.cmd[3] = 0;
+ rmesa->hw.blend_color.cmd[1] = r | (a << 16);
+ rmesa->hw.blend_color.cmd[2] = b | (g << 16);
+ } else {
+ GLubyte color[4];
+ CLAMPED_FLOAT_TO_UBYTE(color[0], cf[0]);
+ CLAMPED_FLOAT_TO_UBYTE(color[1], cf[1]);
+ CLAMPED_FLOAT_TO_UBYTE(color[2], cf[2]);
+ CLAMPED_FLOAT_TO_UBYTE(color[3], cf[3]);
+
+ rmesa->hw.blend_color.cmd[1] = PACK_COLOR_8888(color[3], color[0],
+ color[1], color[2]);
+ }
}
/**
@@ -1963,13 +1971,14 @@ static void r300VapCntl(r300ContextPtr rmesa, GLuint input_count,
if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV515)
rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (2 << R300_PVS_NUM_FPUS_SHIFT);
else if ((rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV530) ||
- (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV560))
+ (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV560) ||
+ (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV570))
rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (5 << R300_PVS_NUM_FPUS_SHIFT);
- else if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R420)
+ else if ((rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV410) ||
+ (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R420))
rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (6 << R300_PVS_NUM_FPUS_SHIFT);
else if ((rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R520) ||
- (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R580) ||
- (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_RV570))
+ (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R580))
rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (8 << R300_PVS_NUM_FPUS_SHIFT);
else
rmesa->hw.vap_cntl.cmd[R300_VAP_CNTL_INSTR] |= (4 << R300_PVS_NUM_FPUS_SHIFT);
@@ -2445,6 +2454,27 @@ void r300UpdateShaders(r300ContextPtr rmesa)
r300UpdateStateParameters(ctx, _NEW_PROGRAM);
}
+static const GLfloat *get_fragmentprogram_constant(GLcontext *ctx,
+ struct gl_program *program, struct prog_src_register srcreg)
+{
+ static const GLfloat dummy[4] = { 0, 0, 0, 0 };
+
+ switch(srcreg.File) {
+ case PROGRAM_LOCAL_PARAM:
+ return program->LocalParams[srcreg.Index];
+ case PROGRAM_ENV_PARAM:
+ return ctx->FragmentProgram.Parameters[srcreg.Index];
+ case PROGRAM_STATE_VAR:
+ case PROGRAM_NAMED_PARAM:
+ case PROGRAM_CONSTANT:
+ return program->Parameters->ParameterValues[srcreg.Index];
+ default:
+ _mesa_problem(ctx, "get_fragmentprogram_constant: Unknown\n");
+ return dummy;
+ }
+}
+
+
static void r300SetupPixelShader(r300ContextPtr rmesa)
{
GLcontext *ctx = rmesa->radeon.glCtx;
@@ -2467,26 +2497,17 @@ static void r300SetupPixelShader(r300ContextPtr rmesa)
r300SetupTextures(ctx);
R300_STATECHANGE(rmesa, fpi[0]);
- rmesa->hw.fpi[0].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_RGB_INST_0, code->alu_end + 1);
- for (i = 0; i <= code->alu_end; i++) {
- rmesa->hw.fpi[0].cmd[R300_FPI_INSTR_0 + i] = code->alu.inst[i].inst0;
- }
-
R300_STATECHANGE(rmesa, fpi[1]);
- rmesa->hw.fpi[1].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_RGB_ADDR_0, code->alu_end + 1);
- for (i = 0; i <= code->alu_end; i++) {
- rmesa->hw.fpi[1].cmd[R300_FPI_INSTR_0 + i] = code->alu.inst[i].inst1;
- }
-
R300_STATECHANGE(rmesa, fpi[2]);
- rmesa->hw.fpi[2].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_ALPHA_INST_0, code->alu_end + 1);
- for (i = 0; i <= code->alu_end; i++) {
- rmesa->hw.fpi[2].cmd[R300_FPI_INSTR_0 + i] = code->alu.inst[i].inst2;
- }
-
R300_STATECHANGE(rmesa, fpi[3]);
- rmesa->hw.fpi[3].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_ALPHA_ADDR_0, code->alu_end + 1);
- for (i = 0; i <= code->alu_end; i++) {
+ rmesa->hw.fpi[0].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_RGB_INST_0, code->alu.length);
+ rmesa->hw.fpi[1].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_RGB_ADDR_0, code->alu.length);
+ rmesa->hw.fpi[2].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_ALPHA_INST_0, code->alu.length);
+ rmesa->hw.fpi[3].cmd[R300_FPI_CMD_0] = cmdpacket0(R300_US_ALU_ALPHA_ADDR_0, code->alu.length);
+ for (i = 0; i < code->alu.length; i++) {
+ rmesa->hw.fpi[0].cmd[R300_FPI_INSTR_0 + i] = code->alu.inst[i].inst0;
+ rmesa->hw.fpi[1].cmd[R300_FPI_INSTR_0 + i] = code->alu.inst[i].inst1;
+ rmesa->hw.fpi[2].cmd[R300_FPI_INSTR_0 + i] = code->alu.inst[i].inst2;
rmesa->hw.fpi[3].cmd[R300_FPI_INSTR_0 + i] = code->alu.inst[i].inst3;
}
@@ -2494,10 +2515,10 @@ static void r300SetupPixelShader(r300ContextPtr rmesa)
rmesa->hw.fp.cmd[R300_FP_CNTL0] = code->cur_node | (code->first_node_has_tex << 3);
rmesa->hw.fp.cmd[R300_FP_CNTL1] = code->max_temp_idx;
rmesa->hw.fp.cmd[R300_FP_CNTL2] =
- (code->alu_offset << R300_PFS_CNTL_ALU_OFFSET_SHIFT) |
- (code->alu_end << R300_PFS_CNTL_ALU_END_SHIFT) |
- (code->tex_offset << R300_PFS_CNTL_TEX_OFFSET_SHIFT) |
- (code->tex_end << R300_PFS_CNTL_TEX_END_SHIFT);
+ (0 << R300_PFS_CNTL_ALU_OFFSET_SHIFT) |
+ ((code->alu.length-1) << R300_PFS_CNTL_ALU_END_SHIFT) |
+ (0 << R300_PFS_CNTL_TEX_OFFSET_SHIFT) |
+ ((code->tex.length ? code->tex.length-1 : 0) << R300_PFS_CNTL_TEX_END_SHIFT);
/* I just want to say, the way these nodes are stored.. weird.. */
for (i = 0, k = (4 - (code->cur_node + 1)); i < 4; i++, k++) {
if (i < (code->cur_node + 1)) {
@@ -2515,10 +2536,12 @@ static void r300SetupPixelShader(r300ContextPtr rmesa)
R300_STATECHANGE(rmesa, fpp);
rmesa->hw.fpp.cmd[R300_FPP_CMD_0] = cmdpacket0(R300_PFS_PARAM_0_X, code->const_nr * 4);
for (i = 0; i < code->const_nr; i++) {
- rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 0] = r300PackFloat24(code->constant[i][0]);
- rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 1] = r300PackFloat24(code->constant[i][1]);
- rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 2] = r300PackFloat24(code->constant[i][2]);
- rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 3] = r300PackFloat24(code->constant[i][3]);
+ const GLfloat *constant = get_fragmentprogram_constant(ctx,
+ &fp->mesa_program.Base, code->constant[i]);
+ rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 0] = r300PackFloat24(constant[0]);
+ rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 1] = r300PackFloat24(constant[1]);
+ rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 2] = r300PackFloat24(constant[2]);
+ rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 3] = r300PackFloat24(constant[3]);
}
}
@@ -2587,10 +2610,12 @@ static void r500SetupPixelShader(r300ContextPtr rmesa)
R300_STATECHANGE(rmesa, r500fp_const);
for (i = 0; i < code->const_nr; i++) {
- rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 0] = r300PackFloat32(code->constant[i][0]);
- rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 1] = r300PackFloat32(code->constant[i][1]);
- rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 2] = r300PackFloat32(code->constant[i][2]);
- rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 3] = r300PackFloat32(code->constant[i][3]);
+ const GLfloat *constant = get_fragmentprogram_constant(ctx,
+ &fp->mesa_program.Base, code->constant[i]);
+ rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 0] = r300PackFloat32(constant[0]);
+ rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 1] = r300PackFloat32(constant[1]);
+ rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 2] = r300PackFloat32(constant[2]);
+ rmesa->hw.r500fp_const.cmd[R300_FPP_PARAM_0 + 4 * i + 3] = r300PackFloat32(constant[3]);
}
bump_r500fp_const_count(rmesa->hw.r500fp_const.cmd, code->const_nr * 4);
diff --git a/src/mesa/drivers/dri/r300/r500_fragprog.c b/src/mesa/drivers/dri/r300/r500_fragprog.c
index 5d72ec2784f..7b18efa69d6 100644
--- a/src/mesa/drivers/dri/r300/r500_fragprog.c
+++ b/src/mesa/drivers/dri/r300/r500_fragprog.c
@@ -27,11 +27,9 @@
#include "r500_fragprog.h"
-static void reset_srcreg(struct prog_src_register* reg)
-{
- _mesa_bzero(reg, sizeof(*reg));
- reg->Swizzle = SWIZZLE_NOOP;
-}
+#include "radeon_nqssadce.h"
+#include "radeon_program_alu.h"
+
/**
* Transform TEX, TXP, TXB, and KIL instructions in the following way:
@@ -41,7 +39,7 @@ static void reset_srcreg(struct prog_src_register* reg)
*
*/
static GLboolean transform_TEX(
- struct radeon_program_transform_context* context,
+ struct radeon_transform_context *t,
struct prog_instruction* orig_inst, void* data)
{
struct r500_fragment_program_compiler *compiler =
@@ -58,12 +56,11 @@ static GLboolean transform_TEX(
/* ARB_shadow & EXT_shadow_funcs */
if (inst.Opcode != OPCODE_KIL &&
- compiler->fp->mesa_program.Base.ShadowSamplers & (1 << inst.TexSrcUnit)) {
+ t->Program->ShadowSamplers & (1 << inst.TexSrcUnit)) {
GLuint comparefunc = GL_NEVER + compiler->fp->state.unit[inst.TexSrcUnit].texture_compare_func;
if (comparefunc == GL_NEVER || comparefunc == GL_ALWAYS) {
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
+ tgt = radeonAppendInstructions(t->Program, 1);
tgt->Opcode = OPCODE_MOV;
tgt->DstReg.File = inst.DstReg.File;
@@ -75,70 +72,72 @@ static GLboolean transform_TEX(
}
inst.DstReg.File = PROGRAM_TEMPORARY;
- inst.DstReg.Index = radeonCompilerAllocateTemporary(context->compiler);
+ inst.DstReg.Index = radeonFindFreeTemporary(t);
inst.DstReg.WriteMask = WRITEMASK_XYZW;
}
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
+ tgt = radeonAppendInstructions(t->Program, 1);
_mesa_copy_instructions(tgt, &inst, 1);
if (inst.Opcode != OPCODE_KIL &&
- compiler->fp->mesa_program.Base.ShadowSamplers & (1 << inst.TexSrcUnit)) {
+ t->Program->ShadowSamplers & (1 << inst.TexSrcUnit)) {
GLuint comparefunc = GL_NEVER + compiler->fp->state.unit[inst.TexSrcUnit].texture_compare_func;
GLuint depthmode = compiler->fp->state.unit[inst.TexSrcUnit].depth_texture_mode;
-
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 2);
-
- tgt[0].Opcode = OPCODE_MAD;
- tgt[0].DstReg = inst.DstReg;
- tgt[0].DstReg.WriteMask = orig_inst->DstReg.WriteMask;
- tgt[0].SrcReg[0].File = PROGRAM_TEMPORARY;
- tgt[0].SrcReg[0].Index = inst.DstReg.Index;
+ int rcptemp = radeonFindFreeTemporary(t);
+
+ tgt = radeonAppendInstructions(t->Program, 3);
+
+ tgt[0].Opcode = OPCODE_RCP;
+ tgt[0].DstReg.File = PROGRAM_TEMPORARY;
+ tgt[0].DstReg.Index = rcptemp;
+ tgt[0].DstReg.WriteMask = WRITEMASK_W;
+ tgt[0].SrcReg[0] = inst.SrcReg[0];
+ tgt[0].SrcReg[0].Swizzle = SWIZZLE_WWWW;
+
+ tgt[1].Opcode = OPCODE_MAD;
+ tgt[1].DstReg = inst.DstReg;
+ tgt[1].DstReg.WriteMask = orig_inst->DstReg.WriteMask;
+ tgt[1].SrcReg[0] = inst.SrcReg[0];
+ tgt[1].SrcReg[0].Swizzle = SWIZZLE_ZZZZ;
+ tgt[1].SrcReg[1].File = PROGRAM_TEMPORARY;
+ tgt[1].SrcReg[1].Index = rcptemp;
+ tgt[1].SrcReg[1].Swizzle = SWIZZLE_WWWW;
+ tgt[1].SrcReg[2].File = PROGRAM_TEMPORARY;
+ tgt[1].SrcReg[2].Index = inst.DstReg.Index;
if (depthmode == 0) /* GL_LUMINANCE */
- tgt[0].SrcReg[0].Swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z);
+ tgt[1].SrcReg[2].Swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z);
else if (depthmode == 2) /* GL_ALPHA */
- tgt[0].SrcReg[0].Swizzle = SWIZZLE_WWWW;
- tgt[0].SrcReg[1].File = PROGRAM_BUILTIN;
- tgt[0].SrcReg[1].Swizzle = SWIZZLE_1111;
- tgt[0].SrcReg[2] = inst.SrcReg[0];
- tgt[0].SrcReg[2].Swizzle = SWIZZLE_ZZZZ;
+ tgt[1].SrcReg[2].Swizzle = SWIZZLE_WWWW;
/* Recall that SrcReg[0] is tex, SrcReg[2] is r and:
* r < tex <=> -tex+r < 0
* r >= tex <=> not (-tex+r < 0 */
if (comparefunc == GL_LESS || comparefunc == GL_GEQUAL)
- tgt[0].SrcReg[0].NegateBase = tgt[0].SrcReg[0].NegateBase ^ NEGATE_XYZW;
+ tgt[1].SrcReg[2].NegateBase = tgt[0].SrcReg[2].NegateBase ^ NEGATE_XYZW;
else
- tgt[0].SrcReg[2].NegateBase = tgt[0].SrcReg[2].NegateBase ^ NEGATE_XYZW;
+ tgt[1].SrcReg[0].NegateBase = tgt[0].SrcReg[0].NegateBase ^ NEGATE_XYZW;
- tgt[1].Opcode = OPCODE_CMP;
- tgt[1].DstReg = orig_inst->DstReg;
- tgt[1].SrcReg[0].File = PROGRAM_TEMPORARY;
- tgt[1].SrcReg[0].Index = tgt[0].DstReg.Index;
- tgt[1].SrcReg[1].File = PROGRAM_BUILTIN;
- tgt[1].SrcReg[2].File = PROGRAM_BUILTIN;
+ tgt[2].Opcode = OPCODE_CMP;
+ tgt[2].DstReg = orig_inst->DstReg;
+ tgt[2].SrcReg[0].File = PROGRAM_TEMPORARY;
+ tgt[2].SrcReg[0].Index = tgt[1].DstReg.Index;
+ tgt[2].SrcReg[1].File = PROGRAM_BUILTIN;
+ tgt[2].SrcReg[2].File = PROGRAM_BUILTIN;
if (comparefunc == GL_LESS || comparefunc == GL_GREATER) {
- tgt[1].SrcReg[1].Swizzle = SWIZZLE_1111;
- tgt[1].SrcReg[2].Swizzle = SWIZZLE_0000;
+ tgt[2].SrcReg[1].Swizzle = SWIZZLE_1111;
+ tgt[2].SrcReg[2].Swizzle = SWIZZLE_0000;
} else {
- tgt[1].SrcReg[1].Swizzle = SWIZZLE_0000;
- tgt[1].SrcReg[2].Swizzle = SWIZZLE_1111;
+ tgt[2].SrcReg[1].Swizzle = SWIZZLE_0000;
+ tgt[2].SrcReg[2].Swizzle = SWIZZLE_1111;
}
} else if (destredirect) {
- tgt = radeonClauseInsertInstructions(context->compiler, context->dest,
- context->dest->NumInstructions, 1);
+ tgt = radeonAppendInstructions(t->Program, 1);
- tgt->Opcode = OPCODE_MAD;
+ tgt->Opcode = OPCODE_MOV;
tgt->DstReg = orig_inst->DstReg;
tgt->SrcReg[0].File = PROGRAM_TEMPORARY;
tgt->SrcReg[0].Index = inst.DstReg.Index;
- tgt->SrcReg[1].File = PROGRAM_BUILTIN;
- tgt->SrcReg[1].Swizzle = SWIZZLE_1111;
- tgt->SrcReg[2].File = PROGRAM_BUILTIN;
- tgt->SrcReg[2].Swizzle = SWIZZLE_0000;
}
return GL_TRUE;
@@ -179,9 +178,10 @@ static void insert_WPOS_trailer(struct r500_fragment_program_compiler *compiler)
struct prog_instruction *fpi;
GLuint window_index;
int i = 0;
- GLuint tempregi = radeonCompilerAllocateTemporary(&compiler->compiler);
+ GLuint tempregi = _mesa_find_free_register(compiler->program, PROGRAM_TEMPORARY);
- fpi = radeonClauseInsertInstructions(&compiler->compiler, &compiler->compiler.Clauses[0], 0, 3);
+ _mesa_insert_instructions(compiler->program, 0, 3);
+ fpi = compiler->program->Instructions;
/* perspective divide */
fpi[i].Opcode = OPCODE_RCP;
@@ -213,7 +213,7 @@ static void insert_WPOS_trailer(struct r500_fragment_program_compiler *compiler)
i++;
/* viewport transformation */
- window_index = _mesa_add_state_reference(compiler->fp->mesa_program.Base.Parameters, tokens);
+ window_index = _mesa_add_state_reference(compiler->program->Parameters, tokens);
fpi[i].Opcode = OPCODE_MAD;
@@ -238,7 +238,7 @@ static void insert_WPOS_trailer(struct r500_fragment_program_compiler *compiler)
MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_ZERO);
i++;
- for (; i < compiler->compiler.Clauses[0].NumInstructions; ++i) {
+ for (; i < compiler->program->NumInstructions; ++i) {
int reg;
for (reg = 0; reg < 3; reg++) {
if (fpi[i].SrcReg[reg].File == PROGRAM_INPUT &&
@@ -251,6 +251,57 @@ static void insert_WPOS_trailer(struct r500_fragment_program_compiler *compiler)
}
+static void nqssadce_init(struct nqssadce_state* s)
+{
+ s->Outputs[FRAG_RESULT_COLR].Sourced = WRITEMASK_XYZW;
+ s->Outputs[FRAG_RESULT_DEPR].Sourced = WRITEMASK_W;
+}
+
+static GLboolean is_native_swizzle(GLuint opcode, struct prog_src_register reg)
+{
+ GLuint relevant;
+ int i;
+
+ if (reg.Abs)
+ return GL_TRUE;
+
+ relevant = 0;
+ for(i = 0; i < 3; ++i) {
+ GLuint swz = GET_SWZ(reg.Swizzle, i);
+ if (swz != SWIZZLE_NIL && swz != SWIZZLE_ZERO)
+ relevant |= 1 << i;
+ }
+ if ((reg.NegateBase & relevant) && ((reg.NegateBase & relevant) != relevant))
+ return GL_FALSE;
+
+ return GL_TRUE;
+}
+
+/**
+ * Implement a non-native swizzle. This function assumes that
+ * is_native_swizzle returned true.
+ */
+static void nqssadce_build_swizzle(struct nqssadce_state *s,
+ struct prog_dst_register dst, struct prog_src_register src)
+{
+ struct prog_instruction *inst;
+
+ _mesa_insert_instructions(s->Program, s->IP, 2);
+ inst = s->Program->Instructions + s->IP;
+
+ inst[0].Opcode = OPCODE_MOV;
+ inst[0].DstReg = dst;
+ inst[0].DstReg.WriteMask &= src.NegateBase;
+ inst[0].SrcReg[0] = src;
+
+ inst[1].Opcode = OPCODE_MOV;
+ inst[1].DstReg = dst;
+ inst[1].DstReg.WriteMask &= ~src.NegateBase;
+ inst[1].SrcReg[0] = src;
+
+ s->IP += 2;
+}
+
static GLuint build_dtm(GLuint depthmode)
{
switch(depthmode) {
@@ -310,36 +361,57 @@ void r500TranslateFragmentShader(r300ContextPtr r300,
compiler.r300 = r300;
compiler.fp = fp;
compiler.code = &fp->code;
+ compiler.program = _mesa_clone_program(r300->radeon.glCtx, &fp->mesa_program.Base);
- radeonCompilerInit(&compiler.compiler, r300->radeon.glCtx, &fp->mesa_program.Base);
+ if (RADEON_DEBUG & DEBUG_PIXEL) {
+ _mesa_printf("Compiler: Initial program:\n");
+ _mesa_print_program(compiler.program);
+ }
insert_WPOS_trailer(&compiler);
- struct radeon_program_transformation transformations[1] = {
- { &transform_TEX, &compiler }
+ struct radeon_program_transformation transformations[3] = {
+ { &transform_TEX, &compiler },
+ { &radeonTransformALU, 0 },
+ { &radeonTransformTrigScale, 0 }
+ };
+ radeonLocalTransform(r300->radeon.glCtx, compiler.program,
+ 3, transformations);
+
+ if (RADEON_DEBUG & DEBUG_PIXEL) {
+ _mesa_printf("Compiler: after native rewrite:\n");
+ _mesa_print_program(compiler.program);
+ }
+
+ struct radeon_nqssadce_descr nqssadce = {
+ .Init = &nqssadce_init,
+ .IsNativeSwizzle = &is_native_swizzle,
+ .BuildSwizzle = &nqssadce_build_swizzle,
+ .RewriteDepthOut = GL_TRUE
};
- radeonClauseLocalTransform(&compiler.compiler,
- &compiler.compiler.Clauses[0],
- 1, transformations);
+ radeonNqssaDce(r300->radeon.glCtx, compiler.program, &nqssadce);
if (RADEON_DEBUG & DEBUG_PIXEL) {
- _mesa_printf("Compiler state after transformations:\n");
- radeonCompilerDump(&compiler.compiler);
+ _mesa_printf("Compiler: after NqSSA-DCE:\n");
+ _mesa_print_program(compiler.program);
}
fp->translated = r500FragmentProgramEmit(&compiler);
- radeonCompilerCleanup(&compiler.compiler);
+ /* Subtle: Rescue any parameters that have been added during transformations */
+ _mesa_free_parameter_list(fp->mesa_program.Base.Parameters);
+ fp->mesa_program.Base.Parameters = compiler.program->Parameters;
+ compiler.program->Parameters = 0;
+
+ _mesa_reference_program(r300->radeon.glCtx, &compiler.program, 0);
r300UpdateStateParameters(r300->radeon.glCtx, _NEW_PROGRAM);
if (RADEON_DEBUG & DEBUG_PIXEL) {
- fprintf(stderr, "Mesa program:\n");
- fprintf(stderr, "-------------\n");
- _mesa_print_program(&fp->mesa_program.Base);
- fflush(stdout);
- if (fp->translated)
+ if (fp->translated) {
+ _mesa_printf("Machine-readable code:\n");
dump_program(&fp->code);
+ }
}
}
@@ -458,9 +530,8 @@ static void dump_program(struct r500_fragment_program_code *code)
if (code->const_nr) {
fprintf(stderr, "--------\nConstants:\n");
for (n = 0; n < code->const_nr; n++) {
- fprintf(stderr, "Constant %d: %f %f\n\t %f %f\n", n,
- code->constant[n][0], code->constant[n][1], code->constant[n][2],
- code->constant[n][3]);
+ fprintf(stderr, "Constant %d: %i[%i]\n", n,
+ code->constant[n].File, code->constant[n].Index);
}
fprintf(stderr, "--------\n");
}
diff --git a/src/mesa/drivers/dri/r300/r500_fragprog.h b/src/mesa/drivers/dri/r300/r500_fragprog.h
index ff6a9002c14..8641ceeb8f4 100644
--- a/src/mesa/drivers/dri/r300/r500_fragprog.h
+++ b/src/mesa/drivers/dri/r300/r500_fragprog.h
@@ -45,36 +45,6 @@
#include "r300_state.h"
#include "radeon_program.h"
-/* supported hw opcodes */
-#define PFS_OP_MAD 0
-#define PFS_OP_DP3 1
-#define PFS_OP_DP4 2
-#define PFS_OP_MIN 3
-#define PFS_OP_MAX 4
-#define PFS_OP_CMP 5
-#define PFS_OP_FRC 6
-#define PFS_OP_EX2 7
-#define PFS_OP_LG2 8
-#define PFS_OP_RCP 9
-#define PFS_OP_RSQ 10
-#define PFS_OP_REPL_ALPHA 11
-#define PFS_OP_CMPH 12
-#define MAX_PFS_OP 12
-
-#define PFS_FLAG_SAT (1 << 0)
-#define PFS_FLAG_ABS (1 << 1)
-
-#define ARG_NEG (1 << 5)
-#define ARG_ABS (1 << 6)
-#define ARG_MASK (127 << 0)
-#define ARG_STRIDE 7
-#define SRC_CONST (1 << 5)
-#define SRC_MASK (63 << 0)
-#define SRC_STRIDE 6
-
-#define DRI_CONF_FP_OPTIMIZATION_SPEED 0
-#define DRI_CONF_FP_OPTIMIZATION_QUALITY 1
-
struct r500_fragment_program;
extern void r500TranslateFragmentShader(r300ContextPtr r300,
@@ -84,7 +54,7 @@ struct r500_fragment_program_compiler {
r300ContextPtr r300;
struct r500_fragment_program *fp;
struct r500_fragment_program_code *code;
- struct radeon_compiler compiler;
+ struct gl_program *program;
};
extern GLboolean r500FragmentProgramEmit(struct r500_fragment_program_compiler *compiler);
diff --git a/src/mesa/drivers/dri/r300/r500_fragprog_emit.c b/src/mesa/drivers/dri/r300/r500_fragprog_emit.c
index 3dc72af87ab..b6f52474e26 100644
--- a/src/mesa/drivers/dri/r300/r500_fragprog_emit.c
+++ b/src/mesa/drivers/dri/r300/r500_fragprog_emit.c
@@ -43,1491 +43,281 @@
*
*/
-#include "glheader.h"
-#include "macros.h"
-#include "enums.h"
-#include "shader/prog_instruction.h"
-#include "shader/prog_parameter.h"
-#include "shader/prog_print.h"
-
-#include "r300_context.h"
#include "r500_fragprog.h"
-#include "r300_reg.h"
-#include "r300_state.h"
-
-/* Mapping Mesa registers to R500 temporaries */
-struct reg_acc {
- int reg; /* Assigned hw temp */
- unsigned int refcount; /* Number of uses by mesa program */
-};
-
-/**
- * Describe the current lifetime information for an R300 temporary
- */
-struct reg_lifetime {
- /* Index of the first slot where this register is free in the sense
- that it can be used as a new destination register.
- This is -1 if the register has been assigned to a Mesa register
- and the last access to the register has not yet been emitted */
- int free;
-
- /* Index of the first slot where this register is currently reserved.
- This is used to stop e.g. a scalar operation from being moved
- before the allocation time of a register that was first allocated
- for a vector operation. */
- int reserved;
-
- /* Index of the first slot in which the register can be used as a
- source without losing the value that is written by the last
- emitted instruction that writes to the register */
- int vector_valid;
- int scalar_valid;
- /* Index to the slot where the register was last read.
- This is also the first slot in which the register may be written again */
- int vector_lastread;
- int scalar_lastread;
-};
-
-/**
- * Store usage information about an ALU instruction slot during the
- * compilation of a fragment program.
- */
-#define SLOT_SRC_VECTOR (1<<0)
-#define SLOT_SRC_SCALAR (1<<3)
-#define SLOT_SRC_BOTH (SLOT_SRC_VECTOR | SLOT_SRC_SCALAR)
-#define SLOT_OP_VECTOR (1<<16)
-#define SLOT_OP_SCALAR (1<<17)
-#define SLOT_OP_BOTH (SLOT_OP_VECTOR | SLOT_OP_SCALAR)
+#include "radeon_program_pair.h"
-struct r500_pfs_compile_slot {
- /* Bitmask indicating which parts of the slot are used, using SLOT_ constants
- defined above */
- unsigned int used;
- /* Selected sources */
- int vsrc[3];
- int ssrc[3];
-};
-
-/**
- * Store information during compilation of fragment programs.
- */
-struct r500_pfs_compile_state {
- struct r500_fragment_program_compiler *compiler;
+#define PROG_CODE \
+ struct r500_fragment_program_compiler *c = (struct r500_fragment_program_compiler*)data; \
+ struct r500_fragment_program_code *code = c->code
- /* number of ALU slots used so far */
- int nrslots;
-
- /* Track which (parts of) slots are already filled with instructions */
- struct r500_pfs_compile_slot slot[PFS_MAX_ALU_INST];
-
- /* Track the validity of R300 temporaries */
- struct reg_lifetime hwtemps[PFS_NUM_TEMP_REGS];
-
- /* Used to map Mesa's inputs/temps onto hardware temps */
- int temp_in_use;
- struct reg_acc temps[PFS_NUM_TEMP_REGS];
- struct reg_acc inputs[32]; /* don't actually need 32... */
-
- /* Track usage of hardware temps, for register allocation,
- * indirection detection, etc. */
- GLuint used_in_node;
- GLuint dest_in_node;
-};
-
-/*
- * Useful macros and values
- */
-#define ERROR(fmt, args...) do { \
+#define error(fmt, args...) do { \
fprintf(stderr, "%s::%s(): " fmt "\n", \
__FILE__, __FUNCTION__, ##args); \
- cs->compiler->fp->error = GL_TRUE; \
} while(0)
-#define PROG_CODE struct r500_fragment_program_code *code = cs->compiler->code
-
-#define R500_US_NUM_TEMP_REGS 128
-#define R500_US_NUM_CONST_REGS 256
-
-/* "Register" flags */
-#define REG_CONSTANT (1 << 8)
-#define REG_SRC_REL (1 << 9)
-#define REG_DEST_REL (1 << 7)
-
-/* Swizzle tools */
-#define R500_SWIZZLE_ZERO 4
-#define R500_SWIZZLE_HALF 5
-#define R500_SWIZZLE_ONE 6
-#define R500_SWIZ_RGB_ZERO ((4 << 0) | (4 << 3) | (4 << 6))
-#define R500_SWIZ_RGB_ONE ((6 << 0) | (6 << 3) | (6 << 6))
-#define R500_SWIZ_RGB_RGB ((0 << 0) | (1 << 3) | (2 << 6))
-#define R500_SWIZ_MOD_NEG 1
-#define R500_SWIZ_MOD_ABS 2
-#define R500_SWIZ_MOD_NEG_ABS 3
-/* Swizzles for inst2 */
-#define MAKE_SWIZ_TEX_STRQ(x) (x << 8)
-#define MAKE_SWIZ_TEX_RGBA(x) (x << 24)
-/* Swizzles for inst3 */
-#define MAKE_SWIZ_RGB_A(x) (x << 2)
-#define MAKE_SWIZ_RGB_B(x) (x << 15)
-/* Swizzles for inst4 */
-#define MAKE_SWIZ_ALPHA_A(x) (x << 14)
-#define MAKE_SWIZ_ALPHA_B(x) (x << 21)
-/* Swizzle for inst5 */
-#define MAKE_SWIZ_RGBA_C(x) (x << 14)
-#define MAKE_SWIZ_ALPHA_C(x) (x << 27)
-
-/* Writemasks */
-#define R500_WRITEMASK_G 0x2
-#define R500_WRITEMASK_B 0x4
-#define R500_WRITEMASK_RGB 0x7
-#define R500_WRITEMASK_A 0x8
-#define R500_WRITEMASK_AR 0x9
-#define R500_WRITEMASK_AG 0xA
-#define R500_WRITEMASK_ARG 0xB
-#define R500_WRITEMASK_AB 0xC
-#define R500_WRITEMASK_ARGB 0xF
-
-/* 1/(2pi), needed for quick modulus in trig insts
- * Thanks to glisse for pointing out how to do it! */
-static const GLfloat RCP_2PI[] = {0.15915494309189535,
- 0.15915494309189535,
- 0.15915494309189535,
- 0.15915494309189535};
-
-static const GLfloat LIT[] = {127.999999,
- 127.999999,
- 127.999999,
- -127.999999};
-
-static INLINE GLuint make_rgb_swizzle(struct prog_src_register src) {
- GLuint swiz = 0x0;
- GLuint temp;
- /* This could be optimized, but it should be plenty fast already. */
- int i;
- for (i = 0; i < 3; i++) {
- temp = GET_SWZ(src.Swizzle, i);
- /* Fix SWIZZLE_ONE */
- if (temp == 5) temp++;
- swiz |= temp << i*3;
- }
- if (src.NegateBase)
- swiz |= (R500_SWIZ_MOD_NEG << 9);
- return swiz;
-}
-
-static INLINE GLuint make_rgba_swizzle(GLuint src) {
- GLuint swiz = 0x0;
- GLuint temp;
- int i;
- for (i = 0; i < 4; i++) {
- temp = GET_SWZ(src, i);
- /* Fix SWIZZLE_ONE */
- if (temp == 5) temp++;
- swiz |= temp << i*3;
- }
- return swiz;
-}
-
-static INLINE GLuint make_alpha_swizzle(struct prog_src_register src) {
- GLuint swiz = GET_SWZ(src.Swizzle, 3);
-
- if (swiz == 5) swiz++;
-
- if (src.NegateBase)
- swiz |= (R500_SWIZ_MOD_NEG << 3);
-
- return swiz;
-}
-
-static INLINE GLuint make_sop_swizzle(struct prog_src_register src) {
- GLuint swiz = GET_SWZ(src.Swizzle, 0);
-
- if (swiz == 5) swiz++;
- return swiz;
-}
-
-static INLINE GLuint make_strq_swizzle(struct prog_src_register src) {
- GLuint swiz = 0x0, temp = 0x0;
- int i;
- for (i = 0; i < 4; i++) {
- temp = GET_SWZ(src.Swizzle, i) & 0x3;
- swiz |= temp << i*2;
- }
- return swiz;
-}
-
-static int get_temp(struct r500_pfs_compile_state *cs, int slot) {
-
- PROG_CODE;
-
- int r = code->temp_reg_offset + cs->temp_in_use + slot;
-
- if (r > R500_US_NUM_TEMP_REGS) {
- ERROR("Too many temporary registers requested, can't compile!\n");
- }
- return r;
-}
-
-/* Borrowed verbatim from r300_fragprog since it hasn't changed. */
-static GLuint emit_const4fv(struct r500_pfs_compile_state *cs,
- const GLfloat * cp)
+/**
+ * Callback to register hardware constants.
+ */
+static GLboolean emit_const(void *data, GLuint file, GLuint idx, GLuint *hwindex)
{
PROG_CODE;
- GLuint reg = 0x0;
- int index;
-
- for (index = 0; index < code->const_nr; ++index) {
- if (code->constant[index] == cp)
+ for (*hwindex = 0; *hwindex < code->const_nr; ++*hwindex) {
+ if (code->constant[*hwindex].File == file &&
+ code->constant[*hwindex].Index == idx)
break;
}
- if (index >= code->const_nr) {
- if (index >= R500_US_NUM_CONST_REGS) {
- ERROR("Out of hw constants!\n");
- return reg;
+ if (*hwindex >= code->const_nr) {
+ if (*hwindex >= PFS_NUM_CONST_REGS) {
+ error("Out of hw constants!\n");
+ return GL_FALSE;
}
code->const_nr++;
- code->constant[index] = cp;
+ code->constant[*hwindex].File = file;
+ code->constant[*hwindex].Index = idx;
}
- reg = index | REG_CONSTANT;
- return reg;
+ return GL_TRUE;
}
-static GLuint make_src(struct r500_pfs_compile_state *cs, struct prog_src_register src) {
- PROG_CODE;
- GLuint reg;
- switch (src.File) {
- case PROGRAM_TEMPORARY:
- reg = src.Index + code->temp_reg_offset;
- break;
- case PROGRAM_INPUT:
- reg = cs->inputs[src.Index].reg;
- break;
- case PROGRAM_LOCAL_PARAM:
- reg = emit_const4fv(cs,
- cs->compiler->fp->mesa_program.Base.LocalParams[src.Index]);
- break;
- case PROGRAM_ENV_PARAM:
- reg = emit_const4fv(cs,
- cs->compiler->compiler.Ctx->FragmentProgram.Parameters[src.Index]);
- break;
- case PROGRAM_STATE_VAR:
- case PROGRAM_NAMED_PARAM:
- case PROGRAM_CONSTANT:
- reg = emit_const4fv(cs,
- cs->compiler->fp->mesa_program.Base.Parameters->ParameterValues[src.Index]);
- break;
- case PROGRAM_BUILTIN:
- reg = 0x0;
- break;
+static GLuint translate_rgb_op(GLuint opcode)
+{
+ switch(opcode) {
+ case OPCODE_CMP: return R500_ALU_RGBA_OP_CMP;
+ case OPCODE_DP3: return R500_ALU_RGBA_OP_DP3;
+ case OPCODE_DP4: return R500_ALU_RGBA_OP_DP4;
+ case OPCODE_FRC: return R500_ALU_RGBA_OP_FRC;
default:
- ERROR("Can't handle src.File %x\n", src.File);
- reg = 0x0;
- break;
+ error("translate_rgb_op(%d): unknown opcode\n", opcode);
+ /* fall through */
+ case OPCODE_NOP:
+ /* fall through */
+ case OPCODE_MAD: return R500_ALU_RGBA_OP_MAD;
+ case OPCODE_MAX: return R500_ALU_RGBA_OP_MAX;
+ case OPCODE_MIN: return R500_ALU_RGBA_OP_MIN;
+ case OPCODE_REPL_ALPHA: return R500_ALU_RGBA_OP_SOP;
}
- return reg;
}
-static GLuint make_dest(struct r500_pfs_compile_state *cs, struct prog_dst_register dest) {
- PROG_CODE;
- GLuint reg;
- switch (dest.File) {
- case PROGRAM_TEMPORARY:
- reg = dest.Index + code->temp_reg_offset;
- break;
- case PROGRAM_OUTPUT:
- /* Eventually we may need to handle multiple
- * rendering targets... */
- reg = dest.Index;
- break;
- case PROGRAM_BUILTIN:
- reg = 0x0;
- break;
+static GLuint translate_alpha_op(GLuint opcode)
+{
+ switch(opcode) {
+ case OPCODE_CMP: return R500_ALPHA_OP_CMP;
+ case OPCODE_COS: return R500_ALPHA_OP_COS;
+ case OPCODE_DP3: return R500_ALPHA_OP_DP;
+ case OPCODE_DP4: return R500_ALPHA_OP_DP;
+ case OPCODE_EX2: return R500_ALPHA_OP_EX2;
+ case OPCODE_FRC: return R500_ALPHA_OP_FRC;
+ case OPCODE_LG2: return R500_ALPHA_OP_LN2;
default:
- ERROR("Can't handle dest.File %x\n", dest.File);
- reg = 0x0;
- break;
+ error("translate_alpha_op(%d): unknown opcode\n", opcode);
+ /* fall through */
+ case OPCODE_NOP:
+ /* fall through */
+ case OPCODE_MAD: return R500_ALPHA_OP_MAD;
+ case OPCODE_MAX: return R500_ALPHA_OP_MAX;
+ case OPCODE_MIN: return R500_ALPHA_OP_MIN;
+ case OPCODE_RCP: return R500_ALPHA_OP_RCP;
+ case OPCODE_RSQ: return R500_ALPHA_OP_RSQ;
+ case OPCODE_SIN: return R500_ALPHA_OP_SIN;
}
- return reg;
}
-static void emit_tex(struct r500_pfs_compile_state *cs,
- struct prog_instruction *fpi, int dest, int counter)
+static GLuint fix_hw_swizzle(GLuint swz)
{
- PROG_CODE;
- int hwsrc, hwdest;
- GLuint mask;
-
- mask = fpi->DstReg.WriteMask << 11;
- hwsrc = make_src(cs, fpi->SrcReg[0]);
-
- if (fpi->DstReg.File == PROGRAM_OUTPUT) {
- hwdest = get_temp(cs, 0);
- } else {
- hwdest = dest;
- }
-
- code->inst[counter].inst0 = R500_INST_TYPE_TEX | mask
- | R500_INST_TEX_SEM_WAIT;
-
- code->inst[counter].inst1 = R500_TEX_ID(fpi->TexSrcUnit)
- | R500_TEX_SEM_ACQUIRE | R500_TEX_IGNORE_UNCOVERED;
-
- if (fpi->TexSrcTarget == TEXTURE_RECT_INDEX)
- code->inst[counter].inst1 |= R500_TEX_UNSCALED;
-
- switch (fpi->Opcode) {
- case OPCODE_KIL:
- code->inst[counter].inst1 |= R500_TEX_INST_TEXKILL;
- break;
- case OPCODE_TEX:
- code->inst[counter].inst1 |= R500_TEX_INST_LD;
- break;
- case OPCODE_TXB:
- code->inst[counter].inst1 |= R500_TEX_INST_LODBIAS;
- break;
- case OPCODE_TXP:
- code->inst[counter].inst1 |= R500_TEX_INST_PROJ;
- break;
- default:
- ERROR("emit_tex can't handle opcode %x\n", fpi->Opcode);
- }
-
- code->inst[counter].inst2 = R500_TEX_SRC_ADDR(hwsrc)
- | MAKE_SWIZ_TEX_STRQ(make_strq_swizzle(fpi->SrcReg[0]))
- /* | R500_TEX_SRC_S_SWIZ_R | R500_TEX_SRC_T_SWIZ_G
- | R500_TEX_SRC_R_SWIZ_B | R500_TEX_SRC_Q_SWIZ_A */
- | R500_TEX_DST_ADDR(hwdest)
- | R500_TEX_DST_R_SWIZ_R | R500_TEX_DST_G_SWIZ_G
- | R500_TEX_DST_B_SWIZ_B | R500_TEX_DST_A_SWIZ_A;
-
- code->inst[counter].inst3 = 0x0;
- code->inst[counter].inst4 = 0x0;
- code->inst[counter].inst5 = 0x0;
-
- if (fpi->DstReg.File == PROGRAM_OUTPUT) {
- counter++;
- code->inst[counter].inst0 = R500_INST_TYPE_OUT
- | R500_INST_TEX_SEM_WAIT | (mask << 4);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGB_SEL_B_SRC0
- | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGB_OMOD_DISABLE;
- code->inst[counter].inst4 = R500_ALPHA_OP_CMP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(R500_ALPHA_SWIZ_A_A)
- | R500_ALPHA_SEL_B_SRC0 | MAKE_SWIZ_ALPHA_B(R500_ALPHA_SWIZ_A_A)
- | R500_ALPHA_OMOD_DISABLE;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_CMP
- | R500_ALU_RGBA_ADDRD(dest)
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- }
+ if (swz == 5) swz = 6;
+ if (swz == SWIZZLE_NIL) swz = 4;
+ return swz;
}
-static void emit_alu(struct r500_pfs_compile_state *cs, int counter, struct prog_instruction *fpi) {
- PROG_CODE;
- /* Ideally, we shouldn't have to explicitly clear memory here! */
- code->inst[counter].inst0 = 0x0;
- code->inst[counter].inst1 = 0x0;
- code->inst[counter].inst2 = 0x0;
- code->inst[counter].inst3 = 0x0;
- code->inst[counter].inst4 = 0x0;
- code->inst[counter].inst5 = 0x0;
-
- if (fpi->DstReg.File == PROGRAM_OUTPUT) {
- code->inst[counter].inst0 = R500_INST_TYPE_OUT;
-
- if (fpi->DstReg.Index == FRAG_RESULT_COLR)
- code->inst[counter].inst0 |= (fpi->DstReg.WriteMask << 15);
+static GLuint translate_arg_rgb(struct radeon_pair_instruction *inst, int arg)
+{
+ GLuint t = inst->RGB.Arg[arg].Source;
+ int comp;
+ t |= inst->RGB.Arg[arg].Negate << 11;
+ t |= inst->RGB.Arg[arg].Abs << 12;
- if (fpi->DstReg.Index == FRAG_RESULT_DEPR) {
- code->inst[counter].inst4 |= R500_ALPHA_W_OMASK;
- /* Notify the state emission! */
- cs->compiler->fp->writes_depth = GL_TRUE;
- }
- } else {
- code->inst[counter].inst0 = R500_INST_TYPE_ALU
- /* pixel_mask */
- | (fpi->DstReg.WriteMask << 11);
- }
+ for(comp = 0; comp < 3; ++comp)
+ t |= fix_hw_swizzle(GET_SWZ(inst->RGB.Arg[arg].Swizzle, comp)) << (3*comp + 2);
- code->inst[counter].inst0 |= R500_INST_TEX_SEM_WAIT;
+ return t;
}
-static void emit_mov(struct r500_pfs_compile_state *cs, int counter, struct prog_instruction *fpi, GLuint src_reg, GLuint swizzle, GLuint dest) {
- PROG_CODE;
- /* The r3xx shader uses MAD to implement MOV. We are using CMP, since
- * it is technically more accurate and recommended by ATI/AMD. */
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src_reg);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src_reg);
- /* (De)mangle the swizzle from Mesa to R500. */
- swizzle = make_rgba_swizzle(swizzle);
- /* 0x1FF is 9 bits, size of an RGB swizzle. */
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A((swizzle & 0x1ff))
- | R500_ALU_RGB_SEL_B_SRC0
- | MAKE_SWIZ_RGB_B((swizzle & 0x1ff))
- | R500_ALU_RGB_OMOD_DISABLE;
- code->inst[counter].inst4 |= R500_ALPHA_OP_CMP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(GET_SWZ(swizzle, 3))
- | R500_ALPHA_SEL_B_SRC0 | MAKE_SWIZ_ALPHA_B(GET_SWZ(swizzle, 3))
- | R500_ALPHA_OMOD_DISABLE;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_CMP
- | R500_ALU_RGBA_ADDRD(dest)
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
+static GLuint translate_arg_alpha(struct radeon_pair_instruction *inst, int i)
+{
+ GLuint t = inst->Alpha.Arg[i].Source;
+ t |= fix_hw_swizzle(inst->Alpha.Arg[i].Swizzle) << 2;
+ t |= inst->Alpha.Arg[i].Negate << 5;
+ t |= inst->Alpha.Arg[i].Abs << 6;
+ return t;
}
-static void emit_mad(struct r500_pfs_compile_state *cs, int counter, struct prog_instruction *fpi, int one, int two, int three) {
- PROG_CODE;
- /* Note: This code was all Corbin's. Corbin is a rather hackish coder.
- * If you can make it pretty or fast, please do so! */
- emit_alu(cs, counter, fpi);
- /* Common MAD stuff */
- code->inst[counter].inst4 |= R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(make_dest(cs, fpi->DstReg));
- code->inst[counter].inst5 |= R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(make_dest(cs, fpi->DstReg));
- switch (one) {
- case 0:
- case 1:
- case 2:
- code->inst[counter].inst1 |= R500_RGB_ADDR0(make_src(cs, fpi->SrcReg[one]));
- code->inst[counter].inst2 |= R500_ALPHA_ADDR0(make_src(cs, fpi->SrcReg[one]));
- code->inst[counter].inst3 |= R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[one]));
- code->inst[counter].inst4 |= R500_ALPHA_SEL_A_SRC0
- | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[one]));
- break;
- case R500_SWIZZLE_ZERO:
- code->inst[counter].inst3 |= MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_ZERO);
- code->inst[counter].inst4 |= MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ZERO);
- break;
- case R500_SWIZZLE_ONE:
- code->inst[counter].inst3 |= MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_ONE);
- code->inst[counter].inst4 |= MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ONE);
- break;
- default:
- ERROR("Bad src index in emit_mad: %d\n", one);
- break;
- }
- switch (two) {
- case 0:
- case 1:
- case 2:
- code->inst[counter].inst1 |= R500_RGB_ADDR1(make_src(cs, fpi->SrcReg[two]));
- code->inst[counter].inst2 |= R500_ALPHA_ADDR1(make_src(cs, fpi->SrcReg[two]));
- code->inst[counter].inst3 |= R500_ALU_RGB_SEL_B_SRC1
- | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[two]));
- code->inst[counter].inst4 |= R500_ALPHA_SEL_B_SRC1
- | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[two]));
- break;
- case R500_SWIZZLE_ZERO:
- code->inst[counter].inst3 |= MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_ZERO);
- code->inst[counter].inst4 |= MAKE_SWIZ_ALPHA_B(R500_SWIZZLE_ZERO);
- break;
- case R500_SWIZZLE_ONE:
- code->inst[counter].inst3 |= MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_ONE);
- code->inst[counter].inst4 |= MAKE_SWIZ_ALPHA_B(R500_SWIZZLE_ONE);
- break;
- default:
- ERROR("Bad src index in emit_mad: %d\n", two);
- break;
- }
- switch (three) {
- case 0:
- case 1:
- case 2:
- code->inst[counter].inst1 |= R500_RGB_ADDR2(make_src(cs, fpi->SrcReg[three]));
- code->inst[counter].inst2 |= R500_ALPHA_ADDR2(make_src(cs, fpi->SrcReg[three]));
- code->inst[counter].inst5 |= R500_ALU_RGBA_SEL_C_SRC2
- | MAKE_SWIZ_RGBA_C(make_rgb_swizzle(fpi->SrcReg[three]))
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC2
- | MAKE_SWIZ_ALPHA_C(make_alpha_swizzle(fpi->SrcReg[three]));
- break;
- case R500_SWIZZLE_ZERO:
- code->inst[counter].inst5 |= MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- break;
- case R500_SWIZZLE_ONE:
- code->inst[counter].inst5 |= MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ONE)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ONE);
- break;
- default:
- ERROR("Bad src index in emit_mad: %d\n", three);
- break;
- }
+static void use_temporary(struct r500_fragment_program_code* code, GLuint index)
+{
+ if (index > code->max_temp_idx)
+ code->max_temp_idx = index;
}
-static void emit_sop(struct r500_pfs_compile_state *cs, int counter, struct prog_instruction *fpi, int opcode, GLuint src, GLuint swiz, GLuint dest) {
- PROG_CODE;
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src);
- code->inst[counter].inst4 |= R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(swiz);
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_SOP
- | R500_ALU_RGBA_ADDRD(dest);
- switch (opcode) {
- case OPCODE_COS:
- code->inst[counter].inst4 |= R500_ALPHA_OP_COS;
- break;
- case OPCODE_EX2:
- code->inst[counter].inst4 |= R500_ALPHA_OP_EX2;
- break;
- case OPCODE_LG2:
- code->inst[counter].inst4 |= R500_ALPHA_OP_LN2;
- break;
- case OPCODE_RCP:
- code->inst[counter].inst4 |= R500_ALPHA_OP_RCP;
- break;
- case OPCODE_RSQ:
- code->inst[counter].inst4 |= R500_ALPHA_OP_RSQ;
- break;
- case OPCODE_SIN:
- code->inst[counter].inst4 |= R500_ALPHA_OP_SIN;
- break;
- default:
- ERROR("Bad opcode in emit_sop: %d\n", opcode);
- break;
- }
+static GLuint use_source(struct r500_fragment_program_code* code, struct radeon_pair_instruction_source src)
+{
+ if (!src.Constant)
+ use_temporary(code, src.Index);
+ return src.Index | src.Constant << 8;
}
-static int do_inst(struct r500_pfs_compile_state *cs, struct prog_instruction *fpi, int counter) {
- PROG_CODE;
- GLuint src[3], dest = 0;
- int temp_swiz = 0;
- if (fpi->Opcode != OPCODE_KIL) {
- dest = make_dest(cs, fpi->DstReg);
- }
-
- switch (fpi->Opcode) {
- case OPCODE_ABS:
- emit_mov(cs, counter, fpi, make_src(cs, fpi->SrcReg[0]), fpi->SrcReg[0].Swizzle, dest);
- code->inst[counter].inst3 |= R500_ALU_RGB_MOD_A_ABS
- | R500_ALU_RGB_MOD_B_ABS;
- code->inst[counter].inst4 |= R500_ALPHA_MOD_A_ABS
- | R500_ALPHA_MOD_B_ABS;
- break;
- case OPCODE_ADD:
- /* Variation on MAD: 1*src0+src1 */
- emit_mad(cs, counter, fpi, R500_SWIZZLE_ONE, 0, 1);
- break;
- case OPCODE_CMP:
- /* This inst's selects need to be swapped as follows:
- * 0 -> C ; 1 -> B ; 2 -> A */
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- src[2] = make_src(cs, fpi->SrcReg[2]);
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[2])
- | R500_RGB_ADDR1(src[1]) | R500_RGB_ADDR2(src[0]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[2])
- | R500_ALPHA_ADDR1(src[1]) | R500_ALPHA_ADDR2(src[0]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[2]))
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_CMP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[2]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_CMP
- | R500_ALU_RGBA_ADDRD(dest)
- | R500_ALU_RGBA_SEL_C_SRC2
- | MAKE_SWIZ_RGBA_C(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC2
- | MAKE_SWIZ_ALPHA_C(make_alpha_swizzle(fpi->SrcReg[0]));
- break;
- case OPCODE_COS:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = emit_const4fv(cs, RCP_2PI);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A
- | R500_ALPHA_SEL_B_SRC1 | R500_ALPHA_SWIZ_B_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0))
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- counter++;
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 = R500_ALPHA_OP_FRC
- | R500_ALPHA_ADDRD(get_temp(cs, 1))
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_FRC
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 1));
- counter++;
- emit_sop(cs, counter, fpi, OPCODE_COS, get_temp(cs, 1), make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_DP3:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_DP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_DP3
- | R500_ALU_RGBA_ADDRD(dest);
- break;
- case OPCODE_DP4:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- /* Based on DP3 */
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_DP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_DP4
- | R500_ALU_RGBA_ADDRD(dest);
- break;
- case OPCODE_DPH:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- /* Based on DP3 */
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_DP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ONE)
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_DP4
- | R500_ALU_RGBA_ADDRD(dest);
- break;
- case OPCODE_DST:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- /* [1, src0.y*src1.y, src0.z, src1.w]
- * So basically MUL with lotsa swizzling. */
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | R500_ALU_RGB_SEL_B_SRC1;
- /* Select [1, y, z, 1] */
- temp_swiz = (make_rgb_swizzle(fpi->SrcReg[0]) & ~0x7) | R500_SWIZZLE_ONE;
- code->inst[counter].inst3 |= MAKE_SWIZ_RGB_A(temp_swiz);
- /* Select [1, y, 1, w] */
- temp_swiz = (make_rgb_swizzle(fpi->SrcReg[0]) & ~0x1c7) | R500_SWIZZLE_ONE | (R500_SWIZZLE_ONE << 6);
- code->inst[counter].inst3 |= MAKE_SWIZ_RGB_B(temp_swiz);
- code->inst[counter].inst4 |= R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ONE)
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(dest)
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- break;
- case OPCODE_EX2:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- emit_sop(cs, counter, fpi, OPCODE_EX2, src[0], make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_FLR:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_FRC
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_FRC
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0));
- counter++;
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(get_temp(cs, 0));
- code->inst[counter].inst3 = MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_ONE)
- | R500_ALU_RGB_SEL_B_SRC0 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SWIZ_A_A
- | R500_ALPHA_SEL_B_SRC0 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(dest)
- | R500_ALU_RGBA_SEL_C_SRC1
- | MAKE_SWIZ_RGBA_C(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC1
- | MAKE_SWIZ_ALPHA_C(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGBA_MOD_C_NEG;
- break;
- case OPCODE_FRC:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_FRC
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_FRC
- | R500_ALU_RGBA_ADDRD(dest);
- break;
- case OPCODE_LG2:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- emit_sop(cs, counter, fpi, OPCODE_LG2, src[0], make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_LIT:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = emit_const4fv(cs, LIT);
- /* First inst: MAX temp, input, [0, 0, 0, -128]
- * Write: RG, A */
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | (R500_WRITEMASK_ARG << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0]) | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0]) | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_ZERO);
- code->inst[counter].inst4 = R500_ALPHA_OP_MAX
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | R500_ALPHA_SWIZ_B_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAX
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0));
- counter++;
- /* Second inst: MIN temp, temp, [x, x, x, 128]
- * Write: A */
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | (R500_WRITEMASK_A << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0)) | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0)) | R500_ALPHA_ADDR1(src[1]);
- /* code->inst[counter].inst3; */
- code->inst[counter].inst4 = R500_ALPHA_OP_MAX
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A
- | R500_ALPHA_SEL_B_SRC1 | R500_ALPHA_SWIZ_B_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAX
- | R500_ALU_RGBA_ADDRD(dest);
- counter++;
- /* Third-fifth insts: POW temp, temp.y, temp.w
- * Write: B */
- emit_sop(cs, counter, fpi, OPCODE_LG2, get_temp(cs, 0), SWIZZLE_Y, get_temp(cs, 1));
- code->inst[counter].inst0 |= (R500_WRITEMASK_ARGB << 11);
- counter++;
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 1))
- | R500_RGB_ADDR1(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 1))
- | R500_ALPHA_ADDR1(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 1))
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A
- | R500_ALPHA_SEL_B_SRC1 | R500_ALPHA_SWIZ_B_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 1))
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- counter++;
- emit_sop(cs, counter, fpi, OPCODE_EX2, get_temp(cs, 1), SWIZZLE_W, get_temp(cs, 0));
- code->inst[counter].inst0 |= (R500_WRITEMASK_B << 11);
- counter++;
- /* Sixth inst: CMP dest, temp.xxxx, temp.[1, x, z, 1], temp.[1, x, 0, 1];
- * Write: ARGB
- * This inst's selects need to be swapped as follows:
- * 0 -> C ; 1 -> B ; 2 -> A */
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | R500_ALU_RGB_R_SWIZ_A_1
- | R500_ALU_RGB_G_SWIZ_A_R
- | R500_ALU_RGB_B_SWIZ_A_B
- | R500_ALU_RGB_SEL_B_SRC0
- | R500_ALU_RGB_R_SWIZ_B_1
- | R500_ALU_RGB_G_SWIZ_B_R
- | R500_ALU_RGB_B_SWIZ_B_0;
- code->inst[counter].inst4 |= R500_ALPHA_OP_CMP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_1
- | R500_ALPHA_SEL_B_SRC0 | R500_ALPHA_SWIZ_B_1;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_CMP
- | R500_ALU_RGBA_ADDRD(dest)
- | R500_ALU_RGBA_SEL_C_SRC0
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC0
- | R500_ALU_RGBA_R_SWIZ_R
- | R500_ALU_RGBA_G_SWIZ_R
- | R500_ALU_RGBA_B_SWIZ_R
- | R500_ALU_RGBA_A_SWIZ_R;
- break;
- case OPCODE_LRP:
- /* src0 * src1 + INV(src0) * src2
- * 1) MUL src0, src1, temp
- * 2) PRE 1-src0; MAD srcp, src2, temp */
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- src[2] = make_src(cs, fpi->SrcReg[2]);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | R500_INST_NOP | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0))
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- counter++;
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[2])
- | R500_RGB_ADDR2(get_temp(cs, 0))
- | R500_RGB_SRCP_OP_1_MINUS_RGB0;
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[2])
- | R500_ALPHA_ADDR2(get_temp(cs, 0))
- | R500_ALPHA_SRCP_OP_1_MINUS_A0;
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRCP
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 |= R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRCP | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | R500_ALPHA_SWIZ_B_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(dest)
- | R500_ALU_RGBA_SEL_C_SRC2 | MAKE_SWIZ_RGBA_C(make_rgb_swizzle(fpi->SrcReg[2]))
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC2
- | MAKE_SWIZ_ALPHA_C(make_alpha_swizzle(fpi->SrcReg[2]));
- break;
- case OPCODE_MAD:
- emit_mad(cs, counter, fpi, 0, 1, 2);
- break;
- case OPCODE_MAX:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0]) | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0]) | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1
- | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_MAX
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAX
- | R500_ALU_RGBA_ADDRD(dest);
- break;
- case OPCODE_MIN:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0]) | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0]) | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1
- | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 |= R500_ALPHA_OP_MIN
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MIN
- | R500_ALU_RGBA_ADDRD(dest);
- break;
- case OPCODE_MOV:
- emit_mov(cs, counter, fpi, make_src(cs, fpi->SrcReg[0]), fpi->SrcReg[0].Swizzle, dest);
- break;
- case OPCODE_MUL:
- /* Variation on MAD: src0*src1+0 */
- emit_mad(cs, counter, fpi, 0, 1, R500_SWIZZLE_ZERO);
- break;
- case OPCODE_POW:
- /* POW(a,b) = EX2(LN2(a)*b) */
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- emit_sop(cs, counter, fpi, OPCODE_LG2, src[0], make_sop_swizzle(fpi->SrcReg[0]), get_temp(cs, 0));
- code->inst[counter].inst0 |= (R500_WRITEMASK_ARGB << 11);
- counter++;
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0))
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0))
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(make_rgb_swizzle(fpi->SrcReg[0]))
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 1))
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 1))
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- counter++;
- emit_sop(cs, counter, fpi, OPCODE_EX2, get_temp(cs, 1), make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_RCP:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- emit_sop(cs, counter, fpi, OPCODE_RCP, src[0], make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_RSQ:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- emit_sop(cs, counter, fpi, OPCODE_RSQ, src[0], make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_SCS:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = emit_const4fv(cs, RCP_2PI);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A
- | R500_ALPHA_SEL_B_SRC1 | R500_ALPHA_SWIZ_B_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0))
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- counter++;
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 = R500_ALPHA_OP_FRC
- | R500_ALPHA_ADDRD(get_temp(cs, 1))
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_FRC
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 1));
- counter++;
- /* Do a cosine, then a sine, masking out the channels we want to protect. */
- /* Cosine only goes in R (x) channel. */
- fpi->DstReg.WriteMask = 0x1;
- emit_sop(cs, counter, fpi, OPCODE_COS, get_temp(cs, 1), make_sop_swizzle(fpi->SrcReg[0]), dest);
- counter++;
- /* Sine only goes in G (y) channel. */
- fpi->DstReg.WriteMask = 0x2;
- emit_sop(cs, counter, fpi, OPCODE_SIN, get_temp(cs, 1), make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_SGE:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR1(src[0])
- | R500_RGB_ADDR2(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR1(src[0])
- | R500_ALPHA_ADDR2(src[1]);
- code->inst[counter].inst3 = /* 1 */
- MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_ONE)
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ONE)
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0))
- | R500_ALU_RGBA_SEL_C_SRC2
- | MAKE_SWIZ_RGBA_C(make_rgb_swizzle(fpi->SrcReg[1]))
- | R500_ALU_RGBA_MOD_C_NEG
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC2
- | MAKE_SWIZ_ALPHA_C(make_alpha_swizzle(fpi->SrcReg[1]))
- | R500_ALU_RGBA_ALPHA_MOD_C_NEG;
- counter++;
- /* This inst's selects need to be swapped as follows:
- * 0 -> C ; 1 -> B ; 2 -> A */
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_ONE)
- | R500_ALU_RGB_SEL_B_SRC0
- | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_ZERO);
- code->inst[counter].inst4 |= R500_ALPHA_OP_CMP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ONE)
- | R500_ALPHA_SEL_B_SRC0 | MAKE_SWIZ_ALPHA_B(R500_SWIZZLE_ZERO);
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_CMP
- | R500_ALU_RGBA_ADDRD(dest)
- | R500_ALU_RGBA_SEL_C_SRC0
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC0
- | R500_ALU_RGBA_A_SWIZ_A;
- break;
- case OPCODE_SIN:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = emit_const4fv(cs, RCP_2PI);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A
- | R500_ALPHA_SEL_B_SRC1 | R500_ALPHA_SWIZ_B_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0))
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- counter++;
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_RGB);
- code->inst[counter].inst4 = R500_ALPHA_OP_FRC
- | R500_ALPHA_ADDRD(get_temp(cs, 1))
- | R500_ALPHA_SEL_A_SRC0 | R500_ALPHA_SWIZ_A_A;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_FRC
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 1));
- counter++;
- emit_sop(cs, counter, fpi, OPCODE_SIN, get_temp(cs, 1), make_sop_swizzle(fpi->SrcReg[0]), dest);
- break;
- case OPCODE_SLT:
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | (R500_WRITEMASK_ARGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR1(src[0])
- | R500_RGB_ADDR2(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR1(src[0])
- | R500_ALPHA_ADDR2(src[1]);
- code->inst[counter].inst3 = /* 1 */
- MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_ONE)
- | R500_ALU_RGB_SEL_B_SRC1 | MAKE_SWIZ_RGB_B(make_rgb_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ONE)
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[0]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0))
- | R500_ALU_RGBA_SEL_C_SRC2
- | MAKE_SWIZ_RGBA_C(make_rgb_swizzle(fpi->SrcReg[1]))
- | R500_ALU_RGBA_MOD_C_NEG
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC2
- | MAKE_SWIZ_ALPHA_C(make_alpha_swizzle(fpi->SrcReg[1]))
- | R500_ALU_RGBA_ALPHA_MOD_C_NEG;
- counter++;
- /* This inst's selects need to be swapped as follows:
- * 0 -> C ; 1 -> B ; 2 -> A */
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(get_temp(cs, 0));
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(R500_SWIZ_RGB_ZERO)
- | R500_ALU_RGB_SEL_B_SRC0
- | MAKE_SWIZ_RGB_B(R500_SWIZ_RGB_ONE);
- code->inst[counter].inst4 |= R500_ALPHA_OP_CMP
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(R500_SWIZZLE_ZERO)
- | R500_ALPHA_SEL_B_SRC0 | MAKE_SWIZ_ALPHA_B(R500_SWIZZLE_ONE);
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_CMP
- | R500_ALU_RGBA_ADDRD(dest)
- | R500_ALU_RGBA_SEL_C_SRC0
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGBA_ALPHA_SEL_C_SRC0
- | R500_ALU_RGBA_A_SWIZ_A;
- break;
- case OPCODE_SUB:
- /* Variation on MAD: 1*src0-src1 */
- fpi->SrcReg[1].NegateBase = 0xF; /* NEG_XYZW */
- emit_mad(cs, counter, fpi, R500_SWIZZLE_ONE, 0, 1);
- break;
- case OPCODE_SWZ:
- /* TODO: The rarer negation masks! */
- emit_mov(cs, counter, fpi, make_src(cs, fpi->SrcReg[0]), fpi->SrcReg[0].Swizzle, dest);
- break;
- case OPCODE_XPD:
- /* src0 * src1 - src1 * src0
- * 1) MUL temp.xyz, src0.yzx, src1.zxy
- * 2) MAD src0.zxy, src1.yzx, -temp.xyz */
- src[0] = make_src(cs, fpi->SrcReg[0]);
- src[1] = make_src(cs, fpi->SrcReg[1]);
- code->inst[counter].inst0 = R500_INST_TYPE_ALU | R500_INST_TEX_SEM_WAIT
- | (R500_WRITEMASK_RGB << 11);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1]);
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1]);
- /* Select [y, z, x] */
- temp_swiz = make_rgb_swizzle(fpi->SrcReg[0]);
- temp_swiz = (GET_SWZ(temp_swiz, 1) << 0) | (GET_SWZ(temp_swiz, 2) << 3) | (GET_SWZ(temp_swiz, 0) << 6);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(temp_swiz);
- /* Select [z, x, y] */
- temp_swiz = make_rgb_swizzle(fpi->SrcReg[1]);
- temp_swiz = (GET_SWZ(temp_swiz, 2) << 0) | (GET_SWZ(temp_swiz, 0) << 3) | (GET_SWZ(temp_swiz, 1) << 6);
- code->inst[counter].inst3 |= R500_ALU_RGB_SEL_B_SRC1
- | MAKE_SWIZ_RGB_B(temp_swiz);
- code->inst[counter].inst4 = R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(get_temp(cs, 0))
- | R500_ALPHA_SEL_A_SRC0 | MAKE_SWIZ_ALPHA_A(make_alpha_swizzle(fpi->SrcReg[0]))
- | R500_ALPHA_SEL_B_SRC1 | MAKE_SWIZ_ALPHA_B(make_alpha_swizzle(fpi->SrcReg[1]));
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(get_temp(cs, 0))
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_ZERO)
- | MAKE_SWIZ_ALPHA_C(R500_SWIZZLE_ZERO);
- counter++;
- emit_alu(cs, counter, fpi);
- code->inst[counter].inst1 = R500_RGB_ADDR0(src[0])
- | R500_RGB_ADDR1(src[1])
- | R500_RGB_ADDR2(get_temp(cs, 0));
- code->inst[counter].inst2 = R500_ALPHA_ADDR0(src[0])
- | R500_ALPHA_ADDR1(src[1])
- | R500_ALPHA_ADDR2(get_temp(cs, 0));
- /* Select [z, x, y] */
- temp_swiz = make_rgb_swizzle(fpi->SrcReg[0]);
- temp_swiz = (GET_SWZ(temp_swiz, 2) << 0) | (GET_SWZ(temp_swiz, 0) << 3) | (GET_SWZ(temp_swiz, 1) << 6);
- code->inst[counter].inst3 = R500_ALU_RGB_SEL_A_SRC0
- | MAKE_SWIZ_RGB_A(temp_swiz);
- /* Select [y, z, x] */
- temp_swiz = make_rgb_swizzle(fpi->SrcReg[1]);
- temp_swiz = (GET_SWZ(temp_swiz, 1) << 0) | (GET_SWZ(temp_swiz, 2) << 3) | (GET_SWZ(temp_swiz, 0) << 6);
- code->inst[counter].inst3 |= R500_ALU_RGB_SEL_B_SRC1
- | MAKE_SWIZ_RGB_B(temp_swiz);
- code->inst[counter].inst4 |= R500_ALPHA_OP_MAD
- | R500_ALPHA_ADDRD(dest)
- | R500_ALPHA_SWIZ_A_1
- | R500_ALPHA_SWIZ_B_1;
- code->inst[counter].inst5 = R500_ALU_RGBA_OP_MAD
- | R500_ALU_RGBA_ADDRD(dest)
- | R500_ALU_RGBA_SEL_C_SRC2
- | MAKE_SWIZ_RGBA_C(R500_SWIZ_RGB_RGB)
- | R500_ALU_RGBA_MOD_C_NEG
- | R500_ALU_RGBA_A_SWIZ_0;
- break;
- case OPCODE_KIL:
- case OPCODE_TEX:
- case OPCODE_TXB:
- case OPCODE_TXP:
- emit_tex(cs, fpi, dest, counter);
- if (fpi->DstReg.File == PROGRAM_OUTPUT)
- counter++;
- break;
- default:
- ERROR("unknown fpi->Opcode %s\n", _mesa_opcode_string(fpi->Opcode));
- break;
- }
+/**
+ * Emit a paired ALU instruction.
+ */
+static GLboolean emit_paired(void *data, struct radeon_pair_instruction *inst)
+{
+ PROG_CODE;
- /* Finishing touches */
- if (fpi->SaturateMode == SATURATE_ZERO_ONE) {
- code->inst[counter].inst0 |= R500_INST_RGB_CLAMP | R500_INST_ALPHA_CLAMP;
+ if (code->inst_end >= 511) {
+ error("emit_alu: Too many instructions");
+ return GL_FALSE;
}
- counter++;
+ int ip = ++code->inst_end;
- return counter;
-}
+ code->inst[ip].inst5 = translate_rgb_op(inst->RGB.Opcode);
+ code->inst[ip].inst4 = translate_alpha_op(inst->Alpha.Opcode);
-static GLboolean parse_program(struct r500_pfs_compile_state *cs)
-{
- PROG_CODE;
- int clauseidx, counter = 0;
+ if (inst->RGB.OutputWriteMask || inst->Alpha.OutputWriteMask || inst->Alpha.DepthWriteMask)
+ code->inst[ip].inst0 = R500_INST_TYPE_OUT;
+ else
+ code->inst[ip].inst0 = R500_INST_TYPE_ALU;
+ code->inst[ip].inst0 |= R500_INST_TEX_SEM_WAIT;
- for (clauseidx = 0; clauseidx < cs->compiler->compiler.NumClauses; clauseidx++) {
- struct radeon_clause* clause = &cs->compiler->compiler.Clauses[clauseidx];
- struct prog_instruction* fpi;
+ code->inst[ip].inst0 |= (inst->RGB.WriteMask << 11) | (inst->Alpha.WriteMask << 14);
+ code->inst[ip].inst0 |= (inst->RGB.OutputWriteMask << 15) | (inst->Alpha.OutputWriteMask << 18);
+ if (inst->Alpha.DepthWriteMask) {
+ code->inst[ip].inst4 |= R500_ALPHA_W_OMASK;
+ c->fp->writes_depth = GL_TRUE;
+ }
- int ip;
+ code->inst[ip].inst4 |= R500_ALPHA_ADDRD(inst->Alpha.DestIndex);
+ code->inst[ip].inst5 |= R500_ALU_RGBA_ADDRD(inst->RGB.DestIndex);
+ use_temporary(code, inst->Alpha.DestIndex);
+ use_temporary(code, inst->RGB.DestIndex);
- for (ip = 0; ip < clause->NumInstructions; ip++) {
- fpi = clause->Instructions + ip;
- counter = do_inst(cs, fpi, counter);
+ if (inst->RGB.Saturate)
+ code->inst[ip].inst0 |= R500_INST_RGB_CLAMP;
+ if (inst->Alpha.Saturate)
+ code->inst[ip].inst0 |= R500_INST_ALPHA_CLAMP;
- if (cs->compiler->fp->error)
- return GL_FALSE;
- }
- }
+ code->inst[ip].inst1 |= R500_RGB_ADDR0(use_source(code, inst->RGB.Src[0]));
+ code->inst[ip].inst1 |= R500_RGB_ADDR1(use_source(code, inst->RGB.Src[1]));
+ code->inst[ip].inst1 |= R500_RGB_ADDR2(use_source(code, inst->RGB.Src[2]));
- /* Finish him! (If it's an ALU/OUT instruction...) */
- if ((code->inst[counter-1].inst0 & 0x3) == 1) {
- code->inst[counter-1].inst0 |= R500_INST_LAST;
- } else {
- /* We still need to put an output inst, right? */
- WARN_ONCE("Final FP instruction is not an OUT.\n");
- }
+ code->inst[ip].inst2 |= R500_ALPHA_ADDR0(use_source(code, inst->Alpha.Src[0]));
+ code->inst[ip].inst2 |= R500_ALPHA_ADDR1(use_source(code, inst->Alpha.Src[1]));
+ code->inst[ip].inst2 |= R500_ALPHA_ADDR2(use_source(code, inst->Alpha.Src[2]));
- cs->nrslots = counter;
+ code->inst[ip].inst3 |= translate_arg_rgb(inst, 0) << R500_ALU_RGB_SEL_A_SHIFT;
+ code->inst[ip].inst3 |= translate_arg_rgb(inst, 1) << R500_ALU_RGB_SEL_B_SHIFT;
+ code->inst[ip].inst5 |= translate_arg_rgb(inst, 2) << R500_ALU_RGBA_SEL_C_SHIFT;
- code->max_temp_idx++;
+ code->inst[ip].inst4 |= translate_arg_alpha(inst, 0) << R500_ALPHA_SEL_A_SHIFT;
+ code->inst[ip].inst4 |= translate_arg_alpha(inst, 1) << R500_ALPHA_SEL_B_SHIFT;
+ code->inst[ip].inst5 |= translate_arg_alpha(inst, 2) << R500_ALU_RGBA_ALPHA_SEL_C_SHIFT;
return GL_TRUE;
}
-static void init_program(struct r500_pfs_compile_state *cs)
+static GLuint translate_strq_swizzle(struct prog_src_register src)
{
- PROG_CODE;
- struct gl_fragment_program *mp = &cs->compiler->fp->mesa_program;
- struct prog_instruction *fpi;
- GLuint InputsRead = mp->Base.InputsRead;
- GLuint temps_used = 0;
- int i, j;
-
- /* New compile, reset tracking data */
- cs->compiler->fp->optimization =
- driQueryOptioni(&cs->compiler->r300->radeon.optionCache, "fp_optimization");
- cs->compiler->fp->translated = GL_FALSE;
- cs->compiler->fp->error = GL_FALSE;
- code->const_nr = 0;
- /* Size of pixel stack, plus 1. */
- code->max_temp_idx = 1;
- /* Temp register offset. */
- code->temp_reg_offset = 0;
- /* Whether or not we perform any depth writing. */
- cs->compiler->fp->writes_depth = GL_FALSE;
-
- for (i = 0; i < PFS_MAX_ALU_INST; i++) {
- for (j = 0; j < 3; j++) {
- cs->slot[i].vsrc[j] = SRC_CONST;
- cs->slot[i].ssrc[j] = SRC_CONST;
- }
- }
-
- /* Work out what temps the Mesa inputs correspond to, this must match
- * what setup_rs_unit does, which shouldn't be a problem as rs_unit
- * configures itself based on the fragprog's InputsRead
- *
- * NOTE: this depends on get_hw_temp() allocating registers in order,
- * starting from register 0, so we're just going to do that instead.
- */
-
- /* Texcoords come first */
- for (i = 0; i < cs->compiler->fp->ctx->Const.MaxTextureUnits; i++) {
- if (InputsRead & (FRAG_BIT_TEX0 << i)) {
- cs->inputs[FRAG_ATTRIB_TEX0 + i].refcount = 0;
- cs->inputs[FRAG_ATTRIB_TEX0 + i].reg =
- code->temp_reg_offset;
- code->temp_reg_offset++;
- }
- }
- InputsRead &= ~FRAG_BITS_TEX_ANY;
-
- /* fragment position treated as a texcoord */
- if (InputsRead & FRAG_BIT_WPOS) {
- cs->inputs[FRAG_ATTRIB_WPOS].refcount = 0;
- cs->inputs[FRAG_ATTRIB_WPOS].reg =
- code->temp_reg_offset;
- code->temp_reg_offset++;
- }
- InputsRead &= ~FRAG_BIT_WPOS;
+ GLuint swiz = 0;
+ int i;
+ for (i = 0; i < 4; i++)
+ swiz |= (GET_SWZ(src.Swizzle, i) & 0x3) << i*2;
+ return swiz;
+}
- /* Then primary colour */
- if (InputsRead & FRAG_BIT_COL0) {
- cs->inputs[FRAG_ATTRIB_COL0].refcount = 0;
- cs->inputs[FRAG_ATTRIB_COL0].reg =
- code->temp_reg_offset;
- code->temp_reg_offset++;
- }
- InputsRead &= ~FRAG_BIT_COL0;
+/**
+ * Emit a single TEX instruction
+ */
+static GLboolean emit_tex(void *data, struct prog_instruction *inst)
+{
+ PROG_CODE;
- /* Secondary color */
- if (InputsRead & FRAG_BIT_COL1) {
- cs->inputs[FRAG_ATTRIB_COL1].refcount = 0;
- cs->inputs[FRAG_ATTRIB_COL1].reg =
- code->temp_reg_offset;
- code->temp_reg_offset++;
+ if (code->inst_end >= 511) {
+ error("emit_tex: Too many instructions");
+ return GL_FALSE;
}
- InputsRead &= ~FRAG_BIT_COL1;
- /* Anything else */
- if (InputsRead) {
- WARN_ONCE("Don't know how to handle inputs 0x%x\n", InputsRead);
- /* force read from hwreg 0 for now */
- for (i = 0; i < 32; i++)
- if (InputsRead & (1 << i))
- cs->inputs[i].reg = 0;
- }
+ int ip = ++code->inst_end;
- int clauseidx;
+ code->inst[ip].inst0 = R500_INST_TYPE_TEX
+ | (inst->DstReg.WriteMask << 11)
+ | R500_INST_TEX_SEM_WAIT;
+ code->inst[ip].inst1 = R500_TEX_ID(inst->TexSrcUnit)
+ | R500_TEX_SEM_ACQUIRE | R500_TEX_IGNORE_UNCOVERED;
- for (clauseidx = 0; clauseidx < cs->compiler->compiler.NumClauses; ++clauseidx) {
- struct radeon_clause* clause = &cs->compiler->compiler.Clauses[clauseidx];
- int ip;
+ if (inst->TexSrcTarget == TEXTURE_RECT_INDEX)
+ code->inst[ip].inst1 |= R500_TEX_UNSCALED;
- for (ip = 0; ip < clause->NumInstructions; ip++) {
- fpi = clause->Instructions + ip;
- for (i = 0; i < 3; i++) {
- if (fpi->SrcReg[i].File == PROGRAM_TEMPORARY) {
- if (fpi->SrcReg[i].Index >= temps_used)
- temps_used = fpi->SrcReg[i].Index + 1;
- }
- }
- }
+ switch (inst->Opcode) {
+ case OPCODE_KIL:
+ code->inst[ip].inst1 |= R500_TEX_INST_TEXKILL;
+ break;
+ case OPCODE_TEX:
+ code->inst[ip].inst1 |= R500_TEX_INST_LD;
+ break;
+ case OPCODE_TXB:
+ code->inst[ip].inst1 |= R500_TEX_INST_LODBIAS;
+ break;
+ case OPCODE_TXP:
+ code->inst[ip].inst1 |= R500_TEX_INST_PROJ;
+ break;
+ default:
+ error("emit_tex can't handle opcode %x\n", inst->Opcode);
}
+ code->inst[ip].inst2 = R500_TEX_SRC_ADDR(inst->SrcReg[0].Index)
+ | (translate_strq_swizzle(inst->SrcReg[0]) << 8)
+ | R500_TEX_DST_ADDR(inst->DstReg.Index)
+ | R500_TEX_DST_R_SWIZ_R | R500_TEX_DST_G_SWIZ_G
+ | R500_TEX_DST_B_SWIZ_B | R500_TEX_DST_A_SWIZ_A;
- cs->temp_in_use = temps_used + 1;
-
- code->max_temp_idx = code->temp_reg_offset + cs->temp_in_use;
-
- if (RADEON_DEBUG & DEBUG_PIXEL)
- fprintf(stderr, "FP temp indices: code->max_temp_idx: %d cs->temp_in_use: %d\n", code->max_temp_idx, cs->temp_in_use);
+ return GL_TRUE;
}
-static void dumb_shader(struct r500_pfs_compile_state *cs)
-{
- PROG_CODE;
- code->inst[0].inst0 = R500_INST_TYPE_TEX
- | R500_INST_TEX_SEM_WAIT
- | R500_INST_RGB_WMASK_R
- | R500_INST_RGB_WMASK_G
- | R500_INST_RGB_WMASK_B
- | R500_INST_ALPHA_WMASK
- | R500_INST_RGB_CLAMP
- | R500_INST_ALPHA_CLAMP;
- code->inst[0].inst1 = R500_TEX_ID(0)
- | R500_TEX_INST_LD
- | R500_TEX_SEM_ACQUIRE
- | R500_TEX_IGNORE_UNCOVERED;
- code->inst[0].inst2 = R500_TEX_SRC_ADDR(0)
- | R500_TEX_SRC_S_SWIZ_R
- | R500_TEX_SRC_T_SWIZ_G
- | R500_TEX_DST_ADDR(0)
- | R500_TEX_DST_R_SWIZ_R
- | R500_TEX_DST_G_SWIZ_G
- | R500_TEX_DST_B_SWIZ_B
- | R500_TEX_DST_A_SWIZ_A;
- code->inst[0].inst3 = R500_DX_ADDR(0)
- | R500_DX_S_SWIZ_R
- | R500_DX_T_SWIZ_R
- | R500_DX_R_SWIZ_R
- | R500_DX_Q_SWIZ_R
- | R500_DY_ADDR(0)
- | R500_DY_S_SWIZ_R
- | R500_DY_T_SWIZ_R
- | R500_DY_R_SWIZ_R
- | R500_DY_Q_SWIZ_R;
- code->inst[0].inst4 = 0x0;
- code->inst[0].inst5 = 0x0;
-
- code->inst[1].inst0 = R500_INST_TYPE_OUT |
- R500_INST_TEX_SEM_WAIT |
- R500_INST_LAST |
- R500_INST_RGB_OMASK_R |
- R500_INST_RGB_OMASK_G |
- R500_INST_RGB_OMASK_B |
- R500_INST_ALPHA_OMASK;
- code->inst[1].inst1 = R500_RGB_ADDR0(0) |
- R500_RGB_ADDR1(0) |
- R500_RGB_ADDR1_CONST |
- R500_RGB_ADDR2(0) |
- R500_RGB_ADDR2_CONST |
- R500_RGB_SRCP_OP_1_MINUS_2RGB0;
- code->inst[1].inst2 = R500_ALPHA_ADDR0(0) |
- R500_ALPHA_ADDR1(0) |
- R500_ALPHA_ADDR1_CONST |
- R500_ALPHA_ADDR2(0) |
- R500_ALPHA_ADDR2_CONST |
- R500_ALPHA_SRCP_OP_1_MINUS_2A0;
- code->inst[1].inst3 = R500_ALU_RGB_SEL_A_SRC0 |
- R500_ALU_RGB_R_SWIZ_A_R |
- R500_ALU_RGB_G_SWIZ_A_G |
- R500_ALU_RGB_B_SWIZ_A_B |
- R500_ALU_RGB_SEL_B_SRC0 |
- R500_ALU_RGB_R_SWIZ_B_1 |
- R500_ALU_RGB_B_SWIZ_B_1 |
- R500_ALU_RGB_G_SWIZ_B_1;
- code->inst[1].inst4 = R500_ALPHA_OP_MAD |
- R500_ALPHA_SWIZ_A_A |
- R500_ALPHA_SWIZ_B_1;
- code->inst[1].inst5 = R500_ALU_RGBA_OP_MAD |
- R500_ALU_RGBA_R_SWIZ_0 |
- R500_ALU_RGBA_G_SWIZ_0 |
- R500_ALU_RGBA_B_SWIZ_0 |
- R500_ALU_RGBA_A_SWIZ_0;
-
- cs->nrslots = 2;
-}
+static const struct radeon_pair_handler pair_handler = {
+ .EmitConst = emit_const,
+ .EmitPaired = emit_paired,
+ .EmitTex = emit_tex,
+ .MaxHwTemps = 128
+};
GLboolean r500FragmentProgramEmit(struct r500_fragment_program_compiler *compiler)
{
- struct r500_pfs_compile_state cs;
struct r500_fragment_program_code *code = compiler->code;
- _mesa_memset(&cs, 0, sizeof(cs));
- cs.compiler = compiler;
- init_program(&cs);
+ _mesa_bzero(code, sizeof(*code));
+ code->max_temp_idx = 1;
+ code->inst_offset = 0;
+ code->inst_end = -1;
- if (!parse_program(&cs)) {
-#if 0
- ERROR("Huh. Couldn't parse program. There should be additional errors explaining why.\nUsing dumb shader...\n");
- dumb_shader(fp);
- code->inst_offset = 0;
- code->inst_end = cs.nrslots - 1;
-#endif
+ if (!radeonPairProgram(compiler->r300->radeon.glCtx, compiler->program, &pair_handler, compiler))
return GL_FALSE;
- }
- code->inst_offset = 0;
- code->inst_end = cs.nrslots - 1;
+ if ((code->inst[code->inst_end].inst0 & R500_INST_TYPE_MASK) != R500_INST_TYPE_OUT) {
+ /* This may happen when dead-code elimination is disabled or
+ * when most of the fragment program logic is leading to a KIL */
+ if (code->inst_end >= 511) {
+ error("Introducing fake OUT: Too many instructions");
+ return GL_FALSE;
+ }
+
+ int ip = ++code->inst_end;
+ code->inst[ip].inst0 = R500_INST_TYPE_OUT | R500_INST_TEX_SEM_WAIT;
+ }
return GL_TRUE;
}
diff --git a/src/mesa/drivers/dri/r300/radeon_nqssadce.c b/src/mesa/drivers/dri/r300/radeon_nqssadce.c
new file mode 100644
index 00000000000..f10ba4004aa
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_nqssadce.c
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2008 Nicolai Haehnle.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/**
+ * @file
+ *
+ * "Not-quite SSA" and Dead-Code Elimination.
+ *
+ * @note This code uses SWIZZLE_NIL in a source register to indicate that
+ * the corresponding component is ignored by the corresponding instruction.
+ */
+
+#include "radeon_nqssadce.h"
+
+
+/**
+ * Return the @ref register_state for the given register (or 0 for untracked
+ * registers, i.e. constants).
+ */
+static struct register_state *get_reg_state(struct nqssadce_state* s, GLuint file, GLuint index)
+{
+ switch(file) {
+ case PROGRAM_TEMPORARY: return &s->Temps[index];
+ case PROGRAM_OUTPUT: return &s->Outputs[index];
+ default: return 0;
+ }
+}
+
+
+/**
+ * Left multiplication of a register with a swizzle
+ *
+ * @note Works correctly only for X, Y, Z, W swizzles, not for constant swizzles.
+ */
+static struct prog_src_register lmul_swizzle(GLuint swizzle, struct prog_src_register srcreg)
+{
+ struct prog_src_register tmp = srcreg;
+ int i;
+ tmp.Swizzle = 0;
+ tmp.NegateBase = 0;
+ for(i = 0; i < 4; ++i) {
+ GLuint swz = GET_SWZ(swizzle, i);
+ if (swz < 4) {
+ tmp.Swizzle |= GET_SWZ(srcreg.Swizzle, swz) << (i*3);
+ tmp.NegateBase |= GET_BIT(srcreg.NegateBase, swz) << i;
+ } else {
+ tmp.Swizzle |= swz << (i*3);
+ }
+ }
+ return tmp;
+}
+
+
+static struct prog_instruction* track_used_srcreg(struct nqssadce_state* s,
+ struct prog_instruction *inst, GLint src, GLuint sourced)
+{
+ int i;
+ GLuint deswz_source = 0;
+
+ for(i = 0; i < 4; ++i) {
+ if (GET_BIT(sourced, i)) {
+ GLuint swz = GET_SWZ(inst->SrcReg[src].Swizzle, i);
+ deswz_source |= 1 << swz;
+ } else {
+ inst->SrcReg[src].Swizzle &= ~(7 << (3*i));
+ inst->SrcReg[src].Swizzle |= SWIZZLE_NIL << (3*i);
+ }
+ }
+
+ if (!s->Descr->IsNativeSwizzle(inst->Opcode, inst->SrcReg[src])) {
+ struct prog_dst_register dstreg = inst->DstReg;
+ dstreg.File = PROGRAM_TEMPORARY;
+ dstreg.Index = _mesa_find_free_register(s->Program, PROGRAM_TEMPORARY);
+ dstreg.WriteMask = sourced;
+
+ s->Descr->BuildSwizzle(s, dstreg, inst->SrcReg[src]);
+
+ inst = s->Program->Instructions + s->IP;
+ inst->SrcReg[src].File = PROGRAM_TEMPORARY;
+ inst->SrcReg[src].Index = dstreg.Index;
+ inst->SrcReg[src].Swizzle = 0;
+ inst->SrcReg[src].NegateBase = 0;
+ inst->SrcReg[src].Abs = 0;
+ inst->SrcReg[src].NegateAbs = 0;
+ for(i = 0; i < 4; ++i) {
+ if (GET_BIT(sourced, i))
+ inst->SrcReg[src].Swizzle |= i << (3*i);
+ else
+ inst->SrcReg[src].Swizzle |= SWIZZLE_NIL << (3*i);
+ }
+ deswz_source = sourced;
+ }
+
+ struct register_state *regstate = get_reg_state(s, inst->SrcReg[src].File, inst->SrcReg[src].Index);
+ if (regstate)
+ regstate->Sourced |= deswz_source & 0xf;
+
+ return inst;
+}
+
+
+static void rewrite_depth_out(struct prog_instruction *inst)
+{
+ if (inst->DstReg.WriteMask & WRITEMASK_Z) {
+ inst->DstReg.WriteMask = WRITEMASK_W;
+ } else {
+ inst->DstReg.WriteMask = 0;
+ return;
+ }
+
+ switch (inst->Opcode) {
+ case OPCODE_FRC:
+ case OPCODE_MOV:
+ inst->SrcReg[0] = lmul_swizzle(SWIZZLE_ZZZZ, inst->SrcReg[0]);
+ break;
+ case OPCODE_ADD:
+ case OPCODE_MAX:
+ case OPCODE_MIN:
+ case OPCODE_MUL:
+ inst->SrcReg[0] = lmul_swizzle(SWIZZLE_ZZZZ, inst->SrcReg[0]);
+ inst->SrcReg[1] = lmul_swizzle(SWIZZLE_ZZZZ, inst->SrcReg[1]);
+ break;
+ case OPCODE_CMP:
+ case OPCODE_MAD:
+ inst->SrcReg[0] = lmul_swizzle(SWIZZLE_ZZZZ, inst->SrcReg[0]);
+ inst->SrcReg[1] = lmul_swizzle(SWIZZLE_ZZZZ, inst->SrcReg[1]);
+ inst->SrcReg[2] = lmul_swizzle(SWIZZLE_ZZZZ, inst->SrcReg[2]);
+ break;
+ default:
+ // Scalar instructions needn't be reswizzled
+ break;
+ }
+}
+
+static void unalias_srcregs(struct prog_instruction *inst, GLuint oldindex, GLuint newindex)
+{
+ int nsrc = _mesa_num_inst_src_regs(inst->Opcode);
+ int i;
+ for(i = 0; i < nsrc; ++i)
+ if (inst->SrcReg[i].File == PROGRAM_TEMPORARY && inst->SrcReg[i].Index == oldindex)
+ inst->SrcReg[i].Index = newindex;
+}
+
+static void unalias_temporary(struct nqssadce_state* s, GLuint oldindex)
+{
+ GLuint newindex = _mesa_find_free_register(s->Program, PROGRAM_TEMPORARY);
+ int ip;
+ for(ip = 0; ip < s->IP; ++ip) {
+ struct prog_instruction* inst = s->Program->Instructions + ip;
+ if (inst->DstReg.File == PROGRAM_TEMPORARY && inst->DstReg.Index == oldindex)
+ inst->DstReg.Index = newindex;
+ unalias_srcregs(inst, oldindex, newindex);
+ }
+ unalias_srcregs(s->Program->Instructions + s->IP, oldindex, newindex);
+}
+
+
+/**
+ * Handle one instruction.
+ */
+static void process_instruction(struct nqssadce_state* s)
+{
+ struct prog_instruction *inst = s->Program->Instructions + s->IP;
+
+ if (inst->Opcode == OPCODE_END)
+ return;
+
+ if (inst->Opcode != OPCODE_KIL) {
+ if (s->Descr->RewriteDepthOut) {
+ if (inst->DstReg.File == PROGRAM_OUTPUT && inst->DstReg.Index == FRAG_RESULT_DEPR)
+ rewrite_depth_out(inst);
+ }
+
+ struct register_state *regstate = get_reg_state(s, inst->DstReg.File, inst->DstReg.Index);
+ if (!regstate) {
+ _mesa_problem(s->Ctx, "NqssaDce: bad destination register (%i[%i])\n",
+ inst->DstReg.File, inst->DstReg.Index);
+ return;
+ }
+
+ inst->DstReg.WriteMask &= regstate->Sourced;
+ regstate->Sourced &= ~inst->DstReg.WriteMask;
+
+ if (inst->DstReg.WriteMask == 0) {
+ _mesa_delete_instructions(s->Program, s->IP, 1);
+ return;
+ }
+
+ if (inst->DstReg.File == PROGRAM_TEMPORARY && !regstate->Sourced)
+ unalias_temporary(s, inst->DstReg.Index);
+ }
+
+ /* Attention: Due to swizzle emulation code, the following
+ * might change the instruction stream under us, so we have
+ * to be careful with the inst pointer. */
+ switch (inst->Opcode) {
+ case OPCODE_FRC:
+ case OPCODE_MOV:
+ inst = track_used_srcreg(s, inst, 0, inst->DstReg.WriteMask);
+ break;
+ case OPCODE_ADD:
+ case OPCODE_MAX:
+ case OPCODE_MIN:
+ case OPCODE_MUL:
+ inst = track_used_srcreg(s, inst, 0, inst->DstReg.WriteMask);
+ inst = track_used_srcreg(s, inst, 1, inst->DstReg.WriteMask);
+ break;
+ case OPCODE_CMP:
+ case OPCODE_MAD:
+ inst = track_used_srcreg(s, inst, 0, inst->DstReg.WriteMask);
+ inst = track_used_srcreg(s, inst, 1, inst->DstReg.WriteMask);
+ inst = track_used_srcreg(s, inst, 2, inst->DstReg.WriteMask);
+ break;
+ case OPCODE_COS:
+ case OPCODE_EX2:
+ case OPCODE_LG2:
+ case OPCODE_RCP:
+ case OPCODE_RSQ:
+ case OPCODE_SIN:
+ inst = track_used_srcreg(s, inst, 0, 0x1);
+ break;
+ case OPCODE_DP3:
+ inst = track_used_srcreg(s, inst, 0, 0x7);
+ inst = track_used_srcreg(s, inst, 1, 0x7);
+ break;
+ case OPCODE_DP4:
+ inst = track_used_srcreg(s, inst, 0, 0xf);
+ inst = track_used_srcreg(s, inst, 1, 0xf);
+ break;
+ case OPCODE_KIL:
+ case OPCODE_TEX:
+ case OPCODE_TXB:
+ case OPCODE_TXP:
+ inst = track_used_srcreg(s, inst, 0, 0xf);
+ break;
+ default:
+ _mesa_problem(s->Ctx, "NqssaDce: Unknown opcode %d\n", inst->Opcode);
+ return;
+ }
+}
+
+
+void radeonNqssaDce(GLcontext *ctx, struct gl_program *p, struct radeon_nqssadce_descr* descr)
+{
+ struct nqssadce_state s;
+
+ _mesa_bzero(&s, sizeof(s));
+ s.Ctx = ctx;
+ s.Program = p;
+ s.Descr = descr;
+ s.Descr->Init(&s);
+ s.IP = p->NumInstructions;
+
+ while(s.IP > 0) {
+ s.IP--;
+ process_instruction(&s);
+ }
+}
diff --git a/src/mesa/drivers/dri/r300/radeon_nqssadce.h b/src/mesa/drivers/dri/r300/radeon_nqssadce.h
new file mode 100644
index 00000000000..a4f94abcb62
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_nqssadce.h
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2008 Nicolai Haehnle.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __RADEON_PROGRAM_NQSSADCE_H_
+#define __RADEON_PROGRAM_NQSSADCE_H_
+
+#include "radeon_program.h"
+
+
+struct register_state {
+ /**
+ * Bitmask indicating which components of the register are sourced
+ * by later instructions.
+ */
+ GLuint Sourced : 4;
+};
+
+/**
+ * Maintain state such as which registers are used, which registers are
+ * read from, etc.
+ */
+struct nqssadce_state {
+ GLcontext *Ctx;
+ struct gl_program *Program;
+ struct radeon_nqssadce_descr *Descr;
+
+ /**
+ * All instructions after this instruction pointer have been dealt with.
+ */
+ int IP;
+
+ /**
+ * Which registers are read by subsequent instructions?
+ */
+ struct register_state Temps[MAX_PROGRAM_TEMPS];
+ struct register_state Outputs[VERT_RESULT_MAX];
+};
+
+
+/**
+ * This structure contains a description of the hardware in-so-far as
+ * it is required for the NqSSA-DCE pass.
+ */
+struct radeon_nqssadce_descr {
+ /**
+ * Fill in which outputs
+ */
+ void (*Init)(struct nqssadce_state *);
+
+ /**
+ * Check whether the given swizzle, absolute and negate combination
+ * can be implemented natively by the hardware for this opcode.
+ */
+ GLboolean (*IsNativeSwizzle)(GLuint opcode, struct prog_src_register reg);
+
+ /**
+ * Emit (at the current IP) the instruction MOV dst, src;
+ * The transformation will work recursively on the emitted instruction(s).
+ */
+ void (*BuildSwizzle)(struct nqssadce_state*, struct prog_dst_register dst, struct prog_src_register src);
+
+ /**
+ * Rewrite instructions that write to DEPR.z to write to DEPR.w
+ * instead (rewriting is done *before* the WriteMask test).
+ */
+ GLboolean RewriteDepthOut;
+ void *Data;
+};
+
+void radeonNqssaDce(GLcontext *ctx, struct gl_program *p, struct radeon_nqssadce_descr* descr);
+
+#endif /* __RADEON_PROGRAM_NQSSADCE_H_ */
diff --git a/src/mesa/drivers/dri/r300/radeon_program.c b/src/mesa/drivers/dri/r300/radeon_program.c
index c8f40e81893..da5e7aefce5 100644
--- a/src/mesa/drivers/dri/r300/radeon_program.c
+++ b/src/mesa/drivers/dri/r300/radeon_program.c
@@ -29,201 +29,6 @@
#include "shader/prog_print.h"
-/**
- * Initialize a compiler structure with a single mixed clause
- * containing all instructions from the source program.
- */
-void radeonCompilerInit(
- struct radeon_compiler *compiler,
- GLcontext *ctx,
- struct gl_program *source)
-{
- struct radeon_clause* clause;
-
- _mesa_memset(compiler, 0, sizeof(*compiler));
- compiler->Source = source;
- compiler->Ctx = ctx;
-
- compiler->NumTemporaries = source->NumTemporaries;
-
- clause = radeonCompilerInsertClause(compiler, 0, CLAUSE_MIXED);
- clause->NumInstructions = 0;
- while(source->Instructions[clause->NumInstructions].Opcode != OPCODE_END)
- clause->NumInstructions++;
- clause->ReservedInstructions = clause->NumInstructions;
- clause->Instructions = _mesa_alloc_instructions(clause->NumInstructions);
- _mesa_copy_instructions(clause->Instructions, source->Instructions, clause->NumInstructions);
-}
-
-
-/**
- * Free all data that is referenced by the compiler structure.
- * However, the compiler structure itself is not freed.
- */
-void radeonCompilerCleanup(struct radeon_compiler *compiler)
-{
- radeonCompilerEraseClauses(compiler, 0, compiler->NumClauses);
-}
-
-
-/**
- * Allocate and return a unique temporary register.
- */
-int radeonCompilerAllocateTemporary(struct radeon_compiler *compiler)
-{
- if (compiler->NumTemporaries >= 256) {
- _mesa_problem(compiler->Ctx, "radeonCompiler: Too many temporaries");
- return 0;
- }
-
- return compiler->NumTemporaries++;
-}
-
-
-static const char* clausename(int type)
-{
- switch(type) {
- case CLAUSE_MIXED: return "CLAUSE_MIXED";
- case CLAUSE_ALU: return "CLAUSE_ALU";
- case CLAUSE_TEX: return "CLAUSE_TEX";
- default: return "CLAUSE_UNKNOWN";
- }
-}
-
-
-/**
- * Dump the current compiler state to the console for debugging.
- */
-void radeonCompilerDump(struct radeon_compiler *compiler)
-{
- int i;
- for(i = 0; i < compiler->NumClauses; ++i) {
- struct radeon_clause *clause = &compiler->Clauses[i];
- int j;
-
- _mesa_printf("%2i: %s\n", i+1, clausename(clause->Type));
-
- for(j = 0; j < clause->NumInstructions; ++j) {
- _mesa_printf("%4i: ", j+1);
- _mesa_print_instruction(&clause->Instructions[j]);
- }
- }
-}
-
-
-/**
- * \p position index of the new clause; later clauses are moved
- * \p type of the new clause; one of CLAUSE_XXX
- * \return a pointer to the new clause
- */
-struct radeon_clause* radeonCompilerInsertClause(
- struct radeon_compiler *compiler,
- int position, int type)
-{
- struct radeon_clause* oldClauses = compiler->Clauses;
- struct radeon_clause* clause;
-
- assert(position >= 0 && position <= compiler->NumClauses);
-
- compiler->Clauses = (struct radeon_clause *)
- _mesa_malloc((compiler->NumClauses+1) * sizeof(struct radeon_clause));
- if (oldClauses) {
- _mesa_memcpy(compiler->Clauses, oldClauses,
- position*sizeof(struct radeon_clause));
- _mesa_memcpy(compiler->Clauses+position+1, oldClauses+position,
- (compiler->NumClauses - position) * sizeof(struct radeon_clause));
- _mesa_free(oldClauses);
- }
- compiler->NumClauses++;
-
- clause = compiler->Clauses + position;
- _mesa_memset(clause, 0, sizeof(*clause));
- clause->Type = type;
-
- return clause;
-}
-
-
-/**
- * Remove clauses in the range [start, end)
- */
-void radeonCompilerEraseClauses(
- struct radeon_compiler *compiler,
- int start, int end)
-{
- struct radeon_clause* oldClauses = compiler->Clauses;
- int i;
-
- assert(0 <= start);
- assert(start <= end);
- assert(end <= compiler->NumClauses);
-
- if (end == start)
- return;
-
- for(i = start; i < end; ++i) {
- struct radeon_clause* clause = oldClauses + i;
- _mesa_free_instructions(clause->Instructions, clause->NumInstructions);
- }
-
- if (start > 0 || end < compiler->NumClauses) {
- compiler->Clauses = (struct radeon_clause*)
- _mesa_malloc((compiler->NumClauses+start-end) * sizeof(struct radeon_clause));
- _mesa_memcpy(compiler->Clauses, oldClauses,
- start * sizeof(struct radeon_clause));
- _mesa_memcpy(compiler->Clauses + start, oldClauses + end,
- (compiler->NumClauses - end) * sizeof(struct radeon_clause));
- compiler->NumClauses -= end - start;
- } else {
- compiler->Clauses = 0;
- compiler->NumClauses = 0;
- }
-
- _mesa_free(oldClauses);
-}
-
-
-/**
- * Insert new instructions at the given position, initialize them as NOPs
- * and return a pointer to the first new instruction.
- */
-struct prog_instruction* radeonClauseInsertInstructions(
- struct radeon_compiler *compiler,
- struct radeon_clause *clause,
- int position, int count)
-{
- int newNumInstructions = clause->NumInstructions + count;
-
- assert(position >= 0 && position <= clause->NumInstructions);
-
- if (newNumInstructions <= clause->ReservedInstructions) {
- memmove(clause->Instructions + position + count, clause->Instructions + position,
- (clause->NumInstructions - position) * sizeof(struct prog_instruction));
- } else {
- struct prog_instruction *oldInstructions = clause->Instructions;
-
- clause->ReservedInstructions *= 2;
- if (newNumInstructions > clause->ReservedInstructions)
- clause->ReservedInstructions = newNumInstructions;
-
- clause->Instructions = (struct prog_instruction*)
- _mesa_malloc(clause->ReservedInstructions * sizeof(struct prog_instruction));
-
- if (oldInstructions) {
- _mesa_memcpy(clause->Instructions, oldInstructions,
- position * sizeof(struct prog_instruction));
- _mesa_memcpy(clause->Instructions + position + count, oldInstructions + position,
- (clause->NumInstructions - position) * sizeof(struct prog_instruction));
-
- _mesa_free(oldInstructions);
- }
- }
-
- clause->NumInstructions = newNumInstructions;
- _mesa_init_instructions(clause->Instructions + position, count);
- return clause->Instructions + position;
-}
-
/**
* Transform the given clause in the following way:
@@ -240,42 +45,84 @@ struct prog_instruction* radeonClauseInsertInstructions(
* \note The transform is called 'local' because it can only look at
* one instruction at a time.
*/
-void radeonClauseLocalTransform(
- struct radeon_compiler *compiler,
- struct radeon_clause *clause,
+void radeonLocalTransform(
+ GLcontext *Ctx,
+ struct gl_program *program,
int num_transformations,
struct radeon_program_transformation* transformations)
{
- struct radeon_program_transform_context context;
- struct radeon_clause source;
+ struct radeon_transform_context ctx;
int ip;
- source = *clause;
- clause->Instructions = 0;
- clause->NumInstructions = 0;
- clause->ReservedInstructions = 0;
+ ctx.Ctx = Ctx;
+ ctx.Program = program;
+ ctx.OldInstructions = program->Instructions;
+ ctx.OldNumInstructions = program->NumInstructions;
- context.compiler = compiler;
- context.dest = clause;
- context.src = &source;
+ program->Instructions = 0;
+ program->NumInstructions = 0;
- for(ip = 0; ip < source.NumInstructions; ++ip) {
- struct prog_instruction *instr = source.Instructions + ip;
+ for(ip = 0; ip < ctx.OldNumInstructions; ++ip) {
+ struct prog_instruction *instr = ctx.OldInstructions + ip;
int i;
for(i = 0; i < num_transformations; ++i) {
struct radeon_program_transformation* t = transformations + i;
- if (t->function(&context, instr, t->userData))
+ if (t->function(&ctx, instr, t->userData))
break;
}
if (i >= num_transformations) {
- struct prog_instruction *tgt =
- radeonClauseInsertInstructions(compiler, clause, clause->NumInstructions, 1);
- _mesa_copy_instructions(tgt, instr, 1);
+ struct prog_instruction* dest = radeonAppendInstructions(program, 1);
+ _mesa_copy_instructions(dest, instr, 1);
+ }
+ }
+
+ _mesa_free_instructions(ctx.OldInstructions, ctx.OldNumInstructions);
+}
+
+
+static void scan_instructions(GLboolean* used, const struct prog_instruction* insts, GLuint count)
+{
+ GLuint i;
+ for (i = 0; i < count; i++) {
+ const struct prog_instruction *inst = insts + i;
+ const GLuint n = _mesa_num_inst_src_regs(inst->Opcode);
+ GLuint k;
+
+ for (k = 0; k < n; k++) {
+ if (inst->SrcReg[k].File == PROGRAM_TEMPORARY)
+ used[inst->SrcReg[k].Index] = GL_TRUE;
}
}
+}
- _mesa_free_instructions(source.Instructions, source.NumInstructions);
+GLint radeonFindFreeTemporary(struct radeon_transform_context *t)
+{
+ GLboolean used[MAX_PROGRAM_TEMPS];
+ GLuint i;
+
+ _mesa_memset(used, 0, sizeof(used));
+ scan_instructions(used, t->Program->Instructions, t->Program->NumInstructions);
+ scan_instructions(used, t->OldInstructions, t->OldNumInstructions);
+
+ for (i = 0; i < MAX_PROGRAM_TEMPS; i++) {
+ if (!used[i])
+ return i;
+ }
+
+ return -1;
+}
+
+
+/**
+ * Append the given number of instructions to the program and return a
+ * pointer to the first new instruction.
+ */
+struct prog_instruction *radeonAppendInstructions(struct gl_program *program, int count)
+{
+ int oldnum = program->NumInstructions;
+ _mesa_insert_instructions(program, oldnum, count);
+ return program->Instructions + oldnum;
}
diff --git a/src/mesa/drivers/dri/r300/radeon_program.h b/src/mesa/drivers/dri/r300/radeon_program.h
index 25e70505b16..2e01dd496b3 100644
--- a/src/mesa/drivers/dri/r300/radeon_program.h
+++ b/src/mesa/drivers/dri/r300/radeon_program.h
@@ -45,100 +45,28 @@ enum {
PROGRAM_BUILTIN = PROGRAM_FILE_MAX /**< not a real register, but a special swizzle constant */
};
-#define SWIZZLE_0000 MAKE_SWIZZLE4(SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO)
-#define SWIZZLE_1111 MAKE_SWIZZLE4(SWIZZLE_ONE, SWIZZLE_ONE, SWIZZLE_ONE, SWIZZLE_ONE)
-
-/**
- * A clause is simply a sequence of instructions that are executed
- * in order.
- */
-struct radeon_clause {
- /**
- * Type of this clause, one of CLAUSE_XXX.
- */
- int Type : 2;
-
- /**
- * Pointer to an array of instructions.
- * The array is terminated by an OPCODE_END instruction.
- */
- struct prog_instruction *Instructions;
-
- /**
- * Number of instructions in this clause.
- */
- int NumInstructions;
-
- /**
- * Space reserved for instructions in this clause.
- */
- int ReservedInstructions;
-};
-
-/**
- * A compile object, holding the current intermediate state during compilation.
- */
-struct radeon_compiler {
- struct gl_program *Source;
- GLcontext* Ctx;
-
- /**
- * Number of clauses in this program.
- */
- int NumClauses;
-
- /**
- * Pointer to an array of NumClauses clauses.
- */
- struct radeon_clause *Clauses;
-
- /**
- * Number of registers in the PROGRAM_TEMPORARIES file.
- */
- int NumTemporaries;
+enum {
+ OPCODE_REPL_ALPHA = MAX_OPCODE /**< used in paired instructions */
};
-void radeonCompilerInit(
- struct radeon_compiler *compiler,
- GLcontext *ctx,
- struct gl_program *source);
-void radeonCompilerCleanup(struct radeon_compiler *compiler);
-int radeonCompilerAllocateTemporary(struct radeon_compiler *compiler);
-void radeonCompilerDump(struct radeon_compiler *compiler);
-
-struct radeon_clause *radeonCompilerInsertClause(
- struct radeon_compiler *compiler,
- int position,
- int type);
-void radeonCompilerEraseClauses(
- struct radeon_compiler *compiler,
- int start,
- int end);
-
-struct prog_instruction* radeonClauseInsertInstructions(
- struct radeon_compiler *compiler,
- struct radeon_clause *clause,
- int position, int count);
+#define SWIZZLE_0000 MAKE_SWIZZLE4(SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO)
+#define SWIZZLE_1111 MAKE_SWIZZLE4(SWIZZLE_ONE, SWIZZLE_ONE, SWIZZLE_ONE, SWIZZLE_ONE)
/**
+ * Transformation context that is passed to local transformations.
*
+ * Care must be taken with some operations during transformation,
+ * e.g. finding new temporary registers must use @ref radeonFindFreeTemporary
*/
-struct radeon_program_transform_context {
- struct radeon_compiler *compiler;
-
- /**
- * Destination clause where new instructions must be written.
- */
- struct radeon_clause *dest;
-
- /**
- * Original clause that is currently being transformed.
- */
- struct radeon_clause *src;
+struct radeon_transform_context {
+ GLcontext *Ctx;
+ struct gl_program *Program;
+ struct prog_instruction *OldInstructions;
+ GLuint OldNumInstructions;
};
/**
- * A transformation that can be passed to \ref radeonClauseLinearTransform.
+ * A transformation that can be passed to \ref radeonLocalTransform.
*
* The function will be called once for each instruction.
* It has to either emit the appropriate transformed code for the instruction
@@ -149,16 +77,23 @@ struct radeon_program_transform_context {
*/
struct radeon_program_transformation {
GLboolean (*function)(
- struct radeon_program_transform_context*,
+ struct radeon_transform_context*,
struct prog_instruction*,
void*);
void *userData;
};
-void radeonClauseLocalTransform(
- struct radeon_compiler *compiler,
- struct radeon_clause *clause,
+void radeonLocalTransform(
+ GLcontext* ctx,
+ struct gl_program *program,
int num_transformations,
struct radeon_program_transformation* transformations);
+/**
+ * Find a usable free temporary register during program transformation
+ */
+GLint radeonFindFreeTemporary(struct radeon_transform_context *ctx);
+
+struct prog_instruction *radeonAppendInstructions(struct gl_program *program, int count);
+
#endif
diff --git a/src/mesa/drivers/dri/r300/radeon_program_alu.c b/src/mesa/drivers/dri/r300/radeon_program_alu.c
index 7fe940a7d7f..e0a2bd0e934 100644
--- a/src/mesa/drivers/dri/r300/radeon_program_alu.c
+++ b/src/mesa/drivers/dri/r300/radeon_program_alu.c
@@ -35,46 +35,45 @@
#include "radeon_program_alu.h"
+#include "shader/prog_parameter.h"
-static struct prog_instruction *emit1(struct radeon_program_transform_context* ctx,
- gl_inst_opcode Opcode, struct prog_dst_register DstReg,
+
+static struct prog_instruction *emit1(struct gl_program* p,
+ gl_inst_opcode Opcode, GLuint Saturate, struct prog_dst_register DstReg,
struct prog_src_register SrcReg)
{
- struct prog_instruction *fpi =
- radeonClauseInsertInstructions(ctx->compiler, ctx->dest,
- ctx->dest->NumInstructions, 1);
+ struct prog_instruction *fpi = radeonAppendInstructions(p, 1);
fpi->Opcode = Opcode;
+ fpi->SaturateMode = Saturate;
fpi->DstReg = DstReg;
fpi->SrcReg[0] = SrcReg;
return fpi;
}
-static struct prog_instruction *emit2(struct radeon_program_transform_context* ctx,
- gl_inst_opcode Opcode, struct prog_dst_register DstReg,
+static struct prog_instruction *emit2(struct gl_program* p,
+ gl_inst_opcode Opcode, GLuint Saturate, struct prog_dst_register DstReg,
struct prog_src_register SrcReg0, struct prog_src_register SrcReg1)
{
- struct prog_instruction *fpi =
- radeonClauseInsertInstructions(ctx->compiler, ctx->dest,
- ctx->dest->NumInstructions, 1);
+ struct prog_instruction *fpi = radeonAppendInstructions(p, 1);
fpi->Opcode = Opcode;
+ fpi->SaturateMode = Saturate;
fpi->DstReg = DstReg;
fpi->SrcReg[0] = SrcReg0;
fpi->SrcReg[1] = SrcReg1;
return fpi;
}
-static struct prog_instruction *emit3(struct radeon_program_transform_context* ctx,
- gl_inst_opcode Opcode, struct prog_dst_register DstReg,
+static struct prog_instruction *emit3(struct gl_program* p,
+ gl_inst_opcode Opcode, GLuint Saturate, struct prog_dst_register DstReg,
struct prog_src_register SrcReg0, struct prog_src_register SrcReg1,
struct prog_src_register SrcReg2)
{
- struct prog_instruction *fpi =
- radeonClauseInsertInstructions(ctx->compiler, ctx->dest,
- ctx->dest->NumInstructions, 1);
+ struct prog_instruction *fpi = radeonAppendInstructions(p, 1);
fpi->Opcode = Opcode;
+ fpi->SaturateMode = Saturate;
fpi->DstReg = DstReg;
fpi->SrcReg[0] = SrcReg0;
fpi->SrcReg[1] = SrcReg1;
@@ -107,6 +106,19 @@ static struct prog_dst_register dstreg(int file, int index)
return dst;
}
+static struct prog_dst_register dstregtmpmask(int index, int mask)
+{
+ struct prog_dst_register dst;
+ dst.File = PROGRAM_TEMPORARY;
+ dst.Index = index;
+ dst.WriteMask = mask;
+ dst.CondMask = COND_TR;
+ dst.CondSwizzle = SWIZZLE_NOOP;
+ dst.CondSrc = 0;
+ dst.pad = 0;
+ return dst;
+}
+
static const struct prog_src_register builtin_zero = {
.File = PROGRAM_BUILTIN,
.Index = 0,
@@ -131,6 +143,24 @@ static struct prog_src_register srcreg(int file, int index)
return src;
}
+static struct prog_src_register srcregswz(int file, int index, int swz)
+{
+ struct prog_src_register src = srcreg_undefined;
+ src.File = file;
+ src.Index = index;
+ src.Swizzle = swz;
+ return src;
+}
+
+static struct prog_src_register absolute(struct prog_src_register reg)
+{
+ struct prog_src_register newreg = reg;
+ newreg.Abs = 1;
+ newreg.NegateBase = 0;
+ newreg.NegateAbs = 0;
+ return newreg;
+}
+
static struct prog_src_register negate(struct prog_src_register reg)
{
struct prog_src_register newreg = reg;
@@ -142,10 +172,10 @@ static struct prog_src_register swizzle(struct prog_src_register reg, GLuint x,
{
struct prog_src_register swizzled = reg;
swizzled.Swizzle = MAKE_SWIZZLE4(
- GET_SWZ(reg.Swizzle, x),
- GET_SWZ(reg.Swizzle, y),
- GET_SWZ(reg.Swizzle, z),
- GET_SWZ(reg.Swizzle, w));
+ x >= 4 ? x : GET_SWZ(reg.Swizzle, x),
+ y >= 4 ? y : GET_SWZ(reg.Swizzle, y),
+ z >= 4 ? z : GET_SWZ(reg.Swizzle, z),
+ w >= 4 ? w : GET_SWZ(reg.Swizzle, w));
return swizzled;
}
@@ -154,24 +184,24 @@ static struct prog_src_register scalar(struct prog_src_register reg)
return swizzle(reg, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X);
}
-static void transform_ABS(struct radeon_program_transform_context* ctx,
+static void transform_ABS(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
struct prog_src_register src = inst->SrcReg[0];
src.Abs = 1;
src.NegateBase = 0;
src.NegateAbs = 0;
- emit1(ctx, OPCODE_MOV, inst->DstReg, src);
+ emit1(t->Program, OPCODE_MOV, inst->SaturateMode, inst->DstReg, src);
}
-static void transform_DPH(struct radeon_program_transform_context* ctx,
+static void transform_DPH(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
struct prog_src_register src0 = inst->SrcReg[0];
if (src0.NegateAbs) {
if (src0.Abs) {
- int tempreg = radeonCompilerAllocateTemporary(ctx->compiler);
- emit1(ctx, OPCODE_MOV, dstreg(PROGRAM_TEMPORARY, tempreg), src0);
+ int tempreg = radeonFindFreeTemporary(t);
+ emit1(t->Program, OPCODE_MOV, 0, dstreg(PROGRAM_TEMPORARY, tempreg), src0);
src0 = srcreg(src0.File, src0.Index);
} else {
src0.NegateAbs = 0;
@@ -180,70 +210,191 @@ static void transform_DPH(struct radeon_program_transform_context* ctx,
}
set_swizzle(&src0, 3, SWIZZLE_ONE);
set_negate_base(&src0, 3, 0);
- emit2(ctx, OPCODE_DP4, inst->DstReg, src0, inst->SrcReg[1]);
+ emit2(t->Program, OPCODE_DP4, inst->SaturateMode, inst->DstReg, src0, inst->SrcReg[1]);
}
-static void transform_FLR(struct radeon_program_transform_context* ctx,
+/**
+ * [1, src0.y*src1.y, src0.z, src1.w]
+ * So basically MUL with lotsa swizzling.
+ */
+static void transform_DST(struct radeon_transform_context* t,
+ struct prog_instruction* inst)
+{
+ emit2(t->Program, OPCODE_MUL, inst->SaturateMode, inst->DstReg,
+ swizzle(inst->SrcReg[0], SWIZZLE_ONE, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_ONE),
+ swizzle(inst->SrcReg[1], SWIZZLE_ONE, SWIZZLE_Y, SWIZZLE_ONE, SWIZZLE_W));
+}
+
+static void transform_FLR(struct radeon_transform_context* t,
+ struct prog_instruction* inst)
+{
+ int tempreg = radeonFindFreeTemporary(t);
+ emit1(t->Program, OPCODE_FRC, 0, dstreg(PROGRAM_TEMPORARY, tempreg), inst->SrcReg[0]);
+ emit2(t->Program, OPCODE_ADD, inst->SaturateMode, inst->DstReg,
+ inst->SrcReg[0], negate(srcreg(PROGRAM_TEMPORARY, tempreg)));
+}
+
+/**
+ * Definition of LIT (from ARB_fragment_program):
+ *
+ * tmp = VectorLoad(op0);
+ * if (tmp.x < 0) tmp.x = 0;
+ * if (tmp.y < 0) tmp.y = 0;
+ * if (tmp.w < -(128.0-epsilon)) tmp.w = -(128.0-epsilon);
+ * else if (tmp.w > 128-epsilon) tmp.w = 128-epsilon;
+ * result.x = 1.0;
+ * result.y = tmp.x;
+ * result.z = (tmp.x > 0) ? RoughApproxPower(tmp.y, tmp.w) : 0.0;
+ * result.w = 1.0;
+ *
+ * The longest path of computation is the one leading to result.z,
+ * consisting of 5 operations. This implementation of LIT takes
+ * 5 slots, if the subsequent optimization passes are clever enough
+ * to pair instructions correctly.
+ */
+static void transform_LIT(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
- int tempreg = radeonCompilerAllocateTemporary(ctx->compiler);
- emit1(ctx, OPCODE_FRC, dstreg(PROGRAM_TEMPORARY, tempreg), inst->SrcReg[0]);
- emit2(ctx, OPCODE_ADD, inst->DstReg, inst->SrcReg[0], negate(srcreg(PROGRAM_TEMPORARY, tempreg)));
+ static const GLfloat LitConst[4] = { -127.999999 };
+
+ GLuint constant;
+ GLuint constant_swizzle;
+ GLuint temp;
+ int needTemporary = 0;
+ struct prog_src_register srctemp;
+
+ constant = _mesa_add_unnamed_constant(t->Program->Parameters, LitConst, 1, &constant_swizzle);
+
+ if (inst->DstReg.WriteMask != WRITEMASK_XYZW) {
+ needTemporary = 1;
+ } else if (inst->DstReg.File != PROGRAM_TEMPORARY) {
+ // LIT is typically followed by DP3/DP4, so there's no point
+ // in creating special code for this case
+ needTemporary = 1;
+ }
+
+ if (needTemporary) {
+ temp = radeonFindFreeTemporary(t);
+ } else {
+ temp = inst->DstReg.Index;
+ }
+ srctemp = srcreg(PROGRAM_TEMPORARY, temp);
+
+ // tmp.x = max(0.0, Src.x);
+ // tmp.y = max(0.0, Src.y);
+ // tmp.w = clamp(Src.z, -128+eps, 128-eps);
+ emit2(t->Program, OPCODE_MAX, 0,
+ dstregtmpmask(temp, WRITEMASK_XYW),
+ inst->SrcReg[0],
+ swizzle(srcreg(PROGRAM_CONSTANT, constant),
+ SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, constant_swizzle&3));
+ emit2(t->Program, OPCODE_MIN, 0,
+ dstregtmpmask(temp, WRITEMASK_Z),
+ swizzle(srctemp, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ negate(srcregswz(PROGRAM_CONSTANT, constant, constant_swizzle)));
+
+ // tmp.w = Pow(tmp.y, tmp.w)
+ emit1(t->Program, OPCODE_LG2, 0,
+ dstregtmpmask(temp, WRITEMASK_W),
+ swizzle(srctemp, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y));
+ emit2(t->Program, OPCODE_MUL, 0,
+ dstregtmpmask(temp, WRITEMASK_W),
+ swizzle(srctemp, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ swizzle(srctemp, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z));
+ emit1(t->Program, OPCODE_EX2, 0,
+ dstregtmpmask(temp, WRITEMASK_W),
+ swizzle(srctemp, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W));
+
+ // tmp.z = (tmp.x > 0) ? tmp.w : 0.0
+ emit3(t->Program, OPCODE_CMP, inst->SaturateMode,
+ dstregtmpmask(temp, WRITEMASK_Z),
+ negate(swizzle(srctemp, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X)),
+ swizzle(srctemp, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ builtin_zero);
+
+ // tmp.x, tmp.y, tmp.w = 1.0, tmp.x, 1.0
+ emit1(t->Program, OPCODE_MOV, inst->SaturateMode,
+ dstregtmpmask(temp, WRITEMASK_XYW),
+ swizzle(srctemp, SWIZZLE_ONE, SWIZZLE_X, SWIZZLE_ONE, SWIZZLE_ONE));
+
+ if (needTemporary)
+ emit1(t->Program, OPCODE_MOV, 0, inst->DstReg, srctemp);
}
-static void transform_POW(struct radeon_program_transform_context* ctx,
+static void transform_LRP(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
- int tempreg = radeonCompilerAllocateTemporary(ctx->compiler);
+ int tempreg = radeonFindFreeTemporary(t);
+
+ emit2(t->Program, OPCODE_ADD, 0,
+ dstreg(PROGRAM_TEMPORARY, tempreg),
+ inst->SrcReg[1], negate(inst->SrcReg[2]));
+ emit3(t->Program, OPCODE_MAD, inst->SaturateMode,
+ inst->DstReg,
+ inst->SrcReg[0], srcreg(PROGRAM_TEMPORARY, tempreg), inst->SrcReg[2]);
+}
+
+static void transform_POW(struct radeon_transform_context* t,
+ struct prog_instruction* inst)
+{
+ int tempreg = radeonFindFreeTemporary(t);
struct prog_dst_register tempdst = dstreg(PROGRAM_TEMPORARY, tempreg);
struct prog_src_register tempsrc = srcreg(PROGRAM_TEMPORARY, tempreg);
tempdst.WriteMask = WRITEMASK_W;
tempsrc.Swizzle = SWIZZLE_WWWW;
- emit1(ctx, OPCODE_LG2, tempdst, scalar(inst->SrcReg[0]));
- emit2(ctx, OPCODE_MUL, tempdst, tempsrc, scalar(inst->SrcReg[1]));
- emit1(ctx, OPCODE_EX2, inst->DstReg, tempsrc);
+ emit1(t->Program, OPCODE_LG2, 0, tempdst, scalar(inst->SrcReg[0]));
+ emit2(t->Program, OPCODE_MUL, 0, tempdst, tempsrc, scalar(inst->SrcReg[1]));
+ emit1(t->Program, OPCODE_EX2, inst->SaturateMode, inst->DstReg, tempsrc);
}
-static void transform_SGE(struct radeon_program_transform_context* ctx,
+static void transform_RSQ(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
- int tempreg = radeonCompilerAllocateTemporary(ctx->compiler);
+ emit1(t->Program, OPCODE_RSQ, inst->SaturateMode, inst->DstReg, absolute(inst->SrcReg[0]));
+}
- emit2(ctx, OPCODE_ADD, dstreg(PROGRAM_TEMPORARY, tempreg), inst->SrcReg[0], negate(inst->SrcReg[1]));
- emit3(ctx, OPCODE_CMP, inst->DstReg, srcreg(PROGRAM_TEMPORARY, tempreg), builtin_zero, builtin_one);
+static void transform_SGE(struct radeon_transform_context* t,
+ struct prog_instruction* inst)
+{
+ int tempreg = radeonFindFreeTemporary(t);
+
+ emit2(t->Program, OPCODE_ADD, 0, dstreg(PROGRAM_TEMPORARY, tempreg), inst->SrcReg[0], negate(inst->SrcReg[1]));
+ emit3(t->Program, OPCODE_CMP, inst->SaturateMode, inst->DstReg,
+ srcreg(PROGRAM_TEMPORARY, tempreg), builtin_zero, builtin_one);
}
-static void transform_SLT(struct radeon_program_transform_context* ctx,
+static void transform_SLT(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
- int tempreg = radeonCompilerAllocateTemporary(ctx->compiler);
+ int tempreg = radeonFindFreeTemporary(t);
- emit2(ctx, OPCODE_ADD, dstreg(PROGRAM_TEMPORARY, tempreg), inst->SrcReg[0], negate(inst->SrcReg[1]));
- emit3(ctx, OPCODE_CMP, inst->DstReg, srcreg(PROGRAM_TEMPORARY, tempreg), builtin_one, builtin_zero);
+ emit2(t->Program, OPCODE_ADD, 0, dstreg(PROGRAM_TEMPORARY, tempreg), inst->SrcReg[0], negate(inst->SrcReg[1]));
+ emit3(t->Program, OPCODE_CMP, inst->SaturateMode, inst->DstReg,
+ srcreg(PROGRAM_TEMPORARY, tempreg), builtin_one, builtin_zero);
}
-static void transform_SUB(struct radeon_program_transform_context* ctx,
+static void transform_SUB(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
- emit2(ctx, OPCODE_ADD, inst->DstReg, inst->SrcReg[0], negate(inst->SrcReg[1]));
+ emit2(t->Program, OPCODE_ADD, inst->SaturateMode, inst->DstReg, inst->SrcReg[0], negate(inst->SrcReg[1]));
}
-static void transform_SWZ(struct radeon_program_transform_context* ctx,
+static void transform_SWZ(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
- emit1(ctx, OPCODE_MOV, inst->DstReg, inst->SrcReg[0]);
+ emit1(t->Program, OPCODE_MOV, inst->SaturateMode, inst->DstReg, inst->SrcReg[0]);
}
-static void transform_XPD(struct radeon_program_transform_context* ctx,
+static void transform_XPD(struct radeon_transform_context* t,
struct prog_instruction* inst)
{
- int tempreg = radeonCompilerAllocateTemporary(ctx->compiler);
+ int tempreg = radeonFindFreeTemporary(t);
- emit2(ctx, OPCODE_MUL, dstreg(PROGRAM_TEMPORARY, tempreg),
+ emit2(t->Program, OPCODE_MUL, 0, dstreg(PROGRAM_TEMPORARY, tempreg),
swizzle(inst->SrcReg[0], SWIZZLE_Z, SWIZZLE_X, SWIZZLE_Y, SWIZZLE_W),
swizzle(inst->SrcReg[1], SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_X, SWIZZLE_W));
- emit3(ctx, OPCODE_MAD, inst->DstReg,
+ emit3(t->Program, OPCODE_MAD, inst->SaturateMode, inst->DstReg,
swizzle(inst->SrcReg[0], SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_X, SWIZZLE_W),
swizzle(inst->SrcReg[1], SWIZZLE_Z, SWIZZLE_X, SWIZZLE_Y, SWIZZLE_W),
negate(srcreg(PROGRAM_TEMPORARY, tempreg)));
@@ -255,30 +406,226 @@ static void transform_XPD(struct radeon_program_transform_context* ctx,
* no userData necessary.
*
* Eliminates the following ALU instructions:
- * ABS, DPH, FLR, POW, SGE, SLT, SUB, SWZ, XPD
+ * ABS, DPH, DST, FLR, LIT, LRP, POW, SGE, SLT, SUB, SWZ, XPD
* using:
* MOV, ADD, MUL, MAD, FRC, DP3, LG2, EX2, CMP
*
- * @note should be applicable to R300 and R500 fragment programs.
+ * Transforms RSQ to Radeon's native RSQ by explicitly setting
+ * absolute value.
*
- * @todo add LIT here as well?
+ * @note should be applicable to R300 and R500 fragment programs.
*/
-GLboolean radeonTransformALU(
- struct radeon_program_transform_context* ctx,
+GLboolean radeonTransformALU(struct radeon_transform_context* t,
struct prog_instruction* inst,
void* unused)
{
switch(inst->Opcode) {
- case OPCODE_ABS: transform_ABS(ctx, inst); return GL_TRUE;
- case OPCODE_DPH: transform_DPH(ctx, inst); return GL_TRUE;
- case OPCODE_FLR: transform_FLR(ctx, inst); return GL_TRUE;
- case OPCODE_POW: transform_POW(ctx, inst); return GL_TRUE;
- case OPCODE_SGE: transform_SGE(ctx, inst); return GL_TRUE;
- case OPCODE_SLT: transform_SLT(ctx, inst); return GL_TRUE;
- case OPCODE_SUB: transform_SUB(ctx, inst); return GL_TRUE;
- case OPCODE_SWZ: transform_SWZ(ctx, inst); return GL_TRUE;
- case OPCODE_XPD: transform_XPD(ctx, inst); return GL_TRUE;
+ case OPCODE_ABS: transform_ABS(t, inst); return GL_TRUE;
+ case OPCODE_DPH: transform_DPH(t, inst); return GL_TRUE;
+ case OPCODE_DST: transform_DST(t, inst); return GL_TRUE;
+ case OPCODE_FLR: transform_FLR(t, inst); return GL_TRUE;
+ case OPCODE_LIT: transform_LIT(t, inst); return GL_TRUE;
+ case OPCODE_LRP: transform_LRP(t, inst); return GL_TRUE;
+ case OPCODE_POW: transform_POW(t, inst); return GL_TRUE;
+ case OPCODE_RSQ: transform_RSQ(t, inst); return GL_TRUE;
+ case OPCODE_SGE: transform_SGE(t, inst); return GL_TRUE;
+ case OPCODE_SLT: transform_SLT(t, inst); return GL_TRUE;
+ case OPCODE_SUB: transform_SUB(t, inst); return GL_TRUE;
+ case OPCODE_SWZ: transform_SWZ(t, inst); return GL_TRUE;
+ case OPCODE_XPD: transform_XPD(t, inst); return GL_TRUE;
default:
return GL_FALSE;
}
}
+
+
+static void sincos_constants(struct radeon_transform_context* t, GLuint *constants)
+{
+ static const GLfloat SinCosConsts[2][4] = {
+ {
+ 1.273239545, // 4/PI
+ -0.405284735, // -4/(PI*PI)
+ 3.141592654, // PI
+ 0.2225 // weight
+ },
+ {
+ 0.75,
+ 0.5,
+ 0.159154943, // 1/(2*PI)
+ 6.283185307 // 2*PI
+ }
+ };
+ int i;
+
+ for(i = 0; i < 2; ++i) {
+ GLuint swz;
+ constants[i] = _mesa_add_unnamed_constant(t->Program->Parameters, SinCosConsts[i], 4, &swz);
+ ASSERT(swz == SWIZZLE_NOOP);
+ }
+}
+
+/**
+ * Approximate sin(x), where x is clamped to (-pi/2, pi/2).
+ *
+ * MUL tmp.xy, src, { 4/PI, -4/(PI^2) }
+ * MAD tmp.x, tmp.y, |src|, tmp.x
+ * MAD tmp.y, tmp.x, |tmp.x|, -tmp.x
+ * MAD dest, tmp.y, weight, tmp.x
+ */
+static void sin_approx(struct radeon_transform_context* t,
+ struct prog_dst_register dst, struct prog_src_register src, const GLuint* constants)
+{
+ GLuint tempreg = radeonFindFreeTemporary(t);
+
+ emit2(t->Program, OPCODE_MUL, 0, dstregtmpmask(tempreg, WRITEMASK_XY),
+ swizzle(src, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
+ srcreg(PROGRAM_CONSTANT, constants[0]));
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_X),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y),
+ absolute(swizzle(src, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X)),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X));
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_Y),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
+ absolute(swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X)),
+ negate(swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X)));
+ emit3(t->Program, OPCODE_MAD, 0, dst,
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[0]), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X));
+}
+
+/**
+ * Translate the trigonometric functions COS, SIN, and SCS
+ * using only the basic instructions
+ * MOV, ADD, MUL, MAD, FRC
+ */
+GLboolean radeonTransformTrigSimple(struct radeon_transform_context* t,
+ struct prog_instruction* inst,
+ void* unused)
+{
+ if (inst->Opcode != OPCODE_COS &&
+ inst->Opcode != OPCODE_SIN &&
+ inst->Opcode != OPCODE_SCS)
+ return GL_FALSE;
+
+ GLuint constants[2];
+ GLuint tempreg = radeonFindFreeTemporary(t);
+
+ sincos_constants(t, constants);
+
+ if (inst->Opcode == OPCODE_COS) {
+ // MAD tmp.x, src, 1/(2*PI), 0.75
+ // FRC tmp.x, tmp.x
+ // MAD tmp.z, tmp.x, 2*PI, -PI
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_W),
+ swizzle(inst->SrcReg[0], SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X));
+ emit1(t->Program, OPCODE_FRC, 0, dstregtmpmask(tempreg, WRITEMASK_W),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W));
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_W),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ negate(swizzle(srcreg(PROGRAM_CONSTANT, constants[0]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z)));
+
+ sin_approx(t, inst->DstReg,
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ constants);
+ } else if (inst->Opcode == OPCODE_SIN) {
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_W),
+ swizzle(inst->SrcReg[0], SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y));
+ emit1(t->Program, OPCODE_FRC, 0, dstregtmpmask(tempreg, WRITEMASK_W),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W));
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_W),
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ negate(swizzle(srcreg(PROGRAM_CONSTANT, constants[0]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z)));
+
+ sin_approx(t, inst->DstReg,
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ constants);
+ } else {
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_XY),
+ swizzle(inst->SrcReg[0], SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_W));
+ emit1(t->Program, OPCODE_FRC, 0, dstregtmpmask(tempreg, WRITEMASK_XY),
+ srcreg(PROGRAM_TEMPORARY, tempreg));
+ emit3(t->Program, OPCODE_MAD, 0, dstregtmpmask(tempreg, WRITEMASK_XY),
+ srcreg(PROGRAM_TEMPORARY, tempreg),
+ swizzle(srcreg(PROGRAM_CONSTANT, constants[1]), SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W),
+ negate(swizzle(srcreg(PROGRAM_CONSTANT, constants[0]), SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z)));
+
+ struct prog_dst_register dst = inst->DstReg;
+
+ dst.WriteMask = inst->DstReg.WriteMask & WRITEMASK_X;
+ sin_approx(t, dst,
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
+ constants);
+
+ dst.WriteMask = inst->DstReg.WriteMask & WRITEMASK_Y;
+ sin_approx(t, dst,
+ swizzle(srcreg(PROGRAM_TEMPORARY, tempreg), SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y),
+ constants);
+ }
+
+ return GL_TRUE;
+}
+
+
+/**
+ * Transform the trigonometric functions COS, SIN, and SCS
+ * to include pre-scaling by 1/(2*PI) and taking the fractional
+ * part, so that the input to COS and SIN is always in the range [0,1).
+ * SCS is replaced by one COS and one SIN instruction.
+ *
+ * @warning This transformation implicitly changes the semantics of SIN and COS!
+ */
+GLboolean radeonTransformTrigScale(struct radeon_transform_context* t,
+ struct prog_instruction* inst,
+ void* unused)
+{
+ if (inst->Opcode != OPCODE_COS &&
+ inst->Opcode != OPCODE_SIN &&
+ inst->Opcode != OPCODE_SCS)
+ return GL_FALSE;
+
+ static const GLfloat RCP_2PI[] = { 0.15915494309189535 };
+ GLuint temp;
+ GLuint constant;
+ GLuint constant_swizzle;
+
+ temp = radeonFindFreeTemporary(t);
+ constant = _mesa_add_unnamed_constant(t->Program->Parameters, RCP_2PI, 1, &constant_swizzle);
+
+ emit2(t->Program, OPCODE_MUL, 0, dstregtmpmask(temp, WRITEMASK_W),
+ swizzle(inst->SrcReg[0], SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X),
+ srcregswz(PROGRAM_CONSTANT, constant, constant_swizzle));
+ emit1(t->Program, OPCODE_FRC, 0, dstregtmpmask(temp, WRITEMASK_W),
+ srcreg(PROGRAM_TEMPORARY, temp));
+
+ if (inst->Opcode == OPCODE_COS) {
+ emit1(t->Program, OPCODE_COS, inst->SaturateMode, inst->DstReg,
+ srcregswz(PROGRAM_TEMPORARY, temp, SWIZZLE_WWWW));
+ } else if (inst->Opcode == OPCODE_SIN) {
+ emit1(t->Program, OPCODE_SIN, inst->SaturateMode,
+ inst->DstReg, srcregswz(PROGRAM_TEMPORARY, temp, SWIZZLE_WWWW));
+ } else if (inst->Opcode == OPCODE_SCS) {
+ struct prog_dst_register moddst = inst->DstReg;
+
+ if (inst->DstReg.WriteMask & WRITEMASK_X) {
+ moddst.WriteMask = WRITEMASK_X;
+ emit1(t->Program, OPCODE_COS, inst->SaturateMode, moddst,
+ srcregswz(PROGRAM_TEMPORARY, temp, SWIZZLE_WWWW));
+ }
+ if (inst->DstReg.WriteMask & WRITEMASK_Y) {
+ moddst.WriteMask = WRITEMASK_Y;
+ emit1(t->Program, OPCODE_SIN, inst->SaturateMode, moddst,
+ srcregswz(PROGRAM_TEMPORARY, temp, SWIZZLE_WWWW));
+ }
+ }
+
+ return GL_TRUE;
+}
diff --git a/src/mesa/drivers/dri/r300/radeon_program_alu.h b/src/mesa/drivers/dri/r300/radeon_program_alu.h
index 940459624fc..ea9d5bb669c 100644
--- a/src/mesa/drivers/dri/r300/radeon_program_alu.h
+++ b/src/mesa/drivers/dri/r300/radeon_program_alu.h
@@ -31,7 +31,17 @@
#include "radeon_program.h"
GLboolean radeonTransformALU(
- struct radeon_program_transform_context*,
+ struct radeon_transform_context *t,
+ struct prog_instruction*,
+ void*);
+
+GLboolean radeonTransformTrigSimple(
+ struct radeon_transform_context *t,
+ struct prog_instruction*,
+ void*);
+
+GLboolean radeonTransformTrigScale(
+ struct radeon_transform_context *t,
struct prog_instruction*,
void*);
diff --git a/src/mesa/drivers/dri/r300/radeon_program_pair.c b/src/mesa/drivers/dri/r300/radeon_program_pair.c
new file mode 100644
index 00000000000..8762422801e
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_program_pair.c
@@ -0,0 +1,983 @@
+/*
+ * Copyright (C) 2008 Nicolai Haehnle.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/**
+ * @file
+ *
+ * Perform temporary register allocation and attempt to pair off instructions
+ * in RGB and Alpha pairs. Also attempts to optimize the TEX instruction
+ * vs. ALU instruction scheduling.
+ */
+
+#include "radeon_program_pair.h"
+
+#include "radeon_context.h"
+
+#include "shader/prog_print.h"
+
+#define error(fmt, args...) do { \
+ _mesa_problem(s->Ctx, "%s::%s(): " fmt "\n", \
+ __FILE__, __FUNCTION__, ##args); \
+ s->Error = GL_TRUE; \
+} while(0)
+
+struct pair_state_instruction {
+ GLuint IsTex:1; /**< Is a texture instruction */
+ GLuint NeedRGB:1; /**< Needs the RGB ALU */
+ GLuint NeedAlpha:1; /**< Needs the Alpha ALU */
+ GLuint IsTranscendent:1; /**< Is a special transcendent instruction */
+
+ /**
+ * Number of (read and write) dependencies that must be resolved before
+ * this instruction can be scheduled.
+ */
+ GLuint NumDependencies:5;
+
+ /**
+ * Next instruction in the linked list of ready instructions.
+ */
+ struct pair_state_instruction *NextReady;
+
+ /**
+ * Values that this instruction writes
+ */
+ struct reg_value *Values[4];
+};
+
+
+/**
+ * Used to keep track of which instructions read a value.
+ */
+struct reg_value_reader {
+ GLuint IP; /**< IP of the instruction that performs this access */
+ struct reg_value_reader *Next;
+};
+
+/**
+ * Used to keep track which values are stored in each component of a
+ * PROGRAM_TEMPORARY.
+ */
+struct reg_value {
+ GLuint IP; /**< IP of the instruction that writes this value */
+ struct reg_value *Next; /**< Pointer to the next value to be written to the same PROGRAM_TEMPORARY component */
+
+ /**
+ * Unordered linked list of instructions that read from this value.
+ */
+ struct reg_value_reader *Readers;
+
+ /**
+ * Number of readers of this value. This is calculated during @ref scan_instructions
+ * and continually decremented during code emission.
+ * When this count reaches zero, the instruction that writes the @ref Next value
+ * can be scheduled.
+ */
+ GLuint NumReaders;
+};
+
+/**
+ * Used to translate a PROGRAM_INPUT or PROGRAM_TEMPORARY Mesa register
+ * to the proper hardware temporary.
+ */
+struct pair_register_translation {
+ GLuint Allocated:1;
+ GLuint HwIndex:8;
+ GLuint RefCount:23; /**< # of times this occurs in an unscheduled instruction SrcReg or DstReg */
+
+ /**
+ * Notes the value that is currently contained in each component
+ * (only used for PROGRAM_TEMPORARY registers).
+ */
+ struct reg_value *Value[4];
+};
+
+struct pair_state {
+ GLcontext *Ctx;
+ struct gl_program *Program;
+ const struct radeon_pair_handler *Handler;
+ GLboolean Error;
+ GLboolean Debug;
+ GLboolean Verbose;
+ void *UserData;
+
+ /**
+ * Translate Mesa registers to hardware registers
+ */
+ struct pair_register_translation Inputs[FRAG_ATTRIB_MAX];
+ struct pair_register_translation Temps[MAX_PROGRAM_TEMPS];
+
+ /**
+ * Derived information about program instructions.
+ */
+ struct pair_state_instruction *Instructions;
+
+ struct {
+ GLuint RefCount; /**< # of times this occurs in an unscheduled SrcReg or DstReg */
+ } HwTemps[128];
+
+ /**
+ * Linked list of instructions that can be scheduled right now,
+ * based on which ALU/TEX resources they require.
+ */
+ struct pair_state_instruction *ReadyFullALU;
+ struct pair_state_instruction *ReadyRGB;
+ struct pair_state_instruction *ReadyAlpha;
+ struct pair_state_instruction *ReadyTEX;
+
+ /**
+ * Pool of @ref reg_value structures for fast allocation.
+ */
+ struct reg_value *ValuePool;
+ GLuint ValuePoolUsed;
+ struct reg_value_reader *ReaderPool;
+ GLuint ReaderPoolUsed;
+};
+
+
+static struct pair_register_translation *get_register(struct pair_state *s, GLuint file, GLuint index)
+{
+ switch(file) {
+ case PROGRAM_TEMPORARY: return &s->Temps[index];
+ case PROGRAM_INPUT: return &s->Inputs[index];
+ default: return 0;
+ }
+}
+
+static void alloc_hw_reg(struct pair_state *s, GLuint file, GLuint index, GLuint hwindex)
+{
+ struct pair_register_translation *t = get_register(s, file, index);
+ ASSERT(!s->HwTemps[hwindex].RefCount);
+ ASSERT(!t->Allocated);
+ s->HwTemps[hwindex].RefCount = t->RefCount;
+ t->Allocated = 1;
+ t->HwIndex = hwindex;
+}
+
+static GLuint get_hw_reg(struct pair_state *s, GLuint file, GLuint index)
+{
+ GLuint hwindex;
+
+ struct pair_register_translation *t = get_register(s, file, index);
+ if (!t) {
+ _mesa_problem(s->Ctx, "get_hw_reg: %i[%i]\n", file, index);
+ return 0;
+ }
+
+ if (t->Allocated)
+ return t->HwIndex;
+
+ for(hwindex = 0; hwindex < s->Handler->MaxHwTemps; ++hwindex)
+ if (!s->HwTemps[hwindex].RefCount)
+ break;
+
+ if (hwindex >= s->Handler->MaxHwTemps) {
+ error("Ran out of hardware temporaries");
+ return 0;
+ }
+
+ alloc_hw_reg(s, file, index, hwindex);
+ return hwindex;
+}
+
+
+static void deref_hw_reg(struct pair_state *s, GLuint hwindex)
+{
+ if (!s->HwTemps[hwindex].RefCount) {
+ error("Hwindex %i refcount error", hwindex);
+ return;
+ }
+
+ s->HwTemps[hwindex].RefCount--;
+}
+
+static void add_pairinst_to_list(struct pair_state_instruction **list, struct pair_state_instruction *pairinst)
+{
+ pairinst->NextReady = *list;
+ *list = pairinst;
+}
+
+/**
+ * The instruction at the given IP has become ready. Link it into the ready
+ * instructions.
+ */
+static void instruction_ready(struct pair_state *s, int ip)
+{
+ struct pair_state_instruction *pairinst = s->Instructions + ip;
+
+ if (s->Verbose)
+ _mesa_printf("instruction_ready(%i)\n", ip);
+
+ if (pairinst->IsTex)
+ add_pairinst_to_list(&s->ReadyTEX, pairinst);
+ else if (!pairinst->NeedAlpha)
+ add_pairinst_to_list(&s->ReadyRGB, pairinst);
+ else if (!pairinst->NeedRGB)
+ add_pairinst_to_list(&s->ReadyAlpha, pairinst);
+ else
+ add_pairinst_to_list(&s->ReadyFullALU, pairinst);
+}
+
+
+/**
+ * Finally rewrite ADD, MOV, MUL as the appropriate native instruction
+ * and reverse the order of arguments for CMP.
+ */
+static void final_rewrite(struct pair_state *s, struct prog_instruction *inst)
+{
+ struct prog_src_register tmp;
+
+ switch(inst->Opcode) {
+ case OPCODE_ADD:
+ inst->SrcReg[2] = inst->SrcReg[1];
+ inst->SrcReg[1].File = PROGRAM_BUILTIN;
+ inst->SrcReg[1].Swizzle = SWIZZLE_1111;
+ inst->SrcReg[1].NegateBase = 0;
+ inst->SrcReg[1].NegateAbs = 0;
+ inst->Opcode = OPCODE_MAD;
+ break;
+ case OPCODE_CMP:
+ tmp = inst->SrcReg[2];
+ inst->SrcReg[2] = inst->SrcReg[0];
+ inst->SrcReg[0] = tmp;
+ break;
+ case OPCODE_MOV:
+ inst->SrcReg[1] = inst->SrcReg[0];
+ inst->SrcReg[2].File = PROGRAM_BUILTIN;
+ inst->SrcReg[2].Swizzle = SWIZZLE_0000;
+ inst->Opcode = OPCODE_CMP;
+ // TODO: disable output modifiers on R500
+ break;
+ case OPCODE_MUL:
+ inst->SrcReg[2].File = PROGRAM_BUILTIN;
+ inst->SrcReg[2].Swizzle = SWIZZLE_0000;
+ inst->Opcode = OPCODE_MAD;
+ break;
+ default:
+ /* nothing to do */
+ break;
+ }
+}
+
+
+/**
+ * Classify an instruction according to which ALUs etc. it needs
+ */
+static void classify_instruction(struct pair_state *s,
+ struct prog_instruction *inst, struct pair_state_instruction *pairinst)
+{
+ pairinst->NeedRGB = (inst->DstReg.WriteMask & WRITEMASK_XYZ) ? 1 : 0;
+ pairinst->NeedAlpha = (inst->DstReg.WriteMask & WRITEMASK_W) ? 1 : 0;
+
+ switch(inst->Opcode) {
+ case OPCODE_ADD:
+ case OPCODE_CMP:
+ case OPCODE_FRC:
+ case OPCODE_MAD:
+ case OPCODE_MAX:
+ case OPCODE_MIN:
+ case OPCODE_MOV:
+ case OPCODE_MUL:
+ break;
+ case OPCODE_COS:
+ case OPCODE_EX2:
+ case OPCODE_LG2:
+ case OPCODE_RCP:
+ case OPCODE_RSQ:
+ case OPCODE_SIN:
+ pairinst->IsTranscendent = 1;
+ pairinst->NeedAlpha = 1;
+ break;
+ case OPCODE_DP4:
+ pairinst->NeedAlpha = 1;
+ /* fall through */
+ case OPCODE_DP3:
+ pairinst->NeedRGB = 1;
+ break;
+ case OPCODE_KIL:
+ case OPCODE_TEX:
+ case OPCODE_TXB:
+ case OPCODE_TXP:
+ case OPCODE_END:
+ pairinst->IsTex = 1;
+ break;
+ default:
+ error("Unknown opcode %d\n", inst->Opcode);
+ break;
+ }
+}
+
+
+/**
+ * Count which (input, temporary) register is read and written how often,
+ * and scan the instruction stream to find dependencies.
+ */
+static void scan_instructions(struct pair_state *s)
+{
+ struct prog_instruction *inst;
+ struct pair_state_instruction *pairinst;
+ GLuint ip;
+
+ for(inst = s->Program->Instructions, pairinst = s->Instructions, ip = 0;
+ inst->Opcode != OPCODE_END;
+ ++inst, ++pairinst, ++ip) {
+ final_rewrite(s, inst);
+ classify_instruction(s, inst, pairinst);
+
+ int nsrc = _mesa_num_inst_src_regs(inst->Opcode);
+ int j;
+ for(j = 0; j < nsrc; j++) {
+ struct pair_register_translation *t =
+ get_register(s, inst->SrcReg[j].File, inst->SrcReg[j].Index);
+ if (!t)
+ continue;
+
+ t->RefCount++;
+
+ if (inst->SrcReg[j].File == PROGRAM_TEMPORARY) {
+ int i;
+ for(i = 0; i < 4; ++i) {
+ GLuint swz = GET_SWZ(inst->SrcReg[j].Swizzle, i);
+ if (swz >= 4)
+ continue; /* constant or NIL swizzle */
+ if (!t->Value[swz])
+ continue; /* this is an undefined read */
+
+ /* Do not add a dependency if this instruction
+ * also rewrites the value. The code below adds
+ * a dependency for the DstReg, which is a superset
+ * of the SrcReg dependency. */
+ if (inst->DstReg.File == PROGRAM_TEMPORARY &&
+ inst->DstReg.Index == inst->SrcReg[j].Index &&
+ GET_BIT(inst->DstReg.WriteMask, swz))
+ continue;
+
+ struct reg_value_reader* r = &s->ReaderPool[s->ReaderPoolUsed++];
+ pairinst->NumDependencies++;
+ t->Value[swz]->NumReaders++;
+ r->IP = ip;
+ r->Next = t->Value[swz]->Readers;
+ t->Value[swz]->Readers = r;
+ }
+ }
+ }
+
+ int ndst = _mesa_num_inst_dst_regs(inst->Opcode);
+ if (ndst) {
+ struct pair_register_translation *t =
+ get_register(s, inst->DstReg.File, inst->DstReg.Index);
+ if (t) {
+ t->RefCount++;
+
+ if (inst->DstReg.File == PROGRAM_TEMPORARY) {
+ int j;
+ for(j = 0; j < 4; ++j) {
+ if (!GET_BIT(inst->DstReg.WriteMask, j))
+ continue;
+
+ struct reg_value* v = &s->ValuePool[s->ValuePoolUsed++];
+ v->IP = ip;
+ if (t->Value[j]) {
+ pairinst->NumDependencies++;
+ t->Value[j]->Next = v;
+ }
+ t->Value[j] = v;
+ pairinst->Values[j] = v;
+ }
+ }
+ }
+ }
+
+ if (s->Verbose)
+ _mesa_printf("scan(%i): NumDeps = %i\n", ip, pairinst->NumDependencies);
+
+ if (!pairinst->NumDependencies)
+ instruction_ready(s, ip);
+ }
+
+ /* Clear the PROGRAM_TEMPORARY state */
+ int i, j;
+ for(i = 0; i < MAX_PROGRAM_TEMPS; ++i) {
+ for(j = 0; j < 4; ++j)
+ s->Temps[i].Value[j] = 0;
+ }
+}
+
+
+/**
+ * Reserve hardware temporary registers for the program inputs.
+ *
+ * @note This allocation is performed explicitly, because the order of inputs
+ * is determined by the RS hardware.
+ */
+static void allocate_input_registers(struct pair_state *s)
+{
+ GLuint InputsRead = s->Program->InputsRead;
+ int i;
+ GLuint hwindex = 0;
+
+ /* Texcoords come first */
+ for (i = 0; i < s->Ctx->Const.MaxTextureUnits; i++) {
+ if (InputsRead & (FRAG_BIT_TEX0 << i))
+ alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_TEX0+i, hwindex++);
+ }
+ InputsRead &= ~FRAG_BITS_TEX_ANY;
+
+ /* fragment position treated as a texcoord */
+ if (InputsRead & FRAG_BIT_WPOS)
+ alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_WPOS, hwindex++);
+ InputsRead &= ~FRAG_BIT_WPOS;
+
+ /* Then primary colour */
+ if (InputsRead & FRAG_BIT_COL0)
+ alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_COL0, hwindex++);
+ InputsRead &= ~FRAG_BIT_COL0;
+
+ /* Secondary color */
+ if (InputsRead & FRAG_BIT_COL1)
+ alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_COL1, hwindex++);
+ InputsRead &= ~FRAG_BIT_COL1;
+
+ /* Anything else */
+ if (InputsRead)
+ error("Don't know how to handle inputs 0x%x\n", InputsRead);
+}
+
+
+static void decrement_dependencies(struct pair_state *s, int ip)
+{
+ struct pair_state_instruction *pairinst = s->Instructions + ip;
+ ASSERT(pairinst->NumDependencies > 0);
+ if (!--pairinst->NumDependencies)
+ instruction_ready(s, ip);
+}
+
+/**
+ * Update the dependency tracking state based on what the instruction
+ * at the given IP does.
+ */
+static void commit_instruction(struct pair_state *s, int ip)
+{
+ struct prog_instruction *inst = s->Program->Instructions + ip;
+ struct pair_state_instruction *pairinst = s->Instructions + ip;
+
+ if (s->Verbose)
+ _mesa_printf("commit_instruction(%i)\n", ip);
+
+ if (inst->DstReg.File == PROGRAM_TEMPORARY) {
+ struct pair_register_translation *t = &s->Temps[inst->DstReg.Index];
+ deref_hw_reg(s, t->HwIndex);
+
+ int i;
+ for(i = 0; i < 4; ++i) {
+ if (!GET_BIT(inst->DstReg.WriteMask, i))
+ continue;
+
+ t->Value[i] = pairinst->Values[i];
+ if (t->Value[i]->NumReaders) {
+ struct reg_value_reader *r;
+ for(r = pairinst->Values[i]->Readers; r; r = r->Next)
+ decrement_dependencies(s, r->IP);
+ } else if (t->Value[i]->Next) {
+ /* This happens when the only reader writes
+ * the register at the same time */
+ decrement_dependencies(s, t->Value[i]->Next->IP);
+ }
+ }
+ }
+
+ int nsrc = _mesa_num_inst_src_regs(inst->Opcode);
+ int i;
+ for(i = 0; i < nsrc; i++) {
+ struct pair_register_translation *t = get_register(s, inst->SrcReg[i].File, inst->SrcReg[i].Index);
+ if (!t)
+ continue;
+
+ deref_hw_reg(s, get_hw_reg(s, inst->SrcReg[i].File, inst->SrcReg[i].Index));
+
+ if (inst->SrcReg[i].File != PROGRAM_TEMPORARY)
+ continue;
+
+ int j;
+ for(j = 0; j < 4; ++j) {
+ GLuint swz = GET_SWZ(inst->SrcReg[i].Swizzle, j);
+ if (swz >= 4)
+ continue;
+ if (!t->Value[swz])
+ continue;
+
+ /* Do not free a dependency if this instruction
+ * also rewrites the value. See scan_instructions. */
+ if (inst->DstReg.File == PROGRAM_TEMPORARY &&
+ inst->DstReg.Index == inst->SrcReg[i].Index &&
+ GET_BIT(inst->DstReg.WriteMask, swz))
+ continue;
+
+ if (!--t->Value[swz]->NumReaders) {
+ if (t->Value[swz]->Next)
+ decrement_dependencies(s, t->Value[swz]->Next->IP);
+ }
+ }
+ }
+}
+
+
+/**
+ * Emit all ready texture instructions in a single block.
+ *
+ * Emit as a single block to (hopefully) sample many textures in parallel,
+ * and to avoid hardware indirections on R300.
+ *
+ * In R500, we don't really know when the result of a texture instruction
+ * arrives. So allocate all destinations first, to make sure they do not
+ * arrive early and overwrite a texture coordinate we're going to use later
+ * in the block.
+ */
+static void emit_all_tex(struct pair_state *s)
+{
+ struct pair_state_instruction *readytex;
+ struct pair_state_instruction *pairinst;
+
+ ASSERT(s->ReadyTEX);
+
+ // Don't let the ready list change under us!
+ readytex = s->ReadyTEX;
+ s->ReadyTEX = 0;
+
+ // Allocate destination hardware registers in one block to avoid conflicts.
+ for(pairinst = readytex; pairinst; pairinst = pairinst->NextReady) {
+ int ip = pairinst - s->Instructions;
+ struct prog_instruction *inst = s->Program->Instructions + ip;
+ if (inst->Opcode != OPCODE_KIL)
+ get_hw_reg(s, inst->DstReg.File, inst->DstReg.Index);
+ }
+
+ if (s->Debug)
+ _mesa_printf(" BEGIN_TEX\n");
+
+ if (s->Handler->BeginTexBlock)
+ s->Error = s->Error || !s->Handler->BeginTexBlock(s->UserData);
+
+ for(pairinst = readytex; pairinst; pairinst = pairinst->NextReady) {
+ int ip = pairinst - s->Instructions;
+ struct prog_instruction *inst = s->Program->Instructions + ip;
+ commit_instruction(s, ip);
+
+ if (inst->Opcode != OPCODE_KIL)
+ inst->DstReg.Index = get_hw_reg(s, inst->DstReg.File, inst->DstReg.Index);
+ inst->SrcReg[0].Index = get_hw_reg(s, inst->SrcReg[0].File, inst->SrcReg[0].Index);
+
+ if (s->Debug) {
+ _mesa_printf(" ");
+ _mesa_print_instruction(inst);
+ }
+ s->Error = s->Error || !s->Handler->EmitTex(s->UserData, inst);
+ }
+
+ if (s->Debug)
+ _mesa_printf(" END_TEX\n");
+}
+
+
+static int alloc_pair_source(struct pair_state *s, struct radeon_pair_instruction *pair,
+ struct prog_src_register src, GLboolean rgb, GLboolean alpha)
+{
+ int candidate = -1;
+ int candidate_quality = -1;
+ int i;
+
+ if (!rgb && !alpha)
+ return 0;
+
+ GLuint constant;
+ GLuint index;
+
+ if (src.File == PROGRAM_TEMPORARY || src.File == PROGRAM_INPUT) {
+ constant = 0;
+ index = get_hw_reg(s, src.File, src.Index);
+ } else {
+ constant = 1;
+ s->Error |= !s->Handler->EmitConst(s->UserData, src.File, src.Index, &index);
+ }
+
+ for(i = 0; i < 3; ++i) {
+ int q = 0;
+ if (rgb) {
+ if (pair->RGB.Src[i].Used) {
+ if (pair->RGB.Src[i].Constant != constant ||
+ pair->RGB.Src[i].Index != index)
+ continue;
+ q++;
+ }
+ }
+ if (alpha) {
+ if (pair->Alpha.Src[i].Used) {
+ if (pair->Alpha.Src[i].Constant != constant ||
+ pair->Alpha.Src[i].Index != index)
+ continue;
+ q++;
+ }
+ }
+ if (q > candidate_quality) {
+ candidate_quality = q;
+ candidate = i;
+ }
+ }
+
+ if (candidate >= 0) {
+ if (rgb) {
+ pair->RGB.Src[candidate].Used = 1;
+ pair->RGB.Src[candidate].Constant = constant;
+ pair->RGB.Src[candidate].Index = index;
+ }
+ if (alpha) {
+ pair->Alpha.Src[candidate].Used = 1;
+ pair->Alpha.Src[candidate].Constant = constant;
+ pair->Alpha.Src[candidate].Index = index;
+ }
+ }
+
+ return candidate;
+}
+
+
+
+/**
+ * Fill the given ALU instruction's opcodes and source operands into the given pair,
+ * if possible.
+ */
+static GLboolean fill_instruction_into_pair(struct pair_state *s, struct radeon_pair_instruction *pair, int ip)
+{
+ struct pair_state_instruction *pairinst = s->Instructions + ip;
+ struct prog_instruction *inst = s->Program->Instructions + ip;
+
+ ASSERT(!pairinst->NeedRGB || pair->RGB.Opcode == OPCODE_NOP);
+ ASSERT(!pairinst->NeedAlpha || pair->Alpha.Opcode == OPCODE_NOP);
+
+ if (pairinst->NeedRGB) {
+ if (pairinst->IsTranscendent)
+ pair->RGB.Opcode = OPCODE_REPL_ALPHA;
+ else
+ pair->RGB.Opcode = inst->Opcode;
+ if (inst->SaturateMode == SATURATE_ZERO_ONE)
+ pair->RGB.Saturate = 1;
+ }
+ if (pairinst->NeedAlpha) {
+ pair->Alpha.Opcode = inst->Opcode;
+ if (inst->SaturateMode == SATURATE_ZERO_ONE)
+ pair->Alpha.Saturate = 1;
+ }
+
+ int nargs = _mesa_num_inst_src_regs(inst->Opcode);
+ int i;
+
+ for(i = 0; i < nargs; ++i) {
+ int source;
+ if (pairinst->NeedRGB && !pairinst->IsTranscendent) {
+ GLboolean srcrgb = GL_FALSE;
+ GLboolean srcalpha = GL_FALSE;
+ GLuint negatebase = 0;
+ int j;
+ for(j = 0; j < 3; ++j) {
+ GLuint swz = GET_SWZ(inst->SrcReg[i].Swizzle, j);
+ if (swz < 3)
+ srcrgb = GL_TRUE;
+ else if (swz < 4)
+ srcalpha = GL_TRUE;
+ if (swz != SWIZZLE_NIL && GET_BIT(inst->SrcReg[i].NegateBase, j))
+ negatebase = 1;
+ }
+ source = alloc_pair_source(s, pair, inst->SrcReg[i], srcrgb, srcalpha);
+ if (source < 0)
+ return GL_FALSE;
+ pair->RGB.Arg[i].Source = source;
+ pair->RGB.Arg[i].Swizzle = inst->SrcReg[i].Swizzle & 0x1ff;
+ pair->RGB.Arg[i].Abs = inst->SrcReg[i].Abs;
+ pair->RGB.Arg[i].Negate = (negatebase & ~pair->RGB.Arg[i].Abs) ^ inst->SrcReg[i].NegateAbs;
+ }
+ if (pairinst->NeedAlpha) {
+ GLboolean srcrgb = GL_FALSE;
+ GLboolean srcalpha = GL_FALSE;
+ GLuint negatebase = GET_BIT(inst->SrcReg[i].NegateBase, pairinst->IsTranscendent ? 0 : 3);
+ GLuint swz = GET_SWZ(inst->SrcReg[i].Swizzle, pairinst->IsTranscendent ? 0 : 3);
+ if (swz < 3)
+ srcrgb = GL_TRUE;
+ else if (swz < 4)
+ srcalpha = GL_TRUE;
+ source = alloc_pair_source(s, pair, inst->SrcReg[i], srcrgb, srcalpha);
+ if (source < 0)
+ return GL_FALSE;
+ pair->Alpha.Arg[i].Source = source;
+ pair->Alpha.Arg[i].Swizzle = swz;
+ pair->Alpha.Arg[i].Abs = inst->SrcReg[i].Abs;
+ pair->Alpha.Arg[i].Negate = (negatebase & ~pair->RGB.Arg[i].Abs) ^ inst->SrcReg[i].NegateAbs;
+ }
+ }
+
+ return GL_TRUE;
+}
+
+
+/**
+ * Fill in the destination register information.
+ *
+ * This is split from filling in source registers because we want
+ * to avoid allocating hardware temporaries for destinations until
+ * we are absolutely certain that we're going to emit a certain
+ * instruction pairing.
+ */
+static void fill_dest_into_pair(struct pair_state *s, struct radeon_pair_instruction *pair, int ip)
+{
+ struct pair_state_instruction *pairinst = s->Instructions + ip;
+ struct prog_instruction *inst = s->Program->Instructions + ip;
+
+ if (inst->DstReg.File == PROGRAM_OUTPUT) {
+ if (inst->DstReg.Index == FRAG_RESULT_COLR) {
+ pair->RGB.OutputWriteMask |= inst->DstReg.WriteMask & WRITEMASK_XYZ;
+ pair->Alpha.OutputWriteMask |= GET_BIT(inst->DstReg.WriteMask, 3);
+ } else if (inst->DstReg.Index == FRAG_RESULT_DEPR) {
+ pair->Alpha.DepthWriteMask |= GET_BIT(inst->DstReg.WriteMask, 3);
+ }
+ } else {
+ GLuint hwindex = get_hw_reg(s, inst->DstReg.File, inst->DstReg.Index);
+ if (pairinst->NeedRGB) {
+ pair->RGB.DestIndex = hwindex;
+ pair->RGB.WriteMask |= inst->DstReg.WriteMask & WRITEMASK_XYZ;
+ }
+ if (pairinst->NeedAlpha) {
+ pair->Alpha.DestIndex = hwindex;
+ pair->Alpha.WriteMask |= GET_BIT(inst->DstReg.WriteMask, 3);
+ }
+ }
+}
+
+
+/**
+ * Find a good ALU instruction or pair of ALU instruction and emit it.
+ *
+ * Prefer emitting full ALU instructions, so that when we reach a point
+ * where no full ALU instruction can be emitted, we have more candidates
+ * for RGB/Alpha pairing.
+ */
+static void emit_alu(struct pair_state *s)
+{
+ struct radeon_pair_instruction pair;
+
+ if (s->ReadyFullALU || !(s->ReadyRGB && s->ReadyAlpha)) {
+ int ip;
+ if (s->ReadyFullALU) {
+ ip = s->ReadyFullALU - s->Instructions;
+ s->ReadyFullALU = s->ReadyFullALU->NextReady;
+ } else if (s->ReadyRGB) {
+ ip = s->ReadyRGB - s->Instructions;
+ s->ReadyRGB = s->ReadyRGB->NextReady;
+ } else {
+ ip = s->ReadyAlpha - s->Instructions;
+ s->ReadyAlpha = s->ReadyAlpha->NextReady;
+ }
+
+ _mesa_bzero(&pair, sizeof(pair));
+ fill_instruction_into_pair(s, &pair, ip);
+ fill_dest_into_pair(s, &pair, ip);
+ commit_instruction(s, ip);
+ } else {
+ struct pair_state_instruction **prgb;
+ struct pair_state_instruction **palpha;
+
+ /* Some pairings might fail because they require too
+ * many source slots; try all possible pairings if necessary */
+ for(prgb = &s->ReadyRGB; *prgb; prgb = &(*prgb)->NextReady) {
+ for(palpha = &s->ReadyAlpha; *palpha; palpha = &(*palpha)->NextReady) {
+ int rgbip = *prgb - s->Instructions;
+ int alphaip = *palpha - s->Instructions;
+ _mesa_bzero(&pair, sizeof(pair));
+ fill_instruction_into_pair(s, &pair, rgbip);
+ if (!fill_instruction_into_pair(s, &pair, alphaip))
+ continue;
+ *prgb = (*prgb)->NextReady;
+ *palpha = (*palpha)->NextReady;
+ fill_dest_into_pair(s, &pair, rgbip);
+ fill_dest_into_pair(s, &pair, alphaip);
+ commit_instruction(s, rgbip);
+ commit_instruction(s, alphaip);
+ goto success;
+ }
+ }
+
+ /* No success in pairing; just take the first RGB instruction */
+ int ip = s->ReadyRGB - s->Instructions;
+ s->ReadyRGB = s->ReadyRGB->NextReady;
+ _mesa_bzero(&pair, sizeof(pair));
+ fill_instruction_into_pair(s, &pair, ip);
+ fill_dest_into_pair(s, &pair, ip);
+ commit_instruction(s, ip);
+ success: ;
+ }
+
+ if (s->Debug)
+ radeonPrintPairInstruction(&pair);
+
+ s->Error = s->Error || !s->Handler->EmitPaired(s->UserData, &pair);
+}
+
+
+GLboolean radeonPairProgram(GLcontext *ctx, struct gl_program *program,
+ const struct radeon_pair_handler* handler, void *userdata)
+{
+ struct pair_state s;
+
+ _mesa_bzero(&s, sizeof(s));
+ s.Ctx = ctx;
+ s.Program = program;
+ s.Handler = handler;
+ s.UserData = userdata;
+ s.Debug = (RADEON_DEBUG & DEBUG_PIXEL) ? GL_TRUE : GL_FALSE;
+ s.Verbose = GL_FALSE && s.Debug;
+
+ s.Instructions = (struct pair_state_instruction*)_mesa_calloc(
+ sizeof(struct pair_state_instruction)*s.Program->NumInstructions);
+ s.ValuePool = (struct reg_value*)_mesa_calloc(sizeof(struct reg_value)*s.Program->NumInstructions*4);
+ s.ReaderPool = (struct reg_value_reader*)_mesa_calloc(
+ sizeof(struct reg_value_reader)*s.Program->NumInstructions*12);
+
+ if (s.Debug)
+ _mesa_printf("Emit paired program\n");
+
+ scan_instructions(&s);
+ allocate_input_registers(&s);
+
+ while(!s.Error &&
+ (s.ReadyTEX || s.ReadyRGB || s.ReadyAlpha || s.ReadyFullALU)) {
+ if (s.ReadyTEX)
+ emit_all_tex(&s);
+
+ while(s.ReadyFullALU || s.ReadyRGB || s.ReadyAlpha)
+ emit_alu(&s);
+ }
+
+ if (s.Debug)
+ _mesa_printf(" END\n");
+
+ _mesa_free(s.Instructions);
+ _mesa_free(s.ValuePool);
+ _mesa_free(s.ReaderPool);
+
+ return !s.Error;
+}
+
+
+static void print_pair_src(int i, struct radeon_pair_instruction_source* src)
+{
+ _mesa_printf(" Src%i = %s[%i]", i, src->Constant ? "CNST" : "TEMP", src->Index);
+}
+
+static const char* opcode_string(GLuint opcode)
+{
+ if (opcode == OPCODE_REPL_ALPHA)
+ return "SOP";
+ else
+ return _mesa_opcode_string(opcode);
+}
+
+static int num_pairinst_args(GLuint opcode)
+{
+ if (opcode == OPCODE_REPL_ALPHA)
+ return 0;
+ else
+ return _mesa_num_inst_src_regs(opcode);
+}
+
+static char swizzle_char(GLuint swz)
+{
+ switch(swz) {
+ case SWIZZLE_X: return 'x';
+ case SWIZZLE_Y: return 'y';
+ case SWIZZLE_Z: return 'z';
+ case SWIZZLE_W: return 'w';
+ case SWIZZLE_ZERO: return '0';
+ case SWIZZLE_ONE: return '1';
+ case SWIZZLE_NIL: return '_';
+ default: return '?';
+ }
+}
+
+void radeonPrintPairInstruction(struct radeon_pair_instruction *inst)
+{
+ int nargs;
+ int i;
+
+ _mesa_printf(" RGB: ");
+ for(i = 0; i < 3; ++i) {
+ if (inst->RGB.Src[i].Used)
+ print_pair_src(i, inst->RGB.Src + i);
+ }
+ _mesa_printf("\n");
+ _mesa_printf(" Alpha:");
+ for(i = 0; i < 3; ++i) {
+ if (inst->Alpha.Src[i].Used)
+ print_pair_src(i, inst->Alpha.Src + i);
+ }
+ _mesa_printf("\n");
+
+ _mesa_printf(" %s%s", opcode_string(inst->RGB.Opcode), inst->RGB.Saturate ? "_SAT" : "");
+ if (inst->RGB.WriteMask)
+ _mesa_printf(" TEMP[%i].%s%s%s", inst->RGB.DestIndex,
+ (inst->RGB.WriteMask & 1) ? "x" : "",
+ (inst->RGB.WriteMask & 2) ? "y" : "",
+ (inst->RGB.WriteMask & 4) ? "z" : "");
+ if (inst->RGB.OutputWriteMask)
+ _mesa_printf(" COLOR.%s%s%s",
+ (inst->RGB.OutputWriteMask & 1) ? "x" : "",
+ (inst->RGB.OutputWriteMask & 2) ? "y" : "",
+ (inst->RGB.OutputWriteMask & 4) ? "z" : "");
+ nargs = num_pairinst_args(inst->RGB.Opcode);
+ for(i = 0; i < nargs; ++i) {
+ const char* abs = inst->RGB.Arg[i].Abs ? "|" : "";
+ const char* neg = inst->RGB.Arg[i].Negate ? "-" : "";
+ _mesa_printf(", %s%sSrc%i.%c%c%c%s", neg, abs, inst->RGB.Arg[i].Source,
+ swizzle_char(GET_SWZ(inst->RGB.Arg[i].Swizzle, 0)),
+ swizzle_char(GET_SWZ(inst->RGB.Arg[i].Swizzle, 1)),
+ swizzle_char(GET_SWZ(inst->RGB.Arg[i].Swizzle, 2)),
+ abs);
+ }
+ _mesa_printf("\n");
+
+ _mesa_printf(" %s%s", opcode_string(inst->Alpha.Opcode), inst->Alpha.Saturate ? "_SAT" : "");
+ if (inst->Alpha.WriteMask)
+ _mesa_printf(" TEMP[%i].w", inst->Alpha.DestIndex);
+ if (inst->Alpha.OutputWriteMask)
+ _mesa_printf(" COLOR.w");
+ if (inst->Alpha.DepthWriteMask)
+ _mesa_printf(" DEPTH.w");
+ nargs = num_pairinst_args(inst->Alpha.Opcode);
+ for(i = 0; i < nargs; ++i) {
+ const char* abs = inst->Alpha.Arg[i].Abs ? "|" : "";
+ const char* neg = inst->Alpha.Arg[i].Negate ? "-" : "";
+ _mesa_printf(", %s%sSrc%i.%c%s", neg, abs, inst->Alpha.Arg[i].Source,
+ swizzle_char(inst->Alpha.Arg[i].Swizzle), abs);
+ }
+ _mesa_printf("\n");
+}
diff --git a/src/mesa/drivers/dri/r300/radeon_program_pair.h b/src/mesa/drivers/dri/r300/radeon_program_pair.h
new file mode 100644
index 00000000000..4624a246298
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/radeon_program_pair.h
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2008 Nicolai Haehnle.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __RADEON_PROGRAM_PAIR_H_
+#define __RADEON_PROGRAM_PAIR_H_
+
+#include "radeon_program.h"
+
+
+/**
+ * Represents a paired instruction, as found in R300 and R500
+ * fragment programs.
+ */
+struct radeon_pair_instruction_source {
+ GLuint Index:8;
+ GLuint Constant:1;
+ GLuint Used:1;
+};
+
+struct radeon_pair_instruction_rgb {
+ GLuint Opcode:8;
+ GLuint DestIndex:8;
+ GLuint WriteMask:3;
+ GLuint OutputWriteMask:3;
+ GLuint Saturate:1;
+
+ struct radeon_pair_instruction_source Src[3];
+
+ struct {
+ GLuint Source:2;
+ GLuint Swizzle:9;
+ GLuint Abs:1;
+ GLuint Negate:1;
+ } Arg[3];
+};
+
+struct radeon_pair_instruction_alpha {
+ GLuint Opcode:8;
+ GLuint DestIndex:8;
+ GLuint WriteMask:1;
+ GLuint OutputWriteMask:1;
+ GLuint DepthWriteMask:1;
+ GLuint Saturate:1;
+
+ struct radeon_pair_instruction_source Src[3];
+
+ struct {
+ GLuint Source:2;
+ GLuint Swizzle:3;
+ GLuint Abs:1;
+ GLuint Negate:1;
+ } Arg[3];
+};
+
+struct radeon_pair_instruction {
+ struct radeon_pair_instruction_rgb RGB;
+ struct radeon_pair_instruction_alpha Alpha;
+};
+
+
+/**
+ *
+ */
+struct radeon_pair_handler {
+ /**
+ * Fill in the proper hardware index for the given constant register.
+ *
+ * @return GL_FALSE on error.
+ */
+ GLboolean (*EmitConst)(void*, GLuint file, GLuint index, GLuint *hwindex);
+
+ /**
+ * Write a paired instruction to the hardware.
+ *
+ * @return GL_FALSE on error.
+ */
+ GLboolean (*EmitPaired)(void*, struct radeon_pair_instruction*);
+
+ /**
+ * Write a texture instruction to the hardware.
+ * Register indices have already been rewritten to the allocated
+ * hardware register numbers.
+ *
+ * @return GL_FALSE on error.
+ */
+ GLboolean (*EmitTex)(void*, struct prog_instruction*);
+
+ /**
+ * Called before a block of contiguous, independent texture
+ * instructions is emitted.
+ */
+ GLboolean (*BeginTexBlock)(void*);
+
+ GLuint MaxHwTemps;
+};
+
+GLboolean radeonPairProgram(GLcontext *ctx, struct gl_program *program,
+ const struct radeon_pair_handler*, void *userdata);
+
+void radeonPrintPairInstruction(struct radeon_pair_instruction *inst);
+
+#endif /* __RADEON_PROGRAM_PAIR_H_ */
diff --git a/src/mesa/drivers/fbdev/Makefile b/src/mesa/drivers/fbdev/Makefile
index c0ef54f604f..ee73f29a46a 100644
--- a/src/mesa/drivers/fbdev/Makefile
+++ b/src/mesa/drivers/fbdev/Makefile
@@ -25,8 +25,7 @@ default: $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME)
$(TOP)/$(LIB_DIR)/$(GL_LIB_NAME): $(CORE_MESA) $(OBJECTS)
- @ $(TOP)/bin/mklib -o $(GL_LIB) \
- -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ @ $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(MESA_TINY) \
-install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
$(CORE_MESA) $(OBJECTS) $(GL_LIB_DEPS)
diff --git a/src/mesa/drivers/osmesa/Makefile b/src/mesa/drivers/osmesa/Makefile
index fa8dffcb3ef..8b2feee6b0e 100644
--- a/src/mesa/drivers/osmesa/Makefile
+++ b/src/mesa/drivers/osmesa/Makefile
@@ -45,11 +45,9 @@ default:
osmesa8: $(TOP)/lib/$(OSMESA_LIB_NAME)
$(TOP)/lib/$(OSMESA_LIB_NAME): $(OBJECTS)
- $(TOP)/bin/mklib -o $(OSMESA_LIB) \
- -linker "$(CC)" \
+ $(MKLIB) -o $(OSMESA_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(MESA_TINY) \
- -install $(TOP)/$(LIB_DIR) \
- $(MKLIB_OPTIONS) \
+ -install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
$(OSMESA_LIB_DEPS) $(OBJECTS)
@@ -58,11 +56,9 @@ $(TOP)/lib/$(OSMESA_LIB_NAME): $(OBJECTS)
# The libOSMesa16/libOSMesa32 libraries do not use libGL but rather are built
# with all the other Mesa sources (compiled with -DCHAN_BITS=16/32
osmesa16: $(OBJECTS) $(CORE_MESA)
- $(TOP)/bin/mklib -o $(OSMESA_LIB) \
- -linker "$(CC)" \
+ $(MKLIB) -o $(OSMESA_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(MESA_TINY) \
- -install $(TOP)/$(LIB_DIR) \
- $(MKLIB_OPTIONS) \
+ -install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
$(OSMESA_LIB_DEPS) $(OBJECTS) $(CORE_MESA)
diff --git a/src/mesa/drivers/x11/Makefile b/src/mesa/drivers/x11/Makefile
index 51226eeae11..b025246e634 100644
--- a/src/mesa/drivers/x11/Makefile
+++ b/src/mesa/drivers/x11/Makefile
@@ -55,11 +55,10 @@ default: $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME)
$(TOP)/$(LIB_DIR)/$(GL_LIB_NAME): $(OBJECTS) $(CORE_MESA)
- @ $(TOP)/bin/mklib -o $(GL_LIB) \
- -linker '$(CC)' -ldflags '$(LDFLAGS)' \
+ @ $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major $(GL_MAJOR) -minor $(GL_MINOR) -patch $(GL_TINY) \
- -install $(TOP)/$(LIB_DIR) \
- $(MKLIB_OPTIONS) $(GL_LIB_DEPS) $(OBJECTS) $(CORE_MESA)
+ -install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
+ $(GL_LIB_DEPS) $(OBJECTS) $(CORE_MESA)
diff --git a/src/mesa/gl.pc.in b/src/mesa/gl.pc.in
index 4b144ffa4b2..1927880d5f9 100644
--- a/src/mesa/gl.pc.in
+++ b/src/mesa/gl.pc.in
@@ -1,7 +1,7 @@
prefix=@INSTALL_DIR@
exec_prefix=${prefix}
-libdir=${exec_prefix}/@LIB_DIR@
-includedir=${prefix}/include
+libdir=@INSTALL_LIB_DIR@
+includedir=@INSTALL_INC_DIR@
Name: gl
Description: Mesa OpenGL library
diff --git a/src/mesa/glapi/gl_API.xml b/src/mesa/glapi/gl_API.xml
index 12c048f1e62..2d8a967ba79 100644
--- a/src/mesa/glapi/gl_API.xml
+++ b/src/mesa/glapi/gl_API.xml
@@ -7291,27 +7291,59 @@
</category>
<category name="GL_ARB_vertex_buffer_object" number="28">
- <enum name="BUFFER_SIZE_ARB" value="0x8764"/>
- <enum name="BUFFER_USAGE_ARB" value="0x8765"/>
- <enum name="ARRAY_BUFFER_ARB" value="0x8892"/>
- <enum name="ELEMENT_ARRAY_BUFFER_ARB" value="0x8893"/>
- <enum name="ARRAY_BUFFER_BINDING_ARB" value="0x8894"/>
- <enum name="ELEMENT_ARRAY_BUFFER_BINDING_ARB" value="0x8895"/>
- <enum name="VERTEX_ARRAY_BUFFER_BINDING_ARB" value="0x8896"/>
- <enum name="NORMAL_ARRAY_BUFFER_BINDING_ARB" value="0x8897"/>
- <enum name="COLOR_ARRAY_BUFFER_BINDING_ARB" value="0x8898"/>
- <enum name="INDEX_ARRAY_BUFFER_BINDING_ARB" value="0x8899"/>
- <enum name="TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB" value="0x889A"/>
- <enum name="EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB" value="0x889B"/>
- <enum name="SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB" value="0x889C"/>
- <enum name="FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB" value="0x889D"/>
- <enum name="WEIGHT_ARRAY_BUFFER_BINDING_ARB" value="0x889E"/>
- <enum name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB" value="0x889F"/>
+ <enum name="BUFFER_SIZE_ARB" count="1" value="0x8764">
+ <size name="GetBufferParameterivARB" mode="get"/>
+ </enum>
+ <enum name="BUFFER_USAGE_ARB" count="1" value="0x8765">
+ <size name="GetBufferParameterivARB" mode="get"/>
+ </enum>
+ <enum name="ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8894">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="ELEMENT_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8895">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="VERTEX_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8896">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="NORMAL_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8897">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="COLOR_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8898">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="INDEX_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x8899">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889A">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889B">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889C">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889D">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="WEIGHT_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889E">
+ <size name="Get" mode="get"/>
+ </enum>
+ <enum name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB" count="1" value="0x889F">
+ <size name="GetVertexAttribdvARB" mode="get"/>
+ <size name="GetVertexAttribfvARB" mode="get"/>
+ <size name="GetVertexAttribivARB" mode="get"/>
+ </enum>
<enum name="READ_ONLY_ARB" value="0x88B8"/>
<enum name="WRITE_ONLY_ARB" value="0x88B9"/>
<enum name="READ_WRITE_ARB" value="0x88BA"/>
- <enum name="BUFFER_ACCESS_ARB" value="0x88BB"/>
- <enum name="BUFFER_MAPPED_ARB" value="0x88BC"/>
+ <enum name="BUFFER_ACCESS_ARB" count="1" value="0x88BB">
+ <size name="GetBufferParameterivARB" mode="get"/>
+ </enum>
+ <enum name="BUFFER_MAPPED_ARB" count="1" value="0x88BC">
+ <size name="GetBufferParameterivARB" mode="get"/>
+ </enum>
<enum name="BUFFER_MAP_POINTER_ARB" value="0x88BD"/>
<enum name="STREAM_DRAW_ARB" value="0x88E0"/>
<enum name="STREAM_READ_ARB" value="0x88E1"/>
@@ -7323,8 +7355,8 @@
<enum name="DYNAMIC_READ_ARB" value="0x88E9"/>
<enum name="DYNAMIC_COPY_ARB" value="0x88EA"/>
- <type name="intptrARB" size="4"/>
- <type name="sizeiptrARB" unsigned="true" size="4"/>
+ <type name="intptrARB" size="4" glx_name="CARD32"/>
+ <type name="sizeiptrARB" size="4" unsigned="true" glx_name="CARD32"/>
<function name="BindBufferARB" offset="assign">
<param name="target" type="GLenum"/>
@@ -7334,8 +7366,8 @@
<function name="BufferDataARB" offset="assign">
<param name="target" type="GLenum"/>
- <param name="size" type="GLsizeiptrARB"/>
- <param name="data" type="const GLvoid *"/>
+ <param name="size" type="GLsizeiptrARB" counter="true"/>
+ <param name="data" type="const GLvoid *" count="size" img_null_flag="true"/>
<param name="usage" type="GLenum"/>
<glx ignore="true"/>
</function>
@@ -7343,14 +7375,14 @@
<function name="BufferSubDataARB" offset="assign">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptrARB"/>
- <param name="size" type="GLsizeiptrARB"/>
- <param name="data" type="const GLvoid *"/>
+ <param name="size" type="GLsizeiptrARB" counter="true"/>
+ <param name="data" type="const GLvoid *" count="size"/>
<glx ignore="true"/>
</function>
<function name="DeleteBuffersARB" offset="assign">
- <param name="n" type="GLsizei"/>
- <param name="buffer" type="const GLuint *"/>
+ <param name="n" type="GLsizei" counter="true"/>
+ <param name="buffer" type="const GLuint *" count="n"/>
<glx ignore="true"/>
</function>
@@ -7363,7 +7395,7 @@
<function name="GetBufferParameterivARB" offset="assign">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
- <param name="params" type="GLint *" output="true"/>
+ <param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx ignore="true"/>
</function>
@@ -7377,8 +7409,8 @@
<function name="GetBufferSubDataARB" offset="assign">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptrARB"/>
- <param name="size" type="GLsizeiptrARB"/>
- <param name="data" type="GLvoid *" output="true"/>
+ <param name="size" type="GLsizeiptrARB" counter="true"/>
+ <param name="data" type="GLvoid *" output="true" count="size"/>
<glx ignore="true"/>
</function>
diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index c4d101aee55..08a26980e19 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -63,6 +63,9 @@
#include <stdlib.h>
#include <string.h>
+#ifdef DEBUG
+#include <assert.h>
+#endif
#include "glapi.h"
#include "glapioffsets.h"
@@ -737,7 +740,7 @@ add_function_name( const char * funcName )
* \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].
+ * \c dispatch_table[\c offset]. Return -1 if error/problem.
*
* \sa glXGetProcAddress
*
@@ -786,7 +789,7 @@ _glapi_add_dispatch( const char * const * function_names,
*/
if (!function_names[i] || function_names[i][0] != 'g' || function_names[i][1] != 'l')
- return GL_FALSE;
+ return -1;
/* Determine if the named function already exists. If the function does
* exist, it must have the same parameter signature as the function
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 74b0912bef6..5a199939760 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -108,10 +108,10 @@ _mesa_validate_DrawElements(GLcontext *ctx,
if (ctx->NewState)
_mesa_update_state(ctx);
- /* Always need vertex positions */
- if (!ctx->Array.ArrayObj->Vertex.Enabled
- && !(ctx->VertexProgram._Enabled
- && ctx->Array.ArrayObj->VertexAttrib[0].Enabled))
+ /* Always need vertex positions, unless a vertex program is in use */
+ if (!ctx->VertexProgram._Current &&
+ !ctx->Array.ArrayObj->Vertex.Enabled &&
+ !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
return GL_FALSE;
/* Vertex buffer object tests */
@@ -190,10 +190,10 @@ _mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode,
if (ctx->NewState)
_mesa_update_state(ctx);
- /* Always need vertex positions */
- if (!ctx->Array.ArrayObj->Vertex.Enabled
- && !(ctx->VertexProgram._Enabled
- && ctx->Array.ArrayObj->VertexAttrib[0].Enabled))
+ /* Always need vertex positions, unless a vertex program is in use */
+ if (!ctx->VertexProgram._Current &&
+ !ctx->Array.ArrayObj->Vertex.Enabled &&
+ !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
return GL_FALSE;
/* Vertex buffer object tests */
@@ -261,9 +261,10 @@ _mesa_validate_DrawArrays(GLcontext *ctx,
if (ctx->NewState)
_mesa_update_state(ctx);
- /* Always need vertex positions */
- if (!ctx->Array.ArrayObj->Vertex.Enabled
- && !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
+ /* Always need vertex positions, unless a vertex program is in use */
+ if (!ctx->VertexProgram._Current &&
+ !ctx->Array.ArrayObj->Vertex.Enabled &&
+ !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
return GL_FALSE;
if (ctx->Const.CheckArrayBounds) {
diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index b08095465d8..5ab969e0ebb 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -829,7 +829,7 @@ _mesa_init_scissor(GLcontext *ctx)
void
_mesa_init_multisample(GLcontext *ctx)
{
- ctx->Multisample.Enabled = GL_FALSE;
+ ctx->Multisample.Enabled = GL_TRUE;
ctx->Multisample.SampleAlphaToCoverage = GL_FALSE;
ctx->Multisample.SampleAlphaToOne = GL_FALSE;
ctx->Multisample.SampleCoverage = GL_FALSE;
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 2c387d8e2cb..3dec27b6bd1 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -983,6 +983,7 @@ init_attrib_groups(GLcontext *ctx)
_mesa_init_debug( ctx );
_mesa_init_display_list( ctx );
_mesa_init_eval( ctx );
+ _mesa_init_fbobjects( ctx );
_mesa_init_feedback( ctx );
_mesa_init_fog( ctx );
_mesa_init_histogram( ctx );
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index e3ded41acac..8edcfaf8c6e 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -868,6 +868,8 @@ struct dd_function_table {
GLsizei *length, GLcharARB *sourceOut);
void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location,
GLfloat *params);
+ void (*GetUniformiv)(GLcontext *ctx, GLuint program, GLint location,
+ GLint *params);
GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program,
const GLcharARB *name);
GLboolean (*IsProgram)(GLcontext *ctx, GLuint name);
diff --git a/src/mesa/main/enums.c b/src/mesa/main/enums.c
index 6aeb18fa272..a9c102e4f2d 100644
--- a/src/mesa/main/enums.c
+++ b/src/mesa/main/enums.c
@@ -88,7 +88,6 @@ LONGSTRING static const char enum_string_table[] =
"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"
@@ -456,7 +455,6 @@ LONGSTRING static const char enum_string_table[] =
"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"
@@ -1787,7 +1785,7 @@ LONGSTRING static const char enum_string_table[] =
"GL_ZOOM_Y\0"
;
-static const enum_elt all_enums[1750] =
+static const enum_elt all_enums[1748] =
{
{ 0, 0x00000600 }, /* GL_2D */
{ 6, 0x00001407 }, /* GL_2_BYTES */
@@ -1842,2990 +1840,2988 @@ static const enum_elt all_enums[1750] =
{ 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_REF_DEPTH_TO_TEXTURE_EXT */
- { 4189, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */
- { 4213, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */
- { 4241, 0x00001300 }, /* GL_COMPILE */
- { 4252, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */
- { 4275, 0x00008B81 }, /* GL_COMPILE_STATUS */
- { 4293, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */
- { 4313, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */
- { 4337, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */
- { 4361, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */
- { 4389, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */
- { 4413, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */
- { 4443, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */
- { 4477, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */
- { 4505, 0x000084ED }, /* GL_COMPRESSED_RGB */
- { 4523, 0x000084EE }, /* GL_COMPRESSED_RGBA */
- { 4542, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */
- { 4565, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
- { 4594, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
- { 4627, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
- { 4660, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
- { 4693, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */
- { 4715, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */
- { 4743, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
- { 4775, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */
- { 4805, 0x00008576 }, /* GL_CONSTANT */
- { 4817, 0x00008003 }, /* GL_CONSTANT_ALPHA */
- { 4835, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */
- { 4857, 0x00008576 }, /* GL_CONSTANT_ARB */
- { 4873, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */
- { 4897, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */
- { 4919, 0x00008001 }, /* GL_CONSTANT_COLOR */
- { 4937, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */
- { 4959, 0x00008576 }, /* GL_CONSTANT_EXT */
- { 4975, 0x00008010 }, /* GL_CONVOLUTION_1D */
- { 4993, 0x00008011 }, /* GL_CONVOLUTION_2D */
- { 5011, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */
- { 5039, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */
- { 5070, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */
- { 5097, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */
- { 5128, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */
- { 5155, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */
- { 5186, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */
- { 5214, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */
- { 5246, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */
- { 5268, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */
- { 5294, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */
- { 5316, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */
- { 5342, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */
- { 5363, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */
- { 5388, 0x00008862 }, /* GL_COORD_REPLACE */
- { 5405, 0x00008862 }, /* GL_COORD_REPLACE_ARB */
- { 5426, 0x00008862 }, /* GL_COORD_REPLACE_NV */
- { 5446, 0x00001503 }, /* GL_COPY */
- { 5454, 0x0000150C }, /* GL_COPY_INVERTED */
- { 5471, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */
- { 5491, 0x00000B44 }, /* GL_CULL_FACE */
- { 5504, 0x00000B45 }, /* GL_CULL_FACE_MODE */
- { 5522, 0x000081AA }, /* GL_CULL_VERTEX_EXT */
- { 5541, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
- { 5573, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
- { 5608, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */
- { 5629, 0x00000001 }, /* GL_CURRENT_BIT */
- { 5644, 0x00000B00 }, /* GL_CURRENT_COLOR */
- { 5661, 0x00008453 }, /* GL_CURRENT_FOG_COORD */
- { 5682, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */
- { 5708, 0x00000B01 }, /* GL_CURRENT_INDEX */
- { 5725, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */
- { 5747, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */
- { 5775, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */
- { 5796, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
- { 5830, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */
- { 5863, 0x00000B02 }, /* GL_CURRENT_NORMAL */
- { 5881, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */
- { 5911, 0x00008B8D }, /* GL_CURRENT_PROGRAM */
- { 5930, 0x00008865 }, /* GL_CURRENT_QUERY */
- { 5947, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */
- { 5968, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */
- { 5992, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */
- { 6019, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */
- { 6043, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */
- { 6070, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */
- { 6103, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
- { 6136, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */
- { 6163, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */
- { 6189, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */
- { 6214, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */
- { 6243, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */
- { 6265, 0x00000900 }, /* GL_CW */
- { 6271, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */
- { 6292, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */
- { 6313, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */
- { 6333, 0x00002101 }, /* GL_DECAL */
- { 6342, 0x00001E03 }, /* GL_DECR */
- { 6350, 0x00008508 }, /* GL_DECR_WRAP */
- { 6363, 0x00008508 }, /* GL_DECR_WRAP_EXT */
- { 6380, 0x00008B80 }, /* GL_DELETE_STATUS */
- { 6397, 0x00001801 }, /* GL_DEPTH */
- { 6406, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */
- { 6430, 0x00000D1F }, /* GL_DEPTH_BIAS */
- { 6444, 0x00000D56 }, /* GL_DEPTH_BITS */
- { 6458, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */
- { 6478, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */
- { 6503, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */
- { 6523, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */
- { 6541, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */
- { 6562, 0x00001902 }, /* GL_DEPTH_COMPONENT */
- { 6581, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */
- { 6602, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */
- { 6627, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */
- { 6653, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */
- { 6674, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */
- { 6699, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */
- { 6725, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */
- { 6746, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */
- { 6771, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */
- { 6797, 0x00000B74 }, /* GL_DEPTH_FUNC */
- { 6811, 0x00000B70 }, /* GL_DEPTH_RANGE */
- { 6826, 0x00000D1E }, /* GL_DEPTH_SCALE */
- { 6841, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */
- { 6861, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
- { 6889, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
- { 6917, 0x00000B71 }, /* GL_DEPTH_TEST */
- { 6931, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */
- { 6953, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */
- { 6979, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */
- { 6998, 0x00001201 }, /* GL_DIFFUSE */
- { 7009, 0x00000BD0 }, /* GL_DITHER */
- { 7019, 0x00000A02 }, /* GL_DOMAIN */
- { 7029, 0x00001100 }, /* GL_DONT_CARE */
- { 7042, 0x000086AE }, /* GL_DOT3_RGB */
- { 7054, 0x000086AF }, /* GL_DOT3_RGBA */
- { 7067, 0x000086AF }, /* GL_DOT3_RGBA_ARB */
- { 7084, 0x00008741 }, /* GL_DOT3_RGBA_EXT */
- { 7101, 0x000086AE }, /* GL_DOT3_RGB_ARB */
- { 7117, 0x00008740 }, /* GL_DOT3_RGB_EXT */
- { 7133, 0x0000140A }, /* GL_DOUBLE */
- { 7143, 0x00000C32 }, /* GL_DOUBLEBUFFER */
- { 7159, 0x00000C01 }, /* GL_DRAW_BUFFER */
- { 7174, 0x00008825 }, /* GL_DRAW_BUFFER0 */
- { 7190, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */
- { 7210, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */
- { 7230, 0x00008826 }, /* GL_DRAW_BUFFER1 */
- { 7246, 0x0000882F }, /* GL_DRAW_BUFFER10 */
- { 7263, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */
- { 7284, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */
- { 7305, 0x00008830 }, /* GL_DRAW_BUFFER11 */
- { 7322, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */
- { 7343, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */
- { 7364, 0x00008831 }, /* GL_DRAW_BUFFER12 */
- { 7381, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */
- { 7402, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */
- { 7423, 0x00008832 }, /* GL_DRAW_BUFFER13 */
- { 7440, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */
- { 7461, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */
- { 7482, 0x00008833 }, /* GL_DRAW_BUFFER14 */
- { 7499, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */
- { 7520, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */
- { 7541, 0x00008834 }, /* GL_DRAW_BUFFER15 */
- { 7558, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */
- { 7579, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */
- { 7600, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */
- { 7620, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */
- { 7640, 0x00008827 }, /* GL_DRAW_BUFFER2 */
- { 7656, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */
- { 7676, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */
- { 7696, 0x00008828 }, /* GL_DRAW_BUFFER3 */
- { 7712, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */
- { 7732, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */
- { 7752, 0x00008829 }, /* GL_DRAW_BUFFER4 */
- { 7768, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */
- { 7788, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */
- { 7808, 0x0000882A }, /* GL_DRAW_BUFFER5 */
- { 7824, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */
- { 7844, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */
- { 7864, 0x0000882B }, /* GL_DRAW_BUFFER6 */
- { 7880, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */
- { 7900, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */
- { 7920, 0x0000882C }, /* GL_DRAW_BUFFER7 */
- { 7936, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */
- { 7956, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */
- { 7976, 0x0000882D }, /* GL_DRAW_BUFFER8 */
- { 7992, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */
- { 8012, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */
- { 8032, 0x0000882E }, /* GL_DRAW_BUFFER9 */
- { 8048, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */
- { 8068, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */
- { 8088, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
- { 8120, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */
- { 8144, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */
- { 8164, 0x00000304 }, /* GL_DST_ALPHA */
- { 8177, 0x00000306 }, /* GL_DST_COLOR */
- { 8190, 0x000088EA }, /* GL_DYNAMIC_COPY */
- { 8206, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */
- { 8226, 0x000088E8 }, /* GL_DYNAMIC_DRAW */
- { 8242, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */
- { 8262, 0x000088E9 }, /* GL_DYNAMIC_READ */
- { 8278, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */
- { 8298, 0x00000B43 }, /* GL_EDGE_FLAG */
- { 8311, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */
- { 8330, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
- { 8364, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */
- { 8402, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */
- { 8429, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */
- { 8455, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */
- { 8479, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER_ARB */
- { 8507, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
- { 8539, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */
- { 8575, 0x00001600 }, /* GL_EMISSION */
- { 8587, 0x00002000 }, /* GL_ENABLE_BIT */
- { 8601, 0x00000202 }, /* GL_EQUAL */
- { 8610, 0x00001509 }, /* GL_EQUIV */
- { 8619, 0x00010000 }, /* GL_EVAL_BIT */
- { 8631, 0x00000800 }, /* GL_EXP */
- { 8638, 0x00000801 }, /* GL_EXP2 */
- { 8646, 0x00001F03 }, /* GL_EXTENSIONS */
- { 8660, 0x00002400 }, /* GL_EYE_LINEAR */
- { 8674, 0x00002502 }, /* GL_EYE_PLANE */
- { 8687, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */
- { 8712, 0x0000855B }, /* GL_EYE_RADIAL_NV */
- { 8729, 0x00000000 }, /* GL_FALSE */
- { 8738, 0x00001101 }, /* GL_FASTEST */
- { 8749, 0x00001C01 }, /* GL_FEEDBACK */
- { 8761, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */
- { 8788, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */
- { 8812, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */
- { 8836, 0x00001B02 }, /* GL_FILL */
- { 8844, 0x00001D00 }, /* GL_FLAT */
- { 8852, 0x00001406 }, /* GL_FLOAT */
- { 8861, 0x00008B5A }, /* GL_FLOAT_MAT2 */
- { 8875, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */
- { 8893, 0x00008B5B }, /* GL_FLOAT_MAT3 */
- { 8907, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */
- { 8925, 0x00008B5C }, /* GL_FLOAT_MAT4 */
- { 8939, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */
- { 8957, 0x00008B50 }, /* GL_FLOAT_VEC2 */
- { 8971, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */
- { 8989, 0x00008B51 }, /* GL_FLOAT_VEC3 */
- { 9003, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */
- { 9021, 0x00008B52 }, /* GL_FLOAT_VEC4 */
- { 9035, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */
- { 9053, 0x00000B60 }, /* GL_FOG */
- { 9060, 0x00000080 }, /* GL_FOG_BIT */
- { 9071, 0x00000B66 }, /* GL_FOG_COLOR */
- { 9084, 0x00008451 }, /* GL_FOG_COORD */
- { 9097, 0x00008451 }, /* GL_FOG_COORDINATE */
- { 9115, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */
- { 9139, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
- { 9178, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */
- { 9221, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */
- { 9253, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
- { 9284, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */
- { 9313, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */
- { 9338, 0x00008457 }, /* GL_FOG_COORD_ARRAY */
- { 9357, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */
- { 9391, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */
- { 9418, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */
- { 9444, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */
- { 9468, 0x00008450 }, /* GL_FOG_COORD_SRC */
- { 9485, 0x00000B62 }, /* GL_FOG_DENSITY */
- { 9500, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */
- { 9524, 0x00000B64 }, /* GL_FOG_END */
- { 9535, 0x00000C54 }, /* GL_FOG_HINT */
- { 9547, 0x00000B61 }, /* GL_FOG_INDEX */
- { 9560, 0x00000B65 }, /* GL_FOG_MODE */
- { 9572, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */
- { 9591, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */
- { 9616, 0x00000B63 }, /* GL_FOG_START */
- { 9629, 0x00008452 }, /* GL_FRAGMENT_DEPTH */
- { 9647, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */
- { 9671, 0x00008B30 }, /* GL_FRAGMENT_SHADER */
- { 9690, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */
- { 9713, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
- { 9748, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
- { 9790, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
- { 9832, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
- { 9881, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
- { 9933, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
- { 9977, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
- { 10021, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */
- { 10048, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */
- { 10076, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */
- { 10095, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
- { 10136, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
- { 10177, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
- { 10219, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
- { 10270, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
- { 10308, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
- { 10357, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
- { 10399, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
- { 10431, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
- { 10462, 0x00000404 }, /* GL_FRONT */
- { 10471, 0x00000408 }, /* GL_FRONT_AND_BACK */
- { 10489, 0x00000B46 }, /* GL_FRONT_FACE */
- { 10503, 0x00000400 }, /* GL_FRONT_LEFT */
- { 10517, 0x00000401 }, /* GL_FRONT_RIGHT */
- { 10532, 0x00008006 }, /* GL_FUNC_ADD */
- { 10544, 0x00008006 }, /* GL_FUNC_ADD_EXT */
- { 10560, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */
- { 10585, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */
- { 10614, 0x0000800A }, /* GL_FUNC_SUBTRACT */
- { 10631, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */
- { 10652, 0x00008191 }, /* GL_GENERATE_MIPMAP */
- { 10671, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */
- { 10695, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */
- { 10724, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */
- { 10748, 0x00000206 }, /* GL_GEQUAL */
- { 10758, 0x00008009 }, /* GL_GL_BLEND_EQUATION_RGB */
- { 10783, 0x00008C4A }, /* GL_GL_COMPRESSED_SLUMINANCE */
- { 10811, 0x00008C4B }, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */
- { 10845, 0x00008C48 }, /* GL_GL_COMPRESSED_SRGB */
- { 10867, 0x00008C49 }, /* GL_GL_COMPRESSED_SRGB_ALPHA */
- { 10895, 0x0000845F }, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */
- { 10932, 0x00008B65 }, /* GL_GL_FLOAT_MAT2x3 */
- { 10951, 0x00008B66 }, /* GL_GL_FLOAT_MAT2x4 */
- { 10970, 0x00008B67 }, /* GL_GL_FLOAT_MAT3x2 */
- { 10989, 0x00008B68 }, /* GL_GL_FLOAT_MAT3x4 */
- { 11008, 0x00008B69 }, /* GL_GL_FLOAT_MAT4x2 */
- { 11027, 0x00008B6A }, /* GL_GL_FLOAT_MAT4x3 */
- { 11046, 0x000088EB }, /* GL_GL_PIXEL_PACK_BUFFER */
- { 11070, 0x000088ED }, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */
- { 11102, 0x000088EC }, /* GL_GL_PIXEL_UNPACK_BUFFER */
- { 11128, 0x000088EF }, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */
- { 11162, 0x00008C46 }, /* GL_GL_SLUMINANCE */
- { 11179, 0x00008C47 }, /* GL_GL_SLUMINANCE8 */
- { 11197, 0x00008C45 }, /* GL_GL_SLUMINANCE8_ALPHA8 */
- { 11222, 0x00008C44 }, /* GL_GL_SLUMINANCE_ALPHA */
- { 11245, 0x00008C40 }, /* GL_GL_SRGB */
- { 11256, 0x00008C41 }, /* GL_GL_SRGB8 */
- { 11268, 0x00008C43 }, /* GL_GL_SRGB8_ALPHA8 */
- { 11287, 0x00008C42 }, /* GL_GL_SRGB_ALPHA */
- { 11304, 0x00000204 }, /* GL_GREATER */
- { 11315, 0x00001904 }, /* GL_GREEN */
- { 11324, 0x00000D19 }, /* GL_GREEN_BIAS */
- { 11338, 0x00000D53 }, /* GL_GREEN_BITS */
- { 11352, 0x00000D18 }, /* GL_GREEN_SCALE */
- { 11367, 0x00008000 }, /* GL_HINT_BIT */
- { 11379, 0x00008024 }, /* GL_HISTOGRAM */
- { 11392, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */
- { 11416, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */
- { 11444, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */
- { 11467, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */
- { 11494, 0x00008024 }, /* GL_HISTOGRAM_EXT */
- { 11511, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */
- { 11531, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */
- { 11555, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */
- { 11579, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */
- { 11607, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */
- { 11635, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */
- { 11667, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */
- { 11689, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */
- { 11715, 0x0000802D }, /* GL_HISTOGRAM_SINK */
- { 11733, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */
- { 11755, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */
- { 11774, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */
- { 11797, 0x0000862A }, /* GL_IDENTITY_NV */
- { 11812, 0x00008150 }, /* GL_IGNORE_BORDER_HP */
- { 11832, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
- { 11872, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
- { 11910, 0x00001E02 }, /* GL_INCR */
- { 11918, 0x00008507 }, /* GL_INCR_WRAP */
- { 11931, 0x00008507 }, /* GL_INCR_WRAP_EXT */
- { 11948, 0x00008077 }, /* GL_INDEX_ARRAY */
- { 11963, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */
- { 11993, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */
- { 12027, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */
- { 12050, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */
- { 12072, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */
- { 12092, 0x00000D51 }, /* GL_INDEX_BITS */
- { 12106, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */
- { 12127, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */
- { 12145, 0x00000C30 }, /* GL_INDEX_MODE */
- { 12159, 0x00000D13 }, /* GL_INDEX_OFFSET */
- { 12175, 0x00000D12 }, /* GL_INDEX_SHIFT */
- { 12190, 0x00000C21 }, /* GL_INDEX_WRITEMASK */
- { 12209, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */
- { 12228, 0x00001404 }, /* GL_INT */
- { 12235, 0x00008049 }, /* GL_INTENSITY */
- { 12248, 0x0000804C }, /* GL_INTENSITY12 */
- { 12263, 0x0000804C }, /* GL_INTENSITY12_EXT */
- { 12282, 0x0000804D }, /* GL_INTENSITY16 */
- { 12297, 0x0000804D }, /* GL_INTENSITY16_EXT */
- { 12316, 0x0000804A }, /* GL_INTENSITY4 */
- { 12330, 0x0000804A }, /* GL_INTENSITY4_EXT */
- { 12348, 0x0000804B }, /* GL_INTENSITY8 */
- { 12362, 0x0000804B }, /* GL_INTENSITY8_EXT */
- { 12380, 0x00008049 }, /* GL_INTENSITY_EXT */
- { 12397, 0x00008575 }, /* GL_INTERPOLATE */
- { 12412, 0x00008575 }, /* GL_INTERPOLATE_ARB */
- { 12431, 0x00008575 }, /* GL_INTERPOLATE_EXT */
- { 12450, 0x00008B53 }, /* GL_INT_VEC2 */
- { 12462, 0x00008B53 }, /* GL_INT_VEC2_ARB */
- { 12478, 0x00008B54 }, /* GL_INT_VEC3 */
- { 12490, 0x00008B54 }, /* GL_INT_VEC3_ARB */
- { 12506, 0x00008B55 }, /* GL_INT_VEC4 */
- { 12518, 0x00008B55 }, /* GL_INT_VEC4_ARB */
- { 12534, 0x00000500 }, /* GL_INVALID_ENUM */
- { 12550, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
- { 12587, 0x00000502 }, /* GL_INVALID_OPERATION */
- { 12608, 0x00000501 }, /* GL_INVALID_VALUE */
- { 12625, 0x0000862B }, /* GL_INVERSE_NV */
- { 12639, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */
- { 12663, 0x0000150A }, /* GL_INVERT */
- { 12673, 0x00001E00 }, /* GL_KEEP */
- { 12681, 0x00000406 }, /* GL_LEFT */
- { 12689, 0x00000203 }, /* GL_LEQUAL */
- { 12699, 0x00000201 }, /* GL_LESS */
- { 12707, 0x00004000 }, /* GL_LIGHT0 */
- { 12717, 0x00004001 }, /* GL_LIGHT1 */
- { 12727, 0x00004002 }, /* GL_LIGHT2 */
- { 12737, 0x00004003 }, /* GL_LIGHT3 */
- { 12747, 0x00004004 }, /* GL_LIGHT4 */
- { 12757, 0x00004005 }, /* GL_LIGHT5 */
- { 12767, 0x00004006 }, /* GL_LIGHT6 */
- { 12777, 0x00004007 }, /* GL_LIGHT7 */
- { 12787, 0x00000B50 }, /* GL_LIGHTING */
- { 12799, 0x00000040 }, /* GL_LIGHTING_BIT */
- { 12815, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */
- { 12838, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */
- { 12867, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */
- { 12900, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
- { 12928, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */
- { 12952, 0x00001B01 }, /* GL_LINE */
- { 12960, 0x00002601 }, /* GL_LINEAR */
- { 12970, 0x00001208 }, /* GL_LINEAR_ATTENUATION */
- { 12992, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
- { 13022, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
- { 13053, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */
- { 13077, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */
- { 13102, 0x00000001 }, /* GL_LINES */
- { 13111, 0x00000004 }, /* GL_LINE_BIT */
- { 13123, 0x00000002 }, /* GL_LINE_LOOP */
- { 13136, 0x00000707 }, /* GL_LINE_RESET_TOKEN */
- { 13156, 0x00000B20 }, /* GL_LINE_SMOOTH */
- { 13171, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */
- { 13191, 0x00000B24 }, /* GL_LINE_STIPPLE */
- { 13207, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */
- { 13231, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */
- { 13254, 0x00000003 }, /* GL_LINE_STRIP */
- { 13268, 0x00000702 }, /* GL_LINE_TOKEN */
- { 13282, 0x00000B21 }, /* GL_LINE_WIDTH */
- { 13296, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */
- { 13322, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */
- { 13342, 0x00008B82 }, /* GL_LINK_STATUS */
- { 13357, 0x00000B32 }, /* GL_LIST_BASE */
- { 13370, 0x00020000 }, /* GL_LIST_BIT */
- { 13382, 0x00000B33 }, /* GL_LIST_INDEX */
- { 13396, 0x00000B30 }, /* GL_LIST_MODE */
- { 13409, 0x00000101 }, /* GL_LOAD */
- { 13417, 0x00000BF1 }, /* GL_LOGIC_OP */
- { 13429, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */
- { 13446, 0x00008CA1 }, /* GL_LOWER_LEFT */
- { 13460, 0x00001909 }, /* GL_LUMINANCE */
- { 13473, 0x00008041 }, /* GL_LUMINANCE12 */
- { 13488, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */
- { 13511, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */
- { 13538, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */
- { 13560, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */
- { 13586, 0x00008041 }, /* GL_LUMINANCE12_EXT */
- { 13605, 0x00008042 }, /* GL_LUMINANCE16 */
- { 13620, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */
- { 13643, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */
- { 13670, 0x00008042 }, /* GL_LUMINANCE16_EXT */
- { 13689, 0x0000803F }, /* GL_LUMINANCE4 */
- { 13703, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */
- { 13724, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */
- { 13749, 0x0000803F }, /* GL_LUMINANCE4_EXT */
- { 13767, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */
- { 13788, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */
- { 13813, 0x00008040 }, /* GL_LUMINANCE8 */
- { 13827, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */
- { 13848, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */
- { 13873, 0x00008040 }, /* GL_LUMINANCE8_EXT */
- { 13891, 0x0000190A }, /* GL_LUMINANCE_ALPHA */
- { 13910, 0x00000D90 }, /* GL_MAP1_COLOR_4 */
- { 13926, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */
- { 13946, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */
- { 13968, 0x00000D91 }, /* GL_MAP1_INDEX */
- { 13982, 0x00000D92 }, /* GL_MAP1_NORMAL */
- { 13997, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */
- { 14021, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */
- { 14045, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */
- { 14069, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */
- { 14093, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */
- { 14110, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */
- { 14127, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
- { 14155, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
- { 14184, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
- { 14213, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
- { 14242, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
- { 14271, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
- { 14300, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
- { 14329, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
- { 14357, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
- { 14385, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
- { 14413, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
- { 14441, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
- { 14469, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
- { 14497, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
- { 14525, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
- { 14553, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
- { 14581, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */
- { 14597, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */
- { 14617, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */
- { 14639, 0x00000DB1 }, /* GL_MAP2_INDEX */
- { 14653, 0x00000DB2 }, /* GL_MAP2_NORMAL */
- { 14668, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */
- { 14692, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */
- { 14716, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */
- { 14740, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */
- { 14764, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */
- { 14781, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */
- { 14798, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
- { 14826, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
- { 14855, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
- { 14884, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
- { 14913, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
- { 14942, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
- { 14971, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
- { 15000, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
- { 15028, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
- { 15056, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
- { 15084, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
- { 15112, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
- { 15140, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
- { 15168, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */
- { 15196, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
- { 15224, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
- { 15252, 0x00000D10 }, /* GL_MAP_COLOR */
- { 15265, 0x00000D11 }, /* GL_MAP_STENCIL */
- { 15280, 0x000088C0 }, /* GL_MATRIX0_ARB */
- { 15295, 0x00008630 }, /* GL_MATRIX0_NV */
- { 15309, 0x000088CA }, /* GL_MATRIX10_ARB */
- { 15325, 0x000088CB }, /* GL_MATRIX11_ARB */
- { 15341, 0x000088CC }, /* GL_MATRIX12_ARB */
- { 15357, 0x000088CD }, /* GL_MATRIX13_ARB */
- { 15373, 0x000088CE }, /* GL_MATRIX14_ARB */
- { 15389, 0x000088CF }, /* GL_MATRIX15_ARB */
- { 15405, 0x000088D0 }, /* GL_MATRIX16_ARB */
- { 15421, 0x000088D1 }, /* GL_MATRIX17_ARB */
- { 15437, 0x000088D2 }, /* GL_MATRIX18_ARB */
- { 15453, 0x000088D3 }, /* GL_MATRIX19_ARB */
- { 15469, 0x000088C1 }, /* GL_MATRIX1_ARB */
- { 15484, 0x00008631 }, /* GL_MATRIX1_NV */
- { 15498, 0x000088D4 }, /* GL_MATRIX20_ARB */
- { 15514, 0x000088D5 }, /* GL_MATRIX21_ARB */
- { 15530, 0x000088D6 }, /* GL_MATRIX22_ARB */
- { 15546, 0x000088D7 }, /* GL_MATRIX23_ARB */
- { 15562, 0x000088D8 }, /* GL_MATRIX24_ARB */
- { 15578, 0x000088D9 }, /* GL_MATRIX25_ARB */
- { 15594, 0x000088DA }, /* GL_MATRIX26_ARB */
- { 15610, 0x000088DB }, /* GL_MATRIX27_ARB */
- { 15626, 0x000088DC }, /* GL_MATRIX28_ARB */
- { 15642, 0x000088DD }, /* GL_MATRIX29_ARB */
- { 15658, 0x000088C2 }, /* GL_MATRIX2_ARB */
- { 15673, 0x00008632 }, /* GL_MATRIX2_NV */
- { 15687, 0x000088DE }, /* GL_MATRIX30_ARB */
- { 15703, 0x000088DF }, /* GL_MATRIX31_ARB */
- { 15719, 0x000088C3 }, /* GL_MATRIX3_ARB */
- { 15734, 0x00008633 }, /* GL_MATRIX3_NV */
- { 15748, 0x000088C4 }, /* GL_MATRIX4_ARB */
- { 15763, 0x00008634 }, /* GL_MATRIX4_NV */
- { 15777, 0x000088C5 }, /* GL_MATRIX5_ARB */
- { 15792, 0x00008635 }, /* GL_MATRIX5_NV */
- { 15806, 0x000088C6 }, /* GL_MATRIX6_ARB */
- { 15821, 0x00008636 }, /* GL_MATRIX6_NV */
- { 15835, 0x000088C7 }, /* GL_MATRIX7_ARB */
- { 15850, 0x00008637 }, /* GL_MATRIX7_NV */
- { 15864, 0x000088C8 }, /* GL_MATRIX8_ARB */
- { 15879, 0x000088C9 }, /* GL_MATRIX9_ARB */
- { 15894, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */
- { 15920, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
- { 15954, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
- { 15985, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
- { 16018, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
- { 16049, 0x00000BA0 }, /* GL_MATRIX_MODE */
- { 16064, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */
- { 16086, 0x00008008 }, /* GL_MAX */
- { 16093, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */
- { 16116, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
- { 16148, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */
- { 16174, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
- { 16207, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
- { 16233, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
- { 16267, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */
- { 16286, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
- { 16315, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
- { 16347, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */
- { 16383, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
- { 16419, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */
- { 16459, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */
- { 16485, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */
- { 16515, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */
- { 16540, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */
- { 16569, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
- { 16598, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */
- { 16631, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */
- { 16651, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */
- { 16675, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */
- { 16699, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */
- { 16723, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */
- { 16748, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */
- { 16766, 0x00008008 }, /* GL_MAX_EXT */
- { 16777, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
- { 16812, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */
- { 16851, 0x00000D31 }, /* GL_MAX_LIGHTS */
- { 16865, 0x00000B31 }, /* GL_MAX_LIST_NESTING */
- { 16885, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
- { 16923, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */
- { 16952, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */
- { 16976, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */
- { 17004, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */
- { 17027, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
- { 17064, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
- { 17100, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
- { 17127, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
- { 17156, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
- { 17190, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
- { 17226, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
- { 17253, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
- { 17285, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
- { 17321, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
- { 17350, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
- { 17379, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */
- { 17407, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
- { 17445, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
- { 17489, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
- { 17532, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
- { 17566, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
- { 17605, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
- { 17642, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
- { 17680, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
- { 17723, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
- { 17766, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
- { 17796, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
- { 17827, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
- { 17863, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
- { 17899, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */
- { 17929, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
- { 17963, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */
- { 17996, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
- { 18025, 0x00008504 }, /* GL_MAX_SHININESS_NV */
- { 18045, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */
- { 18069, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */
- { 18091, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */
- { 18117, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */
- { 18144, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */
- { 18175, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */
- { 18199, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
- { 18233, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */
- { 18253, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */
- { 18280, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */
- { 18301, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */
- { 18326, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */
- { 18351, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */
- { 18386, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */
- { 18408, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */
- { 18434, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */
- { 18456, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */
- { 18482, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
- { 18516, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
- { 18554, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
- { 18587, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */
- { 18624, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */
- { 18648, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */
- { 18669, 0x00008007 }, /* GL_MIN */
- { 18676, 0x0000802E }, /* GL_MINMAX */
- { 18686, 0x0000802E }, /* GL_MINMAX_EXT */
- { 18700, 0x0000802F }, /* GL_MINMAX_FORMAT */
- { 18717, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */
- { 18738, 0x00008030 }, /* GL_MINMAX_SINK */
- { 18753, 0x00008030 }, /* GL_MINMAX_SINK_EXT */
- { 18772, 0x00008007 }, /* GL_MIN_EXT */
- { 18783, 0x00008370 }, /* GL_MIRRORED_REPEAT */
- { 18802, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */
- { 18825, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */
- { 18848, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */
- { 18868, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */
- { 18888, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
- { 18918, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */
- { 18946, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
- { 18974, 0x00001700 }, /* GL_MODELVIEW */
- { 18987, 0x00001700 }, /* GL_MODELVIEW0_ARB */
- { 19005, 0x0000872A }, /* GL_MODELVIEW10_ARB */
- { 19024, 0x0000872B }, /* GL_MODELVIEW11_ARB */
- { 19043, 0x0000872C }, /* GL_MODELVIEW12_ARB */
- { 19062, 0x0000872D }, /* GL_MODELVIEW13_ARB */
- { 19081, 0x0000872E }, /* GL_MODELVIEW14_ARB */
- { 19100, 0x0000872F }, /* GL_MODELVIEW15_ARB */
- { 19119, 0x00008730 }, /* GL_MODELVIEW16_ARB */
- { 19138, 0x00008731 }, /* GL_MODELVIEW17_ARB */
- { 19157, 0x00008732 }, /* GL_MODELVIEW18_ARB */
- { 19176, 0x00008733 }, /* GL_MODELVIEW19_ARB */
- { 19195, 0x0000850A }, /* GL_MODELVIEW1_ARB */
- { 19213, 0x00008734 }, /* GL_MODELVIEW20_ARB */
- { 19232, 0x00008735 }, /* GL_MODELVIEW21_ARB */
- { 19251, 0x00008736 }, /* GL_MODELVIEW22_ARB */
- { 19270, 0x00008737 }, /* GL_MODELVIEW23_ARB */
- { 19289, 0x00008738 }, /* GL_MODELVIEW24_ARB */
- { 19308, 0x00008739 }, /* GL_MODELVIEW25_ARB */
- { 19327, 0x0000873A }, /* GL_MODELVIEW26_ARB */
- { 19346, 0x0000873B }, /* GL_MODELVIEW27_ARB */
- { 19365, 0x0000873C }, /* GL_MODELVIEW28_ARB */
- { 19384, 0x0000873D }, /* GL_MODELVIEW29_ARB */
- { 19403, 0x00008722 }, /* GL_MODELVIEW2_ARB */
- { 19421, 0x0000873E }, /* GL_MODELVIEW30_ARB */
- { 19440, 0x0000873F }, /* GL_MODELVIEW31_ARB */
- { 19459, 0x00008723 }, /* GL_MODELVIEW3_ARB */
- { 19477, 0x00008724 }, /* GL_MODELVIEW4_ARB */
- { 19495, 0x00008725 }, /* GL_MODELVIEW5_ARB */
- { 19513, 0x00008726 }, /* GL_MODELVIEW6_ARB */
- { 19531, 0x00008727 }, /* GL_MODELVIEW7_ARB */
- { 19549, 0x00008728 }, /* GL_MODELVIEW8_ARB */
- { 19567, 0x00008729 }, /* GL_MODELVIEW9_ARB */
- { 19585, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */
- { 19605, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */
- { 19632, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */
- { 19657, 0x00002100 }, /* GL_MODULATE */
- { 19669, 0x00008744 }, /* GL_MODULATE_ADD_ATI */
- { 19689, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */
- { 19716, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */
- { 19741, 0x00000103 }, /* GL_MULT */
- { 19749, 0x0000809D }, /* GL_MULTISAMPLE */
- { 19764, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */
- { 19784, 0x0000809D }, /* GL_MULTISAMPLE_ARB */
- { 19803, 0x20000000 }, /* GL_MULTISAMPLE_BIT */
- { 19822, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */
- { 19846, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */
- { 19869, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */
- { 19899, 0x00002A25 }, /* GL_N3F_V3F */
- { 19910, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */
- { 19930, 0x0000150E }, /* GL_NAND */
- { 19938, 0x00002600 }, /* GL_NEAREST */
- { 19949, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
- { 19980, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
- { 20012, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */
- { 20037, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */
- { 20063, 0x00000200 }, /* GL_NEVER */
- { 20072, 0x00001102 }, /* GL_NICEST */
- { 20082, 0x00000000 }, /* GL_NONE */
- { 20090, 0x00001505 }, /* GL_NOOP */
- { 20098, 0x00001508 }, /* GL_NOR */
- { 20105, 0x00000BA1 }, /* GL_NORMALIZE */
- { 20118, 0x00008075 }, /* GL_NORMAL_ARRAY */
- { 20134, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
- { 20165, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */
- { 20200, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */
- { 20224, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */
- { 20247, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */
- { 20268, 0x00008511 }, /* GL_NORMAL_MAP */
- { 20282, 0x00008511 }, /* GL_NORMAL_MAP_ARB */
- { 20300, 0x00008511 }, /* GL_NORMAL_MAP_NV */
- { 20317, 0x00000205 }, /* GL_NOTEQUAL */
- { 20329, 0x00000000 }, /* GL_NO_ERROR */
- { 20341, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
- { 20375, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */
- { 20413, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */
- { 20445, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */
- { 20487, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */
- { 20517, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */
- { 20557, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */
- { 20588, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */
- { 20617, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */
- { 20645, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */
- { 20675, 0x00002401 }, /* GL_OBJECT_LINEAR */
- { 20692, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */
- { 20718, 0x00002501 }, /* GL_OBJECT_PLANE */
- { 20734, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */
- { 20769, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */
- { 20791, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */
- { 20810, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */
- { 20840, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */
- { 20861, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */
- { 20889, 0x00000001 }, /* GL_ONE */
- { 20896, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */
- { 20924, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */
- { 20956, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */
- { 20984, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */
- { 21016, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */
- { 21039, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */
- { 21062, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */
- { 21085, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */
- { 21108, 0x00008598 }, /* GL_OPERAND0_ALPHA */
- { 21126, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */
- { 21148, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */
- { 21170, 0x00008590 }, /* GL_OPERAND0_RGB */
- { 21186, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */
- { 21206, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */
- { 21226, 0x00008599 }, /* GL_OPERAND1_ALPHA */
- { 21244, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */
- { 21266, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */
- { 21288, 0x00008591 }, /* GL_OPERAND1_RGB */
- { 21304, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */
- { 21324, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */
- { 21344, 0x0000859A }, /* GL_OPERAND2_ALPHA */
- { 21362, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */
- { 21384, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */
- { 21406, 0x00008592 }, /* GL_OPERAND2_RGB */
- { 21422, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */
- { 21442, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */
- { 21462, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */
- { 21483, 0x00008593 }, /* GL_OPERAND3_RGB_NV */
- { 21502, 0x00001507 }, /* GL_OR */
- { 21508, 0x00000A01 }, /* GL_ORDER */
- { 21517, 0x0000150D }, /* GL_OR_INVERTED */
- { 21532, 0x0000150B }, /* GL_OR_REVERSE */
- { 21546, 0x00000505 }, /* GL_OUT_OF_MEMORY */
- { 21563, 0x00000D05 }, /* GL_PACK_ALIGNMENT */
- { 21581, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */
- { 21602, 0x00008758 }, /* GL_PACK_INVERT_MESA */
- { 21622, 0x00000D01 }, /* GL_PACK_LSB_FIRST */
- { 21640, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */
- { 21659, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */
- { 21679, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */
- { 21699, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */
- { 21717, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */
- { 21736, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */
- { 21761, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */
- { 21785, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */
- { 21806, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */
- { 21828, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */
- { 21850, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */
- { 21875, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */
- { 21899, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */
- { 21920, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */
- { 21942, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */
- { 21964, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */
- { 21986, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */
- { 22017, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */
- { 22037, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */
- { 22062, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */
- { 22082, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */
- { 22107, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */
- { 22127, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */
- { 22152, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */
- { 22172, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */
- { 22197, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */
- { 22217, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */
- { 22242, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */
- { 22262, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */
- { 22287, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */
- { 22307, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */
- { 22332, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */
- { 22352, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */
- { 22377, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */
- { 22397, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */
- { 22422, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */
- { 22442, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */
- { 22467, 0x00000020 }, /* GL_PIXEL_MODE_BIT */
- { 22485, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */
- { 22518, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */
- { 22543, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */
- { 22578, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */
- { 22605, 0x00001B00 }, /* GL_POINT */
- { 22614, 0x00000000 }, /* GL_POINTS */
- { 22624, 0x00000002 }, /* GL_POINT_BIT */
- { 22637, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */
- { 22667, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */
- { 22701, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */
- { 22735, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */
- { 22770, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */
- { 22799, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */
- { 22832, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */
- { 22865, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */
- { 22899, 0x00000B11 }, /* GL_POINT_SIZE */
- { 22913, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */
- { 22939, 0x00008127 }, /* GL_POINT_SIZE_MAX */
- { 22957, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */
- { 22979, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */
- { 23001, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */
- { 23024, 0x00008126 }, /* GL_POINT_SIZE_MIN */
- { 23042, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */
- { 23064, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */
- { 23086, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */
- { 23109, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */
- { 23129, 0x00000B10 }, /* GL_POINT_SMOOTH */
- { 23145, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */
- { 23166, 0x00008861 }, /* GL_POINT_SPRITE */
- { 23182, 0x00008861 }, /* GL_POINT_SPRITE_ARB */
- { 23202, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */
- { 23231, 0x00008861 }, /* GL_POINT_SPRITE_NV */
- { 23250, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */
- { 23276, 0x00000701 }, /* GL_POINT_TOKEN */
- { 23291, 0x00000009 }, /* GL_POLYGON */
- { 23302, 0x00000008 }, /* GL_POLYGON_BIT */
- { 23317, 0x00000B40 }, /* GL_POLYGON_MODE */
- { 23333, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */
- { 23356, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */
- { 23381, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */
- { 23404, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */
- { 23427, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */
- { 23451, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */
- { 23475, 0x00000B41 }, /* GL_POLYGON_SMOOTH */
- { 23493, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */
- { 23516, 0x00000B42 }, /* GL_POLYGON_STIPPLE */
- { 23535, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */
- { 23558, 0x00000703 }, /* GL_POLYGON_TOKEN */
- { 23575, 0x00001203 }, /* GL_POSITION */
- { 23587, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
- { 23619, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */
- { 23655, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
- { 23688, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */
- { 23725, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
- { 23756, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */
- { 23791, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
- { 23823, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */
- { 23859, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
- { 23892, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
- { 23924, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */
- { 23960, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
- { 23993, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */
- { 24030, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */
- { 24060, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */
- { 24094, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */
- { 24125, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */
- { 24160, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
- { 24191, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */
- { 24226, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
- { 24258, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */
- { 24294, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */
- { 24324, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */
- { 24358, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */
- { 24389, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */
- { 24424, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */
- { 24456, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */
- { 24487, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */
- { 24522, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */
- { 24554, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */
- { 24590, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */
- { 24619, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */
- { 24652, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */
- { 24682, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */
- { 24716, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
- { 24755, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
- { 24788, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
- { 24828, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
- { 24862, 0x00008578 }, /* GL_PREVIOUS */
- { 24874, 0x00008578 }, /* GL_PREVIOUS_ARB */
- { 24890, 0x00008578 }, /* GL_PREVIOUS_EXT */
- { 24906, 0x00008577 }, /* GL_PRIMARY_COLOR */
- { 24923, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */
- { 24944, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */
- { 24965, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
- { 24998, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
- { 25030, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */
- { 25053, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */
- { 25076, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */
- { 25106, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */
- { 25135, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */
- { 25163, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */
- { 25185, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */
- { 25213, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */
- { 25241, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */
- { 25263, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */
- { 25284, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
- { 25324, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
- { 25363, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
- { 25393, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
- { 25428, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
- { 25461, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
- { 25495, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
- { 25534, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
- { 25573, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */
- { 25595, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */
- { 25621, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */
- { 25645, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */
- { 25668, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */
- { 25690, 0x00008628 }, /* GL_PROGRAM_STRING_NV */
- { 25711, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */
- { 25732, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */
- { 25759, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
- { 25791, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
- { 25823, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
- { 25858, 0x00001701 }, /* GL_PROJECTION */
- { 25872, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */
- { 25893, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */
- { 25919, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */
- { 25940, 0x00008025 }, /* GL_PROXY_HISTOGRAM */
- { 25959, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */
- { 25982, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
- { 26021, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
- { 26059, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */
- { 26079, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
- { 26109, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */
- { 26133, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */
- { 26153, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
- { 26183, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */
- { 26207, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */
- { 26227, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
- { 26260, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */
- { 26286, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */
- { 26316, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
- { 26347, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */
- { 26377, 0x00002003 }, /* GL_Q */
- { 26382, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */
- { 26407, 0x00000007 }, /* GL_QUADS */
- { 26416, 0x00008614 }, /* GL_QUAD_MESH_SUN */
- { 26433, 0x00000008 }, /* GL_QUAD_STRIP */
- { 26447, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */
- { 26469, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */
- { 26495, 0x00008866 }, /* GL_QUERY_RESULT */
- { 26511, 0x00008866 }, /* GL_QUERY_RESULT_ARB */
- { 26531, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */
- { 26557, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */
- { 26587, 0x00002002 }, /* GL_R */
- { 26592, 0x00002A10 }, /* GL_R3_G3_B2 */
- { 26604, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
- { 26637, 0x00000C02 }, /* GL_READ_BUFFER */
- { 26652, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
- { 26684, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */
- { 26708, 0x000088B8 }, /* GL_READ_ONLY */
- { 26721, 0x000088B8 }, /* GL_READ_ONLY_ARB */
- { 26738, 0x000088BA }, /* GL_READ_WRITE */
- { 26752, 0x000088BA }, /* GL_READ_WRITE_ARB */
- { 26770, 0x00001903 }, /* GL_RED */
- { 26777, 0x00008016 }, /* GL_REDUCE */
- { 26787, 0x00008016 }, /* GL_REDUCE_EXT */
- { 26801, 0x00000D15 }, /* GL_RED_BIAS */
- { 26813, 0x00000D52 }, /* GL_RED_BITS */
- { 26825, 0x00000D14 }, /* GL_RED_SCALE */
- { 26838, 0x00008512 }, /* GL_REFLECTION_MAP */
- { 26856, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */
- { 26878, 0x00008512 }, /* GL_REFLECTION_MAP_NV */
- { 26899, 0x00001C00 }, /* GL_RENDER */
- { 26909, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */
- { 26937, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */
- { 26957, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */
- { 26984, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
- { 27020, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */
- { 27046, 0x00001F01 }, /* GL_RENDERER */
- { 27058, 0x00000C40 }, /* GL_RENDER_MODE */
- { 27073, 0x00002901 }, /* GL_REPEAT */
- { 27083, 0x00001E01 }, /* GL_REPLACE */
- { 27094, 0x00008062 }, /* GL_REPLACE_EXT */
- { 27109, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */
- { 27132, 0x0000803A }, /* GL_RESCALE_NORMAL */
- { 27150, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */
- { 27172, 0x00000102 }, /* GL_RETURN */
- { 27182, 0x00001907 }, /* GL_RGB */
- { 27189, 0x00008052 }, /* GL_RGB10 */
- { 27198, 0x00008059 }, /* GL_RGB10_A2 */
- { 27210, 0x00008059 }, /* GL_RGB10_A2_EXT */
- { 27226, 0x00008052 }, /* GL_RGB10_EXT */
- { 27239, 0x00008053 }, /* GL_RGB12 */
- { 27248, 0x00008053 }, /* GL_RGB12_EXT */
- { 27261, 0x00008054 }, /* GL_RGB16 */
- { 27270, 0x00008054 }, /* GL_RGB16_EXT */
- { 27283, 0x0000804E }, /* GL_RGB2_EXT */
- { 27295, 0x0000804F }, /* GL_RGB4 */
- { 27303, 0x0000804F }, /* GL_RGB4_EXT */
- { 27315, 0x000083A1 }, /* GL_RGB4_S3TC */
- { 27328, 0x00008050 }, /* GL_RGB5 */
- { 27336, 0x00008057 }, /* GL_RGB5_A1 */
- { 27347, 0x00008057 }, /* GL_RGB5_A1_EXT */
- { 27362, 0x00008050 }, /* GL_RGB5_EXT */
- { 27374, 0x00008051 }, /* GL_RGB8 */
- { 27382, 0x00008051 }, /* GL_RGB8_EXT */
- { 27394, 0x00001908 }, /* GL_RGBA */
- { 27402, 0x0000805A }, /* GL_RGBA12 */
- { 27412, 0x0000805A }, /* GL_RGBA12_EXT */
- { 27426, 0x0000805B }, /* GL_RGBA16 */
- { 27436, 0x0000805B }, /* GL_RGBA16_EXT */
- { 27450, 0x00008055 }, /* GL_RGBA2 */
- { 27459, 0x00008055 }, /* GL_RGBA2_EXT */
- { 27472, 0x00008056 }, /* GL_RGBA4 */
- { 27481, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */
- { 27500, 0x00008056 }, /* GL_RGBA4_EXT */
- { 27513, 0x000083A3 }, /* GL_RGBA4_S3TC */
- { 27527, 0x00008058 }, /* GL_RGBA8 */
- { 27536, 0x00008058 }, /* GL_RGBA8_EXT */
- { 27549, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */
- { 27567, 0x00000C31 }, /* GL_RGBA_MODE */
- { 27580, 0x000083A2 }, /* GL_RGBA_S3TC */
- { 27593, 0x000083A0 }, /* GL_RGB_S3TC */
- { 27605, 0x00008573 }, /* GL_RGB_SCALE */
- { 27618, 0x00008573 }, /* GL_RGB_SCALE_ARB */
- { 27635, 0x00008573 }, /* GL_RGB_SCALE_EXT */
- { 27652, 0x00000407 }, /* GL_RIGHT */
- { 27661, 0x00002000 }, /* GL_S */
- { 27666, 0x00008B5D }, /* GL_SAMPLER_1D */
- { 27680, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */
- { 27701, 0x00008B5E }, /* GL_SAMPLER_2D */
- { 27715, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */
- { 27736, 0x00008B5F }, /* GL_SAMPLER_3D */
- { 27750, 0x00008B60 }, /* GL_SAMPLER_CUBE */
- { 27766, 0x000080A9 }, /* GL_SAMPLES */
- { 27777, 0x000086B4 }, /* GL_SAMPLES_3DFX */
- { 27793, 0x000080A9 }, /* GL_SAMPLES_ARB */
- { 27808, 0x00008914 }, /* GL_SAMPLES_PASSED */
- { 27826, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */
- { 27848, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
- { 27876, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */
- { 27908, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */
- { 27931, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */
- { 27958, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */
- { 27976, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */
- { 27999, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */
- { 28021, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */
- { 28040, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */
- { 28063, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */
- { 28089, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */
- { 28119, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */
- { 28144, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */
- { 28173, 0x00080000 }, /* GL_SCISSOR_BIT */
- { 28188, 0x00000C10 }, /* GL_SCISSOR_BOX */
- { 28203, 0x00000C11 }, /* GL_SCISSOR_TEST */
- { 28219, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */
- { 28244, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
- { 28284, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */
- { 28328, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
- { 28361, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
- { 28391, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
- { 28423, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
- { 28453, 0x00001C02 }, /* GL_SELECT */
- { 28463, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */
- { 28491, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */
- { 28516, 0x00008012 }, /* GL_SEPARABLE_2D */
- { 28532, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */
- { 28559, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */
- { 28590, 0x0000150F }, /* GL_SET */
- { 28597, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */
- { 28618, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */
- { 28642, 0x00008B4F }, /* GL_SHADER_TYPE */
- { 28657, 0x00000B54 }, /* GL_SHADE_MODEL */
- { 28672, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */
- { 28700, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */
- { 28723, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */
- { 28753, 0x00001601 }, /* GL_SHININESS */
- { 28766, 0x00001402 }, /* GL_SHORT */
- { 28775, 0x000081F9 }, /* GL_SINGLE_COLOR */
- { 28791, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */
- { 28811, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */
- { 28830, 0x00001D01 }, /* GL_SMOOTH */
- { 28840, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */
- { 28873, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */
- { 28900, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */
- { 28933, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */
- { 28960, 0x00008588 }, /* GL_SOURCE0_ALPHA */
- { 28977, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */
- { 28998, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */
- { 29019, 0x00008580 }, /* GL_SOURCE0_RGB */
- { 29034, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */
- { 29053, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */
- { 29072, 0x00008589 }, /* GL_SOURCE1_ALPHA */
- { 29089, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */
- { 29110, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */
- { 29131, 0x00008581 }, /* GL_SOURCE1_RGB */
- { 29146, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */
- { 29165, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */
- { 29184, 0x0000858A }, /* GL_SOURCE2_ALPHA */
- { 29201, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */
- { 29222, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */
- { 29243, 0x00008582 }, /* GL_SOURCE2_RGB */
- { 29258, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */
- { 29277, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */
- { 29296, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */
- { 29316, 0x00008583 }, /* GL_SOURCE3_RGB_NV */
- { 29334, 0x00001202 }, /* GL_SPECULAR */
- { 29346, 0x00002402 }, /* GL_SPHERE_MAP */
- { 29360, 0x00001206 }, /* GL_SPOT_CUTOFF */
- { 29375, 0x00001204 }, /* GL_SPOT_DIRECTION */
- { 29393, 0x00001205 }, /* GL_SPOT_EXPONENT */
- { 29410, 0x00008588 }, /* GL_SRC0_ALPHA */
- { 29424, 0x00008580 }, /* GL_SRC0_RGB */
- { 29436, 0x00008589 }, /* GL_SRC1_ALPHA */
- { 29450, 0x00008581 }, /* GL_SRC1_RGB */
- { 29462, 0x0000858A }, /* GL_SRC2_ALPHA */
- { 29476, 0x00008582 }, /* GL_SRC2_RGB */
- { 29488, 0x00000302 }, /* GL_SRC_ALPHA */
- { 29501, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */
- { 29523, 0x00000300 }, /* GL_SRC_COLOR */
- { 29536, 0x00000503 }, /* GL_STACK_OVERFLOW */
- { 29554, 0x00000504 }, /* GL_STACK_UNDERFLOW */
- { 29573, 0x000088E6 }, /* GL_STATIC_COPY */
- { 29588, 0x000088E6 }, /* GL_STATIC_COPY_ARB */
- { 29607, 0x000088E4 }, /* GL_STATIC_DRAW */
- { 29622, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */
- { 29641, 0x000088E5 }, /* GL_STATIC_READ */
- { 29656, 0x000088E5 }, /* GL_STATIC_READ_ARB */
- { 29675, 0x00001802 }, /* GL_STENCIL */
- { 29686, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */
- { 29712, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */
- { 29733, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */
- { 29758, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */
- { 29779, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */
- { 29804, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
- { 29836, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */
- { 29872, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
- { 29904, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */
- { 29940, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */
- { 29960, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */
- { 29987, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */
- { 30013, 0x00000D57 }, /* GL_STENCIL_BITS */
- { 30029, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */
- { 30051, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */
- { 30074, 0x00000B94 }, /* GL_STENCIL_FAIL */
- { 30090, 0x00000B92 }, /* GL_STENCIL_FUNC */
- { 30106, 0x00001901 }, /* GL_STENCIL_INDEX */
- { 30123, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */
- { 30146, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */
- { 30168, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */
- { 30190, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */
- { 30212, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */
- { 30233, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */
- { 30260, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */
- { 30287, 0x00000B97 }, /* GL_STENCIL_REF */
- { 30302, 0x00000B90 }, /* GL_STENCIL_TEST */
- { 30318, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
- { 30347, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */
- { 30369, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */
- { 30390, 0x00000C33 }, /* GL_STEREO */
- { 30400, 0x000088E2 }, /* GL_STREAM_COPY */
- { 30415, 0x000088E2 }, /* GL_STREAM_COPY_ARB */
- { 30434, 0x000088E0 }, /* GL_STREAM_DRAW */
- { 30449, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */
- { 30468, 0x000088E1 }, /* GL_STREAM_READ */
- { 30483, 0x000088E1 }, /* GL_STREAM_READ_ARB */
- { 30502, 0x00000D50 }, /* GL_SUBPIXEL_BITS */
- { 30519, 0x000084E7 }, /* GL_SUBTRACT */
- { 30531, 0x000084E7 }, /* GL_SUBTRACT_ARB */
- { 30547, 0x00002001 }, /* GL_T */
- { 30552, 0x00002A2A }, /* GL_T2F_C3F_V3F */
- { 30567, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */
- { 30586, 0x00002A29 }, /* GL_T2F_C4UB_V3F */
- { 30602, 0x00002A2B }, /* GL_T2F_N3F_V3F */
- { 30617, 0x00002A27 }, /* GL_T2F_V3F */
- { 30628, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */
- { 30647, 0x00002A28 }, /* GL_T4F_V4F */
- { 30658, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */
- { 30681, 0x00001702 }, /* GL_TEXTURE */
- { 30692, 0x000084C0 }, /* GL_TEXTURE0 */
- { 30704, 0x000084C0 }, /* GL_TEXTURE0_ARB */
- { 30720, 0x000084C1 }, /* GL_TEXTURE1 */
- { 30732, 0x000084CA }, /* GL_TEXTURE10 */
- { 30745, 0x000084CA }, /* GL_TEXTURE10_ARB */
- { 30762, 0x000084CB }, /* GL_TEXTURE11 */
- { 30775, 0x000084CB }, /* GL_TEXTURE11_ARB */
- { 30792, 0x000084CC }, /* GL_TEXTURE12 */
- { 30805, 0x000084CC }, /* GL_TEXTURE12_ARB */
- { 30822, 0x000084CD }, /* GL_TEXTURE13 */
- { 30835, 0x000084CD }, /* GL_TEXTURE13_ARB */
- { 30852, 0x000084CE }, /* GL_TEXTURE14 */
- { 30865, 0x000084CE }, /* GL_TEXTURE14_ARB */
- { 30882, 0x000084CF }, /* GL_TEXTURE15 */
- { 30895, 0x000084CF }, /* GL_TEXTURE15_ARB */
- { 30912, 0x000084D0 }, /* GL_TEXTURE16 */
- { 30925, 0x000084D0 }, /* GL_TEXTURE16_ARB */
- { 30942, 0x000084D1 }, /* GL_TEXTURE17 */
- { 30955, 0x000084D1 }, /* GL_TEXTURE17_ARB */
- { 30972, 0x000084D2 }, /* GL_TEXTURE18 */
- { 30985, 0x000084D2 }, /* GL_TEXTURE18_ARB */
- { 31002, 0x000084D3 }, /* GL_TEXTURE19 */
- { 31015, 0x000084D3 }, /* GL_TEXTURE19_ARB */
- { 31032, 0x000084C1 }, /* GL_TEXTURE1_ARB */
- { 31048, 0x000084C2 }, /* GL_TEXTURE2 */
- { 31060, 0x000084D4 }, /* GL_TEXTURE20 */
- { 31073, 0x000084D4 }, /* GL_TEXTURE20_ARB */
- { 31090, 0x000084D5 }, /* GL_TEXTURE21 */
- { 31103, 0x000084D5 }, /* GL_TEXTURE21_ARB */
- { 31120, 0x000084D6 }, /* GL_TEXTURE22 */
- { 31133, 0x000084D6 }, /* GL_TEXTURE22_ARB */
- { 31150, 0x000084D7 }, /* GL_TEXTURE23 */
- { 31163, 0x000084D7 }, /* GL_TEXTURE23_ARB */
- { 31180, 0x000084D8 }, /* GL_TEXTURE24 */
- { 31193, 0x000084D8 }, /* GL_TEXTURE24_ARB */
- { 31210, 0x000084D9 }, /* GL_TEXTURE25 */
- { 31223, 0x000084D9 }, /* GL_TEXTURE25_ARB */
- { 31240, 0x000084DA }, /* GL_TEXTURE26 */
- { 31253, 0x000084DA }, /* GL_TEXTURE26_ARB */
- { 31270, 0x000084DB }, /* GL_TEXTURE27 */
- { 31283, 0x000084DB }, /* GL_TEXTURE27_ARB */
- { 31300, 0x000084DC }, /* GL_TEXTURE28 */
- { 31313, 0x000084DC }, /* GL_TEXTURE28_ARB */
- { 31330, 0x000084DD }, /* GL_TEXTURE29 */
- { 31343, 0x000084DD }, /* GL_TEXTURE29_ARB */
- { 31360, 0x000084C2 }, /* GL_TEXTURE2_ARB */
- { 31376, 0x000084C3 }, /* GL_TEXTURE3 */
- { 31388, 0x000084DE }, /* GL_TEXTURE30 */
- { 31401, 0x000084DE }, /* GL_TEXTURE30_ARB */
- { 31418, 0x000084DF }, /* GL_TEXTURE31 */
- { 31431, 0x000084DF }, /* GL_TEXTURE31_ARB */
- { 31448, 0x000084C3 }, /* GL_TEXTURE3_ARB */
- { 31464, 0x000084C4 }, /* GL_TEXTURE4 */
- { 31476, 0x000084C4 }, /* GL_TEXTURE4_ARB */
- { 31492, 0x000084C5 }, /* GL_TEXTURE5 */
- { 31504, 0x000084C5 }, /* GL_TEXTURE5_ARB */
- { 31520, 0x000084C6 }, /* GL_TEXTURE6 */
- { 31532, 0x000084C6 }, /* GL_TEXTURE6_ARB */
- { 31548, 0x000084C7 }, /* GL_TEXTURE7 */
- { 31560, 0x000084C7 }, /* GL_TEXTURE7_ARB */
- { 31576, 0x000084C8 }, /* GL_TEXTURE8 */
- { 31588, 0x000084C8 }, /* GL_TEXTURE8_ARB */
- { 31604, 0x000084C9 }, /* GL_TEXTURE9 */
- { 31616, 0x000084C9 }, /* GL_TEXTURE9_ARB */
- { 31632, 0x00000DE0 }, /* GL_TEXTURE_1D */
- { 31646, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */
- { 31670, 0x00000DE1 }, /* GL_TEXTURE_2D */
- { 31684, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */
- { 31708, 0x0000806F }, /* GL_TEXTURE_3D */
- { 31722, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */
- { 31744, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */
- { 31770, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */
- { 31792, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */
- { 31814, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
- { 31846, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */
- { 31868, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
- { 31900, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */
- { 31922, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */
- { 31950, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */
- { 31982, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
- { 32015, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */
- { 32047, 0x00040000 }, /* GL_TEXTURE_BIT */
- { 32062, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */
- { 32083, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */
- { 32108, 0x00001005 }, /* GL_TEXTURE_BORDER */
- { 32126, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */
- { 32150, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
- { 32181, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
- { 32211, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
- { 32241, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
- { 32276, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
- { 32307, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
- { 32345, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */
- { 32372, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
- { 32404, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
- { 32438, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */
- { 32462, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */
- { 32490, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */
- { 32514, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */
- { 32542, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
- { 32575, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */
- { 32599, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */
- { 32621, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */
- { 32643, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */
- { 32669, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */
- { 32703, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
- { 32736, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */
- { 32773, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */
- { 32801, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */
- { 32833, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */
- { 32856, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
- { 32894, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */
- { 32936, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */
- { 32967, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */
- { 32995, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
- { 33025, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */
- { 33053, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */
- { 33073, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */
- { 33097, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
- { 33128, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */
- { 33163, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
- { 33194, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */
- { 33229, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
- { 33260, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */
- { 33295, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
- { 33326, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */
- { 33361, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
- { 33392, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */
- { 33427, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
- { 33458, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */
- { 33493, 0x00008071 }, /* GL_TEXTURE_DEPTH */
- { 33510, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */
- { 33532, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */
- { 33558, 0x00002300 }, /* GL_TEXTURE_ENV */
- { 33573, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */
- { 33594, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */
- { 33614, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */
- { 33640, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */
- { 33660, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */
- { 33677, 0x00000C62 }, /* GL_TEXTURE_GEN_R */
- { 33694, 0x00000C60 }, /* GL_TEXTURE_GEN_S */
- { 33711, 0x00000C61 }, /* GL_TEXTURE_GEN_T */
- { 33728, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */
- { 33753, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */
- { 33775, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */
- { 33801, 0x00001001 }, /* GL_TEXTURE_HEIGHT */
- { 33819, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */
- { 33845, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */
- { 33871, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */
- { 33901, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */
- { 33928, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */
- { 33953, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */
- { 33973, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */
- { 33997, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
- { 34024, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
- { 34051, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
- { 34078, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */
- { 34104, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */
- { 34134, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */
- { 34156, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */
- { 34174, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
- { 34204, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
- { 34232, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
- { 34260, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
- { 34288, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */
- { 34309, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */
- { 34328, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */
- { 34350, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */
- { 34369, 0x00008066 }, /* GL_TEXTURE_PRIORITY */
- { 34389, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */
- { 34414, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */
- { 34438, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */
- { 34458, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */
- { 34482, 0x00008067 }, /* GL_TEXTURE_RESIDENT */
- { 34502, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */
- { 34525, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */
- { 34550, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
- { 34584, 0x00001000 }, /* GL_TEXTURE_WIDTH */
- { 34601, 0x00008072 }, /* GL_TEXTURE_WRAP_R */
- { 34619, 0x00002802 }, /* GL_TEXTURE_WRAP_S */
- { 34637, 0x00002803 }, /* GL_TEXTURE_WRAP_T */
- { 34655, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */
- { 34675, 0x00008648 }, /* GL_TRACK_MATRIX_NV */
- { 34694, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */
- { 34723, 0x00001000 }, /* GL_TRANSFORM_BIT */
- { 34740, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */
- { 34766, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */
- { 34796, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
- { 34828, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
- { 34858, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */
- { 34892, 0x0000862C }, /* GL_TRANSPOSE_NV */
- { 34908, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */
- { 34939, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */
- { 34974, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */
- { 35002, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */
- { 35034, 0x00000004 }, /* GL_TRIANGLES */
- { 35047, 0x00000006 }, /* GL_TRIANGLE_FAN */
- { 35063, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */
- { 35084, 0x00000005 }, /* GL_TRIANGLE_STRIP */
- { 35102, 0x00000001 }, /* GL_TRUE */
- { 35110, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */
- { 35130, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */
- { 35153, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */
- { 35173, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */
- { 35194, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */
- { 35216, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */
- { 35238, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */
- { 35258, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */
- { 35279, 0x00001401 }, /* GL_UNSIGNED_BYTE */
- { 35296, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */
- { 35323, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */
- { 35346, 0x00001405 }, /* GL_UNSIGNED_INT */
- { 35362, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */
- { 35389, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */
- { 35413, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */
- { 35444, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */
- { 35468, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */
- { 35496, 0x00001403 }, /* GL_UNSIGNED_SHORT */
- { 35514, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
- { 35544, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */
- { 35570, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
- { 35600, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */
- { 35626, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */
- { 35650, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */
- { 35678, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */
- { 35706, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */
- { 35733, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
- { 35765, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */
- { 35796, 0x00008CA2 }, /* GL_UPPER_LEFT */
- { 35810, 0x00002A20 }, /* GL_V2F */
- { 35817, 0x00002A21 }, /* GL_V3F */
- { 35824, 0x00008B83 }, /* GL_VALIDATE_STATUS */
- { 35843, 0x00001F00 }, /* GL_VENDOR */
- { 35853, 0x00001F02 }, /* GL_VERSION */
- { 35864, 0x00008074 }, /* GL_VERTEX_ARRAY */
- { 35880, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */
- { 35910, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
- { 35941, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */
- { 35976, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */
- { 36000, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */
- { 36021, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */
- { 36044, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */
- { 36065, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
- { 36092, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
- { 36120, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
- { 36148, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
- { 36176, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
- { 36204, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
- { 36232, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
- { 36260, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
- { 36287, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
- { 36314, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
- { 36341, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
- { 36368, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
- { 36395, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
- { 36422, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
- { 36449, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
- { 36476, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
- { 36503, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
- { 36541, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */
- { 36583, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
- { 36614, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
- { 36649, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
- { 36683, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
- { 36721, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
- { 36752, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
- { 36787, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
- { 36815, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
- { 36847, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
- { 36877, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
- { 36911, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
- { 36939, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
- { 36971, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
- { 36991, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
- { 37013, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
- { 37042, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
- { 37063, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
- { 37092, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
- { 37125, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
- { 37157, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
- { 37184, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
- { 37215, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
- { 37245, 0x00008B31 }, /* GL_VERTEX_SHADER */
- { 37262, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
- { 37283, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
- { 37310, 0x00000BA2 }, /* GL_VIEWPORT */
- { 37322, 0x00000800 }, /* GL_VIEWPORT_BIT */
- { 37338, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
- { 37358, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
- { 37389, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
- { 37424, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
- { 37452, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
- { 37477, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
- { 37504, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
- { 37529, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
- { 37553, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
- { 37572, 0x000088B9 }, /* GL_WRITE_ONLY */
- { 37586, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
- { 37604, 0x00001506 }, /* GL_XOR */
- { 37611, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
- { 37630, 0x00008757 }, /* GL_YCBCR_MESA */
- { 37644, 0x00000000 }, /* GL_ZERO */
- { 37652, 0x00000D16 }, /* GL_ZOOM_X */
- { 37662, 0x00000D17 }, /* GL_ZOOM_Y */
+ { 877, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING */
+ { 901, 0x00008894 }, /* GL_ARRAY_BUFFER_BINDING_ARB */
+ { 929, 0x00008B85 }, /* GL_ATTACHED_SHADERS */
+ { 949, 0x00008645 }, /* GL_ATTRIB_ARRAY_POINTER_NV */
+ { 976, 0x00008623 }, /* GL_ATTRIB_ARRAY_SIZE_NV */
+ { 1000, 0x00008624 }, /* GL_ATTRIB_ARRAY_STRIDE_NV */
+ { 1026, 0x00008625 }, /* GL_ATTRIB_ARRAY_TYPE_NV */
+ { 1050, 0x00000BB0 }, /* GL_ATTRIB_STACK_DEPTH */
+ { 1072, 0x00000D80 }, /* GL_AUTO_NORMAL */
+ { 1087, 0x00000409 }, /* GL_AUX0 */
+ { 1095, 0x0000040A }, /* GL_AUX1 */
+ { 1103, 0x0000040B }, /* GL_AUX2 */
+ { 1111, 0x0000040C }, /* GL_AUX3 */
+ { 1119, 0x00000C00 }, /* GL_AUX_BUFFERS */
+ { 1134, 0x00000405 }, /* GL_BACK */
+ { 1142, 0x00000402 }, /* GL_BACK_LEFT */
+ { 1155, 0x00000403 }, /* GL_BACK_RIGHT */
+ { 1169, 0x000080E0 }, /* GL_BGR */
+ { 1176, 0x000080E1 }, /* GL_BGRA */
+ { 1184, 0x00001A00 }, /* GL_BITMAP */
+ { 1194, 0x00000704 }, /* GL_BITMAP_TOKEN */
+ { 1210, 0x00000BE2 }, /* GL_BLEND */
+ { 1219, 0x00008005 }, /* GL_BLEND_COLOR */
+ { 1234, 0x00008005 }, /* GL_BLEND_COLOR_EXT */
+ { 1253, 0x00000BE0 }, /* GL_BLEND_DST */
+ { 1266, 0x000080CA }, /* GL_BLEND_DST_ALPHA */
+ { 1285, 0x000080C8 }, /* GL_BLEND_DST_RGB */
+ { 1302, 0x00008009 }, /* GL_BLEND_EQUATION */
+ { 1320, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA */
+ { 1344, 0x0000883D }, /* GL_BLEND_EQUATION_ALPHA_EXT */
+ { 1372, 0x00008009 }, /* GL_BLEND_EQUATION_EXT */
+ { 1394, 0x00008009 }, /* GL_BLEND_EQUATION_RGB_EXT */
+ { 1420, 0x00000BE1 }, /* GL_BLEND_SRC */
+ { 1433, 0x000080CB }, /* GL_BLEND_SRC_ALPHA */
+ { 1452, 0x000080C9 }, /* GL_BLEND_SRC_RGB */
+ { 1469, 0x00001905 }, /* GL_BLUE */
+ { 1477, 0x00000D1B }, /* GL_BLUE_BIAS */
+ { 1490, 0x00000D54 }, /* GL_BLUE_BITS */
+ { 1503, 0x00000D1A }, /* GL_BLUE_SCALE */
+ { 1517, 0x00008B56 }, /* GL_BOOL */
+ { 1525, 0x00008B56 }, /* GL_BOOL_ARB */
+ { 1537, 0x00008B57 }, /* GL_BOOL_VEC2 */
+ { 1550, 0x00008B57 }, /* GL_BOOL_VEC2_ARB */
+ { 1567, 0x00008B58 }, /* GL_BOOL_VEC3 */
+ { 1580, 0x00008B58 }, /* GL_BOOL_VEC3_ARB */
+ { 1597, 0x00008B59 }, /* GL_BOOL_VEC4 */
+ { 1610, 0x00008B59 }, /* GL_BOOL_VEC4_ARB */
+ { 1627, 0x000088BB }, /* GL_BUFFER_ACCESS */
+ { 1644, 0x000088BB }, /* GL_BUFFER_ACCESS_ARB */
+ { 1665, 0x000088BC }, /* GL_BUFFER_MAPPED */
+ { 1682, 0x000088BC }, /* GL_BUFFER_MAPPED_ARB */
+ { 1703, 0x000088BD }, /* GL_BUFFER_MAP_POINTER */
+ { 1725, 0x000088BD }, /* GL_BUFFER_MAP_POINTER_ARB */
+ { 1751, 0x00008764 }, /* GL_BUFFER_SIZE */
+ { 1766, 0x00008764 }, /* GL_BUFFER_SIZE_ARB */
+ { 1785, 0x00008765 }, /* GL_BUFFER_USAGE */
+ { 1801, 0x00008765 }, /* GL_BUFFER_USAGE_ARB */
+ { 1821, 0x00001400 }, /* GL_BYTE */
+ { 1829, 0x00002A24 }, /* GL_C3F_V3F */
+ { 1840, 0x00002A26 }, /* GL_C4F_N3F_V3F */
+ { 1855, 0x00002A22 }, /* GL_C4UB_V2F */
+ { 1867, 0x00002A23 }, /* GL_C4UB_V3F */
+ { 1879, 0x00000901 }, /* GL_CCW */
+ { 1886, 0x00002900 }, /* GL_CLAMP */
+ { 1895, 0x0000812D }, /* GL_CLAMP_TO_BORDER */
+ { 1914, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */
+ { 1937, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */
+ { 1961, 0x0000812F }, /* GL_CLAMP_TO_EDGE */
+ { 1978, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */
+ { 2000, 0x00001500 }, /* GL_CLEAR */
+ { 2009, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */
+ { 2034, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */
+ { 2063, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */
+ { 2089, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
+ { 2118, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */
+ { 2144, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */
+ { 2171, 0x00003000 }, /* GL_CLIP_PLANE0 */
+ { 2186, 0x00003001 }, /* GL_CLIP_PLANE1 */
+ { 2201, 0x00003002 }, /* GL_CLIP_PLANE2 */
+ { 2216, 0x00003003 }, /* GL_CLIP_PLANE3 */
+ { 2231, 0x00003004 }, /* GL_CLIP_PLANE4 */
+ { 2246, 0x00003005 }, /* GL_CLIP_PLANE5 */
+ { 2261, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
+ { 2294, 0x00000A00 }, /* GL_COEFF */
+ { 2303, 0x00001800 }, /* GL_COLOR */
+ { 2312, 0x00008076 }, /* GL_COLOR_ARRAY */
+ { 2327, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */
+ { 2357, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */
+ { 2391, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */
+ { 2414, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */
+ { 2434, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */
+ { 2456, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */
+ { 2476, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */
+ { 2501, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */
+ { 2527, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */
+ { 2553, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */
+ { 2579, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */
+ { 2605, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */
+ { 2631, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */
+ { 2657, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */
+ { 2682, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */
+ { 2707, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */
+ { 2732, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */
+ { 2757, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */
+ { 2782, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */
+ { 2807, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */
+ { 2832, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */
+ { 2857, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */
+ { 2882, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */
+ { 2902, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */
+ { 2923, 0x00001900 }, /* GL_COLOR_INDEX */
+ { 2938, 0x00001603 }, /* GL_COLOR_INDEXES */
+ { 2955, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */
+ { 2973, 0x00000B57 }, /* GL_COLOR_MATERIAL */
+ { 2991, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */
+ { 3014, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */
+ { 3042, 0x000080B1 }, /* GL_COLOR_MATRIX */
+ { 3058, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */
+ { 3078, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */
+ { 3106, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */
+ { 3138, 0x00008458 }, /* GL_COLOR_SUM */
+ { 3151, 0x00008458 }, /* GL_COLOR_SUM_ARB */
+ { 3168, 0x000080D0 }, /* GL_COLOR_TABLE */
+ { 3183, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */
+ { 3209, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */
+ { 3239, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */
+ { 3269, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */
+ { 3289, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */
+ { 3313, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */
+ { 3338, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */
+ { 3367, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */
+ { 3396, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */
+ { 3418, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */
+ { 3444, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */
+ { 3470, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */
+ { 3496, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */
+ { 3526, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */
+ { 3556, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */
+ { 3586, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */
+ { 3620, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */
+ { 3654, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
+ { 3684, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */
+ { 3718, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */
+ { 3752, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */
+ { 3776, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */
+ { 3804, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */
+ { 3832, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */
+ { 3853, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */
+ { 3878, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */
+ { 3899, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */
+ { 3924, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */
+ { 3949, 0x00000C23 }, /* GL_COLOR_WRITEMASK */
+ { 3968, 0x00008570 }, /* GL_COMBINE */
+ { 3979, 0x00008503 }, /* GL_COMBINE4 */
+ { 3991, 0x00008572 }, /* GL_COMBINE_ALPHA */
+ { 4008, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */
+ { 4029, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */
+ { 4050, 0x00008570 }, /* GL_COMBINE_ARB */
+ { 4065, 0x00008570 }, /* GL_COMBINE_EXT */
+ { 4080, 0x00008571 }, /* GL_COMBINE_RGB */
+ { 4095, 0x00008571 }, /* GL_COMBINE_RGB_ARB */
+ { 4114, 0x00008571 }, /* GL_COMBINE_RGB_EXT */
+ { 4133, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */
+ { 4169, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */
+ { 4193, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */
+ { 4221, 0x00001300 }, /* GL_COMPILE */
+ { 4232, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */
+ { 4255, 0x00008B81 }, /* GL_COMPILE_STATUS */
+ { 4273, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */
+ { 4293, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */
+ { 4317, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */
+ { 4341, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */
+ { 4369, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */
+ { 4393, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */
+ { 4423, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */
+ { 4457, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */
+ { 4485, 0x000084ED }, /* GL_COMPRESSED_RGB */
+ { 4503, 0x000084EE }, /* GL_COMPRESSED_RGBA */
+ { 4522, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */
+ { 4545, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
+ { 4574, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
+ { 4607, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
+ { 4640, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
+ { 4673, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */
+ { 4695, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */
+ { 4723, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
+ { 4755, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */
+ { 4785, 0x00008576 }, /* GL_CONSTANT */
+ { 4797, 0x00008003 }, /* GL_CONSTANT_ALPHA */
+ { 4815, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */
+ { 4837, 0x00008576 }, /* GL_CONSTANT_ARB */
+ { 4853, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */
+ { 4877, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */
+ { 4899, 0x00008001 }, /* GL_CONSTANT_COLOR */
+ { 4917, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */
+ { 4939, 0x00008576 }, /* GL_CONSTANT_EXT */
+ { 4955, 0x00008010 }, /* GL_CONVOLUTION_1D */
+ { 4973, 0x00008011 }, /* GL_CONVOLUTION_2D */
+ { 4991, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */
+ { 5019, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */
+ { 5050, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */
+ { 5077, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */
+ { 5108, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */
+ { 5135, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */
+ { 5166, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */
+ { 5194, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */
+ { 5226, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */
+ { 5248, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */
+ { 5274, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */
+ { 5296, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */
+ { 5322, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */
+ { 5343, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */
+ { 5368, 0x00008862 }, /* GL_COORD_REPLACE */
+ { 5385, 0x00008862 }, /* GL_COORD_REPLACE_ARB */
+ { 5406, 0x00008862 }, /* GL_COORD_REPLACE_NV */
+ { 5426, 0x00001503 }, /* GL_COPY */
+ { 5434, 0x0000150C }, /* GL_COPY_INVERTED */
+ { 5451, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */
+ { 5471, 0x00000B44 }, /* GL_CULL_FACE */
+ { 5484, 0x00000B45 }, /* GL_CULL_FACE_MODE */
+ { 5502, 0x000081AA }, /* GL_CULL_VERTEX_EXT */
+ { 5521, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
+ { 5553, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
+ { 5588, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */
+ { 5609, 0x00000001 }, /* GL_CURRENT_BIT */
+ { 5624, 0x00000B00 }, /* GL_CURRENT_COLOR */
+ { 5641, 0x00008453 }, /* GL_CURRENT_FOG_COORD */
+ { 5662, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */
+ { 5688, 0x00000B01 }, /* GL_CURRENT_INDEX */
+ { 5705, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */
+ { 5727, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */
+ { 5755, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */
+ { 5776, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
+ { 5810, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */
+ { 5843, 0x00000B02 }, /* GL_CURRENT_NORMAL */
+ { 5861, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */
+ { 5891, 0x00008B8D }, /* GL_CURRENT_PROGRAM */
+ { 5910, 0x00008865 }, /* GL_CURRENT_QUERY */
+ { 5927, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */
+ { 5948, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */
+ { 5972, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */
+ { 5999, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */
+ { 6023, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */
+ { 6050, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */
+ { 6083, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
+ { 6116, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */
+ { 6143, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */
+ { 6169, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */
+ { 6194, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */
+ { 6223, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */
+ { 6245, 0x00000900 }, /* GL_CW */
+ { 6251, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */
+ { 6272, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */
+ { 6293, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */
+ { 6313, 0x00002101 }, /* GL_DECAL */
+ { 6322, 0x00001E03 }, /* GL_DECR */
+ { 6330, 0x00008508 }, /* GL_DECR_WRAP */
+ { 6343, 0x00008508 }, /* GL_DECR_WRAP_EXT */
+ { 6360, 0x00008B80 }, /* GL_DELETE_STATUS */
+ { 6377, 0x00001801 }, /* GL_DEPTH */
+ { 6386, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */
+ { 6410, 0x00000D1F }, /* GL_DEPTH_BIAS */
+ { 6424, 0x00000D56 }, /* GL_DEPTH_BITS */
+ { 6438, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */
+ { 6458, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */
+ { 6483, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */
+ { 6503, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */
+ { 6521, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */
+ { 6542, 0x00001902 }, /* GL_DEPTH_COMPONENT */
+ { 6561, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */
+ { 6582, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */
+ { 6607, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */
+ { 6633, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */
+ { 6654, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */
+ { 6679, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */
+ { 6705, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */
+ { 6726, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */
+ { 6751, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */
+ { 6777, 0x00000B74 }, /* GL_DEPTH_FUNC */
+ { 6791, 0x00000B70 }, /* GL_DEPTH_RANGE */
+ { 6806, 0x00000D1E }, /* GL_DEPTH_SCALE */
+ { 6821, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */
+ { 6841, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
+ { 6869, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
+ { 6897, 0x00000B71 }, /* GL_DEPTH_TEST */
+ { 6911, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */
+ { 6933, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */
+ { 6959, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */
+ { 6978, 0x00001201 }, /* GL_DIFFUSE */
+ { 6989, 0x00000BD0 }, /* GL_DITHER */
+ { 6999, 0x00000A02 }, /* GL_DOMAIN */
+ { 7009, 0x00001100 }, /* GL_DONT_CARE */
+ { 7022, 0x000086AE }, /* GL_DOT3_RGB */
+ { 7034, 0x000086AF }, /* GL_DOT3_RGBA */
+ { 7047, 0x000086AF }, /* GL_DOT3_RGBA_ARB */
+ { 7064, 0x00008741 }, /* GL_DOT3_RGBA_EXT */
+ { 7081, 0x000086AE }, /* GL_DOT3_RGB_ARB */
+ { 7097, 0x00008740 }, /* GL_DOT3_RGB_EXT */
+ { 7113, 0x0000140A }, /* GL_DOUBLE */
+ { 7123, 0x00000C32 }, /* GL_DOUBLEBUFFER */
+ { 7139, 0x00000C01 }, /* GL_DRAW_BUFFER */
+ { 7154, 0x00008825 }, /* GL_DRAW_BUFFER0 */
+ { 7170, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */
+ { 7190, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */
+ { 7210, 0x00008826 }, /* GL_DRAW_BUFFER1 */
+ { 7226, 0x0000882F }, /* GL_DRAW_BUFFER10 */
+ { 7243, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */
+ { 7264, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */
+ { 7285, 0x00008830 }, /* GL_DRAW_BUFFER11 */
+ { 7302, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */
+ { 7323, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */
+ { 7344, 0x00008831 }, /* GL_DRAW_BUFFER12 */
+ { 7361, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */
+ { 7382, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */
+ { 7403, 0x00008832 }, /* GL_DRAW_BUFFER13 */
+ { 7420, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */
+ { 7441, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */
+ { 7462, 0x00008833 }, /* GL_DRAW_BUFFER14 */
+ { 7479, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */
+ { 7500, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */
+ { 7521, 0x00008834 }, /* GL_DRAW_BUFFER15 */
+ { 7538, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */
+ { 7559, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */
+ { 7580, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */
+ { 7600, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */
+ { 7620, 0x00008827 }, /* GL_DRAW_BUFFER2 */
+ { 7636, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */
+ { 7656, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */
+ { 7676, 0x00008828 }, /* GL_DRAW_BUFFER3 */
+ { 7692, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */
+ { 7712, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */
+ { 7732, 0x00008829 }, /* GL_DRAW_BUFFER4 */
+ { 7748, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */
+ { 7768, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */
+ { 7788, 0x0000882A }, /* GL_DRAW_BUFFER5 */
+ { 7804, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */
+ { 7824, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */
+ { 7844, 0x0000882B }, /* GL_DRAW_BUFFER6 */
+ { 7860, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */
+ { 7880, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */
+ { 7900, 0x0000882C }, /* GL_DRAW_BUFFER7 */
+ { 7916, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */
+ { 7936, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */
+ { 7956, 0x0000882D }, /* GL_DRAW_BUFFER8 */
+ { 7972, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */
+ { 7992, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */
+ { 8012, 0x0000882E }, /* GL_DRAW_BUFFER9 */
+ { 8028, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */
+ { 8048, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */
+ { 8068, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
+ { 8100, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */
+ { 8124, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */
+ { 8144, 0x00000304 }, /* GL_DST_ALPHA */
+ { 8157, 0x00000306 }, /* GL_DST_COLOR */
+ { 8170, 0x000088EA }, /* GL_DYNAMIC_COPY */
+ { 8186, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */
+ { 8206, 0x000088E8 }, /* GL_DYNAMIC_DRAW */
+ { 8222, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */
+ { 8242, 0x000088E9 }, /* GL_DYNAMIC_READ */
+ { 8258, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */
+ { 8278, 0x00000B43 }, /* GL_EDGE_FLAG */
+ { 8291, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */
+ { 8310, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
+ { 8344, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */
+ { 8382, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */
+ { 8409, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */
+ { 8435, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */
+ { 8459, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
+ { 8491, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */
+ { 8527, 0x00001600 }, /* GL_EMISSION */
+ { 8539, 0x00002000 }, /* GL_ENABLE_BIT */
+ { 8553, 0x00000202 }, /* GL_EQUAL */
+ { 8562, 0x00001509 }, /* GL_EQUIV */
+ { 8571, 0x00010000 }, /* GL_EVAL_BIT */
+ { 8583, 0x00000800 }, /* GL_EXP */
+ { 8590, 0x00000801 }, /* GL_EXP2 */
+ { 8598, 0x00001F03 }, /* GL_EXTENSIONS */
+ { 8612, 0x00002400 }, /* GL_EYE_LINEAR */
+ { 8626, 0x00002502 }, /* GL_EYE_PLANE */
+ { 8639, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */
+ { 8664, 0x0000855B }, /* GL_EYE_RADIAL_NV */
+ { 8681, 0x00000000 }, /* GL_FALSE */
+ { 8690, 0x00001101 }, /* GL_FASTEST */
+ { 8701, 0x00001C01 }, /* GL_FEEDBACK */
+ { 8713, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */
+ { 8740, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */
+ { 8764, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */
+ { 8788, 0x00001B02 }, /* GL_FILL */
+ { 8796, 0x00001D00 }, /* GL_FLAT */
+ { 8804, 0x00001406 }, /* GL_FLOAT */
+ { 8813, 0x00008B5A }, /* GL_FLOAT_MAT2 */
+ { 8827, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */
+ { 8845, 0x00008B5B }, /* GL_FLOAT_MAT3 */
+ { 8859, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */
+ { 8877, 0x00008B5C }, /* GL_FLOAT_MAT4 */
+ { 8891, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */
+ { 8909, 0x00008B50 }, /* GL_FLOAT_VEC2 */
+ { 8923, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */
+ { 8941, 0x00008B51 }, /* GL_FLOAT_VEC3 */
+ { 8955, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */
+ { 8973, 0x00008B52 }, /* GL_FLOAT_VEC4 */
+ { 8987, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */
+ { 9005, 0x00000B60 }, /* GL_FOG */
+ { 9012, 0x00000080 }, /* GL_FOG_BIT */
+ { 9023, 0x00000B66 }, /* GL_FOG_COLOR */
+ { 9036, 0x00008451 }, /* GL_FOG_COORD */
+ { 9049, 0x00008451 }, /* GL_FOG_COORDINATE */
+ { 9067, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */
+ { 9091, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
+ { 9130, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */
+ { 9173, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */
+ { 9205, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
+ { 9236, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */
+ { 9265, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */
+ { 9290, 0x00008457 }, /* GL_FOG_COORD_ARRAY */
+ { 9309, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */
+ { 9343, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */
+ { 9370, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */
+ { 9396, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */
+ { 9420, 0x00008450 }, /* GL_FOG_COORD_SRC */
+ { 9437, 0x00000B62 }, /* GL_FOG_DENSITY */
+ { 9452, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */
+ { 9476, 0x00000B64 }, /* GL_FOG_END */
+ { 9487, 0x00000C54 }, /* GL_FOG_HINT */
+ { 9499, 0x00000B61 }, /* GL_FOG_INDEX */
+ { 9512, 0x00000B65 }, /* GL_FOG_MODE */
+ { 9524, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */
+ { 9543, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */
+ { 9568, 0x00000B63 }, /* GL_FOG_START */
+ { 9581, 0x00008452 }, /* GL_FRAGMENT_DEPTH */
+ { 9599, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */
+ { 9623, 0x00008B30 }, /* GL_FRAGMENT_SHADER */
+ { 9642, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */
+ { 9665, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
+ { 9700, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
+ { 9742, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
+ { 9784, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
+ { 9833, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
+ { 9885, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
+ { 9929, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
+ { 9973, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */
+ { 10000, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */
+ { 10028, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */
+ { 10047, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
+ { 10088, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
+ { 10129, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
+ { 10171, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
+ { 10222, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
+ { 10260, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
+ { 10309, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
+ { 10351, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
+ { 10383, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
+ { 10414, 0x00000404 }, /* GL_FRONT */
+ { 10423, 0x00000408 }, /* GL_FRONT_AND_BACK */
+ { 10441, 0x00000B46 }, /* GL_FRONT_FACE */
+ { 10455, 0x00000400 }, /* GL_FRONT_LEFT */
+ { 10469, 0x00000401 }, /* GL_FRONT_RIGHT */
+ { 10484, 0x00008006 }, /* GL_FUNC_ADD */
+ { 10496, 0x00008006 }, /* GL_FUNC_ADD_EXT */
+ { 10512, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */
+ { 10537, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */
+ { 10566, 0x0000800A }, /* GL_FUNC_SUBTRACT */
+ { 10583, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */
+ { 10604, 0x00008191 }, /* GL_GENERATE_MIPMAP */
+ { 10623, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */
+ { 10647, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */
+ { 10676, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */
+ { 10700, 0x00000206 }, /* GL_GEQUAL */
+ { 10710, 0x00008009 }, /* GL_GL_BLEND_EQUATION_RGB */
+ { 10735, 0x00008C4A }, /* GL_GL_COMPRESSED_SLUMINANCE */
+ { 10763, 0x00008C4B }, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */
+ { 10797, 0x00008C48 }, /* GL_GL_COMPRESSED_SRGB */
+ { 10819, 0x00008C49 }, /* GL_GL_COMPRESSED_SRGB_ALPHA */
+ { 10847, 0x0000845F }, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */
+ { 10884, 0x00008B65 }, /* GL_GL_FLOAT_MAT2x3 */
+ { 10903, 0x00008B66 }, /* GL_GL_FLOAT_MAT2x4 */
+ { 10922, 0x00008B67 }, /* GL_GL_FLOAT_MAT3x2 */
+ { 10941, 0x00008B68 }, /* GL_GL_FLOAT_MAT3x4 */
+ { 10960, 0x00008B69 }, /* GL_GL_FLOAT_MAT4x2 */
+ { 10979, 0x00008B6A }, /* GL_GL_FLOAT_MAT4x3 */
+ { 10998, 0x000088EB }, /* GL_GL_PIXEL_PACK_BUFFER */
+ { 11022, 0x000088ED }, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */
+ { 11054, 0x000088EC }, /* GL_GL_PIXEL_UNPACK_BUFFER */
+ { 11080, 0x000088EF }, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */
+ { 11114, 0x00008C46 }, /* GL_GL_SLUMINANCE */
+ { 11131, 0x00008C47 }, /* GL_GL_SLUMINANCE8 */
+ { 11149, 0x00008C45 }, /* GL_GL_SLUMINANCE8_ALPHA8 */
+ { 11174, 0x00008C44 }, /* GL_GL_SLUMINANCE_ALPHA */
+ { 11197, 0x00008C40 }, /* GL_GL_SRGB */
+ { 11208, 0x00008C41 }, /* GL_GL_SRGB8 */
+ { 11220, 0x00008C43 }, /* GL_GL_SRGB8_ALPHA8 */
+ { 11239, 0x00008C42 }, /* GL_GL_SRGB_ALPHA */
+ { 11256, 0x00000204 }, /* GL_GREATER */
+ { 11267, 0x00001904 }, /* GL_GREEN */
+ { 11276, 0x00000D19 }, /* GL_GREEN_BIAS */
+ { 11290, 0x00000D53 }, /* GL_GREEN_BITS */
+ { 11304, 0x00000D18 }, /* GL_GREEN_SCALE */
+ { 11319, 0x00008000 }, /* GL_HINT_BIT */
+ { 11331, 0x00008024 }, /* GL_HISTOGRAM */
+ { 11344, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */
+ { 11368, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */
+ { 11396, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */
+ { 11419, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */
+ { 11446, 0x00008024 }, /* GL_HISTOGRAM_EXT */
+ { 11463, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */
+ { 11483, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */
+ { 11507, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */
+ { 11531, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */
+ { 11559, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */
+ { 11587, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */
+ { 11619, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */
+ { 11641, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */
+ { 11667, 0x0000802D }, /* GL_HISTOGRAM_SINK */
+ { 11685, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */
+ { 11707, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */
+ { 11726, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */
+ { 11749, 0x0000862A }, /* GL_IDENTITY_NV */
+ { 11764, 0x00008150 }, /* GL_IGNORE_BORDER_HP */
+ { 11784, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
+ { 11824, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
+ { 11862, 0x00001E02 }, /* GL_INCR */
+ { 11870, 0x00008507 }, /* GL_INCR_WRAP */
+ { 11883, 0x00008507 }, /* GL_INCR_WRAP_EXT */
+ { 11900, 0x00008077 }, /* GL_INDEX_ARRAY */
+ { 11915, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */
+ { 11945, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */
+ { 11979, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */
+ { 12002, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */
+ { 12024, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */
+ { 12044, 0x00000D51 }, /* GL_INDEX_BITS */
+ { 12058, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */
+ { 12079, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */
+ { 12097, 0x00000C30 }, /* GL_INDEX_MODE */
+ { 12111, 0x00000D13 }, /* GL_INDEX_OFFSET */
+ { 12127, 0x00000D12 }, /* GL_INDEX_SHIFT */
+ { 12142, 0x00000C21 }, /* GL_INDEX_WRITEMASK */
+ { 12161, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */
+ { 12180, 0x00001404 }, /* GL_INT */
+ { 12187, 0x00008049 }, /* GL_INTENSITY */
+ { 12200, 0x0000804C }, /* GL_INTENSITY12 */
+ { 12215, 0x0000804C }, /* GL_INTENSITY12_EXT */
+ { 12234, 0x0000804D }, /* GL_INTENSITY16 */
+ { 12249, 0x0000804D }, /* GL_INTENSITY16_EXT */
+ { 12268, 0x0000804A }, /* GL_INTENSITY4 */
+ { 12282, 0x0000804A }, /* GL_INTENSITY4_EXT */
+ { 12300, 0x0000804B }, /* GL_INTENSITY8 */
+ { 12314, 0x0000804B }, /* GL_INTENSITY8_EXT */
+ { 12332, 0x00008049 }, /* GL_INTENSITY_EXT */
+ { 12349, 0x00008575 }, /* GL_INTERPOLATE */
+ { 12364, 0x00008575 }, /* GL_INTERPOLATE_ARB */
+ { 12383, 0x00008575 }, /* GL_INTERPOLATE_EXT */
+ { 12402, 0x00008B53 }, /* GL_INT_VEC2 */
+ { 12414, 0x00008B53 }, /* GL_INT_VEC2_ARB */
+ { 12430, 0x00008B54 }, /* GL_INT_VEC3 */
+ { 12442, 0x00008B54 }, /* GL_INT_VEC3_ARB */
+ { 12458, 0x00008B55 }, /* GL_INT_VEC4 */
+ { 12470, 0x00008B55 }, /* GL_INT_VEC4_ARB */
+ { 12486, 0x00000500 }, /* GL_INVALID_ENUM */
+ { 12502, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
+ { 12539, 0x00000502 }, /* GL_INVALID_OPERATION */
+ { 12560, 0x00000501 }, /* GL_INVALID_VALUE */
+ { 12577, 0x0000862B }, /* GL_INVERSE_NV */
+ { 12591, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */
+ { 12615, 0x0000150A }, /* GL_INVERT */
+ { 12625, 0x00001E00 }, /* GL_KEEP */
+ { 12633, 0x00000406 }, /* GL_LEFT */
+ { 12641, 0x00000203 }, /* GL_LEQUAL */
+ { 12651, 0x00000201 }, /* GL_LESS */
+ { 12659, 0x00004000 }, /* GL_LIGHT0 */
+ { 12669, 0x00004001 }, /* GL_LIGHT1 */
+ { 12679, 0x00004002 }, /* GL_LIGHT2 */
+ { 12689, 0x00004003 }, /* GL_LIGHT3 */
+ { 12699, 0x00004004 }, /* GL_LIGHT4 */
+ { 12709, 0x00004005 }, /* GL_LIGHT5 */
+ { 12719, 0x00004006 }, /* GL_LIGHT6 */
+ { 12729, 0x00004007 }, /* GL_LIGHT7 */
+ { 12739, 0x00000B50 }, /* GL_LIGHTING */
+ { 12751, 0x00000040 }, /* GL_LIGHTING_BIT */
+ { 12767, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */
+ { 12790, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */
+ { 12819, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */
+ { 12852, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
+ { 12880, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */
+ { 12904, 0x00001B01 }, /* GL_LINE */
+ { 12912, 0x00002601 }, /* GL_LINEAR */
+ { 12922, 0x00001208 }, /* GL_LINEAR_ATTENUATION */
+ { 12944, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
+ { 12974, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
+ { 13005, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */
+ { 13029, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */
+ { 13054, 0x00000001 }, /* GL_LINES */
+ { 13063, 0x00000004 }, /* GL_LINE_BIT */
+ { 13075, 0x00000002 }, /* GL_LINE_LOOP */
+ { 13088, 0x00000707 }, /* GL_LINE_RESET_TOKEN */
+ { 13108, 0x00000B20 }, /* GL_LINE_SMOOTH */
+ { 13123, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */
+ { 13143, 0x00000B24 }, /* GL_LINE_STIPPLE */
+ { 13159, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */
+ { 13183, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */
+ { 13206, 0x00000003 }, /* GL_LINE_STRIP */
+ { 13220, 0x00000702 }, /* GL_LINE_TOKEN */
+ { 13234, 0x00000B21 }, /* GL_LINE_WIDTH */
+ { 13248, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */
+ { 13274, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */
+ { 13294, 0x00008B82 }, /* GL_LINK_STATUS */
+ { 13309, 0x00000B32 }, /* GL_LIST_BASE */
+ { 13322, 0x00020000 }, /* GL_LIST_BIT */
+ { 13334, 0x00000B33 }, /* GL_LIST_INDEX */
+ { 13348, 0x00000B30 }, /* GL_LIST_MODE */
+ { 13361, 0x00000101 }, /* GL_LOAD */
+ { 13369, 0x00000BF1 }, /* GL_LOGIC_OP */
+ { 13381, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */
+ { 13398, 0x00008CA1 }, /* GL_LOWER_LEFT */
+ { 13412, 0x00001909 }, /* GL_LUMINANCE */
+ { 13425, 0x00008041 }, /* GL_LUMINANCE12 */
+ { 13440, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */
+ { 13463, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */
+ { 13490, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */
+ { 13512, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */
+ { 13538, 0x00008041 }, /* GL_LUMINANCE12_EXT */
+ { 13557, 0x00008042 }, /* GL_LUMINANCE16 */
+ { 13572, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */
+ { 13595, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */
+ { 13622, 0x00008042 }, /* GL_LUMINANCE16_EXT */
+ { 13641, 0x0000803F }, /* GL_LUMINANCE4 */
+ { 13655, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */
+ { 13676, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */
+ { 13701, 0x0000803F }, /* GL_LUMINANCE4_EXT */
+ { 13719, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */
+ { 13740, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */
+ { 13765, 0x00008040 }, /* GL_LUMINANCE8 */
+ { 13779, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */
+ { 13800, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */
+ { 13825, 0x00008040 }, /* GL_LUMINANCE8_EXT */
+ { 13843, 0x0000190A }, /* GL_LUMINANCE_ALPHA */
+ { 13862, 0x00000D90 }, /* GL_MAP1_COLOR_4 */
+ { 13878, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */
+ { 13898, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */
+ { 13920, 0x00000D91 }, /* GL_MAP1_INDEX */
+ { 13934, 0x00000D92 }, /* GL_MAP1_NORMAL */
+ { 13949, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */
+ { 13973, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */
+ { 13997, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */
+ { 14021, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */
+ { 14045, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */
+ { 14062, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */
+ { 14079, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
+ { 14107, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
+ { 14136, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
+ { 14165, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
+ { 14194, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
+ { 14223, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
+ { 14252, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
+ { 14281, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
+ { 14309, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
+ { 14337, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
+ { 14365, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
+ { 14393, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
+ { 14421, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
+ { 14449, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
+ { 14477, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
+ { 14505, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
+ { 14533, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */
+ { 14549, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */
+ { 14569, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */
+ { 14591, 0x00000DB1 }, /* GL_MAP2_INDEX */
+ { 14605, 0x00000DB2 }, /* GL_MAP2_NORMAL */
+ { 14620, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */
+ { 14644, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */
+ { 14668, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */
+ { 14692, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */
+ { 14716, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */
+ { 14733, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */
+ { 14750, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
+ { 14778, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
+ { 14807, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
+ { 14836, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
+ { 14865, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
+ { 14894, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
+ { 14923, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
+ { 14952, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
+ { 14980, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
+ { 15008, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
+ { 15036, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
+ { 15064, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
+ { 15092, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
+ { 15120, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */
+ { 15148, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
+ { 15176, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
+ { 15204, 0x00000D10 }, /* GL_MAP_COLOR */
+ { 15217, 0x00000D11 }, /* GL_MAP_STENCIL */
+ { 15232, 0x000088C0 }, /* GL_MATRIX0_ARB */
+ { 15247, 0x00008630 }, /* GL_MATRIX0_NV */
+ { 15261, 0x000088CA }, /* GL_MATRIX10_ARB */
+ { 15277, 0x000088CB }, /* GL_MATRIX11_ARB */
+ { 15293, 0x000088CC }, /* GL_MATRIX12_ARB */
+ { 15309, 0x000088CD }, /* GL_MATRIX13_ARB */
+ { 15325, 0x000088CE }, /* GL_MATRIX14_ARB */
+ { 15341, 0x000088CF }, /* GL_MATRIX15_ARB */
+ { 15357, 0x000088D0 }, /* GL_MATRIX16_ARB */
+ { 15373, 0x000088D1 }, /* GL_MATRIX17_ARB */
+ { 15389, 0x000088D2 }, /* GL_MATRIX18_ARB */
+ { 15405, 0x000088D3 }, /* GL_MATRIX19_ARB */
+ { 15421, 0x000088C1 }, /* GL_MATRIX1_ARB */
+ { 15436, 0x00008631 }, /* GL_MATRIX1_NV */
+ { 15450, 0x000088D4 }, /* GL_MATRIX20_ARB */
+ { 15466, 0x000088D5 }, /* GL_MATRIX21_ARB */
+ { 15482, 0x000088D6 }, /* GL_MATRIX22_ARB */
+ { 15498, 0x000088D7 }, /* GL_MATRIX23_ARB */
+ { 15514, 0x000088D8 }, /* GL_MATRIX24_ARB */
+ { 15530, 0x000088D9 }, /* GL_MATRIX25_ARB */
+ { 15546, 0x000088DA }, /* GL_MATRIX26_ARB */
+ { 15562, 0x000088DB }, /* GL_MATRIX27_ARB */
+ { 15578, 0x000088DC }, /* GL_MATRIX28_ARB */
+ { 15594, 0x000088DD }, /* GL_MATRIX29_ARB */
+ { 15610, 0x000088C2 }, /* GL_MATRIX2_ARB */
+ { 15625, 0x00008632 }, /* GL_MATRIX2_NV */
+ { 15639, 0x000088DE }, /* GL_MATRIX30_ARB */
+ { 15655, 0x000088DF }, /* GL_MATRIX31_ARB */
+ { 15671, 0x000088C3 }, /* GL_MATRIX3_ARB */
+ { 15686, 0x00008633 }, /* GL_MATRIX3_NV */
+ { 15700, 0x000088C4 }, /* GL_MATRIX4_ARB */
+ { 15715, 0x00008634 }, /* GL_MATRIX4_NV */
+ { 15729, 0x000088C5 }, /* GL_MATRIX5_ARB */
+ { 15744, 0x00008635 }, /* GL_MATRIX5_NV */
+ { 15758, 0x000088C6 }, /* GL_MATRIX6_ARB */
+ { 15773, 0x00008636 }, /* GL_MATRIX6_NV */
+ { 15787, 0x000088C7 }, /* GL_MATRIX7_ARB */
+ { 15802, 0x00008637 }, /* GL_MATRIX7_NV */
+ { 15816, 0x000088C8 }, /* GL_MATRIX8_ARB */
+ { 15831, 0x000088C9 }, /* GL_MATRIX9_ARB */
+ { 15846, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */
+ { 15872, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
+ { 15906, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
+ { 15937, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
+ { 15970, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
+ { 16001, 0x00000BA0 }, /* GL_MATRIX_MODE */
+ { 16016, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */
+ { 16038, 0x00008008 }, /* GL_MAX */
+ { 16045, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */
+ { 16068, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
+ { 16100, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */
+ { 16126, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
+ { 16159, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
+ { 16185, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+ { 16219, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */
+ { 16238, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
+ { 16267, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
+ { 16299, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */
+ { 16335, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
+ { 16371, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */
+ { 16411, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */
+ { 16437, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */
+ { 16467, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */
+ { 16492, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */
+ { 16521, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
+ { 16550, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */
+ { 16583, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */
+ { 16603, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */
+ { 16627, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */
+ { 16651, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */
+ { 16675, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */
+ { 16700, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */
+ { 16718, 0x00008008 }, /* GL_MAX_EXT */
+ { 16729, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
+ { 16764, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */
+ { 16803, 0x00000D31 }, /* GL_MAX_LIGHTS */
+ { 16817, 0x00000B31 }, /* GL_MAX_LIST_NESTING */
+ { 16837, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
+ { 16875, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */
+ { 16904, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */
+ { 16928, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */
+ { 16956, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */
+ { 16979, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
+ { 17016, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
+ { 17052, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
+ { 17079, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
+ { 17108, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
+ { 17142, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
+ { 17178, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
+ { 17205, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
+ { 17237, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
+ { 17273, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
+ { 17302, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
+ { 17331, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */
+ { 17359, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
+ { 17397, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+ { 17441, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+ { 17484, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
+ { 17518, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+ { 17557, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
+ { 17594, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
+ { 17632, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+ { 17675, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+ { 17718, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
+ { 17748, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
+ { 17779, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
+ { 17815, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
+ { 17851, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */
+ { 17881, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
+ { 17915, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */
+ { 17948, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
+ { 17977, 0x00008504 }, /* GL_MAX_SHININESS_NV */
+ { 17997, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */
+ { 18021, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */
+ { 18043, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */
+ { 18069, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */
+ { 18096, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */
+ { 18127, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */
+ { 18151, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
+ { 18185, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */
+ { 18205, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */
+ { 18232, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */
+ { 18253, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */
+ { 18278, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */
+ { 18303, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */
+ { 18338, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */
+ { 18360, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */
+ { 18386, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */
+ { 18408, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */
+ { 18434, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
+ { 18468, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
+ { 18506, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
+ { 18539, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */
+ { 18576, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */
+ { 18600, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */
+ { 18621, 0x00008007 }, /* GL_MIN */
+ { 18628, 0x0000802E }, /* GL_MINMAX */
+ { 18638, 0x0000802E }, /* GL_MINMAX_EXT */
+ { 18652, 0x0000802F }, /* GL_MINMAX_FORMAT */
+ { 18669, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */
+ { 18690, 0x00008030 }, /* GL_MINMAX_SINK */
+ { 18705, 0x00008030 }, /* GL_MINMAX_SINK_EXT */
+ { 18724, 0x00008007 }, /* GL_MIN_EXT */
+ { 18735, 0x00008370 }, /* GL_MIRRORED_REPEAT */
+ { 18754, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */
+ { 18777, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */
+ { 18800, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */
+ { 18820, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */
+ { 18840, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
+ { 18870, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */
+ { 18898, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
+ { 18926, 0x00001700 }, /* GL_MODELVIEW */
+ { 18939, 0x00001700 }, /* GL_MODELVIEW0_ARB */
+ { 18957, 0x0000872A }, /* GL_MODELVIEW10_ARB */
+ { 18976, 0x0000872B }, /* GL_MODELVIEW11_ARB */
+ { 18995, 0x0000872C }, /* GL_MODELVIEW12_ARB */
+ { 19014, 0x0000872D }, /* GL_MODELVIEW13_ARB */
+ { 19033, 0x0000872E }, /* GL_MODELVIEW14_ARB */
+ { 19052, 0x0000872F }, /* GL_MODELVIEW15_ARB */
+ { 19071, 0x00008730 }, /* GL_MODELVIEW16_ARB */
+ { 19090, 0x00008731 }, /* GL_MODELVIEW17_ARB */
+ { 19109, 0x00008732 }, /* GL_MODELVIEW18_ARB */
+ { 19128, 0x00008733 }, /* GL_MODELVIEW19_ARB */
+ { 19147, 0x0000850A }, /* GL_MODELVIEW1_ARB */
+ { 19165, 0x00008734 }, /* GL_MODELVIEW20_ARB */
+ { 19184, 0x00008735 }, /* GL_MODELVIEW21_ARB */
+ { 19203, 0x00008736 }, /* GL_MODELVIEW22_ARB */
+ { 19222, 0x00008737 }, /* GL_MODELVIEW23_ARB */
+ { 19241, 0x00008738 }, /* GL_MODELVIEW24_ARB */
+ { 19260, 0x00008739 }, /* GL_MODELVIEW25_ARB */
+ { 19279, 0x0000873A }, /* GL_MODELVIEW26_ARB */
+ { 19298, 0x0000873B }, /* GL_MODELVIEW27_ARB */
+ { 19317, 0x0000873C }, /* GL_MODELVIEW28_ARB */
+ { 19336, 0x0000873D }, /* GL_MODELVIEW29_ARB */
+ { 19355, 0x00008722 }, /* GL_MODELVIEW2_ARB */
+ { 19373, 0x0000873E }, /* GL_MODELVIEW30_ARB */
+ { 19392, 0x0000873F }, /* GL_MODELVIEW31_ARB */
+ { 19411, 0x00008723 }, /* GL_MODELVIEW3_ARB */
+ { 19429, 0x00008724 }, /* GL_MODELVIEW4_ARB */
+ { 19447, 0x00008725 }, /* GL_MODELVIEW5_ARB */
+ { 19465, 0x00008726 }, /* GL_MODELVIEW6_ARB */
+ { 19483, 0x00008727 }, /* GL_MODELVIEW7_ARB */
+ { 19501, 0x00008728 }, /* GL_MODELVIEW8_ARB */
+ { 19519, 0x00008729 }, /* GL_MODELVIEW9_ARB */
+ { 19537, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */
+ { 19557, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */
+ { 19584, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */
+ { 19609, 0x00002100 }, /* GL_MODULATE */
+ { 19621, 0x00008744 }, /* GL_MODULATE_ADD_ATI */
+ { 19641, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */
+ { 19668, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */
+ { 19693, 0x00000103 }, /* GL_MULT */
+ { 19701, 0x0000809D }, /* GL_MULTISAMPLE */
+ { 19716, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */
+ { 19736, 0x0000809D }, /* GL_MULTISAMPLE_ARB */
+ { 19755, 0x20000000 }, /* GL_MULTISAMPLE_BIT */
+ { 19774, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */
+ { 19798, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */
+ { 19821, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */
+ { 19851, 0x00002A25 }, /* GL_N3F_V3F */
+ { 19862, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */
+ { 19882, 0x0000150E }, /* GL_NAND */
+ { 19890, 0x00002600 }, /* GL_NEAREST */
+ { 19901, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
+ { 19932, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
+ { 19964, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */
+ { 19989, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */
+ { 20015, 0x00000200 }, /* GL_NEVER */
+ { 20024, 0x00001102 }, /* GL_NICEST */
+ { 20034, 0x00000000 }, /* GL_NONE */
+ { 20042, 0x00001505 }, /* GL_NOOP */
+ { 20050, 0x00001508 }, /* GL_NOR */
+ { 20057, 0x00000BA1 }, /* GL_NORMALIZE */
+ { 20070, 0x00008075 }, /* GL_NORMAL_ARRAY */
+ { 20086, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
+ { 20117, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */
+ { 20152, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */
+ { 20176, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */
+ { 20199, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */
+ { 20220, 0x00008511 }, /* GL_NORMAL_MAP */
+ { 20234, 0x00008511 }, /* GL_NORMAL_MAP_ARB */
+ { 20252, 0x00008511 }, /* GL_NORMAL_MAP_NV */
+ { 20269, 0x00000205 }, /* GL_NOTEQUAL */
+ { 20281, 0x00000000 }, /* GL_NO_ERROR */
+ { 20293, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
+ { 20327, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */
+ { 20365, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */
+ { 20397, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */
+ { 20439, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */
+ { 20469, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */
+ { 20509, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */
+ { 20540, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */
+ { 20569, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */
+ { 20597, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */
+ { 20627, 0x00002401 }, /* GL_OBJECT_LINEAR */
+ { 20644, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */
+ { 20670, 0x00002501 }, /* GL_OBJECT_PLANE */
+ { 20686, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */
+ { 20721, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */
+ { 20743, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */
+ { 20762, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */
+ { 20792, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */
+ { 20813, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */
+ { 20841, 0x00000001 }, /* GL_ONE */
+ { 20848, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */
+ { 20876, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */
+ { 20908, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */
+ { 20936, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */
+ { 20968, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */
+ { 20991, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */
+ { 21014, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */
+ { 21037, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */
+ { 21060, 0x00008598 }, /* GL_OPERAND0_ALPHA */
+ { 21078, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */
+ { 21100, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */
+ { 21122, 0x00008590 }, /* GL_OPERAND0_RGB */
+ { 21138, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */
+ { 21158, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */
+ { 21178, 0x00008599 }, /* GL_OPERAND1_ALPHA */
+ { 21196, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */
+ { 21218, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */
+ { 21240, 0x00008591 }, /* GL_OPERAND1_RGB */
+ { 21256, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */
+ { 21276, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */
+ { 21296, 0x0000859A }, /* GL_OPERAND2_ALPHA */
+ { 21314, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */
+ { 21336, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */
+ { 21358, 0x00008592 }, /* GL_OPERAND2_RGB */
+ { 21374, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */
+ { 21394, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */
+ { 21414, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */
+ { 21435, 0x00008593 }, /* GL_OPERAND3_RGB_NV */
+ { 21454, 0x00001507 }, /* GL_OR */
+ { 21460, 0x00000A01 }, /* GL_ORDER */
+ { 21469, 0x0000150D }, /* GL_OR_INVERTED */
+ { 21484, 0x0000150B }, /* GL_OR_REVERSE */
+ { 21498, 0x00000505 }, /* GL_OUT_OF_MEMORY */
+ { 21515, 0x00000D05 }, /* GL_PACK_ALIGNMENT */
+ { 21533, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */
+ { 21554, 0x00008758 }, /* GL_PACK_INVERT_MESA */
+ { 21574, 0x00000D01 }, /* GL_PACK_LSB_FIRST */
+ { 21592, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */
+ { 21611, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */
+ { 21631, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */
+ { 21651, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */
+ { 21669, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */
+ { 21688, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */
+ { 21713, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */
+ { 21737, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */
+ { 21758, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */
+ { 21780, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */
+ { 21802, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */
+ { 21827, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */
+ { 21851, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */
+ { 21872, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */
+ { 21894, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */
+ { 21916, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */
+ { 21938, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */
+ { 21969, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */
+ { 21989, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */
+ { 22014, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */
+ { 22034, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */
+ { 22059, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */
+ { 22079, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */
+ { 22104, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */
+ { 22124, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */
+ { 22149, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */
+ { 22169, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */
+ { 22194, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */
+ { 22214, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */
+ { 22239, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */
+ { 22259, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */
+ { 22284, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */
+ { 22304, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */
+ { 22329, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */
+ { 22349, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */
+ { 22374, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */
+ { 22394, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */
+ { 22419, 0x00000020 }, /* GL_PIXEL_MODE_BIT */
+ { 22437, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */
+ { 22470, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */
+ { 22495, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */
+ { 22530, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */
+ { 22557, 0x00001B00 }, /* GL_POINT */
+ { 22566, 0x00000000 }, /* GL_POINTS */
+ { 22576, 0x00000002 }, /* GL_POINT_BIT */
+ { 22589, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */
+ { 22619, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */
+ { 22653, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */
+ { 22687, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */
+ { 22722, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */
+ { 22751, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */
+ { 22784, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */
+ { 22817, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */
+ { 22851, 0x00000B11 }, /* GL_POINT_SIZE */
+ { 22865, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */
+ { 22891, 0x00008127 }, /* GL_POINT_SIZE_MAX */
+ { 22909, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */
+ { 22931, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */
+ { 22953, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */
+ { 22976, 0x00008126 }, /* GL_POINT_SIZE_MIN */
+ { 22994, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */
+ { 23016, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */
+ { 23038, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */
+ { 23061, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */
+ { 23081, 0x00000B10 }, /* GL_POINT_SMOOTH */
+ { 23097, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */
+ { 23118, 0x00008861 }, /* GL_POINT_SPRITE */
+ { 23134, 0x00008861 }, /* GL_POINT_SPRITE_ARB */
+ { 23154, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */
+ { 23183, 0x00008861 }, /* GL_POINT_SPRITE_NV */
+ { 23202, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */
+ { 23228, 0x00000701 }, /* GL_POINT_TOKEN */
+ { 23243, 0x00000009 }, /* GL_POLYGON */
+ { 23254, 0x00000008 }, /* GL_POLYGON_BIT */
+ { 23269, 0x00000B40 }, /* GL_POLYGON_MODE */
+ { 23285, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */
+ { 23308, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */
+ { 23333, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */
+ { 23356, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */
+ { 23379, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */
+ { 23403, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */
+ { 23427, 0x00000B41 }, /* GL_POLYGON_SMOOTH */
+ { 23445, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */
+ { 23468, 0x00000B42 }, /* GL_POLYGON_STIPPLE */
+ { 23487, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */
+ { 23510, 0x00000703 }, /* GL_POLYGON_TOKEN */
+ { 23527, 0x00001203 }, /* GL_POSITION */
+ { 23539, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
+ { 23571, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */
+ { 23607, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
+ { 23640, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */
+ { 23677, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
+ { 23708, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */
+ { 23743, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
+ { 23775, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */
+ { 23811, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
+ { 23844, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
+ { 23876, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */
+ { 23912, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
+ { 23945, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */
+ { 23982, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */
+ { 24012, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */
+ { 24046, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */
+ { 24077, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */
+ { 24112, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
+ { 24143, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */
+ { 24178, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
+ { 24210, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */
+ { 24246, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */
+ { 24276, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */
+ { 24310, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */
+ { 24341, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */
+ { 24376, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */
+ { 24408, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */
+ { 24439, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */
+ { 24474, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */
+ { 24506, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */
+ { 24542, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */
+ { 24571, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */
+ { 24604, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */
+ { 24634, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */
+ { 24668, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
+ { 24707, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
+ { 24740, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
+ { 24780, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
+ { 24814, 0x00008578 }, /* GL_PREVIOUS */
+ { 24826, 0x00008578 }, /* GL_PREVIOUS_ARB */
+ { 24842, 0x00008578 }, /* GL_PREVIOUS_EXT */
+ { 24858, 0x00008577 }, /* GL_PRIMARY_COLOR */
+ { 24875, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */
+ { 24896, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */
+ { 24917, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
+ { 24950, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
+ { 24982, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */
+ { 25005, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */
+ { 25028, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */
+ { 25058, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */
+ { 25087, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */
+ { 25115, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */
+ { 25137, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */
+ { 25165, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */
+ { 25193, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */
+ { 25215, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */
+ { 25236, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+ { 25276, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+ { 25315, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
+ { 25345, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+ { 25380, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
+ { 25413, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
+ { 25447, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+ { 25486, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+ { 25525, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */
+ { 25547, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */
+ { 25573, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */
+ { 25597, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */
+ { 25620, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */
+ { 25642, 0x00008628 }, /* GL_PROGRAM_STRING_NV */
+ { 25663, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */
+ { 25684, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */
+ { 25711, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
+ { 25743, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
+ { 25775, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
+ { 25810, 0x00001701 }, /* GL_PROJECTION */
+ { 25824, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */
+ { 25845, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */
+ { 25871, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */
+ { 25892, 0x00008025 }, /* GL_PROXY_HISTOGRAM */
+ { 25911, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */
+ { 25934, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
+ { 25973, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
+ { 26011, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */
+ { 26031, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
+ { 26061, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */
+ { 26085, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */
+ { 26105, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
+ { 26135, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */
+ { 26159, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */
+ { 26179, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
+ { 26212, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */
+ { 26238, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */
+ { 26268, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
+ { 26299, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */
+ { 26329, 0x00002003 }, /* GL_Q */
+ { 26334, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */
+ { 26359, 0x00000007 }, /* GL_QUADS */
+ { 26368, 0x00008614 }, /* GL_QUAD_MESH_SUN */
+ { 26385, 0x00000008 }, /* GL_QUAD_STRIP */
+ { 26399, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */
+ { 26421, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */
+ { 26447, 0x00008866 }, /* GL_QUERY_RESULT */
+ { 26463, 0x00008866 }, /* GL_QUERY_RESULT_ARB */
+ { 26483, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */
+ { 26509, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */
+ { 26539, 0x00002002 }, /* GL_R */
+ { 26544, 0x00002A10 }, /* GL_R3_G3_B2 */
+ { 26556, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
+ { 26589, 0x00000C02 }, /* GL_READ_BUFFER */
+ { 26604, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
+ { 26636, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */
+ { 26660, 0x000088B8 }, /* GL_READ_ONLY */
+ { 26673, 0x000088B8 }, /* GL_READ_ONLY_ARB */
+ { 26690, 0x000088BA }, /* GL_READ_WRITE */
+ { 26704, 0x000088BA }, /* GL_READ_WRITE_ARB */
+ { 26722, 0x00001903 }, /* GL_RED */
+ { 26729, 0x00008016 }, /* GL_REDUCE */
+ { 26739, 0x00008016 }, /* GL_REDUCE_EXT */
+ { 26753, 0x00000D15 }, /* GL_RED_BIAS */
+ { 26765, 0x00000D52 }, /* GL_RED_BITS */
+ { 26777, 0x00000D14 }, /* GL_RED_SCALE */
+ { 26790, 0x00008512 }, /* GL_REFLECTION_MAP */
+ { 26808, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */
+ { 26830, 0x00008512 }, /* GL_REFLECTION_MAP_NV */
+ { 26851, 0x00001C00 }, /* GL_RENDER */
+ { 26861, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */
+ { 26889, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */
+ { 26909, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */
+ { 26936, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
+ { 26972, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */
+ { 26998, 0x00001F01 }, /* GL_RENDERER */
+ { 27010, 0x00000C40 }, /* GL_RENDER_MODE */
+ { 27025, 0x00002901 }, /* GL_REPEAT */
+ { 27035, 0x00001E01 }, /* GL_REPLACE */
+ { 27046, 0x00008062 }, /* GL_REPLACE_EXT */
+ { 27061, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */
+ { 27084, 0x0000803A }, /* GL_RESCALE_NORMAL */
+ { 27102, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */
+ { 27124, 0x00000102 }, /* GL_RETURN */
+ { 27134, 0x00001907 }, /* GL_RGB */
+ { 27141, 0x00008052 }, /* GL_RGB10 */
+ { 27150, 0x00008059 }, /* GL_RGB10_A2 */
+ { 27162, 0x00008059 }, /* GL_RGB10_A2_EXT */
+ { 27178, 0x00008052 }, /* GL_RGB10_EXT */
+ { 27191, 0x00008053 }, /* GL_RGB12 */
+ { 27200, 0x00008053 }, /* GL_RGB12_EXT */
+ { 27213, 0x00008054 }, /* GL_RGB16 */
+ { 27222, 0x00008054 }, /* GL_RGB16_EXT */
+ { 27235, 0x0000804E }, /* GL_RGB2_EXT */
+ { 27247, 0x0000804F }, /* GL_RGB4 */
+ { 27255, 0x0000804F }, /* GL_RGB4_EXT */
+ { 27267, 0x000083A1 }, /* GL_RGB4_S3TC */
+ { 27280, 0x00008050 }, /* GL_RGB5 */
+ { 27288, 0x00008057 }, /* GL_RGB5_A1 */
+ { 27299, 0x00008057 }, /* GL_RGB5_A1_EXT */
+ { 27314, 0x00008050 }, /* GL_RGB5_EXT */
+ { 27326, 0x00008051 }, /* GL_RGB8 */
+ { 27334, 0x00008051 }, /* GL_RGB8_EXT */
+ { 27346, 0x00001908 }, /* GL_RGBA */
+ { 27354, 0x0000805A }, /* GL_RGBA12 */
+ { 27364, 0x0000805A }, /* GL_RGBA12_EXT */
+ { 27378, 0x0000805B }, /* GL_RGBA16 */
+ { 27388, 0x0000805B }, /* GL_RGBA16_EXT */
+ { 27402, 0x00008055 }, /* GL_RGBA2 */
+ { 27411, 0x00008055 }, /* GL_RGBA2_EXT */
+ { 27424, 0x00008056 }, /* GL_RGBA4 */
+ { 27433, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */
+ { 27452, 0x00008056 }, /* GL_RGBA4_EXT */
+ { 27465, 0x000083A3 }, /* GL_RGBA4_S3TC */
+ { 27479, 0x00008058 }, /* GL_RGBA8 */
+ { 27488, 0x00008058 }, /* GL_RGBA8_EXT */
+ { 27501, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */
+ { 27519, 0x00000C31 }, /* GL_RGBA_MODE */
+ { 27532, 0x000083A2 }, /* GL_RGBA_S3TC */
+ { 27545, 0x000083A0 }, /* GL_RGB_S3TC */
+ { 27557, 0x00008573 }, /* GL_RGB_SCALE */
+ { 27570, 0x00008573 }, /* GL_RGB_SCALE_ARB */
+ { 27587, 0x00008573 }, /* GL_RGB_SCALE_EXT */
+ { 27604, 0x00000407 }, /* GL_RIGHT */
+ { 27613, 0x00002000 }, /* GL_S */
+ { 27618, 0x00008B5D }, /* GL_SAMPLER_1D */
+ { 27632, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */
+ { 27653, 0x00008B5E }, /* GL_SAMPLER_2D */
+ { 27667, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */
+ { 27688, 0x00008B5F }, /* GL_SAMPLER_3D */
+ { 27702, 0x00008B60 }, /* GL_SAMPLER_CUBE */
+ { 27718, 0x000080A9 }, /* GL_SAMPLES */
+ { 27729, 0x000086B4 }, /* GL_SAMPLES_3DFX */
+ { 27745, 0x000080A9 }, /* GL_SAMPLES_ARB */
+ { 27760, 0x00008914 }, /* GL_SAMPLES_PASSED */
+ { 27778, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */
+ { 27800, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
+ { 27828, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */
+ { 27860, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */
+ { 27883, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */
+ { 27910, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */
+ { 27928, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */
+ { 27951, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */
+ { 27973, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */
+ { 27992, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */
+ { 28015, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */
+ { 28041, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */
+ { 28071, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */
+ { 28096, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */
+ { 28125, 0x00080000 }, /* GL_SCISSOR_BIT */
+ { 28140, 0x00000C10 }, /* GL_SCISSOR_BOX */
+ { 28155, 0x00000C11 }, /* GL_SCISSOR_TEST */
+ { 28171, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */
+ { 28196, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
+ { 28236, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */
+ { 28280, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
+ { 28313, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
+ { 28343, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
+ { 28375, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
+ { 28405, 0x00001C02 }, /* GL_SELECT */
+ { 28415, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */
+ { 28443, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */
+ { 28468, 0x00008012 }, /* GL_SEPARABLE_2D */
+ { 28484, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */
+ { 28511, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */
+ { 28542, 0x0000150F }, /* GL_SET */
+ { 28549, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */
+ { 28570, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */
+ { 28594, 0x00008B4F }, /* GL_SHADER_TYPE */
+ { 28609, 0x00000B54 }, /* GL_SHADE_MODEL */
+ { 28624, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */
+ { 28652, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */
+ { 28675, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */
+ { 28705, 0x00001601 }, /* GL_SHININESS */
+ { 28718, 0x00001402 }, /* GL_SHORT */
+ { 28727, 0x000081F9 }, /* GL_SINGLE_COLOR */
+ { 28743, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */
+ { 28763, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */
+ { 28782, 0x00001D01 }, /* GL_SMOOTH */
+ { 28792, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */
+ { 28825, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */
+ { 28852, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */
+ { 28885, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */
+ { 28912, 0x00008588 }, /* GL_SOURCE0_ALPHA */
+ { 28929, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */
+ { 28950, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */
+ { 28971, 0x00008580 }, /* GL_SOURCE0_RGB */
+ { 28986, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */
+ { 29005, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */
+ { 29024, 0x00008589 }, /* GL_SOURCE1_ALPHA */
+ { 29041, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */
+ { 29062, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */
+ { 29083, 0x00008581 }, /* GL_SOURCE1_RGB */
+ { 29098, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */
+ { 29117, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */
+ { 29136, 0x0000858A }, /* GL_SOURCE2_ALPHA */
+ { 29153, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */
+ { 29174, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */
+ { 29195, 0x00008582 }, /* GL_SOURCE2_RGB */
+ { 29210, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */
+ { 29229, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */
+ { 29248, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */
+ { 29268, 0x00008583 }, /* GL_SOURCE3_RGB_NV */
+ { 29286, 0x00001202 }, /* GL_SPECULAR */
+ { 29298, 0x00002402 }, /* GL_SPHERE_MAP */
+ { 29312, 0x00001206 }, /* GL_SPOT_CUTOFF */
+ { 29327, 0x00001204 }, /* GL_SPOT_DIRECTION */
+ { 29345, 0x00001205 }, /* GL_SPOT_EXPONENT */
+ { 29362, 0x00008588 }, /* GL_SRC0_ALPHA */
+ { 29376, 0x00008580 }, /* GL_SRC0_RGB */
+ { 29388, 0x00008589 }, /* GL_SRC1_ALPHA */
+ { 29402, 0x00008581 }, /* GL_SRC1_RGB */
+ { 29414, 0x0000858A }, /* GL_SRC2_ALPHA */
+ { 29428, 0x00008582 }, /* GL_SRC2_RGB */
+ { 29440, 0x00000302 }, /* GL_SRC_ALPHA */
+ { 29453, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */
+ { 29475, 0x00000300 }, /* GL_SRC_COLOR */
+ { 29488, 0x00000503 }, /* GL_STACK_OVERFLOW */
+ { 29506, 0x00000504 }, /* GL_STACK_UNDERFLOW */
+ { 29525, 0x000088E6 }, /* GL_STATIC_COPY */
+ { 29540, 0x000088E6 }, /* GL_STATIC_COPY_ARB */
+ { 29559, 0x000088E4 }, /* GL_STATIC_DRAW */
+ { 29574, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */
+ { 29593, 0x000088E5 }, /* GL_STATIC_READ */
+ { 29608, 0x000088E5 }, /* GL_STATIC_READ_ARB */
+ { 29627, 0x00001802 }, /* GL_STENCIL */
+ { 29638, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */
+ { 29664, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */
+ { 29685, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */
+ { 29710, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */
+ { 29731, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */
+ { 29756, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
+ { 29788, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */
+ { 29824, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
+ { 29856, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */
+ { 29892, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */
+ { 29912, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */
+ { 29939, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */
+ { 29965, 0x00000D57 }, /* GL_STENCIL_BITS */
+ { 29981, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */
+ { 30003, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */
+ { 30026, 0x00000B94 }, /* GL_STENCIL_FAIL */
+ { 30042, 0x00000B92 }, /* GL_STENCIL_FUNC */
+ { 30058, 0x00001901 }, /* GL_STENCIL_INDEX */
+ { 30075, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */
+ { 30098, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */
+ { 30120, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */
+ { 30142, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */
+ { 30164, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */
+ { 30185, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */
+ { 30212, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */
+ { 30239, 0x00000B97 }, /* GL_STENCIL_REF */
+ { 30254, 0x00000B90 }, /* GL_STENCIL_TEST */
+ { 30270, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
+ { 30299, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */
+ { 30321, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */
+ { 30342, 0x00000C33 }, /* GL_STEREO */
+ { 30352, 0x000088E2 }, /* GL_STREAM_COPY */
+ { 30367, 0x000088E2 }, /* GL_STREAM_COPY_ARB */
+ { 30386, 0x000088E0 }, /* GL_STREAM_DRAW */
+ { 30401, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */
+ { 30420, 0x000088E1 }, /* GL_STREAM_READ */
+ { 30435, 0x000088E1 }, /* GL_STREAM_READ_ARB */
+ { 30454, 0x00000D50 }, /* GL_SUBPIXEL_BITS */
+ { 30471, 0x000084E7 }, /* GL_SUBTRACT */
+ { 30483, 0x000084E7 }, /* GL_SUBTRACT_ARB */
+ { 30499, 0x00002001 }, /* GL_T */
+ { 30504, 0x00002A2A }, /* GL_T2F_C3F_V3F */
+ { 30519, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */
+ { 30538, 0x00002A29 }, /* GL_T2F_C4UB_V3F */
+ { 30554, 0x00002A2B }, /* GL_T2F_N3F_V3F */
+ { 30569, 0x00002A27 }, /* GL_T2F_V3F */
+ { 30580, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */
+ { 30599, 0x00002A28 }, /* GL_T4F_V4F */
+ { 30610, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */
+ { 30633, 0x00001702 }, /* GL_TEXTURE */
+ { 30644, 0x000084C0 }, /* GL_TEXTURE0 */
+ { 30656, 0x000084C0 }, /* GL_TEXTURE0_ARB */
+ { 30672, 0x000084C1 }, /* GL_TEXTURE1 */
+ { 30684, 0x000084CA }, /* GL_TEXTURE10 */
+ { 30697, 0x000084CA }, /* GL_TEXTURE10_ARB */
+ { 30714, 0x000084CB }, /* GL_TEXTURE11 */
+ { 30727, 0x000084CB }, /* GL_TEXTURE11_ARB */
+ { 30744, 0x000084CC }, /* GL_TEXTURE12 */
+ { 30757, 0x000084CC }, /* GL_TEXTURE12_ARB */
+ { 30774, 0x000084CD }, /* GL_TEXTURE13 */
+ { 30787, 0x000084CD }, /* GL_TEXTURE13_ARB */
+ { 30804, 0x000084CE }, /* GL_TEXTURE14 */
+ { 30817, 0x000084CE }, /* GL_TEXTURE14_ARB */
+ { 30834, 0x000084CF }, /* GL_TEXTURE15 */
+ { 30847, 0x000084CF }, /* GL_TEXTURE15_ARB */
+ { 30864, 0x000084D0 }, /* GL_TEXTURE16 */
+ { 30877, 0x000084D0 }, /* GL_TEXTURE16_ARB */
+ { 30894, 0x000084D1 }, /* GL_TEXTURE17 */
+ { 30907, 0x000084D1 }, /* GL_TEXTURE17_ARB */
+ { 30924, 0x000084D2 }, /* GL_TEXTURE18 */
+ { 30937, 0x000084D2 }, /* GL_TEXTURE18_ARB */
+ { 30954, 0x000084D3 }, /* GL_TEXTURE19 */
+ { 30967, 0x000084D3 }, /* GL_TEXTURE19_ARB */
+ { 30984, 0x000084C1 }, /* GL_TEXTURE1_ARB */
+ { 31000, 0x000084C2 }, /* GL_TEXTURE2 */
+ { 31012, 0x000084D4 }, /* GL_TEXTURE20 */
+ { 31025, 0x000084D4 }, /* GL_TEXTURE20_ARB */
+ { 31042, 0x000084D5 }, /* GL_TEXTURE21 */
+ { 31055, 0x000084D5 }, /* GL_TEXTURE21_ARB */
+ { 31072, 0x000084D6 }, /* GL_TEXTURE22 */
+ { 31085, 0x000084D6 }, /* GL_TEXTURE22_ARB */
+ { 31102, 0x000084D7 }, /* GL_TEXTURE23 */
+ { 31115, 0x000084D7 }, /* GL_TEXTURE23_ARB */
+ { 31132, 0x000084D8 }, /* GL_TEXTURE24 */
+ { 31145, 0x000084D8 }, /* GL_TEXTURE24_ARB */
+ { 31162, 0x000084D9 }, /* GL_TEXTURE25 */
+ { 31175, 0x000084D9 }, /* GL_TEXTURE25_ARB */
+ { 31192, 0x000084DA }, /* GL_TEXTURE26 */
+ { 31205, 0x000084DA }, /* GL_TEXTURE26_ARB */
+ { 31222, 0x000084DB }, /* GL_TEXTURE27 */
+ { 31235, 0x000084DB }, /* GL_TEXTURE27_ARB */
+ { 31252, 0x000084DC }, /* GL_TEXTURE28 */
+ { 31265, 0x000084DC }, /* GL_TEXTURE28_ARB */
+ { 31282, 0x000084DD }, /* GL_TEXTURE29 */
+ { 31295, 0x000084DD }, /* GL_TEXTURE29_ARB */
+ { 31312, 0x000084C2 }, /* GL_TEXTURE2_ARB */
+ { 31328, 0x000084C3 }, /* GL_TEXTURE3 */
+ { 31340, 0x000084DE }, /* GL_TEXTURE30 */
+ { 31353, 0x000084DE }, /* GL_TEXTURE30_ARB */
+ { 31370, 0x000084DF }, /* GL_TEXTURE31 */
+ { 31383, 0x000084DF }, /* GL_TEXTURE31_ARB */
+ { 31400, 0x000084C3 }, /* GL_TEXTURE3_ARB */
+ { 31416, 0x000084C4 }, /* GL_TEXTURE4 */
+ { 31428, 0x000084C4 }, /* GL_TEXTURE4_ARB */
+ { 31444, 0x000084C5 }, /* GL_TEXTURE5 */
+ { 31456, 0x000084C5 }, /* GL_TEXTURE5_ARB */
+ { 31472, 0x000084C6 }, /* GL_TEXTURE6 */
+ { 31484, 0x000084C6 }, /* GL_TEXTURE6_ARB */
+ { 31500, 0x000084C7 }, /* GL_TEXTURE7 */
+ { 31512, 0x000084C7 }, /* GL_TEXTURE7_ARB */
+ { 31528, 0x000084C8 }, /* GL_TEXTURE8 */
+ { 31540, 0x000084C8 }, /* GL_TEXTURE8_ARB */
+ { 31556, 0x000084C9 }, /* GL_TEXTURE9 */
+ { 31568, 0x000084C9 }, /* GL_TEXTURE9_ARB */
+ { 31584, 0x00000DE0 }, /* GL_TEXTURE_1D */
+ { 31598, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */
+ { 31622, 0x00000DE1 }, /* GL_TEXTURE_2D */
+ { 31636, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */
+ { 31660, 0x0000806F }, /* GL_TEXTURE_3D */
+ { 31674, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */
+ { 31696, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */
+ { 31722, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */
+ { 31744, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */
+ { 31766, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
+ { 31798, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */
+ { 31820, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
+ { 31852, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */
+ { 31874, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */
+ { 31902, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */
+ { 31934, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
+ { 31967, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */
+ { 31999, 0x00040000 }, /* GL_TEXTURE_BIT */
+ { 32014, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */
+ { 32035, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */
+ { 32060, 0x00001005 }, /* GL_TEXTURE_BORDER */
+ { 32078, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */
+ { 32102, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
+ { 32133, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
+ { 32163, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
+ { 32193, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
+ { 32228, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
+ { 32259, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+ { 32297, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */
+ { 32324, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
+ { 32356, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
+ { 32390, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */
+ { 32414, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */
+ { 32442, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */
+ { 32466, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */
+ { 32494, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
+ { 32527, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */
+ { 32551, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */
+ { 32573, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */
+ { 32595, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */
+ { 32621, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */
+ { 32655, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
+ { 32688, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */
+ { 32725, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */
+ { 32753, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */
+ { 32785, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */
+ { 32808, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
+ { 32846, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */
+ { 32888, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */
+ { 32919, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */
+ { 32947, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
+ { 32977, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */
+ { 33005, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */
+ { 33025, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */
+ { 33049, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
+ { 33080, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */
+ { 33115, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
+ { 33146, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */
+ { 33181, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
+ { 33212, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */
+ { 33247, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
+ { 33278, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */
+ { 33313, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
+ { 33344, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */
+ { 33379, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
+ { 33410, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */
+ { 33445, 0x00008071 }, /* GL_TEXTURE_DEPTH */
+ { 33462, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */
+ { 33484, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */
+ { 33510, 0x00002300 }, /* GL_TEXTURE_ENV */
+ { 33525, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */
+ { 33546, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */
+ { 33566, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */
+ { 33592, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */
+ { 33612, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */
+ { 33629, 0x00000C62 }, /* GL_TEXTURE_GEN_R */
+ { 33646, 0x00000C60 }, /* GL_TEXTURE_GEN_S */
+ { 33663, 0x00000C61 }, /* GL_TEXTURE_GEN_T */
+ { 33680, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */
+ { 33705, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */
+ { 33727, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */
+ { 33753, 0x00001001 }, /* GL_TEXTURE_HEIGHT */
+ { 33771, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */
+ { 33797, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */
+ { 33823, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */
+ { 33853, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */
+ { 33880, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */
+ { 33905, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */
+ { 33925, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */
+ { 33949, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
+ { 33976, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
+ { 34003, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
+ { 34030, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */
+ { 34056, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */
+ { 34086, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */
+ { 34108, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */
+ { 34126, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
+ { 34156, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
+ { 34184, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
+ { 34212, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
+ { 34240, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */
+ { 34261, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */
+ { 34280, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */
+ { 34302, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */
+ { 34321, 0x00008066 }, /* GL_TEXTURE_PRIORITY */
+ { 34341, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */
+ { 34366, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */
+ { 34390, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */
+ { 34410, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */
+ { 34434, 0x00008067 }, /* GL_TEXTURE_RESIDENT */
+ { 34454, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */
+ { 34477, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */
+ { 34502, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
+ { 34536, 0x00001000 }, /* GL_TEXTURE_WIDTH */
+ { 34553, 0x00008072 }, /* GL_TEXTURE_WRAP_R */
+ { 34571, 0x00002802 }, /* GL_TEXTURE_WRAP_S */
+ { 34589, 0x00002803 }, /* GL_TEXTURE_WRAP_T */
+ { 34607, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */
+ { 34627, 0x00008648 }, /* GL_TRACK_MATRIX_NV */
+ { 34646, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */
+ { 34675, 0x00001000 }, /* GL_TRANSFORM_BIT */
+ { 34692, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */
+ { 34718, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */
+ { 34748, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
+ { 34780, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
+ { 34810, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */
+ { 34844, 0x0000862C }, /* GL_TRANSPOSE_NV */
+ { 34860, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */
+ { 34891, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */
+ { 34926, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */
+ { 34954, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */
+ { 34986, 0x00000004 }, /* GL_TRIANGLES */
+ { 34999, 0x00000006 }, /* GL_TRIANGLE_FAN */
+ { 35015, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */
+ { 35036, 0x00000005 }, /* GL_TRIANGLE_STRIP */
+ { 35054, 0x00000001 }, /* GL_TRUE */
+ { 35062, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */
+ { 35082, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */
+ { 35105, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */
+ { 35125, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */
+ { 35146, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */
+ { 35168, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */
+ { 35190, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */
+ { 35210, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */
+ { 35231, 0x00001401 }, /* GL_UNSIGNED_BYTE */
+ { 35248, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */
+ { 35275, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */
+ { 35298, 0x00001405 }, /* GL_UNSIGNED_INT */
+ { 35314, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */
+ { 35341, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */
+ { 35365, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */
+ { 35396, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */
+ { 35420, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */
+ { 35448, 0x00001403 }, /* GL_UNSIGNED_SHORT */
+ { 35466, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
+ { 35496, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */
+ { 35522, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
+ { 35552, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */
+ { 35578, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */
+ { 35602, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */
+ { 35630, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */
+ { 35658, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */
+ { 35685, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
+ { 35717, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */
+ { 35748, 0x00008CA2 }, /* GL_UPPER_LEFT */
+ { 35762, 0x00002A20 }, /* GL_V2F */
+ { 35769, 0x00002A21 }, /* GL_V3F */
+ { 35776, 0x00008B83 }, /* GL_VALIDATE_STATUS */
+ { 35795, 0x00001F00 }, /* GL_VENDOR */
+ { 35805, 0x00001F02 }, /* GL_VERSION */
+ { 35816, 0x00008074 }, /* GL_VERTEX_ARRAY */
+ { 35832, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */
+ { 35862, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
+ { 35893, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */
+ { 35928, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */
+ { 35952, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */
+ { 35973, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */
+ { 35996, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */
+ { 36017, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
+ { 36044, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
+ { 36072, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
+ { 36100, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
+ { 36128, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
+ { 36156, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
+ { 36184, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
+ { 36212, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
+ { 36239, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
+ { 36266, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
+ { 36293, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
+ { 36320, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
+ { 36347, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
+ { 36374, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
+ { 36401, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
+ { 36428, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
+ { 36455, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
+ { 36493, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */
+ { 36535, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+ { 36566, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
+ { 36601, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
+ { 36635, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
+ { 36673, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
+ { 36704, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
+ { 36739, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+ { 36767, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
+ { 36799, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+ { 36829, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
+ { 36863, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
+ { 36891, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
+ { 36923, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
+ { 36943, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
+ { 36965, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
+ { 36994, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
+ { 37015, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
+ { 37044, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
+ { 37077, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
+ { 37109, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+ { 37136, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
+ { 37167, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
+ { 37197, 0x00008B31 }, /* GL_VERTEX_SHADER */
+ { 37214, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
+ { 37235, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
+ { 37262, 0x00000BA2 }, /* GL_VIEWPORT */
+ { 37274, 0x00000800 }, /* GL_VIEWPORT_BIT */
+ { 37290, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
+ { 37310, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
+ { 37341, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
+ { 37376, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+ { 37404, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+ { 37429, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+ { 37456, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+ { 37481, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
+ { 37505, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
+ { 37524, 0x000088B9 }, /* GL_WRITE_ONLY */
+ { 37538, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
+ { 37556, 0x00001506 }, /* GL_XOR */
+ { 37563, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
+ { 37582, 0x00008757 }, /* GL_YCBCR_MESA */
+ { 37596, 0x00000000 }, /* GL_ZERO */
+ { 37604, 0x00000D16 }, /* GL_ZOOM_X */
+ { 37614, 0x00000D17 }, /* GL_ZOOM_Y */
};
static const unsigned reduced_enums[1284] =
{
- 436, /* GL_FALSE */
- 645, /* GL_LINES */
- 647, /* GL_LINE_LOOP */
- 654, /* GL_LINE_STRIP */
- 1641, /* GL_TRIANGLES */
- 1644, /* GL_TRIANGLE_STRIP */
- 1642, /* GL_TRIANGLE_FAN */
- 1211, /* GL_QUADS */
- 1213, /* GL_QUAD_STRIP */
- 1099, /* GL_POLYGON */
- 1111, /* GL_POLYGON_STIPPLE_BIT */
- 1064, /* GL_PIXEL_MODE_BIT */
- 632, /* GL_LIGHTING_BIT */
- 458, /* GL_FOG_BIT */
+ 434, /* GL_FALSE */
+ 643, /* GL_LINES */
+ 645, /* GL_LINE_LOOP */
+ 652, /* GL_LINE_STRIP */
+ 1639, /* GL_TRIANGLES */
+ 1642, /* GL_TRIANGLE_STRIP */
+ 1640, /* GL_TRIANGLE_FAN */
+ 1209, /* GL_QUADS */
+ 1211, /* GL_QUAD_STRIP */
+ 1097, /* GL_POLYGON */
+ 1109, /* GL_POLYGON_STIPPLE_BIT */
+ 1062, /* GL_PIXEL_MODE_BIT */
+ 630, /* GL_LIGHTING_BIT */
+ 456, /* GL_FOG_BIT */
8, /* GL_ACCUM */
- 664, /* GL_LOAD */
- 1253, /* GL_RETURN */
- 937, /* GL_MULT */
+ 662, /* GL_LOAD */
+ 1251, /* GL_RETURN */
+ 935, /* GL_MULT */
23, /* GL_ADD */
- 953, /* GL_NEVER */
- 622, /* GL_LESS */
- 426, /* GL_EQUAL */
- 621, /* GL_LEQUAL */
- 547, /* GL_GREATER */
- 968, /* GL_NOTEQUAL */
- 522, /* GL_GEQUAL */
+ 951, /* GL_NEVER */
+ 620, /* GL_LESS */
+ 424, /* GL_EQUAL */
+ 619, /* GL_LEQUAL */
+ 545, /* GL_GREATER */
+ 966, /* GL_NOTEQUAL */
+ 520, /* GL_GEQUAL */
46, /* GL_ALWAYS */
- 1386, /* GL_SRC_COLOR */
- 997, /* GL_ONE_MINUS_SRC_COLOR */
- 1384, /* GL_SRC_ALPHA */
- 996, /* GL_ONE_MINUS_SRC_ALPHA */
- 406, /* GL_DST_ALPHA */
- 994, /* GL_ONE_MINUS_DST_ALPHA */
- 407, /* GL_DST_COLOR */
- 995, /* GL_ONE_MINUS_DST_COLOR */
- 1385, /* GL_SRC_ALPHA_SATURATE */
- 510, /* GL_FRONT_LEFT */
- 511, /* GL_FRONT_RIGHT */
- 69, /* GL_BACK_LEFT */
- 70, /* GL_BACK_RIGHT */
- 507, /* GL_FRONT */
- 68, /* GL_BACK */
- 620, /* GL_LEFT */
- 1293, /* GL_RIGHT */
- 508, /* GL_FRONT_AND_BACK */
- 63, /* GL_AUX0 */
- 64, /* GL_AUX1 */
- 65, /* GL_AUX2 */
- 66, /* GL_AUX3 */
- 612, /* GL_INVALID_ENUM */
- 615, /* GL_INVALID_VALUE */
- 614, /* GL_INVALID_OPERATION */
- 1387, /* GL_STACK_OVERFLOW */
- 1388, /* GL_STACK_UNDERFLOW */
- 1022, /* GL_OUT_OF_MEMORY */
- 613, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
+ 1384, /* GL_SRC_COLOR */
+ 995, /* GL_ONE_MINUS_SRC_COLOR */
+ 1382, /* GL_SRC_ALPHA */
+ 994, /* GL_ONE_MINUS_SRC_ALPHA */
+ 405, /* GL_DST_ALPHA */
+ 992, /* GL_ONE_MINUS_DST_ALPHA */
+ 406, /* GL_DST_COLOR */
+ 993, /* GL_ONE_MINUS_DST_COLOR */
+ 1383, /* GL_SRC_ALPHA_SATURATE */
+ 508, /* GL_FRONT_LEFT */
+ 509, /* GL_FRONT_RIGHT */
+ 68, /* GL_BACK_LEFT */
+ 69, /* GL_BACK_RIGHT */
+ 505, /* GL_FRONT */
+ 67, /* GL_BACK */
+ 618, /* GL_LEFT */
+ 1291, /* GL_RIGHT */
+ 506, /* GL_FRONT_AND_BACK */
+ 62, /* GL_AUX0 */
+ 63, /* GL_AUX1 */
+ 64, /* GL_AUX2 */
+ 65, /* GL_AUX3 */
+ 610, /* GL_INVALID_ENUM */
+ 613, /* GL_INVALID_VALUE */
+ 612, /* GL_INVALID_OPERATION */
+ 1385, /* GL_STACK_OVERFLOW */
+ 1386, /* GL_STACK_UNDERFLOW */
+ 1020, /* 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 */
- 1042, /* GL_PASS_THROUGH_TOKEN */
- 1098, /* GL_POINT_TOKEN */
- 655, /* GL_LINE_TOKEN */
- 1112, /* GL_POLYGON_TOKEN */
- 74, /* GL_BITMAP_TOKEN */
- 405, /* GL_DRAW_PIXEL_TOKEN */
- 271, /* GL_COPY_PIXEL_TOKEN */
- 648, /* GL_LINE_RESET_TOKEN */
- 429, /* GL_EXP */
- 430, /* GL_EXP2 */
- 304, /* GL_CW */
- 116, /* GL_CCW */
- 137, /* GL_COEFF */
- 1019, /* GL_ORDER */
- 344, /* GL_DOMAIN */
- 279, /* GL_CURRENT_COLOR */
- 282, /* GL_CURRENT_INDEX */
- 288, /* GL_CURRENT_NORMAL */
- 300, /* GL_CURRENT_TEXTURE_COORDS */
- 293, /* GL_CURRENT_RASTER_COLOR */
- 295, /* GL_CURRENT_RASTER_INDEX */
- 298, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
- 296, /* GL_CURRENT_RASTER_POSITION */
- 297, /* GL_CURRENT_RASTER_POSITION_VALID */
- 294, /* GL_CURRENT_RASTER_DISTANCE */
- 1091, /* GL_POINT_SMOOTH */
- 1080, /* GL_POINT_SIZE */
- 1090, /* GL_POINT_SIZE_RANGE */
- 1081, /* GL_POINT_SIZE_GRANULARITY */
- 649, /* GL_LINE_SMOOTH */
- 656, /* GL_LINE_WIDTH */
- 658, /* GL_LINE_WIDTH_RANGE */
- 657, /* GL_LINE_WIDTH_GRANULARITY */
- 651, /* GL_LINE_STIPPLE */
- 652, /* GL_LINE_STIPPLE_PATTERN */
- 653, /* GL_LINE_STIPPLE_REPEAT */
- 663, /* GL_LIST_MODE */
- 822, /* GL_MAX_LIST_NESTING */
- 660, /* GL_LIST_BASE */
- 662, /* GL_LIST_INDEX */
- 1101, /* GL_POLYGON_MODE */
- 1108, /* GL_POLYGON_SMOOTH */
- 1110, /* GL_POLYGON_STIPPLE */
- 414, /* GL_EDGE_FLAG */
- 272, /* GL_CULL_FACE */
- 273, /* GL_CULL_FACE_MODE */
- 509, /* GL_FRONT_FACE */
- 631, /* GL_LIGHTING */
- 636, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
- 637, /* GL_LIGHT_MODEL_TWO_SIDE */
- 633, /* GL_LIGHT_MODEL_AMBIENT */
- 1339, /* GL_SHADE_MODEL */
- 168, /* GL_COLOR_MATERIAL_FACE */
- 169, /* GL_COLOR_MATERIAL_PARAMETER */
- 167, /* GL_COLOR_MATERIAL */
- 457, /* GL_FOG */
- 479, /* GL_FOG_INDEX */
- 475, /* GL_FOG_DENSITY */
- 483, /* GL_FOG_START */
- 477, /* GL_FOG_END */
- 480, /* GL_FOG_MODE */
- 459, /* GL_FOG_COLOR */
- 333, /* GL_DEPTH_RANGE */
- 338, /* GL_DEPTH_TEST */
- 341, /* GL_DEPTH_WRITEMASK */
- 321, /* GL_DEPTH_CLEAR_VALUE */
- 332, /* GL_DEPTH_FUNC */
+ 1040, /* GL_PASS_THROUGH_TOKEN */
+ 1096, /* GL_POINT_TOKEN */
+ 653, /* GL_LINE_TOKEN */
+ 1110, /* GL_POLYGON_TOKEN */
+ 73, /* GL_BITMAP_TOKEN */
+ 404, /* GL_DRAW_PIXEL_TOKEN */
+ 270, /* GL_COPY_PIXEL_TOKEN */
+ 646, /* GL_LINE_RESET_TOKEN */
+ 427, /* GL_EXP */
+ 428, /* GL_EXP2 */
+ 303, /* GL_CW */
+ 115, /* GL_CCW */
+ 136, /* GL_COEFF */
+ 1017, /* 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 */
+ 1089, /* GL_POINT_SMOOTH */
+ 1078, /* GL_POINT_SIZE */
+ 1088, /* GL_POINT_SIZE_RANGE */
+ 1079, /* 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 */
+ 820, /* GL_MAX_LIST_NESTING */
+ 658, /* GL_LIST_BASE */
+ 660, /* GL_LIST_INDEX */
+ 1099, /* GL_POLYGON_MODE */
+ 1106, /* GL_POLYGON_SMOOTH */
+ 1108, /* 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 */
+ 1337, /* GL_SHADE_MODEL */
+ 167, /* GL_COLOR_MATERIAL_FACE */
+ 168, /* GL_COLOR_MATERIAL_PARAMETER */
+ 166, /* GL_COLOR_MATERIAL */
+ 455, /* GL_FOG */
+ 477, /* GL_FOG_INDEX */
+ 473, /* GL_FOG_DENSITY */
+ 481, /* GL_FOG_START */
+ 475, /* GL_FOG_END */
+ 478, /* GL_FOG_MODE */
+ 457, /* 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 */
- 1422, /* GL_STENCIL_TEST */
- 1410, /* GL_STENCIL_CLEAR_VALUE */
- 1412, /* GL_STENCIL_FUNC */
- 1424, /* GL_STENCIL_VALUE_MASK */
- 1411, /* GL_STENCIL_FAIL */
- 1419, /* GL_STENCIL_PASS_DEPTH_FAIL */
- 1420, /* GL_STENCIL_PASS_DEPTH_PASS */
- 1421, /* GL_STENCIL_REF */
- 1425, /* GL_STENCIL_WRITEMASK */
- 791, /* GL_MATRIX_MODE */
- 958, /* GL_NORMALIZE */
- 1731, /* GL_VIEWPORT */
- 932, /* GL_MODELVIEW_STACK_DEPTH */
- 1191, /* GL_PROJECTION_STACK_DEPTH */
- 1620, /* GL_TEXTURE_STACK_DEPTH */
- 930, /* GL_MODELVIEW_MATRIX */
- 1190, /* GL_PROJECTION_MATRIX */
- 1605, /* GL_TEXTURE_MATRIX */
- 61, /* GL_ATTRIB_STACK_DEPTH */
- 127, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
+ 1420, /* GL_STENCIL_TEST */
+ 1408, /* GL_STENCIL_CLEAR_VALUE */
+ 1410, /* GL_STENCIL_FUNC */
+ 1422, /* GL_STENCIL_VALUE_MASK */
+ 1409, /* GL_STENCIL_FAIL */
+ 1417, /* GL_STENCIL_PASS_DEPTH_FAIL */
+ 1418, /* GL_STENCIL_PASS_DEPTH_PASS */
+ 1419, /* GL_STENCIL_REF */
+ 1423, /* GL_STENCIL_WRITEMASK */
+ 789, /* GL_MATRIX_MODE */
+ 956, /* GL_NORMALIZE */
+ 1729, /* GL_VIEWPORT */
+ 930, /* GL_MODELVIEW_STACK_DEPTH */
+ 1189, /* GL_PROJECTION_STACK_DEPTH */
+ 1618, /* GL_TEXTURE_STACK_DEPTH */
+ 928, /* GL_MODELVIEW_MATRIX */
+ 1188, /* GL_PROJECTION_MATRIX */
+ 1603, /* GL_TEXTURE_MATRIX */
+ 60, /* GL_ATTRIB_STACK_DEPTH */
+ 126, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
43, /* GL_ALPHA_TEST */
44, /* GL_ALPHA_TEST_FUNC */
45, /* GL_ALPHA_TEST_REF */
- 343, /* GL_DITHER */
- 78, /* GL_BLEND_DST */
- 86, /* GL_BLEND_SRC */
- 75, /* GL_BLEND */
- 666, /* GL_LOGIC_OP_MODE */
- 586, /* GL_INDEX_LOGIC_OP */
- 166, /* GL_COLOR_LOGIC_OP */
- 67, /* GL_AUX_BUFFERS */
- 354, /* GL_DRAW_BUFFER */
- 1223, /* GL_READ_BUFFER */
- 1320, /* GL_SCISSOR_BOX */
- 1321, /* GL_SCISSOR_TEST */
- 585, /* GL_INDEX_CLEAR_VALUE */
- 590, /* GL_INDEX_WRITEMASK */
- 163, /* GL_COLOR_CLEAR_VALUE */
- 205, /* GL_COLOR_WRITEMASK */
- 587, /* GL_INDEX_MODE */
- 1287, /* GL_RGBA_MODE */
- 353, /* GL_DOUBLEBUFFER */
- 1426, /* GL_STEREO */
- 1246, /* GL_RENDER_MODE */
- 1043, /* GL_PERSPECTIVE_CORRECTION_HINT */
- 1092, /* GL_POINT_SMOOTH_HINT */
- 650, /* GL_LINE_SMOOTH_HINT */
- 1109, /* GL_POLYGON_SMOOTH_HINT */
- 478, /* GL_FOG_HINT */
- 1586, /* GL_TEXTURE_GEN_S */
- 1587, /* GL_TEXTURE_GEN_T */
- 1585, /* GL_TEXTURE_GEN_R */
- 1584, /* GL_TEXTURE_GEN_Q */
- 1056, /* GL_PIXEL_MAP_I_TO_I */
- 1062, /* GL_PIXEL_MAP_S_TO_S */
- 1058, /* GL_PIXEL_MAP_I_TO_R */
- 1054, /* GL_PIXEL_MAP_I_TO_G */
- 1052, /* GL_PIXEL_MAP_I_TO_B */
- 1050, /* GL_PIXEL_MAP_I_TO_A */
- 1060, /* GL_PIXEL_MAP_R_TO_R */
- 1048, /* GL_PIXEL_MAP_G_TO_G */
- 1046, /* GL_PIXEL_MAP_B_TO_B */
- 1044, /* GL_PIXEL_MAP_A_TO_A */
- 1057, /* GL_PIXEL_MAP_I_TO_I_SIZE */
- 1063, /* GL_PIXEL_MAP_S_TO_S_SIZE */
- 1059, /* GL_PIXEL_MAP_I_TO_R_SIZE */
- 1055, /* GL_PIXEL_MAP_I_TO_G_SIZE */
- 1053, /* GL_PIXEL_MAP_I_TO_B_SIZE */
- 1051, /* GL_PIXEL_MAP_I_TO_A_SIZE */
- 1061, /* GL_PIXEL_MAP_R_TO_R_SIZE */
- 1049, /* GL_PIXEL_MAP_G_TO_G_SIZE */
- 1047, /* GL_PIXEL_MAP_B_TO_B_SIZE */
- 1045, /* GL_PIXEL_MAP_A_TO_A_SIZE */
- 1653, /* GL_UNPACK_SWAP_BYTES */
- 1648, /* GL_UNPACK_LSB_FIRST */
- 1649, /* GL_UNPACK_ROW_LENGTH */
- 1652, /* GL_UNPACK_SKIP_ROWS */
- 1651, /* GL_UNPACK_SKIP_PIXELS */
- 1646, /* GL_UNPACK_ALIGNMENT */
- 1031, /* GL_PACK_SWAP_BYTES */
- 1026, /* GL_PACK_LSB_FIRST */
- 1027, /* GL_PACK_ROW_LENGTH */
- 1030, /* GL_PACK_SKIP_ROWS */
- 1029, /* GL_PACK_SKIP_PIXELS */
- 1023, /* GL_PACK_ALIGNMENT */
- 744, /* GL_MAP_COLOR */
- 745, /* GL_MAP_STENCIL */
- 589, /* GL_INDEX_SHIFT */
- 588, /* GL_INDEX_OFFSET */
- 1235, /* GL_RED_SCALE */
- 1233, /* GL_RED_BIAS */
- 1748, /* GL_ZOOM_X */
- 1749, /* GL_ZOOM_Y */
- 551, /* GL_GREEN_SCALE */
- 549, /* GL_GREEN_BIAS */
- 92, /* GL_BLUE_SCALE */
- 90, /* GL_BLUE_BIAS */
+ 342, /* GL_DITHER */
+ 77, /* GL_BLEND_DST */
+ 85, /* GL_BLEND_SRC */
+ 74, /* GL_BLEND */
+ 664, /* GL_LOGIC_OP_MODE */
+ 584, /* GL_INDEX_LOGIC_OP */
+ 165, /* GL_COLOR_LOGIC_OP */
+ 66, /* GL_AUX_BUFFERS */
+ 353, /* GL_DRAW_BUFFER */
+ 1221, /* GL_READ_BUFFER */
+ 1318, /* GL_SCISSOR_BOX */
+ 1319, /* GL_SCISSOR_TEST */
+ 583, /* GL_INDEX_CLEAR_VALUE */
+ 588, /* GL_INDEX_WRITEMASK */
+ 162, /* GL_COLOR_CLEAR_VALUE */
+ 204, /* GL_COLOR_WRITEMASK */
+ 585, /* GL_INDEX_MODE */
+ 1285, /* GL_RGBA_MODE */
+ 352, /* GL_DOUBLEBUFFER */
+ 1424, /* GL_STEREO */
+ 1244, /* GL_RENDER_MODE */
+ 1041, /* GL_PERSPECTIVE_CORRECTION_HINT */
+ 1090, /* GL_POINT_SMOOTH_HINT */
+ 648, /* GL_LINE_SMOOTH_HINT */
+ 1107, /* GL_POLYGON_SMOOTH_HINT */
+ 476, /* GL_FOG_HINT */
+ 1584, /* GL_TEXTURE_GEN_S */
+ 1585, /* GL_TEXTURE_GEN_T */
+ 1583, /* GL_TEXTURE_GEN_R */
+ 1582, /* GL_TEXTURE_GEN_Q */
+ 1054, /* GL_PIXEL_MAP_I_TO_I */
+ 1060, /* GL_PIXEL_MAP_S_TO_S */
+ 1056, /* GL_PIXEL_MAP_I_TO_R */
+ 1052, /* GL_PIXEL_MAP_I_TO_G */
+ 1050, /* GL_PIXEL_MAP_I_TO_B */
+ 1048, /* GL_PIXEL_MAP_I_TO_A */
+ 1058, /* GL_PIXEL_MAP_R_TO_R */
+ 1046, /* GL_PIXEL_MAP_G_TO_G */
+ 1044, /* GL_PIXEL_MAP_B_TO_B */
+ 1042, /* GL_PIXEL_MAP_A_TO_A */
+ 1055, /* GL_PIXEL_MAP_I_TO_I_SIZE */
+ 1061, /* GL_PIXEL_MAP_S_TO_S_SIZE */
+ 1057, /* GL_PIXEL_MAP_I_TO_R_SIZE */
+ 1053, /* GL_PIXEL_MAP_I_TO_G_SIZE */
+ 1051, /* GL_PIXEL_MAP_I_TO_B_SIZE */
+ 1049, /* GL_PIXEL_MAP_I_TO_A_SIZE */
+ 1059, /* GL_PIXEL_MAP_R_TO_R_SIZE */
+ 1047, /* GL_PIXEL_MAP_G_TO_G_SIZE */
+ 1045, /* GL_PIXEL_MAP_B_TO_B_SIZE */
+ 1043, /* GL_PIXEL_MAP_A_TO_A_SIZE */
+ 1651, /* GL_UNPACK_SWAP_BYTES */
+ 1646, /* GL_UNPACK_LSB_FIRST */
+ 1647, /* GL_UNPACK_ROW_LENGTH */
+ 1650, /* GL_UNPACK_SKIP_ROWS */
+ 1649, /* GL_UNPACK_SKIP_PIXELS */
+ 1644, /* GL_UNPACK_ALIGNMENT */
+ 1029, /* GL_PACK_SWAP_BYTES */
+ 1024, /* GL_PACK_LSB_FIRST */
+ 1025, /* GL_PACK_ROW_LENGTH */
+ 1028, /* GL_PACK_SKIP_ROWS */
+ 1027, /* GL_PACK_SKIP_PIXELS */
+ 1021, /* GL_PACK_ALIGNMENT */
+ 742, /* GL_MAP_COLOR */
+ 743, /* GL_MAP_STENCIL */
+ 587, /* GL_INDEX_SHIFT */
+ 586, /* GL_INDEX_OFFSET */
+ 1233, /* GL_RED_SCALE */
+ 1231, /* GL_RED_BIAS */
+ 1746, /* GL_ZOOM_X */
+ 1747, /* GL_ZOOM_Y */
+ 549, /* GL_GREEN_SCALE */
+ 547, /* GL_GREEN_BIAS */
+ 91, /* GL_BLUE_SCALE */
+ 89, /* GL_BLUE_BIAS */
42, /* GL_ALPHA_SCALE */
40, /* GL_ALPHA_BIAS */
- 334, /* GL_DEPTH_SCALE */
- 315, /* GL_DEPTH_BIAS */
- 817, /* GL_MAX_EVAL_ORDER */
- 821, /* GL_MAX_LIGHTS */
- 800, /* GL_MAX_CLIP_PLANES */
- 865, /* GL_MAX_TEXTURE_SIZE */
- 827, /* GL_MAX_PIXEL_MAP_TABLE */
- 796, /* GL_MAX_ATTRIB_STACK_DEPTH */
- 824, /* GL_MAX_MODELVIEW_STACK_DEPTH */
- 825, /* GL_MAX_NAME_STACK_DEPTH */
- 853, /* GL_MAX_PROJECTION_STACK_DEPTH */
- 866, /* GL_MAX_TEXTURE_STACK_DEPTH */
- 880, /* GL_MAX_VIEWPORT_DIMS */
- 797, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
- 1433, /* GL_SUBPIXEL_BITS */
- 584, /* GL_INDEX_BITS */
- 1234, /* GL_RED_BITS */
- 550, /* GL_GREEN_BITS */
- 91, /* GL_BLUE_BITS */
+ 333, /* GL_DEPTH_SCALE */
+ 314, /* GL_DEPTH_BIAS */
+ 815, /* GL_MAX_EVAL_ORDER */
+ 819, /* GL_MAX_LIGHTS */
+ 798, /* GL_MAX_CLIP_PLANES */
+ 863, /* GL_MAX_TEXTURE_SIZE */
+ 825, /* GL_MAX_PIXEL_MAP_TABLE */
+ 794, /* GL_MAX_ATTRIB_STACK_DEPTH */
+ 822, /* GL_MAX_MODELVIEW_STACK_DEPTH */
+ 823, /* GL_MAX_NAME_STACK_DEPTH */
+ 851, /* GL_MAX_PROJECTION_STACK_DEPTH */
+ 864, /* GL_MAX_TEXTURE_STACK_DEPTH */
+ 878, /* GL_MAX_VIEWPORT_DIMS */
+ 795, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
+ 1431, /* GL_SUBPIXEL_BITS */
+ 582, /* GL_INDEX_BITS */
+ 1232, /* GL_RED_BITS */
+ 548, /* GL_GREEN_BITS */
+ 90, /* GL_BLUE_BITS */
41, /* GL_ALPHA_BITS */
- 316, /* GL_DEPTH_BITS */
- 1408, /* GL_STENCIL_BITS */
+ 315, /* GL_DEPTH_BITS */
+ 1406, /* GL_STENCIL_BITS */
14, /* GL_ACCUM_RED_BITS */
13, /* GL_ACCUM_GREEN_BITS */
10, /* GL_ACCUM_BLUE_BITS */
9, /* GL_ACCUM_ALPHA_BITS */
- 946, /* GL_NAME_STACK_DEPTH */
- 62, /* GL_AUTO_NORMAL */
- 690, /* GL_MAP1_COLOR_4 */
- 693, /* GL_MAP1_INDEX */
- 694, /* GL_MAP1_NORMAL */
- 695, /* GL_MAP1_TEXTURE_COORD_1 */
- 696, /* GL_MAP1_TEXTURE_COORD_2 */
- 697, /* GL_MAP1_TEXTURE_COORD_3 */
- 698, /* GL_MAP1_TEXTURE_COORD_4 */
- 699, /* GL_MAP1_VERTEX_3 */
- 700, /* GL_MAP1_VERTEX_4 */
- 717, /* GL_MAP2_COLOR_4 */
- 720, /* GL_MAP2_INDEX */
- 721, /* GL_MAP2_NORMAL */
- 722, /* GL_MAP2_TEXTURE_COORD_1 */
- 723, /* GL_MAP2_TEXTURE_COORD_2 */
- 724, /* GL_MAP2_TEXTURE_COORD_3 */
- 725, /* GL_MAP2_TEXTURE_COORD_4 */
- 726, /* GL_MAP2_VERTEX_3 */
- 727, /* GL_MAP2_VERTEX_4 */
- 691, /* GL_MAP1_GRID_DOMAIN */
- 692, /* GL_MAP1_GRID_SEGMENTS */
- 718, /* GL_MAP2_GRID_DOMAIN */
- 719, /* GL_MAP2_GRID_SEGMENTS */
- 1510, /* GL_TEXTURE_1D */
- 1512, /* GL_TEXTURE_2D */
- 439, /* GL_FEEDBACK_BUFFER_POINTER */
- 440, /* GL_FEEDBACK_BUFFER_SIZE */
- 441, /* GL_FEEDBACK_BUFFER_TYPE */
- 1330, /* GL_SELECTION_BUFFER_POINTER */
- 1331, /* GL_SELECTION_BUFFER_SIZE */
- 1623, /* GL_TEXTURE_WIDTH */
- 1591, /* GL_TEXTURE_HEIGHT */
- 1547, /* GL_TEXTURE_COMPONENTS */
- 1531, /* GL_TEXTURE_BORDER_COLOR */
- 1530, /* GL_TEXTURE_BORDER */
- 345, /* GL_DONT_CARE */
- 437, /* GL_FASTEST */
- 954, /* GL_NICEST */
+ 944, /* GL_NAME_STACK_DEPTH */
+ 61, /* 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 */
+ 1508, /* GL_TEXTURE_1D */
+ 1510, /* GL_TEXTURE_2D */
+ 437, /* GL_FEEDBACK_BUFFER_POINTER */
+ 438, /* GL_FEEDBACK_BUFFER_SIZE */
+ 439, /* GL_FEEDBACK_BUFFER_TYPE */
+ 1328, /* GL_SELECTION_BUFFER_POINTER */
+ 1329, /* GL_SELECTION_BUFFER_SIZE */
+ 1621, /* GL_TEXTURE_WIDTH */
+ 1589, /* GL_TEXTURE_HEIGHT */
+ 1545, /* GL_TEXTURE_COMPONENTS */
+ 1529, /* GL_TEXTURE_BORDER_COLOR */
+ 1528, /* GL_TEXTURE_BORDER */
+ 344, /* GL_DONT_CARE */
+ 435, /* GL_FASTEST */
+ 952, /* GL_NICEST */
47, /* GL_AMBIENT */
- 342, /* GL_DIFFUSE */
- 1373, /* GL_SPECULAR */
- 1113, /* GL_POSITION */
- 1376, /* GL_SPOT_DIRECTION */
- 1377, /* GL_SPOT_EXPONENT */
- 1375, /* GL_SPOT_CUTOFF */
- 245, /* GL_CONSTANT_ATTENUATION */
- 640, /* GL_LINEAR_ATTENUATION */
- 1210, /* GL_QUADRATIC_ATTENUATION */
- 219, /* GL_COMPILE */
- 220, /* GL_COMPILE_AND_EXECUTE */
- 111, /* GL_BYTE */
- 1654, /* GL_UNSIGNED_BYTE */
- 1344, /* GL_SHORT */
- 1663, /* GL_UNSIGNED_SHORT */
- 592, /* GL_INT */
- 1657, /* GL_UNSIGNED_INT */
- 444, /* GL_FLOAT */
+ 341, /* GL_DIFFUSE */
+ 1371, /* GL_SPECULAR */
+ 1111, /* GL_POSITION */
+ 1374, /* GL_SPOT_DIRECTION */
+ 1375, /* GL_SPOT_EXPONENT */
+ 1373, /* GL_SPOT_CUTOFF */
+ 244, /* GL_CONSTANT_ATTENUATION */
+ 638, /* GL_LINEAR_ATTENUATION */
+ 1208, /* GL_QUADRATIC_ATTENUATION */
+ 218, /* GL_COMPILE */
+ 219, /* GL_COMPILE_AND_EXECUTE */
+ 110, /* GL_BYTE */
+ 1652, /* GL_UNSIGNED_BYTE */
+ 1342, /* GL_SHORT */
+ 1661, /* GL_UNSIGNED_SHORT */
+ 590, /* GL_INT */
+ 1655, /* GL_UNSIGNED_INT */
+ 442, /* GL_FLOAT */
1, /* GL_2_BYTES */
5, /* GL_3_BYTES */
7, /* GL_4_BYTES */
- 352, /* GL_DOUBLE */
- 123, /* GL_CLEAR */
+ 351, /* GL_DOUBLE */
+ 122, /* GL_CLEAR */
49, /* GL_AND */
51, /* GL_AND_REVERSE */
- 269, /* GL_COPY */
+ 268, /* GL_COPY */
50, /* GL_AND_INVERTED */
- 956, /* GL_NOOP */
- 1744, /* GL_XOR */
- 1018, /* GL_OR */
- 957, /* GL_NOR */
- 427, /* GL_EQUIV */
- 618, /* GL_INVERT */
- 1021, /* GL_OR_REVERSE */
- 270, /* GL_COPY_INVERTED */
- 1020, /* GL_OR_INVERTED */
- 947, /* GL_NAND */
- 1335, /* GL_SET */
- 424, /* GL_EMISSION */
- 1343, /* GL_SHININESS */
+ 954, /* GL_NOOP */
+ 1742, /* GL_XOR */
+ 1016, /* GL_OR */
+ 955, /* GL_NOR */
+ 425, /* GL_EQUIV */
+ 616, /* GL_INVERT */
+ 1019, /* GL_OR_REVERSE */
+ 269, /* GL_COPY_INVERTED */
+ 1018, /* GL_OR_INVERTED */
+ 945, /* GL_NAND */
+ 1333, /* GL_SET */
+ 422, /* GL_EMISSION */
+ 1341, /* GL_SHININESS */
48, /* GL_AMBIENT_AND_DIFFUSE */
- 165, /* GL_COLOR_INDEXES */
- 897, /* GL_MODELVIEW */
- 1189, /* GL_PROJECTION */
- 1445, /* GL_TEXTURE */
- 138, /* GL_COLOR */
- 313, /* GL_DEPTH */
- 1395, /* GL_STENCIL */
- 164, /* GL_COLOR_INDEX */
- 1413, /* GL_STENCIL_INDEX */
- 322, /* GL_DEPTH_COMPONENT */
- 1230, /* GL_RED */
- 548, /* GL_GREEN */
- 89, /* GL_BLUE */
+ 164, /* GL_COLOR_INDEXES */
+ 895, /* GL_MODELVIEW */
+ 1187, /* GL_PROJECTION */
+ 1443, /* GL_TEXTURE */
+ 137, /* GL_COLOR */
+ 312, /* GL_DEPTH */
+ 1393, /* GL_STENCIL */
+ 163, /* GL_COLOR_INDEX */
+ 1411, /* GL_STENCIL_INDEX */
+ 321, /* GL_DEPTH_COMPONENT */
+ 1228, /* GL_RED */
+ 546, /* GL_GREEN */
+ 88, /* GL_BLUE */
31, /* GL_ALPHA */
- 1254, /* GL_RGB */
- 1273, /* GL_RGBA */
- 668, /* GL_LUMINANCE */
- 689, /* GL_LUMINANCE_ALPHA */
- 73, /* GL_BITMAP */
- 1069, /* GL_POINT */
- 638, /* GL_LINE */
- 442, /* GL_FILL */
- 1239, /* GL_RENDER */
- 438, /* GL_FEEDBACK */
- 1329, /* GL_SELECT */
- 443, /* GL_FLAT */
- 1348, /* GL_SMOOTH */
- 619, /* GL_KEEP */
- 1248, /* GL_REPLACE */
- 575, /* GL_INCR */
- 309, /* GL_DECR */
- 1678, /* GL_VENDOR */
- 1245, /* GL_RENDERER */
- 1679, /* GL_VERSION */
- 431, /* GL_EXTENSIONS */
- 1294, /* GL_S */
- 1436, /* GL_T */
- 1220, /* GL_R */
- 1209, /* GL_Q */
- 933, /* GL_MODULATE */
- 308, /* GL_DECAL */
- 1581, /* GL_TEXTURE_ENV_MODE */
- 1580, /* GL_TEXTURE_ENV_COLOR */
- 1579, /* GL_TEXTURE_ENV */
- 432, /* GL_EYE_LINEAR */
- 980, /* GL_OBJECT_LINEAR */
- 1374, /* GL_SPHERE_MAP */
- 1583, /* GL_TEXTURE_GEN_MODE */
- 982, /* GL_OBJECT_PLANE */
- 433, /* GL_EYE_PLANE */
- 948, /* GL_NEAREST */
- 639, /* GL_LINEAR */
- 952, /* GL_NEAREST_MIPMAP_NEAREST */
- 644, /* GL_LINEAR_MIPMAP_NEAREST */
- 951, /* GL_NEAREST_MIPMAP_LINEAR */
- 643, /* GL_LINEAR_MIPMAP_LINEAR */
- 1604, /* GL_TEXTURE_MAG_FILTER */
- 1612, /* GL_TEXTURE_MIN_FILTER */
- 1625, /* GL_TEXTURE_WRAP_S */
- 1626, /* GL_TEXTURE_WRAP_T */
- 117, /* GL_CLAMP */
- 1247, /* GL_REPEAT */
- 1107, /* GL_POLYGON_OFFSET_UNITS */
- 1106, /* GL_POLYGON_OFFSET_POINT */
- 1105, /* GL_POLYGON_OFFSET_LINE */
- 1221, /* GL_R3_G3_B2 */
- 1675, /* GL_V2F */
- 1676, /* GL_V3F */
- 114, /* GL_C4UB_V2F */
- 115, /* GL_C4UB_V3F */
- 112, /* GL_C3F_V3F */
- 945, /* GL_N3F_V3F */
- 113, /* GL_C4F_N3F_V3F */
- 1441, /* GL_T2F_V3F */
- 1443, /* GL_T4F_V4F */
- 1439, /* GL_T2F_C4UB_V3F */
- 1437, /* GL_T2F_C3F_V3F */
- 1440, /* GL_T2F_N3F_V3F */
- 1438, /* GL_T2F_C4F_N3F_V3F */
- 1442, /* 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 */
- 623, /* GL_LIGHT0 */
- 624, /* GL_LIGHT1 */
- 625, /* GL_LIGHT2 */
- 626, /* GL_LIGHT3 */
- 627, /* GL_LIGHT4 */
- 628, /* GL_LIGHT5 */
- 629, /* GL_LIGHT6 */
- 630, /* GL_LIGHT7 */
- 552, /* GL_HINT_BIT */
- 247, /* GL_CONSTANT_COLOR */
- 992, /* GL_ONE_MINUS_CONSTANT_COLOR */
- 242, /* GL_CONSTANT_ALPHA */
- 990, /* GL_ONE_MINUS_CONSTANT_ALPHA */
- 76, /* GL_BLEND_COLOR */
- 512, /* GL_FUNC_ADD */
- 881, /* GL_MIN */
- 793, /* GL_MAX */
- 81, /* GL_BLEND_EQUATION */
- 516, /* GL_FUNC_SUBTRACT */
- 514, /* GL_FUNC_REVERSE_SUBTRACT */
- 250, /* GL_CONVOLUTION_1D */
- 251, /* GL_CONVOLUTION_2D */
- 1332, /* GL_SEPARABLE_2D */
- 254, /* GL_CONVOLUTION_BORDER_MODE */
- 258, /* GL_CONVOLUTION_FILTER_SCALE */
- 256, /* GL_CONVOLUTION_FILTER_BIAS */
- 1231, /* GL_REDUCE */
- 260, /* GL_CONVOLUTION_FORMAT */
- 264, /* GL_CONVOLUTION_WIDTH */
- 262, /* GL_CONVOLUTION_HEIGHT */
- 808, /* GL_MAX_CONVOLUTION_WIDTH */
- 806, /* GL_MAX_CONVOLUTION_HEIGHT */
- 1146, /* GL_POST_CONVOLUTION_RED_SCALE */
- 1142, /* GL_POST_CONVOLUTION_GREEN_SCALE */
- 1137, /* GL_POST_CONVOLUTION_BLUE_SCALE */
- 1133, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
- 1144, /* GL_POST_CONVOLUTION_RED_BIAS */
- 1140, /* GL_POST_CONVOLUTION_GREEN_BIAS */
- 1135, /* GL_POST_CONVOLUTION_BLUE_BIAS */
- 1131, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
- 553, /* GL_HISTOGRAM */
- 1193, /* GL_PROXY_HISTOGRAM */
- 569, /* GL_HISTOGRAM_WIDTH */
- 559, /* GL_HISTOGRAM_FORMAT */
- 565, /* GL_HISTOGRAM_RED_SIZE */
- 561, /* GL_HISTOGRAM_GREEN_SIZE */
- 556, /* GL_HISTOGRAM_BLUE_SIZE */
- 554, /* GL_HISTOGRAM_ALPHA_SIZE */
- 563, /* GL_HISTOGRAM_LUMINANCE_SIZE */
- 567, /* GL_HISTOGRAM_SINK */
- 882, /* GL_MINMAX */
- 884, /* GL_MINMAX_FORMAT */
- 886, /* GL_MINMAX_SINK */
- 1444, /* GL_TABLE_TOO_LARGE_EXT */
- 1656, /* GL_UNSIGNED_BYTE_3_3_2 */
- 1665, /* GL_UNSIGNED_SHORT_4_4_4_4 */
- 1667, /* GL_UNSIGNED_SHORT_5_5_5_1 */
- 1661, /* GL_UNSIGNED_INT_8_8_8_8 */
- 1658, /* GL_UNSIGNED_INT_10_10_10_2 */
- 1104, /* GL_POLYGON_OFFSET_FILL */
- 1103, /* GL_POLYGON_OFFSET_FACTOR */
- 1102, /* GL_POLYGON_OFFSET_BIAS */
- 1251, /* GL_RESCALE_NORMAL */
+ 1252, /* GL_RGB */
+ 1271, /* GL_RGBA */
+ 666, /* GL_LUMINANCE */
+ 687, /* GL_LUMINANCE_ALPHA */
+ 72, /* GL_BITMAP */
+ 1067, /* GL_POINT */
+ 636, /* GL_LINE */
+ 440, /* GL_FILL */
+ 1237, /* GL_RENDER */
+ 436, /* GL_FEEDBACK */
+ 1327, /* GL_SELECT */
+ 441, /* GL_FLAT */
+ 1346, /* GL_SMOOTH */
+ 617, /* GL_KEEP */
+ 1246, /* GL_REPLACE */
+ 573, /* GL_INCR */
+ 308, /* GL_DECR */
+ 1676, /* GL_VENDOR */
+ 1243, /* GL_RENDERER */
+ 1677, /* GL_VERSION */
+ 429, /* GL_EXTENSIONS */
+ 1292, /* GL_S */
+ 1434, /* GL_T */
+ 1218, /* GL_R */
+ 1207, /* GL_Q */
+ 931, /* GL_MODULATE */
+ 307, /* GL_DECAL */
+ 1579, /* GL_TEXTURE_ENV_MODE */
+ 1578, /* GL_TEXTURE_ENV_COLOR */
+ 1577, /* GL_TEXTURE_ENV */
+ 430, /* GL_EYE_LINEAR */
+ 978, /* GL_OBJECT_LINEAR */
+ 1372, /* GL_SPHERE_MAP */
+ 1581, /* GL_TEXTURE_GEN_MODE */
+ 980, /* GL_OBJECT_PLANE */
+ 431, /* GL_EYE_PLANE */
+ 946, /* GL_NEAREST */
+ 637, /* GL_LINEAR */
+ 950, /* GL_NEAREST_MIPMAP_NEAREST */
+ 642, /* GL_LINEAR_MIPMAP_NEAREST */
+ 949, /* GL_NEAREST_MIPMAP_LINEAR */
+ 641, /* GL_LINEAR_MIPMAP_LINEAR */
+ 1602, /* GL_TEXTURE_MAG_FILTER */
+ 1610, /* GL_TEXTURE_MIN_FILTER */
+ 1623, /* GL_TEXTURE_WRAP_S */
+ 1624, /* GL_TEXTURE_WRAP_T */
+ 116, /* GL_CLAMP */
+ 1245, /* GL_REPEAT */
+ 1105, /* GL_POLYGON_OFFSET_UNITS */
+ 1104, /* GL_POLYGON_OFFSET_POINT */
+ 1103, /* GL_POLYGON_OFFSET_LINE */
+ 1219, /* GL_R3_G3_B2 */
+ 1673, /* GL_V2F */
+ 1674, /* GL_V3F */
+ 113, /* GL_C4UB_V2F */
+ 114, /* GL_C4UB_V3F */
+ 111, /* GL_C3F_V3F */
+ 943, /* GL_N3F_V3F */
+ 112, /* GL_C4F_N3F_V3F */
+ 1439, /* GL_T2F_V3F */
+ 1441, /* GL_T4F_V4F */
+ 1437, /* GL_T2F_C4UB_V3F */
+ 1435, /* GL_T2F_C3F_V3F */
+ 1438, /* GL_T2F_N3F_V3F */
+ 1436, /* GL_T2F_C4F_N3F_V3F */
+ 1440, /* GL_T4F_C4F_N3F_V4F */
+ 129, /* GL_CLIP_PLANE0 */
+ 130, /* GL_CLIP_PLANE1 */
+ 131, /* GL_CLIP_PLANE2 */
+ 132, /* GL_CLIP_PLANE3 */
+ 133, /* GL_CLIP_PLANE4 */
+ 134, /* 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 */
+ 990, /* GL_ONE_MINUS_CONSTANT_COLOR */
+ 241, /* GL_CONSTANT_ALPHA */
+ 988, /* GL_ONE_MINUS_CONSTANT_ALPHA */
+ 75, /* GL_BLEND_COLOR */
+ 510, /* GL_FUNC_ADD */
+ 879, /* GL_MIN */
+ 791, /* GL_MAX */
+ 80, /* GL_BLEND_EQUATION */
+ 514, /* GL_FUNC_SUBTRACT */
+ 512, /* GL_FUNC_REVERSE_SUBTRACT */
+ 249, /* GL_CONVOLUTION_1D */
+ 250, /* GL_CONVOLUTION_2D */
+ 1330, /* GL_SEPARABLE_2D */
+ 253, /* GL_CONVOLUTION_BORDER_MODE */
+ 257, /* GL_CONVOLUTION_FILTER_SCALE */
+ 255, /* GL_CONVOLUTION_FILTER_BIAS */
+ 1229, /* GL_REDUCE */
+ 259, /* GL_CONVOLUTION_FORMAT */
+ 263, /* GL_CONVOLUTION_WIDTH */
+ 261, /* GL_CONVOLUTION_HEIGHT */
+ 806, /* GL_MAX_CONVOLUTION_WIDTH */
+ 804, /* GL_MAX_CONVOLUTION_HEIGHT */
+ 1144, /* GL_POST_CONVOLUTION_RED_SCALE */
+ 1140, /* GL_POST_CONVOLUTION_GREEN_SCALE */
+ 1135, /* GL_POST_CONVOLUTION_BLUE_SCALE */
+ 1131, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
+ 1142, /* GL_POST_CONVOLUTION_RED_BIAS */
+ 1138, /* GL_POST_CONVOLUTION_GREEN_BIAS */
+ 1133, /* GL_POST_CONVOLUTION_BLUE_BIAS */
+ 1129, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
+ 551, /* GL_HISTOGRAM */
+ 1191, /* 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 */
+ 880, /* GL_MINMAX */
+ 882, /* GL_MINMAX_FORMAT */
+ 884, /* GL_MINMAX_SINK */
+ 1442, /* GL_TABLE_TOO_LARGE_EXT */
+ 1654, /* GL_UNSIGNED_BYTE_3_3_2 */
+ 1663, /* GL_UNSIGNED_SHORT_4_4_4_4 */
+ 1665, /* GL_UNSIGNED_SHORT_5_5_5_1 */
+ 1659, /* GL_UNSIGNED_INT_8_8_8_8 */
+ 1656, /* GL_UNSIGNED_INT_10_10_10_2 */
+ 1102, /* GL_POLYGON_OFFSET_FILL */
+ 1101, /* GL_POLYGON_OFFSET_FACTOR */
+ 1100, /* GL_POLYGON_OFFSET_BIAS */
+ 1249, /* GL_RESCALE_NORMAL */
36, /* GL_ALPHA4 */
38, /* GL_ALPHA8 */
32, /* GL_ALPHA12 */
34, /* GL_ALPHA16 */
- 679, /* GL_LUMINANCE4 */
- 685, /* GL_LUMINANCE8 */
- 669, /* GL_LUMINANCE12 */
- 675, /* GL_LUMINANCE16 */
- 680, /* GL_LUMINANCE4_ALPHA4 */
- 683, /* GL_LUMINANCE6_ALPHA2 */
- 686, /* GL_LUMINANCE8_ALPHA8 */
- 672, /* GL_LUMINANCE12_ALPHA4 */
- 670, /* GL_LUMINANCE12_ALPHA12 */
- 676, /* GL_LUMINANCE16_ALPHA16 */
- 593, /* GL_INTENSITY */
- 598, /* GL_INTENSITY4 */
- 600, /* GL_INTENSITY8 */
- 594, /* GL_INTENSITY12 */
- 596, /* GL_INTENSITY16 */
- 1263, /* GL_RGB2_EXT */
- 1264, /* GL_RGB4 */
- 1267, /* GL_RGB5 */
- 1271, /* GL_RGB8 */
- 1255, /* GL_RGB10 */
- 1259, /* GL_RGB12 */
- 1261, /* GL_RGB16 */
- 1278, /* GL_RGBA2 */
- 1280, /* GL_RGBA4 */
- 1268, /* GL_RGB5_A1 */
- 1284, /* GL_RGBA8 */
- 1256, /* GL_RGB10_A2 */
- 1274, /* GL_RGBA12 */
- 1276, /* GL_RGBA16 */
- 1617, /* GL_TEXTURE_RED_SIZE */
- 1589, /* GL_TEXTURE_GREEN_SIZE */
- 1528, /* GL_TEXTURE_BLUE_SIZE */
- 1515, /* GL_TEXTURE_ALPHA_SIZE */
- 1602, /* GL_TEXTURE_LUMINANCE_SIZE */
- 1593, /* GL_TEXTURE_INTENSITY_SIZE */
- 1249, /* GL_REPLACE_EXT */
- 1197, /* GL_PROXY_TEXTURE_1D */
- 1200, /* GL_PROXY_TEXTURE_2D */
- 1621, /* GL_TEXTURE_TOO_LARGE_EXT */
- 1614, /* GL_TEXTURE_PRIORITY */
- 1619, /* GL_TEXTURE_RESIDENT */
- 1518, /* GL_TEXTURE_BINDING_1D */
- 1520, /* GL_TEXTURE_BINDING_2D */
- 1522, /* GL_TEXTURE_BINDING_3D */
- 1028, /* GL_PACK_SKIP_IMAGES */
- 1024, /* GL_PACK_IMAGE_HEIGHT */
- 1650, /* GL_UNPACK_SKIP_IMAGES */
- 1647, /* GL_UNPACK_IMAGE_HEIGHT */
- 1514, /* GL_TEXTURE_3D */
- 1203, /* GL_PROXY_TEXTURE_3D */
- 1576, /* GL_TEXTURE_DEPTH */
- 1624, /* GL_TEXTURE_WRAP_R */
- 794, /* GL_MAX_3D_TEXTURE_SIZE */
- 1680, /* GL_VERTEX_ARRAY */
- 959, /* GL_NORMAL_ARRAY */
- 139, /* GL_COLOR_ARRAY */
- 578, /* GL_INDEX_ARRAY */
- 1555, /* GL_TEXTURE_COORD_ARRAY */
- 415, /* GL_EDGE_FLAG_ARRAY */
- 1685, /* GL_VERTEX_ARRAY_SIZE */
- 1687, /* GL_VERTEX_ARRAY_TYPE */
- 1686, /* GL_VERTEX_ARRAY_STRIDE */
- 964, /* GL_NORMAL_ARRAY_TYPE */
- 963, /* GL_NORMAL_ARRAY_STRIDE */
- 143, /* GL_COLOR_ARRAY_SIZE */
- 145, /* GL_COLOR_ARRAY_TYPE */
- 144, /* GL_COLOR_ARRAY_STRIDE */
- 583, /* GL_INDEX_ARRAY_TYPE */
- 582, /* GL_INDEX_ARRAY_STRIDE */
- 1559, /* GL_TEXTURE_COORD_ARRAY_SIZE */
- 1561, /* GL_TEXTURE_COORD_ARRAY_TYPE */
- 1560, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
- 419, /* GL_EDGE_FLAG_ARRAY_STRIDE */
- 1684, /* GL_VERTEX_ARRAY_POINTER */
- 962, /* GL_NORMAL_ARRAY_POINTER */
- 142, /* GL_COLOR_ARRAY_POINTER */
- 581, /* GL_INDEX_ARRAY_POINTER */
- 1558, /* GL_TEXTURE_COORD_ARRAY_POINTER */
- 418, /* GL_EDGE_FLAG_ARRAY_POINTER */
- 938, /* GL_MULTISAMPLE */
- 1306, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
- 1308, /* GL_SAMPLE_ALPHA_TO_ONE */
- 1313, /* GL_SAMPLE_COVERAGE */
- 1310, /* GL_SAMPLE_BUFFERS */
- 1301, /* GL_SAMPLES */
- 1317, /* GL_SAMPLE_COVERAGE_VALUE */
- 1315, /* GL_SAMPLE_COVERAGE_INVERT */
- 170, /* GL_COLOR_MATRIX */
- 172, /* GL_COLOR_MATRIX_STACK_DEPTH */
- 802, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
- 1129, /* GL_POST_COLOR_MATRIX_RED_SCALE */
- 1125, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
- 1120, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
- 1116, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
- 1127, /* GL_POST_COLOR_MATRIX_RED_BIAS */
- 1123, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
- 1118, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
- 1114, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
- 1538, /* GL_TEXTURE_COLOR_TABLE_SGI */
- 1204, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
- 1540, /* 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 */
- 1139, /* GL_POST_CONVOLUTION_COLOR_TABLE */
- 1122, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
- 1192, /* GL_PROXY_COLOR_TABLE */
- 1196, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
- 1195, /* 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 */
- 816, /* GL_MAX_ELEMENTS_VERTICES */
- 815, /* GL_MAX_ELEMENTS_INDICES */
- 1592, /* GL_TEXTURE_INDEX_SIZE_EXT */
- 136, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
- 1086, /* GL_POINT_SIZE_MIN */
- 1082, /* GL_POINT_SIZE_MAX */
- 1076, /* GL_POINT_FADE_THRESHOLD_SIZE */
- 1072, /* GL_POINT_DISTANCE_ATTENUATION */
- 118, /* GL_CLAMP_TO_BORDER */
- 121, /* GL_CLAMP_TO_EDGE */
- 1613, /* GL_TEXTURE_MIN_LOD */
- 1611, /* GL_TEXTURE_MAX_LOD */
- 1517, /* GL_TEXTURE_BASE_LEVEL */
- 1610, /* GL_TEXTURE_MAX_LEVEL */
- 572, /* GL_IGNORE_BORDER_HP */
- 246, /* GL_CONSTANT_BORDER_HP */
- 1250, /* GL_REPLICATE_BORDER_HP */
- 252, /* GL_CONVOLUTION_BORDER_COLOR */
- 987, /* GL_OCCLUSION_TEST_HP */
- 988, /* GL_OCCLUSION_TEST_RESULT_HP */
- 641, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
- 1532, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
- 1534, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
- 1536, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
- 1537, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
- 1535, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
- 1533, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
- 798, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
- 799, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
- 1149, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
- 1151, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
- 1148, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
- 1150, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
- 1600, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
- 1601, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
- 1599, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
- 518, /* GL_GENERATE_MIPMAP */
- 519, /* GL_GENERATE_MIPMAP_HINT */
- 481, /* GL_FOG_OFFSET_SGIX */
- 482, /* GL_FOG_OFFSET_VALUE_SGIX */
- 1546, /* GL_TEXTURE_COMPARE_SGIX */
- 1545, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
- 1596, /* GL_TEXTURE_LEQUAL_R_SGIX */
- 1588, /* GL_TEXTURE_GEQUAL_R_SGIX */
- 323, /* GL_DEPTH_COMPONENT16 */
- 326, /* GL_DEPTH_COMPONENT24 */
- 329, /* GL_DEPTH_COMPONENT32 */
- 274, /* GL_CULL_VERTEX_EXT */
- 276, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
- 275, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
- 1741, /* GL_WRAP_BORDER_SUN */
- 1539, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
- 634, /* GL_LIGHT_MODEL_COLOR_CONTROL */
- 1345, /* GL_SINGLE_COLOR */
- 1333, /* GL_SEPARATE_SPECULAR_COLOR */
- 1342, /* GL_SHARED_TEXTURE_PALETTE_EXT */
- 1655, /* GL_UNSIGNED_BYTE_2_3_3_REV */
- 1668, /* GL_UNSIGNED_SHORT_5_6_5 */
- 1669, /* GL_UNSIGNED_SHORT_5_6_5_REV */
- 1666, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
- 1664, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
- 1662, /* GL_UNSIGNED_INT_8_8_8_8_REV */
- 1660, /* GL_UNSIGNED_INT_2_10_10_10_REV */
- 1608, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
- 1609, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
- 1607, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
- 889, /* GL_MIRRORED_REPEAT */
- 1289, /* GL_RGB_S3TC */
- 1266, /* GL_RGB4_S3TC */
- 1288, /* GL_RGBA_S3TC */
- 1283, /* GL_RGBA4_S3TC */
- 1286, /* GL_RGBA_DXT5_S3TC */
- 1281, /* GL_RGBA4_DXT5_S3TC */
- 239, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
- 234, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
- 235, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
- 236, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
- 950, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
- 949, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
- 642, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
- 468, /* GL_FOG_COORDINATE_SOURCE */
- 460, /* GL_FOG_COORD */
- 484, /* GL_FRAGMENT_DEPTH */
- 280, /* GL_CURRENT_FOG_COORD */
- 467, /* GL_FOG_COORDINATE_ARRAY_TYPE */
- 466, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
- 465, /* GL_FOG_COORDINATE_ARRAY_POINTER */
- 462, /* GL_FOG_COORDINATE_ARRAY */
- 174, /* GL_COLOR_SUM */
- 299, /* GL_CURRENT_SECONDARY_COLOR */
- 1326, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
- 1328, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
- 1327, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
- 1325, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
- 1322, /* GL_SECONDARY_COLOR_ARRAY */
- 528, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */
+ 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 */
+ 1261, /* GL_RGB2_EXT */
+ 1262, /* GL_RGB4 */
+ 1265, /* GL_RGB5 */
+ 1269, /* GL_RGB8 */
+ 1253, /* GL_RGB10 */
+ 1257, /* GL_RGB12 */
+ 1259, /* GL_RGB16 */
+ 1276, /* GL_RGBA2 */
+ 1278, /* GL_RGBA4 */
+ 1266, /* GL_RGB5_A1 */
+ 1282, /* GL_RGBA8 */
+ 1254, /* GL_RGB10_A2 */
+ 1272, /* GL_RGBA12 */
+ 1274, /* GL_RGBA16 */
+ 1615, /* GL_TEXTURE_RED_SIZE */
+ 1587, /* GL_TEXTURE_GREEN_SIZE */
+ 1526, /* GL_TEXTURE_BLUE_SIZE */
+ 1513, /* GL_TEXTURE_ALPHA_SIZE */
+ 1600, /* GL_TEXTURE_LUMINANCE_SIZE */
+ 1591, /* GL_TEXTURE_INTENSITY_SIZE */
+ 1247, /* GL_REPLACE_EXT */
+ 1195, /* GL_PROXY_TEXTURE_1D */
+ 1198, /* GL_PROXY_TEXTURE_2D */
+ 1619, /* GL_TEXTURE_TOO_LARGE_EXT */
+ 1612, /* GL_TEXTURE_PRIORITY */
+ 1617, /* GL_TEXTURE_RESIDENT */
+ 1516, /* GL_TEXTURE_BINDING_1D */
+ 1518, /* GL_TEXTURE_BINDING_2D */
+ 1520, /* GL_TEXTURE_BINDING_3D */
+ 1026, /* GL_PACK_SKIP_IMAGES */
+ 1022, /* GL_PACK_IMAGE_HEIGHT */
+ 1648, /* GL_UNPACK_SKIP_IMAGES */
+ 1645, /* GL_UNPACK_IMAGE_HEIGHT */
+ 1512, /* GL_TEXTURE_3D */
+ 1201, /* GL_PROXY_TEXTURE_3D */
+ 1574, /* GL_TEXTURE_DEPTH */
+ 1622, /* GL_TEXTURE_WRAP_R */
+ 792, /* GL_MAX_3D_TEXTURE_SIZE */
+ 1678, /* GL_VERTEX_ARRAY */
+ 957, /* GL_NORMAL_ARRAY */
+ 138, /* GL_COLOR_ARRAY */
+ 576, /* GL_INDEX_ARRAY */
+ 1553, /* GL_TEXTURE_COORD_ARRAY */
+ 414, /* GL_EDGE_FLAG_ARRAY */
+ 1683, /* GL_VERTEX_ARRAY_SIZE */
+ 1685, /* GL_VERTEX_ARRAY_TYPE */
+ 1684, /* GL_VERTEX_ARRAY_STRIDE */
+ 962, /* GL_NORMAL_ARRAY_TYPE */
+ 961, /* GL_NORMAL_ARRAY_STRIDE */
+ 142, /* GL_COLOR_ARRAY_SIZE */
+ 144, /* GL_COLOR_ARRAY_TYPE */
+ 143, /* GL_COLOR_ARRAY_STRIDE */
+ 581, /* GL_INDEX_ARRAY_TYPE */
+ 580, /* GL_INDEX_ARRAY_STRIDE */
+ 1557, /* GL_TEXTURE_COORD_ARRAY_SIZE */
+ 1559, /* GL_TEXTURE_COORD_ARRAY_TYPE */
+ 1558, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
+ 418, /* GL_EDGE_FLAG_ARRAY_STRIDE */
+ 1682, /* GL_VERTEX_ARRAY_POINTER */
+ 960, /* GL_NORMAL_ARRAY_POINTER */
+ 141, /* GL_COLOR_ARRAY_POINTER */
+ 579, /* GL_INDEX_ARRAY_POINTER */
+ 1556, /* GL_TEXTURE_COORD_ARRAY_POINTER */
+ 417, /* GL_EDGE_FLAG_ARRAY_POINTER */
+ 936, /* GL_MULTISAMPLE */
+ 1304, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
+ 1306, /* GL_SAMPLE_ALPHA_TO_ONE */
+ 1311, /* GL_SAMPLE_COVERAGE */
+ 1308, /* GL_SAMPLE_BUFFERS */
+ 1299, /* GL_SAMPLES */
+ 1315, /* GL_SAMPLE_COVERAGE_VALUE */
+ 1313, /* GL_SAMPLE_COVERAGE_INVERT */
+ 169, /* GL_COLOR_MATRIX */
+ 171, /* GL_COLOR_MATRIX_STACK_DEPTH */
+ 800, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
+ 1127, /* GL_POST_COLOR_MATRIX_RED_SCALE */
+ 1123, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
+ 1118, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
+ 1114, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
+ 1125, /* GL_POST_COLOR_MATRIX_RED_BIAS */
+ 1121, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
+ 1116, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
+ 1112, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
+ 1536, /* GL_TEXTURE_COLOR_TABLE_SGI */
+ 1202, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
+ 1538, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
+ 79, /* GL_BLEND_DST_RGB */
+ 87, /* GL_BLEND_SRC_RGB */
+ 78, /* GL_BLEND_DST_ALPHA */
+ 86, /* GL_BLEND_SRC_ALPHA */
+ 175, /* GL_COLOR_TABLE */
+ 1137, /* GL_POST_CONVOLUTION_COLOR_TABLE */
+ 1120, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
+ 1190, /* GL_PROXY_COLOR_TABLE */
+ 1194, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
+ 1193, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
+ 199, /* GL_COLOR_TABLE_SCALE */
+ 179, /* GL_COLOR_TABLE_BIAS */
+ 184, /* GL_COLOR_TABLE_FORMAT */
+ 201, /* GL_COLOR_TABLE_WIDTH */
+ 196, /* GL_COLOR_TABLE_RED_SIZE */
+ 187, /* GL_COLOR_TABLE_GREEN_SIZE */
+ 181, /* GL_COLOR_TABLE_BLUE_SIZE */
+ 176, /* GL_COLOR_TABLE_ALPHA_SIZE */
+ 193, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
+ 190, /* GL_COLOR_TABLE_INTENSITY_SIZE */
+ 70, /* GL_BGR */
+ 71, /* GL_BGRA */
+ 814, /* GL_MAX_ELEMENTS_VERTICES */
+ 813, /* GL_MAX_ELEMENTS_INDICES */
+ 1590, /* GL_TEXTURE_INDEX_SIZE_EXT */
+ 135, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
+ 1084, /* GL_POINT_SIZE_MIN */
+ 1080, /* GL_POINT_SIZE_MAX */
+ 1074, /* GL_POINT_FADE_THRESHOLD_SIZE */
+ 1070, /* GL_POINT_DISTANCE_ATTENUATION */
+ 117, /* GL_CLAMP_TO_BORDER */
+ 120, /* GL_CLAMP_TO_EDGE */
+ 1611, /* GL_TEXTURE_MIN_LOD */
+ 1609, /* GL_TEXTURE_MAX_LOD */
+ 1515, /* GL_TEXTURE_BASE_LEVEL */
+ 1608, /* GL_TEXTURE_MAX_LEVEL */
+ 570, /* GL_IGNORE_BORDER_HP */
+ 245, /* GL_CONSTANT_BORDER_HP */
+ 1248, /* GL_REPLICATE_BORDER_HP */
+ 251, /* GL_CONVOLUTION_BORDER_COLOR */
+ 985, /* GL_OCCLUSION_TEST_HP */
+ 986, /* GL_OCCLUSION_TEST_RESULT_HP */
+ 639, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
+ 1530, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
+ 1532, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
+ 1534, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
+ 1535, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+ 1533, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
+ 1531, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
+ 796, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
+ 797, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+ 1147, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
+ 1149, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
+ 1146, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
+ 1148, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
+ 1598, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
+ 1599, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
+ 1597, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
+ 516, /* GL_GENERATE_MIPMAP */
+ 517, /* GL_GENERATE_MIPMAP_HINT */
+ 479, /* GL_FOG_OFFSET_SGIX */
+ 480, /* GL_FOG_OFFSET_VALUE_SGIX */
+ 1544, /* GL_TEXTURE_COMPARE_SGIX */
+ 1543, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
+ 1594, /* GL_TEXTURE_LEQUAL_R_SGIX */
+ 1586, /* 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 */
+ 1739, /* GL_WRAP_BORDER_SUN */
+ 1537, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
+ 632, /* GL_LIGHT_MODEL_COLOR_CONTROL */
+ 1343, /* GL_SINGLE_COLOR */
+ 1331, /* GL_SEPARATE_SPECULAR_COLOR */
+ 1340, /* GL_SHARED_TEXTURE_PALETTE_EXT */
+ 1653, /* GL_UNSIGNED_BYTE_2_3_3_REV */
+ 1666, /* GL_UNSIGNED_SHORT_5_6_5 */
+ 1667, /* GL_UNSIGNED_SHORT_5_6_5_REV */
+ 1664, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
+ 1662, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
+ 1660, /* GL_UNSIGNED_INT_8_8_8_8_REV */
+ 1658, /* GL_UNSIGNED_INT_2_10_10_10_REV */
+ 1606, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
+ 1607, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
+ 1605, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
+ 887, /* GL_MIRRORED_REPEAT */
+ 1287, /* GL_RGB_S3TC */
+ 1264, /* GL_RGB4_S3TC */
+ 1286, /* GL_RGBA_S3TC */
+ 1281, /* GL_RGBA4_S3TC */
+ 1284, /* GL_RGBA_DXT5_S3TC */
+ 1279, /* 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 */
+ 948, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
+ 947, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
+ 640, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
+ 466, /* GL_FOG_COORDINATE_SOURCE */
+ 458, /* GL_FOG_COORD */
+ 482, /* GL_FRAGMENT_DEPTH */
+ 279, /* GL_CURRENT_FOG_COORD */
+ 465, /* GL_FOG_COORDINATE_ARRAY_TYPE */
+ 464, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
+ 463, /* GL_FOG_COORDINATE_ARRAY_POINTER */
+ 460, /* GL_FOG_COORDINATE_ARRAY */
+ 173, /* GL_COLOR_SUM */
+ 298, /* GL_CURRENT_SECONDARY_COLOR */
+ 1324, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
+ 1326, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
+ 1325, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
+ 1323, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
+ 1320, /* GL_SECONDARY_COLOR_ARRAY */
+ 526, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */
28, /* GL_ALIASED_POINT_SIZE_RANGE */
27, /* GL_ALIASED_LINE_WIDTH_RANGE */
- 1446, /* GL_TEXTURE0 */
- 1448, /* GL_TEXTURE1 */
- 1470, /* GL_TEXTURE2 */
- 1492, /* GL_TEXTURE3 */
- 1498, /* GL_TEXTURE4 */
- 1500, /* GL_TEXTURE5 */
- 1502, /* GL_TEXTURE6 */
- 1504, /* GL_TEXTURE7 */
- 1506, /* GL_TEXTURE8 */
- 1508, /* GL_TEXTURE9 */
- 1449, /* GL_TEXTURE10 */
- 1451, /* GL_TEXTURE11 */
- 1453, /* GL_TEXTURE12 */
- 1455, /* GL_TEXTURE13 */
- 1457, /* GL_TEXTURE14 */
- 1459, /* GL_TEXTURE15 */
- 1461, /* GL_TEXTURE16 */
- 1463, /* GL_TEXTURE17 */
- 1465, /* GL_TEXTURE18 */
- 1467, /* GL_TEXTURE19 */
- 1471, /* GL_TEXTURE20 */
- 1473, /* GL_TEXTURE21 */
- 1475, /* GL_TEXTURE22 */
- 1477, /* GL_TEXTURE23 */
- 1479, /* GL_TEXTURE24 */
- 1481, /* GL_TEXTURE25 */
- 1483, /* GL_TEXTURE26 */
- 1485, /* GL_TEXTURE27 */
- 1487, /* GL_TEXTURE28 */
- 1489, /* GL_TEXTURE29 */
- 1493, /* GL_TEXTURE30 */
- 1495, /* GL_TEXTURE31 */
+ 1444, /* GL_TEXTURE0 */
+ 1446, /* GL_TEXTURE1 */
+ 1468, /* GL_TEXTURE2 */
+ 1490, /* GL_TEXTURE3 */
+ 1496, /* GL_TEXTURE4 */
+ 1498, /* GL_TEXTURE5 */
+ 1500, /* GL_TEXTURE6 */
+ 1502, /* GL_TEXTURE7 */
+ 1504, /* GL_TEXTURE8 */
+ 1506, /* GL_TEXTURE9 */
+ 1447, /* GL_TEXTURE10 */
+ 1449, /* GL_TEXTURE11 */
+ 1451, /* GL_TEXTURE12 */
+ 1453, /* GL_TEXTURE13 */
+ 1455, /* GL_TEXTURE14 */
+ 1457, /* GL_TEXTURE15 */
+ 1459, /* GL_TEXTURE16 */
+ 1461, /* GL_TEXTURE17 */
+ 1463, /* GL_TEXTURE18 */
+ 1465, /* GL_TEXTURE19 */
+ 1469, /* GL_TEXTURE20 */
+ 1471, /* GL_TEXTURE21 */
+ 1473, /* GL_TEXTURE22 */
+ 1475, /* GL_TEXTURE23 */
+ 1477, /* GL_TEXTURE24 */
+ 1479, /* GL_TEXTURE25 */
+ 1481, /* GL_TEXTURE26 */
+ 1483, /* GL_TEXTURE27 */
+ 1485, /* GL_TEXTURE28 */
+ 1487, /* GL_TEXTURE29 */
+ 1491, /* GL_TEXTURE30 */
+ 1493, /* GL_TEXTURE31 */
18, /* GL_ACTIVE_TEXTURE */
- 124, /* GL_CLIENT_ACTIVE_TEXTURE */
- 867, /* GL_MAX_TEXTURE_UNITS */
- 1634, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
- 1637, /* GL_TRANSPOSE_PROJECTION_MATRIX */
- 1639, /* GL_TRANSPOSE_TEXTURE_MATRIX */
- 1631, /* GL_TRANSPOSE_COLOR_MATRIX */
- 1434, /* GL_SUBTRACT */
- 856, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
- 222, /* GL_COMPRESSED_ALPHA */
- 226, /* GL_COMPRESSED_LUMINANCE */
- 227, /* GL_COMPRESSED_LUMINANCE_ALPHA */
- 224, /* GL_COMPRESSED_INTENSITY */
- 230, /* GL_COMPRESSED_RGB */
- 231, /* GL_COMPRESSED_RGBA */
- 1553, /* GL_TEXTURE_COMPRESSION_HINT */
- 1615, /* GL_TEXTURE_RECTANGLE_ARB */
- 1525, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
- 1207, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
- 854, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
- 335, /* GL_DEPTH_STENCIL_NV */
- 1659, /* GL_UNSIGNED_INT_24_8_NV */
- 863, /* GL_MAX_TEXTURE_LOD_BIAS */
- 1606, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
- 864, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
- 1582, /* GL_TEXTURE_FILTER_CONTROL */
- 1597, /* GL_TEXTURE_LOD_BIAS */
- 207, /* GL_COMBINE4 */
- 857, /* GL_MAX_SHININESS_NV */
- 858, /* GL_MAX_SPOT_EXPONENT_NV */
- 576, /* GL_INCR_WRAP */
- 310, /* GL_DECR_WRAP */
- 909, /* GL_MODELVIEW1_ARB */
- 965, /* GL_NORMAL_MAP */
- 1236, /* GL_REFLECTION_MAP */
- 1562, /* GL_TEXTURE_CUBE_MAP */
- 1523, /* GL_TEXTURE_BINDING_CUBE_MAP */
- 1570, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
- 1564, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
- 1572, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
- 1566, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
- 1574, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
- 1568, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
- 1205, /* GL_PROXY_TEXTURE_CUBE_MAP */
- 810, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
- 944, /* GL_MULTISAMPLE_FILTER_HINT_NV */
- 476, /* GL_FOG_DISTANCE_MODE_NV */
- 435, /* GL_EYE_RADIAL_NV */
- 434, /* GL_EYE_PLANE_ABSOLUTE_NV */
- 206, /* GL_COMBINE */
- 213, /* GL_COMBINE_RGB */
- 208, /* GL_COMBINE_ALPHA */
- 1290, /* GL_RGB_SCALE */
+ 123, /* GL_CLIENT_ACTIVE_TEXTURE */
+ 865, /* GL_MAX_TEXTURE_UNITS */
+ 1632, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
+ 1635, /* GL_TRANSPOSE_PROJECTION_MATRIX */
+ 1637, /* GL_TRANSPOSE_TEXTURE_MATRIX */
+ 1629, /* GL_TRANSPOSE_COLOR_MATRIX */
+ 1432, /* GL_SUBTRACT */
+ 854, /* 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 */
+ 1551, /* GL_TEXTURE_COMPRESSION_HINT */
+ 1613, /* GL_TEXTURE_RECTANGLE_ARB */
+ 1523, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
+ 1205, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
+ 852, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
+ 334, /* GL_DEPTH_STENCIL_NV */
+ 1657, /* GL_UNSIGNED_INT_24_8_NV */
+ 861, /* GL_MAX_TEXTURE_LOD_BIAS */
+ 1604, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
+ 862, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
+ 1580, /* GL_TEXTURE_FILTER_CONTROL */
+ 1595, /* GL_TEXTURE_LOD_BIAS */
+ 206, /* GL_COMBINE4 */
+ 855, /* GL_MAX_SHININESS_NV */
+ 856, /* GL_MAX_SPOT_EXPONENT_NV */
+ 574, /* GL_INCR_WRAP */
+ 309, /* GL_DECR_WRAP */
+ 907, /* GL_MODELVIEW1_ARB */
+ 963, /* GL_NORMAL_MAP */
+ 1234, /* GL_REFLECTION_MAP */
+ 1560, /* GL_TEXTURE_CUBE_MAP */
+ 1521, /* GL_TEXTURE_BINDING_CUBE_MAP */
+ 1568, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
+ 1562, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
+ 1570, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
+ 1564, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
+ 1572, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
+ 1566, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
+ 1203, /* GL_PROXY_TEXTURE_CUBE_MAP */
+ 808, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
+ 942, /* GL_MULTISAMPLE_FILTER_HINT_NV */
+ 474, /* GL_FOG_DISTANCE_MODE_NV */
+ 433, /* GL_EYE_RADIAL_NV */
+ 432, /* GL_EYE_PLANE_ABSOLUTE_NV */
+ 205, /* GL_COMBINE */
+ 212, /* GL_COMBINE_RGB */
+ 207, /* GL_COMBINE_ALPHA */
+ 1288, /* GL_RGB_SCALE */
24, /* GL_ADD_SIGNED */
- 603, /* GL_INTERPOLATE */
- 241, /* GL_CONSTANT */
- 1155, /* GL_PRIMARY_COLOR */
- 1152, /* GL_PREVIOUS */
- 1356, /* GL_SOURCE0_RGB */
- 1362, /* GL_SOURCE1_RGB */
- 1368, /* GL_SOURCE2_RGB */
- 1372, /* GL_SOURCE3_RGB_NV */
- 1353, /* GL_SOURCE0_ALPHA */
- 1359, /* GL_SOURCE1_ALPHA */
- 1365, /* GL_SOURCE2_ALPHA */
- 1371, /* GL_SOURCE3_ALPHA_NV */
- 1001, /* GL_OPERAND0_RGB */
- 1007, /* GL_OPERAND1_RGB */
- 1013, /* GL_OPERAND2_RGB */
- 1017, /* GL_OPERAND3_RGB_NV */
- 998, /* GL_OPERAND0_ALPHA */
- 1004, /* GL_OPERAND1_ALPHA */
- 1010, /* GL_OPERAND2_ALPHA */
- 1016, /* GL_OPERAND3_ALPHA_NV */
- 1681, /* GL_VERTEX_ARRAY_BINDING_APPLE */
- 1745, /* GL_YCBCR_422_APPLE */
- 1670, /* GL_UNSIGNED_SHORT_8_8_APPLE */
- 1672, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
- 1347, /* GL_SLICE_ACCUM_SUN */
- 1212, /* GL_QUAD_MESH_SUN */
- 1643, /* GL_TRIANGLE_MESH_SUN */
- 1719, /* GL_VERTEX_PROGRAM_ARB */
- 1730, /* GL_VERTEX_STATE_PROGRAM_NV */
- 1706, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
- 1712, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
- 1714, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
- 1716, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
- 301, /* GL_CURRENT_VERTEX_ATTRIB */
- 1168, /* GL_PROGRAM_LENGTH_ARB */
- 1182, /* GL_PROGRAM_STRING_ARB */
- 931, /* GL_MODELVIEW_PROJECTION_NV */
- 571, /* GL_IDENTITY_NV */
- 616, /* GL_INVERSE_NV */
- 1636, /* GL_TRANSPOSE_NV */
- 617, /* GL_INVERSE_TRANSPOSE_NV */
- 840, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
- 839, /* GL_MAX_PROGRAM_MATRICES_ARB */
- 747, /* GL_MATRIX0_NV */
- 759, /* GL_MATRIX1_NV */
- 771, /* GL_MATRIX2_NV */
- 775, /* GL_MATRIX3_NV */
- 777, /* GL_MATRIX4_NV */
- 779, /* GL_MATRIX5_NV */
- 781, /* GL_MATRIX6_NV */
- 783, /* GL_MATRIX7_NV */
- 286, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
- 283, /* GL_CURRENT_MATRIX_ARB */
- 1722, /* GL_VERTEX_PROGRAM_POINT_SIZE */
- 1725, /* GL_VERTEX_PROGRAM_TWO_SIDE */
- 1180, /* GL_PROGRAM_PARAMETER_NV */
- 1710, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
- 1184, /* GL_PROGRAM_TARGET_NV */
- 1181, /* GL_PROGRAM_RESIDENT_NV */
- 1628, /* GL_TRACK_MATRIX_NV */
- 1629, /* GL_TRACK_MATRIX_TRANSFORM_NV */
- 1720, /* GL_VERTEX_PROGRAM_BINDING_NV */
- 1162, /* GL_PROGRAM_ERROR_POSITION_ARB */
- 320, /* GL_DEPTH_CLAMP_NV */
- 1688, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
- 1695, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
- 1696, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
- 1697, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
- 1698, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
- 1699, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
- 1700, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
- 1701, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
- 1702, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
- 1703, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
- 1689, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
- 1690, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
- 1691, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
- 1692, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
- 1693, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
- 1694, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
- 701, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
- 708, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
- 709, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
- 710, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
- 711, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
- 712, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
- 713, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
- 714, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
- 715, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
- 716, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
- 702, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
- 703, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
- 704, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
- 705, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
- 706, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
- 707, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
- 728, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
- 735, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
- 736, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
- 737, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
- 738, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
- 739, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
- 740, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
- 1161, /* GL_PROGRAM_BINDING_ARB */
- 742, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
- 743, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
- 729, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
- 730, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
- 731, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
- 732, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
- 733, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
- 734, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
- 1551, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
- 1548, /* GL_TEXTURE_COMPRESSED */
- 970, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
- 240, /* GL_COMPRESSED_TEXTURE_FORMATS */
- 879, /* GL_MAX_VERTEX_UNITS_ARB */
+ 601, /* GL_INTERPOLATE */
+ 240, /* GL_CONSTANT */
+ 1153, /* GL_PRIMARY_COLOR */
+ 1150, /* GL_PREVIOUS */
+ 1354, /* GL_SOURCE0_RGB */
+ 1360, /* GL_SOURCE1_RGB */
+ 1366, /* GL_SOURCE2_RGB */
+ 1370, /* GL_SOURCE3_RGB_NV */
+ 1351, /* GL_SOURCE0_ALPHA */
+ 1357, /* GL_SOURCE1_ALPHA */
+ 1363, /* GL_SOURCE2_ALPHA */
+ 1369, /* GL_SOURCE3_ALPHA_NV */
+ 999, /* GL_OPERAND0_RGB */
+ 1005, /* GL_OPERAND1_RGB */
+ 1011, /* GL_OPERAND2_RGB */
+ 1015, /* GL_OPERAND3_RGB_NV */
+ 996, /* GL_OPERAND0_ALPHA */
+ 1002, /* GL_OPERAND1_ALPHA */
+ 1008, /* GL_OPERAND2_ALPHA */
+ 1014, /* GL_OPERAND3_ALPHA_NV */
+ 1679, /* GL_VERTEX_ARRAY_BINDING_APPLE */
+ 1743, /* GL_YCBCR_422_APPLE */
+ 1668, /* GL_UNSIGNED_SHORT_8_8_APPLE */
+ 1670, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
+ 1345, /* GL_SLICE_ACCUM_SUN */
+ 1210, /* GL_QUAD_MESH_SUN */
+ 1641, /* GL_TRIANGLE_MESH_SUN */
+ 1717, /* GL_VERTEX_PROGRAM_ARB */
+ 1728, /* GL_VERTEX_STATE_PROGRAM_NV */
+ 1704, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+ 1710, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+ 1712, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+ 1714, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
+ 300, /* GL_CURRENT_VERTEX_ATTRIB */
+ 1166, /* GL_PROGRAM_LENGTH_ARB */
+ 1180, /* GL_PROGRAM_STRING_ARB */
+ 929, /* GL_MODELVIEW_PROJECTION_NV */
+ 569, /* GL_IDENTITY_NV */
+ 614, /* GL_INVERSE_NV */
+ 1634, /* GL_TRANSPOSE_NV */
+ 615, /* GL_INVERSE_TRANSPOSE_NV */
+ 838, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
+ 837, /* 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 */
+ 1720, /* GL_VERTEX_PROGRAM_POINT_SIZE */
+ 1723, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+ 1178, /* GL_PROGRAM_PARAMETER_NV */
+ 1708, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
+ 1182, /* GL_PROGRAM_TARGET_NV */
+ 1179, /* GL_PROGRAM_RESIDENT_NV */
+ 1626, /* GL_TRACK_MATRIX_NV */
+ 1627, /* GL_TRACK_MATRIX_TRANSFORM_NV */
+ 1718, /* GL_VERTEX_PROGRAM_BINDING_NV */
+ 1160, /* GL_PROGRAM_ERROR_POSITION_ARB */
+ 319, /* GL_DEPTH_CLAMP_NV */
+ 1686, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
+ 1693, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
+ 1694, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
+ 1695, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
+ 1696, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
+ 1697, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
+ 1698, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
+ 1699, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
+ 1700, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
+ 1701, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
+ 1687, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
+ 1688, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
+ 1689, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
+ 1690, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
+ 1691, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
+ 1692, /* 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 */
+ 1159, /* 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 */
+ 1549, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
+ 1546, /* GL_TEXTURE_COMPRESSED */
+ 968, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
+ 239, /* GL_COMPRESSED_TEXTURE_FORMATS */
+ 877, /* GL_MAX_VERTEX_UNITS_ARB */
22, /* GL_ACTIVE_VERTEX_UNITS_ARB */
- 1740, /* GL_WEIGHT_SUM_UNITY_ARB */
- 1718, /* GL_VERTEX_BLEND_ARB */
- 303, /* GL_CURRENT_WEIGHT_ARB */
- 1739, /* GL_WEIGHT_ARRAY_TYPE_ARB */
- 1738, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
- 1737, /* GL_WEIGHT_ARRAY_SIZE_ARB */
- 1736, /* GL_WEIGHT_ARRAY_POINTER_ARB */
- 1733, /* GL_WEIGHT_ARRAY_ARB */
- 346, /* GL_DOT3_RGB */
- 347, /* GL_DOT3_RGBA */
- 238, /* GL_COMPRESSED_RGB_FXT1_3DFX */
- 233, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
- 939, /* GL_MULTISAMPLE_3DFX */
- 1311, /* GL_SAMPLE_BUFFERS_3DFX */
- 1302, /* GL_SAMPLES_3DFX */
- 920, /* GL_MODELVIEW2_ARB */
- 923, /* GL_MODELVIEW3_ARB */
- 924, /* GL_MODELVIEW4_ARB */
- 925, /* GL_MODELVIEW5_ARB */
- 926, /* GL_MODELVIEW6_ARB */
- 927, /* GL_MODELVIEW7_ARB */
- 928, /* GL_MODELVIEW8_ARB */
- 929, /* GL_MODELVIEW9_ARB */
- 899, /* GL_MODELVIEW10_ARB */
- 900, /* GL_MODELVIEW11_ARB */
- 901, /* GL_MODELVIEW12_ARB */
- 902, /* GL_MODELVIEW13_ARB */
- 903, /* GL_MODELVIEW14_ARB */
- 904, /* GL_MODELVIEW15_ARB */
- 905, /* GL_MODELVIEW16_ARB */
- 906, /* GL_MODELVIEW17_ARB */
- 907, /* GL_MODELVIEW18_ARB */
- 908, /* GL_MODELVIEW19_ARB */
- 910, /* GL_MODELVIEW20_ARB */
- 911, /* GL_MODELVIEW21_ARB */
- 912, /* GL_MODELVIEW22_ARB */
- 913, /* GL_MODELVIEW23_ARB */
- 914, /* GL_MODELVIEW24_ARB */
- 915, /* GL_MODELVIEW25_ARB */
- 916, /* GL_MODELVIEW26_ARB */
- 917, /* GL_MODELVIEW27_ARB */
- 918, /* GL_MODELVIEW28_ARB */
- 919, /* GL_MODELVIEW29_ARB */
- 921, /* GL_MODELVIEW30_ARB */
- 922, /* GL_MODELVIEW31_ARB */
- 351, /* GL_DOT3_RGB_EXT */
- 349, /* GL_DOT3_RGBA_EXT */
- 893, /* GL_MIRROR_CLAMP_EXT */
- 896, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
- 934, /* GL_MODULATE_ADD_ATI */
- 935, /* GL_MODULATE_SIGNED_ADD_ATI */
- 936, /* GL_MODULATE_SUBTRACT_ATI */
- 1746, /* GL_YCBCR_MESA */
- 1025, /* GL_PACK_INVERT_MESA */
- 306, /* GL_DEBUG_OBJECT_MESA */
- 307, /* GL_DEBUG_PRINT_MESA */
- 305, /* GL_DEBUG_ASSERT_MESA */
- 107, /* GL_BUFFER_SIZE */
- 109, /* GL_BUFFER_USAGE */
- 1399, /* GL_STENCIL_BACK_FUNC */
- 1397, /* GL_STENCIL_BACK_FAIL */
- 1401, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
- 1403, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
- 485, /* GL_FRAGMENT_PROGRAM_ARB */
- 1159, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
- 1187, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
- 1186, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
- 1171, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
- 1177, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
- 1176, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
- 829, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
- 852, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
- 851, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
- 842, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
- 848, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
- 847, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
- 812, /* GL_MAX_DRAW_BUFFERS */
- 355, /* GL_DRAW_BUFFER0 */
- 358, /* GL_DRAW_BUFFER1 */
- 379, /* GL_DRAW_BUFFER2 */
- 382, /* GL_DRAW_BUFFER3 */
- 385, /* GL_DRAW_BUFFER4 */
- 388, /* GL_DRAW_BUFFER5 */
- 391, /* GL_DRAW_BUFFER6 */
- 394, /* GL_DRAW_BUFFER7 */
- 397, /* GL_DRAW_BUFFER8 */
- 400, /* GL_DRAW_BUFFER9 */
- 359, /* GL_DRAW_BUFFER10 */
- 362, /* GL_DRAW_BUFFER11 */
- 365, /* GL_DRAW_BUFFER12 */
- 368, /* GL_DRAW_BUFFER13 */
- 371, /* GL_DRAW_BUFFER14 */
- 374, /* GL_DRAW_BUFFER15 */
- 82, /* GL_BLEND_EQUATION_ALPHA */
- 792, /* GL_MATRIX_PALETTE_ARB */
- 823, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
- 826, /* GL_MAX_PALETTE_MATRICES_ARB */
- 289, /* GL_CURRENT_PALETTE_MATRIX_ARB */
- 786, /* GL_MATRIX_INDEX_ARRAY_ARB */
- 284, /* GL_CURRENT_MATRIX_INDEX_ARB */
- 788, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
- 790, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
- 789, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
- 787, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
- 1577, /* GL_TEXTURE_DEPTH_SIZE */
- 339, /* GL_DEPTH_TEXTURE_MODE */
- 1543, /* GL_TEXTURE_COMPARE_MODE */
- 1541, /* GL_TEXTURE_COMPARE_FUNC */
- 217, /* GL_COMPARE_R_TO_TEXTURE */
- 1093, /* GL_POINT_SPRITE */
- 266, /* GL_COORD_REPLACE */
- 1097, /* GL_POINT_SPRITE_R_MODE_NV */
- 1214, /* GL_QUERY_COUNTER_BITS */
- 291, /* GL_CURRENT_QUERY */
- 1216, /* GL_QUERY_RESULT */
- 1218, /* GL_QUERY_RESULT_AVAILABLE */
- 873, /* GL_MAX_VERTEX_ATTRIBS */
- 1708, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
- 337, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
- 336, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
- 859, /* GL_MAX_TEXTURE_COORDS */
- 861, /* GL_MAX_TEXTURE_IMAGE_UNITS */
- 1164, /* GL_PROGRAM_ERROR_STRING_ARB */
- 1166, /* GL_PROGRAM_FORMAT_ASCII_ARB */
- 1165, /* GL_PROGRAM_FORMAT_ARB */
- 1622, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
- 318, /* GL_DEPTH_BOUNDS_TEST_EXT */
- 317, /* GL_DEPTH_BOUNDS_EXT */
+ 1738, /* GL_WEIGHT_SUM_UNITY_ARB */
+ 1716, /* GL_VERTEX_BLEND_ARB */
+ 302, /* GL_CURRENT_WEIGHT_ARB */
+ 1737, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+ 1736, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+ 1735, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+ 1734, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+ 1731, /* GL_WEIGHT_ARRAY_ARB */
+ 345, /* GL_DOT3_RGB */
+ 346, /* GL_DOT3_RGBA */
+ 237, /* GL_COMPRESSED_RGB_FXT1_3DFX */
+ 232, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
+ 937, /* GL_MULTISAMPLE_3DFX */
+ 1309, /* GL_SAMPLE_BUFFERS_3DFX */
+ 1300, /* GL_SAMPLES_3DFX */
+ 918, /* GL_MODELVIEW2_ARB */
+ 921, /* GL_MODELVIEW3_ARB */
+ 922, /* GL_MODELVIEW4_ARB */
+ 923, /* GL_MODELVIEW5_ARB */
+ 924, /* GL_MODELVIEW6_ARB */
+ 925, /* GL_MODELVIEW7_ARB */
+ 926, /* GL_MODELVIEW8_ARB */
+ 927, /* GL_MODELVIEW9_ARB */
+ 897, /* GL_MODELVIEW10_ARB */
+ 898, /* GL_MODELVIEW11_ARB */
+ 899, /* GL_MODELVIEW12_ARB */
+ 900, /* GL_MODELVIEW13_ARB */
+ 901, /* GL_MODELVIEW14_ARB */
+ 902, /* GL_MODELVIEW15_ARB */
+ 903, /* GL_MODELVIEW16_ARB */
+ 904, /* GL_MODELVIEW17_ARB */
+ 905, /* GL_MODELVIEW18_ARB */
+ 906, /* GL_MODELVIEW19_ARB */
+ 908, /* GL_MODELVIEW20_ARB */
+ 909, /* GL_MODELVIEW21_ARB */
+ 910, /* GL_MODELVIEW22_ARB */
+ 911, /* GL_MODELVIEW23_ARB */
+ 912, /* GL_MODELVIEW24_ARB */
+ 913, /* GL_MODELVIEW25_ARB */
+ 914, /* GL_MODELVIEW26_ARB */
+ 915, /* GL_MODELVIEW27_ARB */
+ 916, /* GL_MODELVIEW28_ARB */
+ 917, /* GL_MODELVIEW29_ARB */
+ 919, /* GL_MODELVIEW30_ARB */
+ 920, /* GL_MODELVIEW31_ARB */
+ 350, /* GL_DOT3_RGB_EXT */
+ 348, /* GL_DOT3_RGBA_EXT */
+ 891, /* GL_MIRROR_CLAMP_EXT */
+ 894, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
+ 932, /* GL_MODULATE_ADD_ATI */
+ 933, /* GL_MODULATE_SIGNED_ADD_ATI */
+ 934, /* GL_MODULATE_SUBTRACT_ATI */
+ 1744, /* GL_YCBCR_MESA */
+ 1023, /* GL_PACK_INVERT_MESA */
+ 305, /* GL_DEBUG_OBJECT_MESA */
+ 306, /* GL_DEBUG_PRINT_MESA */
+ 304, /* GL_DEBUG_ASSERT_MESA */
+ 106, /* GL_BUFFER_SIZE */
+ 108, /* GL_BUFFER_USAGE */
+ 1397, /* GL_STENCIL_BACK_FUNC */
+ 1395, /* GL_STENCIL_BACK_FAIL */
+ 1399, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
+ 1401, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
+ 483, /* GL_FRAGMENT_PROGRAM_ARB */
+ 1157, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
+ 1185, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
+ 1184, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
+ 1169, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+ 1175, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+ 1174, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+ 827, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
+ 850, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
+ 849, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
+ 840, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+ 846, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+ 845, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+ 810, /* 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 */
+ 81, /* GL_BLEND_EQUATION_ALPHA */
+ 790, /* GL_MATRIX_PALETTE_ARB */
+ 821, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
+ 824, /* 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 */
+ 1575, /* GL_TEXTURE_DEPTH_SIZE */
+ 338, /* GL_DEPTH_TEXTURE_MODE */
+ 1541, /* GL_TEXTURE_COMPARE_MODE */
+ 1539, /* GL_TEXTURE_COMPARE_FUNC */
+ 216, /* GL_COMPARE_R_TO_TEXTURE */
+ 1091, /* GL_POINT_SPRITE */
+ 265, /* GL_COORD_REPLACE */
+ 1095, /* GL_POINT_SPRITE_R_MODE_NV */
+ 1212, /* GL_QUERY_COUNTER_BITS */
+ 290, /* GL_CURRENT_QUERY */
+ 1214, /* GL_QUERY_RESULT */
+ 1216, /* GL_QUERY_RESULT_AVAILABLE */
+ 871, /* GL_MAX_VERTEX_ATTRIBS */
+ 1706, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
+ 336, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
+ 335, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
+ 857, /* GL_MAX_TEXTURE_COORDS */
+ 859, /* GL_MAX_TEXTURE_IMAGE_UNITS */
+ 1162, /* GL_PROGRAM_ERROR_STRING_ARB */
+ 1164, /* GL_PROGRAM_FORMAT_ASCII_ARB */
+ 1163, /* GL_PROGRAM_FORMAT_ARB */
+ 1620, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
+ 317, /* GL_DEPTH_BOUNDS_TEST_EXT */
+ 316, /* GL_DEPTH_BOUNDS_EXT */
52, /* GL_ARRAY_BUFFER */
- 420, /* GL_ELEMENT_ARRAY_BUFFER */
- 54, /* GL_ARRAY_BUFFER_BINDING */
- 422, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
- 1682, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
- 960, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
- 140, /* GL_COLOR_ARRAY_BUFFER_BINDING */
- 579, /* GL_INDEX_ARRAY_BUFFER_BINDING */
- 1556, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
- 416, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
- 1323, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
- 463, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
- 1734, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
- 1704, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
- 1167, /* GL_PROGRAM_INSTRUCTIONS_ARB */
- 835, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
- 1173, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
- 844, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
- 1185, /* GL_PROGRAM_TEMPORARIES_ARB */
- 850, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
- 1175, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
- 846, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
- 1179, /* GL_PROGRAM_PARAMETERS_ARB */
- 849, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
- 1174, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
- 845, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
- 1160, /* GL_PROGRAM_ATTRIBS_ARB */
- 830, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
- 1172, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
- 843, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
- 1158, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
- 828, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
- 1170, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
- 841, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
- 836, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
- 832, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
- 1188, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
- 1633, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
- 1226, /* GL_READ_ONLY */
- 1742, /* GL_WRITE_ONLY */
- 1228, /* GL_READ_WRITE */
- 101, /* GL_BUFFER_ACCESS */
- 103, /* GL_BUFFER_MAPPED */
- 105, /* GL_BUFFER_MAP_POINTER */
- 1627, /* GL_TIME_ELAPSED_EXT */
- 746, /* GL_MATRIX0_ARB */
- 758, /* GL_MATRIX1_ARB */
- 770, /* GL_MATRIX2_ARB */
- 774, /* GL_MATRIX3_ARB */
- 776, /* GL_MATRIX4_ARB */
- 778, /* GL_MATRIX5_ARB */
- 780, /* GL_MATRIX6_ARB */
- 782, /* GL_MATRIX7_ARB */
- 784, /* GL_MATRIX8_ARB */
- 785, /* GL_MATRIX9_ARB */
- 748, /* GL_MATRIX10_ARB */
- 749, /* GL_MATRIX11_ARB */
- 750, /* GL_MATRIX12_ARB */
- 751, /* GL_MATRIX13_ARB */
- 752, /* GL_MATRIX14_ARB */
- 753, /* GL_MATRIX15_ARB */
- 754, /* GL_MATRIX16_ARB */
- 755, /* GL_MATRIX17_ARB */
- 756, /* GL_MATRIX18_ARB */
- 757, /* GL_MATRIX19_ARB */
- 760, /* GL_MATRIX20_ARB */
- 761, /* GL_MATRIX21_ARB */
- 762, /* GL_MATRIX22_ARB */
- 763, /* GL_MATRIX23_ARB */
- 764, /* GL_MATRIX24_ARB */
- 765, /* GL_MATRIX25_ARB */
- 766, /* GL_MATRIX26_ARB */
- 767, /* GL_MATRIX27_ARB */
- 768, /* GL_MATRIX28_ARB */
- 769, /* GL_MATRIX29_ARB */
- 772, /* GL_MATRIX30_ARB */
- 773, /* GL_MATRIX31_ARB */
- 1429, /* GL_STREAM_DRAW */
- 1431, /* GL_STREAM_READ */
- 1427, /* GL_STREAM_COPY */
- 1391, /* GL_STATIC_DRAW */
- 1393, /* GL_STATIC_READ */
- 1389, /* GL_STATIC_COPY */
- 410, /* GL_DYNAMIC_DRAW */
- 412, /* GL_DYNAMIC_READ */
- 408, /* GL_DYNAMIC_COPY */
- 535, /* GL_GL_PIXEL_PACK_BUFFER */
- 537, /* GL_GL_PIXEL_UNPACK_BUFFER */
- 536, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */
- 538, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */
- 833, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
- 831, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
- 834, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
- 838, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
- 837, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
- 795, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
- 1423, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
+ 419, /* GL_ELEMENT_ARRAY_BUFFER */
+ 53, /* GL_ARRAY_BUFFER_BINDING */
+ 420, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
+ 1680, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
+ 958, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
+ 139, /* GL_COLOR_ARRAY_BUFFER_BINDING */
+ 577, /* GL_INDEX_ARRAY_BUFFER_BINDING */
+ 1554, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
+ 415, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
+ 1321, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
+ 461, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
+ 1732, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
+ 1702, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
+ 1165, /* GL_PROGRAM_INSTRUCTIONS_ARB */
+ 833, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
+ 1171, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+ 842, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+ 1183, /* GL_PROGRAM_TEMPORARIES_ARB */
+ 848, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
+ 1173, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
+ 844, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
+ 1177, /* GL_PROGRAM_PARAMETERS_ARB */
+ 847, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
+ 1172, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
+ 843, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
+ 1158, /* GL_PROGRAM_ATTRIBS_ARB */
+ 828, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
+ 1170, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
+ 841, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
+ 1156, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
+ 826, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
+ 1168, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+ 839, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+ 834, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
+ 830, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
+ 1186, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
+ 1631, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
+ 1224, /* GL_READ_ONLY */
+ 1740, /* GL_WRITE_ONLY */
+ 1226, /* GL_READ_WRITE */
+ 100, /* GL_BUFFER_ACCESS */
+ 102, /* GL_BUFFER_MAPPED */
+ 104, /* GL_BUFFER_MAP_POINTER */
+ 1625, /* 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 */
+ 1427, /* GL_STREAM_DRAW */
+ 1429, /* GL_STREAM_READ */
+ 1425, /* GL_STREAM_COPY */
+ 1389, /* GL_STATIC_DRAW */
+ 1391, /* GL_STATIC_READ */
+ 1387, /* 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 */
+ 831, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
+ 829, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
+ 832, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
+ 836, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
+ 835, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
+ 793, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
+ 1421, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
17, /* GL_ACTIVE_STENCIL_FACE_EXT */
- 894, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
- 1304, /* GL_SAMPLES_PASSED */
- 486, /* GL_FRAGMENT_SHADER */
- 1728, /* GL_VERTEX_SHADER */
- 1178, /* GL_PROGRAM_OBJECT_ARB */
- 1336, /* GL_SHADER_OBJECT_ARB */
- 819, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
- 877, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
- 871, /* GL_MAX_VARYING_FLOATS */
- 875, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
- 804, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
- 985, /* GL_OBJECT_TYPE_ARB */
- 1338, /* GL_SHADER_TYPE */
- 451, /* GL_FLOAT_VEC2 */
- 453, /* GL_FLOAT_VEC3 */
- 455, /* GL_FLOAT_VEC4 */
- 606, /* GL_INT_VEC2 */
- 608, /* GL_INT_VEC3 */
- 610, /* GL_INT_VEC4 */
- 93, /* GL_BOOL */
- 95, /* GL_BOOL_VEC2 */
- 97, /* GL_BOOL_VEC3 */
- 99, /* GL_BOOL_VEC4 */
- 445, /* GL_FLOAT_MAT2 */
- 447, /* GL_FLOAT_MAT3 */
- 449, /* GL_FLOAT_MAT4 */
- 1295, /* GL_SAMPLER_1D */
- 1297, /* GL_SAMPLER_2D */
- 1299, /* GL_SAMPLER_3D */
- 1300, /* GL_SAMPLER_CUBE */
- 1296, /* GL_SAMPLER_1D_SHADOW */
- 1298, /* GL_SAMPLER_2D_SHADOW */
- 529, /* GL_GL_FLOAT_MAT2x3 */
- 530, /* GL_GL_FLOAT_MAT2x4 */
- 531, /* GL_GL_FLOAT_MAT3x2 */
- 532, /* GL_GL_FLOAT_MAT3x4 */
- 533, /* GL_GL_FLOAT_MAT4x2 */
- 534, /* GL_GL_FLOAT_MAT4x3 */
- 312, /* GL_DELETE_STATUS */
- 221, /* GL_COMPILE_STATUS */
- 659, /* GL_LINK_STATUS */
- 1677, /* GL_VALIDATE_STATUS */
- 591, /* GL_INFO_LOG_LENGTH */
- 56, /* GL_ATTACHED_SHADERS */
+ 892, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
+ 1302, /* GL_SAMPLES_PASSED */
+ 484, /* GL_FRAGMENT_SHADER */
+ 1726, /* GL_VERTEX_SHADER */
+ 1176, /* GL_PROGRAM_OBJECT_ARB */
+ 1334, /* GL_SHADER_OBJECT_ARB */
+ 817, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
+ 875, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
+ 869, /* GL_MAX_VARYING_FLOATS */
+ 873, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
+ 802, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
+ 983, /* GL_OBJECT_TYPE_ARB */
+ 1336, /* GL_SHADER_TYPE */
+ 449, /* GL_FLOAT_VEC2 */
+ 451, /* GL_FLOAT_VEC3 */
+ 453, /* GL_FLOAT_VEC4 */
+ 604, /* GL_INT_VEC2 */
+ 606, /* GL_INT_VEC3 */
+ 608, /* GL_INT_VEC4 */
+ 92, /* GL_BOOL */
+ 94, /* GL_BOOL_VEC2 */
+ 96, /* GL_BOOL_VEC3 */
+ 98, /* GL_BOOL_VEC4 */
+ 443, /* GL_FLOAT_MAT2 */
+ 445, /* GL_FLOAT_MAT3 */
+ 447, /* GL_FLOAT_MAT4 */
+ 1293, /* GL_SAMPLER_1D */
+ 1295, /* GL_SAMPLER_2D */
+ 1297, /* GL_SAMPLER_3D */
+ 1298, /* GL_SAMPLER_CUBE */
+ 1294, /* GL_SAMPLER_1D_SHADOW */
+ 1296, /* 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 */
+ 1675, /* GL_VALIDATE_STATUS */
+ 589, /* GL_INFO_LOG_LENGTH */
+ 55, /* GL_ATTACHED_SHADERS */
20, /* GL_ACTIVE_UNIFORMS */
21, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */
- 1337, /* GL_SHADER_SOURCE_LENGTH */
+ 1335, /* GL_SHADER_SOURCE_LENGTH */
15, /* GL_ACTIVE_ATTRIBUTES */
16, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */
- 488, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
- 1340, /* GL_SHADING_LANGUAGE_VERSION */
- 290, /* GL_CURRENT_PROGRAM */
- 1034, /* GL_PALETTE4_RGB8_OES */
- 1036, /* GL_PALETTE4_RGBA8_OES */
- 1032, /* GL_PALETTE4_R5_G6_B5_OES */
- 1035, /* GL_PALETTE4_RGBA4_OES */
- 1033, /* GL_PALETTE4_RGB5_A1_OES */
- 1039, /* GL_PALETTE8_RGB8_OES */
- 1041, /* GL_PALETTE8_RGBA8_OES */
- 1037, /* GL_PALETTE8_R5_G6_B5_OES */
- 1040, /* GL_PALETTE8_RGBA4_OES */
- 1038, /* GL_PALETTE8_RGB5_A1_OES */
- 574, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
- 573, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
- 1511, /* GL_TEXTURE_1D_ARRAY_EXT */
- 1198, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
- 1513, /* GL_TEXTURE_2D_ARRAY_EXT */
- 1201, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
- 1519, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
- 1521, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
- 543, /* GL_GL_SRGB */
- 544, /* GL_GL_SRGB8 */
- 546, /* GL_GL_SRGB_ALPHA */
- 545, /* GL_GL_SRGB8_ALPHA8 */
- 542, /* GL_GL_SLUMINANCE_ALPHA */
- 541, /* GL_GL_SLUMINANCE8_ALPHA8 */
- 539, /* GL_GL_SLUMINANCE */
- 540, /* GL_GL_SLUMINANCE8 */
- 526, /* GL_GL_COMPRESSED_SRGB */
- 527, /* GL_GL_COMPRESSED_SRGB_ALPHA */
- 524, /* GL_GL_COMPRESSED_SLUMINANCE */
- 525, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */
- 1095, /* GL_POINT_SPRITE_COORD_ORIGIN */
- 667, /* GL_LOWER_LEFT */
- 1674, /* GL_UPPER_LEFT */
- 1405, /* GL_STENCIL_BACK_REF */
- 1406, /* GL_STENCIL_BACK_VALUE_MASK */
- 1407, /* GL_STENCIL_BACK_WRITEMASK */
- 403, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
- 1240, /* GL_RENDERBUFFER_BINDING_EXT */
- 1225, /* GL_READ_FRAMEBUFFER_EXT */
- 404, /* GL_DRAW_FRAMEBUFFER_EXT */
- 1224, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
- 490, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
- 489, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
- 494, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
- 492, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
- 491, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
- 496, /* GL_FRAMEBUFFER_COMPLETE_EXT */
- 498, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
- 503, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
- 501, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
- 499, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
- 502, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
- 500, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
- 504, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
- 506, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
- 505, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
- 801, /* 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 */
- 314, /* GL_DEPTH_ATTACHMENT_EXT */
- 1396, /* GL_STENCIL_ATTACHMENT_EXT */
- 497, /* GL_FRAMEBUFFER_EXT */
- 1241, /* GL_RENDERBUFFER_EXT */
- 1244, /* GL_RENDERBUFFER_WIDTH_EXT */
- 1242, /* GL_RENDERBUFFER_HEIGHT_EXT */
- 1243, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
- 1418, /* GL_STENCIL_INDEX_EXT */
- 1415, /* GL_STENCIL_INDEX1_EXT */
- 1416, /* GL_STENCIL_INDEX4_EXT */
- 1417, /* GL_STENCIL_INDEX8_EXT */
- 1414, /* GL_STENCIL_INDEX16_EXT */
- 428, /* GL_EVAL_BIT */
- 1222, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
- 661, /* GL_LIST_BIT */
- 1527, /* GL_TEXTURE_BIT */
- 1319, /* GL_SCISSOR_BIT */
+ 486, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
+ 1338, /* GL_SHADING_LANGUAGE_VERSION */
+ 289, /* GL_CURRENT_PROGRAM */
+ 1032, /* GL_PALETTE4_RGB8_OES */
+ 1034, /* GL_PALETTE4_RGBA8_OES */
+ 1030, /* GL_PALETTE4_R5_G6_B5_OES */
+ 1033, /* GL_PALETTE4_RGBA4_OES */
+ 1031, /* GL_PALETTE4_RGB5_A1_OES */
+ 1037, /* GL_PALETTE8_RGB8_OES */
+ 1039, /* GL_PALETTE8_RGBA8_OES */
+ 1035, /* GL_PALETTE8_R5_G6_B5_OES */
+ 1038, /* GL_PALETTE8_RGBA4_OES */
+ 1036, /* GL_PALETTE8_RGB5_A1_OES */
+ 572, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
+ 571, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
+ 1509, /* GL_TEXTURE_1D_ARRAY_EXT */
+ 1196, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
+ 1511, /* GL_TEXTURE_2D_ARRAY_EXT */
+ 1199, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
+ 1517, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
+ 1519, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
+ 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 */
+ 1093, /* GL_POINT_SPRITE_COORD_ORIGIN */
+ 665, /* GL_LOWER_LEFT */
+ 1672, /* GL_UPPER_LEFT */
+ 1403, /* GL_STENCIL_BACK_REF */
+ 1404, /* GL_STENCIL_BACK_VALUE_MASK */
+ 1405, /* GL_STENCIL_BACK_WRITEMASK */
+ 402, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
+ 1238, /* GL_RENDERBUFFER_BINDING_EXT */
+ 1223, /* GL_READ_FRAMEBUFFER_EXT */
+ 403, /* GL_DRAW_FRAMEBUFFER_EXT */
+ 1222, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
+ 488, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
+ 487, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
+ 492, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
+ 490, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
+ 489, /* 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 */
+ 799, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
+ 145, /* GL_COLOR_ATTACHMENT0_EXT */
+ 152, /* GL_COLOR_ATTACHMENT1_EXT */
+ 153, /* GL_COLOR_ATTACHMENT2_EXT */
+ 154, /* GL_COLOR_ATTACHMENT3_EXT */
+ 155, /* GL_COLOR_ATTACHMENT4_EXT */
+ 156, /* GL_COLOR_ATTACHMENT5_EXT */
+ 157, /* GL_COLOR_ATTACHMENT6_EXT */
+ 158, /* GL_COLOR_ATTACHMENT7_EXT */
+ 159, /* GL_COLOR_ATTACHMENT8_EXT */
+ 160, /* GL_COLOR_ATTACHMENT9_EXT */
+ 146, /* GL_COLOR_ATTACHMENT10_EXT */
+ 147, /* GL_COLOR_ATTACHMENT11_EXT */
+ 148, /* GL_COLOR_ATTACHMENT12_EXT */
+ 149, /* GL_COLOR_ATTACHMENT13_EXT */
+ 150, /* GL_COLOR_ATTACHMENT14_EXT */
+ 151, /* GL_COLOR_ATTACHMENT15_EXT */
+ 313, /* GL_DEPTH_ATTACHMENT_EXT */
+ 1394, /* GL_STENCIL_ATTACHMENT_EXT */
+ 495, /* GL_FRAMEBUFFER_EXT */
+ 1239, /* GL_RENDERBUFFER_EXT */
+ 1242, /* GL_RENDERBUFFER_WIDTH_EXT */
+ 1240, /* GL_RENDERBUFFER_HEIGHT_EXT */
+ 1241, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
+ 1416, /* GL_STENCIL_INDEX_EXT */
+ 1413, /* GL_STENCIL_INDEX1_EXT */
+ 1414, /* GL_STENCIL_INDEX4_EXT */
+ 1415, /* GL_STENCIL_INDEX8_EXT */
+ 1412, /* GL_STENCIL_INDEX16_EXT */
+ 426, /* GL_EVAL_BIT */
+ 1220, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
+ 659, /* GL_LIST_BIT */
+ 1525, /* GL_TEXTURE_BIT */
+ 1317, /* GL_SCISSOR_BIT */
29, /* GL_ALL_ATTRIB_BITS */
- 941, /* GL_MULTISAMPLE_BIT */
+ 939, /* GL_MULTISAMPLE_BIT */
30, /* GL_ALL_CLIENT_ATTRIB_BITS */
};
diff --git a/src/mesa/main/execmem.c b/src/mesa/main/execmem.c
index b40a2de8fa4..0719d0051c3 100644
--- a/src/mesa/main/execmem.c
+++ b/src/mesa/main/execmem.c
@@ -36,7 +36,7 @@
-#if defined(__linux__)
+#if defined(__linux__) || defined(__OpenBSD__)
/*
* Allocate a large block of memory which can hold code then dole it out
@@ -51,6 +51,12 @@
#include <selinux/selinux.h>
#endif
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+
#define EXEC_HEAP_SIZE (10*1024*1024)
_glthread_DECLARE_STATIC_MUTEX(exec_mutex);
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 8e9948cb45d..4190a95e419 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
- * Version: 6.5.1
+ * Version: 7.1
*
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -66,6 +66,27 @@ static struct gl_renderbuffer DummyRenderbuffer;
(TARGET) <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
+static void
+delete_dummy_renderbuffer(struct gl_renderbuffer *rb)
+{
+ /* no op */
+}
+
+static void
+delete_dummy_framebuffer(struct gl_framebuffer *fb)
+{
+ /* no op */
+}
+
+
+void
+_mesa_init_fbobjects(GLcontext *ctx)
+{
+ DummyFramebuffer.Delete = delete_dummy_framebuffer;
+ DummyRenderbuffer.Delete = delete_dummy_renderbuffer;
+}
+
+
/**
* Helper routine for getting a gl_renderbuffer.
*/
@@ -159,7 +180,6 @@ _mesa_remove_attachment(GLcontext *ctx, struct gl_renderbuffer_attachment *att)
ASSERT(!att->Texture);
}
if (att->Type == GL_TEXTURE || att->Type == GL_RENDERBUFFER_EXT) {
- ASSERT(att->Renderbuffer);
ASSERT(!att->Texture);
_mesa_reference_renderbuffer(&att->Renderbuffer, NULL); /* unbind */
ASSERT(!att->Renderbuffer);
diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
index 782ad8cb180..b6154719abc 100644
--- a/src/mesa/main/fbobject.h
+++ b/src/mesa/main/fbobject.h
@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
- * Version: 6.5
+ * Version: 7.1
*
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -27,6 +27,9 @@
#define FBOBJECT_H
+extern void
+_mesa_init_fbobjects(GLcontext *ctx);
+
extern struct gl_renderbuffer *
_mesa_lookup_renderbuffer(GLcontext *ctx, GLuint id);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 04da767ec91..9339146e25c 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -958,6 +958,7 @@ struct gl_list_extensions
struct gl_multisample_attrib
{
GLboolean Enabled;
+ GLboolean _Enabled; /**< true if Enabled and multisample buffer */
GLboolean SampleAlphaToCoverage;
GLboolean SampleAlphaToOne;
GLboolean SampleCoverage;
diff --git a/src/mesa/main/shaders.c b/src/mesa/main/shaders.c
index 7bf88087670..f0db0d2a818 100644
--- a/src/mesa/main/shaders.c
+++ b/src/mesa/main/shaders.c
@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
- * Version: 6.5.3
+ * Version: 7.1
*
- * Copyright (C) 2004-2007 Brian Paul All Rights Reserved.
+ * Copyright (C) 2004-2008 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -309,11 +309,7 @@ void GLAPIENTRY
_mesa_GetUniformivARB(GLhandleARB program, GLint location, GLint * params)
{
GET_CURRENT_CONTEXT(ctx);
- GLfloat fparams[16]; /* XXX is 16 enough? */
- GLuint i;
- ctx->Driver.GetUniformfv(ctx, program, location, fparams);
- for (i = 0; i < 16; i++)
- params[i] = (GLint) fparams[i]; /* XXX correct? */
+ ctx->Driver.GetUniformiv(ctx, program, location, params);
}
@@ -382,7 +378,7 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count,
GLsizei i, totalLength;
GLcharARB *source;
- if (string == NULL) {
+ if (!shaderObj || string == NULL) {
_mesa_error(ctx, GL_INVALID_VALUE, "glShaderSourceARB");
return;
}
@@ -400,7 +396,7 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count,
for (i = 0; i < count; i++) {
if (string[i] == NULL) {
_mesa_free((GLvoid *) offsets);
- _mesa_error(ctx, GL_INVALID_VALUE, "glShaderSourceARB(null string)");
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glShaderSourceARB(null string)");
return;
}
if (length == NULL || length[i] < 0)
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 1c73c5c462b..7192bed4a3d 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -1061,6 +1061,20 @@ update_viewport_matrix(GLcontext *ctx)
/**
+ * Update derived multisample state.
+ */
+static void
+update_multisample(GLcontext *ctx)
+{
+ ctx->Multisample._Enabled = GL_FALSE;
+ if (ctx->DrawBuffer) {
+ if (ctx->DrawBuffer->Visual.sampleBuffers)
+ ctx->Multisample._Enabled = GL_TRUE;
+ }
+}
+
+
+/**
* Update derived color/blend/logicop state.
*/
static void
@@ -1223,6 +1237,9 @@ _mesa_update_state_locked( GLcontext *ctx )
if (new_state & (_NEW_BUFFERS | _NEW_VIEWPORT))
update_viewport_matrix(ctx);
+ if (new_state & _NEW_MULTISAMPLE)
+ update_multisample( ctx );
+
if (new_state & _NEW_COLOR)
update_color( ctx );
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 626c2648631..a6c92cb1af4 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -2999,6 +2999,24 @@ update_texture_state( GLcontext *ctx )
_mesa_problem(ctx, "invalid Alpha combine mode in update_texture_state");
break;
}
+ }
+
+ /* Determine which texture coordinate sets are actually needed */
+ if (fprog) {
+ const GLuint coordMask = (1 << MAX_TEXTURE_COORD_UNITS) - 1;
+ ctx->Texture._EnabledCoordUnits
+ = (fprog->Base.InputsRead >> FRAG_ATTRIB_TEX0) & coordMask;
+ }
+ else {
+ ctx->Texture._EnabledCoordUnits = ctx->Texture._EnabledUnits;
+ }
+
+ /* Setup texgen for those texture coordinate sets that are in use */
+ for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
+ struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
+
+ if (!(ctx->Texture._EnabledCoordUnits & (1 << unit)))
+ continue;
if (texUnit->TexGenEnabled) {
if (texUnit->TexGenEnabled & S_BIT) {
@@ -3021,16 +3039,6 @@ update_texture_state( GLcontext *ctx )
if (ctx->TextureMatrixStack[unit].Top->type != MATRIX_IDENTITY)
ctx->Texture._TexMatEnabled |= ENABLE_TEXMAT(unit);
}
-
- /* Determine which texture coordinate sets are actually needed */
- if (fprog) {
- const GLuint coordMask = (1 << MAX_TEXTURE_COORD_UNITS) - 1;
- ctx->Texture._EnabledCoordUnits
- = (fprog->Base.InputsRead >> FRAG_ATTRIB_TEX0) & coordMask;
- }
- else {
- ctx->Texture._EnabledCoordUnits = ctx->Texture._EnabledUnits;
- }
}
diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
index 2f459e517a5..4258a114ed0 100644
--- a/src/mesa/main/version.h
+++ b/src/mesa/main/version.h
@@ -31,7 +31,7 @@
#define MESA_MAJOR 7
#define MESA_MINOR 1
#define MESA_PATCH 0
-#define MESA_VERSION_STRING "7.1 rc1"
+#define MESA_VERSION_STRING "7.1 rc3"
/* To make version comparison easy */
#define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/src/mesa/shader/arbprogparse.c b/src/mesa/shader/arbprogparse.c
index 97bda9c6b38..f10233e5fed 100644
--- a/src/mesa/shader/arbprogparse.c
+++ b/src/mesa/shader/arbprogparse.c
@@ -1132,7 +1132,9 @@ parse_state_single_item (GLcontext * ctx, const GLubyte ** inst,
struct arb_program *Program,
gl_state_index state_tokens[STATE_LENGTH])
{
- switch (*(*inst)++) {
+ GLubyte token = *(*inst)++;
+
+ switch (token) {
case STATE_MATERIAL_PARSER:
state_tokens[0] = STATE_MATERIAL;
state_tokens[1] = parse_face_type (inst);
@@ -1317,7 +1319,6 @@ parse_state_single_item (GLcontext * ctx, const GLubyte ** inst,
case STATE_CLIP_PLANE:
state_tokens[0] = STATE_CLIPPLANE;
- state_tokens[1] = parse_integer (inst, Program);
if (parse_clipplane_num (ctx, inst, Program,
(GLint *) &state_tokens[1]))
return 1;
@@ -1769,7 +1770,9 @@ parse_param_elements (GLcontext * ctx, const GLubyte ** inst,
gl_state_index state_tokens[STATE_LENGTH] = {0, 0, 0, 0, 0};
GLfloat const_values[4];
- switch (*(*inst)++) {
+ GLubyte token = *(*inst)++;
+
+ switch (token) {
case PARAM_STATE_ELEMENT:
if (parse_state_single_item (ctx, inst, Program, state_tokens))
return 1;
diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c
index 7048770cf74..a80e6e91541 100644
--- a/src/mesa/shader/program.c
+++ b/src/mesa/shader/program.c
@@ -112,7 +112,7 @@ _mesa_free_program_data(GLcontext *ctx)
/**
* Update the default program objects in the given context to reference those
- * specified in the shared state and release those referencing the old
+ * specified in the shared state and release those referencing the old
* shared state.
*/
void
@@ -238,7 +238,7 @@ struct gl_program *
_mesa_init_fragment_program( GLcontext *ctx, struct gl_fragment_program *prog,
GLenum target, GLuint id)
{
- if (prog)
+ if (prog)
return _mesa_init_program_struct( ctx, &prog->Base, target, id );
else
return NULL;
@@ -252,7 +252,7 @@ struct gl_program *
_mesa_init_vertex_program( GLcontext *ctx, struct gl_vertex_program *prog,
GLenum target, GLuint id)
{
- if (prog)
+ if (prog)
return _mesa_init_program_struct( ctx, &prog->Base, target, id );
else
return NULL;
@@ -265,7 +265,7 @@ _mesa_init_vertex_program( GLcontext *ctx, struct gl_vertex_program *prog,
* ctx->Driver.NewProgram. May be overridden (ie. replaced) by a
* device driver function to implement OO deriviation with additional
* types not understood by this function.
- *
+ *
* \param ctx context
* \param id program id/number
* \param target program target/type
@@ -309,7 +309,7 @@ _mesa_delete_program(GLcontext *ctx, struct gl_program *prog)
if (prog == &_mesa_DummyProgram)
return;
-
+
if (prog->String)
_mesa_free(prog->String);
@@ -382,7 +382,7 @@ _mesa_reference_program(GLcontext *ctx,
deleteFlag = ((*ptr)->RefCount == 0);
/*_glthread_UNLOCK_MUTEX((*ptr)->Mutex);*/
-
+
if (deleteFlag) {
ASSERT(ctx);
ctx->Driver.DeleteProgram(ctx, *ptr);
@@ -437,6 +437,7 @@ _mesa_clone_program(GLcontext *ctx, const struct gl_program *prog)
clone->InputsRead = prog->InputsRead;
clone->OutputsWritten = prog->OutputsWritten;
clone->SamplersUsed = prog->SamplersUsed;
+ clone->ShadowSamplers = prog->ShadowSamplers;
memcpy(clone->TexturesUsed, prog->TexturesUsed, sizeof(prog->TexturesUsed));
if (prog->Parameters)
@@ -541,6 +542,53 @@ _mesa_insert_instructions(struct gl_program *prog, GLuint start, GLuint count)
/**
+ * Delete 'count' instructions at 'start' in the given program.
+ * Adjust branch targets accordingly.
+ */
+GLboolean
+_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count)
+{
+ const GLuint origLen = prog->NumInstructions;
+ const GLuint newLen = origLen - count;
+ struct prog_instruction *newInst;
+ GLuint i;
+
+ /* adjust branches */
+ for (i = 0; i < prog->NumInstructions; i++) {
+ struct prog_instruction *inst = prog->Instructions + i;
+ if (inst->BranchTarget > 0) {
+ if (inst->BranchTarget >= start) {
+ inst->BranchTarget -= count;
+ }
+ }
+ }
+
+ /* Alloc storage for new instructions */
+ newInst = _mesa_alloc_instructions(newLen);
+ if (!newInst) {
+ return GL_FALSE;
+ }
+
+ /* Copy 'start' instructions into new instruction buffer */
+ _mesa_copy_instructions(newInst, prog->Instructions, start);
+
+ /* Copy the remaining/tail instructions to new inst buffer */
+ _mesa_copy_instructions(newInst + start,
+ prog->Instructions + start + count,
+ newLen - start);
+
+ /* free old instructions */
+ _mesa_free_instructions(prog->Instructions, origLen);
+
+ /* install new instructions */
+ prog->Instructions = newInst;
+ prog->NumInstructions = newLen;
+
+ return GL_TRUE;
+}
+
+
+/**
* Search instructions for registers that match (oldFile, oldIndex),
* replacing them with (newFile, newIndex).
*/
@@ -843,7 +891,7 @@ _mesa_BindProgram(GLenum target, GLuint id)
* \note Not compiled into display lists.
* \note Called by both glDeleteProgramsNV and glDeleteProgramsARB.
*/
-void GLAPIENTRY
+void GLAPIENTRY
_mesa_DeletePrograms(GLsizei n, const GLuint *ids)
{
GLint i;
diff --git a/src/mesa/shader/program.h b/src/mesa/shader/program.h
index f1a69a2c016..48fe06ab7f3 100644
--- a/src/mesa/shader/program.h
+++ b/src/mesa/shader/program.h
@@ -67,13 +67,13 @@ _mesa_find_line_column(const GLubyte *string, const GLubyte *pos,
GLint *line, GLint *col);
-extern struct gl_program *
-_mesa_init_vertex_program(GLcontext *ctx,
- struct gl_vertex_program *prog,
+extern struct gl_program *
+_mesa_init_vertex_program(GLcontext *ctx,
+ struct gl_vertex_program *prog,
GLenum target, GLuint id);
-extern struct gl_program *
-_mesa_init_fragment_program(GLcontext *ctx,
+extern struct gl_program *
+_mesa_init_fragment_program(GLcontext *ctx,
struct gl_fragment_program *prog,
GLenum target, GLuint id);
@@ -115,6 +115,9 @@ _mesa_clone_program(GLcontext *ctx, const struct gl_program *prog);
extern GLboolean
_mesa_insert_instructions(struct gl_program *prog, GLuint start, GLuint count);
+extern GLboolean
+_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count);
+
extern struct gl_program *
_mesa_combine_programs(GLcontext *ctx,
const struct gl_program *progA,
diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index c9eec7f07ee..105f76be281 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -213,6 +213,35 @@ _mesa_lookup_shader_program(GLcontext *ctx, GLuint name)
/**
+ * As above, but record an error if program is not found.
+ */
+static struct gl_shader_program *
+_mesa_lookup_shader_program_err(GLcontext *ctx, GLuint name,
+ const char *caller)
+{
+ if (!name) {
+ _mesa_error(ctx, GL_INVALID_VALUE, caller);
+ return NULL;
+ }
+ else {
+ struct gl_shader_program *shProg = (struct gl_shader_program *)
+ _mesa_HashLookup(ctx->Shared->ShaderObjects, name);
+ if (!shProg) {
+ _mesa_error(ctx, GL_INVALID_VALUE, caller);
+ return NULL;
+ }
+ if (shProg->Type != GL_SHADER_PROGRAM_MESA) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, caller);
+ return NULL;
+ }
+ return shProg;
+ }
+}
+
+
+
+
+/**
* Allocate a new gl_shader object, initialize it.
*/
struct gl_shader *
@@ -315,6 +344,33 @@ _mesa_lookup_shader(GLcontext *ctx, GLuint name)
/**
+ * As above, but record an error if shader is not found.
+ */
+static struct gl_shader *
+_mesa_lookup_shader_err(GLcontext *ctx, GLuint name, const char *caller)
+{
+ if (!name) {
+ _mesa_error(ctx, GL_INVALID_VALUE, caller);
+ return NULL;
+ }
+ else {
+ struct gl_shader *sh = (struct gl_shader *)
+ _mesa_HashLookup(ctx->Shared->ShaderObjects, name);
+ if (!sh) {
+ _mesa_error(ctx, GL_INVALID_VALUE, caller);
+ return NULL;
+ }
+ if (sh->Type == GL_SHADER_PROGRAM_MESA) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, caller);
+ return NULL;
+ }
+ return sh;
+ }
+}
+
+
+
+/**
* Initialize context's shader state.
*/
void
@@ -360,26 +416,42 @@ copy_string(GLchar *dst, GLsizei maxLength, GLsizei *length, const GLchar *src)
}
+static GLboolean
+_mesa_is_program(GLcontext *ctx, GLuint name)
+{
+ struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, name);
+ return shProg ? GL_TRUE : GL_FALSE;
+}
+
+
+static GLboolean
+_mesa_is_shader(GLcontext *ctx, GLuint name)
+{
+ struct gl_shader *shader = _mesa_lookup_shader(ctx, name);
+ return shader ? GL_TRUE : GL_FALSE;
+}
+
+
/**
* Called via ctx->Driver.AttachShader()
*/
static void
_mesa_attach_shader(GLcontext *ctx, GLuint program, GLuint shader)
{
- struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
- struct gl_shader *sh = _mesa_lookup_shader(ctx, shader);
- GLuint n;
- GLuint i;
+ struct gl_shader_program *shProg;
+ struct gl_shader *sh;
+ GLuint i, n;
- if (!shProg || !sh) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glAttachShader(bad program or shader name)");
+ shProg = _mesa_lookup_shader_program_err(ctx, program, "glAttachShader");
+ if (!shProg)
+ return;
+
+ sh = _mesa_lookup_shader_err(ctx, shader, "glAttachShader");
+ if (!sh) {
return;
}
n = shProg->NumShaders;
-
for (i = 0; i < n; i++) {
if (shProg->Shaders[i] == sh) {
/* already attached */
@@ -409,10 +481,9 @@ _mesa_get_attrib_location(GLcontext *ctx, GLuint program,
const GLchar *name)
{
struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
+ = _mesa_lookup_shader_program_err(ctx, program, "glGetAttribLocation");
if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glGetAttribLocation");
return -1;
}
@@ -439,13 +510,13 @@ static void
_mesa_bind_attrib_location(GLcontext *ctx, GLuint program, GLuint index,
const GLchar *name)
{
- struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
+ struct gl_shader_program *shProg;
const GLint size = -1; /* unknown size */
GLint i, oldIndex;
+ shProg = _mesa_lookup_shader_program_err(ctx, program,
+ "glBindAttribLocation");
if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glBindAttribLocation(program)");
return;
}
@@ -458,6 +529,11 @@ _mesa_bind_attrib_location(GLcontext *ctx, GLuint program, GLuint index,
return;
}
+ if (index >= ctx->Const.VertexProgram.MaxAttribs) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glBindAttribLocation(index)");
+ return;
+ }
+
if (shProg->LinkStatus) {
/* get current index/location for the attribute */
oldIndex = _mesa_get_attrib_location(ctx, program, name);
@@ -539,11 +615,9 @@ _mesa_delete_program2(GLcontext *ctx, GLuint name)
*/
struct gl_shader_program *shProg;
- shProg = _mesa_lookup_shader_program(ctx, name);
- if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteProgram(name)");
+ shProg = _mesa_lookup_shader_program_err(ctx, name, "glDeleteProgram");
+ if (!shProg)
return;
- }
shProg->DeletePending = GL_TRUE;
@@ -555,10 +629,11 @@ _mesa_delete_program2(GLcontext *ctx, GLuint name)
static void
_mesa_delete_shader(GLcontext *ctx, GLuint shader)
{
- struct gl_shader *sh = _mesa_lookup_shader(ctx, shader);
- if (!sh) {
+ struct gl_shader *sh;
+
+ sh = _mesa_lookup_shader_err(ctx, shader, "glDeleteShader");
+ if (!sh)
return;
- }
sh->DeletePending = GL_TRUE;
@@ -570,16 +645,13 @@ _mesa_delete_shader(GLcontext *ctx, GLuint shader)
static void
_mesa_detach_shader(GLcontext *ctx, GLuint program, GLuint shader)
{
- struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
+ struct gl_shader_program *shProg;
GLuint n;
GLuint i, j;
- if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glDetachShader(bad program or shader name)");
+ shProg = _mesa_lookup_shader_program_err(ctx, program, "glDetachShader");
+ if (!shProg)
return;
- }
n = shProg->NumShaders;
@@ -588,7 +660,7 @@ _mesa_detach_shader(GLcontext *ctx, GLuint program, GLuint shader)
/* found it */
struct gl_shader **newList;
- /* derefernce */
+ /* release */
_mesa_reference_shader(ctx, &shProg->Shaders[i], NULL);
/* alloc new, smaller array */
@@ -624,8 +696,17 @@ _mesa_detach_shader(GLcontext *ctx, GLuint program, GLuint shader)
}
/* not found */
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glDetachShader(shader not found)");
+ {
+ GLenum err;
+ if (_mesa_is_shader(ctx, shader))
+ err = GL_INVALID_OPERATION;
+ else if (_mesa_is_program(ctx, shader))
+ err = GL_INVALID_OPERATION;
+ else
+ err = GL_INVALID_VALUE;
+ _mesa_error(ctx, err, "glDetachProgram(shader)");
+ return;
+ }
}
@@ -637,14 +718,12 @@ _mesa_get_active_attrib(GLcontext *ctx, GLuint program, GLuint index,
static const GLenum vec_types[] = {
GL_FLOAT, GL_FLOAT_VEC2, GL_FLOAT_VEC3, GL_FLOAT_VEC4
};
- struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
+ struct gl_shader_program *shProg;
GLint sz;
- if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveAttrib");
+ shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveAttrib");
+ if (!shProg)
return;
- }
if (!shProg->Attributes || index >= shProg->Attributes->NumParameters) {
_mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveAttrib(index)");
@@ -669,15 +748,13 @@ _mesa_get_active_uniform(GLcontext *ctx, GLuint program, GLuint index,
GLsizei maxLength, GLsizei *length, GLint *size,
GLenum *type, GLchar *nameOut)
{
- const struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
+ const struct gl_shader_program *shProg;
const struct gl_program *prog;
GLint progPos;
- if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveUniform");
+ shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniform");
+ if (!shProg)
return;
- }
if (!shProg->Uniforms || index >= shProg->Uniforms->NumUniforms) {
_mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveUniform(index)");
@@ -716,19 +793,16 @@ static void
_mesa_get_attached_shaders(GLcontext *ctx, GLuint program, GLsizei maxCount,
GLsizei *count, GLuint *obj)
{
- struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
+ struct gl_shader_program *shProg =
+ _mesa_lookup_shader_program_err(ctx, program, "glGetAttachedShaders");
if (shProg) {
- GLint i;
- for (i = 0; i < maxCount && i < shProg->NumShaders; i++) {
+ GLuint i;
+ for (i = 0; i < (GLuint) maxCount && i < shProg->NumShaders; i++) {
obj[i] = shProg->Shaders[i]->Name;
}
if (count)
*count = i;
}
- else {
- _mesa_error(ctx, GL_INVALID_VALUE, "glGetAttachedShaders");
- }
}
@@ -809,10 +883,9 @@ _mesa_get_programiv(GLcontext *ctx, GLuint program,
static void
_mesa_get_shaderiv(GLcontext *ctx, GLuint name, GLenum pname, GLint *params)
{
- struct gl_shader *shader = _mesa_lookup_shader(ctx, name);
+ struct gl_shader *shader = _mesa_lookup_shader_err(ctx, name, "glGetShaderiv");
if (!shader) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glGetShaderiv(shader)");
return;
}
@@ -873,21 +946,24 @@ static void
_mesa_get_shader_source(GLcontext *ctx, GLuint shader, GLsizei maxLength,
GLsizei *length, GLchar *sourceOut)
{
- struct gl_shader *sh = _mesa_lookup_shader(ctx, shader);
+ struct gl_shader *sh;
+ sh = _mesa_lookup_shader_err(ctx, shader, "glGetShaderSource");
if (!sh) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glGetShaderSource(shader)");
return;
}
copy_string(sourceOut, maxLength, length, sh->Source);
}
+#define MAX_UNIFORM_ELEMENTS 16
+
/**
- * Called via ctx->Driver.GetUniformfv().
+ * Helper for GetUniformfv(), GetUniformiv()
+ * Returns number of elements written to 'params' output.
*/
-static void
-_mesa_get_uniformfv(GLcontext *ctx, GLuint program, GLint location,
- GLfloat *params)
+static GLuint
+get_uniformfv(GLcontext *ctx, GLuint program, GLint location,
+ GLfloat *params)
{
struct gl_shader_program *shProg
= _mesa_lookup_shader_program(ctx, program);
@@ -911,9 +987,13 @@ _mesa_get_uniformfv(GLcontext *ctx, GLuint program, GLint location,
ASSERT(prog);
if (prog) {
+ /* See uniformiv() below */
+ assert(prog->Parameters->Parameters[progPos].Size <= MAX_UNIFORM_ELEMENTS);
+
for (i = 0; i < prog->Parameters->Parameters[progPos].Size; i++) {
params[i] = prog->Parameters->ParameterValues[progPos][i];
}
+ return prog->Parameters->Parameters[progPos].Size;
}
}
else {
@@ -923,37 +1003,60 @@ _mesa_get_uniformfv(GLcontext *ctx, GLuint program, GLint location,
else {
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformfv(program)");
}
+ return 0;
}
/**
- * Called via ctx->Driver.GetUniformLocation().
+ * Called via ctx->Driver.GetUniformfv().
*/
-static GLint
-_mesa_get_uniform_location(GLcontext *ctx, GLuint program, const GLchar *name)
+static void
+_mesa_get_uniformfv(GLcontext *ctx, GLuint program, GLint location,
+ GLfloat *params)
{
- struct gl_shader_program *shProg
- = _mesa_lookup_shader_program(ctx, program);
- if (!shProg)
- return -1;
-
- return _mesa_lookup_uniform(shProg->Uniforms, name);
+ (void) get_uniformfv(ctx, program, location, params);
}
-static GLboolean
-_mesa_is_program(GLcontext *ctx, GLuint name)
+/**
+ * Called via ctx->Driver.GetUniformiv().
+ */
+static void
+_mesa_get_uniformiv(GLcontext *ctx, GLuint program, GLint location,
+ GLint *params)
{
- struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, name);
- return shProg ? GL_TRUE : GL_FALSE;
+ GLfloat fparams[MAX_UNIFORM_ELEMENTS];
+ GLuint n = get_uniformfv(ctx, program, location, fparams);
+ GLuint i;
+ assert(n <= MAX_UNIFORM_ELEMENTS);
+ for (i = 0; i < n; i++) {
+ params[i] = (GLint) fparams[i];
+ }
}
-static GLboolean
-_mesa_is_shader(GLcontext *ctx, GLuint name)
+/**
+ * Called via ctx->Driver.GetUniformLocation().
+ */
+static GLint
+_mesa_get_uniform_location(GLcontext *ctx, GLuint program, const GLchar *name)
{
- struct gl_shader *shader = _mesa_lookup_shader(ctx, name);
- return shader ? GL_TRUE : GL_FALSE;
+ struct gl_shader_program *shProg =
+ _mesa_lookup_shader_program_err(ctx, program, "glGetUniformLocation");
+
+ if (!shProg)
+ return -1;
+
+ if (shProg->LinkStatus == GL_FALSE) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformfv(program)");
+ return -1;
+ }
+
+ /* XXX we should return -1 if the uniform was declared, but not
+ * actually used.
+ */
+
+ return _mesa_lookup_uniform(shProg->Uniforms, name);
}
@@ -964,11 +1067,11 @@ _mesa_is_shader(GLcontext *ctx, GLuint name)
static void
_mesa_shader_source(GLcontext *ctx, GLuint shader, const GLchar *source)
{
- struct gl_shader *sh = _mesa_lookup_shader(ctx, shader);
- if (!sh) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glShaderSource(shaderObj)");
+ struct gl_shader *sh;
+
+ sh = _mesa_lookup_shader_err(ctx, shader, "glShaderSource");
+ if (!sh)
return;
- }
/* free old shader source string and install new one */
if (sh->Source) {
@@ -985,12 +1088,11 @@ _mesa_shader_source(GLcontext *ctx, GLuint shader, const GLchar *source)
static void
_mesa_compile_shader(GLcontext *ctx, GLuint shaderObj)
{
- struct gl_shader *sh = _mesa_lookup_shader(ctx, shaderObj);
+ struct gl_shader *sh;
- if (!sh) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glCompileShader(shaderObj)");
+ sh = _mesa_lookup_shader_err(ctx, shaderObj, "glCompileShader");
+ if (!sh)
return;
- }
sh->CompileStatus = _slang_compile(ctx, sh);
}
@@ -1004,11 +1106,9 @@ _mesa_link_program(GLcontext *ctx, GLuint program)
{
struct gl_shader_program *shProg;
- shProg = _mesa_lookup_shader_program(ctx, program);
- if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glLinkProgram(program)");
+ shProg = _mesa_lookup_shader_program_err(ctx, program, "glLinkProgram");
+ if (!shProg)
return;
- }
FLUSH_VERTICES(ctx, _NEW_PROGRAM);
@@ -1033,10 +1133,12 @@ _mesa_use_program(GLcontext *ctx, GLuint program)
FLUSH_VERTICES(ctx, _NEW_PROGRAM);
if (program) {
- shProg = _mesa_lookup_shader_program(ctx, program);
+ shProg = _mesa_lookup_shader_program_err(ctx, program, "glUseProgram");
if (!shProg) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glUseProgramObjectARB(programObj)");
+ return;
+ }
+ if (!shProg->LinkStatus) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glUseProgram");
return;
}
}
@@ -1081,7 +1183,7 @@ update_textures_used(struct gl_program *prog)
*/
static void
set_program_uniform(GLcontext *ctx, struct gl_program *program, GLint location,
- GLenum type, GLint count, GLint elems, const void *values)
+ GLenum type, GLsizei count, GLint elems, const void *values)
{
if (program->Parameters->Parameters[location].Type == PROGRAM_SAMPLER) {
/* This controls which texture unit which is used by a sampler */
@@ -1113,7 +1215,7 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, GLint location,
}
else {
/* ordinary uniform variable */
- GLint k, i;
+ GLsizei k, i;
if (count * elems > program->Parameters->Parameters[location].Size) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glUniform(count too large)");
@@ -1347,6 +1449,7 @@ _mesa_init_glsl_driver_functions(struct dd_function_table *driver)
driver->GetShaderInfoLog = _mesa_get_shader_info_log;
driver->GetShaderSource = _mesa_get_shader_source;
driver->GetUniformfv = _mesa_get_uniformfv;
+ driver->GetUniformiv = _mesa_get_uniformiv;
driver->GetUniformLocation = _mesa_get_uniform_location;
driver->IsProgram = _mesa_is_program;
driver->IsShader = _mesa_is_shader;
diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
index 26080cf26ca..f741c657e4a 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
@@ -1496,6 +1496,23 @@ bvec4 equal(const ivec4 u, const ivec4 v)
__asm vec4_seq __retVal, u, v;
}
+bvec2 equal(const bvec2 u, const bvec2 v)
+{
+ __asm vec4_seq __retVal.xy, u, v;
+}
+
+bvec3 equal(const bvec3 u, const bvec3 v)
+{
+ __asm vec4_seq __retVal.xyz, u, v;
+}
+
+bvec4 equal(const bvec4 u, const bvec4 v)
+{
+ __asm vec4_seq __retVal, u, v;
+}
+
+
+
//// notEqual
@@ -1529,6 +1546,22 @@ bvec4 notEqual(const ivec4 u, const ivec4 v)
__asm vec4_sne __retVal, u, v;
}
+bvec2 notEqual(const bvec2 u, const bvec2 v)
+{
+ __asm vec4_sne __retVal.xy, u, v;
+}
+
+bvec3 notEqual(const bvec3 u, const bvec3 v)
+{
+ __asm vec4_sne __retVal.xyz, u, v;
+}
+
+bvec4 notEqual(const bvec4 u, const bvec4 v)
+{
+ __asm vec4_sne __retVal, u, v;
+}
+
+
//// any
@@ -1559,7 +1592,7 @@ bool any(const bvec4 v)
//// all
-bool all (const vec2 v)
+bool all (const bvec2 v)
{
float prod;
__asm vec4_multiply prod.x, v.x, v.y;
diff --git a/src/mesa/shader/slang/library/slang_common_builtin_gc.h b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
index c8d1ffc1748..260a768de6a 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin_gc.h
+++ b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
@@ -648,162 +648,173 @@
1,1,0,7,118,0,0,0,1,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,
122,0,0,18,117,0,0,18,118,0,0,0,0,1,0,4,0,101,113,117,97,108,0,1,1,0,8,117,0,0,1,1,0,8,118,0,0,0,1,
4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,0,18,117,0,0,18,118,0,0,0,0,1,0,
-2,0,110,111,116,69,113,117,97,108,0,1,1,0,10,117,0,0,1,1,0,10,118,0,0,0,1,4,118,101,99,52,95,115,
-110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,117,0,0,18,118,0,0,0,0,1,0,3,0,110,
-111,116,69,113,117,97,108,0,1,1,0,11,117,0,0,1,1,0,11,118,0,0,0,1,4,118,101,99,52,95,115,110,101,0,
-18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,117,0,0,18,118,0,0,0,0,1,0,4,0,110,111,116,
-69,113,117,97,108,0,1,1,0,12,117,0,0,1,1,0,12,118,0,0,0,1,4,118,101,99,52,95,115,110,101,0,18,95,
-95,114,101,116,86,97,108,0,0,18,117,0,0,18,118,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,1,
-0,6,117,0,0,1,1,0,6,118,0,0,0,1,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,
-59,120,121,0,0,18,117,0,0,18,118,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,1,0,7,117,0,0,1,
-1,0,7,118,0,0,0,1,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,
-0,0,18,117,0,0,18,118,0,0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,1,0,8,117,0,0,1,1,0,8,118,
-0,0,0,1,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,0,18,117,0,0,18,118,0,0,
-0,0,1,0,1,0,97,110,121,0,1,1,0,2,118,0,0,0,1,3,2,0,9,1,115,117,109,0,0,0,4,118,101,99,52,95,97,100,
-100,0,18,115,117,109,0,59,120,0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,115,
-110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,115,117,109,0,59,120,0,0,17,48,0,48,0,0,0,
-0,0,1,0,1,0,97,110,121,0,1,1,0,3,118,0,0,0,1,3,2,0,9,1,115,117,109,0,0,0,4,118,101,99,52,95,97,100,
-100,0,18,115,117,109,0,59,120,0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,97,
-100,100,0,18,115,117,109,0,59,120,0,0,18,115,117,109,0,59,120,0,0,18,118,0,59,122,0,0,0,4,118,101,
+2,0,101,113,117,97,108,0,1,1,0,2,117,0,0,1,1,0,2,118,0,0,0,1,4,118,101,99,52,95,115,101,113,0,18,
+95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,117,0,0,18,118,0,0,0,0,1,0,3,0,101,113,117,97,108,
+0,1,1,0,3,117,0,0,1,1,0,3,118,0,0,0,1,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,
+108,0,59,120,121,122,0,0,18,117,0,0,18,118,0,0,0,0,1,0,4,0,101,113,117,97,108,0,1,1,0,4,117,0,0,1,
+1,0,4,118,0,0,0,1,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,0,18,117,0,0,
+18,118,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,1,0,10,117,0,0,1,1,0,10,118,0,0,0,1,4,118,
+101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,117,0,0,18,118,0,0,0,
+0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,1,0,11,117,0,0,1,1,0,11,118,0,0,0,1,4,118,101,99,52,95,
+115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,117,0,0,18,118,0,0,0,0,1,0,4,
+0,110,111,116,69,113,117,97,108,0,1,1,0,12,117,0,0,1,1,0,12,118,0,0,0,1,4,118,101,99,52,95,115,110,
+101,0,18,95,95,114,101,116,86,97,108,0,0,18,117,0,0,18,118,0,0,0,0,1,0,2,0,110,111,116,69,113,117,
+97,108,0,1,1,0,6,117,0,0,1,1,0,6,118,0,0,0,1,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,
+86,97,108,0,59,120,121,0,0,18,117,0,0,18,118,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,1,0,
+7,117,0,0,1,1,0,7,118,0,0,0,1,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,
+120,121,122,0,0,18,117,0,0,18,118,0,0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,1,0,8,117,0,0,
+1,1,0,8,118,0,0,0,1,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,0,18,117,0,0,
+18,118,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,1,0,2,117,0,0,1,1,0,2,118,0,0,0,1,4,118,
+101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,117,0,0,18,118,0,0,0,
+0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,1,0,3,117,0,0,1,1,0,3,118,0,0,0,1,4,118,101,99,52,95,
+115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,117,0,0,18,118,0,0,0,0,1,0,4,
+0,110,111,116,69,113,117,97,108,0,1,1,0,4,117,0,0,1,1,0,4,118,0,0,0,1,4,118,101,99,52,95,115,110,
+101,0,18,95,95,114,101,116,86,97,108,0,0,18,117,0,0,18,118,0,0,0,0,1,0,1,0,97,110,121,0,1,1,0,2,
+118,0,0,0,1,3,2,0,9,1,115,117,109,0,0,0,4,118,101,99,52,95,97,100,100,0,18,115,117,109,0,59,120,0,
+0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,
+86,97,108,0,59,120,0,0,18,115,117,109,0,59,120,0,0,17,48,0,48,0,0,0,0,0,1,0,1,0,97,110,121,0,1,1,0,
+3,118,0,0,0,1,3,2,0,9,1,115,117,109,0,0,0,4,118,101,99,52,95,97,100,100,0,18,115,117,109,0,59,120,
+0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,97,100,100,0,18,115,117,109,0,59,
+120,0,0,18,115,117,109,0,59,120,0,0,18,118,0,59,122,0,0,0,4,118,101,99,52,95,115,110,101,0,18,95,
+95,114,101,116,86,97,108,0,59,120,0,0,18,115,117,109,0,59,120,0,0,17,48,0,48,0,0,0,0,0,1,0,1,0,97,
+110,121,0,1,1,0,4,118,0,0,0,1,3,2,0,9,1,115,117,109,0,0,0,4,118,101,99,52,95,97,100,100,0,18,115,
+117,109,0,59,120,0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,97,100,100,0,18,
+115,117,109,0,59,120,0,0,18,115,117,109,0,59,120,0,0,18,118,0,59,122,0,0,0,4,118,101,99,52,95,97,
+100,100,0,18,115,117,109,0,59,120,0,0,18,115,117,109,0,59,120,0,0,18,118,0,59,119,0,0,0,4,118,101,
99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,115,117,109,0,59,120,0,0,17,
-48,0,48,0,0,0,0,0,1,0,1,0,97,110,121,0,1,1,0,4,118,0,0,0,1,3,2,0,9,1,115,117,109,0,0,0,4,118,101,
-99,52,95,97,100,100,0,18,115,117,109,0,59,120,0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,
-101,99,52,95,97,100,100,0,18,115,117,109,0,59,120,0,0,18,115,117,109,0,59,120,0,0,18,118,0,59,122,
-0,0,0,4,118,101,99,52,95,97,100,100,0,18,115,117,109,0,59,120,0,0,18,115,117,109,0,59,120,0,0,18,
-118,0,59,119,0,0,0,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,
-115,117,109,0,59,120,0,0,17,48,0,48,0,0,0,0,0,1,0,1,0,97,108,108,0,1,1,0,10,118,0,0,0,1,3,2,0,9,1,
-112,114,111,100,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,
-120,0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,115,110,101,0,18,95,95,114,
-101,116,86,97,108,0,59,120,0,0,18,112,114,111,100,0,59,120,0,0,17,48,0,48,0,0,0,0,8,18,118,0,59,
-120,0,18,118,0,59,121,0,34,0,0,1,0,1,0,97,108,108,0,1,1,0,3,118,0,0,0,1,3,2,0,9,1,112,114,111,100,
-0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,120,0,0,18,118,
-0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,112,114,
-111,100,0,59,120,0,0,18,112,114,111,100,0,59,120,0,0,18,118,0,59,122,0,0,0,4,118,101,99,52,95,115,
-110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,112,114,111,100,0,59,120,0,0,17,48,0,48,0,
-0,0,0,0,1,0,1,0,97,108,108,0,1,1,0,4,118,0,0,0,1,3,2,0,9,1,112,114,111,100,0,0,0,4,118,101,99,52,
-95,109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,120,0,0,18,118,0,59,120,0,0,18,118,0,
-59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,120,0,0,
-18,112,114,111,100,0,59,120,0,0,18,118,0,59,122,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,
-108,121,0,18,112,114,111,100,0,59,120,0,0,18,112,114,111,100,0,59,120,0,0,18,118,0,59,119,0,0,0,4,
-118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,112,114,111,100,0,59,
-120,0,0,17,48,0,48,0,0,0,0,0,1,0,2,0,110,111,116,0,1,1,0,2,118,0,0,0,1,4,118,101,99,52,95,115,101,
-113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,17,48,0,48,0,0,0,0,0,1,0,3,0,110,
-111,116,0,1,1,0,3,118,0,0,0,1,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,
-120,121,122,0,0,18,118,0,0,17,48,0,48,0,0,0,0,0,1,0,4,0,110,111,116,0,1,1,0,4,118,0,0,0,1,4,118,
-101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,17,48,0,48,0,0,0,0,0,1,0,
-12,0,116,101,120,116,117,114,101,49,68,0,1,1,0,16,115,97,109,112,108,101,114,0,0,1,1,0,9,99,111,
-111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,
-115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,
-49,68,80,114,111,106,0,1,1,0,16,115,97,109,112,108,101,114,0,0,1,1,0,10,99,111,111,114,100,0,0,0,1,
-4,118,101,99,52,95,116,101,120,112,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,
-108,101,114,0,0,18,99,111,111,114,100,0,59,120,121,121,121,0,0,0,0,1,0,12,0,116,101,120,116,117,
-114,101,49,68,80,114,111,106,0,1,1,0,16,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,
+48,0,48,0,0,0,0,0,1,0,1,0,97,108,108,0,1,1,0,2,118,0,0,0,1,3,2,0,9,1,112,114,111,100,0,0,0,4,118,
+101,99,52,95,109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,120,0,0,18,118,0,59,120,0,0,
+18,118,0,59,121,0,0,0,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,
+18,112,114,111,100,0,59,120,0,0,17,48,0,48,0,0,0,0,8,18,118,0,59,120,0,18,118,0,59,121,0,34,0,0,1,
+0,1,0,97,108,108,0,1,1,0,3,118,0,0,0,1,3,2,0,9,1,112,114,111,100,0,0,0,4,118,101,99,52,95,109,117,
+108,116,105,112,108,121,0,18,112,114,111,100,0,59,120,0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,
+0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,120,0,0,18,112,114,
+111,100,0,59,120,0,0,18,118,0,59,122,0,0,0,4,118,101,99,52,95,115,110,101,0,18,95,95,114,101,116,
+86,97,108,0,59,120,0,0,18,112,114,111,100,0,59,120,0,0,17,48,0,48,0,0,0,0,0,1,0,1,0,97,108,108,0,1,
+1,0,4,118,0,0,0,1,3,2,0,9,1,112,114,111,100,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,
+121,0,18,112,114,111,100,0,59,120,0,0,18,118,0,59,120,0,0,18,118,0,59,121,0,0,0,4,118,101,99,52,95,
+109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,120,0,0,18,112,114,111,100,0,59,120,0,0,
+18,118,0,59,122,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,112,114,111,100,0,59,
+120,0,0,18,112,114,111,100,0,59,120,0,0,18,118,0,59,119,0,0,0,4,118,101,99,52,95,115,110,101,0,18,
+95,95,114,101,116,86,97,108,0,59,120,0,0,18,112,114,111,100,0,59,120,0,0,17,48,0,48,0,0,0,0,0,1,0,
+2,0,110,111,116,0,1,1,0,2,118,0,0,0,1,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,
+108,0,59,120,121,0,0,18,118,0,0,17,48,0,48,0,0,0,0,0,1,0,3,0,110,111,116,0,1,1,0,3,118,0,0,0,1,4,
+118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0,17,
+48,0,48,0,0,0,0,0,1,0,4,0,110,111,116,0,1,1,0,4,118,0,0,0,1,4,118,101,99,52,95,115,101,113,0,18,95,
+95,114,101,116,86,97,108,0,0,18,118,0,0,17,48,0,48,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,
+49,68,0,1,1,0,16,115,97,109,112,108,101,114,0,0,1,1,0,9,99,111,111,114,100,0,0,0,1,4,118,101,99,52,
+95,116,101,120,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,
+111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,1,0,16,115,
+97,109,112,108,101,114,0,0,1,1,0,10,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,
+49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,
+100,0,59,120,121,121,121,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,1,0,
+16,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,
+120,112,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,
+111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,0,1,1,0,17,115,97,109,112,108,101,
+114,0,0,1,1,0,10,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,50,100,0,18,95,95,114,
+101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,
+101,120,116,117,114,101,50,68,80,114,111,106,0,1,1,0,17,115,97,109,112,108,101,114,0,0,1,1,0,11,99,
+111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,50,100,0,18,95,95,114,101,116,86,97,108,
+0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,120,121,122,122,0,0,0,0,1,0,12,0,
+116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,1,0,17,115,97,109,112,108,101,114,0,0,1,1,0,
+12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,50,100,0,18,95,95,114,101,116,86,
+97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,
+116,117,114,101,51,68,0,1,1,0,18,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,
+1,4,118,101,99,52,95,116,101,120,51,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,
+101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,114,111,
+106,0,1,1,0,18,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,
+95,116,101,120,112,51,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,
+18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,67,117,98,101,0,1,1,0,19,115,97,
+109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,99,117,
+98,101,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,
+100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,0,1,1,0,20,115,97,109,112,108,101,114,0,0,1,1,0,
+11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,49,100,0,18,95,95,114,101,116,86,97,
+108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,
+111,119,49,68,80,114,111,106,0,1,1,0,20,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,
0,0,0,1,4,118,101,99,52,95,116,101,120,112,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,
-109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,0,
-1,1,0,17,115,97,109,112,108,101,114,0,0,1,1,0,10,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,
-101,120,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,
-111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,1,0,17,115,97,
-109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,50,
-100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,
-59,120,121,122,122,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,1,0,17,
+109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,0,1,1,
+0,21,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,
+120,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,
+114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,1,0,21,115,97,109,112,108,
+101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,50,100,0,18,95,
+95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,
+12,0,116,101,120,116,117,114,101,50,68,82,101,99,116,0,1,1,0,22,115,97,109,112,108,101,114,0,0,1,1,
+0,10,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,114,101,99,116,0,18,95,95,114,
+101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,
+101,120,116,117,114,101,50,68,82,101,99,116,80,114,111,106,0,1,1,0,22,115,97,109,112,108,101,114,0,
+0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,95,114,101,99,116,0,18,95,
+95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,120,121,
+122,122,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,82,101,99,116,80,114,111,106,0,1,1,0,22,
115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,
-112,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,
-114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,0,1,1,0,18,115,97,109,112,108,101,114,0,
-0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,51,100,0,18,95,95,114,101,116,
-86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,
-116,117,114,101,51,68,80,114,111,106,0,1,1,0,18,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,
-114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,51,100,0,18,95,95,114,101,116,86,97,108,0,0,18,
-115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,
-67,117,98,101,0,1,1,0,19,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,
-101,99,52,95,116,101,120,99,117,98,101,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,
-101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,0,1,1,0,20,115,97,
-109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,49,100,
-0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,
-0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,1,0,20,115,97,109,112,108,101,114,0,0,1,
-1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,49,100,0,18,95,95,114,101,116,
-86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,
-100,111,119,50,68,0,1,1,0,21,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,
-118,101,99,52,95,116,101,120,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,
-114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,1,0,
-21,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,
-120,112,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,
-111,114,100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,82,101,99,116,0,1,1,0,22,115,97,109,
-112,108,101,114,0,0,1,1,0,10,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,114,101,
-99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,
-100,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,82,101,99,116,80,114,111,106,0,1,1,0,22,115,
-97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,
+112,95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,
+99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,82,101,99,116,0,1,1,0,23,115,97,
+109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,114,
+101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,
+114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,82,101,99,116,80,114,111,106,0,1,1,0,23,115,
+97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,
95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,
-111,114,100,0,59,120,121,122,122,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,82,101,99,116,
-80,114,111,106,0,1,1,0,22,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,
-101,99,52,95,116,101,120,112,95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,
-112,108,101,114,0,0,18,99,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,82,101,
-99,116,0,1,1,0,23,115,97,109,112,108,101,114,0,0,1,1,0,11,99,111,111,114,100,0,0,0,1,4,118,101,99,
-52,95,116,101,120,95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,
-114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,82,101,99,116,80,114,
-111,106,0,1,1,0,23,115,97,109,112,108,101,114,0,0,1,1,0,12,99,111,111,114,100,0,0,0,1,4,118,101,99,
-52,95,116,101,120,112,95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,
-101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,1,0,9,120,0,0,0,1,4,
-102,108,111,97,116,95,110,111,105,115,101,49,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,
-0,9,0,110,111,105,115,101,49,0,1,1,0,10,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115,101,50,
-0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,1,0,11,120,
-0,0,0,1,4,102,108,111,97,116,95,110,111,105,115,101,51,0,18,95,95,114,101,116,86,97,108,0,0,18,120,
-0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,1,0,12,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,
-115,101,52,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,
-1,0,9,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,
-0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,
-0,51,52,0,0,46,0,0,20,0,0,1,0,10,0,110,111,105,115,101,50,0,1,1,0,10,120,0,0,0,1,9,18,95,95,114,
+111,114,100,0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,1,0,9,120,0,0,0,1,4,102,108,111,97,116,95,
+110,111,105,115,101,49,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,9,0,110,111,105,115,
+101,49,0,1,1,0,10,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115,101,50,0,18,95,95,114,101,
+116,86,97,108,0,0,18,120,0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,1,0,11,120,0,0,0,1,4,102,108,
+111,97,116,95,110,111,105,115,101,51,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,9,0,
+110,111,105,115,101,49,0,1,1,0,12,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115,101,52,0,18,
+95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,1,0,9,120,0,0,0,
+1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,
+95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,
+46,0,0,20,0,0,1,0,10,0,110,111,105,115,101,50,0,1,1,0,10,120,0,0,0,1,9,18,95,95,114,101,116,86,97,
+108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,
+121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,
+0,0,0,0,46,0,0,20,0,0,1,0,10,0,110,111,105,115,101,50,0,1,1,0,11,120,0,0,0,1,9,18,95,95,114,101,
+116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,
+97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,
+17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,0,1,0,10,0,110,111,105,115,101,50,0,1,1,0,12,
+120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,
+20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,
+99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,
+0,20,0,0,1,0,11,0,110,111,105,115,101,51,0,1,1,0,9,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,
+59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,
+58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,20,0,0,1,0,11,0,110,
+111,105,115,101,51,0,1,1,0,10,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,
+105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,
+101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,
+95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,
+53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,0,1,0,11,0,110,111,105,115,101,51,0,1,1,0,11,
+120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,
+20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,
+99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,53,0,
+52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,20,0,0,1,0,11,0,110,111,105,115,
+101,51,0,1,1,0,12,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,
+49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,
+120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,
+55,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,
+120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,
+51,0,49,57,0,0,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,52,0,1,1,0,9,120,0,0,0,1,9,18,95,95,
+114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,
+116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,
+18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,
+46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,17,50,
+51,0,53,52,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,52,0,1,1,0,10,120,0,0,0,1,9,18,95,95,114,
101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,
86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,
-0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,0,1,0,10,0,110,111,105,115,101,50,0,1,1,0,11,120,0,0,0,1,9,18,
-95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,
-114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,
-0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,0,1,0,10,0,110,111,105,115,101,
-50,0,1,1,0,12,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,
-18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,
-58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,
-0,0,0,46,0,0,20,0,0,1,0,11,0,110,111,105,115,101,51,0,1,1,0,9,120,0,0,0,1,9,18,95,95,114,101,116,
-86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,
-108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,18,95,95,
-114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,20,
-0,0,1,0,11,0,110,111,105,115,101,51,0,1,1,0,10,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,
-120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,
-110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,
+0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,
+101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,9,18,
+95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,
+50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,52,0,1,1,0,
+11,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,
+0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,
+99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,53,0,
+52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,
+97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,52,0,0,0,
+17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,52,0,1,
+1,0,12,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,
+0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,
+101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,
46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,
-118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,0,1,0,11,0,110,111,105,
-115,101,51,0,1,1,0,11,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,
-101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,
-18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,
-0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,
-99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,20,0,0,1,0,11,0,
-110,111,105,115,101,51,0,1,1,0,12,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,
-111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,
-115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,
-0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,
-115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,
-52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,52,0,1,1,0,9,120,0,0,
-0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,
-95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,
-46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,17,53,
-0,52,55,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,
-120,0,17,50,51,0,53,52,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,52,0,1,1,0,10,120,0,0,0,1,9,
-18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,95,95,
-114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,
-0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,
-111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,
-0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,
-99,50,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,
-52,0,1,1,0,11,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,
-18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,
-58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,
-18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,
-17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,
-116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,52,
-0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0,0,20,0,0,1,0,12,0,110,111,105,115,101,
-52,0,1,1,0,12,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,
-18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,
-58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,
-0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,
-58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,
-57,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,
-120,0,58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,17,
-51,55,0,52,56,0,0,0,0,46,0,0,20,0,0,0
+118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,
+0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,18,120,
+0,58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,17,51,55,
+0,52,56,0,0,0,0,46,0,0,20,0,0,0
diff --git a/src/mesa/shader/slang/library/slang_core.gc b/src/mesa/shader/slang/library/slang_core.gc
index ffa57f74c27..15a0792f437 100644
--- a/src/mesa/shader/slang/library/slang_core.gc
+++ b/src/mesa/shader/slang/library/slang_core.gc
@@ -249,6 +249,14 @@ vec4 __constructor(const vec3 v3, const float f)
__retVal.w = f;
}
+vec4 __constructor(const vec2 v2, const float f1, const float f2)
+{
+ // XXX this constructor shouldn't be needed anymore
+ __retVal.xy = v2;
+ __retVal.z = f1;
+ __retVal.w = f2;
+}
+
//// ivec2 constructors
@@ -350,6 +358,19 @@ bvec2 __constructor(const int i)
__asm vec4_seq __retVal.xy, i.xx, zero;
}
+bvec2 __constructor(const vec2 v)
+{
+ const vec2 zero = vec2(0.0, 0.0);
+ __asm vec4_seq __retVal.xy, v, zero;
+}
+
+bvec2 __constructor(const ivec2 v)
+{
+ const ivec2 zero = ivec2(0, 0);
+ __asm vec4_seq __retVal.xy, v, zero;
+}
+
+
//// bvec3 constructors
@@ -377,6 +398,19 @@ bvec3 __constructor(const int i)
__asm vec4_seq __retVal.xyz, i.xxx, zero;
}
+bvec3 __constructor(const vec3 v)
+{
+ const vec3 zero = vec3(0.0, 0.0, 0.0);
+ __asm vec4_seq __retVal.xyz, v, zero;
+}
+
+bvec3 __constructor(const ivec3 v)
+{
+ const ivec3 zero = ivec3(0, 0, 0);
+ __asm vec4_seq __retVal.xyz, v, zero;
+}
+
+
//// bvec4 constructors
@@ -405,6 +439,18 @@ bvec4 __constructor(const int i)
__asm vec4_seq __retVal, i.xxxx, zero;
}
+bvec4 __constructor(const vec4 v)
+{
+ const vec4 zero = vec4(0.0, 0.0, 0.0, 0.0);
+ __asm vec4_seq __retVal, v, zero;
+}
+
+bvec4 __constructor(const ivec4 v)
+{
+ const ivec4 zero = ivec4(0, 0, 0, 0);
+ __asm vec4_seq __retVal, v, zero;
+}
+
//// mat2 constructors
diff --git a/src/mesa/shader/slang/library/slang_core_gc.h b/src/mesa/shader/slang/library/slang_core_gc.h
index 1604d5a034a..5213b693b3e 100644
--- a/src/mesa/shader/slang/library/slang_core_gc.h
+++ b/src/mesa/shader/slang/library/slang_core_gc.h
@@ -35,770 +35,787 @@
120,120,120,0,20,0,0,1,0,12,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,98,0,59,120,
120,120,120,0,20,0,0,1,0,12,1,1,1,0,11,118,51,0,0,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,
108,0,59,120,121,122,0,18,118,51,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,102,0,20,0,
-0,1,0,6,1,1,1,0,5,105,0,0,1,1,0,5,106,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,
-20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,106,0,20,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,9,18,
-95,95,114,101,116,86,97,108,0,59,120,121,0,18,105,0,59,120,120,0,20,0,0,1,0,6,1,1,1,0,9,102,0,0,0,
-1,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,
-18,102,0,59,120,120,0,0,0,0,1,0,6,1,1,1,0,1,98,0,0,0,1,4,102,108,111,97,116,95,116,111,95,105,110,
-116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,7,1,1,1,0,5,
-105,0,0,1,1,0,5,106,0,0,1,1,0,5,107,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,
-20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,106,0,20,0,9,18,95,95,114,101,116,86,97,108,0,
-59,122,0,18,107,0,20,0,0,1,0,7,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,
-122,0,18,105,0,59,120,120,120,0,20,0,0,1,0,7,1,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,59,120,121,122,0,18,102,0,59,120,120,120,0,20,0,0,1,0,7,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,8,1,1,1,0,5,120,0,0,1,1,0,
-5,121,0,0,1,1,0,5,122,0,0,1,1,0,5,119,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,120,0,
-20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,
-59,122,0,18,122,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,119,0,20,0,0,1,0,8,1,1,1,0,5,
-105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,105,0,59,120,120,120,120,0,20,0,0,1,0,8,1,1,1,0,
-9,102,0,0,0,1,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,
-18,102,0,59,120,120,120,120,0,0,0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,
-18,98,0,59,120,120,120,120,0,20,0,0,1,0,2,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,
-0,20,0,0,1,0,2,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,0,18,98,0,59,120,
-120,0,20,0,0,1,0,2,1,1,1,0,9,102,0,0,0,1,3,2,1,10,1,122,101,114,111,0,2,58,118,101,99,50,0,17,48,0,
-48,0,0,0,17,48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,
-59,120,121,0,0,18,102,0,59,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,3,2,
-1,6,1,122,101,114,111,0,2,58,105,118,101,99,50,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,
-115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,105,0,59,120,120,0,0,18,122,101,
-114,111,0,0,0,0,1,0,3,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,1,1,0,1,98,51,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,
-0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,98,51,0,20,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,9,
-18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,3,1,1,1,0,9,
-102,0,0,0,1,3,2,1,11,1,122,101,114,111,0,2,58,118,101,99,51,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,
-48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,
-122,0,0,18,102,0,59,120,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,3,1,1,1,0,5,105,0,0,0,1,3,2,1,7,
-1,122,101,114,111,0,2,58,105,118,101,99,51,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,
-99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,105,0,59,120,120,120,
-0,0,18,122,101,114,111,0,0,0,0,1,0,4,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,1,1,0,1,98,51,0,0,1,1,0,
-1,98,52,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,
-86,97,108,0,59,121,0,18,98,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,98,51,0,20,0,9,
-18,95,95,114,101,116,86,97,108,0,59,119,0,18,98,52,0,20,0,0,1,0,4,1,1,1,0,1,98,0,0,0,1,9,18,95,95,
-114,101,116,86,97,108,0,59,120,121,122,119,0,18,98,0,59,120,120,120,120,0,20,0,0,1,0,4,1,1,1,0,9,
-102,0,0,0,1,3,2,1,12,1,122,101,114,111,0,2,58,118,101,99,52,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,
-48,0,48,0,0,0,17,48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,
-108,0,0,18,102,0,59,120,120,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,4,1,1,1,0,5,105,0,0,0,1,3,2,
-1,8,1,122,101,114,111,0,2,58,105,118,101,99,52,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,0,
-0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,0,18,105,0,59,120,120,120,
-120,0,0,18,122,101,114,111,0,0,0,0,1,0,13,1,1,1,0,9,109,48,48,0,0,1,1,0,9,109,49,48,0,0,1,1,0,9,
-109,48,49,0,0,1,1,0,9,109,49,49,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,120,0,
-18,109,48,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,121,0,18,109,49,48,0,20,0,9,
-18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,120,0,18,109,48,49,0,20,0,9,18,95,95,114,101,116,
-86,97,108,0,16,10,49,0,57,59,121,0,18,109,49,49,0,20,0,0,1,0,13,1,1,1,0,9,102,0,0,0,1,9,18,95,95,
-114,101,116,86,97,108,0,16,8,48,0,57,59,120,0,18,102,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-8,48,0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,120,0,
-17,48,0,48,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,121,0,18,102,0,20,0,0,1,0,
-13,1,1,1,0,5,105,0,0,0,1,8,58,109,97,116,50,0,58,102,108,111,97,116,0,18,105,0,0,0,0,0,0,0,1,0,13,
-1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,50,0,58,102,108,111,97,116,0,18,98,0,0,0,0,0,0,0,1,0,13,1,1,1,
-0,10,99,48,0,0,1,1,0,10,99,49,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,99,48,0,
-20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,99,49,0,20,0,0,1,0,14,1,1,1,0,9,109,48,48,
-0,0,1,1,0,9,109,49,48,0,0,1,1,0,9,109,50,48,0,0,1,1,0,9,109,48,49,0,0,1,1,0,9,109,49,49,0,0,1,1,0,
-9,109,50,49,0,0,1,1,0,9,109,48,50,0,0,1,1,0,9,109,49,50,0,0,1,1,0,9,109,50,50,0,0,0,1,9,18,95,95,
-114,101,116,86,97,108,0,16,8,48,0,57,59,120,0,18,109,48,48,0,20,0,9,18,95,95,114,101,116,86,97,108,
-0,16,8,48,0,57,59,121,0,18,109,49,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,122,
-0,18,109,50,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,120,0,18,109,48,49,0,20,
-0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,121,0,18,109,49,49,0,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,49,0,57,59,122,0,18,109,50,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,50,0,57,59,120,0,18,109,48,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,59,121,0,
-18,109,49,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,59,122,0,18,109,50,50,0,20,0,
-0,1,0,14,1,1,1,0,9,102,0,0,0,1,3,2,0,10,1,118,0,2,58,118,101,99,50,0,18,102,0,0,17,48,0,48,0,0,0,0,
-0,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,118,0,59,120,121,121,0,20,0,9,18,95,95,114,
-101,116,86,97,108,0,16,10,49,0,57,18,118,0,59,121,120,121,0,20,0,9,18,95,95,114,101,116,86,97,108,
-0,16,10,50,0,57,18,118,0,59,121,121,120,0,20,0,0,1,0,14,1,1,1,0,5,105,0,0,0,1,8,58,109,97,116,51,0,
-58,102,108,111,97,116,0,18,105,0,0,0,0,0,0,0,1,0,14,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,51,0,58,
-102,108,111,97,116,0,18,98,0,0,0,0,0,0,0,1,0,14,1,1,1,0,11,99,48,0,0,1,1,0,11,99,49,0,0,1,1,0,11,
-99,50,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,99,48,0,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,49,0,57,18,99,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,
-99,50,0,20,0,0,1,0,15,1,1,1,0,9,109,48,48,0,0,1,1,0,9,109,49,48,0,0,1,1,0,9,109,50,48,0,0,1,1,0,9,
-109,51,48,0,0,1,1,0,9,109,48,49,0,0,1,1,0,9,109,49,49,0,0,1,1,0,9,109,50,49,0,0,1,1,0,9,109,51,49,
-0,0,1,1,0,9,109,48,50,0,0,1,1,0,9,109,49,50,0,0,1,1,0,9,109,50,50,0,0,1,1,0,9,109,51,50,0,0,1,1,0,
-9,109,48,51,0,0,1,1,0,9,109,49,51,0,0,1,1,0,9,109,50,51,0,0,1,1,0,9,109,51,51,0,0,0,1,9,18,95,95,
-114,101,116,86,97,108,0,16,8,48,0,57,59,120,0,18,109,48,48,0,20,0,9,18,95,95,114,101,116,86,97,108,
-0,16,8,48,0,57,59,121,0,18,109,49,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,122,
-0,18,109,50,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,119,0,18,109,51,48,0,20,0,
-9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,120,0,18,109,48,49,0,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,49,0,57,59,121,0,18,109,49,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,49,0,57,59,122,0,18,109,50,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,119,0,
-18,109,51,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,59,120,0,18,109,48,50,0,20,0,
-9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,59,121,0,18,109,49,50,0,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,50,0,57,59,122,0,18,109,50,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,50,0,57,59,119,0,18,109,51,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,59,120,0,
-18,109,48,51,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,59,121,0,18,109,49,51,0,20,0,
-9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,59,122,0,18,109,50,51,0,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,51,0,57,59,119,0,18,109,51,51,0,20,0,0,1,0,15,1,1,1,0,9,102,0,0,0,1,3,2,0,10,
-1,118,0,2,58,118,101,99,50,0,18,102,0,0,17,48,0,48,0,0,0,0,0,0,9,18,95,95,114,101,116,86,97,108,0,
-16,8,48,0,57,18,118,0,59,120,121,121,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,
-18,118,0,59,121,120,121,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,118,0,59,
-121,121,120,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,118,0,59,121,121,121,
-120,0,20,0,0,1,0,15,1,1,1,0,5,105,0,0,0,1,8,58,109,97,116,52,0,58,102,108,111,97,116,0,18,105,0,0,
-0,0,0,0,0,1,0,15,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,52,0,58,102,108,111,97,116,0,18,98,0,0,0,0,0,
-0,0,1,0,15,1,1,1,0,12,99,48,0,0,1,1,0,12,99,49,0,0,1,1,0,12,99,50,0,0,1,1,0,12,99,51,0,0,0,1,9,18,
-95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,99,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,49,0,57,18,99,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,99,50,0,20,0,9,18,
-95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,99,51,0,20,0,0,1,0,5,2,26,1,1,0,5,97,0,0,1,1,0,5,98,
-0,0,0,1,3,2,0,9,1,120,0,0,0,4,118,101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,
-108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,5,
-2,27,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,0,4,118,101,99,52,95,115,117,98,116,114,
-97,99,116,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,
-95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,5,2,21,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,
-9,1,120,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,0,0,
-0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,
-0,1,0,5,2,22,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,98,73,110,118,0,0,1,1,120,0,0,0,4,102,108,
-111,97,116,95,114,99,112,0,18,98,73,110,118,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,
-112,108,121,0,18,120,0,0,18,97,0,0,18,98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,
-110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,6,2,26,1,1,0,6,97,0,0,1,1,0,6,98,0,
-0,0,1,3,2,0,10,1,120,0,0,0,4,118,101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,
-108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,6,
-2,27,1,1,0,6,97,0,0,1,1,0,6,98,0,0,0,1,3,2,0,10,1,120,0,0,0,4,118,101,99,52,95,115,117,98,116,114,
-97,99,116,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,
-95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,6,2,21,1,1,0,6,97,0,0,1,1,0,6,98,0,0,0,1,3,2,0,
-10,1,120,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,0,0,
-0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,
-0,1,0,6,2,22,1,1,0,6,97,0,0,1,1,0,6,98,0,0,0,1,3,2,0,10,1,98,73,110,118,0,0,1,1,120,0,0,0,4,102,
-108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,59,120,0,0,18,98,0,59,120,0,0,0,4,102,108,111,97,
-116,95,114,99,112,0,18,98,73,110,118,0,59,121,0,0,18,98,0,59,121,0,0,0,4,118,101,99,52,95,109,117,
-108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,
-111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,7,2,26,1,1,0,7,97,0,0,1,
-1,0,7,98,0,0,0,1,3,2,0,11,1,120,0,0,0,4,118,101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,
-0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,
-0,0,1,0,7,2,27,1,1,0,7,97,0,0,1,1,0,7,98,0,0,0,1,3,2,0,11,1,120,0,0,0,4,118,101,99,52,95,115,117,
-98,116,114,97,99,116,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,
-116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,7,2,21,1,1,0,7,97,0,0,1,1,0,7,98,0,0,0,
-1,3,2,0,11,1,120,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,
+0,1,0,12,1,1,1,0,10,118,50,0,0,1,1,0,9,102,49,0,0,1,1,0,9,102,50,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,59,120,121,0,18,118,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,102,49,0,20,
+0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,102,50,0,20,0,0,1,0,6,1,1,1,0,5,105,0,0,1,1,0,5,
+106,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,59,121,0,18,106,0,20,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,
+120,121,0,18,105,0,59,120,120,0,20,0,0,1,0,6,1,1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,116,111,
+95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,102,0,59,120,120,0,0,0,0,1,0,6,
+1,1,1,0,1,98,0,0,0,1,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,
+108,0,59,120,121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,7,1,1,1,0,5,105,0,0,1,1,0,5,106,0,0,1,1,0,5,
+107,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,59,121,0,18,106,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,107,0,20,0,0,1,0,7,1,1,
+1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,105,0,59,120,120,120,0,20,
+0,0,1,0,7,1,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,102,0,59,
+120,120,120,0,20,0,0,1,0,7,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,
+0,18,98,0,59,120,120,120,0,20,0,0,1,0,8,1,1,1,0,5,120,0,0,1,1,0,5,121,0,0,1,1,0,5,122,0,0,1,1,0,5,
+119,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,120,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,59,121,0,18,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,122,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,59,119,0,18,119,0,20,0,0,1,0,8,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,
+116,86,97,108,0,18,105,0,59,120,120,120,120,0,20,0,0,1,0,8,1,1,1,0,9,102,0,0,0,1,4,102,108,111,97,
+116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,102,0,59,120,120,120,120,0,0,
+0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,98,0,59,120,120,120,120,0,20,
+0,0,1,0,2,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,
+98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,0,20,0,0,1,0,2,1,1,1,0,1,98,0,0,
+0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,0,18,98,0,59,120,120,0,20,0,0,1,0,2,1,1,1,0,9,
+102,0,0,0,1,3,2,1,10,1,122,101,114,111,0,2,58,118,101,99,50,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,0,
+0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,102,0,59,
+120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,3,2,1,6,1,122,101,114,111,0,2,
+58,105,118,101,99,50,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,
+101,116,86,97,108,0,59,120,121,0,0,18,105,0,59,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,2,1,1,1,
+0,10,118,0,0,0,1,3,2,1,10,1,122,101,114,111,0,2,58,118,101,99,50,0,17,48,0,48,0,0,0,17,48,0,48,0,0,
+0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,
+0,18,122,101,114,111,0,0,0,0,1,0,2,1,1,1,0,6,118,0,0,0,1,3,2,1,6,1,122,101,114,111,0,2,58,105,118,
+101,99,50,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,
+97,108,0,59,120,121,0,0,18,118,0,0,18,122,101,114,111,0,0,0,0,1,0,3,1,1,1,0,1,98,49,0,0,1,1,0,1,98,
+50,0,0,1,1,0,1,98,51,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,
+95,114,101,116,86,97,108,0,59,121,0,18,98,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,
+98,51,0,20,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,
+98,0,59,120,120,120,0,20,0,0,1,0,3,1,1,1,0,9,102,0,0,0,1,3,2,1,11,1,122,101,114,111,0,2,58,118,101,
+99,51,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,
+18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,102,0,59,120,120,120,0,0,18,122,101,114,111,
+0,0,0,0,1,0,3,1,1,1,0,5,105,0,0,0,1,3,2,1,7,1,122,101,114,111,0,2,58,105,118,101,99,51,0,16,8,48,0,
+0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,
+59,120,121,122,0,0,18,105,0,59,120,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,3,1,1,1,0,11,118,0,0,
+0,1,3,2,1,11,1,122,101,114,111,0,2,58,118,101,99,51,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,
+0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,
+18,118,0,0,18,122,101,114,111,0,0,0,0,1,0,3,1,1,1,0,7,118,0,0,0,1,3,2,1,7,1,122,101,114,111,0,2,58,
+105,118,101,99,51,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,
+95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0,18,122,101,114,111,0,0,0,0,1,0,4,1,1,1,
+0,1,98,49,0,0,1,1,0,1,98,50,0,0,1,1,0,1,98,51,0,0,1,1,0,1,98,52,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,0,20,0,9,18,
+95,95,114,101,116,86,97,108,0,59,122,0,18,98,51,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,
+18,98,52,0,20,0,0,1,0,4,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,119,
+0,18,98,0,59,120,120,120,120,0,20,0,0,1,0,4,1,1,1,0,9,102,0,0,0,1,3,2,1,12,1,122,101,114,111,0,2,
+58,118,101,99,52,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,0,0,0,4,118,
+101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,0,18,102,0,59,120,120,120,120,0,0,18,
+122,101,114,111,0,0,0,0,1,0,4,1,1,1,0,5,105,0,0,0,1,3,2,1,8,1,122,101,114,111,0,2,58,105,118,101,
+99,52,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,
+95,95,114,101,116,86,97,108,0,0,18,105,0,59,120,120,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,4,1,
+1,1,0,12,118,0,0,0,1,3,2,1,12,1,122,101,114,111,0,2,58,118,101,99,52,0,17,48,0,48,0,0,0,17,48,0,48,
+0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,
+116,86,97,108,0,0,18,118,0,0,18,122,101,114,111,0,0,0,0,1,0,4,1,1,1,0,8,118,0,0,0,1,3,2,1,8,1,122,
+101,114,111,0,2,58,105,118,101,99,52,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,
+101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,122,101,114,111,0,0,0,
+0,1,0,13,1,1,1,0,9,109,48,48,0,0,1,1,0,9,109,49,48,0,0,1,1,0,9,109,48,49,0,0,1,1,0,9,109,49,49,0,0,
+0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,120,0,18,109,48,48,0,20,0,9,18,95,95,114,
+101,116,86,97,108,0,16,8,48,0,57,59,121,0,18,109,49,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,
+16,10,49,0,57,59,120,0,18,109,48,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,121,
+0,18,109,49,49,0,20,0,0,1,0,13,1,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,
+57,59,120,0,18,102,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,121,0,17,48,0,48,0,0,
+20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,95,95,114,
+101,116,86,97,108,0,16,10,49,0,57,59,121,0,18,102,0,20,0,0,1,0,13,1,1,1,0,5,105,0,0,0,1,8,58,109,
+97,116,50,0,58,102,108,111,97,116,0,18,105,0,0,0,0,0,0,0,1,0,13,1,1,1,0,1,98,0,0,0,1,8,58,109,97,
+116,50,0,58,102,108,111,97,116,0,18,98,0,0,0,0,0,0,0,1,0,13,1,1,1,0,10,99,48,0,0,1,1,0,10,99,49,0,
+0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,99,48,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,49,0,57,18,99,49,0,20,0,0,1,0,14,1,1,1,0,9,109,48,48,0,0,1,1,0,9,109,49,48,0,0,1,1,0,9,
+109,50,48,0,0,1,1,0,9,109,48,49,0,0,1,1,0,9,109,49,49,0,0,1,1,0,9,109,50,49,0,0,1,1,0,9,109,48,50,
+0,0,1,1,0,9,109,49,50,0,0,1,1,0,9,109,50,50,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,
+57,59,120,0,18,109,48,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,121,0,18,109,49,
+48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,122,0,18,109,50,48,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,16,10,49,0,57,59,120,0,18,109,48,49,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,49,0,57,59,121,0,18,109,49,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,
+59,122,0,18,109,50,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,59,120,0,18,109,48,
+50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,59,121,0,18,109,49,50,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,16,10,50,0,57,59,122,0,18,109,50,50,0,20,0,0,1,0,14,1,1,1,0,9,102,0,0,0,1,
+3,2,0,10,1,118,0,2,58,118,101,99,50,0,18,102,0,0,17,48,0,48,0,0,0,0,0,0,9,18,95,95,114,101,116,86,
+97,108,0,16,8,48,0,57,18,118,0,59,120,121,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,
+57,18,118,0,59,121,120,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,118,0,59,121,
+121,120,0,20,0,0,1,0,14,1,1,1,0,5,105,0,0,0,1,8,58,109,97,116,51,0,58,102,108,111,97,116,0,18,105,
+0,0,0,0,0,0,0,1,0,14,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,51,0,58,102,108,111,97,116,0,18,98,0,0,0,
+0,0,0,0,1,0,14,1,1,1,0,11,99,48,0,0,1,1,0,11,99,49,0,0,1,1,0,11,99,50,0,0,0,1,9,18,95,95,114,101,
+116,86,97,108,0,16,8,48,0,57,18,99,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,
+99,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,99,50,0,20,0,0,1,0,15,1,1,1,0,9,
+109,48,48,0,0,1,1,0,9,109,49,48,0,0,1,1,0,9,109,50,48,0,0,1,1,0,9,109,51,48,0,0,1,1,0,9,109,48,49,
+0,0,1,1,0,9,109,49,49,0,0,1,1,0,9,109,50,49,0,0,1,1,0,9,109,51,49,0,0,1,1,0,9,109,48,50,0,0,1,1,0,
+9,109,49,50,0,0,1,1,0,9,109,50,50,0,0,1,1,0,9,109,51,50,0,0,1,1,0,9,109,48,51,0,0,1,1,0,9,109,49,
+51,0,0,1,1,0,9,109,50,51,0,0,1,1,0,9,109,51,51,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,
+0,57,59,120,0,18,109,48,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,121,0,18,109,
+49,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,59,122,0,18,109,50,48,0,20,0,9,18,95,
+95,114,101,116,86,97,108,0,16,8,48,0,57,59,119,0,18,109,51,48,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,49,0,57,59,120,0,18,109,48,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,
+59,121,0,18,109,49,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,122,0,18,109,50,
+49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,59,119,0,18,109,51,49,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,16,10,50,0,57,59,120,0,18,109,48,50,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,50,0,57,59,121,0,18,109,49,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,
+59,122,0,18,109,50,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,59,119,0,18,109,51,
+50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,59,120,0,18,109,48,51,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,16,10,51,0,57,59,121,0,18,109,49,51,0,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,51,0,57,59,122,0,18,109,50,51,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,
+59,119,0,18,109,51,51,0,20,0,0,1,0,15,1,1,1,0,9,102,0,0,0,1,3,2,0,10,1,118,0,2,58,118,101,99,50,0,
+18,102,0,0,17,48,0,48,0,0,0,0,0,0,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,118,0,59,120,
+121,121,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,118,0,59,121,120,121,121,0,
+20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,118,0,59,121,121,120,121,0,20,0,9,18,95,
+95,114,101,116,86,97,108,0,16,10,51,0,57,18,118,0,59,121,121,121,120,0,20,0,0,1,0,15,1,1,1,0,5,105,
+0,0,0,1,8,58,109,97,116,52,0,58,102,108,111,97,116,0,18,105,0,0,0,0,0,0,0,1,0,15,1,1,1,0,1,98,0,0,
+0,1,8,58,109,97,116,52,0,58,102,108,111,97,116,0,18,98,0,0,0,0,0,0,0,1,0,15,1,1,1,0,12,99,48,0,0,1,
+1,0,12,99,49,0,0,1,1,0,12,99,50,0,0,1,1,0,12,99,51,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,
+48,0,57,18,99,48,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,99,49,0,20,0,9,18,95,
+95,114,101,116,86,97,108,0,16,10,50,0,57,18,99,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,
+51,0,57,18,99,51,0,20,0,0,1,0,5,2,26,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,0,4,118,
+101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,
+110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,5,2,27,1,1,0,5,97,0,0,1,1,0,5,98,0,
+0,0,1,3,2,0,9,1,120,0,0,0,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,120,0,0,18,97,0,0,
18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,
-120,0,0,0,0,1,0,7,2,22,1,1,0,7,97,0,0,1,1,0,7,98,0,0,0,1,3,2,0,11,1,98,73,110,118,0,0,1,1,120,0,0,
-0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,59,120,0,0,18,98,0,59,120,0,0,0,4,102,
-108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,59,121,0,0,18,98,0,59,121,0,0,0,4,102,108,111,97,
-116,95,114,99,112,0,18,98,73,110,118,0,59,122,0,0,18,98,0,59,122,0,0,0,4,118,101,99,52,95,109,117,
-108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,
-111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,8,2,26,1,1,0,8,97,0,0,1,
-1,0,8,98,0,0,0,1,3,2,0,11,1,120,0,0,0,4,118,101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,
-0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,
-0,0,1,0,8,2,27,1,1,0,8,97,0,0,1,1,0,8,98,0,0,0,1,3,2,0,12,1,120,0,0,0,4,118,101,99,52,95,115,117,
-98,116,114,97,99,116,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,
-116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,8,2,21,1,1,0,8,97,0,0,1,1,0,8,98,0,0,0,
-1,3,2,0,12,1,120,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,
+120,0,0,0,0,1,0,5,2,21,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,0,4,118,101,99,52,95,
+109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,
+95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,5,2,22,1,1,0,5,97,0,0,1,1,0,
+5,98,0,0,0,1,3,2,0,9,1,98,73,110,118,0,0,1,1,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,
+73,110,118,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,
+0,18,98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,
+97,108,0,0,18,120,0,0,0,0,1,0,6,2,26,1,1,0,6,97,0,0,1,1,0,6,98,0,0,0,1,3,2,0,10,1,120,0,0,0,4,118,
+101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,
+110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,6,2,27,1,1,0,6,97,0,0,1,1,0,6,98,0,
+0,0,1,3,2,0,10,1,120,0,0,0,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,120,0,0,18,97,0,0,
18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,
-120,0,0,0,0,1,0,8,2,22,1,1,0,8,97,0,0,1,1,0,8,98,0,0,0,1,3,2,0,12,1,98,73,110,118,0,0,1,1,120,0,0,
-0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,59,120,0,0,18,98,0,59,120,0,0,0,4,102,
-108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,59,121,0,0,18,98,0,59,121,0,0,0,4,102,108,111,97,
-116,95,114,99,112,0,18,98,73,110,118,0,59,122,0,0,18,98,0,59,122,0,0,0,4,102,108,111,97,116,95,114,
-99,112,0,18,98,73,110,118,0,59,119,0,0,18,98,0,59,119,0,0,0,4,118,101,99,52,95,109,117,108,116,105,
-112,108,121,0,18,120,0,0,18,97,0,0,18,98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,
-110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,9,2,26,1,1,0,9,97,0,0,1,1,0,9,98,0,
-0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,97,0,0,18,98,
-0,0,0,0,1,0,9,2,27,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,
-116,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,21,1,1,0,9,97,0,
-0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,
-97,108,0,59,120,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,22,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,
-98,73,110,118,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,59,120,0,0,18,98,0,59,
-120,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,
-120,0,0,18,97,0,0,18,98,73,110,118,0,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,
-101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,117,0,0,0,
-0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,
-116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,117,0,0,0,0,1,0,10,2,21,1,1,0,
-10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,
-101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,117,0,0,0,0,1,0,10,2,22,1,1,0,10,118,0,0,1,1,0,10,
-117,0,0,0,1,3,2,0,10,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,117,0,
-59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,4,118,
+120,0,0,0,0,1,0,6,2,21,1,1,0,6,97,0,0,1,1,0,6,98,0,0,0,1,3,2,0,10,1,120,0,0,0,4,118,101,99,52,95,
+109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,
+95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,6,2,22,1,1,0,6,97,0,0,1,1,0,
+6,98,0,0,0,1,3,2,0,10,1,98,73,110,118,0,0,1,1,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,
+73,110,118,0,59,120,0,0,18,98,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,110,118,
+0,59,121,0,0,18,98,0,59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,
+18,97,0,0,18,98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,
+116,86,97,108,0,0,18,120,0,0,0,0,1,0,7,2,26,1,1,0,7,97,0,0,1,1,0,7,98,0,0,0,1,3,2,0,11,1,120,0,0,0,
+4,118,101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,
+95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,7,2,27,1,1,0,7,97,0,0,1,1,0,
+7,98,0,0,0,1,3,2,0,11,1,120,0,0,0,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,120,0,0,18,
+97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,
+0,0,18,120,0,0,0,0,1,0,7,2,21,1,1,0,7,97,0,0,1,1,0,7,98,0,0,0,1,3,2,0,11,1,120,0,0,0,4,118,101,99,
+52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,
+116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,7,2,22,1,1,0,7,97,0,
+0,1,1,0,7,98,0,0,0,1,3,2,0,11,1,98,73,110,118,0,0,1,1,120,0,0,0,4,102,108,111,97,116,95,114,99,112,
+0,18,98,73,110,118,0,59,120,0,0,18,98,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,
+110,118,0,59,121,0,0,18,98,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,
+59,122,0,0,18,98,0,59,122,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,
+97,0,0,18,98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,
+116,86,97,108,0,0,18,120,0,0,0,0,1,0,8,2,26,1,1,0,8,97,0,0,1,1,0,8,98,0,0,0,1,3,2,0,11,1,120,0,0,0,
+4,118,101,99,52,95,97,100,100,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,
+95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,8,2,27,1,1,0,8,97,0,0,1,1,0,
+8,98,0,0,0,1,3,2,0,12,1,120,0,0,0,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,120,0,0,18,
+97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,
+0,0,18,120,0,0,0,0,1,0,8,2,21,1,1,0,8,97,0,0,1,1,0,8,98,0,0,0,1,3,2,0,12,1,120,0,0,0,4,118,101,99,
+52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,
+116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,0,8,2,22,1,1,0,8,97,0,
+0,1,1,0,8,98,0,0,0,1,3,2,0,12,1,98,73,110,118,0,0,1,1,120,0,0,0,4,102,108,111,97,116,95,114,99,112,
+0,18,98,73,110,118,0,59,120,0,0,18,98,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,
+110,118,0,59,121,0,0,18,98,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,
+59,122,0,0,18,98,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,98,73,110,118,0,59,119,0,0,
+18,98,0,59,119,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,97,0,0,18,
+98,73,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,
+108,0,0,18,120,0,0,0,0,1,0,9,2,26,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,97,100,100,
+0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,27,1,1,0,9,97,0,0,1,
+1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,
+0,59,120,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,21,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,
+95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,97,0,0,18,98,0,
+0,0,0,1,0,9,2,22,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,98,73,110,118,0,0,0,4,102,108,111,97,
+116,95,114,99,112,0,18,98,73,110,118,0,59,120,0,0,18,98,0,59,120,0,0,0,4,118,101,99,52,95,109,117,
+108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,97,0,0,18,98,73,110,118,0,
+0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,
+114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,117,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,
+0,10,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,
+0,59,120,121,0,0,18,118,0,0,18,117,0,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,
101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,
-118,0,0,18,119,0,0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,97,100,
-100,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,11,2,27,1,
-1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,
-101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,
-0,11,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,
-108,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,11,2,22,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,
-1,3,2,0,11,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,117,0,59,120,0,
-0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,4,102,108,111,
-97,116,95,114,99,112,0,18,119,0,59,122,0,0,18,117,0,59,122,0,0,0,4,118,101,99,52,95,109,117,108,
-116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0,18,119,0,0,0,
-0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,
-101,116,86,97,108,0,0,18,118,0,0,18,117,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,
-4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,
-117,0,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,
-105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,117,0,0,0,0,1,0,12,2,22,1,1,0,
-12,118,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,
-59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,
-59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,122,0,0,18,117,0,59,122,0,0,0,4,102,
-108,111,97,116,95,114,99,112,0,18,119,0,59,119,0,0,18,117,0,59,119,0,0,0,4,118,101,99,52,95,109,
-117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,119,0,0,0,0,1,0,10,
-2,26,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,
-97,108,0,59,120,121,0,0,18,97,0,59,120,120,0,0,18,117,0,59,120,121,0,0,0,0,1,0,10,2,26,1,1,0,10,
+118,0,0,18,117,0,0,0,0,1,0,10,2,22,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,119,0,0,0,4,
+102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,
+95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,
+112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,119,0,0,0,0,1,0,11,2,
+26,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,
+97,108,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,11,117,0,
+0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,59,120,
+121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,4,118,101,
+99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,
+118,0,0,18,117,0,0,0,0,1,0,11,2,22,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,119,0,0,0,4,
+102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,
+95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,
+119,0,59,122,0,0,18,117,0,59,122,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,
+95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0,18,119,0,0,0,0,1,0,12,2,26,1,1,0,12,118,0,
+0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,
+0,18,117,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,115,117,98,
+116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,117,0,0,0,0,1,0,12,2,21,1,1,0,
+12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,
+101,116,86,97,108,0,0,18,118,0,0,18,117,0,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,
+3,2,0,12,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,117,0,59,120,0,0,
+0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,4,102,108,111,97,
+116,95,114,99,112,0,18,119,0,59,122,0,0,18,117,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,
+18,119,0,59,119,0,0,18,117,0,59,119,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,
+95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,119,0,0,0,0,1,0,10,2,26,1,1,0,9,97,0,0,1,1,0,10,117,
+0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,97,0,59,
+120,120,0,0,18,117,0,59,120,121,0,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,
+99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,
+98,0,59,120,120,0,0,0,0,1,0,10,2,27,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,115,117,
+98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,97,0,59,120,120,0,0,18,
+117,0,59,120,121,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,
+117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,59,120,121,0,0,
+18,98,0,59,120,120,0,0,0,0,1,0,10,2,21,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,109,
+117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,97,0,59,120,120,0,
+0,18,117,0,59,120,121,0,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,
+109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,59,120,
+121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,10,2,22,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,105,
+110,118,85,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,120,0,0,18,117,0,59,
+120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,121,0,0,18,117,0,59,121,0,0,
+0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,
+0,0,18,97,0,59,120,120,0,0,18,105,110,118,85,0,59,120,121,0,0,0,0,1,0,10,2,22,1,1,0,10,118,0,0,1,1,
+0,9,98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,
+66,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,
+108,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,105,110,118,66,0,59,120,120,0,0,0,0,1,0,11,2,26,1,
+1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,
+59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,18,117,0,59,120,121,122,0,0,0,0,1,0,11,2,26,1,1,0,11,
118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,59,120,
-121,0,0,18,118,0,59,120,121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,10,2,27,1,1,0,9,97,0,0,1,1,0,10,117,
-0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,59,120,
-121,0,0,18,97,0,59,120,120,0,0,18,117,0,59,120,121,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,0,9,98,
-0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,59,120,
-121,0,0,18,118,0,59,120,121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,10,2,21,1,1,0,9,97,0,0,1,1,0,10,117,
-0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,
-120,121,0,0,18,97,0,59,120,120,0,0,18,117,0,59,120,121,0,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,
-9,98,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,
-59,120,121,0,0,18,118,0,59,120,121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,10,2,22,1,1,0,9,97,0,0,1,1,0,
-10,117,0,0,0,1,3,2,0,10,1,105,110,118,85,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,
-85,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,
-121,0,0,18,117,0,59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,
-101,116,86,97,108,0,59,120,121,0,0,18,97,0,59,120,120,0,0,18,105,110,118,85,0,59,120,121,0,0,0,0,1,
-0,10,2,22,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,4,102,108,111,97,116,
-95,114,99,112,0,18,105,110,118,66,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,
-121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,105,110,118,66,0,
-59,120,120,0,0,0,0,1,0,11,2,26,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,
-18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,18,117,0,59,120,121,
-122,0,0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,
-95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,98,0,59,120,120,120,0,
-0,0,0,1,0,11,2,27,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,
-116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,18,117,0,59,
-120,121,122,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,117,98,
-116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,
-0,18,98,0,59,120,120,120,0,0,0,0,1,0,11,2,21,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,
-95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,97,0,
-59,120,120,120,0,0,18,117,0,59,120,121,122,0,0,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,
-4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,
-122,0,0,18,118,0,59,120,121,122,0,0,18,98,0,59,120,120,120,0,0,0,0,1,0,11,2,22,1,1,0,9,97,0,0,1,1,
-0,11,117,0,0,0,1,3,2,0,11,1,105,110,118,85,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,
+121,122,0,0,18,118,0,59,120,121,122,0,0,18,98,0,59,120,120,120,0,0,0,0,1,0,11,2,27,1,1,0,9,97,0,0,
+1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,
+108,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,18,117,0,59,120,121,122,0,0,0,0,1,0,11,2,27,1,
+1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,
+101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,98,0,59,120,120,120,0,0,0,0,
+1,0,11,2,21,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,
+0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,18,117,0,59,120,
+121,122,0,0,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,109,117,108,116,
+105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,
+18,98,0,59,120,120,120,0,0,0,0,1,0,11,2,22,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,105,110,
+118,85,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,120,0,0,18,117,0,59,120,0,
+0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,121,0,0,18,117,0,59,121,0,0,0,4,
+102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,122,0,0,18,117,0,59,122,0,0,0,4,118,101,
+99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,
+97,0,59,120,120,120,0,0,18,105,110,118,85,0,59,120,121,122,0,0,0,0,1,0,11,2,22,1,1,0,11,118,0,0,1,
+1,0,9,98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,
+118,66,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,
+86,97,108,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,105,110,118,66,0,59,120,120,120,0,0,
+0,0,1,0,12,2,26,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,
+101,116,86,97,108,0,0,18,97,0,59,120,120,120,120,0,0,18,117,0,0,0,0,1,0,12,2,26,1,1,0,12,118,0,0,1,
+1,0,9,98,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,
+98,0,59,120,120,120,120,0,0,0,0,1,0,12,2,27,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,
+115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,59,120,120,120,120,0,0,
+18,117,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,117,98,116,
+114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,98,0,59,120,120,120,120,0,0,0,0,1,
+0,12,2,21,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,
+18,95,95,114,101,116,86,97,108,0,0,18,97,0,59,120,120,120,120,0,0,18,117,0,0,0,0,1,0,12,2,21,1,1,0,
+12,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,
+101,116,86,97,108,0,0,18,118,0,0,18,98,0,59,120,120,120,120,0,0,0,0,1,0,12,2,22,1,1,0,9,97,0,0,1,1,
+0,12,117,0,0,0,1,3,2,0,12,1,105,110,118,85,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,
118,85,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,
59,121,0,0,18,117,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,122,0,
-0,18,117,0,59,122,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,
-86,97,108,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,18,105,110,118,85,0,59,120,121,122,0,0,0,
-0,1,0,11,2,22,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,4,102,108,111,97,
-116,95,114,99,112,0,18,105,110,118,66,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,
-108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,105,
-110,118,66,0,59,120,120,120,0,0,0,0,1,0,12,2,26,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,
-52,95,97,100,100,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,59,120,120,120,120,0,0,18,117,0,0,0,
-0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,95,95,114,101,
-116,86,97,108,0,0,18,118,0,0,18,98,0,59,120,120,120,120,0,0,0,0,1,0,12,2,27,1,1,0,9,97,0,0,1,1,0,
-12,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,
-0,18,97,0,59,120,120,120,120,0,0,18,117,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,4,
-118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,
-98,0,59,120,120,120,120,0,0,0,0,1,0,12,2,21,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,
-109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,59,120,120,120,120,0,
-0,18,117,0,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,109,117,108,
-116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,98,0,59,120,120,120,120,0,0,
-0,0,1,0,12,2,22,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,105,110,118,85,0,0,0,4,102,108,111,
-97,116,95,114,99,112,0,18,105,110,118,85,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,
-95,114,99,112,0,18,105,110,118,85,0,59,121,0,0,18,117,0,59,121,0,0,0,4,102,108,111,97,116,95,114,
-99,112,0,18,105,110,118,85,0,59,122,0,0,18,117,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,
-18,105,110,118,85,0,59,119,0,0,18,117,0,59,119,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,
-108,121,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,59,120,120,120,120,0,0,18,105,110,118,85,0,0,
-0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,4,102,108,111,
-97,116,95,114,99,112,0,18,105,110,118,66,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,
-112,108,121,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,18,105,110,118,66,0,59,120,120,120,120,
-0,0,0,0,1,0,6,2,26,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,
-118,101,99,50,0,18,97,0,0,0,18,117,0,46,20,0,0,1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,9,18,
-95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,46,20,0,0,1,0,6,2,27,1,1,
-0,5,97,0,0,1,1,0,6,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,50,0,18,97,0,0,
-0,18,117,0,47,20,0,0,1,0,6,2,27,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,47,20,0,0,1,0,6,2,21,1,1,0,5,97,0,0,1,1,0,6,117,
-0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,48,20,0,0,1,
-0,6,2,21,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,
-101,99,50,0,18,98,0,0,0,48,20,0,0,1,0,6,2,22,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,9,18,95,95,114,101,
-116,86,97,108,0,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,49,20,0,0,1,0,6,2,22,1,1,0,6,118,0,0,1,
-1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,49,
-20,0,0,1,0,7,2,26,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,
-101,99,51,0,18,97,0,0,0,18,117,0,46,20,0,0,1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,
-95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,46,20,0,0,1,0,7,2,27,1,1,0,
-5,97,0,0,1,1,0,7,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,51,0,18,97,0,0,0,
-18,117,0,47,20,0,0,1,0,7,2,27,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,
-0,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,47,20,0,0,1,0,7,2,21,1,1,0,5,97,0,0,1,1,0,7,117,0,0,
-0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,48,20,0,0,1,0,7,
-2,21,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,
-99,51,0,18,98,0,0,0,48,20,0,0,1,0,7,2,22,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,9,18,95,95,114,101,116,
-86,97,108,0,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,49,20,0,0,1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,
-5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,49,20,
-0,0,1,0,8,2,26,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,
-101,99,52,0,18,97,0,0,0,18,117,0,46,20,0,0,1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,
-95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,46,20,0,0,1,0,8,2,27,1,1,0,
-5,97,0,0,1,1,0,8,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,52,0,18,97,0,0,0,
-18,117,0,47,20,0,0,1,0,8,2,27,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,
-0,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,47,20,0,0,1,0,8,2,21,1,1,0,5,97,0,0,1,1,0,8,117,0,0,
-0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,48,20,0,0,1,0,8,
-2,21,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,
-99,52,0,18,98,0,0,0,48,20,0,0,1,0,8,2,22,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,9,18,95,95,114,101,116,
-86,97,108,0,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,49,20,0,0,1,0,8,2,22,1,1,0,8,118,0,0,1,1,0,
-5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,49,20,
-0,0,1,0,5,2,27,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,
-86,97,108,0,59,120,0,0,18,97,0,0,0,0,1,0,6,2,27,1,1,0,6,118,0,0,0,1,4,118,101,99,52,95,110,101,103,
-97,116,101,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,0,0,1,0,7,2,27,1,1,0,7,118,0,0,0,1,4,
-118,101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,0,0,1,0,8,
-2,27,1,1,0,8,118,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,
-108,0,0,18,118,0,0,0,0,1,0,9,2,27,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,
-18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,97,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,0,1,4,118,
-101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,59,
-120,121,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,
-95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,0,0,1,0,12,2,27,1,1,0,12,
-118,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,108,0,0,18,118,
-0,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,
-16,8,48,0,57,54,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,54,20,
-0,0,1,0,14,2,27,1,1,0,14,109,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,
-48,0,57,54,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,54,20,0,9,
-18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,54,20,0,0,1,0,15,2,27,1,1,0,
-15,109,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,
-95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,54,20,0,9,18,95,95,114,101,116,
-86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,54,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,
-51,0,57,18,109,0,16,10,51,0,57,54,20,0,0,1,0,9,0,100,111,116,0,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,9,
-18,95,95,114,101,116,86,97,108,0,18,97,0,18,98,0,48,20,0,0,1,0,9,0,100,111,116,0,1,1,0,10,97,0,0,1,
-1,0,10,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,97,0,59,120,0,18,98,0,59,120,0,48,18,97,0,
-59,121,0,18,98,0,59,121,0,48,46,20,0,0,1,0,9,0,100,111,116,0,1,1,0,11,97,0,0,1,1,0,11,98,0,0,0,1,4,
-118,101,99,51,95,100,111,116,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,0,
-100,111,116,0,1,1,0,12,97,0,0,1,1,0,12,98,0,0,0,1,4,118,101,99,52,95,100,111,116,0,18,95,95,114,
-101,116,86,97,108,0,0,18,97,0,0,18,98,0,0,0,0,1,0,0,2,1,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,4,118,
-101,99,52,95,97,100,100,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,0,2,2,1,0,2,5,97,0,0,1,1,0,5,98,0,
-0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,0,2,
-3,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,97,0,0,
-18,97,0,0,18,98,0,0,0,0,1,0,0,2,4,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,
-4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,66,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,
-108,116,105,112,108,121,0,18,97,0,0,18,97,0,0,18,105,110,118,66,0,0,0,0,1,0,0,2,1,1,0,2,6,118,0,0,
-1,1,0,6,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,2,
-1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,0,
-18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,4,118,101,99,52,95,109,117,
-108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,6,118,0,0,1,1,0,6,
-117,0,0,0,1,3,2,0,6,1,105,110,118,0,0,1,1,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,
-110,118,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,0,
-59,121,0,0,18,117,0,59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,122,0,0,
-18,118,0,0,18,105,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,
-116,86,97,108,0,0,18,122,0,0,0,0,1,0,0,2,1,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,4,118,101,99,52,95,
-97,100,100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,2,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,4,
+0,18,117,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,85,0,59,119,0,0,18,117,
+0,59,119,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,
+0,0,18,97,0,59,120,120,120,120,0,0,18,105,110,118,85,0,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,9,
+98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,66,0,
+0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,
+0,0,18,118,0,0,18,105,110,118,66,0,59,120,120,120,120,0,0,0,0,1,0,6,2,26,1,1,0,5,97,0,0,1,1,0,6,
+117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,46,20,0,
+0,1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,
+118,101,99,50,0,18,98,0,0,0,46,20,0,0,1,0,6,2,27,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,9,18,95,95,114,
+101,116,86,97,108,0,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,47,20,0,0,1,0,6,2,27,1,1,0,6,118,0,
+0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,50,0,18,98,0,0,
+0,47,20,0,0,1,0,6,2,21,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,
+105,118,101,99,50,0,18,97,0,0,0,18,117,0,48,20,0,0,1,0,6,2,21,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,9,
+18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,48,20,0,0,1,0,6,2,22,
+1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,50,0,18,97,
+0,0,0,18,117,0,49,20,0,0,1,0,6,2,22,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,49,20,0,0,1,0,7,2,26,1,1,0,5,97,0,0,1,1,0,7,
+117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,46,20,0,
+0,1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,
+118,101,99,51,0,18,98,0,0,0,46,20,0,0,1,0,7,2,27,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,9,18,95,95,114,
+101,116,86,97,108,0,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,47,20,0,0,1,0,7,2,27,1,1,0,7,118,0,
+0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,51,0,18,98,0,0,
+0,47,20,0,0,1,0,7,2,21,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,
+105,118,101,99,51,0,18,97,0,0,0,18,117,0,48,20,0,0,1,0,7,2,21,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,9,
+18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,48,20,0,0,1,0,7,2,22,
+1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,51,0,18,97,
+0,0,0,18,117,0,49,20,0,0,1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,49,20,0,0,1,0,8,2,26,1,1,0,5,97,0,0,1,1,0,8,
+117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,46,20,0,
+0,1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,
+118,101,99,52,0,18,98,0,0,0,46,20,0,0,1,0,8,2,27,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,9,18,95,95,114,
+101,116,86,97,108,0,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,47,20,0,0,1,0,8,2,27,1,1,0,8,118,0,
+0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,52,0,18,98,0,0,
+0,47,20,0,0,1,0,8,2,21,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,
+105,118,101,99,52,0,18,97,0,0,0,18,117,0,48,20,0,0,1,0,8,2,21,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,9,
+18,95,95,114,101,116,86,97,108,0,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,48,20,0,0,1,0,8,2,22,
+1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,58,105,118,101,99,52,0,18,97,
+0,0,0,18,117,0,49,20,0,0,1,0,8,2,22,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,49,20,0,0,1,0,5,2,27,1,1,0,5,97,0,0,0,1,4,118,
+101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,97,0,0,0,0,1,
+0,6,2,27,1,1,0,6,118,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,
+97,108,0,0,18,118,0,0,0,0,1,0,7,2,27,1,1,0,7,118,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,
+0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,0,0,1,0,8,2,27,1,1,0,8,118,0,0,0,1,4,118,101,99,52,
+95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,0,0,1,0,9,2,27,1,1,0,9,
+97,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,
+18,97,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,
+95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,59,120,121,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,
+0,1,4,118,101,99,52,95,110,101,103,97,116,101,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,
+0,18,118,0,59,120,121,122,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,0,1,4,118,101,99,52,95,110,101,103,
+97,116,101,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,0,1,9,
+18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,95,95,114,101,116,
+86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,54,20,0,0,1,0,14,2,27,1,1,0,14,109,0,0,0,1,9,18,
+95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,95,95,114,101,116,86,
+97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,54,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,
+0,57,18,109,0,16,10,50,0,57,54,20,0,0,1,0,15,2,27,1,1,0,15,109,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,
+57,18,109,0,16,10,49,0,57,54,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,
+50,0,57,54,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,54,20,0,0,
+1,0,9,0,100,111,116,0,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,97,0,
+18,98,0,48,20,0,0,1,0,9,0,100,111,116,0,1,1,0,10,97,0,0,1,1,0,10,98,0,0,0,1,9,18,95,95,114,101,116,
+86,97,108,0,18,97,0,59,120,0,18,98,0,59,120,0,48,18,97,0,59,121,0,18,98,0,59,121,0,48,46,20,0,0,1,
+0,9,0,100,111,116,0,1,1,0,11,97,0,0,1,1,0,11,98,0,0,0,1,4,118,101,99,51,95,100,111,116,0,18,95,95,
+114,101,116,86,97,108,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,0,100,111,116,0,1,1,0,12,97,0,0,1,1,0,12,
+98,0,0,0,1,4,118,101,99,52,95,100,111,116,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,0,18,98,0,0,
+0,0,1,0,0,2,1,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,97,0,0,18,97,0,
+0,18,98,0,0,0,0,1,0,0,2,2,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,
+97,99,116,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,0,2,3,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,4,118,
+101,99,52,95,109,117,108,116,105,112,108,121,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,0,2,4,1,0,2,5,
+97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,105,110,118,66,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,
+105,110,118,66,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,97,0,0,18,
+97,0,0,18,105,110,118,66,0,0,0,0,1,0,0,2,1,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,4,118,101,99,52,95,
+97,100,100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,2,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,4,
118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,0,
-2,7,118,0,0,1,1,0,7,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,
-118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,105,110,118,0,0,1,1,
+2,6,118,0,0,1,1,0,6,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,
+118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,3,2,0,6,1,105,110,118,0,0,1,1,
122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,0,59,120,0,0,18,117,0,59,120,0,0,0,4,
102,108,111,97,116,95,114,99,112,0,18,105,110,118,0,59,121,0,0,18,117,0,59,121,0,0,0,4,118,101,99,
52,95,109,117,108,116,105,112,108,121,0,18,122,0,0,18,118,0,0,18,105,110,118,0,0,0,4,102,108,111,
97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,122,0,0,0,0,1,0,0,2,1,1,0,
-2,8,118,0,0,1,1,0,8,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,
-0,1,0,0,2,2,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,
-18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,4,118,101,99,52,
-95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,8,118,0,
-0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,105,110,118,0,0,1,1,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,
+2,7,118,0,0,1,1,0,7,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,
+0,1,0,0,2,2,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,
+18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,4,118,101,99,52,
+95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,7,118,0,
+0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,105,110,118,0,0,1,1,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,
18,105,110,118,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,
118,0,59,121,0,0,18,117,0,59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,122,
0,0,18,118,0,0,18,105,110,118,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,
-101,116,86,97,108,0,0,18,122,0,0,0,0,1,0,0,2,1,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,
-95,97,100,100,0,18,97,0,59,120,0,0,18,97,0,59,120,0,0,18,98,0,0,0,0,1,0,0,2,2,1,0,2,9,97,0,0,1,1,0,
-9,98,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,97,0,59,120,0,0,18,97,0,0,18,98,
-0,0,0,0,1,0,0,2,3,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,
-121,0,18,97,0,59,120,0,0,18,97,0,0,18,98,0,0,0,0,1,0,0,2,4,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,
-9,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,98,0,0,0,4,118,101,99,52,
-95,109,117,108,116,105,112,108,121,0,18,97,0,59,120,0,0,18,97,0,0,18,119,0,0,0,0,1,0,0,2,1,1,0,2,
-10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,59,120,121,0,0,18,118,0,
-59,120,121,0,0,18,117,0,59,120,121,0,0,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,
-101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,117,
-0,59,120,121,0,0,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,109,117,
-108,116,105,112,108,121,0,18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,117,0,59,120,121,0,0,
-0,0,1,0,0,2,4,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,119,0,0,0,4,102,108,111,97,116,95,
-114,99,112,0,18,119,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,
-0,59,121,0,0,18,117,0,59,121,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,
-59,120,121,0,0,18,118,0,59,120,121,0,0,18,119,0,59,120,121,0,0,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,
-0,11,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,
-0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,
-116,0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,11,
-117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,122,0,0,18,
-118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,119,0,0,0,4,102,
+101,116,86,97,108,0,0,18,122,0,0,0,0,1,0,0,2,1,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,4,118,101,99,52,
+95,97,100,100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,2,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,
+4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,
+0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,
+18,118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,105,110,118,0,0,
+1,1,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,0,59,120,0,0,18,117,0,59,120,0,0,
+0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,0,59,121,0,0,18,117,0,59,121,0,0,0,4,118,101,
+99,52,95,109,117,108,116,105,112,108,121,0,18,122,0,0,18,118,0,0,18,105,110,118,0,0,0,4,102,108,
+111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,122,0,0,0,0,1,0,0,2,1,
+1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,97,0,59,120,0,0,18,97,0,59,
+120,0,0,18,98,0,0,0,0,1,0,0,2,2,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,117,98,
+116,114,97,99,116,0,18,97,0,59,120,0,0,18,97,0,0,18,98,0,0,0,0,1,0,0,2,3,1,0,2,9,97,0,0,1,1,0,9,98,
+0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,97,0,59,120,0,0,18,97,0,0,18,98,0,
+0,0,0,1,0,0,2,4,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,119,0,0,0,4,102,108,111,97,116,95,114,
+99,112,0,18,119,0,59,120,0,0,18,98,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,
+97,0,59,120,0,0,18,97,0,0,18,119,0,0,0,0,1,0,0,2,1,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,101,
+99,52,95,97,100,100,0,18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,117,0,59,120,121,0,0,0,0,
+1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,
+18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,117,0,59,120,121,0,0,0,0,1,0,0,2,3,1,0,2,10,118,
+0,0,1,1,0,10,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,
+0,0,18,118,0,59,120,121,0,0,18,117,0,59,120,121,0,0,0,0,1,0,0,2,4,1,0,2,10,118,0,0,1,1,0,10,117,0,
+0,0,1,3,2,0,10,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,117,0,59,
+120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,4,118,101,
+99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,119,
+0,59,120,121,0,0,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,97,100,100,
+0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,11,117,0,
+0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,
+117,0,0,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,
+112,108,121,0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,1,
+0,11,117,0,0,0,1,3,2,0,11,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,
+117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,
+4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,122,0,0,18,117,0,59,122,0,0,0,4,118,101,99,52,95,
+109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,119,0,
+59,120,121,122,0,0,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,97,100,
+100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,2,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,
+101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,0,2,
+12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,
+118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,119,0,0,0,4,102,
108,111,97,116,95,114,99,112,0,18,119,0,59,120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,
114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,
-0,59,122,0,0,18,117,0,59,122,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,
-59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,119,0,59,120,121,122,0,0,0,0,1,0,0,2,1,1,0,2,12,
-118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,
-1,0,0,2,2,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,
-18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,4,118,101,99,
-52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,117,0,0,0,0,1,0,0,2,4,1,0,2,12,
-118,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,
-120,0,0,18,117,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,121,0,0,18,117,0,59,
-121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,122,0,0,18,117,0,59,122,0,0,0,4,102,108,
-111,97,116,95,114,99,112,0,18,119,0,59,119,0,0,18,117,0,59,119,0,0,0,4,118,101,99,52,95,109,117,
-108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,119,0,0,0,0,1,0,0,2,1,1,0,2,6,118,0,0,1,1,0,5,
-97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,97,0,
-59,120,120,0,0,0,0,1,0,0,2,2,1,0,2,6,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,115,117,98,116,
-114,97,99,116,0,18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,
-3,1,0,2,6,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,
-59,120,121,0,0,18,118,0,59,120,121,0,0,18,97,0,59,120,120,0,0,0,9,18,118,0,59,120,0,18,97,0,23,0,9,
-18,118,0,59,121,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,6,118,0,0,1,1,0,5,97,0,0,0,1,9,18,118,0,59,120,0,
-18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,7,118,0,0,1,1,0,5,97,0,0,0,1,4,118,
-101,99,52,95,97,100,100,0,18,118,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,97,0,59,120,
-120,120,0,0,0,0,1,0,0,2,2,1,0,2,7,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,
-97,99,116,0,18,118,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,0,0,
-1,0,0,2,3,1,0,2,7,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,
-18,118,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,4,1,
-0,2,7,118,0,0,1,1,0,5,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,
-9,18,118,0,59,122,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,8,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,
-97,100,100,0,18,118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,2,1,0,2,8,118,0,0,1,
-1,0,5,97,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,0,18,118,0,0,18,97,0,
-59,120,120,120,120,0,0,0,0,1,0,0,2,3,1,0,2,8,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,109,117,
-108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,4,1,0,2,
-8,118,0,0,1,1,0,5,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,
-18,118,0,59,122,0,18,97,0,24,0,9,18,118,0,59,119,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,10,118,0,0,1,1,0,
-9,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,59,120,121,0,0,18,118,0,0,18,97,0,59,120,120,
-0,0,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,
-116,0,18,118,0,59,120,121,0,0,18,118,0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,
-0,9,97,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,0,0,18,118,
-0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,4,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,3,2,0,9,1,105,110,118,
-65,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,65,0,0,18,97,0,0,0,4,118,101,99,52,95,
+0,59,122,0,0,18,117,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,119,0,59,119,0,0,18,117,
+0,59,119,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,119,0,
+0,0,0,1,0,0,2,1,1,0,2,6,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,59,120,
+121,0,0,18,118,0,59,120,121,0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,2,1,0,2,6,118,0,0,1,1,0,5,97,0,
+0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,59,120,121,0,0,18,118,0,59,120,
+121,0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,3,1,0,2,6,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,
109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,0,0,18,118,0,59,120,121,0,0,18,97,0,59,120,
-120,0,0,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,
-59,120,121,122,0,0,18,118,0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,9,97,
-0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,59,120,121,122,0,0,18,118,0,0,
-18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,
-109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,97,0,59,120,120,120,0,
-0,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,3,2,0,9,1,105,110,118,65,0,0,0,4,102,108,111,
-97,116,95,114,99,112,0,18,105,110,118,65,0,0,18,97,0,0,0,4,118,101,99,52,95,109,117,108,116,105,
-112,108,121,0,18,118,0,59,120,121,122,0,0,18,118,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,0,
-0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,0,18,118,
-0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,2,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,
-52,95,115,117,98,116,114,97,99,116,0,18,118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,
-0,2,3,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,
-118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,
-1,3,2,0,9,1,105,110,118,65,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,65,0,0,18,97,
-0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,97,0,59,120,
-120,120,120,0,0,0,0,1,0,13,2,26,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,
-97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,0,1,0,13,2,27,1,1,0,
-13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,
-57,18,110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,
-49,0,57,18,110,0,16,10,49,0,57,47,20,0,0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,95,
-95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,59,120,120,0,
-48,18,109,0,16,10,49,0,57,18,110,0,16,8,48,0,57,59,121,121,0,48,46,20,0,9,18,95,95,114,101,116,86,
-97,108,0,16,10,49,0,57,18,109,0,16,8,48,0,57,18,110,0,16,10,49,0,57,59,120,120,0,48,18,109,0,16,10,
-49,0,57,18,110,0,16,10,49,0,57,59,121,121,0,48,46,20,0,0,1,0,13,2,22,1,1,0,13,109,0,0,1,1,0,13,110,
-0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,
-57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,
-49,0,57,49,20,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,
-97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,20,0,0,1,0,14,2,27,
-1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,
-8,48,0,57,18,110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,
-16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,
-109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,20,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,14,110,0,0,
-0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,59,
-120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,8,48,0,57,59,121,121,121,0,48,46,18,109,0,16,
-10,50,0,57,18,110,0,16,8,48,0,57,59,122,122,122,0,48,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,49,0,57,18,109,0,16,8,48,0,57,18,110,0,16,10,49,0,57,59,120,120,120,0,48,18,109,0,16,10,49,0,57,
-18,110,0,16,10,49,0,57,59,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,110,0,16,10,49,0,57,59,122,
-122,122,0,48,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,8,48,0,57,18,110,
-0,16,10,50,0,57,59,120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,50,0,57,59,121,121,121,0,
-48,46,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,59,122,122,122,0,48,46,20,0,0,1,0,14,2,22,1,1,
-0,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,
-0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,
-49,0,57,18,110,0,16,10,49,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,
-16,10,50,0,57,18,110,0,16,10,50,0,57,49,20,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,9,
-18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,
-9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,
-20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,
-57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,110,0,16,10,
-51,0,57,46,20,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,101,116,86,
-97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,20,0,9,18,95,95,114,
-101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,47,20,0,0,1,0,15,2,
-21,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,
-16,8,48,0,57,18,110,0,16,8,48,0,57,59,120,120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,8,48,
-0,57,59,121,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,110,0,16,8,48,0,57,59,122,122,122,122,0,
-48,46,18,109,0,16,10,51,0,57,18,110,0,16,8,48,0,57,59,119,119,119,119,0,48,46,20,0,9,18,95,95,114,
-101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,8,48,0,57,18,110,0,16,10,49,0,57,59,120,120,120,120,
-0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,59,121,121,121,121,0,48,46,18,109,0,16,10,50,0,
-57,18,110,0,16,10,49,0,57,59,122,122,122,122,0,48,46,18,109,0,16,10,51,0,57,18,110,0,16,10,49,0,57,
-59,119,119,119,119,0,48,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,8,48,
-0,57,18,110,0,16,10,50,0,57,59,120,120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,50,0,57,
-59,121,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,59,122,122,122,122,0,48,
-46,18,109,0,16,10,51,0,57,18,110,0,16,10,50,0,57,59,119,119,119,119,0,48,46,20,0,9,18,95,95,114,
-101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,8,48,0,57,18,110,0,16,10,51,0,57,59,120,120,120,120,
-0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,51,0,57,59,121,121,121,121,0,48,46,18,109,0,16,10,50,0,
-57,18,110,0,16,10,51,0,57,59,122,122,122,122,0,48,46,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,
-59,119,119,119,119,0,48,46,20,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,
-114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,9,18,
-95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,20,0,
-9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,49,
-20,0,0,1,0,13,2,26,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,
-0,57,18,97,0,18,110,0,16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,
-0,18,110,0,16,10,49,0,57,46,20,0,0,1,0,13,2,26,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,9,18,95,95,114,101,116,86,
-97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,0,1,0,13,2,27,1,1,0,9,97,0,0,1,1,0,
-13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,
-0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,47,20,0,0,1,0,13,
-2,27,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,
-16,8,48,0,57,18,98,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,
-57,18,98,0,47,20,0,0,1,0,13,2,21,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,
-49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,0,0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,9,
-18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,95,95,114,
-101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,0,1,0,13,2,22,1,1,0,9,97,
+120,0,0,0,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,6,
+118,0,0,1,1,0,5,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,0,1,0,
+0,2,1,1,0,2,7,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,59,120,121,122,0,
+0,18,118,0,59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,2,1,0,2,7,118,0,0,1,1,0,5,97,
+0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,59,120,121,122,0,0,18,118,0,59,
+120,121,122,0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,3,1,0,2,7,118,0,0,1,1,0,5,97,0,0,0,1,4,118,
+101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,122,0,0,18,118,0,59,120,121,122,
+0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,4,1,0,2,7,118,0,0,1,1,0,5,97,0,0,0,1,9,18,118,0,59,120,
+0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,122,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,
+8,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,0,18,118,0,0,18,97,0,59,120,
+120,120,120,0,0,0,0,1,0,0,2,2,1,0,2,8,118,0,0,1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,115,117,98,116,
+114,97,99,116,0,18,118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,3,1,0,2,8,118,0,0,
+1,1,0,5,97,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,
+97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,4,1,0,2,8,118,0,0,1,1,0,5,97,0,0,0,1,9,18,118,0,59,120,0,
+18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,122,0,18,97,0,24,0,9,18,118,0,59,119,0,
+18,97,0,24,0,0,1,0,0,2,1,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,
+118,0,59,120,121,0,0,18,118,0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,9,97,0,
+0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,59,120,121,0,0,18,118,0,0,18,97,0,
+59,120,120,0,0,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,109,117,108,
+116,105,112,108,121,0,18,118,0,59,120,121,0,0,18,118,0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,4,1,0,
+2,10,118,0,0,1,1,0,9,97,0,0,0,1,3,2,0,9,1,105,110,118,65,0,0,0,4,102,108,111,97,116,95,114,99,112,
+0,18,105,110,118,65,0,0,18,97,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,
+59,120,121,0,0,18,118,0,59,120,121,0,0,18,97,0,59,120,120,0,0,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,
+9,97,0,0,0,1,4,118,101,99,52,95,97,100,100,0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,97,0,59,120,
+120,120,0,0,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,115,117,98,116,
+114,97,99,116,0,18,118,0,59,120,121,122,0,0,18,118,0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,3,1,
+0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,59,
+120,121,122,0,0,18,118,0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,1,0,9,97,0,
+0,0,1,3,2,0,9,1,105,110,118,65,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,105,110,118,65,0,0,18,
+97,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,59,120,121,122,0,0,18,118,0,
+59,120,121,122,0,0,18,97,0,59,120,120,120,0,0,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,4,
+118,101,99,52,95,97,100,100,0,18,118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,2,1,
+0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,99,52,95,115,117,98,116,114,97,99,116,0,18,118,0,0,18,
+118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,4,118,101,
+99,52,95,109,117,108,116,105,112,108,121,0,18,118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,
+0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,3,2,0,9,1,105,110,118,65,0,0,0,4,102,108,111,97,
+116,95,114,99,112,0,18,105,110,118,65,0,0,18,97,0,0,0,4,118,101,99,52,95,109,117,108,116,105,112,
+108,121,0,18,118,0,0,18,118,0,0,18,97,0,59,120,120,120,120,0,0,0,0,1,0,13,2,26,1,1,0,13,109,0,0,1,
+1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,
+16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,
+110,0,16,10,49,0,57,46,20,0,0,1,0,13,2,27,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,
+116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,
+101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,0,0,1,0,13,2,
+21,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,
+16,8,48,0,57,18,110,0,16,8,48,0,57,59,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,8,48,0,57,59,
+121,121,0,48,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,8,48,0,57,18,110,
+0,16,10,49,0,57,59,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,59,121,121,0,48,46,
+20,0,0,1,0,13,2,22,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,
+48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
+10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,
+1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,
+16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,
+110,0,16,10,49,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,
+57,18,110,0,16,10,50,0,57,46,20,0,0,1,0,14,2,27,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,
+114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,47,20,0,9,18,95,
+95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,0,9,
+18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,20,
+0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,
+57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,59,120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,
+16,8,48,0,57,59,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,110,0,16,8,48,0,57,59,122,122,122,0,
+48,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,8,48,0,57,18,110,0,16,10,
+49,0,57,59,120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,59,121,121,121,0,48,46,
+18,109,0,16,10,50,0,57,18,110,0,16,10,49,0,57,59,122,122,122,0,48,46,20,0,9,18,95,95,114,101,116,
+86,97,108,0,16,10,50,0,57,18,109,0,16,8,48,0,57,18,110,0,16,10,50,0,57,59,120,120,120,0,48,18,109,
+0,16,10,49,0,57,18,110,0,16,10,50,0,57,59,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,110,0,16,
+10,50,0,57,59,122,122,122,0,48,46,20,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,95,
+95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,
+95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,
+9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,
+20,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,
+48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
+10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,
+0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,46,20,0,0,1,0,15,2,27,1,1,0,15,
+109,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,
+18,110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,
+57,18,110,0,16,10,49,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,
+50,0,57,18,110,0,16,10,50,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,
+16,10,51,0,57,18,110,0,16,10,51,0,57,47,20,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,9,
+18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,59,120,
+120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,8,48,0,57,59,121,121,121,121,0,48,46,18,109,0,
+16,10,50,0,57,18,110,0,16,8,48,0,57,59,122,122,122,122,0,48,46,18,109,0,16,10,51,0,57,18,110,0,16,
+8,48,0,57,59,119,119,119,119,0,48,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,
+0,16,8,48,0,57,18,110,0,16,10,49,0,57,59,120,120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,
+10,49,0,57,59,121,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,110,0,16,10,49,0,57,59,122,122,122,
+122,0,48,46,18,109,0,16,10,51,0,57,18,110,0,16,10,49,0,57,59,119,119,119,119,0,48,46,20,0,9,18,95,
+95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,8,48,0,57,18,110,0,16,10,50,0,57,59,120,120,
+120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,50,0,57,59,121,121,121,121,0,48,46,18,109,0,16,
+10,50,0,57,18,110,0,16,10,50,0,57,59,122,122,122,122,0,48,46,18,109,0,16,10,51,0,57,18,110,0,16,10,
+50,0,57,59,119,119,119,119,0,48,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,
+16,8,48,0,57,18,110,0,16,10,51,0,57,59,120,120,120,120,0,48,18,109,0,16,10,49,0,57,18,110,0,16,10,
+51,0,57,59,121,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,110,0,16,10,51,0,57,59,122,122,122,
+122,0,48,46,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,59,119,119,119,119,0,48,46,20,0,0,1,0,15,
+2,22,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,
+0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,
+109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,
+57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,
+51,0,57,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,49,20,0,0,1,0,13,2,26,1,1,0,9,97,0,0,1,1,0,
+13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,46,20,
+0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,20,0,0,1,0,13,
+2,26,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,
+16,8,48,0,57,18,98,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,
+57,18,98,0,46,20,0,0,1,0,13,2,27,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,
+108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,
+49,0,57,18,97,0,18,110,0,16,10,49,0,57,47,20,0,0,1,0,13,2,27,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,9,
+18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,95,95,114,
+101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,47,20,0,0,1,0,13,2,21,1,1,0,9,97,
0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,
-0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,
-0,0,1,0,13,2,22,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,
-57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,
-16,10,49,0,57,18,98,0,49,20,0,0,1,0,14,2,26,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,
-116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,97,
-108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,20,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,
-1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,9,18,95,95,
-114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,46,20,0,0,1,0,14,2,27,1,1,0,9,97,0,0,
-1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,
-47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,47,20,0,9,
-18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,47,20,0,0,1,0,14,2,
-27,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,
-8,48,0,57,18,98,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,
-18,98,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,47,
-20,0,0,1,0,14,2,21,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,
-0,57,18,97,0,18,110,0,16,8,48,0,57,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,
-0,18,110,0,16,10,49,0,57,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,
-16,10,50,0,57,48,20,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,
-97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,
-18,109,0,16,10,50,0,57,18,98,0,48,20,0,0,1,0,14,2,22,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,9,18,95,
-95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,
-116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,9,18,95,95,114,101,116,86,97,
-108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,49,20,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,9,
+0,57,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,
+0,0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,
+57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,
+16,10,49,0,57,18,98,0,48,20,0,0,1,0,13,2,22,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,9,18,95,95,114,101,
+116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,0,1,0,13,2,22,1,1,0,13,109,0,0,1,1,0,9,
98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,
-18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,49,20,0,9,18,95,95,
-114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,49,20,0,0,1,0,15,2,26,1,1,0,9,
-97,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,
-48,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,
-20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,20,0,9,18,
-95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,46,20,0,0,1,0,15,2,26,1,
-1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,
-0,57,18,98,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,
-0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,46,20,0,
-9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,46,20,0,0,1,0,15,2,
-27,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,
-110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,
-49,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,47,
-20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,47,20,0,0,1,0,
-15,2,27,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,
-0,16,8,48,0,57,18,98,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,
-0,57,18,98,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,
-0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,47,20,0,
-0,1,0,15,2,21,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,
-18,97,0,18,110,0,16,8,48,0,57,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,
-110,0,16,10,49,0,57,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,
-10,50,0,57,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,
-48,20,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,
-48,0,57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,
-109,0,16,10,49,0,57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,
-10,50,0,57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,
-18,98,0,48,20,0,0,1,0,15,2,22,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,
-0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,
-57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,
-18,110,0,16,10,50,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,97,0,18,110,0,
-16,10,51,0,57,49,20,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,
-97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
-10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,
-18,109,0,16,10,50,0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,
-16,10,51,0,57,18,98,0,49,20,0,0,1,0,10,2,21,1,1,0,13,109,0,0,1,1,0,10,118,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,18,109,0,16,8,48,0,57,18,118,0,59,120,120,0,48,18,109,0,16,10,49,0,57,18,118,0,
-59,121,121,0,48,46,20,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,13,109,0,0,0,1,9,18,95,95,114,101,116,
-86,97,108,0,59,120,0,58,100,111,116,0,18,118,0,0,18,109,0,16,8,48,0,57,0,0,20,0,9,18,95,95,114,101,
-116,86,97,108,0,59,121,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,49,0,57,0,0,20,0,0,1,0,11,2,21,
-1,1,0,14,109,0,0,1,1,0,11,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,109,0,16,8,48,0,57,18,
-118,0,59,120,120,120,0,48,18,109,0,16,10,49,0,57,18,118,0,59,121,121,121,0,48,46,18,109,0,16,10,50,
-0,57,18,118,0,59,122,122,122,0,48,46,20,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,14,109,0,0,0,1,9,18,
-95,95,114,101,116,86,97,108,0,59,120,0,58,100,111,116,0,18,118,0,0,18,109,0,16,8,48,0,57,0,0,20,0,
-9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,49,0,57,0,0,
-20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,50,0,
-57,0,0,20,0,0,1,0,12,2,21,1,1,0,15,109,0,0,1,1,0,12,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,
-18,109,0,16,8,48,0,57,18,118,0,59,120,120,120,120,0,48,18,109,0,16,10,49,0,57,18,118,0,59,121,121,
-121,121,0,48,46,18,109,0,16,10,50,0,57,18,118,0,59,122,122,122,122,0,48,46,18,109,0,16,10,51,0,57,
-18,118,0,59,119,119,119,119,0,48,46,20,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,15,109,0,0,0,1,9,18,
-95,95,114,101,116,86,97,108,0,59,120,0,58,100,111,116,0,18,118,0,0,18,109,0,16,8,48,0,57,0,0,20,0,
-9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,49,0,57,0,0,
-20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,50,0,
-57,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,
-51,0,57,0,0,20,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,
-0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,0,1,0,0,2,2,1,0,2,13,109,
-0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,
-57,18,110,0,16,10,49,0,57,22,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,18,109,
-0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,
-110,0,16,8,48,0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,0,1,0,0,2,1,1,0,2,14,
-109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,
-49,0,57,18,110,0,16,10,49,0,57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,0,1,0,0,2,
-2,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,
-109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,
-0,0,1,0,0,2,3,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,
-4,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,
-109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,
-0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,
-21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,
-50,0,57,21,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,
-0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,18,
-110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,0,9,18,109,0,16,10,51,
-0,57,18,110,0,16,10,51,0,57,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,18,
-109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,
-18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,
-50,0,57,18,110,0,16,10,50,0,57,24,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,24,0,0,1,0,0,2,
-1,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,
-57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,
-0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,
-16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,
-9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,0,1,0,0,2,
-1,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,
-57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,9,97,0,0,
-0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,
-0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,
-23,0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,
-14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,
-0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,
-109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,
-97,0,21,0,9,18,109,0,16,10,51,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,
-18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,
-18,97,0,22,0,9,18,109,0,16,10,51,0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,
-9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,9,18,109,0,16,10,50,0,
-57,18,97,0,23,0,9,18,109,0,16,10,51,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,9,97,0,0,
+18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,49,20,0,0,1,0,14,2,
+26,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,
+110,0,16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,
+49,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,
+20,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,
+0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,
+0,16,10,49,0,57,18,98,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,
+0,57,18,98,0,46,20,0,0,1,0,14,2,27,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,
+10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,47,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,
+18,97,0,18,110,0,16,10,50,0,57,47,20,0,0,1,0,14,2,27,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,
+95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,95,95,114,101,
+116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,47,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,47,20,0,0,1,0,14,2,21,1,1,0,9,97,0,0,1,1,0,14,
+110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,48,20,0,
+9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,0,9,18,95,95,
+114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,48,20,0,0,1,0,14,2,21,1,1,0,
+14,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,
+57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,
+48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,48,20,0,0,
+1,0,14,2,22,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,
+97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,
+0,16,10,49,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,
+0,57,49,20,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,
+16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,
+57,18,109,0,16,10,49,0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,
+0,16,10,50,0,57,18,98,0,49,20,0,0,1,0,15,2,26,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,
+101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,46,20,0,9,18,95,95,114,101,116,86,
+97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,
+16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,
+57,18,97,0,18,110,0,16,10,51,0,57,46,20,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,9,18,
+95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,9,18,95,95,114,
+101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,9,18,95,95,114,101,116,86,
+97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,
+16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,46,20,0,0,1,0,15,2,27,1,1,0,9,97,0,0,1,1,0,15,110,0,0,
+0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,95,
+95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,47,20,0,9,18,95,95,114,101,
+116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,47,20,0,9,18,95,95,114,101,116,86,97,
+108,0,16,10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,47,20,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,9,
+98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,
+18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,47,20,0,9,18,95,95,
+114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,47,20,0,9,18,95,95,114,101,
+116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,47,20,0,0,1,0,15,2,21,1,1,0,9,97,0,0,
+1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,
+48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,0,9,
+18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,48,20,0,9,18,95,95,
+114,101,116,86,97,108,0,16,10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,48,20,0,0,1,0,15,2,21,1,1,0,
+15,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,0,16,8,48,0,
+57,18,98,0,48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,
+48,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,48,20,0,9,
+18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,48,20,0,0,1,0,15,2,
+22,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,97,0,18,
+110,0,16,8,48,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,97,0,18,110,0,16,10,
+49,0,57,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,49,
+20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,49,20,0,0,1,0,
+15,2,22,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,16,8,48,0,57,18,109,
+0,16,8,48,0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,49,0,57,18,109,0,16,10,49,
+0,57,18,98,0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,
+0,49,20,0,9,18,95,95,114,101,116,86,97,108,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,49,20,0,
+0,1,0,10,2,21,1,1,0,13,109,0,0,1,1,0,10,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,109,0,16,
+8,48,0,57,18,118,0,59,120,120,0,48,18,109,0,16,10,49,0,57,18,118,0,59,121,121,0,48,46,20,0,0,1,0,
+10,2,21,1,1,0,10,118,0,0,1,1,0,13,109,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,100,
+111,116,0,18,118,0,0,18,109,0,16,8,48,0,57,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,
+100,111,116,0,18,118,0,0,18,109,0,16,10,49,0,57,0,0,20,0,0,1,0,11,2,21,1,1,0,14,109,0,0,1,1,0,11,
+118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,109,0,16,8,48,0,57,18,118,0,59,120,120,120,0,48,
+18,109,0,16,10,49,0,57,18,118,0,59,121,121,121,0,48,46,18,109,0,16,10,50,0,57,18,118,0,59,122,122,
+122,0,48,46,20,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,14,109,0,0,0,1,9,18,95,95,114,101,116,86,97,
+108,0,59,120,0,58,100,111,116,0,18,118,0,0,18,109,0,16,8,48,0,57,0,0,20,0,9,18,95,95,114,101,116,
+86,97,108,0,59,121,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,49,0,57,0,0,20,0,9,18,95,95,114,
+101,116,86,97,108,0,59,122,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,50,0,57,0,0,20,0,0,1,0,12,
+2,21,1,1,0,15,109,0,0,1,1,0,12,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,109,0,16,8,48,0,
+57,18,118,0,59,120,120,120,120,0,48,18,109,0,16,10,49,0,57,18,118,0,59,121,121,121,121,0,48,46,18,
+109,0,16,10,50,0,57,18,118,0,59,122,122,122,122,0,48,46,18,109,0,16,10,51,0,57,18,118,0,59,119,119,
+119,119,0,48,46,20,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,15,109,0,0,0,1,9,18,95,95,114,101,116,86,
+97,108,0,59,120,0,58,100,111,116,0,18,118,0,0,18,109,0,16,8,48,0,57,0,0,20,0,9,18,95,95,114,101,
+116,86,97,108,0,59,121,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,49,0,57,0,0,20,0,9,18,95,95,
+114,101,116,86,97,108,0,59,122,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,50,0,57,0,0,20,0,9,18,
+95,95,114,101,116,86,97,108,0,59,119,0,58,100,111,116,0,18,118,0,0,18,109,0,16,10,51,0,57,0,0,20,0,
+0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,
+0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,0,1,0,0,2,2,1,0,2,13,109,0,0,1,1,0,13,110,0,
+0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,
+49,0,57,22,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,
+0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,
+24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,14,
+110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,
+16,10,49,0,57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,0,1,0,0,2,2,1,0,2,14,109,0,
+0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,
+18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,0,0,1,0,0,2,3,1,0,2,
+14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,2,14,109,0,0,
+1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,10,49,0,57,
+18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,0,0,1,0,0,2,1,1,0,2,
+15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,
+10,49,0,57,18,110,0,16,10,49,0,57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,9,18,
+109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,
+9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,
+22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,
+51,0,57,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,
+0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,
+24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,
+50,0,57,24,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,
+0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,0,1,0,0,
+2,2,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,109,0,16,10,49,0,
+57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,
+0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,
+16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,
+9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,
+16,10,50,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,
+18,97,0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,0,1,0,0,2,
+3,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,49,0,
+57,18,97,0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,9,97,0,0,
0,1,9,18,109,0,16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,
-0,57,18,97,0,24,0,9,18,109,0,16,10,51,0,57,18,97,0,24,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,13,109,
-0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,14,109,0,0,0,1,9,
-18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,15,109,0,0,0,1,9,18,118,0,18,
-118,0,18,109,0,48,20,0,0,1,0,5,2,25,1,0,2,5,97,0,0,0,1,9,18,97,0,18,97,0,16,10,49,0,47,20,0,9,18,
-95,95,114,101,116,86,97,108,0,18,97,0,20,0,0,1,0,6,2,25,1,0,2,6,118,0,0,0,1,9,18,118,0,18,118,0,58,
-105,118,101,99,50,0,16,10,49,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,
-7,2,25,1,0,2,7,118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,99,51,0,16,10,49,0,0,0,47,20,0,9,18,
-95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,8,2,25,1,0,2,8,118,0,0,0,1,9,18,118,0,18,118,0,
-58,105,118,101,99,52,0,16,10,49,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,
-0,9,2,25,1,0,2,9,97,0,0,0,1,9,18,97,0,18,97,0,17,49,0,48,0,0,47,20,0,9,18,95,95,114,101,116,86,97,
-108,0,18,97,0,20,0,0,1,0,10,2,25,1,0,2,10,118,0,0,0,1,9,18,118,0,18,118,0,58,118,101,99,50,0,17,49,
-0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,11,2,25,1,0,2,11,118,0,
-0,0,1,9,18,118,0,18,118,0,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,
-97,108,0,18,118,0,20,0,0,1,0,12,2,25,1,0,2,12,118,0,0,0,1,9,18,118,0,18,118,0,58,118,101,99,52,0,
-17,49,0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,13,2,25,1,0,2,13,
-109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,
-20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,20,0,
-9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,14,2,25,1,0,2,14,109,0,0,0,1,9,18,109,0,16,
-8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,49,
-0,57,18,109,0,16,10,49,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,50,0,57,
-18,109,0,16,10,50,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,
-108,0,18,109,0,20,0,0,1,0,15,2,25,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,
-57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,
-58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,
-118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,51,0,57,18,109,0,16,10,51,0,57,58,118,
-101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,5,2,
-24,1,0,2,5,97,0,0,0,1,9,18,97,0,18,97,0,16,10,49,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,
-97,0,20,0,0,1,0,6,2,24,1,0,2,6,118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,99,50,0,16,10,49,0,0,
-0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,7,2,24,1,0,2,7,118,0,0,0,1,9,18,
-118,0,18,118,0,58,105,118,101,99,51,0,16,10,49,0,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,
-118,0,20,0,0,1,0,8,2,24,1,0,2,8,118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,99,52,0,16,10,49,0,
-0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,9,2,24,1,0,2,9,97,0,0,0,1,9,18,
-97,0,18,97,0,17,49,0,48,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,0,1,0,10,2,24,
-1,0,2,10,118,0,0,0,1,9,18,118,0,18,118,0,58,118,101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,
-114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,11,2,24,1,0,2,11,118,0,0,0,1,9,18,118,0,18,118,0,58,
-118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,
-12,2,24,1,0,2,12,118,0,0,0,1,9,18,118,0,18,118,0,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,
-18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,13,2,24,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,
-48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,
-57,18,109,0,16,10,49,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,114,101,116,86,
-97,108,0,18,109,0,20,0,0,1,0,14,2,24,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,
-0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,
-58,118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,
-118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,
-15,2,24,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,52,0,17,
-49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,52,0,17,49,0,
-48,0,0,0,0,46,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,52,0,17,49,0,48,0,
-0,0,0,46,20,0,9,18,109,0,16,10,51,0,57,18,109,0,16,10,51,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,
-0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,5,0,95,95,112,111,115,116,68,101,
-99,114,0,1,0,2,5,97,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,9,18,97,0,18,97,0,16,
-10,49,0,47,20,0,0,1,0,6,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,6,118,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,105,118,101,99,50,0,16,10,49,0,0,0,47,20,
-0,0,1,0,7,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,7,118,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,105,118,101,99,51,0,16,10,49,0,0,0,47,20,0,0,1,0,8,0,95,
-95,112,111,115,116,68,101,99,114,0,1,0,2,8,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,
-20,0,9,18,118,0,18,118,0,58,105,118,101,99,52,0,16,10,49,0,0,0,47,20,0,0,1,0,9,0,95,95,112,111,115,
-116,68,101,99,114,0,1,0,2,9,97,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,9,18,97,0,
-18,97,0,17,49,0,48,0,0,47,20,0,0,1,0,10,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,10,118,0,0,0,
-1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,50,0,17,49,0,
-48,0,0,0,0,47,20,0,0,1,0,11,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,11,118,0,0,0,1,9,18,95,
-95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,51,0,17,49,0,48,0,0,0,0,
-47,20,0,0,1,0,12,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,12,118,0,0,0,1,9,18,95,95,114,101,
-116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,0,
-1,0,13,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,13,109,0,0,0,1,9,18,95,95,114,101,116,86,97,
-108,0,18,109,0,20,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,50,0,17,49,0,48,0,
-0,0,0,47,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,
-0,47,20,0,0,1,0,14,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,14,109,0,0,0,1,9,18,95,95,114,101,
-116,86,97,108,0,18,109,0,20,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,51,0,17,
-49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,51,0,17,49,0,
-48,0,0,0,0,47,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,51,0,17,49,0,48,0,
-0,0,0,47,20,0,0,1,0,15,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,15,109,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,18,109,0,20,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,52,0,
-17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,52,0,17,
-49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,52,0,17,49,0,
-48,0,0,0,0,47,20,0,9,18,109,0,16,10,51,0,57,18,109,0,16,10,51,0,57,58,118,101,99,52,0,17,49,0,48,0,
-0,0,0,47,20,0,0,1,0,9,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,9,97,0,0,0,1,9,18,95,95,114,
-101,116,86,97,108,0,18,97,0,20,0,9,18,97,0,18,97,0,16,10,49,0,46,20,0,0,1,0,10,0,95,95,112,111,115,
-116,73,110,99,114,0,1,0,2,10,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,
-0,18,118,0,58,118,101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,0,1,0,11,0,95,95,112,111,115,116,73,110,
-99,114,0,1,0,2,11,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,
-58,118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,0,1,0,12,0,95,95,112,111,115,116,73,110,99,114,0,1,0,
-2,12,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,
-99,52,0,17,49,0,48,0,0,0,0,46,20,0,0,1,0,5,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,5,97,0,0,
-0,1,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,9,18,97,0,18,97,0,16,10,49,0,46,20,0,0,1,0,6,0,
-95,95,112,111,115,116,73,110,99,114,0,1,0,2,6,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,
-118,0,20,0,9,18,118,0,18,118,0,58,105,118,101,99,50,0,16,10,49,0,0,0,46,20,0,0,1,0,7,0,95,95,112,
-111,115,116,73,110,99,114,0,1,0,2,7,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,
-18,118,0,18,118,0,58,105,118,101,99,51,0,16,10,49,0,0,0,46,20,0,0,1,0,8,0,95,95,112,111,115,116,73,
-110,99,114,0,1,0,2,8,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,
-118,0,58,105,118,101,99,51,0,16,10,49,0,0,0,46,20,0,0,1,0,13,0,95,95,112,111,115,116,73,110,99,114,
-0,1,0,2,13,109,0,0,0,1,3,2,0,13,1,110,0,2,18,109,0,0,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,
-57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,
-58,118,101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,8,18,110,0,0,0,1,0,14,0,95,95,112,111,115,116,73,110,
-99,114,0,1,0,2,14,109,0,0,0,1,3,2,0,14,1,110,0,2,18,109,0,0,0,9,18,109,0,16,8,48,0,57,18,109,0,16,
-8,48,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,
-0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,
-58,118,101,99,51,0,17,49,0,48,0,0,0,0,46,20,0,8,18,110,0,0,0,1,0,15,0,95,95,112,111,115,116,73,110,
-99,114,0,1,0,2,15,109,0,0,0,1,3,2,0,15,1,110,0,2,18,109,0,0,0,9,18,109,0,16,8,48,0,57,18,109,0,16,
-8,48,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,
-0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,
-58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,51,0,57,18,109,0,16,10,51,0,57,58,
-118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,8,18,110,0,0,0,1,0,1,2,15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,
-0,1,4,118,101,99,52,95,115,103,116,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,98,0,0,18,97,0,
-0,0,0,1,0,1,2,15,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,
-108,111,97,116,0,18,98,0,0,0,40,0,0,1,0,1,2,16,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,
-0,4,102,108,111,97,116,95,108,101,115,115,0,18,99,0,0,18,98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,
-16,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,
-18,98,0,0,0,41,0,0,1,0,1,2,18,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,
-102,108,111,97,116,95,108,101,115,115,0,18,103,0,0,18,98,0,0,18,97,0,0,0,4,102,108,111,97,116,95,
-101,113,117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,
-5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,
-0,0,43,0,0,1,0,1,2,17,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,
-111,97,116,95,108,101,115,115,0,18,103,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,101,113,
-117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,
-1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,42,0,
-0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,112,114,
-105,110,116,0,18,102,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,5,105,0,0,0,1,4,105,
-110,116,95,112,114,105,110,116,0,18,105,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,1,
-98,0,0,0,1,4,98,111,111,108,95,112,114,105,110,116,0,18,98,0,0,0,0,1,0,0,0,112,114,105,110,116,77,
-69,83,65,0,1,1,0,10,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,
-58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,
-83,65,0,1,1,0,11,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,
-112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,
-18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,12,118,0,0,0,1,9,58,112,
-114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,
-118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,9,58,112,114,
-105,110,116,77,69,83,65,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,
-0,6,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,
-110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,7,
-118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,
-116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,122,0,
-0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,8,118,0,0,0,1,9,58,112,114,105,110,116,77,
-69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,
-9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,77,69,83,
-65,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,2,118,0,0,0,1,9,58,
-112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,
-18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,3,118,0,0,0,1,9,58,112,
-114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,
-118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,
-114,105,110,116,77,69,83,65,0,1,1,0,4,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,
+0,57,18,97,0,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,
+21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,97,0,21,0,9,18,109,0,16,10,
+51,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,
+0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,9,18,109,0,16,
+10,51,0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,
+97,0,23,0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,9,18,109,0,
+16,10,51,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,
+18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,24,0,9,18,109,
+0,16,10,51,0,57,18,97,0,24,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,13,109,0,0,0,1,9,18,118,0,18,118,0,
+18,109,0,48,20,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,14,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,
+20,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,15,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,
+5,2,25,1,0,2,5,97,0,0,0,1,9,18,97,0,18,97,0,16,10,49,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,
+18,97,0,20,0,0,1,0,6,2,25,1,0,2,6,118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,99,50,0,16,10,49,
+0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,7,2,25,1,0,2,7,118,0,0,0,1,9,
+18,118,0,18,118,0,58,105,118,101,99,51,0,16,10,49,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,
+18,118,0,20,0,0,1,0,8,2,25,1,0,2,8,118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,99,52,0,16,10,49,
+0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,9,2,25,1,0,2,9,97,0,0,0,1,9,
+18,97,0,18,97,0,17,49,0,48,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,0,1,0,10,2,
+25,1,0,2,10,118,0,0,0,1,9,18,118,0,18,118,0,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,20,0,9,18,95,
+95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,11,2,25,1,0,2,11,118,0,0,0,1,9,18,118,0,18,118,0,58,
+118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,
+12,2,25,1,0,2,12,118,0,0,0,1,9,18,118,0,18,118,0,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,9,
+18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,13,2,25,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,
+48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,49,0,
+57,18,109,0,16,10,49,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,
+97,108,0,18,109,0,20,0,0,1,0,14,2,25,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,
+0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,
+58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,
+118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,
+15,2,25,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,52,0,17,
+49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,52,0,17,49,0,
+48,0,0,0,0,47,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,52,0,17,49,0,48,0,
+0,0,0,47,20,0,9,18,109,0,16,10,51,0,57,18,109,0,16,10,51,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,
+0,47,20,0,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,5,2,24,1,0,2,5,97,0,0,0,1,9,18,97,
+0,18,97,0,16,10,49,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,0,1,0,6,2,24,1,0,2,6,
+118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,99,50,0,16,10,49,0,0,0,46,20,0,9,18,95,95,114,101,
+116,86,97,108,0,18,118,0,20,0,0,1,0,7,2,24,1,0,2,7,118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,
+99,51,0,16,10,49,0,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,8,2,24,1,0,2,
+8,118,0,0,0,1,9,18,118,0,18,118,0,58,105,118,101,99,52,0,16,10,49,0,0,0,46,20,0,9,18,95,95,114,101,
+116,86,97,108,0,18,118,0,20,0,0,1,0,9,2,24,1,0,2,9,97,0,0,0,1,9,18,97,0,18,97,0,17,49,0,48,0,0,46,
+20,0,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,0,1,0,10,2,24,1,0,2,10,118,0,0,0,1,9,18,118,0,
+18,118,0,58,118,101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,
+20,0,0,1,0,11,2,24,1,0,2,11,118,0,0,0,1,9,18,118,0,18,118,0,58,118,101,99,51,0,17,49,0,48,0,0,0,0,
+46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,0,1,0,12,2,24,1,0,2,12,118,0,0,0,1,9,18,
+118,0,18,118,0,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,
+118,0,20,0,0,1,0,13,2,24,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,
+101,99,50,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,
+99,50,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,14,2,24,
+1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,51,0,17,49,0,48,0,
+0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,
+0,46,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,46,
+20,0,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,0,1,0,15,2,24,1,0,2,15,109,0,0,0,1,9,18,109,
+0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,
+10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,
+50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,51,0,
+57,18,109,0,16,10,51,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,46,20,0,9,18,95,95,114,101,116,86,
+97,108,0,18,109,0,20,0,0,1,0,5,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,5,97,0,0,0,1,9,18,95,
+95,114,101,116,86,97,108,0,18,97,0,20,0,9,18,97,0,18,97,0,16,10,49,0,47,20,0,0,1,0,6,0,95,95,112,
+111,115,116,68,101,99,114,0,1,0,2,6,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,
+18,118,0,18,118,0,58,105,118,101,99,50,0,16,10,49,0,0,0,47,20,0,0,1,0,7,0,95,95,112,111,115,116,68,
+101,99,114,0,1,0,2,7,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,
+118,0,58,105,118,101,99,51,0,16,10,49,0,0,0,47,20,0,0,1,0,8,0,95,95,112,111,115,116,68,101,99,114,
+0,1,0,2,8,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,105,
+118,101,99,52,0,16,10,49,0,0,0,47,20,0,0,1,0,9,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,9,97,
+0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,97,0,20,0,9,18,97,0,18,97,0,17,49,0,48,0,0,47,20,0,0,
+1,0,10,0,95,95,112,111,115,116,68,101,99,114,0,1,0,2,10,118,0,0,0,1,9,18,95,95,114,101,116,86,97,
+108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,20,0,0,1,0,11,0,
+95,95,112,111,115,116,68,101,99,114,0,1,0,2,11,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,
+118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,0,1,0,12,0,95,95,112,
+111,115,116,68,101,99,114,0,1,0,2,12,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,
+9,18,118,0,18,118,0,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,0,1,0,13,0,95,95,112,111,115,116,
+68,101,99,114,0,1,0,2,13,109,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,9,18,109,0,
+16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,0,16,10,
+49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,50,0,17,49,0,48,0,0,0,0,47,20,0,0,1,0,14,0,95,95,112,
+111,115,116,68,101,99,114,0,1,0,2,14,109,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,109,0,20,0,
+9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,
+109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,
+0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,51,0,17,49,0,48,0,0,0,0,47,20,0,0,1,0,15,0,95,
+95,112,111,115,116,68,101,99,114,0,1,0,2,15,109,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,109,
+0,20,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,
+9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,9,18,
+109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,9,18,109,
+0,16,10,51,0,57,18,109,0,16,10,51,0,57,58,118,101,99,52,0,17,49,0,48,0,0,0,0,47,20,0,0,1,0,9,0,95,
+95,112,111,115,116,73,110,99,114,0,1,0,2,9,97,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,97,0,
+20,0,9,18,97,0,18,97,0,16,10,49,0,46,20,0,0,1,0,10,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,
+10,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,
+50,0,17,49,0,48,0,0,0,0,46,20,0,0,1,0,11,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,11,118,0,0,
+0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,51,0,17,49,
+0,48,0,0,0,0,46,20,0,0,1,0,12,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,12,118,0,0,0,1,9,18,95,
+95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,118,101,99,52,0,17,49,0,48,0,0,0,0,
+46,20,0,0,1,0,5,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,5,97,0,0,0,1,9,18,95,95,114,101,116,
+86,97,108,0,18,97,0,20,0,9,18,97,0,18,97,0,16,10,49,0,46,20,0,0,1,0,6,0,95,95,112,111,115,116,73,
+110,99,114,0,1,0,2,6,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,
+118,0,58,105,118,101,99,50,0,16,10,49,0,0,0,46,20,0,0,1,0,7,0,95,95,112,111,115,116,73,110,99,114,
+0,1,0,2,7,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,105,
+118,101,99,51,0,16,10,49,0,0,0,46,20,0,0,1,0,8,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,8,118,
+0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,118,0,20,0,9,18,118,0,18,118,0,58,105,118,101,99,51,
+0,16,10,49,0,0,0,46,20,0,0,1,0,13,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,13,109,0,0,0,1,3,2,
+0,13,1,110,0,2,18,109,0,0,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,50,0,17,49,
+0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,50,0,17,49,0,48,
+0,0,0,0,46,20,0,8,18,110,0,0,0,1,0,14,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,14,109,0,0,0,1,
+3,2,0,14,1,110,0,2,18,109,0,0,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,51,0,
+17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,51,0,17,
+49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,51,0,17,49,0,
+48,0,0,0,0,46,20,0,8,18,110,0,0,0,1,0,15,0,95,95,112,111,115,116,73,110,99,114,0,1,0,2,15,109,0,0,
+0,1,3,2,0,15,1,110,0,2,18,109,0,0,0,9,18,109,0,16,8,48,0,57,18,109,0,16,8,48,0,57,58,118,101,99,52,
+0,17,49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,49,0,57,18,109,0,16,10,49,0,57,58,118,101,99,52,0,17,
+49,0,48,0,0,0,0,46,20,0,9,18,109,0,16,10,50,0,57,18,109,0,16,10,50,0,57,58,118,101,99,52,0,17,49,0,
+48,0,0,0,0,46,20,0,9,18,109,0,16,10,51,0,57,18,109,0,16,10,51,0,57,58,118,101,99,52,0,17,49,0,48,0,
+0,0,0,46,20,0,8,18,110,0,0,0,1,0,1,2,15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,4,118,101,99,52,95,115,
+103,116,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,98,0,0,18,97,0,0,0,0,1,0,1,2,15,1,1,0,5,
+97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,
+0,40,0,0,1,0,1,2,16,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,111,97,116,95,
+108,101,115,115,0,18,99,0,0,18,98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,16,1,1,0,5,97,0,0,1,1,0,5,
+98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,41,0,0,1,0,1,
+2,18,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,
+101,115,115,0,18,103,0,0,18,98,0,0,18,97,0,0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,
+0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,
+8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,43,0,0,1,0,1,2,17,1,1,0,
+9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,101,115,
+115,0,18,103,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,0,0,18,
+97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,
+102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,42,0,0,1,0,0,0,112,114,105,
+110,116,77,69,83,65,0,1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,112,114,105,110,116,0,18,102,0,0,
+0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,5,105,0,0,0,1,4,105,110,116,95,112,114,105,110,
+116,0,18,105,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,1,98,0,0,0,1,4,98,111,111,108,
+95,112,114,105,110,116,0,18,98,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,10,118,0,0,
+0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,
+83,65,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,11,118,0,0,0,1,9,
+58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,
+0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,
+112,114,105,110,116,77,69,83,65,0,1,1,0,12,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,
+118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,9,58,112,114,
+105,110,116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,
+59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,6,118,0,0,0,1,9,58,112,114,105,
+110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,
+121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,7,118,0,0,0,1,9,58,112,114,105,110,
+116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,
+0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,
+77,69,83,65,0,1,1,0,8,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,
+58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,
+0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,
+112,114,105,110,116,77,69,83,65,0,1,1,0,2,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,
+118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,
+114,105,110,116,77,69,83,65,0,1,1,0,3,118,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,
59,120,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,
-116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,119,0,
-0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,13,109,0,0,0,1,9,58,112,114,105,110,116,77,
-69,83,65,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,49,0,
-57,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,14,109,0,0,0,1,9,58,112,114,105,110,116,
-77,69,83,65,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,49,
-0,57,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,
-105,110,116,77,69,83,65,0,1,1,0,15,109,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,
-8,48,0,57,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,
-105,110,116,77,69,83,65,0,18,109,0,16,10,50,0,57,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,
-109,0,16,10,51,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,16,101,0,0,0,1,4,105,
-110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,17,
-101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,77,
-69,83,65,0,1,1,0,18,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,
-114,105,110,116,77,69,83,65,0,1,1,0,19,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,
-0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,20,101,0,0,0,1,4,105,110,116,95,112,114,105,
-110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,21,101,0,0,0,1,4,105,110,
-116,95,112,114,105,110,116,0,18,101,0,0,0,0,0
+116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,4,118,
+0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,77,
+69,83,65,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,122,0,0,0,0,
+9,58,112,114,105,110,116,77,69,83,65,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,
+83,65,0,1,1,0,13,109,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,8,48,0,57,0,0,0,9,
+58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,49,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,77,
+69,83,65,0,1,1,0,14,109,0,0,0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,8,48,0,57,0,0,0,
+9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,77,69,
+83,65,0,18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,15,109,0,0,
+0,1,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,77,
+69,83,65,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,50,0,
+57,0,0,0,9,58,112,114,105,110,116,77,69,83,65,0,18,109,0,16,10,51,0,57,0,0,0,0,1,0,0,0,112,114,105,
+110,116,77,69,83,65,0,1,1,0,16,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,
+0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,17,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,
+0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,18,101,0,0,0,1,4,105,110,116,95,
+112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,1,1,0,19,101,0,0,0,
+1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,77,69,83,65,0,
+1,1,0,20,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,
+116,77,69,83,65,0,1,1,0,21,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,0
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index d19d5a0abb6..14fa38c3cda 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -707,6 +707,64 @@ _slang_find_node_type(slang_operation *oper, slang_operation_type type)
}
+/**
+ * Count the number of operations of the given time rooted at 'oper'.
+ */
+static GLuint
+_slang_count_node_type(slang_operation *oper, slang_operation_type type)
+{
+ GLuint i, count = 0;
+ if (oper->type == type) {
+ return 1;
+ }
+ for (i = 0; i < oper->num_children; i++) {
+ count += _slang_count_node_type(&oper->children[i], type);
+ }
+ return count;
+}
+
+
+/**
+ * Check if the 'return' statement found under 'oper' is a "tail return"
+ * that can be no-op'd. For example:
+ *
+ * void func(void)
+ * {
+ * .. do something ..
+ * return; // this is a no-op
+ * }
+ *
+ * This is used when determining if a function can be inlined. If the
+ * 'return' is not the last statement, we can't inline the function since
+ * we still need the semantic behaviour of the 'return' but we don't want
+ * to accidentally return from the _calling_ function. We'd need to use an
+ * unconditional branch, but we don't have such a GPU instruction (not
+ * always, at least).
+ */
+static GLboolean
+_slang_is_tail_return(const slang_operation *oper)
+{
+ GLuint k = oper->num_children;
+
+ while (k > 0) {
+ const slang_operation *last = &oper->children[k - 1];
+ if (last->type == SLANG_OPER_RETURN)
+ return GL_TRUE;
+ else if (last->type == SLANG_OPER_IDENTIFIER ||
+ last->type == SLANG_OPER_LABEL)
+ k--; /* try prev child */
+ else if (last->type == SLANG_OPER_BLOCK_NO_NEW_SCOPE ||
+ last->type == SLANG_OPER_BLOCK_NEW_SCOPE)
+ /* try sub-children */
+ return _slang_is_tail_return(last);
+ else
+ break;
+ }
+
+ return GL_FALSE;
+}
+
+
static void
slang_resolve_variable(slang_operation *oper)
{
@@ -1207,38 +1265,62 @@ _slang_gen_function_call(slang_assemble_ctx *A, slang_function *fun,
}
else {
/* non-assembly function */
+ /* We always generate an "inline-able" block of code here.
+ * We may either:
+ * 1. insert the inline code
+ * 2. Generate a call to the "inline" code as a subroutine
+ */
+
+
+ slang_operation *ret = NULL;
+
inlined = slang_inline_function_call(A, fun, oper, dest);
- if (inlined && _slang_find_node_type(inlined, SLANG_OPER_RETURN)) {
- slang_operation *callOper;
- /* The function we're calling has one or more 'return' statements.
- * So, we can't truly inline this function because we need to
- * implement 'return' with RET (and CAL).
- * Nevertheless, we performed "inlining" to make a new instance
- * of the function body to deal with static register allocation.
- *
- * XXX check if there's one 'return' and if it's the very last
- * statement in the function - we can optimize that case.
- */
- assert(inlined->type == SLANG_OPER_BLOCK_NEW_SCOPE ||
- inlined->type == SLANG_OPER_SEQUENCE);
- if (_slang_function_has_return_value(fun) && !dest) {
- assert(inlined->children[0].type == SLANG_OPER_VARIABLE_DECL);
- assert(inlined->children[2].type == SLANG_OPER_IDENTIFIER);
- callOper = &inlined->children[1];
+ if (!inlined)
+ return NULL;
+
+ ret = _slang_find_node_type(inlined, SLANG_OPER_RETURN);
+ if (ret) {
+ /* check if this is a "tail" return */
+ if (_slang_count_node_type(inlined, SLANG_OPER_RETURN) == 1 &&
+ _slang_is_tail_return(inlined)) {
+ /* The only RETURN is the last stmt in the function, no-op it
+ * and inline the function body.
+ */
+ ret->type = SLANG_OPER_NONE;
}
else {
- callOper = inlined;
+ slang_operation *callOper;
+ /* The function we're calling has one or more 'return' statements.
+ * So, we can't truly inline this function because we need to
+ * implement 'return' with RET (and CAL).
+ * Nevertheless, we performed "inlining" to make a new instance
+ * of the function body to deal with static register allocation.
+ *
+ * XXX check if there's one 'return' and if it's the very last
+ * statement in the function - we can optimize that case.
+ */
+ assert(inlined->type == SLANG_OPER_BLOCK_NEW_SCOPE ||
+ inlined->type == SLANG_OPER_SEQUENCE);
+
+ if (_slang_function_has_return_value(fun) && !dest) {
+ assert(inlined->children[0].type == SLANG_OPER_VARIABLE_DECL);
+ assert(inlined->children[2].type == SLANG_OPER_IDENTIFIER);
+ callOper = &inlined->children[1];
+ }
+ else {
+ callOper = inlined;
+ }
+ callOper->type = SLANG_OPER_NON_INLINED_CALL;
+ callOper->fun = fun;
+ callOper->label = _slang_label_new_unique((char*) fun->header.a_name);
}
- callOper->type = SLANG_OPER_NON_INLINED_CALL;
- callOper->fun = fun;
- callOper->label = _slang_label_new_unique((char*) fun->header.a_name);
}
}
if (!inlined)
return NULL;
- /* Replace the function call with the inlined block */
+ /* Replace the function call with the inlined block (or new CALL stmt) */
slang_operation_destruct(oper);
*oper = *inlined;
_slang_free(inlined);
@@ -1273,46 +1355,188 @@ slang_find_asm_info(const char *name)
}
+/**
+ * Some write-masked assignments are simple, but others are hard.
+ * Simple example:
+ * vec3 v;
+ * v.xy = vec2(a, b);
+ * Hard example:
+ * vec3 v;
+ * v.zy = vec2(a, b);
+ * this gets transformed/swizzled into:
+ * v.zy = vec2(a, b).*yx* (* = don't care)
+ * This function helps to determine simple vs. non-simple.
+ */
+static GLboolean
+_slang_simple_writemask(GLuint writemask, GLuint swizzle)
+{
+ switch (writemask) {
+ case WRITEMASK_X:
+ return GET_SWZ(swizzle, 0) == SWIZZLE_X;
+ case WRITEMASK_Y:
+ return GET_SWZ(swizzle, 1) == SWIZZLE_Y;
+ case WRITEMASK_Z:
+ return GET_SWZ(swizzle, 2) == SWIZZLE_Z;
+ case WRITEMASK_W:
+ return GET_SWZ(swizzle, 3) == SWIZZLE_W;
+ case WRITEMASK_XY:
+ return (GET_SWZ(swizzle, 0) == SWIZZLE_X)
+ && (GET_SWZ(swizzle, 1) == SWIZZLE_Y);
+ case WRITEMASK_XYZ:
+ return (GET_SWZ(swizzle, 0) == SWIZZLE_X)
+ && (GET_SWZ(swizzle, 1) == SWIZZLE_Y)
+ && (GET_SWZ(swizzle, 2) == SWIZZLE_Z);
+ case WRITEMASK_XYZW:
+ return swizzle == SWIZZLE_NOOP;
+ default:
+ return GL_FALSE;
+ }
+}
+
+
+/**
+ * Convert the given swizzle into a writemask. In some cases this
+ * is trivial, in other cases, we'll need to also swizzle the right
+ * hand side to put components in the right places.
+ * \param swizzle the incoming swizzle
+ * \param writemaskOut returns the writemask
+ * \param swizzleOut swizzle to apply to the right-hand-side
+ * \return GL_FALSE for simple writemasks, GL_TRUE for non-simple
+ */
+static GLboolean
+swizzle_to_writemask(GLuint swizzle,
+ GLuint *writemaskOut, GLuint *swizzleOut)
+{
+ GLuint mask = 0x0, newSwizzle[4];
+ GLint i, size;
+
+ /* make new dst writemask, compute size */
+ for (i = 0; i < 4; i++) {
+ const GLuint swz = GET_SWZ(swizzle, i);
+ if (swz == SWIZZLE_NIL) {
+ /* end */
+ break;
+ }
+ assert(swz >= 0 && swz <= 3);
+ mask |= (1 << swz);
+ }
+ assert(mask <= 0xf);
+ size = i; /* number of components in mask/swizzle */
+
+ *writemaskOut = mask;
+
+ /* make new src swizzle, by inversion */
+ for (i = 0; i < 4; i++) {
+ newSwizzle[i] = i; /*identity*/
+ }
+ for (i = 0; i < size; i++) {
+ const GLuint swz = GET_SWZ(swizzle, i);
+ newSwizzle[swz] = i;
+ }
+ *swizzleOut = MAKE_SWIZZLE4(newSwizzle[0],
+ newSwizzle[1],
+ newSwizzle[2],
+ newSwizzle[3]);
+
+ if (_slang_simple_writemask(mask, *swizzleOut)) {
+ if (size >= 1)
+ assert(GET_SWZ(*swizzleOut, 0) == SWIZZLE_X);
+ if (size >= 2)
+ assert(GET_SWZ(*swizzleOut, 1) == SWIZZLE_Y);
+ if (size >= 3)
+ assert(GET_SWZ(*swizzleOut, 2) == SWIZZLE_Z);
+ if (size >= 4)
+ assert(GET_SWZ(*swizzleOut, 3) == SWIZZLE_W);
+ return GL_TRUE;
+ }
+ else
+ return GL_FALSE;
+}
+
+
+/**
+ * Recursively traverse 'oper' to produce a swizzle mask in the event
+ * of any vector subscripts and swizzle suffixes.
+ * Ex: for "vec4 v", "v[2].x" resolves to v.z
+ */
static GLuint
-make_writemask(const char *field)
-{
- GLuint mask = 0x0;
- while (*field) {
- switch (*field) {
- case 'x':
- case 's':
- case 'r':
- mask |= WRITEMASK_X;
+resolve_swizzle(const slang_operation *oper)
+{
+ if (oper->type == SLANG_OPER_FIELD) {
+ /* writemask from .xyzw suffix */
+ slang_swizzle swz;
+ if (_slang_is_swizzle((char*) oper->a_id, 4, &swz)) {
+ GLuint swizzle = MAKE_SWIZZLE4(swz.swizzle[0],
+ swz.swizzle[1],
+ swz.swizzle[2],
+ swz.swizzle[3]);
+ GLuint child_swizzle = resolve_swizzle(&oper->children[0]);
+ GLuint s = _slang_swizzle_swizzle(child_swizzle, swizzle);
+ return s;
+ }
+ else
+ return SWIZZLE_XYZW;
+ }
+ else if (oper->type == SLANG_OPER_SUBSCRIPT &&
+ oper->children[1].type == SLANG_OPER_LITERAL_INT) {
+ /* writemask from [index] */
+ GLuint child_swizzle = resolve_swizzle(&oper->children[0]);
+ GLuint i = (GLuint) oper->children[1].literal[0];
+ GLuint swizzle;
+ GLuint s;
+ switch (i) {
+ case 0:
+ swizzle = SWIZZLE_XXXX;
break;
- case 'y':
- case 't':
- case 'g':
- mask |= WRITEMASK_Y;
+ case 1:
+ swizzle = SWIZZLE_YYYY;
break;
- case 'z':
- case 'p':
- case 'b':
- mask |= WRITEMASK_Z;
+ case 2:
+ swizzle = SWIZZLE_ZZZZ;
break;
- case 'w':
- case 'q':
- case 'a':
- mask |= WRITEMASK_W;
+ case 3:
+ swizzle = SWIZZLE_WWWW;
break;
default:
- _mesa_problem(NULL, "invalid writemask in make_writemask()");
- return 0;
+ swizzle = SWIZZLE_XYZW;
}
- field++;
+ s = _slang_swizzle_swizzle(child_swizzle, swizzle);
+ return s;
}
- if (mask == 0x0)
- return WRITEMASK_XYZW;
- else
- return mask;
+ else {
+ return SWIZZLE_XYZW;
+ }
+}
+
+
+/**
+ * As above, but produce a writemask.
+ */
+static GLuint
+resolve_writemask(const slang_operation *oper)
+{
+ GLuint swizzle = resolve_swizzle(oper);
+ GLuint writemask, swizzleOut;
+ swizzle_to_writemask(swizzle, &writemask, &swizzleOut);
+ return writemask;
}
/**
+ * Recursively descend through swizzle nodes to find the node's storage info.
+ */
+static slang_ir_storage *
+get_store(const slang_ir_node *n)
+{
+ if (n->Opcode == IR_SWIZZLE) {
+ return get_store(n->Children[0]);
+ }
+ return n->Store;
+}
+
+
+
+/**
* Generate IR tree for an asm instruction/operation such as:
* __asm vec4_dot __retVal.x, v1, v2;
*/
@@ -1366,19 +1590,19 @@ _slang_gen_asm(slang_assemble_ctx *A, slang_operation *oper,
slang_ir_node *n0;
dest_oper = &oper->children[0];
- while (dest_oper->type == SLANG_OPER_FIELD) {
- /* writemask */
- writemask &= make_writemask((char*) dest_oper->a_id);
- dest_oper = &dest_oper->children[0];
- }
+
+ writemask = resolve_writemask(dest_oper);
n0 = _slang_gen_operation(A, dest_oper);
- assert(n0->Var);
- assert(n0->Store);
+ if (!n0)
+ return NULL;
+
assert(!n->Store);
- n->Store = n0->Store;
+ n->Store = get_store(n0);
n->Writemask = writemask;
+ assert(n->Store->File != PROGRAM_UNDEFINED);
+
_slang_free(n0);
}
@@ -1847,6 +2071,14 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var)
n->Store->File = PROGRAM_TEMPORARY;
n->Store->Size = _slang_sizeof_type_specifier(&n->Var->type.specifier);
+ if (var->array_len > 0) {
+ /* this is an array */
+ /* round up element size to mult of 4 */
+ GLint sz = (n->Store->Size + 3) & ~3;
+ /* mult by array size */
+ sz *= var->array_len;
+ n->Store->Size = sz;
+ }
A->program->NumTemporaries++;
assert(n->Store->Size > 0);
}
@@ -2126,105 +2358,6 @@ _slang_gen_variable(slang_assemble_ctx * A, slang_operation *oper)
}
-/**
- * Some write-masked assignments are simple, but others are hard.
- * Simple example:
- * vec3 v;
- * v.xy = vec2(a, b);
- * Hard example:
- * vec3 v;
- * v.zy = vec2(a, b);
- * this gets transformed/swizzled into:
- * v.zy = vec2(a, b).*yx* (* = don't care)
- * This function helps to determine simple vs. non-simple.
- */
-static GLboolean
-_slang_simple_writemask(GLuint writemask, GLuint swizzle)
-{
- switch (writemask) {
- case WRITEMASK_X:
- return GET_SWZ(swizzle, 0) == SWIZZLE_X;
- case WRITEMASK_Y:
- return GET_SWZ(swizzle, 1) == SWIZZLE_Y;
- case WRITEMASK_Z:
- return GET_SWZ(swizzle, 2) == SWIZZLE_Z;
- case WRITEMASK_W:
- return GET_SWZ(swizzle, 3) == SWIZZLE_W;
- case WRITEMASK_XY:
- return (GET_SWZ(swizzle, 0) == SWIZZLE_X)
- && (GET_SWZ(swizzle, 1) == SWIZZLE_Y);
- case WRITEMASK_XYZ:
- return (GET_SWZ(swizzle, 0) == SWIZZLE_X)
- && (GET_SWZ(swizzle, 1) == SWIZZLE_Y)
- && (GET_SWZ(swizzle, 2) == SWIZZLE_Z);
- case WRITEMASK_XYZW:
- return swizzle == SWIZZLE_NOOP;
- default:
- return GL_FALSE;
- }
-}
-
-
-/**
- * Convert the given swizzle into a writemask. In some cases this
- * is trivial, in other cases, we'll need to also swizzle the right
- * hand side to put components in the right places.
- * \param swizzle the incoming swizzle
- * \param writemaskOut returns the writemask
- * \param swizzleOut swizzle to apply to the right-hand-side
- * \return GL_FALSE for simple writemasks, GL_TRUE for non-simple
- */
-static GLboolean
-swizzle_to_writemask(GLuint swizzle,
- GLuint *writemaskOut, GLuint *swizzleOut)
-{
- GLuint mask = 0x0, newSwizzle[4];
- GLint i, size;
-
- /* make new dst writemask, compute size */
- for (i = 0; i < 4; i++) {
- const GLuint swz = GET_SWZ(swizzle, i);
- if (swz == SWIZZLE_NIL) {
- /* end */
- break;
- }
- assert(swz >= 0 && swz <= 3);
- mask |= (1 << swz);
- }
- assert(mask <= 0xf);
- size = i; /* number of components in mask/swizzle */
-
- *writemaskOut = mask;
-
- /* make new src swizzle, by inversion */
- for (i = 0; i < 4; i++) {
- newSwizzle[i] = i; /*identity*/
- }
- for (i = 0; i < size; i++) {
- const GLuint swz = GET_SWZ(swizzle, i);
- newSwizzle[swz] = i;
- }
- *swizzleOut = MAKE_SWIZZLE4(newSwizzle[0],
- newSwizzle[1],
- newSwizzle[2],
- newSwizzle[3]);
-
- if (_slang_simple_writemask(mask, *swizzleOut)) {
- if (size >= 1)
- assert(GET_SWZ(*swizzleOut, 0) == SWIZZLE_X);
- if (size >= 2)
- assert(GET_SWZ(*swizzleOut, 1) == SWIZZLE_Y);
- if (size >= 3)
- assert(GET_SWZ(*swizzleOut, 2) == SWIZZLE_Z);
- if (size >= 4)
- assert(GET_SWZ(*swizzleOut, 3) == SWIZZLE_W);
- return GL_TRUE;
- }
- else
- return GL_FALSE;
-}
-
-
static slang_ir_node *
_slang_gen_swizzle(slang_ir_node *child, GLuint swizzle)
{
@@ -3024,7 +3157,7 @@ _slang_codegen_function(slang_assemble_ctx * A, slang_function * fun)
if (_mesa_strcmp((char *) fun->header.a_name, "main") != 0) {
/* we only really generate code for main, all other functions get
- * inlined.
+ * inlined or codegen'd upon an actual call.
*/
#if 0
/* do some basic error checking though */
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index cdea1c51287..75d1d7621d7 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -1634,6 +1634,15 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
return 0;
}
+ /* allocate global address space for a variable with a known size */
+ if (C->global_scope
+ && !(var->type.specifier.type == SLANG_SPEC_ARRAY
+ && var->array_len == 0)) {
+ if (!calculate_var_size(C, O, var))
+ return GL_FALSE;
+ var->address = slang_var_pool_alloc(O->global_pool, var->size);
+ }
+
/* emit code for global var decl */
if (C->global_scope) {
slang_assemble_ctx A;
@@ -1648,15 +1657,6 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
return 0;
}
- /* allocate global address space for a variable with a known size */
- if (C->global_scope
- && !(var->type.specifier.type == SLANG_SPEC_ARRAY
- && var->array_len == 0)) {
- if (!calculate_var_size(C, O, var))
- return GL_FALSE;
- var->address = slang_var_pool_alloc(O->global_pool, var->size);
- }
-
/* initialize global variable */
if (C->global_scope) {
if (var->initializer != NULL) {
@@ -2129,6 +2129,12 @@ compile_shader(GLcontext *ctx, slang_code_object * object,
GLboolean success;
grammar id = 0;
+#if 0 /* for debug */
+ _mesa_printf("********* COMPILE SHADER ***********\n");
+ _mesa_printf("%s\n", shader->Source);
+ _mesa_printf("************************************\n");
+#endif
+
assert(program);
_slang_code_object_dtr(object);
diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c
index 93256f8647c..6d79380ab5f 100644
--- a/src/mesa/shader/slang/slang_emit.c
+++ b/src/mesa/shader/slang/slang_emit.c
@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
- * Version: 7.0.3
+ * Version: 7.1
*
- * Copyright (C) 2005-2007 Brian Paul All Rights Reserved.
+ * Copyright (C) 2005-2008 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -110,13 +110,16 @@ writemask_to_swizzle(GLuint writemask)
/**
* Swizzle a swizzle. That is, return swz2(swz1)
*/
-static GLuint
-swizzle_swizzle(GLuint swz1, GLuint swz2)
+GLuint
+_slang_swizzle_swizzle(GLuint swz1, GLuint swz2)
{
GLuint i, swz, s[4];
for (i = 0; i < 4; i++) {
GLuint c = GET_SWZ(swz2, i);
- s[i] = GET_SWZ(swz1, c);
+ if (c <= SWIZZLE_W)
+ s[i] = GET_SWZ(swz1, c);
+ else
+ s[i] = c;
}
swz = MAKE_SWIZZLE4(s[0], s[1], s[2], s[3]);
return swz;
@@ -1459,8 +1462,8 @@ emit_swizzle(slang_emit_info *emitInfo, slang_ir_node *n)
/* apply this swizzle to child's swizzle to get composed swizzle */
swizzle = fix_swizzle(n->Store->Swizzle); /* remove the don't care terms */
- n->Store->Swizzle = swizzle_swizzle(n->Children[0]->Store->Swizzle,
- swizzle);
+ n->Store->Swizzle = _slang_swizzle_swizzle(n->Children[0]->Store->Swizzle,
+ swizzle);
return inst;
}
diff --git a/src/mesa/shader/slang/slang_emit.h b/src/mesa/shader/slang/slang_emit.h
index 13ba6d7d6c7..7d70b3311b8 100644
--- a/src/mesa/shader/slang/slang_emit.h
+++ b/src/mesa/shader/slang/slang_emit.h
@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
- * Version: 6.5.3
+ * Version: 7.1
*
- * Copyright (C) 2005-2007 Brian Paul All Rights Reserved.
+ * Copyright (C) 2005-2008 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -36,6 +36,10 @@ extern void
slang_print_ir(const slang_ir_node *n, int indent);
+extern GLuint
+_slang_swizzle_swizzle(GLuint swz1, GLuint swz2);
+
+
extern slang_ir_storage *
_slang_new_ir_storage(enum register_file file, GLint index, GLint size);
diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c
index 92e8d0345ee..16c36aad0c1 100644
--- a/src/mesa/shader/slang/slang_ir.c
+++ b/src/mesa/shader/slang/slang_ir.c
@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
- * Version: 6.5.3
+ * Version: 7.1
*
- * Copyright (C) 2005-2007 Brian Paul All Rights Reserved.
+ * Copyright (C) 2005-2008 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -50,6 +50,7 @@ static const slang_ir_info IrInfo[] = {
{ IR_SLE, "IR_SLE", OPCODE_SLE, 4, 2 },
{ IR_SLT, "IR_SLT", OPCODE_SLT, 4, 2 },
{ IR_POW, "IR_POW", OPCODE_POW, 1, 2 },
+ { IR_EQUAL, "IR_EQUAL", OPCODE_NOP, 1, 2 },
/* unary ops */
{ IR_I_TO_F, "IR_I_TO_F", OPCODE_NOP, 1, 1 },
{ IR_F_TO_I, "IR_F_TO_I", OPCODE_INT, 4, 1 }, /* 4 floats to 4 ints */
@@ -90,7 +91,8 @@ static const slang_ir_info IrInfo[] = {
{ IR_FIELD, "IR_FIELD", OPCODE_NOP, 0, 0 },
{ IR_ELEMENT, "IR_ELEMENT", OPCODE_NOP, 0, 0 },
{ IR_SWIZZLE, "IR_SWIZZLE", OPCODE_NOP, 0, 0 },
- { IR_NOP, NULL, OPCODE_NOP, 0, 0 }
+ { IR_NOP, "IR_NOP", OPCODE_NOP, 0, 0 },
+ { 0, NULL, 0, 0, 0 }
};
@@ -216,12 +218,14 @@ storage_string(const slang_ir_storage *st)
"NAMED_PARAM",
"CONSTANT",
"UNIFORM",
+ "VARYING",
"WRITE_ONLY",
"ADDRESS",
"SAMPLER",
"UNDEFINED"
};
static char s[100];
+ assert(Elements(files) == PROGRAM_FILE_MAX);
#if 0
if (st->Size == 1)
sprintf(s, "%s[%d]", files[st->File], st->Index);
diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c
index dd4990ba023..a69cad5942d 100644
--- a/src/mesa/shader/slang/slang_link.c
+++ b/src/mesa/shader/slang/slang_link.c
@@ -388,6 +388,14 @@ _slang_link(GLcontext *ctx,
_mesa_clear_shader_program_data(ctx, shProg);
+ /* check that all programs compiled successfully */
+ for (i = 0; i < shProg->NumShaders; i++) {
+ if (!shProg->Shaders[i]->CompileStatus) {
+ link_error(shProg, "linking with uncompiled shader\n");
+ return;
+ }
+ }
+
shProg->Uniforms = _mesa_new_uniform_list();
shProg->Varying = _mesa_new_parameter_list();
@@ -474,6 +482,12 @@ _slang_link(GLcontext *ctx,
}
}
+ /* Check that the vertex program doesn't use too many sampler units */
+ if (shProg->VertexProgram &&
+ _mesa_bitcount(shProg->VertexProgram->Base.SamplersUsed) > ctx->Const.MaxVertexTextureImageUnits) {
+ link_error(shProg, "Vertex program uses too many samplers.\n");
+ return;
+ }
if (fragProg && shProg->FragmentProgram) {
/* notify driver that a new fragment program has been compiled/linked */
diff --git a/src/mesa/shader/slang/slang_log.c b/src/mesa/shader/slang/slang_log.c
index e9234bafec7..c963914fe3c 100644
--- a/src/mesa/shader/slang/slang_log.c
+++ b/src/mesa/shader/slang/slang_log.c
@@ -86,6 +86,9 @@ slang_info_log_message(slang_info_log * log, const char *prefix,
}
slang_string_concat(log->text, msg);
slang_string_concat(log->text, "\n");
+#if 0 /* debug */
+ _mesa_printf("Mesa GLSL error/warning: %s\n", log->text);
+#endif
return 1;
}
diff --git a/src/mesa/shader/slang/slang_print.c b/src/mesa/shader/slang/slang_print.c
index f3e127cb13f..ff9c62c929e 100644
--- a/src/mesa/shader/slang/slang_print.c
+++ b/src/mesa/shader/slang/slang_print.c
@@ -171,9 +171,15 @@ static void
print_binary(const slang_operation *op, const char *oper, int indent)
{
assert(op->num_children == 2);
+ printf("binary at %p locals=%p outer=%p\n",
+ (void *) op,
+ (void *) op->locals,
+ (void *) op->locals->outer_scope);
slang_print_tree(&op->children[0], indent + 3);
spaces(indent);
- printf("%s\n", oper);
+ printf("%s at %p locals=%p outer=%p\n",
+ oper, (void *) op, (void *) op->locals,
+ (void *) op->locals->outer_scope);
slang_print_tree(&op->children[1], indent + 3);
}
@@ -182,14 +188,16 @@ static void
print_generic2(const slang_operation *op, const char *oper,
const char *s, int indent)
{
- int i;
+ GLuint i;
if (oper) {
spaces(indent);
- printf("[%p locals %p] %s %s\n", (void*) op, (void*) op->locals, oper, s);
+ printf("%s %s at %p locals=%p outer=%p\n",
+ oper, s, (void *) op, (void *) op->locals,
+ (void *) op->locals->outer_scope);
}
for (i = 0; i < op->num_children; i++) {
spaces(indent);
- printf("//child %d:\n", i);
+ printf("//child %u of %u:\n", i, op->num_children);
slang_print_tree(&op->children[i], indent);
}
}
@@ -244,7 +252,7 @@ slang_print_tree(const slang_operation *op, int indent)
case SLANG_OPER_BLOCK_NO_NEW_SCOPE:
spaces(indent);
- printf("{ locals %p outer %p\n", (void*)op->locals, (void*)op->locals->outer_scope);
+ printf("{ locals=%p outer=%p\n", (void*)op->locals, (void*)op->locals->outer_scope);
print_generic(op, NULL, indent+3);
spaces(indent);
printf("}\n");
@@ -252,7 +260,14 @@ slang_print_tree(const slang_operation *op, int indent)
case SLANG_OPER_BLOCK_NEW_SCOPE:
spaces(indent);
- printf("{{ // new scope locals %p\n", (void*)op->locals);
+ printf("{{ // new scope locals=%p: ", (void*)op->locals);
+ {
+ int i;
+ for (i = 0; i < op->locals->num_variables; i++) {
+ printf("%s ", (char *) op->locals->variables[i]->a_name);
+ }
+ printf("\n");
+ }
print_generic(op, NULL, indent+3);
spaces(indent);
printf("}}\n");
@@ -264,14 +279,16 @@ slang_print_tree(const slang_operation *op, int indent)
slang_variable *v;
v = _slang_locate_variable(op->locals, op->a_id, GL_TRUE);
if (v) {
+ const slang_variable_scope *scope;
spaces(indent);
printf("DECL (locals=%p outer=%p) ", (void*)op->locals, (void*) op->locals->outer_scope);
print_type(&v->type);
printf(" %s (%p)", (char *) op->a_id,
(void *) find_var(op->locals, op->a_id));
- printf(" (in scope %p) ",
- (void *) find_scope(op->locals, op->a_id));
+ scope = find_scope(op->locals, op->a_id);
+ printf(" (in scope %p) ", (void *) scope);
+ assert(scope);
if (op->num_children == 1) {
printf(" :=\n");
slang_print_tree(&op->children[0], indent + 3);
@@ -300,8 +317,12 @@ slang_print_tree(const slang_operation *op, int indent)
case SLANG_OPER_ASM:
spaces(indent);
- printf("ASM: %s\n", (char*) op->a_id);
- print_generic(op, NULL, indent+3);
+ printf("ASM: %s at %p locals=%p outer=%p\n",
+ (char *) op->a_id,
+ (void *) op,
+ (void *) op->locals,
+ (void *) op->locals->outer_scope);
+ print_generic(op, "ASM", indent+3);
break;
case SLANG_OPER_BREAK:
@@ -333,7 +354,9 @@ slang_print_tree(const slang_operation *op, int indent)
case SLANG_OPER_EXPRESSION:
spaces(indent);
- printf("EXPR: locals %p\n", (void*) op->locals);
+ printf("EXPR: locals=%p outer=%p\n",
+ (void *) op->locals,
+ (void *) op->locals->outer_scope);
/*print_generic(op, "SLANG_OPER_EXPRESSION", indent);*/
slang_print_tree(&op->children[0], indent + 3);
break;
@@ -422,13 +445,25 @@ slang_print_tree(const slang_operation *op, int indent)
break;
case SLANG_OPER_IDENTIFIER:
- spaces(indent);
- if (op->var && op->var->a_name)
- printf("VAR %s (in scope %p)\n", (char *) op->var->a_name,
- (void *) find_scope(op->locals, op->a_id));
- else
- printf("VAR' %s (in scope %p)\n", (char *) op->a_id,
- (void *) find_scope(op->locals, op->a_id));
+ {
+ const slang_variable_scope *scope;
+ spaces(indent);
+ if (op->var && op->var->a_name) {
+ scope = find_scope(op->locals, op->var->a_name);
+ printf("VAR %s (in scope %p)\n", (char *) op->var->a_name,
+ (void *) scope);
+ assert(scope);
+ }
+ else {
+ scope = find_scope(op->locals, op->a_id);
+ printf("VAR' %s (in scope %p) locals=%p outer=%p\n",
+ (char *) op->a_id,
+ (void *) scope,
+ (void *) op->locals,
+ (void *) op->locals->outer_scope);
+ assert(scope);
+ }
+ }
break;
case SLANG_OPER_SEQUENCE:
@@ -437,7 +472,9 @@ slang_print_tree(const slang_operation *op, int indent)
case SLANG_OPER_ASSIGN:
spaces(indent);
- printf("ASSIGNMENT locals %p\n", (void*)op->locals);
+ printf("ASSIGNMENT locals=%p outer=%p\n",
+ (void *) op->locals,
+ (void *) op->locals->outer_scope);
print_binary(op, ":=", indent);
break;
@@ -573,7 +610,9 @@ slang_print_tree(const slang_operation *op, int indent)
case SLANG_OPER_SUBSCRIPT:
spaces(indent);
- printf("SLANG_OPER_SUBSCRIPT\n");
+ printf("SLANG_OPER_SUBSCRIPT locals=%p outer=%p\n",
+ (void *) op->locals,
+ (void *) op->locals->outer_scope);
print_generic(op, NULL, indent+3);
break;
@@ -640,7 +679,8 @@ slang_print_function(const slang_function *f, GLboolean body)
print_variable(f->parameters->variables[i], 3);
}
- printf(")\n");
+ printf(") param scope = %p\n", (void *) f->parameters);
+
if (body && f->body)
slang_print_tree(f->body, 0);
}
@@ -804,7 +844,7 @@ int
slang_checksum_tree(const slang_operation *op)
{
int s = op->num_children;
- int i;
+ GLuint i;
for (i = 0; i < op->num_children; i++) {
s += slang_checksum_tree(&op->children[i]);
diff --git a/src/mesa/shader/slang/slang_vartable.c b/src/mesa/shader/slang/slang_vartable.c
index 1d817000c60..c4a2f784d4d 100644
--- a/src/mesa/shader/slang/slang_vartable.c
+++ b/src/mesa/shader/slang/slang_vartable.c
@@ -28,7 +28,7 @@ struct table
slang_variable **Vars; /* array [NumVars] */
TempState Temps[MAX_PROGRAM_TEMPS * 4]; /* per-component state */
- int ValSize[MAX_PROGRAM_TEMPS]; /* For debug only */
+ int ValSize[MAX_PROGRAM_TEMPS * 4]; /**< For debug only */
struct table *Parent; /** Parent scope table */
};
@@ -220,6 +220,7 @@ alloc_reg(slang_var_table *vt, GLint size, GLboolean isTemp)
assert(i % 4 == 0);
for (j = 0; j < size; j++)
t->Temps[i + j] = isTemp ? TEMP : VAR;
+ assert(i < MAX_PROGRAM_TEMPS * 4);
t->ValSize[i] = size;
return i;
}
diff --git a/src/mesa/swrast/s_fragprog.c b/src/mesa/swrast/s_fragprog.c
index ecace9c5025..bf7a1de03bc 100644
--- a/src/mesa/swrast/s_fragprog.c
+++ b/src/mesa/swrast/s_fragprog.c
@@ -44,7 +44,8 @@ fetch_texel_lod( GLcontext *ctx, const GLfloat texcoord[4], GLfloat lambda,
SWcontext *swrast = SWRAST_CONTEXT(ctx);
const struct gl_texture_object *texObj = ctx->Texture.Unit[unit]._Current;
- lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
+ if (texObj)
+ lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
/* XXX use a float-valued TextureSample routine here!!! */
swrast->TextureSample[unit](ctx, texObj, 1, (const GLfloat (*)[4]) texcoord,
@@ -68,20 +69,23 @@ fetch_texel_deriv( GLcontext *ctx, const GLfloat texcoord[4],
{
SWcontext *swrast = SWRAST_CONTEXT(ctx);
const struct gl_texture_object *texObj = ctx->Texture.Unit[unit]._Current;
- const struct gl_texture_image *texImg = texObj->Image[0][texObj->BaseLevel];
- const GLfloat texW = (GLfloat) texImg->WidthScale;
- const GLfloat texH = (GLfloat) texImg->HeightScale;
+ GLfloat lambda;
GLchan rgba[4];
- GLfloat lambda
- = _swrast_compute_lambda(texdx[0], texdy[0], /* ds/dx, ds/dy */
- texdx[1], texdy[1], /* dt/dx, dt/dy */
- texdx[3], texdy[2], /* dq/dx, dq/dy */
- texW, texH,
- texcoord[0], texcoord[1], texcoord[3],
- 1.0F / texcoord[3]) + lodBias;
+ if (texObj) {
+ const struct gl_texture_image *texImg = texObj->Image[0][texObj->BaseLevel];
+ const GLfloat texW = (GLfloat) texImg->WidthScale;
+ const GLfloat texH = (GLfloat) texImg->HeightScale;
- lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
+ lambda = _swrast_compute_lambda(texdx[0], texdy[0], /* ds/dx, ds/dy */
+ texdx[1], texdy[1], /* dt/dx, dt/dy */
+ texdx[3], texdy[2], /* dq/dx, dq/dy */
+ texW, texH,
+ texcoord[0], texcoord[1], texcoord[3],
+ 1.0F / texcoord[3]) + lodBias;
+
+ lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
+ }
swrast->TextureSample[unit](ctx, texObj, 1, (const GLfloat (*)[4]) texcoord,
&lambda, &rgba);
diff --git a/src/mesa/swrast/s_points.c b/src/mesa/swrast/s_points.c
index 350a0682d69..1a8fd7d6db2 100644
--- a/src/mesa/swrast/s_points.c
+++ b/src/mesa/swrast/s_points.c
@@ -263,7 +263,7 @@ smooth_point(GLcontext *ctx, const SWvertex *vert)
size = get_size(ctx, vert, GL_TRUE);
/* alpha attenuation / fade factor */
- if (ctx->Multisample.Enabled) {
+ if (ctx->Multisample._Enabled) {
if (vert->pointSize >= ctx->Point.Threshold) {
alphaAtten = 1.0F;
}
diff --git a/src/mesa/tnl/t_vb_program.c b/src/mesa/tnl/t_vb_program.c
index addaf761273..f99401ca6d8 100644
--- a/src/mesa/tnl/t_vb_program.c
+++ b/src/mesa/tnl/t_vb_program.c
@@ -242,6 +242,8 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine)
machine->FetchTexelLod = vp_fetch_texel;
machine->FetchTexelDeriv = NULL; /* not used by vertex programs */
+
+ machine->Samplers = ctx->VertexProgram._Current->Base.SamplerUnits;
}
diff --git a/src/mesa/tnl_dd/t_dd_tritmp.h b/src/mesa/tnl_dd/t_dd_tritmp.h
index 2bb890593b1..1ae70f4059f 100644
--- a/src/mesa/tnl_dd/t_dd_tritmp.h
+++ b/src/mesa/tnl_dd/t_dd_tritmp.h
@@ -267,7 +267,7 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
GLfloat bc = b * ic;
if ( ac < 0.0f ) ac = -ac;
if ( bc < 0.0f ) bc = -bc;
- offset += MAX2( ac, bc ) * ctx->Polygon.OffsetFactor;
+ offset += MAX2( ac, bc ) * ctx->Polygon.OffsetFactor / ctx->DrawBuffer->_MRD;
}
offset *= ctx->DrawBuffer->_MRD * (REVERSE_DEPTH ? -1.0 : 1.0);
}
@@ -539,7 +539,7 @@ static void TAG(quadr)( GLcontext *ctx,
GLfloat bc = b * ic;
if ( ac < 0.0f ) ac = -ac;
if ( bc < 0.0f ) bc = -bc;
- offset += MAX2( ac, bc ) * ctx->Polygon.OffsetFactor;
+ offset += MAX2( ac, bc ) * ctx->Polygon.OffsetFactor / ctx->DrawBuffer->_MRD;
}
offset *= ctx->DrawBuffer->_MRD * (REVERSE_DEPTH ? -1.0 : 1.0);
}