diff -N -x '*CVS*' -r -u x11r681/xc/BUILD x11r682/xc/BUILD --- xc/BUILD 2004-09-17 17:38:16.000000000 +0200 +++ xc/BUILD 2005-02-08 01:44:26.000000000 +0100 @@ -1,9 +1,9 @@ Building the X Window System from the X.org Source Distribution - Jim Gettys and Keith Packard (for X11R6.8.1) + Jim Gettys and Keith Packard (for X11R6.8.2) David Dawes and Matthieu Herrb (for XFree86 4.4 RC2) - 17 September 2004 + 9 February 2005 Abstract @@ -22,62 +22,62 @@ son, flex, zlib (development package), ncurses (development package), font- config (development package), expat (development package), and Perl. -1. How to get the X11R6.8.1 distribution source +1. How to get the X11R6.8.2 distribution source -One way of getting the X11R6.8.1 source is to obtain it directly from the +One way of getting the X11R6.8.2 source is to obtain it directly from the X.Org CVS repository. There are several ways of doing that, and they are described in the CVS section of our wiki The CVS tag -for this release is "XORG-6_8_1". The tag for the maintenance branch for +for this release is "XORG-6_8_2". The tag for the maintenance branch for this release is "XORG-6_8-branch". -Another method of getting the X11R6.8.1 source is to either download the -6.8.1 source tarballs sites from freedesktop.org using either ftp or http. +Another method of getting the X11R6.8.2 source is to either download the +6.8.2 source tarballs sites from freedesktop.org using either ftp or http. The procedure for this is as follows: - o The X11R6.8.1 source is contained in the files: + o The X11R6.8.2 source is contained in the files: - X11R6.8.1-src1.tar.gz + X11R6.8.2-src1.tar.gz - X11R6.8.1-src2.tar.gz + X11R6.8.2-src2.tar.gz - X11R6.8.1-src3.tar.gz + X11R6.8.2-src3.tar.gz - X11R6.8.1-src4.tar.gz + X11R6.8.2-src4.tar.gz - X11R6.8.1-src5.tar.gz + X11R6.8.2-src5.tar.gz - X11R6.8.1-src6.tar.gz + X11R6.8.2-src6.tar.gz - X11R6.8.1-src7.tar.gz + X11R6.8.2-src7.tar.gz - These can be found at ftp://ftp.freedesktop.org/xorg/X11R6.8.1/src/ or - http://freedesktop.org/~xorg/X11R6.8.1/src/ and similar locations on - X.org mirror sites. X11R6.8.1-src4.tgz and X11R6.8.1-src5.tar.gz con- - tains the fonts. X11R6.8.1-src6.tar.gz contains the documentation - source. X11R6.8.1-src7.tar.gz contains the hardcopy documentation. - X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and X11R6.8.1-src3.tar.gz + These can be found at ftp://ftp.freedesktop.org/xorg/X11R6.8.2/src/ or + http://freedesktop.org/~xorg/X11R6.8.2/src/ and similar locations on + X.org mirror sites. X11R6.8.2-src4.tgz and X11R6.8.2-src5.tar.gz con- + tains the fonts. X11R6.8.2-src6.tar.gz contains the documentation + source. X11R6.8.2-src7.tar.gz contains the hardcopy documentation. + X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and X11R6.8.2-src3.tar.gz contains everything else. If you don't need the docs or fonts you can - get by with only X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and - X11R6.8.1-src3.tar.gz. + get by with only X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and + X11R6.8.2-src3.tar.gz. o Extract each of these files by running the following from a directory on a filesystem containing enough space (the full source requires around 305MB, and a similar amount is required in addition to this for the com- piled binaries): - gzip -d < X11R6.8.1-src1.tar.gz | tar vxf - + gzip -d < X11R6.8.2-src1.tar.gz | tar vxf - - gzip -d < X11R6.8.1-src2.tar.gz | tar vxf - + gzip -d < X11R6.8.2-src2.tar.gz | tar vxf - - gzip -d < X11R6.8.1-src3.tar.gz | tar vxf - + gzip -d < X11R6.8.2-src3.tar.gz | tar vxf - - gzip -d < X11R6.8.1-src4.tar.gz | tar vxf - + gzip -d < X11R6.8.2-src4.tar.gz | tar vxf - - gzip -d < X11R6.8.1-src5.tar.gz | tar vxf - + gzip -d < X11R6.8.2-src5.tar.gz | tar vxf - - gzip -d < X11R6.8.1-src6.tar.gz | tar vxf - + gzip -d < X11R6.8.2-src6.tar.gz | tar vxf - - gzip -d < X11R6.8.1-src7.tar.gz | tar vxf - + gzip -d < X11R6.8.2-src7.tar.gz | tar vxf - All methods will produce one main source directory called xc. @@ -96,23 +96,23 @@ easy to create build problems by changing the default configuration. Check the configuration parameters specified in the xc/config/cf/README. -If you are using just the X11R6.8.1-src1.tar.gz, X11R6.8.1-src2.tar.gz and -X11R6.8.1-src3.tar.gz parts of the source dist, you will need to define +If you are using just the X11R6.8.2-src1.tar.gz, X11R6.8.2-src2.tar.gz and +X11R6.8.2-src3.tar.gz parts of the source dist, you will need to define BuildFonts to NO. 3. Using a shadow directory of symbolic links for the build A recommended practice is to use a shadow directory of symbolic links to do -the build of X11R6.8.1 as this allows you to keep the source directory unmod- +the build of X11R6.8.2 as this allows you to keep the source directory unmod- ified during the build. It has the following benefits: o When you are using CVS to maintain your source tree, the update process is not disturbed by foreign files not under CVS's control. - o It is possible to build X11R6.8.1 for several different Operating System + o It is possible to build X11R6.8.2 for several different Operating System or architectures from the same sources, shared by read-only NFS mounts. - o It is possible to build X11R6.8.1 with different configuration options, + o It is possible to build X11R6.8.2 with different configuration options, by putting a real copy of the host.def file in each build tree and by customizing it separately in each build tree. @@ -135,7 +135,7 @@ See the lndir(1) manual page for details. If lndir is not already installed on your system, you can build it manually -from the X11R6.8.1 sources by running the following commands: +from the X11R6.8.2 sources by running the following commands: cd xc/config/util @@ -158,7 +158,7 @@ addressed the OS-specific details, go your build directory (either the xc directory or the shadow tree created before) and run "make World" with the BOOTSTRAPCFLAGS set as described in the OS-specific README (if necessary, but -most systems supported by X11R6.8.1 don't need BOOTSTRAPCFLAGS). It is +most systems supported by X11R6.8.2 don't need BOOTSTRAPCFLAGS). It is advisable to redirect stdout and stderr to World.Log so that you can track down problems that might occur during the build. @@ -197,7 +197,11 @@ To do the install, run "make install" and "make install.man". Make sure you have enough space in /usr/X11R6 for the install to succeed. If you want to install on a filesystem other than /usr, make a symbolic link to /usr/X11R6 -before installing. +before installing. To install the tree into a different directory than +/usr/X11R6 you can specify DESTDIR: + + make install DESTDIR= make install.man DEST- + DIR= Cross compiling is supported if the appropriate config files for your target platforms exist. You must have the compiler toolchain installed for your tar- @@ -231,7 +235,7 @@ 6. Other useful make targets There are some other useful targets defined in the top level Makefile of -X11R6.8.1: +X11R6.8.2: o Everything after a make World, make Everything does everything a make World does, except the cleaning of the tree. It is a way to quickly @@ -247,11 +251,11 @@ make depend make - to rebuild the X11R6.8.1. + to rebuild the X11R6.8.2. o distclean does a full cleaning of the source tree, removing all gener- ated files. After a make distclean, make World is the only option to - rebuild X11R6.8.1. + rebuild X11R6.8.2. o includes generates all generated header files and in-tree symbolic links needed by the build. These files are removed by a make clean. @@ -268,4 +272,4 @@ $Id$ -$XdotOrg: xc/BUILD,v 1.4.2.2 2004/09/17 15:38:16 kem Exp $ +$XdotOrg: xc/BUILD,v 1.4.2.3 2005/02/08 00:44:26 kem Exp $ diff -N -x '*CVS*' -r -u x11r681/xc/ChangeLog x11r682/xc/ChangeLog --- xc/ChangeLog 2004-09-15 17:47:36.000000000 +0200 +++ xc/ChangeLog 2005-02-09 19:03:20.000000000 +0100 @@ -1,3 +1,1738 @@ +2005-02-09 Roland Mainz + * xc/Makefile + * xc/config/cf/xorgversion.def + Bugzilla #2514 (https://bugs.freedesktop.org/show_bug.cgi?id=2514) + attachment #1879 (https://bugs.freedesktop.org/attachment.cgi?id=1879): + Bumping version to 6.8.2 + [Disclaimer: This is just a version bump, X11R6.8.2 is released when + you see the official annoucement.] + +2005-02-08 Kevin E. Martin + + * README: + * RELNOTES: + * programs/Xserver/hw/xfree86/doc/README: + * programs/Xserver/hw/xfree86/doc/RELNOTES: + * programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml: + Update formatted docs. + +2005-02-08 Roland Mainz + * xc/programs/Xserver/hw/xfree86/doc/sgml/README.sgml + * xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml + * xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent + Bugzilla #2485 (https://bugs.freedesktop.org/show_bug.cgi?id=2485): + Second set of release note updates for upcoming X11R6.8.2 release + per feedback from the release-wranglers mailinglist. + +2005-02-07 Kevin E. Martin + + * BUILD: + * README: + * RELNOTES: + * programs/Xserver/hw/xfree86/doc/BUILD: + * programs/Xserver/hw/xfree86/doc/DESIGN: + * programs/Xserver/hw/xfree86/doc/Install: + * programs/Xserver/hw/xfree86/doc/OS2.Notes: + * programs/Xserver/hw/xfree86/doc/README: + * programs/Xserver/hw/xfree86/doc/README.DECtga: + * programs/Xserver/hw/xfree86/doc/README.Darwin: + * programs/Xserver/hw/xfree86/doc/README.I128: + * programs/Xserver/hw/xfree86/doc/README.LynxOS: + * programs/Xserver/hw/xfree86/doc/README.NetBSD: + * programs/Xserver/hw/xfree86/doc/README.OpenBSD: + * programs/Xserver/hw/xfree86/doc/README.SCO: + * programs/Xserver/hw/xfree86/doc/README.SiS: + * programs/Xserver/hw/xfree86/doc/README.Solaris: + * programs/Xserver/hw/xfree86/doc/README.XKB-Config: + * programs/Xserver/hw/xfree86/doc/README.XKB-Enhancing: + * programs/Xserver/hw/xfree86/doc/README.ati: + * programs/Xserver/hw/xfree86/doc/README.chips: + * programs/Xserver/hw/xfree86/doc/README.dps: + * programs/Xserver/hw/xfree86/doc/README.fonts: + * programs/Xserver/hw/xfree86/doc/README.i740: + * programs/Xserver/hw/xfree86/doc/README.i810: + * programs/Xserver/hw/xfree86/doc/README.mouse: + * programs/Xserver/hw/xfree86/doc/README.r128: + * programs/Xserver/hw/xfree86/doc/README.rendition: + * programs/Xserver/hw/xfree86/doc/README.s3virge: + * programs/Xserver/hw/xfree86/doc/RELNOTES: + * programs/Xserver/hw/xfree86/doc/Versions: + * programs/Xserver/hw/xfree86/doc/sgml/defs.ent: + * programs/xkbcomp/README.config: + * programs/xkbcomp/README.enhancing: + Update formatted docs. + +2005-02-07 Roland Mainz + * xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml + Bugzilla #2485 (https://bugs.freedesktop.org/show_bug.cgi?id=2485) + attachment #1855 (https://bugs.freedesktop.org/attachment.cgi?id=1855): + Update release notes for SiS driver. + Patch by Thomas Winischhofer . + +2005-02-07 Roland Mainz + * xc/programs/Xserver/hw/xfree86/doc/sgml/OpenBSD.sgml + * xc/programs/Xserver/hw/xfree86/doc/sgml/RELNOTES.sgml + * xc/programs/Xserver/hw/xfree86/doc/sgml/SiS.sgml + * xc/programs/Xserver/hw/xfree86/doc/sgml/Solaris.sgml + * xc/programs/Xserver/hw/xfree86/doc/sgml/defs.ent + Bugzilla #2485 (https://bugs.freedesktop.org/show_bug.cgi?id=2485): + First set of release note updated for upcoming X11R6.8.2 release. + +2005-02-02 Roland Mainz + * xc/config/cf/xorgversion.def + Bugzilla #2456 (https://bugs.freedesktop.org/show_bug.cgi?id=2456) + attachment #1823 (https://bugs.freedesktop.org/attachment.cgi?id=1823): + Bump version number for upcoming X11R6.8.2rc4 (release canidate 4) to + X11R6.8.1.904. + +2005-02-01 Roland Mainz + * xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c + Backout of Bugzilla #2206 (https://bugs.freedesktop.org/show_bug.cgi?id=2206) + attachment #1622 (https://bugs.freedesktop.org/attachment.cgi?id=1622) + as this patch does not work for the branch and causes build failure. + Approved in the 2005-01-31 Xorg release-wranglers phone call. + +2005-02-01 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/sis/sis.h + Bugzilla #2438 (https://bugs.freedesktop.org/show_bug.cgi?id=2438) + attachment #1806 (https://bugs.freedesktop.org/attachment.cgi?id=1806): + Fix sis driver to work correctly on AMD64. + Patch by Thomas Winischhofer . + Vouchers for commit into X11R6.8.x stable branch are Kevin E. + Martin and Roland Mainz + . + +2005-02-01 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c + Bugzilla #2437 (https://bugs.freedesktop.org/show_bug.cgi?id=2437) + attachment #1805 (https://bugs.freedesktop.org/attachment.cgi?id=1805): + Fix sis driver which was reading wrong data from BIOS image. + Patch by Thomas Winischhofer . + Vouchers for commit into X11R6.8.x stable branch are Kevin E. + Martin and Roland Mainz + . + +2005-02-01 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Sbus.h + * xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c + * xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c + Bugzilla #825 (https://bugs.freedesktop.org/show_bug.cgi?id=825) + attachment #956 (https://bugs.freedesktop.org/attachment.cgi?id=956): + Fix build problems on Linux/SPARC. + Patch by Jeremy Huddleston . + Approved in the 2005-01-31 Xorg release-wranglers phone call. + +2005-02-01 Alexander Gottwald + * xc/config/cf/cygwin.cf + Bugzilla #1393 (https://bugs.freedesktop.org/show_bug.cgi?id=1393) + attachment #1801 (https://bugs.freedesktop.org/attachment.cgi?id=1801): + Move xorg version numbers to separate config file (committing the + missing parts from attachment #1188, the diff was approved but the + changes were accidently never commited to "cygwin.cf"... ;-(). + +2005-02-01 Roland Mainz + * xc/programs/xmore/xmore.man + * xc/programs/xmore/xmore.sgml + Bugzilla #2415 (https://bugs.freedesktop.org/show_bug.cgi?id=2415) + attachment #1786 (https://bugs.freedesktop.org/attachment.cgi?id=1786): + Fix formatting problem in the xmore(1x) manual page. + Patch by Matthieu Herrb and Roland Mainz + . + Approved in the 2005-01-31 Xorg release-wranglers phone call (the + xmore.man diff is an automatic update from the DocBook--->man + conversion). + +2005-02-01 Roland Mainz + * xc/programs/xrx/plugin/include/npapi.h + * xc/programs/xrx/xnest-plugin/XnestDis.c + Bugzilla #2386 (https://bugs.freedesktop.org/show_bug.cgi?id=2386) + attachment #1766 (https://bugs.freedesktop.org/attachment.cgi?id=1766): + Fix build bustage on MacOSX/*BSD and AIX platforms (1:1 port of the + build bustage fixes from trunk). + Patch by Dan McNichol and Torrey T. + Lyons . + Approved in the 2005-01-31 Xorg release-wranglers phone call. + +2005-02-01 Roland Mainz + * xc/config/cf/X11.tmpl + Bugzilla #2410 (https://bugs.freedesktop.org/show_bug.cgi?id=2410) + attachment #1782 (https://bugs.freedesktop.org/attachment.cgi?id=1782): + Build the XRX plugin only if the system supports shared libraries + (which is a requirement for this plugin). + Patch by Matthieu Herrb . + Approved in the 2005-01-31 Xorg release-wranglers phone call. + +2005-02-01 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c + Bugzilla #2252 (https://bugs.freedesktop.org/show_bug.cgi?id=2252) + attachment #1791 (https://bugs.freedesktop.org/attachment.cgi?id=1791): + Fix option dontVTSwitch under *BSD, when XKB is disabled. + Patch by Matthieu Herrb . + Approved in the 2005-01-31 Xorg release-wranglers phone call. + +2005-02-01 Roland Mainz + * xc/nls/Compose/pt_BR.UTF-8 + * xc/nls/XLC_LOCALE/pt_BR.UTF-8 + Bugzilla #2400 (https://bugs.freedesktop.org/show_bug.cgi?id=2400) + attachment #1762 (https://bugs.freedesktop.org/attachment.cgi?id=1762): + Fix build bustage caused by broken patch for brazillian locale support + (see Bugzilla #1896). + Patch by Kevin E. Martin . + Approved in the 2005-01-31 Xorg release-wranglers phone call. + +2005-01-25 Roland Mainz + * xc/config/cf/xorgversion.def + Bugzilla #2378 (https://bugs.freedesktop.org/show_bug.cgi?id=2378) + attachment #1747 (https://bugs.freedesktop.org/attachment.cgi?id=1747): + Bump version number for upcoming X11R6.8.2rc3 (release canidate 3) to + X11R6.8.1.903. + +2005-01-24 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_render.c + Bugzilla #1424 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1424) + attachment #1209 (https://bugs.freedesktop.org/attachment.cgi?id=1209): + Fix problems with RENDER extension accerlation on R100 cards (via + pre-rendering small texture). + Patch by Matthias Hopf . + +2005-01-24 Roland Mainz + * xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c + Bugzilla #2322 (https://freedesktop.org/bugzilla/show_bug.cgi?id=2322) + attachment #1709 (https://bugs.freedesktop.org/attachment.cgi?id=1709): + Fix corruption of PCI config BAR1 of native PCI-Express boards + on 64-bit platforms. + Patch by Michael Yaroslavtsev . + +2005-01-24 Roland Mainz + * xc/nls/compose.dir + * xc/nls/locale.dir + * xc/nls/Compose/Imakefile + * xc/nls/Compose/pt_BR.UTF-8 + * xc/nls/XI18N_OBJS/Imakefile + * xc/nls/XI18N_OBJS/pt_BR.UTF-8 + * xc/nls/XLC_LOCALE/Imakefile + * xc/nls/XLC_LOCALE/pt_BR.UTF-8 + * xc/programs/Xserver/XpConfig/Imakefile + Bugzilla #1896 (https://bugs.freedesktop.org/show_bug.cgi?id=1896) + attachment #1675 (https://bugs.freedesktop.org/attachment.cgi?id=1675): + Add support for pt_BR.UTF-8 locale. + Patch by Gustavo Noronha Silva, Branden Robinson, Julien Lafon. + +2005-01-24 Roland Mainz + * xc/lib/font/util/Imakefile + * xc/lib/font/util/utilbitmap.c + Bugzilla #1804 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1804) + attachment #1269 (https://bugs.freedesktop.org/attachment.cgi?id=1269): + Fix build failure (caused by missing symbols such as |TwoByteSwap|) + when linking the FreeType module and the FreeType library both + statically info the Xserver. + +2005-01-24 Roland Mainz + * xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c + Bugzilla #2361 (https://bugs.freedesktop.org/show_bug.cgi?id=2361) + attachment #1739 (https://bugs.freedesktop.org/attachment.cgi?id=1739): + Fix radeon m7 driver lock-ups on glxgears&co. + Patch by Dave Airlie . + +2005-01-24 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c + Bugzilla #2329 (https://bugs.freedesktop.org/show_bug.cgi?id=2329) + attachment #1717 (https://bugs.freedesktop.org/attachment.cgi?id=1717): + Unmap XCursor AGP memory on VT switch to prevent system from lockup. + Patch by Matthias Hopf . + +2005-01-23 Roland Mainz + * xc/config/cf/X11.tmpl + * xc/programs/Imakefile + * xc/programs/xrx/Imakefile + * xc/programs/xrx/plugin/Imakefile + * xc/programs/xrx/plugin/Main.c + * xc/programs/xrx/plugin/PProcess.c + * xc/programs/xrx/xnest-plugin/Imakefile + * xc/programs/xrx/xnest-plugin/NewNDest.c + * xc/programs/xrx/xnest-plugin/SetWin.c + * xc/programs/xrx/xnest-plugin/XnestDis.c + Bugzilla #1372 (https://bugs.freedesktop.org/show_bug.cgi?id=1372) + attachment #932 (https://bugs.freedesktop.org/attachment.cgi?id=932) + and + attachment #1105 (https://bugs.freedesktop.org/attachment.cgi?id=1105) + Repairing XRX/Broadway support. + This patch fixes both the libxrx.so plugin and the Xnest-based + libxrxnest.so plugin and making them compatible to newer versions + of Mozilla and removing the backwards compatibility hacks for old + Netscape3.x versions with statically linked Motif. + +2005-01-23 Roland Mainz + * xc/programs/Xserver/Xprint/spooler.c + Bugzilla #2167 (https://bugs.freedesktop.org/show_bug.cgi?id=2167) + attachment #1641 (https://bugs.freedesktop.org/attachment.cgi?id=1641): + Fix broken Solaris print queue enumeration. + +2005-01-23 Roland Mainz + * xc/programs/Xserver/Xprint/Util.c + * xc/programs/Xserver/Xprint/attributes.c + * xc/programs/Xserver/Xprint/attributes.h + * xc/programs/Xserver/Xprint/ps/Ps.h + Bugzilla #2254 (https://bugs.freedesktop.org/show_bug.cgi?id=2254) + attachment #1654 (https://bugs.freedesktop.org/attachment.cgi?id=1654) + and + attachment #1659 (https://bugs.freedesktop.org/attachment.cgi?id=1659) + Fix for gcc4.0 build failure (including removing |ExecCommand()| - + the function has no consumer and can safely be removed). + Patch by Egbert Eich and Roland Mainz + . + +2005-01-23 Roland Mainz + * xc/programs/Xserver/Xprint/etc/init.d/xprint.cpp + Bugzilla #2240 (https://bugs.freedesktop.org/show_bug.cgi?id=2240) + attachment #1642 (https://bugs.freedesktop.org/attachment.cgi?id=1642): + Fix incorrect usage of /usr/bin/tr in startup script (the used + "[\n]" is neither correct or portable, using "\n" seems to be + sufficient (this fixes various "random" issues, including + including Debian bug #258419 and Debian bug #264983). + Patch by Drew Parsons . + +2005-01-23 Roland Mainz + * xc/config/cf/xorg.cf + Bugzilla #2264 (https://bugs.freedesktop.org/show_bug.cgi?id=2264) + attachment #1665 (https://bugs.freedesktop.org/attachment.cgi?id=1665): + - Don't build tdfx DRI driver on any platform but x86 and AXP + as therequired Glide3 lib is only available there (if at all). + - Readability fixes. + Patch by Egbert Eich . + +2005-01-23 Roland Mainz + * xc/config/cf/xorg.cf + Bugzilla #2215 (https://bugs.freedesktop.org/show_bug.cgi?id=2215) + attachment #1658 (https://bugs.freedesktop.org/attachment.cgi?id=1658): + Add i810 driver for AMD64. + Patch by Kristian Høgsberg . + +2005-01-23 Roland Mainz + * xc/config/cf/xorg.cf + Bugzilla #2215 (https://bugs.freedesktop.org/show_bug.cgi?id=2215) + attachment #1629 (https://bugs.freedesktop.org/attachment.cgi?id=1629): + Cleanup and enhancements in xc/config/cf/xorg.cf + Patch by Egbert Eich . + +2005-01-23 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/chips/chips.man + Bugzilla #2261 (https://bugs.freedesktop.org/show_bug.cgi?id=2261) + attachment #1666 (https://bugs.freedesktop.org/attachment.cgi?id=1666): + Update manual page to explain the FpMode option. + Patch by Egbert Eich . + +2005-01-12 Roland Mainz + * xc/config/cf/xorgversion.def + Bugzilla #2272 (https://bugs.freedesktop.org/show_bug.cgi?id=2272) + attachment #1672 (https://bugs.freedesktop.org/attachment.cgi?id=1672): + Bump version number for upcoming X11R6.8.2rc2 (release canidate 2) to + X11R6.8.1.902. + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xwin/ChangeLog + * xc/programs/Xserver/hw/xwin/winkeybd.h + * xc/programs/Xserver/hw/xwin/winkeyhook.c + * xc/programs/Xserver/hw/xwin/winmultiwindowclass.c + * xc/programs/Xserver/hw/xwin/winmultiwindowwindow.c + * xc/programs/Xserver/hw/xwin/winmultiwindowwm.c + * xc/programs/Xserver/hw/xwin/winwndproc.c + Bugzilla #1831 (https://bugs.freedesktop.org/show_bug.cgi?id=1831) + attachment #1656 (https://bugs.freedesktop.org/attachment.cgi?id=1656): + CGYWIN update, including the following fixes: + - Make keyhook feature work in multiwindowmode too + - Hook windows keys + - Fix crash with non-nullterminated strings (reported by Øyvind Harboe) + - From Bug #1945: Stop unnecessary reordering. + Patch by Alexander Gottwald and Kensuke Matsuzaki. + +2005-01-12 Roland Mainz + * xc/config/cf/sun.cf + * xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile + * xc/programs/Xserver/hw/xfree86/os-support/sunos/solaris-sparcv8plus.S + Bugzilla #2096 (https://bugs.freedesktop.org/show_bug.cgi?id=2096) + attachment #1565 (https://bugs.freedesktop.org/attachment.cgi?id=1565): + Fix Solaris/SPARC build failure caused by missing assembler code + for this platform. + Patch by Alan Coopersmith + +2005-01-12 Roland Mainz + * xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c + * xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c + * xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c + Bugzilla #2110 (https://bugs.freedesktop.org/show_bug.cgi?id=2110) + attachment #1569 (https://bugs.freedesktop.org/attachment.cgi?id=1569): + Fix build bustage in MESA/DRI code with gcc 2.96. + Patch by Kevin E. Martin + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/common/compiler.h + Bugzilla #2114 (https://bugs.freedesktop.org/show_bug.cgi?id=2114) + attachment #1576 (https://bugs.freedesktop.org/attachment.cgi?id=1576): + Fix build bustage on PPC64 with Linux 2.6.x kernel headers, + use system definition of |eieio()|. + Originally Gentoo bug #66223. + Patch by Tim Yamin and Donnie Berkholz + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/ddc/edid.h + Bugzilla #1490 (https://bugs.freedesktop.org/show_bug.cgi?id=1490) + attachment #1576 (https://bugs.freedesktop.org/attachment.cgi?id=1576): + Refix for previous patch (updating to EDID 1.3), this syncs the + X11R6.8.x stable branch with todays Xorg trunk. + Patch by Jay Cotton , Alan Coopersmith + and Egbert Eich . + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c: + Bugzilla #2189 (https://bugs.freedesktop.org/show_bug.cgi?id=2189) + attachment #1610 (https://bugs.freedesktop.org/attachment.cgi?id=1610): + Fix formatting of XtNextEvent manual page. + Patch by Matthieu Herrb + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c: + Bugzilla #1488 (https://bugs.freedesktop.org/show_bug.cgi?id=1488) + attachment #1607 (https://bugs.freedesktop.org/attachment.cgi?id=1607): + Fix crash on i830 during startup. + Patch by Eric Anholt + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c: + Bugzilla #2252 (https://bugs.freedesktop.org/show_bug.cgi?id=2252) + attachment #1653 (https://bugs.freedesktop.org/attachment.cgi?id=1653): + Make option 'DontVTSwitch' work again with kbd driver + under Linux. + The kbd driver now calls the OS layer to handle special + keys. Possibly other special keys and other OSes need to + be looked at also. + Patch by Egbert Eich . + +2005-01-12 Roland Mainz + * xc/programs/xterm/INSTALL + * xc/programs/xterm/MANIFEST + * xc/programs/xterm/Makefile.in + * xc/programs/xterm/Tekproc.c + * xc/programs/xterm/VTPrsTbl.c + * xc/programs/xterm/VTparse.def + * xc/programs/xterm/VTparse.h + * xc/programs/xterm/XTerm.ad + * xc/programs/xterm/aclocal.m4 + * xc/programs/xterm/button.c + * xc/programs/xterm/charclass.c + * xc/programs/xterm/charproc.c + * xc/programs/xterm/configure + * xc/programs/xterm/configure.in + * xc/programs/xterm/ctlseqs.ms + * xc/programs/xterm/cursor.c + * xc/programs/xterm/doublechr.c + * xc/programs/xterm/fontutils.c + * xc/programs/xterm/fontutils.h + * xc/programs/xterm/input.c + * xc/programs/xterm/main.c + * xc/programs/xterm/main.h + * xc/programs/xterm/menu.c + * xc/programs/xterm/menu.h + * xc/programs/xterm/misc.c + * xc/programs/xterm/os2main.c + * xc/programs/xterm/plink.sh + * xc/programs/xterm/precompose.c + * xc/programs/xterm/print.c + * xc/programs/xterm/ptyx.h + * xc/programs/xterm/resize.c + * xc/programs/xterm/screen.c + * xc/programs/xterm/scrollbar.c + * xc/programs/xterm/testxmc.c + * xc/programs/xterm/trace.c + * xc/programs/xterm/util.c + * xc/programs/xterm/uxterm + * xc/programs/xterm/version.h + * xc/programs/xterm/xstrings.c + * xc/programs/xterm/xterm.h + * xc/programs/xterm/xterm.log.html + * xc/programs/xterm/xterm.man + * xc/programs/xterm/xterm_io.h + * xc/programs/xterm/xtermcfg.hin + * xc/programs/xterm/unicode/README + * xc/programs/xterm/unicode/make-precompose.sh + * xc/programs/xterm/unicode/precompose.c.head + Bugzilla #1979 (https://bugs.freedesktop.org/show_bug.cgi?id=1979) + attachment #1639 (https://bugs.freedesktop.org/attachment.cgi?id=1639): + Update xterm from version #196 to version #197: + - modify configure script to remove empty "-DPROJECTROOT=" + definition which resulted unusable values for luit's default path. + - update precompose.c based on Unicode 4.0.1 + - several minor fixes based on Intel compiler warnings. + - change default translations so a BtnDown which is not recognized + is simply ignored rather than emitting a bell. That makes it less + obtrusive when the user tries to use a mouse which provides more + capabilities than the X mouse driver supports, e.g., one with a + horizontal scroll wheel (Debian #265133). + - note in xterm's manpage that translations is not specific to xterm + (Debian #278897). + - modify uxterm script to use locale program to verify if the + derived locale is installed (Debian #246398). + - correct font handling for active icon when in UTF-8 mode (report + by Paolo Liberatore). + - make active-icon and toolbar configurations work together. + - modify the criteria for disowning primary selection. Previously, + this happened anytime the cursor was moved before the end of the + selection. That would ensure that any insert/delete of char or + line, as well as scrolling, would disown the selection. The new + criteria change this to checking if the operations would modify + the data which is highlighted (Debian #277832). + - reimplement DECALN with functions for vt420 rectangles, fixes + selection for this case. + - implement vt420 rectangle operations. + - add parsing, for debug/test of vt220 soft-fonts. + - add menu entry, actions and escape sequence to allow + enabling/disabling toolbars at runtime. + - improve rendering for Xft, allow it to draw non-linedrawing + characters such as "pi", which were drawn from internal tables + with patch #180 (Freedesktop.org Bugzilla #1260). + - add configure option --enable-mini-luit, ifdef'd the mini-luit + feature with OPT_MINI_LUIT. + - add mini-luit feature, which supports Latin9 directly rather than + via luit, provided that Unicode fonts are used (Freedesktop.org + Bugzilla #1571, request by Stefan Dirsch, patch by Michael + Schroeder). + - for Linux, if IUTF8 is defined, e.g., on recent 2.6.x kernels, set + the corresponding flag for the slave pty, to enable UTF-8 + interpretation of backspace in cooked mode (Freedesktop.org + Bugzilla #1578, request by Stefan Dirsch). + - modify faceSize resource to use a floating-point internal value + (adapted from patch by Sam Stephenson). + - correct handling selection of tabs over cleared space in UTF-8 + mode. In this special case, xterm represents the whitespace with a + null rather than a space character (Debian #276447). + - amend fix for infinite loop from patch #192 to check if there + is wrapped text to output in a following iteration (Debian + #273202). + - fixes ifdef'd with __INTERIX to allow building with Interix + (Windows Services for UNIX) 3.5 using the xlibs libraries from + freedesktop.org (patch by Min Sik Kim). + - amend solution for Debian #252873, #260471 from patch #194 by + making the cursor not explicitly colored if only the foreground + color is set, and the cursor is on a blank space (Debian #275473). + - correct logic for send/receive mode (SRM) with regard to control + characters. + - fix masking of invisible text in wide-character mode, which did + not work for line-drawing characters. + - incorporate CF_XOPEN_SOURCE into configure script, replacing + CF_GNU_SOURCE. + Patch by Thomas Dickey . + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c: + Bugzilla #2211 (https://bugs.freedesktop.org/show_bug.cgi?id=2211) + attachment #1627 (https://bugs.freedesktop.org/attachment.cgi?id=1627): + xorgconfig default keyboard model outdated (should be pc105, + not pc101/pc102). + Patch by Alan Coopersmith + +2005-01-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/xf86config/xorgconfig.c + Bugzilla #2206 (https://bugs.freedesktop.org/show_bug.cgi?id=2206) + attachment #1622 (https://bugs.freedesktop.org/attachment.cgi?id=1622): + Fix missing return value in xf86config. + Patch by Egbert Eich . + +2005-01-12 Roland Mainz + * xc/include/Xos.h + * xc/include/Xthreads.h + Bugzilla #2207 (https://bugs.freedesktop.org/show_bug.cgi?id=2207) + attachment #1623 (https://bugs.freedesktop.org/attachment.cgi?id=1623): + Replace usag of CPP symbol "linux" with "__linux__" to get the build + working with gcc4.0 again. + Patch by Egbert Eich . + +2005-01-12 Roland Mainz + * xc/programs/Xserver/Xprint/attributes.c + Bugzilla #2205 (https://bugs.freedesktop.org/show_bug.cgi?id=2205) + attachment #1621 (https://bugs.freedesktop.org/attachment.cgi?id=1621): + Fix missing return value in Xprint's resource handling. + Patch by Egbert Eich . + +2004-12-16 Roland Mainz + * xc/config/cf/xorgversion.def + Bugzilla #2086 (https://bugs.freedesktop.org/show_bug.cgi?id=2086) + attachment #1557 (https://bugs.freedesktop.org/attachment.cgi?id=1557): + Bump version number for upcoming X11R6.8.2rc1 (release canidate 1) to + X11R6.8.1.901. + +2004-12-16 Roland Mainz + * xc/programs/Xserver/hw/xfree86/common/xf86Init.c + Bugzilla #2086 (https://bugs.freedesktop.org/show_bug.cgi?id=2086) + attachment #1556 (https://bugs.freedesktop.org/attachment.cgi?id=1556): + Fix problems with printing the release candidate version + number for point releases. + Patch by Kevin E. Martin + +2004-12-16 Roland Mainz + * xc/programs/Xserver/hw/xfree86/ddc/edid.h + * xc/programs/Xserver/hw/xfree86/ddc/interpret_edid.c + * xc/programs/Xserver/hw/xfree86/ddc/print_edid.c + Bugzilla #1490 (https://bugs.freedesktop.org/show_bug.cgi?id=1490) + attachment #1122 (https://bugs.freedesktop.org/attachment.cgi?id=1122): + Updating to EDID 1.3. + Patch by Jay Cotton and Egbert Eich + . + +2004-12-16 Roland Mainz + * xc/lib/Xpm/Imakefile + * xc/extras/Xpm/lib/Attrib.c + * xc/extras/Xpm/lib/CrBufFrI.c + * xc/extras/Xpm/lib/CrDatFrI.c + * xc/extras/Xpm/lib/RdFToBuf.c + * xc/extras/Xpm/lib/RdFToI.c + * xc/extras/Xpm/lib/WrFFrBuf.c + * xc/extras/Xpm/lib/WrFFrI.c + * xc/extras/Xpm/lib/XpmI.h + * xc/extras/Xpm/lib/create.c + * xc/extras/Xpm/lib/data.c + * xc/extras/Xpm/lib/hashtab.c + * xc/extras/Xpm/lib/misc.c + * xc/extras/Xpm/lib/parse.c + * xc/extras/Xpm/lib/scan.c + Bugzilla #1920 (https://bugs.freedesktop.org/show_bug.cgi?id=1920) + attachment #1514 (https://bugs.freedesktop.org/attachment.cgi?id=1514): + libXpm security fixes for CAN-2004-0914. + Patch by Thomas Biege. + +2004-12-16 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c + Bugzilla #1383 (https://bugs.freedesktop.org/show_bug.cgi?id=1383) + attachment #902 (https://bugs.freedesktop.org/attachment.cgi?id=902): + Fix typo in PCI code for Intel 460gx in X server, which causes a SEGV. + Patch by H.J.Lu + +2004-12-16 Roland Mainz + * xc/programs/Xserver/fb/fbwindow.c + * xc/programs/Xserver/hw/xfree86/xaa/xaaWrapper.c + * xc/programs/Xserver/mi/micmap.c + Bugzilla #1912 (https://bugs.freedesktop.org/show_bug.cgi?id=1220) + attachment #980 (https://bugs.freedesktop.org/attachment.cgi?id=980): + Fix (scrolling) performance problems caused by PseudoColor emulation layer. + Patch by Egbert Eich + +2004-12-16 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c + Bugzilla #1912 (https://bugs.freedesktop.org/show_bug.cgi?id=1220) + attachment #980 (https://bugs.freedesktop.org/attachment.cgi?id=980): + Fix garbage screen on radeon cards which may appear after a system + suspend/resume cycle. + Patch by Matthias Hopf + +2004-12-16 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_reg.h + Bugzilla #1912 (https://bugs.freedesktop.org/show_bug.cgi?id=1912) + attachment #1433 (https://bugs.freedesktop.org/attachment.cgi?id=1433): + Fix hard lockup on Radeon 7000 + SMP due dynamic clock. + Patch by Alex Deucher . + +2004-12-16 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c: + Bugzilla #1890 (https://bugs.freedesktop.org/show_bug.cgi?id=1890) + attachment #1331 (https://bugs.freedesktop.org/attachment.cgi?id=1331): + Apply Debian patch to re-POST via VBE if driver thinks it has no + video memory (a symptom of incompletely coming up from D3 power + state), which fixes some Dell laptops + This enables resume from suspend level S3 by asking the Radeon chip if it + thinks it has no memory. If so, the card is re-POSTed via the int10 + interface. Reportedly enables the driver to work for this type of + suspend/resume cycle on Dell D600 laptops (Dell D800s as well, if the video + BIOS is patched to 4.28.20.31.C1 or later). See Debian Bug #234575. + This patch by Emmanuel Thome and Ole Rohne. + +2004-12-15 Roland Mainz + * xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c + Bugzilla #1651 (https://bugs.freedesktop.org/show_bug.cgi?id=1651) + attachment #1484 (https://bugs.freedesktop.org/attachment.cgi?id=1484): + - set default XkbModel to pc105 (like legacy keyboard driver did) + - fix autorepeat + Patch by Matthieu Herrb and Petter Urkedal + +2004-12-15 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c + Bugzilla #1881 (https://bugs.freedesktop.org/show_bug.cgi?id=1881) + attachment #1322 (https://bugs.freedesktop.org/attachment.cgi?id=1322): + Fix typo in radeon driver + Patch by Daniel Stone + +2004-12-15 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c + Bugzilla #1559 (https://bugs.freedesktop.org/show_bug.cgi?id=1559) + attachment #1133 (https://bugs.freedesktop.org/attachment.cgi?id=1133): + Fix display detection regression on Radeon Mobile. + Patch by HUI YU + +2004-12-15 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c + Bugzilla #1306 (https://bugs.freedesktop.org/show_bug.cgi?id=1306) + attachment #1292 (https://bugs.freedesktop.org/attachment.cgi?id=1292): + + This patch should work around the panel timing params not being initialized. + Here's the problem: + + Previously, the PanelXRes and PanelYRes were either read from the BIOS or were + left as 0 (if no BIOS was detected). Then, in RADEONUpdatePanelSize(), the max + panel size was found and the timing parameters were initialized, which worked + fine for this ppc system. + + Now, the PanelXRes and PanelYRes are either read from the BIOS or are read from + the registers. Note that the other timing parameters (in particular the + DotClock) are not initialized when reading from the registers. Then, when + RADEONUpdatePanelSize() is called, the max panel size is already set, so none + of the other timing parameters are initialized here either (or anywhere else + for that matter), which appears to be why the new code fails for this ppc + system. + + The patch changes the test from < to <= in RADEONUpdatePanelSize() and then + tests to make sure that only the first set of timings for the panel size read + from the registers will be used -- this mimics the way the previous code + worked. The only problem with this code occurs when the registers hold invalid + panel size params, which do not match any of the monitor's DDC info. This + should never happen; however, if it does, then the only solution in this case + is to explicitly set the panel size in the config file. + + Patch by Kevin E. Martin + +2004-12-15 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c + Bugzilla #1306 (https://bugs.freedesktop.org/show_bug.cgi?id=1306) + attachment #1291 (https://bugs.freedesktop.org/attachment.cgi?id=1291): + Fix SEGV in "radeon" driver. + Patch by Kevin E. Martin + +2004-12-15 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h + Bugzilla #1985 (https://bugs.freedesktop.org/show_bug.cgi?id=1985) + attachment #1504 (https://bugs.freedesktop.org/attachment.cgi?id=1504) + sync to 12/08/04 version of Nvidia driver from Mark Vojkovich, + including these fixes since last sync: + Fix some DAC/Graphics memory contention issues on newer + NVIDIA chips (specifically, NV40). + More PCI IDs. + Also, I've had trouble getting some panels to work + automagically so I expose an FPTweak option to let the user + adjust a troublesome register. + +2004-12-15 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx1_video.c + * xc/programs/Xserver/hw/xfree86/drivers/nsc/nsc_gx2_video.c + Bug #1937 (https://bugs.freedesktop.org/show_bug.cgi?id=1937) + attachment #1396 (https://bugs.freedesktop.org/attachment.cgi?id=1396): + XV support doesn't depend on 2D acceleration any more. This patch + removes this limitation from the NSC driver. This is a patch that + I have committed to XFree86 a while ago but never ported over to + X.Org. + Patch by Egbert Eich and Matthieu + Herrb + +2004-12-15 Alexander Gottwald + * xc/programs/Xserver/Imakefile + * xc/programs/Xserver/hw/xwin/ChangeLog + * xc/programs/Xserver/hw/xwin/Imakefile + * xc/programs/Xserver/hw/xwin/InitOutput.c + * xc/programs/Xserver/hw/xwin/XWin.rc + * xc/programs/Xserver/hw/xwin/win.h + * xc/programs/Xserver/hw/xwin/winclipboardthread.c + * xc/programs/Xserver/hw/xwin/winclipboardwndproc.c + * xc/programs/Xserver/hw/xwin/winclipboardxevents.c + * xc/programs/Xserver/hw/xwin/winconfig.c + * xc/programs/Xserver/hw/xwin/wincreatewnd.c + * xc/programs/Xserver/hw/xwin/winmessages.h + * xc/programs/Xserver/hw/xwin/winmouse.c + * xc/programs/Xserver/hw/xwin/winmultiwindowwm.c + * xc/programs/Xserver/hw/xwin/winmultiwindowwndproc.c + * xc/programs/Xserver/hw/xwin/winprocarg.c + * xc/programs/Xserver/hw/xwin/winresource.h + * xc/programs/Xserver/hw/xwin/winshadddnl.c + * xc/programs/Xserver/hw/xwin/winwin32rootlesswndproc.c + * xc/programs/Xserver/hw/xwin/winwndproc.c + Bug #1831 (https://bugs.freedesktop.org/show_bug.cgi?id=1831) + attachment #1547 (https://bugs.freedesktop.org/attachment.cgi?id=1547) + attachment #1548 (https://bugs.freedesktop.org/attachment.cgi?id=1548): + Cygwin/X patches since 6.8.1, including: + - Support for placing the mainwindow by coordinates and monitor + - Setting default cursor in multiwindow mode + - Added keyboardlayout "French (Switzerland)" + - Fixed crashes after switching videomodes + - Added support for reading the fontpath from /etc/X11/font-dirs + - Make -multiplemonitors for multiwindow modes + - Added support for mice with more than 3 buttons + - Fixed another clipboard bug with Unicode applications + +2004-12-15 Egbert Eich + + * programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.c: + (xorgProbe460GX), (xf86PreScan460GX): + * programs/Xserver/hw/xfree86/os-support/bus/460gxPCI.h: + * programs/Xserver/hw/xfree86/os-support/bus/Imakefile: + * programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.c: + (xorgProbeE8870), (xf86PreScanE8870): + * programs/Xserver/hw/xfree86/os-support/bus/e8870PCI.h: + * programs/Xserver/hw/xfree86/os-support/bus/ia64Pci.c: + * programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.c: + (xf86PreScanZX1): + * programs/Xserver/hw/xfree86/os-support/bus/zx1PCI.h: + * programs/Xserver/hw/xfree86/os-support/linux/Imakefile: + * programs/Xserver/hw/xfree86/os-support/linux/lnx_ia64.c: + (OS_PROBE_PCI_CHIPSET): + * programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.c: + (ia64ScanPCIWrapper): + * programs/Xserver/hw/xfree86/os-support/shared/ia64Pci.h: + Adding support for OS dependent probing of IA64 chipsets. + Not all IA64 chipsets can be probed without OS support as + probing them is only possible using ACPI. One example of + this are the HP ZX1/2 chipsets: previously the code assumed + that these chips were present when no other of the known + chipsets could be probed. This assumption brought SGI Altrix + machines with 64 CPUs to a grinding halt. + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/i810/common.h + * xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h + * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c + * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c + * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c + * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c + * xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h + * xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h + * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c + * xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c + Bug #1944 (https://bugs.freedesktop.org/show_bug.cgi?id=1944) + attachment #1403 (https://bugs.freedesktop.org/attachment.cgi?id=1403): + Various I8xx driver fixes, including: + - Fixed server crash on reset when a structure allocated in + PreInit() was freed on CloseScreen(). + - Fixed ring buffer lock ups that happened because the structure + that contained ringbuffer data was not zeroed after allocation. + - Fixed numerous warnings due to signed unsigned comparisons. + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c: + Bug #1889 (https://bugs.freedesktop.org/show_bug.cgi?id=1889) + attachment #1330 (https://bugs.freedesktop.org/attachment.cgi?id=1330): + Retry CCE idle commands until the (higher) timeout is reached, and + properly stop the engine if we totally fail -- gets rid of serious + performance issues and lockups with r128 DRI (see also Debian bug + reports #223089, #236187, #236373, #243436). + Patch by Daniel Jacobowitz. + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c + * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_video.c + Bug #1888 (https://bugs.freedesktop.org/show_bug.cgi?id=1888) + attachment #1329 (https://bugs.freedesktop.org/attachment.cgi?id=1329): + Allow pitches with a granularity of 32, rather than 64, because some + clamshell iBooks have 800-byte pitches. Change Xv allocation + granularity to 8 bytes, rather than 16 bytes, also (see Debian + #148775). + Patch by Branden Robinson and Dagfinn Ilmari Mannsåker. + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/r128_dri.c + Bug #1886 (https://bugs.freedesktop.org/show_bug.cgi?id=1886) + attachment #1327 (https://bugs.freedesktop.org/attachment.cgi?id=1327): + Disable interrupt handling after the DRM handler has been removed, + preventing lockups. + Patch by Daniel Stone + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile + * xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c + Bug #1962 (https://bugs.freedesktop.org/show_bug.cgi?id=1962) + attachment #1423 (https://bugs.freedesktop.org/attachment.cgi?id=1423): + Avoid PIO access on IA64. Some IA64 machine check if legacy ports + outside the VGA range are accessed. The ATi driver however does + this to probe for ISA Mach8/32/64. + Since no IA64 has ISA slots this restriction should not be + relevant to the user. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c + Bug #1928 (https://bugs.freedesktop.org/show_bug.cgi?id=1928) + attachment #1387 (https://bugs.freedesktop.org/attachment.cgi?id=1387): + Added some early bailouts to atiprobe if PCI structure pointer is + NULL to prevent sig11. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/drivers/ati/atipreinit.c + * xc/programs/Xserver/hw/xfree86/drivers/ati/ativga.c + Bug #591 (https://bugs.freedesktop.org/show_bug.cgi?id=591) + attachment #308 (https://bugs.freedesktop.org/attachment.cgi?id=308): + Fix video timing problems with Sony PCG-C1VN Vaio Picturebook notebook + && co. + Patch by Marc Aurele La France + +2004-12-14 Roland Mainz + * xc/doc/man/general/Imakefile + * xc/doc/man/general/Xprint.html + * xc/doc/man/general/Xprint.man + * xc/doc/man/general/Xprint.sgml + * xc/programs/Xserver/Xprint/Imakefile + * xc/programs/Xserver/Xprint/Xprint.html + * xc/programs/Xserver/Xprint/Xprint.man + * xc/programs/Xserver/Xprint/Xprint.sgml + * xc/programs/Xserver/Xprint/Xprt.html + * xc/programs/Xserver/Xprint/Xprt.man + * xc/programs/Xserver/Xprint/Xprt.sgml + Bug #811 (https://bugs.freedesktop.org/show_bug.cgi?id=811) + attachment #1374 (https://bugs.freedesktop.org/attachment.cgi?id=1374), + attachment #1379 (https://bugs.freedesktop.org/attachment.cgi?id=1379), + attachment #1431 (https://bugs.freedesktop.org/attachment.cgi?id=1431): + Add the missing manual page for the Xprt server (and move the Xprint(7) + to it's correct location). + Authors: Alan Coopersmith, Giuseppe Ghibò, Thomas Gilg, Jay Hobson, + Julien Lafon, Masaki Katakai, Roland Mainz, Simon Montagu, Drew Parsons. + +2004-12-14 Roland Mainz + * xc/doc/man/X11/XGetWProp.man + Bug #2056 (https://bugs.freedesktop.org/show_bug.cgi?id=2056) + attachment #1515 (https://bugs.freedesktop.org/attachment.cgi?id=1515): + Fix the missing XChangeProperty() prototype in man page's + synopsis section. + Patch by Matthieu Herrb + +2004-12-14 Roland Mainz + * xc/config/docbook/docbookconv.sh + * xc/doc/hardcopy/XPRINT/Xprint_FAQ.html + * xc/doc/hardcopy/XPRINT/Xprint_FAQ.txt + * xc/doc/hardcopy/XPRINT/Xprint_FAQ.xml + * xc/programs/Xserver/Xprint/Xprint.html + * xc/programs/Xserver/Xprint/Xprint.man + * xc/programs/Xserver/Xprint/Xprint.sgml + * xc/programs/xlsfonts/xlsfonts.man + * xc/programs/xlsfonts/xlsfonts.sgml + * xc/programs/xphelloworld/xphelloworld/xphelloworld.html + * xc/programs/xphelloworld/xphelloworld/xphelloworld.man + * xc/programs/xphelloworld/xphelloworld/xphelloworld.sgml + * xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.html + * xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.man + * xc/programs/xphelloworld/xpsimplehelloworld/xpsimplehelloworld.sgml + * xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.html + * xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.man + * xc/programs/xphelloworld/xpxmhelloworld/xpxmhelloworld.sgml + * xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.html + * xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.man + * xc/programs/xphelloworld/xpxthelloworld/xpxthelloworld.sgml + * xc/programs/xplsprinters/xplsprinters.html + * xc/programs/xplsprinters/xplsprinters.man + * xc/programs/xplsprinters/xplsprinters.sgml + * xc/programs/xprehashprinterlist/xprehashprinterlist.man + * xc/programs/xprehashprinterlist/xprehashprinterlist.sgml + Bugzilla #1557 (https://bugs.freedesktop.org/show_bug.cgi?id=1557) + attachment #1032 (https://bugs.freedesktop.org/attachment.cgi?id=1391): + Update DocBook SGML+XML manual pages and docmentation + and the in-tree copies of the generated files (*.man, *.html) to + get them properly working with newer versions of the tools within the + Xorg tree. + Patch by Roland Mainz, Drew Parsons, Julien Lafon, Giuseppe Ghibò + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/doc/sgml/BUILD.sgml + Bug #1932 (https://bugs.freedesktop.org/show_bug.cgi?id=1932) + attachment #1391 (https://bugs.freedesktop.org/attachment.cgi?id=1391 + with typo fixed): + Added explanation for DESTDIR to install to a different directory + than /. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/sunos/Imakefile: + Bug #1987 (https://bugs.freedesktop.org/show_bug.cgi?id=1987) + attachment #1462 (https://bugs.freedesktop.org/attachment.cgi?id=1462): + HAVE_SYSV_IPC should be defined when building libc_wrapper.c on + Solaris/SVR4Architecture (otherwise some drivers like those from + Nvidia may not work). + Patch by Alan Coopersmith + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c + Bug #1965 (https://bugs.freedesktop.org/show_bug.cgi?id=1965) + attachment #1425 (https://bugs.freedesktop.org/attachment.cgi?id=1425): + Avoid recursive calls of xf86scanpci(). This function normally + detects that it has been called before by checking if the PCI + structure is filled out. So far if this was not the case + (because PCI probing has failed for some reason) the function + is traversed again. With the chipset specific PCI bus probing + this can lead to an endless recursive loop as the post-probing + code calls xf86scanpci() from within this function. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c + Bug #1963 (https://bugs.freedesktop.org/show_bug.cgi?id=1963) + attachment #1424 (https://bugs.freedesktop.org/attachment.cgi?id=1424): + The OS specific PCI code for Linux worked only if bus 0 + was populated as it checked for the presence of /proc/bus/pci/00. + Fixed to check for /proc/bus/pci/ instead. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/common/xf86Events.c + * xc/programs/Xserver/hw/xfree86/common/xf86Init.c + Bug #1933 (https://bugs.freedesktop.org/show_bug.cgi?id=1933) + attachment #1392 (https://bugs.freedesktop.org/attachment.cgi?id=1392): + Improving DPMS handling on VT swich and server + termination/abort: previous version called the driver directly and + too late. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/common/xf86Configure.c + Bug #1931 (https://bugs.freedesktop.org/show_bug.cgi?id=1931) + attachment #1390 (https://bugs.freedesktop.org/attachment.cgi?id=1390): + Removing unused DDC sections that caused misinterpretation of + DDC data due to a missing break statement in a switch. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c + Bug #1927 (https://bugs.freedesktop.org/show_bug.cgi?id=1927) + attachment #1386 (https://bugs.freedesktop.org/attachment.cgi?id=1386): + Fixed typo in |ix86PciSelectCfgmech()|: #if <-> #ifdef. + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/Xserver/Xext/xf86vmode.c + Bug #1552 (https://bugs.freedesktop.org/show_bug.cgi?id=1552) + attachment #1026 (https://bugs.freedesktop.org/attachment.cgi?id=1026): + + Currently, when a screensaver kicks in, it calls xf86GetModeLine() + which causes the Vidmode extension to write out a debugging log + message of what the current modeline is. These messages are + generally only useful to an X11 developer who is debugging the + extension itself, or to an application developer who is developing + an application which uses the vidmode extension to get/set the video + mode, however they're not very useful for end users. + + The current default Xvidmode verbosity causes the X server to write + overly detailed video modeline information to the X server log file + whenever any application uses the extension to get, set, or delete + modelines. This causes a problem for laptop users on battery power + with their hard disks set to power saving mode, because the hard disk + will power down, then later the screensaver kicks in, which calls + xf86GetModeLine(), which causes the log message to get written out, + which causes the hard disk to be powered back up. + + Having these messages off by default solves this problem for laptop + users, and seems to make the most sense considering how useful they + are in general. + By changing the default log level for these messages, developers + who need to see these for debugging purposes can increase their X + server verbosity level and still see them, so no functionality is lost. + + This patch lowers the default verbosity of the X server's Xvidmode + extension log file messages, in order to stop Xvidmode from writing + out non-critical log messages to the X server log whenever an + application uses this extension. + + Patch by Mike A. Harris + +2004-12-14 Roland Mainz + * xc/config/cf/X11.tmpl + * xc/config/cf/cygwin.cf + * xc/config/cf/darwin.cf + * xc/programs/Xserver/dix/Imakefile + * xc/programs/Xserver/miext/damage/Imakefile + Bug #1816 (https://bugs.freedesktop.org/show_bug.cgi?id=1816) + attachment #1300 (https://bugs.freedesktop.org/attachment.cgi?id=1300): + Add BuildRootless Imake variable and ROOTLESS define. + Patch by Torrey T. Lyons + +2004-12-14 Roland Mainz + * xc/config/cf/cygwin.cf + * xc/config/cf/xorg.cf + * xc/config/cf/xorgversion.def + * xc/config/cf/Imakefile + Bug #1393 (https://bugs.freedesktop.org/show_bug.cgi?id=1393) + attachment #1188 (https://bugs.freedesktop.org/attachment.cgi?id=1188): + Move xorg version numbers to separate config file + (xc/config/cf/xorgversion.def). + Patch by Alexander Gottwald + +2004-12-14 Roland Mainz + * xc/lib/GL/mesa/drivers/osmesa/Imakefile + Bugzilla #1743 (https://bugs.freedesktop.org/show_bug.cgi?id=1743) + attachment #1196 (https://bugs.freedesktop.org/attachment.cgi?id=1196): + Fix build failure on Solaris due "ld: fatal: + too many symbols require `small' PIC references" via adding + |#define LargePICTable YES| to the Imakefile. + +2004-12-14 Roland Mainz + * xc/programs/Xserver/hw/xfree86/xf86cfg/interface.c + Bug #1826 (https://bugs.freedesktop.org/show_bug.cgi?id=1826) + attachment #1283 (https://bugs.freedesktop.org/attachment.cgi?id=1283): + Do not add '-4' to generated default file name (e.g. "xorg.conf" + instead of "xorg.conf-4"). + Patch by Matthieu Herrb + +2004-12-14 Roland Mainz + * xc/programs/xkbcomp/symbols/inet + Bug #1935 (https://bugs.freedesktop.org/show_bug.cgi?id=1935) + attachment #1394 (https://bugs.freedesktop.org/attachment.cgi?id=1394): + Changed comment in xkbcomp/symbols/inet to mention xorg (instead of + Xfree86). + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/xkbcomp/rules/Imakefile + Bug #1929 (https://bugs.freedesktop.org/show_bug.cgi?id=1929) + attachment #1388 (https://bugs.freedesktop.org/attachment.cgi?id=1388): + Create missing links for backward compatibility to XFree86 + Patch by Stefan Dirsch . + +2004-12-14 Roland Mainz + * xc/programs/xkbcomp/symbols/macintosh/us + Bug #1872 (https://bugs.freedesktop.org/show_bug.cgi?id=1872) + attachment #1315 (https://bugs.freedesktop.org/attachment.cgi?id=1315): + Include srvrv_ctrl(xfree86) in macintosh US XKB symbol file so VT + switching works again on mac. + Patch by Kristian Høgsberg + +2004-12-14 Roland Mainz + * xc/programs/xdm/resource.c + Bug #1825 (https://bugs.freedesktop.org/show_bug.cgi?id=1825) + attachment #1282 (https://bugs.freedesktop.org/attachment.cgi?id=1282): + Fix typo in prngdSocket resource name in xdm/resource.c. + Patch by Matthieu Herrb + +2004-12-14 Adam Jackson + * xc/extras/Mesa/: + Bug #2003 (https://bugs.freedesktop.org/show_bug.cgi?id=2003): + Merge Mesa 6.2.1. + * lib/GL/mesa/drivers/dri/r128/Imakefile.inc: + Fix Imakefile for r128 (Sergio Monteiro Basto) + +2004-12-14 Roland Mainz + * xc/programs/xrx/helper/helper.c + Bug #1942 (https://bugs.freedesktop.org/show_bug.cgi?id=1942) + attachment #1401 (https://bugs.freedesktop.org/attachment.cgi?id=1401): + Fix problems with random return code returned by "xrx". + Patch by Egbert Eich + +2004-12-14 Roland Mainz + * xc/programs/xedit/lisp/lisp.c + Bug #1936 (https://bugs.freedesktop.org/show_bug.cgi?id=1936) + attachment #1395 (https://bugs.freedesktop.org/attachment.cgi?id=1395): + Removed inclusion of unnecessary kernel header on Linux. + This may fail in an -ansi environment. + Patch by Egbert Eich + +2004-12-12 Roland Mainz + * xc/config/cf/xorgsite.def + * xc/config/cf/xprint_site.def + Bug #1827 (https://bugs.freedesktop.org/show_bug.cgi?id=1827) + attachment #1284 (https://bugs.freedesktop.org/attachment.cgi?id=1284): + xf86site.def is referenced in comments in places where + xorgsite.def is used + Patch by Matthieu Herrb + +2004-12-12 Roland Mainz + * xc/fonts/bdf/100dpi/Imakefile: + * xc/fonts/bdf/75dpi/Imakefile: + Bug #1560 (https://bugs.freedesktop.org/show_bug.cgi?id=1560) + attachment #1036 (https://bugs.freedesktop.org/attachment.cgi?id=1036): + Fix build of lucida fonts which were broken since 6.8.0. + Patch by Alexander Gottwald . + +2004-12-12 Roland Mainz + * xc/nls/XLC_LOCALE/en_US.UTF-8 + Bug #1842 (https://bugs.freedesktop.org/show_bug.cgi?id=1842) + attachment #1389 (https://bugs.freedesktop.org/attachment.cgi?id=1298): + Move iso10646 last so the "fallback" + fonts will actually be used if they are better matches. + +2004-12-12 Roland Mainz + * xc/config/cf/xorgsite.def: + Bug 2004-12-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c + * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c + Bug #1824 (https://bugs.freedesktop.org/show_bug.cgi?id=1824) + attachment #1288 (https://bugs.freedesktop.org/attachment.cgi?id=1288): + Fix kbd driver for wskbd protocol and pure wscons console driver + Patch by Matthieu Herrb #1930 (https://bugs.freedesktop.org/show_bug.cgi?id=1930) + attachment #1389 (https://bugs.freedesktop.org/attachment.cgi?id=1389): + Make Xorg the default server to install. + Patch by Egbert Eich + +2004-12-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_KbdMap.c + * xc/programs/Xserver/hw/xfree86/os-support/bsd/bsd_kbd.c + Bug #1824 (https://bugs.freedesktop.org/show_bug.cgi?id=1824) + attachment #1288 (https://bugs.freedesktop.org/attachment.cgi?id=1288): + Fix kbd driver for wskbd protocol and pure wscons console driver + Patch by Matthieu Herrb + +2004-12-12 Roland Mainz + * xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c + * xc/lib/GL/glx/glxext.c + Bug #1501 (https://bugs.freedesktop.org/show_bug.cgi?id=1501) + attachment #1013 (https://bugs.freedesktop.org/attachment.cgi?id=1013): + More complete fix for libglx bugs (double-free etc.). + Patch by Egbert Eich and Matthias Hopf. + +2004-12-12 Roland Mainz + * xc/fonts/encodings/Imakefile + * xc/fonts/encodings/ascii-0.enc + * xc/programs/mkfontscale/mkfontscale.c + Bugzilla #1703 (https://bugs.freedesktop.org/show_bug.cgi?id=1703) + attachment #1226 (https://bugs.freedesktop.org/attachment.cgi?id=1226): + Adding ascii-0 font encoding which helps in + cases where a font has all ASCII chars populated but not enougth + glyphs to match the requirements for ISO8859-1 (and to add + backwards compatibility to ttmkfdir). + +2004-12-12 Roland Mainz + * xc/extras/Mesa/src/mesa/tnl/t_vtx_x86_gcc.S: + Bugzilla #1079 (https://bugs.freedesktop.org/show_bug.cgi?id=1079) + attachment #636 (https://bugs.freedesktop.org/attachment.cgi?id=636): + Add missing check for CYGWIN for adding underscores tosymbol names + in assembler. Merged upstream, and should be brought in in + the next import. + Patch by Alexander Gottwald . + +2004-12-12 Roland Mainz + * xc/programs/xset/Imakefile + * xc/programs/xset/xset.c + Bugzilla #1659 (https://bugs.freedesktop.org/show_bug.cgi?id=1659) + attachment #1120 (https://bugs.freedesktop.org/attachment.cgi?id=1120): + Fix Imakefile bug which caused the Xprint support + in "xset" not being build. + +2004-12-12 Roland Mainz + * xc/programs/xman/print.c + * xc/programs/xmore/print.c + * xc/programs/xphelloworld/xpawhelloworld/xpawhelloworld.c + Bugzilla #1601 (https://bugs.freedesktop.org/show_bug.cgi?id=1601) + attachment #1088 (https://bugs.freedesktop.org/attachment.cgi?id=1088): + Fix problems with wrong page counts in xedit&co. + when a global "*geometry" resource was overriding the internal + geometry management used by XawPrintShell(=usually adjust to + current page size, the resource was turning this into a static + value). + +2004-12-12 Roland Mainz + * xc/programs/xman/search.c + Bugzilla #1481 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1481) + attachment #976 (https://bugs.freedesktop.org/attachment.cgi?id=976) + Avoid several buffer overflows in xman if search string is too long. + Patch by Matthieu Herrb . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/ps/psout.c + Bugzilla #661 (https://freedesktop.org/bugzilla/show_bug.cgi?id=661) + attachment #1002 (https://bugs.freedesktop.org/attachment.cgi?id=1002): + Xprt producing spurious characters in PS + output when using the bitmap cache (Originally reported + against Solaris Xprt as Sun bug id #4369307, and + fixed in Solaris by Jay Hobson ). + Patch by Jay Hobson . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/ps/PsInit.c + Bugzilla #1800 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1800) + attachment #1474 (https://bugs.freedesktop.org/attachment.cgi?id=1474): + Fix Postscript DDX's 1bit StaticGray visual to report only 1bit + of significant bits in color specification (instead of 8bits). + Patch by Julien Lafon + +2004-12-12 Roland Mainz + * xc/config/cf/xprint_site.def + * xc/programs/Xserver/Xprint/ps/Ps.h + * xc/programs/Xserver/Xprint/ps/PsPixmap.c + * xc/programs/Xserver/Xprint/ps/PsPolygon.c + * xc/programs/Xserver/mi/miinitext.c + Bugzilla #1664 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1664) + attachment #1161 (https://bugs.freedesktop.org/attachment.cgi?id=1161): + RFE: Add support for the DOUBLE-BUFFER extension + to the Xprint server and DDX. Additionally a "pixmap-scrubber" + optimisation is added to the PostScript DDX to remove all content + from a vector pixmap when a |PolyFillRect()| call covers the whole + pixmap surface with a solid fill (this avoids that a backbuffer + vector pixmap gets constantly filled even when the content is + not visible anymore after |XdbeSwapBuffers()| has cleared the + hidden buffer with the background color). + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/attributes.c + Bugzilla #1647 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1647) + attachment #1117 (https://bugs.freedesktop.org/attachment.cgi?id=1117): + Fix the problem that |XpSubmitJob()| returns + a random value (patch by Stefan Dirsch/SuSE). + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/ps/PsColor.c + Bugzilla #1646 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1646) + attachment #1116 (https://bugs.freedesktop.org/attachment.cgi?id=1116): + Fix the problem that |PsCreateColormap()| returns + a random value (patch by Stefan Dirsch/SuSE). + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/Oid.c + Bugzilla #1637 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1637) + attachment #1114 (https://bugs.freedesktop.org/attachment.cgi?id=1114): + Fix problems in oid code which may cause the + usage of an invalid string pointer (original patch by Egbert Eich). + +2004-12-12 Roland Mainz + * xc/programs/xlsfonts/Imakefile + * xc/programs/xlsfonts/xlsfonts.c + * xc/programs/xlsfonts/xlsfonts.man + * xc/programs/xlsfonts/xlsfonts.sgml + * xc/programs/xplsprinters/xplsprinters.html + * xc/programs/xplsprinters/xplsprinters.man + * xc/programs/xplsprinters/xplsprinters.sgml + Bugzilla #1551 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1551) + attachment #1025 (https://bugs.freedesktop.org/attachment.cgi?id=1025): + Convert "xlsfonts" manual page to DocBook + format (and document the new functionality introduced + with bug #1518). + +2004-12-12 Roland Mainz + * xc/programs/xlsfonts/Imakefile + * xc/programs/xlsfonts/dsimple.c + * xc/programs/xlsfonts/dsimple.h + * xc/programs/xlsfonts/xlsfonts.c + Bugzilla #1518 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1518) + attachment #1022 (https://bugs.freedesktop.org/attachment.cgi?id=1022): + Add filter support to "xlsfonts" that it can + filter builtin-, glyph- and/or other kinds of printer fonts + (controlled by the xp-listfonts-modes attribute as described + in the CDE DtPrint and Xprint specifications). + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/pcl/PclInit.c + * xc/programs/Xserver/Xprint/ps/PsInit.c + Bugzilla #1629 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1629) + attachment #1107 (https://bugs.freedesktop.org/attachment.cgi?id=1107): + Fix crash on AMD64, regression caused by bug + 1496 ("Xorg Xprt does not support "*xp-listfonts-mode: + xp-list-internal-printer-fonts" to toggle the usage of + printer-builtin fonts"). + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/Init.c + * xc/programs/Xserver/Xprint/pcl/PclInit.c + * xc/programs/Xserver/Xprint/ps/PsInit.c + Bugzilla #1496 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1496) + attachment #998 (https://bugs.freedesktop.org/attachment.cgi?id=998): + Fixed Xprt font handling which did not support + "*xp-listfonts-modes: xp-list-internal-printer-fonts" or + "*xp-listfonts-modes: xp-list-glyph-fonts" to toggle + the usage of printer-builtin and glyph fonts in XListFonts*(), + XLoad*Font(), etc. + Additionally the Xprint DDX now explicitly list "xp-listfonts-modes" + in "document-attributes-supported" (for document-level) or + "xp-page-attributes-supported" (for page-level) when the DDX implements + this feature (as described in the CDE DtPrint and Xprint + specifications). + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/ps/PsGC.c + * xc/programs/Xserver/Xprint/ps/PsPixmap.c + Bugzilla #1416 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1416) + attachment #994 (https://bugs.freedesktop.org/attachment.cgi?id=994): + Fix Xprt PostScript DDX crashes when copying + offscreen pixmap content to the same pixmap (the crash can + be reproduced with % x11perf -copypixpix500 ... # or the + reduced testcase in bug #1416 (attachment #993)). + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xprint/Init.c + * xc/programs/Xserver/Xprint/ps/Ps.h + * xc/programs/Xserver/Xprint/ps/PsArea.c + * xc/programs/Xserver/Xprint/ps/PsColor.c + * xc/programs/Xserver/Xprint/ps/PsInit.c + * xc/programs/Xserver/Xprint/ps/psout.c + * xc/programs/Xserver/Xprint/ps/psout.h + Bugzilla #1299 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1299) + attachment #1001 (https://bugs.freedesktop.org/attachment.cgi?id=1001): + Add more visuals to the Postscript DDX (8bit GrayScale/StaticGray, + 1bit StaticGray and the basic infratructure for "deep" visuals with more + than 8bits per RGB gun). + Patch by Roland Mainz . + +2004-12-12 Roland Mainz + * xc/lib/GL/glx/glxcmds.c + Bugzilla #1672 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1672) + attachment #1132 (https://bugs.freedesktop.org/attachment.cgi?id=1132): + Prevent libGL segfault if server's GLX version is > 1.2. + Patch by Adam Jackson . + +2004-12-12 Roland Mainz + * xc/lib/GL/mesa/Imakefile + * xc/lib/GL/mesa/math/Imakefile + * xc/lib/GL/mesa/shader/Imakefile + * xc/lib/GL/mesa/sparc/Imakefile + * xc/lib/GL/mesa/swrast/Imakefile + * xc/lib/GL/mesa/swrast_setup/Imakefile + * xc/lib/GL/mesa/tnl/Imakefile + * xc/lib/GL/mesa/tnl_dd/Imakefile + Bugzilla #1843 (https://freedesktop.org/bugzilla/show_bug.cgi?id=1843) + attachment #1301 (https://bugs.freedesktop.org/attachment.cgi?id=1301): + Fix build failure in the linker stage of libOSMesa.so.4.0 which + happens more or less every couple of months with the message + "ld: fatal: too many symbols require `small' PIC references: + have 2112, maximum 2048 -- recompile some modules -K PIC.". + The fix is to add |#define LargePICTable YES| to _ALL_ relevant + Imakefiles (previously this was done only on "on-demand" basis). + +2004-12-12 Roland Mainz + * xc/util/memleak/getretmips.c + Bugzilla #758 (https://bugs.freedesktop.org/show_bug.cgi?id=758) + attachment #375 (https://bugs.freedesktop.org/attachment.cgi?id=375): + Fix a buffer overrun which may happen when the size of the stack buffer + is exactly the same as the actual stack size. + Patch by Stephen Kennedy . + +2004-12-12 Roland Mainz + * xc/extras/Xpm/lib/xpm.h + Bugzilla #830 (https://bugs.freedesktop.org/show_bug.cgi?id=830) + attachment #1493 (https://bugs.freedesktop.org/attachment.cgi?id=1493): + Fix libXpm header (xpm.h) to use the X11 function begin/end marker + macros (_XFUNCPROTOBEGIN, _XFUNCPROTOEND) instead of homegrown + (native) C++ code. + Patch by Kevin DeKorte . + +2004-12-12 Roland Mainz + * xc/include/extensions/dpms.h + Bugzilla #830 (https://bugs.freedesktop.org/show_bug.cgi?id=830) + attachment #1492 (https://bugs.freedesktop.org/attachment.cgi?id=1492): + Get DPMS header file (include/extensions/dpms.h) working with C++ + applications. + Patch by Kevin DeKorte and Roland + Mainz . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xext/saver.c + Bugzilla #1695 (https://bugs.freedesktop.org/show_bug.cgi?id=1695) + attachment #1230 (https://bugs.freedesktop.org/attachment.cgi?id=1230): + Fix crash in Xscreensaver code which allowed any authentificated X client + to crash the Xserver using |XScreenSaverUnsetAttributes()|. + Patch by ajax@nwnk.net + +2004-12-12 Roland Mainz + * xc/include/extensions/Imakefile + Bugzilla #1871 (https://bugs.freedesktop.org/show_bug.cgi?id=1871) + attachment #1314 (https://bugs.freedesktop.org/attachment.cgi?id=1314): + Remove old and now obsolete xc/include/extensions/damage.h. + Patch by Kristian Høgsberg . + +2004-12-12 Roland Mainz + * xc/include/extensions/Xinerama.h + Bugzilla #1897 (https://bugs.freedesktop.org/show_bug.cgi?id=1897) + attachment #1338 (https://bugs.freedesktop.org/attachment.cgi?id=1338): + xc/include/extensions/Xinerama.h should include , since it uses + libX11 functions. + Patch by Xavier Bestel and Daniel Stone . + +2004-12-12 Roland Mainz + * xc/lib/Xaw/AsciiSink.c + * xc/lib/Xaw/Label.c + * xc/lib/Xaw/List.c + * xc/lib/Xaw/MultiSink.c + * xc/lib/Xaw/SmeBSB.c + * xc/lib/Xaw/Tip.c + * xc/lib/Xaw/XawIm.c + Bugzilla #1941 (https://bugs.freedesktop.org/show_bug.cgi?id=1941) + attachment #1400 (https://bugs.freedesktop.org/attachment.cgi?id=1400): + Fail during initialization with error if font/fontset is not + set for widget. This prevents a sig11 later when the non-existent + font/fontset structs are referenced. + Patch by Egbert Eich . + +2004-12-12 Roland Mainz + * xc/lib/X11/XKBBind.c + Bugzilla #1459 (https://bugs.freedesktop.org/show_bug.cgi?id=1459) + attachment #966 (https://bugs.freedesktop.org/attachment.cgi?id=966): + Fix |bzero()| size argument so it doesn't trash the stack. + Patch by Mike A. Harris . + +2004-12-12 Roland Mainz + * xc/lib/X11/XlibInt.c + Bugzilla #1864 (https://bugs.freedesktop.org/show_bug.cgi?id=1864) + attachment #1434 (https://bugs.freedesktop.org/attachment.cgi?id=1434): + Fix random crashes because |bufp| variable is not initialized in + |_XopenFile| (later the pointer is checked for |NULL| and freed + otherwise. If the file was not found the pointer is uninitialized and + rando memory is freed). + Patch by Alexander Gottwald . + +2004-12-12 Roland Mainz + * xc/lib/X11/XlibInt.c + Bugzilla #1864 (https://bugs.freedesktop.org/show_bug.cgi?id=1864) + attachment #1310 (https://bugs.freedesktop.org/attachment.cgi?id=1310): + Fix random crashes because |pbuf| variable is not initialized in + |_XFopenFile| (later the pointer is checked for |NULL| and freed + otherwise. If the file was not found the pointer is uninitialized and + rando memory is freed). + Patch by Alexander Gottwald + +2004-12-12 Roland Mainz + * xc/lib/X11/imInsClbk.c + Bugzilla #1926 (https://bugs.freedesktop.org/show_bug.cgi?id=1926) + attachment #1482 (https://bugs.freedesktop.org/attachment.cgi?id=1482): + Unregistering events in XSelectInput() when unregistering IM + filter callbacks via |_XimUnRegisterIMInstantiateCallback| may be a + bad idea as others may be interested in this event. + Removed the call to XSelectInput() altogether as we are in root + window anyway. + Patch by Lubos Lunak and and Egbert Eich . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c + Bugzilla #1688 (https://bugs.freedesktop.org/show_bug.cgi?id=1688) + attachment #1530 (https://bugs.freedesktop.org/attachment.cgi?id=1530): + Fix the current implementation to make it possible to slow down the + mouse pointer or use arbitrary fractions (without running into + rounding error issues). The change is using the same method of + preserving rounding errors that the exponential method is already + using. + Patch by Jan Brunner . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/os/WaitFor.c + Bugzilla #1934 (https://bugs.freedesktop.org/show_bug.cgi?id=1934) + attachment #1393 (https://bugs.freedesktop.org/attachment.cgi?id=1393): + Fixing |SetDPMSTimers()| so that DPMS*Time == 0 disables the + appropriate timer. This takes advantage of the fact that + |TimerSet()| with a timeout argument 0 behaves like |TimerCanel()|. + Patch by Egbert Eich . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/dix/dispatch.c + Bugzilla #1939 (https://bugs.freedesktop.org/show_bug.cgi?id=1939) + attachment #1398 (https://bugs.freedesktop.org/attachment.cgi?id=1398): + Fixe size of a variable that gets assigned the value of + SmartScheduleTime (|long|) to |long|. This should help to prevent + smart scheduler lockup on 64 bit systems due to datatype overruns. + Patch by Andreas Schwab and Egbert Eich . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/Xext/saver.c + Bugzilla #1989 (https://bugs.freedesktop.org/show_bug.cgi?id=1989) + attachment #1399 (https://bugs.freedesktop.org/attachment.cgi?id=1399): + Fixed sig11 in |ScreenSaverUnsetAttributes()| which occured when + calling a |CloseDisplay()| after |XScreenSaverSetAttributes()| + followed by |XScreenSaverUnsetAttributes()|. Caused by missing + |FreeResource()| in |XScreenSaverUnsetAttributes()|. + Patch by Egbert Eich . + +2004-12-12 Roland Mainz + * xc/lib/dmx/dmx.c + Bugzilla #1989 (https://bugs.freedesktop.org/show_bug.cgi?id=1989) + attachment #1442 (https://bugs.freedesktop.org/attachment.cgi?id=1442): + Fix invalid write in libXdmx extension library (for |DMXAddInput()|). + Patch by Mark McLoughlin . + +2004-12-12 Roland Mainz + * xc/lib/dmx/dmx.c + Bugzilla #1989 (https://bugs.freedesktop.org/show_bug.cgi?id=1989) + attachment #1441 (https://bugs.freedesktop.org/attachment.cgi?id=1441): + Fix invalid write in libXdmx extension library. + Patch by Mark McLoughlin . + +2004-12-12 Roland Mainz + * xc/programs/Xserver/miext/damage/damage.c + Bugzilla #1204 (https://bugs.freedesktop.org/show_bug.cgi?id=1204) + attachment #1360 (https://bugs.freedesktop.org/attachment.cgi?id=1360): + Fix X11 test suite (caused by DAMAGE layer) failure with Xvfb when + rendering text using |XDrawText*()| (XDrawText() tests 1, 3, 4, 27, 28, + 29, 30, 34, 37, 39, 41, 43 and XDrawText16() tests 1, 3, 9, 10, 11, 12, + 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 34, + 37, 39, 41, 43). + Patch by Hong Bo Peng and Stefan Dirsch + . + +2004-12-08 Roland Mainz + * xc/programs/Xserver/hw/xfree86/xf86cfg/loader.h + Bugzilla #557 (https://bugs.freedesktop.org/show_bug.cgi?id=557) + attachment #1255 (https://bugs.freedesktop.org/attachment.cgi?id=1255): + Do not use "bool" as a variable name in xf86cfg, to avoid + compiler bugs. + Patch by Donnie Berkholz . + +2004-12-08 Roland Mainz + * xc/programs/Xserver/Xext/xf86bigfont.c + Bugzilla #1402 (https://bugs.freedesktop.org/show_bug.cgi?id=1402) + attachment #948 (https://bugs.freedesktop.org/attachment.cgi?id=948): + Fix BigFont extension if SHM is compiled in but + not working. Does not access SHM and privates if the SHM syscall + failed during extension initialization. + Patch by Alexander Gottwald . + +2004-12-08 Roland Mainz + * xc/programs/Xserver/os/utils.c + Bugzilla #1453 (https://bugs.freedesktop.org/show_bug.cgi?id=1453) + attachment #964 (https://bugs.freedesktop.org/attachment.cgi?id=964): + Fix spaces in usage output for BIGREQUESTS extension (option + "-maxbigreqsize"). + +2004-12-08 Roland Mainz + * xc/programs/Xserver/os/utils.c + Bugzilla #1489 (https://bugs.freedesktop.org/show_bug.cgi?id=1489) + attachment #979 (https://bugs.freedesktop.org/attachment.cgi?id=979): + Use |long| instead of |int| for BIGREQUESTS commandline option. + +2004-12-08 Roland Mainz + * xc/programs/Xserver/hw/xfree86/loader/elfloader.c: + Bugzilla #1812 (https://bugs.freedesktop.org/show_bug.cgi?id=1812) + attachment #1263 (https://bugs.freedesktop.org/attachment.cgi?id=1263), + Sun bug id #6175128: + Add Solaris to the platforms on which mprotect() is run to set + execute permissions when necessary. + Patch by Alan Coopersmith . + +2004-12-08 Roland Mainz + * xc/programs/xmodmap/pf.c + * xc/programs/xmodmap/xmodmap.c + * xc/programs/xmodmap/xmodmap.h + Bugzilla #1818 (https://bugs.freedesktop.org/show_bug.cgi?id=1818) + attachment #1286 (https://bugs.freedesktop.org/attachment.cgi?id=1286): + Fixing off-by-one allocation error. + Patch by Kristian Høgsberg . + +2004-12-08 Roland Mainz + * xc/programs/Xserver/dix/main.c + Bugzilla #1404 (https://bugs.freedesktop.org/show_bug.cgi?id=1404): + Fixing random crashes (like in DAMAGE code etc.) in Xnest due + uninitalised GetWindowPixmap. + Original patch by Alexander Gottwald + +2004-12-08 Roland Mainz + * xc/programs/Xserver/mi/miinitext.c + Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361) + attachment #1287 (https://bugs.freedesktop.org/attachment.cgi?id=1287): + Avoid DRI initalisation when the Xfree86-DRI extension was turned + off. + Patch by Kristian Høgsberg . + +2004-12-08 Roland Mainz + * xc/programs/Xserver/mi/miinitext.c + Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361) + attachment #938 (https://bugs.freedesktop.org/attachment.cgi?id=938): + Allow more extensions to be enabled/disabled. + +2004-12-08 Roland Mainz + * xc/programs/Xserver/mi/miinitext.c + Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361) + attachment #938 (https://bugs.freedesktop.org/attachment.cgi?id=938): + Allow more extensions to be enabled/disabled. + +2004-12-08 Roland Mainz + * xc/programs/Xserver/hw/xfree86/loader/dixsym.c + * xc/programs/Xserver/hw/xfree86/loader/extsym.c + Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361) + attachment #899 (https://bugs.freedesktop.org/attachment.cgi?id=899): + Fix module loader bustage due duplicate symbols + caused by the first patch in Bugzilla #1361 + +2004-12-08 Roland Mainz + * xc/programs/Xserver/hw/xfree86/loader/dixsym.c + * xc/programs/Xserver/include/globals.h + * xc/programs/Xserver/mi/miinitext.c + * xc/programs/Xserver/os/utils.c + Bugzilla #1361 (https://bugs.freedesktop.org/show_bug.cgi?id=1361) + attachment #894 (https://bugs.freedesktop.org/attachment.cgi?id=894): + Allow turning on/off most of the Xserver extensions + (=all except server-specific extensions (e.g. DMX, XpExtension, + etc.) via +extension/-extension + +2004-11-14 Alan Coopersmith + + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv.man: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_cursor.c: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dma.h: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_video.c: + * xc/programs/Xserver/hw/xfree86/drivers/nv/nv_xaa.c: + + (Bugzilla #1777) Import Mark Vojkovich's changes to NV driver + since last sync with XFree86, including: + Support for new NVIDIA chips. + Egbert has a laptop that needs some DPMS ordering reversed. + New chip support and workaround for Toshiba M30 laptop issue. + PCI-Xpress chip support. + DPMS support for DVI. + Cursor changes for NV11 so that alpha blended cursors will work + in conjunction with dithering (laptop panels). It previously + did not. + HW support for alpha blended stretch blits on NV5 and higher, + though nothing is using them at this point. + Add support for VBlank syncing the Xv Blit adaptor on hardware + that supports it (NV11 and higher). + Make console restoration a little more robust. We were making + an assumption that failed on a newer laptop. + Workaround for some NV31 DVI artifacts. + + Also add nVidia license statement to nv man page to comply with + requirement that it appear in "user documentation" + +2004-10-17 Alex Deucher + + * programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c: + (RADEONEnterVT): + Fix resume in radeon driver (bug 1220) + +----------- 6.8.1 Release + +2004-09-17 Kevin E. Martin + + * config/cf/xorg.cf: + Update the XORG_DATE for the release. + + * config/cf/cygwin.cf: + Update cygwin release version. + + * BUILD: + * README: + * RELNOTES: + * programs/Xserver/hw/xfree86/doc/BUILD: + * programs/Xserver/hw/xfree86/doc/DESIGN: + * programs/Xserver/hw/xfree86/doc/Install: + * programs/Xserver/hw/xfree86/doc/OS2.Notes: + * programs/Xserver/hw/xfree86/doc/README: + * programs/Xserver/hw/xfree86/doc/README.DECtga: + * programs/Xserver/hw/xfree86/doc/README.Darwin: + * programs/Xserver/hw/xfree86/doc/README.LynxOS: + * programs/Xserver/hw/xfree86/doc/README.NetBSD: + * programs/Xserver/hw/xfree86/doc/README.OpenBSD: + * programs/Xserver/hw/xfree86/doc/README.SCO: + * programs/Xserver/hw/xfree86/doc/README.SiS: + * programs/Xserver/hw/xfree86/doc/README.Solaris: + * programs/Xserver/hw/xfree86/doc/README.XKB-Config: + * programs/Xserver/hw/xfree86/doc/README.chips: + * programs/Xserver/hw/xfree86/doc/README.dps: + * programs/Xserver/hw/xfree86/doc/README.fonts: + * programs/Xserver/hw/xfree86/doc/README.i740: + * programs/Xserver/hw/xfree86/doc/README.i810: + * programs/Xserver/hw/xfree86/doc/README.mouse: + * programs/Xserver/hw/xfree86/doc/README.r128: + * programs/Xserver/hw/xfree86/doc/README.rendition: + * programs/Xserver/hw/xfree86/doc/README.s3virge: + * programs/Xserver/hw/xfree86/doc/RELNOTES: + * programs/Xserver/hw/xfree86/doc/Versions: + * programs/Xserver/hw/xfree86/doc/sgml/defs.ent: + * programs/xkbcomp/README.config: + Update documentation for release. + 2004-09-15 Daniel Stone * xc/extras/Xpm/lib/Attrib.c: @@ -6404,4 +8139,4 @@ so i18n libs from build tree get used instead of installed ones (Egbert Eich). -$XdotOrg: xc/ChangeLog,v 1.365.2.1 2004/09/15 15:47:36 daniel Exp $ +$XdotOrg: xc/ChangeLog,v 1.365.2.155 2005/02/09 18:03:20 gisburn Exp $ diff -N -x '*CVS*' -r -u x11r681/xc/Makefile x11r682/xc/Makefile --- xc/Makefile 2004-09-03 18:18:17.000000000 +0200 +++ xc/Makefile 2005-02-09 19:03:20.000000000 +0100 @@ -7,7 +7,7 @@ # Luna users will need to either run make as "make MAKE=make" # or add "MAKE = make" to this file. -RELEASE = "Release 6.8" +RELEASE = "Release 6.8.2" SHELL = /bin/sh RM = rm -f MV = mv diff -N -x '*CVS*' -r -u x11r681/xc/README x11r682/xc/README --- xc/README 2004-09-17 17:38:17.000000000 +0200 +++ xc/README 2005-02-09 00:54:04.000000000 +0100 @@ -1,29 +1,29 @@ - README for X11R6.8.1 + README for X11R6.8.2 The X.Org Foundation - 17 September 2004 + 9 February 2005 Abstract - X11R6.8.1 is an Open Source version of the X Window System that + X11R6.8.2 is an Open Source version of the X Window System that supports many UNIX(R) and UNIX-like operating systems (such as Linux, FreeBSD, NetBSD, OpenBSD and Solaris x86) on Intel and other - platforms. This version is compatible with X11R6.8 and other X + platforms. This version is compatible with X11R6.8.1 and other X window system implementations which support the X11R6 standard. -1. What is X11R6.8.1? +1. What is X11R6.8.2? -X11R6.8.1 is the eighth full release in the X11R6 series. +X11R6.8.2 is the eighth full release in the X11R6 series. -X11R6.8.1 is the current X.Org Foundation release series. The core of -X11R6.8.1 is a modular X server. The 6.8.1 version is a new release that +X11R6.8.2 is the current X.Org Foundation release series. The core of +X11R6.8.2 is a modular X server. The 6.8.2 version is a new release that includes additional hardware support, functional enhancements and bug fixes. Specific release enhancements can be viewed in the Release Notes. -Most modern PC video hardware is supported in X11R6.8.1, and most PC video +Most modern PC video hardware is supported in X11R6.8.2, and most PC video hardware that isn't supported explicitly can be used with the "vesa" driver. -The Release Notes has a table showing the drivers provided with X11R6.8.1, +The Release Notes has a table showing the drivers provided with X11R6.8.2, and links to related documentation. The X.Org Foundation X releases are produced by the X.Org Foundation. The @@ -34,8 +34,8 @@ is free to all participants. Applications for Membership are now being accepted, and active participants in the further development of the X Window Technology are invited to complete a membership application -. The X11R6.8.1 code- -base forms the second X window system release since the formation of the +. The X11R6.8.2 code- +base forms the fourth X window system release since the formation of the X.org foundataion and includes code from the X Consortium, the Open Group and the XFree86[tm] project. This release is dedicated to the greater X commu- nity, developers and users alike. @@ -96,38 +96,38 @@ using the xorg component. This will ensure that they are included in future releases. -6. How to get X11R6.8.1 +6. How to get X11R6.8.2 -X11R6.8.1 can be found from the X.Org Foundation wiki at +X11R6.8.2 can be found from the X.Org Foundation wiki at , and at mirrors of this server. Information about obtaining and installing binary distributions of this release can be found in the Installation Document. Information about obtaining the release in source form is given below. -The source for version 6.8.1 is split into seven tarballs: +The source for version 6.8.2 is split into seven tarballs: - X11R6.8.1-src1.tar.gz - X11R6.8.1-src2.tar.gz - X11R6.8.1-src3.tar.gz - X11R6.8.1-src4.tar.gz - X11R6.8.1-src5.tar.gz - X11R6.8.1-src6.tar.gz - X11R6.8.1-src7.tar.gz + X11R6.8.2-src1.tar.gz + X11R6.8.2-src2.tar.gz + X11R6.8.2-src3.tar.gz + X11R6.8.2-src4.tar.gz + X11R6.8.2-src5.tar.gz + X11R6.8.2-src6.tar.gz + X11R6.8.2-src7.tar.gz The first three contain everything except the fonts and general X11 documen- -tation. Those three are sufficient for building X11R6.8.1 if you already +tation. Those three are sufficient for building X11R6.8.2 if you already have a set of fonts. The fourth and fifth contain the fonts. The sixth con- tains the source for the general X11 documentation. The seventh contains the general X11 documentation in hardcopy format. -To format the X11R6.8.1 documentation use the latest version of our doctools +To format the X11R6.8.2 documentation use the latest version of our doctools package available from the Xorg CVS repository's "doctools" module. The X source code for this and all releases/snapshots as well as development versions can also be accessed via the Freedesktop.org CVS repository. It's also possible to browse the freedesktop CVS repository . The CVS tag for this version is -"XORG-6_8_1". The CVS tag for the stable branch for this release is +"XORG-6_8_2". The CVS tag for the stable branch for this release is "XORG-6_8-branch". To check out the latest development version, don't spec- ify any tag. @@ -144,4 +144,4 @@ $Id$. -$XdotOrg: xc/README,v 1.3.2.2 2004/09/17 15:38:17 kem Exp $ +$XdotOrg: xc/README,v 1.3.2.4 2005/02/08 23:54:04 kem Exp $ diff -N -x '*CVS*' -r -u x11r681/xc/RELNOTES x11r682/xc/RELNOTES --- xc/RELNOTES 2004-09-17 17:38:17.000000000 +0200 +++ xc/RELNOTES 2005-02-09 00:54:04.000000000 +0100 @@ -1,19 +1,19 @@ - Release Notes for X11R6.8.1 + Release Notes for X11R6.8.2 The X.Org Foundation The XFree86 Project, Inc. - 17 September 2004 + 9 February 2005 Abstract These release notes contains information about features and their - status in the X.Org Foundation X11R6.8.1 release. It is based on + status in the X.Org Foundation X11R6.8.2 release. It is based on the XFree86 4.4RC2 RELNOTES document published by The XFree86[tm] Project, Inc. There are significant updates and differences in the X.Org release as noted below. -1. Introduction to the X11R6.8.1 Release +1. Introduction to the X11R6.8.2 Release The release numbering is based on the original MIT X numbering system. X11 refers to the version of the network protocol that the X Window system is @@ -37,7 +37,7 @@ top.org using the xorg product, and discussions on this server take place on . -X11R6.8.1 comes with a graphical configuration tool called "xorgcfg", which +X11R6.8.2 comes with a graphical configuration tool called "xorgcfg", which also has a text mode interface and can be used to create an initial configu- ration file. It can also be used to customise existing configurations. @@ -63,20 +63,21 @@ quick read through the Installation Document. It may save you some time and also help you figure out which of the binary releases you need. -The next section describes what is new in the latest version (6.8.1) compared -with the previous full release (6.8). The other sections below describe some -of the new features and changes between 3.3.x and 4.0. There are lots of new -features, and we definitely don't have enough space to cover them all here. +The next section describes what is new in the latest version (6.8.2) compared +with the previous full release (6.8.1). The other sections below describe +some of the new features and changes between 3.3.x and 4.0. There are lots +of new features, and we definitely don't have enough space to cover them all +here. -2. Summary of new features in X11R6.8.1 +2. Summary of new features in X11R6.8.2 -This is a sampling of the new features in X11R6.8.1. A more complete list of +This is a sampling of the new features in X11R6.8.2. A more complete list of changes can be found in the ChangeLog file that is part of the X source tree. o Freetype was updated to version 2.1.8. But installing freetype from X distributions would often or usually result in the replacement or use of "stale" versions of freetype. On Linux, FreeBSD, Solaris 10, and SCO5, - therefore, X11R6.8.1 will by default use the version of freetype2 that + therefore, X11R6.8.2 will by default use the version of freetype2 that is installed on the system. If your system doesn't come with an installed freetype2 and you wish to use the version supplied with this distribution, please add: @@ -85,10 +86,10 @@ to config/cf/host.def. - o The XTT font module and FreeType1 have been retired because FreeType2 + o The XTT font module and FreeType1 have been retired because FreeType2 subsumes their functionality - o Retire old PS Type1 font rasterizer (except for CID font usage) since + o Retire old PS Type1 font rasterizer (except for CID font usage) since the FreeType2 rasterizer now handles PS Type1 (*.pfa, *.pfb) o Render implementation fixes @@ -97,6 +98,8 @@ o Updated SiS driver + o Updated Nvidia driver (opensource version) + o Render acceleration for ATI's R100 and R200-series cards o Substantial speedups in the software implementation of the render exten- @@ -113,11 +116,12 @@ o Software mouse cursor is now based on the Damage extension o A new keyboard driver is enabled by default. The old driver is disabled - unless explicitly compiled in by defining the macro USE_DEPRECATED_KEY- - BOARD_DRIVER + unless explicitly compiled in by defining the macro |USE_DEPRECATED_KEY- + BOARD_DRIVER|. - o Extensions can be enabled/disabled from the configuration file and from - the command line + o All extensions (except Xserver-specific extensions "DMX" and "XpExten- + sion") can now be enabled/disabled from the configuration file and from + the command line. o Mac OS X updates: @@ -134,9 +138,11 @@ o Fixed some GLX rendering problems on Mac OS X 10.2 and earlier + o Updated xterm version + 2.1 New X extensions -X11R6.8.1 includes four new extensions: +X11R6.8.2 includes four new extensions: XFixes The XFixes extension is a collection of improvements for defi- @@ -163,7 +169,7 @@ core protocol and the RENDER extension, the compositing manager can create special effects, such as translucennt windows. - The Composite extension is considered experimental in X11R6.8.1 + The Composite extension is considered experimental in X11R6.8.2 and is turned off by default. XEvIE (X Event Interception Extension) (experimental) @@ -173,7 +179,7 @@ (i.e., interested clients). This feature is required by the GNOME accessibility project. - The XEvIE extension is considered experimental in X11R6.8.1 and + The XEvIE extension is considered experimental in X11R6.8.2 and is turned off by default. As noted above, some extensions are disabled by default. They can be enabled @@ -189,7 +195,7 @@ 2.2 Distributed Multihead X (DMX) -X11R6.8.1 includes a new X server, called Xdmx, that allows users to create a +X11R6.8.2 includes a new X server, called Xdmx, that allows users to create a single unified desktop from multiple running X servers. It works by creating a local screen on each of these running X servers, which can be distributed across a network, and then presents that set of screens to the user. When @@ -201,8 +207,9 @@ 2.3 Xprint updates - o Integrated various fixes from xprint.mozdev.org (more or less the whole - codebase has been merged) + o Integrated various fixes from xprint.mozdev.org + (more or less the whole codebase has been + merged) o Integrated various fixes from Sun Microsystems @@ -211,18 +218,20 @@ o New set of maintenance tools for the Xprint server (xplsprinters, xpre- hashprinterlist, etc.) - o Added new XprintUtils client library to make the usage off Xprint easier + o Added new XprintUtils client library to make the usage of Xprint easier o Various other features and fixes integrated o Athena toolkit now has print support (XawPrintShell) which is included - in a separate version of that library (Xaw8) + in a new version of that library (Xaw8) - o Various applications/tools like xman, xedit, xlogo, etc. now have print - support + o Various applications/tools like xman, xedit, xlogo, xlsfonts, etc. now + have print support 2.4 Updated Mesa and DRI from upstream sources + o Mesa version has been updated to 6.2.1 (in X11R6.8.2) + o More OpenGL extensions o MergedFB for Radeon (Dualhead DRI support on these cards) @@ -242,23 +251,7 @@ 2.5 Video driver enhancements - o SiS driver updates include - - o output device hotplugging - - o lots of fixes for 661, 741, 760 - - o extended interface for SiSCtrl? - - o extended LCD handling (allow more modes) - - o HDTV support (480p, 480i, 720p. 1080i; 315/330 series) - - o Added video blitter Xv adapter (315/330 series) - - o extended RENDER acceleration - - o Radeon driver updates: + o ATI Radeon driver updates: o Merged Framebuffer support (dualhead with DRI) @@ -277,13 +270,9 @@ o Many other small fixes - o Neomagic driver updates - - o Support for Xv on pre-nm2160 chips - - o Pseudocolor overlay mode + o Chips driver update - o Improved support for lowres double scan modes + o Improved BE support o MGA driver updates @@ -291,6 +280,14 @@ o Updated 3D driver + o Neomagic driver updates + + o Support for Xv on pre-nm2160 chips + + o Pseudocolor overlay mode (=PseudoColor emulation) + + o Improved support for lowres double scan modes + o i810 driver updates o Dualhead support (i830+) @@ -299,17 +296,33 @@ o New 3D driver (i830+) + o i810 driver is now supported for AMD64 + + o S3 driver updates + + o Support for additional IBM RAMDACS + o Savage driver updates o Pseudocolor overlay mode - o S3 driver updates + o SiS driver updates include - o Support for additional IBM RAMDACS + o output device hotplugging - o Chips driver update + o lots of fixes for 661, 741, 760 - o Improved BE support + o extended interface for SiSCtrl? + + o extended LCD handling (allow more modes) + + o HDTV support (480p, 480i, 720p. 1080i; 315/330 series) + + o Added video blitter Xv adapter (315/330 series) + + o extended RENDER acceleration + + o SiS driver now supported on AMD64 o New Voodoo driver (Alan Cox) @@ -320,7 +333,7 @@ 3.1 Video Drivers -X11R6.8.1 includes the following video drivers: +X11R6.8.2 includes the following video drivers: +--------------+--------------------------+---------------------------------------------+ |Driver Name | Description | Further Information | @@ -376,48 +389,63 @@ Darwin/Mac OS X uses IOKit drivers and does not use the module loader drivers listed above. Further information can be found in README.Darwin. -X11R6.8.1 includes the following input drivers: +X11R6.8.2 includes the following print drivers: + +3.2 Print Drivers + ++------------+----------------------------------------+---------------------+ +|Driver Name | Description | Further Information | ++------------+----------------------------------------+---------------------+ +|PostScript | PostScript driver | | +|PCL | PCL color driver | | +|PCL-MONO | PCL monocrome driver | | +|RASTER | Monocrome raster driver (XWD, PS, PCL) | | ++------------+----------------------------------------+---------------------+ + +Drivers marked with (*) are available for Linux only. + +X11R6.8.2 includes the following input drivers: -3.2 Input Drivers +3.3 Input Drivers - +------------+----------------------------------+---------------------+ - |Driver Name | Description | Further Information | - +------------+----------------------------------+---------------------+ - |aiptek(*) | Aiptek USB tablet | aiptek(4) | - |calcomp | Calcomp | | - |citron | Citron | citron(4) | - |digitaledge | DigitalEdge | | - |dmc | DMC | dmc(4) | - |dynapro | Dynapro | | - |elographics | EloGraphics | | - |fpit | Fujitsu Stylistic Tablet PCs | fpit(4) | - |hyperpen | Aiptek HyperPen 6000 | | - |js_x | JamStudio pentablet | js_x(4) | - |kbd | generic keyboards (alternate) | kbd(4) | - |keyboard | generic keyboards | keyboard(4) | - |microtouch | MicroTouch | | - |mouse | most mouse devices | mouse(4) | - |mutouch | MicroTouch | | - |palmax | Palmax PD1000/PD1100 | palmax(4) | - |penmount | PenMount | | - |spaceorb | SpaceOrb | | - |summa | SummaGraphics | | - |tek4957 | Tektronix 4957 tablet | tek4957(4) | - |ur98(*) | Union Reality UR-F98 headtracker | ur98(4) | - |void | dummy device | void(4) | - |wacom | Wacom tablets | wacom(4) | - +------------+----------------------------------+---------------------+ + +------------+-------------------------------------+---------------------+ + |Driver Name | Description | Further Information | + +------------+-------------------------------------+---------------------+ + |aiptek(*) | Aiptek USB tablet | aiptek(4) | + |calcomp | Calcomp | | + |citron | Citron | citron(4) | + |digitaledge | DigitalEdge | | + |dmc | DMC | dmc(4) | + |dynapro | Dynapro | | + |elographics | EloGraphics | | + |fpit | Fujitsu Stylistic Tablet PCs | fpit(4) | + |hyperpen | Aiptek HyperPen 6000 | | + |js_x | JamStudio pentablet | js_x(4) | + |kbd | generic keyboards (loadable module) | kbd(4) | + |keyboard | generic keyboards (builtin driver) | keyboard(4) | + |microtouch | MicroTouch | | + |mouse | most mouse devices | mouse(4) | + |mutouch | MicroTouch | | + |palmax | Palmax PD1000/PD1100 | palmax(4) | + |penmount | PenMount | | + |spaceorb | SpaceOrb | | + |summa | SummaGraphics | | + |tek4957 | Tektronix 4957 tablet | tek4957(4) | + |ur98(*) | Union Reality UR-F98 headtracker | ur98(4) | + |void | dummy device | void(4) | + |wacom | Wacom tablets | wacom(4) | + +------------+-------------------------------------+---------------------+ Drivers marked with (*) are available for Linux only. -4. Overview of X11R6.8.1 +4. Overview of X11R6.8.2 -On most platforms, X11R6.8.1 has a single X server binary called Xorg. This +On most platforms, X11R6.8.2 has a single X server binary called Xorg. This binary can either have one or more video and input drivers linked in stati- cally, or more usually, dynamically, and in that manner load the video drivers, input drivers, and other modules that are needed. -X11R6.8.1 has X server support for most UNIX® and UNIX-like operating systems +X11R6.8.2 has X server support for most UNIX® and UNIX-like operating systems on Intel/x86 platforms, plus support for Linux and some BSD OSs on Alpha, PowerPC, IA-64, AMD64, Sparc, and Mips platforms, and for Darwin on PowerPC. @@ -433,7 +461,7 @@ A main benefit of this, is that when modules are updated, they do not need to be recompiled for every different operating system. The loader in version -6.8.1 has support for Intel (x86), Alpha and PowerPC platforms. It also has +6.8.2 has support for Intel (x86), Alpha and PowerPC platforms. It also has preliminary support for Sparc platforms. The X server makes use of modules for video drivers, X server extensions, @@ -476,13 +504,13 @@ 4.4 XAA The XFree86 Acceleration Architecture (XAA) was completely rewritten from -scratch for XFree86 4.x and is used in X11R6.8.1. Most drivers implement +scratch for XFree86 4.x and is used in X11R6.8.2. Most drivers implement acceleration by making use of the XAA module. The Xorg server will accept modules built either for XFree86 4.4 servers or its own. 4.5 Multi-head -Some multi-head configurations are supported in X11R6.8.1, primarily with +Some multi-head configurations are supported in X11R6.8.2, primarily with multiple PCI/AGP cards. One of the main problems is with drivers not sufficiently initialising cards @@ -505,7 +533,7 @@ Xinerama is not enabled by default, and can be enabled with the +xinerama command line option for the X server. -Xinerama was included with X11R6.4. The version included in X11R6.8.1 was +Xinerama was included with X11R6.4. The version included in X11R6.8.2 was completely rewritten for improved performance and correctness. Known problems: @@ -517,7 +545,7 @@ 4.7 DGA version 2 -DGA 2.0 is included in 6.8.1. Documentation for the client libraries can be +DGA 2.0 is included in 6.8.2. Documentation for the client libraries can be found in the XDGA(3) man page. A good degree of backwards compatibility with version 1.0 is provided. @@ -554,11 +582,11 @@ 4.10 XVideo Extension (Xv) -The XVideo extension is supported in X11R6.7.x. An XvQueryPortAttributes -function has been added as well as support for XvImages. XvImages are XIm- -ages in alternate color spaces such as YUV and can be passed to the server -through shared memory segments. This allows clients to display YUV data with -high quality hardware scaling and filtering. +The XVideo extension is supported in X11R6.7.x and newer releases. An +XvQueryPortAttributes function has been added as well as support for XvIm- +ages. XvImages are XImages in alternate color spaces such as YUV and can be +passed to the server through shared memory segments. This allows clients to +display YUV data with high quality hardware scaling and filtering. 4.11 X Rendering Extension (Render) @@ -589,17 +617,18 @@ To allow a graceful transition for applications moving from core text render- ing to the Render extension, Xft can use either the core rendering requests or the Render extension for text. See the section on FreeType support in Xft -for instructions on configuring X11R6.8.1 to use an existing FreeType instal- +for instructions on configuring X11R6.8.2 to use an existing FreeType instal- lation. The Xft library uses configuration files, /etc/fonts/fonts.conf and /etc/fonts/local.conf, which contains information about which directories contain font files and also provides a sophisticated font aliasing mechanism. -Documentation for that file is included in the Xft(3) man page. +Documentation for that file is included in the Xft(3), fontconfig(3) and +fonts.conf(4) man pages. 4.11.2 Application Support For Anti-Aliased Text -Only four applications have been modified in X11R6.8.1 to work with the Ren- +Only four applications have been modified in X11R6.8.2 to work with the Ren- der extension and the Xft and FreeType libraries to provide anti-aliased text: xterm, xditview, x11perf and xclock. Migration of other applications may occur in future releases. @@ -645,32 +674,32 @@ o Please refer to xedit(1) for more details. - o XPrint support. + o Support for printing via Xprint. 4.14 Font support -Details about the font support in X11R6.8.1.x can be found in the -README.fonts document. +Details about the font support in X11R6.8.x can be found in the README.fonts +document. 4.15 TrueType support X11R6.7 came with two TrueType backends. The functionality from the `X-True- -Type' backend has been integrated into the `FreeType' backend which is -designed to transparently support all of the functionality from the `X-True- -Type' backend with the exception of the font encoding libraries; the -`FreeType' backend uses only the fontenc-based encoding system . +Type' (="XTT") backend has been integrated into the `FreeType' backend which +is designed to transparently support all of the functionality from the `X- +TrueType' backend with the exception of the font encoding libraries; the +`FreeType' backend uses only the fontenc-based encoding system. 4.16 CID font support -Support for CID-keyed fonts is included in X11R6.8.1 The CID-keyed font for- +Support for CID-keyed fonts is included in X11R6.8.2 The CID-keyed font for- mat was designed by Adobe Systems for fonts with -large character sets. The CID-keyed font support in X11R6.8.1 was donated by +large character sets. The CID-keyed font support in X11R6.8.2 was donated by SGI . See the LICENSE document for a copy of the CID Font Code Public License. 4.17 Internationalisation of the scalable font backends -X11R6.8.1 has a ``fontenc'' layer to allow the scalable font backends to use +X11R6.8.2 has a ``fontenc'' layer to allow the scalable font backends to use a common method of font re-encoding. This re-encoding makes it possible to uses fonts in encodings other than their their native encoding. This layer is used by the Type1, Speedo and FreeType backends. @@ -684,7 +713,7 @@ 4.19 Unicode/ISO 10646 support -What is included in X11R6.8.1 +What is included in X11R6.8.2 o All ``-misc-fixed-*'' BDF fonts are now available in the ISO10646-1 encoding and cover at least the 614 characters found in ISO @@ -718,7 +747,7 @@ 4.20 Xlib Compose file support and extensions A more flexible Compose file processing system was added to Xlib in -X11R6.8.1. The compose file is searched for in the following order: +X11R6.8.2. The compose file is searched for in the following order: 1. If the environment variable $XCOMPOSEFILE is set, its value is used as the name of the Compose file. @@ -765,14 +794,14 @@ 4.21 Bitstream Vera fonts -X11R6.8.1 includes the Bitstream Vera family of typefaces in TrueType format. +X11R6.8.2 includes the Bitstream Vera family of typefaces in TrueType format. This family includes the ``Bitstream Vera Sans'', ``Bitstream Vera Sans Mono'' and ``Bitstream Vera Serif'' in Roman and Bold varients as well as the ``Bitstream Vera Sans'' and ``Bitstream Vera Sans Mono'' in Oblique and Bold Oblique. These fonts include all of the glyphs needed for ISO 8859 parts 1 9 and 15. -The license terms for the Vera fonts are inclued in the file COPYRIGHT.Vera>. +The license terms for the Vera fonts are inclued in the file COPYRIGHT.Vera. 4.22 Luxi fonts from Bigelow and Holmes @@ -801,7 +830,7 @@ 5. Miscellaneous -This section describes other items of note for the X11R6.8.1 release. +This section describes other items of note for the X11R6.8.2 release. 5.1 Legacy keyboard driver phase-out @@ -862,22 +891,28 @@ 6. Attributions/Acknowledgements/Credits -This section lists the credits for the X11R6.8.1 release. For a more +This section lists the credits for the X11R6.8.2 release. For a more detailed breakdown, refer to the ChangeLog file in the X.Org source tree, the ChangeLog's in or the 'cvs log' information for individual source files." - These people contributed in some way to X11R6.8.1 - Paul Anderson, Eric Anholt, Daniel Berrange, Russ Blaine, Ryan - Breen, Alan Coopersmith, Michel Daenzer, David Dawes, Alex - Deucher, Stefan Dirsch, Egbert Eich, Rik Faith, Jim Gettys, - Alexander Gottwald, Mike A. Harris, John Harper, John Heasley, - Matthieu Herrb, Alan Hourihane, Kristian Høsberg, Harold L. Hunt - II, Adam Jackson, Deron Johnson, Ivan Kokshaysky, Stuart Kreit- - man, Peter Kunzman, Nolan Leake, Ryan Lortie, Andreas Luik, Tor- - rey T. Lyons, Roland Mainz, Guy Martin, Kevin E. Martin, Keith - Packard, Greg Parker, Aaron Plattner, Søren Sandmann, Ty Sarna, - Yu Shao, Bryan Stine, Owen Taylor, Travis Tilley, Ryan Underwood, - Ronny Vindenes, Chisato Yamauchi + These people contributed in some way to X11R6.8.2 + Paul Anderson, Eric Anholt, Dave Airlie, Donnie Berkholz, Daniel + Berrange, Thomas Biege, Russ Blaine, Ryan Breen, Alan Cooper- + smith, Jay Cotton, Michel Daenzer, David Dawes, Kevin DeKorte, + Alex Deucher, Stefan Dirsch, Egbert Eich, Rik Faith, Jim Gettys, + Giuseppe Ghibò, Thomas Gilg, Alexander Gottwald, Mike A. Harris, + John Harper, John Heasley, Jeremy Huddleston, Matthieu Herrb, + Alan Hourihane, Jay Hobson, Matthias Hopf, Kristian Høsberg, + Harold L. Hunt II, Adam Jackson, Daniel Jacobowitz, Deron John- + son, Masaki Katakai, Stephen Kennedy, Ivan Kokshaysky, Stuart + Kreitman, Peter Kunzman, Julien Lafon, Nolan Leake, Ryan Lortie, + Andreas Luik, Torrey T. Lyons, Roland Mainz, Guy Martin, Kevin E. + Martin, Dan McNichol, Dagfinn Ilmari Mannsaker, Simon Montagu, + Keith Packard, Greg Parker, Drew Parsons, Aaron Plattner, Branden + Robinson, Søren Sandmann, Ty Sarna, Yu Shao, Gustavo Noronha + Silva, Bryan Stine, Owen Taylor, Travis Tilley, Ryan Underwood, + Ronny Vindenes, Chisato Yamauchi, Mark Vojkovich, Tim Yamin, Hui + Yu The X Window System has been a collaborative effort from its inception. Our apologies for anyone or organization inadvertently overlooked. Many individ- @@ -886,105 +921,103 @@ This product includes software developed by: Paul Anderson, Michael Bax, Jehan Bing, Peter Breitenlohner, Alan - Coopersmith, Egbert Eich, John Dennis, Fabrizio Gennari, Jim Get- - tys, Alexander Gottwald, Ralf Habacker Mike Harris, Mattheiu - Herrb Alan Hourihane, Harold L Hunt II, Elliot Lee, Jeremy Katz, - Kaleb Keithley, Stuart Kreitman, Andreas Luik, Torrey Lyons, - Roland Mainz, Kevin E. Martin, Takuma Murakami, Kensuke Mat- - suzaki, Keith Packard, Ivan Pascal, Earle F. Philhower III, Ben- - jamin Rienfenstahl, Leon Shiman, Toshimitsu Tanaka, Nicholas - Wourms. - - 2d3d Inc., Aaron Plattner, Adam de Boor, Adam Jackson, Adobe Sys- - tems Inc., After X-TT Project, AGE Logic Inc., Alan Coopersmith, - Alan Cox, Alan Hourihane, Alexander Gottwald, Alex Deucher, - Andreas Luik, Andreas Monitzer, Andrew C Aitchison, Andy Ritger, - Ani Joshi, Anton Zioviev, Apollo Computer Inc., Apple Computer - Inc., Ares Software Corp., AT&T Inc., ATI Technologies Inc., Ben- - jamin Rienfenstahl, Bigelow and Holmes, Bill Reynolds, Bitstream - Inc., Bitstream, Inc, Brian Fundakowski Feldman, Brian Goines, - Brian Paul, Bruno Haible, Bryan Stine, Charles Murcko, Chen - Xiangyang, Chisato Yamauchi, Chris Constello, Christian Zietz, - Cognition Corp., Compaq Computer Corporation, Concurrent Computer - Corporation, Conectiva S.A., Corin Anderson, Craig Struble, Dae- - woo Electronics Co. Ltd., Dale Schumacher, Damien Miller, Daniel - Berrange, Daniel Stone, Daniver Limited, Daryll Strauss, Data - General Corporation, David Bateman, David Dawes, David E. Wexel- - blat, David Holland, David J. McKay, David McCullough, David Mos- - berger-Tang, David S. Miller, Davor Matic, Deron Johnson, Digital - Equipment Corporation, Dirk Hohndel, Doug Anson, Earle F. Phil- - hower III, Edouard TISSERANT, Eduardo Horvath, Egbert Eich, - Elliot Lee, Eric Anholt, Eric Fortune, Eric Sunshine, Erik For- - tune, Erik Nygren, Evans & Sutherland Computer Corporation, Fabio - Massimo Di Nitto Fabrizio Gennari, Finn Thoegersen, Frederic Lep- - ied, Free Software Foundation Inc., Fujitsu Limited, Fujitsu Open - Systems Solutions Inc., Fuji Xerox Co. Ltd., Geert Uytterhoeven, - Gerrit Jan Akkerman, Gerry Toll, Glenn G. Lai, GNOME Foundation, - Go Watanabe, Gregory Mokhin, Greg Parker, GROUPE BULL, Guy Mar- - tin, Hans Oey, Harald Koenig, Harm Hanemaayer, Harold L Hunt II, - Harry Langenbacher, Henry A. Worth, Hewlett-Packard Company, - Hitachi Ltd, Holger Veit, Howard Greenwell, Hummingbird Communi- - cations Ltd., IBM Corporation, Intel Corporation, INTERACTIVE - Systems Corporation, International Business Machines Corp., Itai - Nahshon, Ivan Kokshaysky, Ivan Pascal, Jakub Jelinek, James Tsil- - las, Jason Bacon, Jean-loup Gailly, Jeff Kirk, Jeffrey Hsu, Jehan - Bing, Jeremy Katz, Jim Gettys, Jim Tsillas, J. Kean Johnston, - John Dennis, John Harper, John Heasley, Jon Block, Jon Tombs, - Jorge Delgado, Joseph Friedman, Joseph V. Moss, Juliusz - Chroboczek, Jyunji Takagi, Kaleb Keithley, Kaleb S. Keithley, - Kazushi (Jam) Marukawa, Kazuyuki (ikko-) Okamoto, Kean Johnston. - Keith Packard, Keith Packard, Keith Whitwell, Kensuke Matsuzaki, - Kristian Høgsberg, Larry Wall, Lawrence Berkeley Laboratory, - Lennart Augustsson, Leon Shiman, Lexmark International Inc., - Linus Torvalds, Luc Verhaegen, Machine Vision Holdings Inc., Man- - fred Brands, Marc Aurele La France Mark Adler, Mark J. Kilgard, - Mark Leisher, Mark Smulders, Mark Vojkovich, Massachusetts Insti- - tute Of Technology, Matrox Graphics, Mattheiu Herrb Matthew - Grossman, Matthieu Herrb, Metro Link Inc., Michael Bax, Michael - H. Schimek, Michael P. Marking, Michael Schimek, Michael Smith, - Michel Daenzer, Mike A. Harris, Mike Harris, Ming Yu, MIPS Com- - puter Systems Inc., National Semiconductor, NCR Corporation Inc., - Netscape Communications Corporation, Network Computing Devices - Inc., Nicholas Wourms, Noah Levitt, Nolan Leake, Novell Inc., - Nozomi YTOW, NTT Software Corporation, Number Nine Computer - Corp., Number Nine Visual Technologies, NVIDIA Corp., Oivier - Danet, Oki Technosystems Laboratory Inc., OMRON Corporation, Open - Software Foundation, Orest Zborowski, Owen Taylor, Pablo Saratx- - aga, Panacea Inc., Panagiotis Tsirigotis, Paolo Severini, Pascal - Haible, Patrick Lecoanet, Patrick Lerda, Paul Anderson, Paul - Elliott, Peter Breitenlohner, Peter Kunzmann, Peter Trattler, - Philip Homburg, Precision Insight Inc., Prentice Hall, Quarter- - deck Office Systems, Ralf Habacker Randy Hendry, Ranier Keller, - Red Hat Inc., Regents of the University of California, Regis - Cridlig, Rene Cougnenc, Richard A. Hecker, Richard Burdick, Rich - Murphey, Rickard E. Faith, Rik Faith, Robert Baron, Robert - Chesler, Robert Millan. Robert V. Baron, Robin Cutshaw, Roland - Mainz, Ronny Vindenes, Russ Blaine, Ryan Breen, Ryan Lortie, Ryan - Underwood, S3 Graphics Inc., Sam Leffler, SciTech Software, Scott - Laird, Sebastien Marineau, Shigehiro Nomura, ShoGraphics Inc., - Shunsuke Akiyama, Silicon Graphics Computer Systems Inc., Silicon - Integrated Systems Corp Inc., Silicon Motion Inc., Simon P. - Cooper, Snitily Graphics Consulting Services, Sony Corporation, - Søren Sandmann, SRI, Stanislav Brabec, Stefan Dirsch, Stephan - Dirsch, Stephan Lang, Steven Lang, Stuart Kreitman, Sun Microsys- - tems Inc., SunSoft Inc., SuSE Inc, Sven Luther, Takis Psarogian- - nakopoulos, Takuma Murakami, Takuya SHIOZAKI, Tektronix Inc., The - DOS-EMU-Development-Team, The Institute of Software Academia - Sinica, The NetBSD Foundation, Theo de Raadt, Theodore Ts'o, The - Open Group, The Open Software Foundation, The Regents of the Uni- - versity of California, The Santa Cruz Operation Inc., The Weather - Channel Inc., The X Consortium, The XFree86 Project Inc., Thomas - E. Dickey, Thomas G. Lane, Thomas Hellström, Thomas Mueller, - Thomas Roell, Thomas Thanner, Thomas Winischhofer, Thomas Wol- - fram, Thorsten.Ohl, Tiago Gons, Todd C. Miller, Tomohiro KUBOTA, - Torrey Lyons, Torrey T. Lyons, TOSHIBA Corp., Toshimitsu Tanaka, - Travis Tilley, Tungsten Graphics Inc., Ty Sarna, UCHIYAMA - Yasushi, Unicode Inc., UniSoft Group Limited, University of Utah, - UNIX System Laboratories Inc., URW++ GmbH, VA Linux Systems, VIA - Technologies Inc., Video Electronics Standard, VMware Inc., Vrije - Universiteit, Wittawat Yamwong, Wyse Technology Inc., X Consor- - tium, Xi Graphics Inc., X-Oz Technologies, X-TrueType Server Pro- - ject and their contributors, Yu Shao, + Coopersmith, Thomas Dickey, Egbert Eich, John Dennis, Fabrizio + Gennari, Jim Gettys, Alexander Gottwald, Ralf Habacker, Mike Har- + ris, Mattheiu Herrb, Alan Hourihane, Harold L Hunt II, Elliot + Lee, Jeremy Katz, Kaleb Keithley, Stuart Kreitman, Andreas Luik, + Torrey Lyons, Roland Mainz, Kevin E. Martin, Takuma Murakami, + Kensuke Matsuzaki, Keith Packard, Ivan Pascal, Earle F. Philhower + III, Benjamin Rienfenstahl, Leon Shiman, Toshimitsu Tanaka, + Nicholas Wourms, 2d3d Inc., Aaron Plattner, Adam de Boor, Adam + Jackson, Adobe Systems Inc., After X-TT Project, AGE Logic Inc., + Alan Coopersmith, Alan Cox, Alan Hourihane, Alexander Gottwald, + Alex Deucher, Andreas Luik, Andreas Monitzer, Andrew C Aitchison, + Andy Ritger, Ani Joshi, Anton Zioviev, Apollo Computer Inc., + Apple Computer Inc., Ares Software Corp., AT&T Inc., ATI Tech- + nologies Inc., Benjamin Rienfenstahl, Bigelow and Holmes, Bill + Reynolds, Bitstream Inc., Bitstream, Inc, Brian Fundakowski Feld- + man, Brian Goines, Brian Paul, Bruno Haible, Bryan Stine, Charles + Murcko, Chen Xiangyang, Chisato Yamauchi, Chris Constello, Chris- + tian Zietz, Cognition Corp., Compaq Computer Corporation, Concur- + rent Computer Corporation, Conectiva S.A., Corin Anderson, Craig + Struble, Daewoo Electronics Co. Ltd., Dale Schumacher, Damien + Miller, Daniel Berrange, Daniel Stone, Daniver Limited, Daryll + Strauss, Data General Corporation, David Bateman, David Dawes, + David E. Wexelblat, David Holland, David J. McKay, David McCul- + lough, David Mosberger-Tang, David S. Miller, Davor Matic, Deron + Johnson, Digital Equipment Corporation, Dirk Hohndel, Doug Anson, + Earle F. Philhower III, Edouard TISSERANT, Eduardo Horvath, + Egbert Eich, Elliot Lee, Eric Anholt, Eric Fortune, Eric Sun- + shine, Erik Fortune, Erik Nygren, Evans & Sutherland Computer + Corporation, Fabio Massimo Di Nitto Fabrizio Gennari, Finn + Thoegersen, Frederic Lepied, Free Software Foundation Inc., + Fujitsu Limited, Fujitsu Open Systems Solutions Inc., Fuji Xerox + Co. Ltd., Geert Uytterhoeven, Gerrit Jan Akkerman, Gerry Toll, + Glenn G. Lai, GNOME Foundation, Go Watanabe, Gregory Mokhin, Greg + Parker, GROUPE BULL, Guy Martin, Hans Oey, Harald Koenig, Harm + Hanemaayer, Harold L Hunt II, Harry Langenbacher, Henry A. Worth, + Hewlett-Packard Company, Hitachi Ltd, Holger Veit, Howard Green- + well, Hummingbird Communications Ltd., IBM Corporation, Intel + Corporation, INTERACTIVE Systems Corporation, International Busi- + ness Machines Corp., Itai Nahshon, Ivan Kokshaysky, Ivan Pascal, + Jakub Jelinek, James Tsillas, Jason Bacon, Jean-loup Gailly, Jeff + Kirk, Jeffrey Hsu, Jehan Bing, Jeremy Katz, Jim Gettys, Jim Tsil- + las, J. Kean Johnston, John Dennis, John Harper, John Heasley, + Jon Block, Jon Tombs, Jorge Delgado, Joseph Friedman, Joseph V. + Moss, Juliusz Chroboczek, Jyunji Takagi, Kaleb Keithley, Kaleb S. + Keithley, Kazushi (Jam) Marukawa, Kazuyuki (ikko-) Okamoto, Kean + Johnston. Keith Packard, Keith Packard, Keith Whitwell, Kensuke + Matsuzaki, Kristian Høgsberg, Larry Wall, Lawrence Berkeley Labo- + ratory, Lennart Augustsson, Leon Shiman, Lexmark International + Inc., Linus Torvalds, Luc Verhaegen, Machine Vision Holdings + Inc., Manfred Brands, Marc Aurele La France Mark Adler, Mark J. + Kilgard, Mark Leisher, Mark Smulders, Mark Vojkovich, Mas- + sachusetts Institute Of Technology, Matrox Graphics, Mattheiu + Herrb Matthew Grossman, Matthieu Herrb, Metro Link Inc., Michael + Bax, Michael H. Schimek, Michael P. Marking, Michael Schimek, + Michael Smith, Michel Daenzer, Mike A. Harris, Mike Harris, Ming + Yu, MIPS Computer Systems Inc., National Semiconductor, NCR Cor- + poration Inc., Netscape Communications Corporation, Network Com- + puting Devices Inc., Nicholas Wourms, Noah Levitt, Nolan Leake, + Novell Inc., Nozomi YTOW, NTT Software Corporation, Number Nine + Computer Corp., Number Nine Visual Technologies, NVIDIA Corp., + Oivier Danet, Oki Technosystems Laboratory Inc., OMRON Corpora- + tion, Open Software Foundation, Orest Zborowski, Owen Taylor, + Pablo Saratxaga, Panacea Inc., Panagiotis Tsirigotis, Paolo Sev- + erini, Pascal Haible, Patrick Lecoanet, Patrick Lerda, Paul + Anderson, Paul Elliott, Peter Breitenlohner, Peter Kunzmann, + Peter Trattler, Philip Homburg, Precision Insight Inc., Prentice + Hall, Quarterdeck Office Systems, Ralf Habacker Randy Hendry, + Ranier Keller, Red Hat Inc., Regents of the University of Cali- + fornia, Regis Cridlig, Rene Cougnenc, Richard A. Hecker, Richard + Burdick, Rich Murphey, Rickard E. Faith, Rik Faith, Robert Baron, + Robert Chesler, Robert Millan. Robert V. Baron, Robin Cutshaw, + Roland Mainz, Ronny Vindenes, Russ Blaine, Ryan Breen, Ryan Lor- + tie, Ryan Underwood, S3 Graphics Inc., Sam Leffler, SciTech Soft- + ware, Scott Laird, Sebastien Marineau, Shigehiro Nomura, Sho- + Graphics Inc., Shunsuke Akiyama, Silicon Graphics Computer Sys- + tems Inc., Silicon Integrated Systems Corp Inc., Silicon Motion + Inc., Simon P. Cooper, Snitily Graphics Consulting Services, Sony + Corporation, Søren Sandmann, SRI, Stanislav Brabec, Stefan + Dirsch, Stephan Dirsch, Stephan Lang, Steven Lang, Stuart Kreit- + man, Sun Microsystems Inc., SunSoft Inc., SuSE Inc, Sven Luther, + Takis Psarogiannakopoulos, Takuma Murakami, Takuya SHIOZAKI, Tek- + tronix Inc., The DOS-EMU-Development-Team, The Institute of Soft- + ware Academia Sinica, The NetBSD Foundation, Theo de Raadt, + Theodore Ts'o, The Open Group, The Open Software Foundation, The + Regents of the University of California, The Santa Cruz Operation + Inc., The Weather Channel Inc., The X Consortium, The XFree86 + Project Inc., Thomas E. Dickey, Thomas G. Lane, Thomas Hellström, + Thomas Mueller, Thomas Roell, Thomas Thanner, Thomas Winis- + chhofer, Thomas Wolfram, Thorsten.Ohl, Tiago Gons, Todd C. + Miller, Tomohiro KUBOTA, Torrey Lyons, Torrey T. Lyons, TOSHIBA + Corp., Toshimitsu Tanaka, Travis Tilley, Tungsten Graphics Inc., + Ty Sarna, UCHIYAMA Yasushi, Unicode Inc., UniSoft Group Limited, + University of Utah, UNIX System Laboratories Inc., URW++ GmbH, VA + Linux Systems, VIA Technologies Inc., Video Electronics Standard, + VMware Inc., Vrije Universiteit, Wittawat Yamwong, Wyse Technol- + ogy Inc., X Consortium, Xi Graphics Inc., X-Oz Technologies, X- + TrueType Server Project and their contributors, Yu Shao, This product includes software developed by The XFree86 Project, Inc (http://www.xfree86.org/) and its contributors. @@ -1005,4 +1038,4 @@ and its contributors. -$XdotOrg: xc/RELNOTES,v 1.5.2.1 2004/09/17 15:38:17 kem Exp $ +$XdotOrg: xc/RELNOTES,v 1.5.2.3 2005/02/08 23:54:04 kem Exp $ diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/Imakefile x11r682/xc/config/cf/Imakefile --- xc/config/cf/Imakefile 2004-08-10 00:37:21.000000000 +0200 +++ xc/config/cf/Imakefile 2004-12-15 04:26:31.000000000 +0100 @@ -26,7 +26,8 @@ xorgsite.def \ $(VERSIONDEFFILES) \ $(HOSTDEFFILES) \ -site.def +site.def \ +xorgversion.def RULEFILES = \ Imake.rules \ diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/OpenBSDLib.tmpl x11r682/xc/config/cf/OpenBSDLib.tmpl --- xc/config/cf/OpenBSDLib.tmpl 2004-09-02 03:10:28.000000000 +0200 +++ xc/config/cf/OpenBSDLib.tmpl 2004-12-13 04:20:44.000000000 +0100 @@ -175,7 +175,7 @@ # elif OSMajorVersion > 3 || OSMajorVersion == 3 && OSMinorVersion >= 6 # ifndef SharedX11Rev -# define SharedX11Rev 8.0 +# define SharedX11Rev 8.1 # endif # ifndef SharedXThrStubRev # define SharedXThrStubRev 8.0 @@ -225,22 +225,22 @@ # endif # endif # ifndef SharedGlxRev -# define SharedGlxRev 3.0 +# define SharedGlxRev 3.1 # endif # ifndef SharedOSMesaRev -# define SharedOSMesaRev 5.0 +# define SharedOSMesaRev 6.0 # endif # ifndef SharedGLwRev # define SharedGLwRev 3.0 # endif # ifndef SharedXrenderRev -# define SharedXrenderRev 3.0 +# define SharedXrenderRev 3.1 # endif # ifndef SharedXrandrRev # define SharedXrandrRev 4.0 # endif # ifndef SharedXcursorRev -# define SharedXcursorRev 2.0 +# define SharedXcursorRev 2.2 # endif # ifndef SharedXfontcacheRev # define SharedXfontcacheRev 3.0 @@ -273,7 +273,7 @@ # define SharedXawRev 9.0 # endif # ifndef SharedXaw6Rev -# define SharedXaw6Rev 8.0 +# define SharedXaw6Rev 8.1 # endif # ifndef SharedXiRev # define SharedXiRev 8.0 @@ -294,7 +294,7 @@ # define SharedFSRev 8.0 # endif # ifndef SharedFontRev -# define SharedFontRev 3.0 +# define SharedFontRev 4.0 # endif # ifndef SharedFontEncRev # define SharedFontEncRev 3.0 @@ -303,16 +303,16 @@ # define SharedXpmRev 6.0 # endif # ifndef SharedFreetype2Rev -# define SharedFreetype2Rev 12.0 +# define SharedFreetype2Rev 13.0 # endif # ifndef SharedExpatRev # define SharedExpatRev 5.0 # endif # ifndef SharedXft1Rev -# define SharedXft1Rev 2.0 +# define SharedXft1Rev 3.0 # endif # ifndef SharedXftRev -# define SharedXftRev 4.0 +# define SharedXftRev 5.0 # endif # ifndef SharedFontconfigRev # define SharedFontconfigRev 2.0 diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/X11.tmpl x11r682/xc/config/cf/X11.tmpl --- xc/config/cf/X11.tmpl 2004-09-03 18:18:18.000000000 +0200 +++ xc/config/cf/X11.tmpl 2005-02-01 05:07:39.000000000 +0100 @@ -1,6 +1,6 @@ XCOMM ---------------------------------------------------------------------- XCOMM X Window System Build Parameters and Rules -XCOMM $XdotOrg: xc/config/cf/X11.tmpl,v 1.35 2004/09/03 16:18:18 kem Exp $ +XCOMM $XdotOrg: xc/config/cf/X11.tmpl,v 1.35.2.3 2005/02/01 04:07:39 gisburn Exp $ XCOMM $Xorg: X11.tmpl,v 1.6 2000/08/17 19:41:46 cpqbld Exp $ XCOMM XCOMM @@ -473,7 +473,10 @@ #define BuildCup YES #endif #ifndef HasPlugin -#define HasPlugin NO +/* Browser plugins are shared libraries - only build them if the OS + * supports shared libs. + */ +#define HasPlugin HasSharedLibraries #endif #ifndef BuildPlugin #define BuildPlugin HasPlugin @@ -680,6 +683,10 @@ #define BuildXevieLibrary !BuildServersOnly #endif +#ifndef BuildRootless +#define BuildRootless NO +#endif + #ifndef BuildXterm #define BuildXterm BuildClients #endif @@ -1237,6 +1244,14 @@ #endif #endif +#ifndef RootlessDefines +#if BuildRootless +#define RootlessDefines -DROOTLESS +#else +#define RootlessDefines /**/ +#endif +#endif + #ifndef SitePervasiveExtensionDefines #define SitePervasiveExtensionDefines /**/ #endif @@ -1247,7 +1262,8 @@ XF86BigfontExtensionDefines DPMSDefines \ LowMemDefines XprintDefines XineramaDefines \ SitePervasiveExtensionDefines RenderDefines RandRDefines \ - XfixesDefines XDamageDefines CompositeDefines XevieDefines + XfixesDefines XDamageDefines CompositeDefines XevieDefines \ + RootlessDefines #endif #ifndef SiteExtensionDefines #define SiteExtensionDefines /**/ diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/cygwin.cf x11r682/xc/config/cf/cygwin.cf --- xc/config/cf/cygwin.cf 2004-09-17 17:38:18.000000000 +0200 +++ xc/config/cf/cygwin.cf 2005-02-02 00:55:56.000000000 +0100 @@ -1,15 +1,17 @@ /* Cygwin/X vendor strings and version */ +#include "xorgversion.def" + #ifndef CygxVersionMajor -# define CygxVersionMajor 6 +# define CygxVersionMajor XORG_VERSION_MAJOR #endif #ifndef CygxVersionMinor -# define CygxVersionMinor 8 +# define CygxVersionMinor XORG_VERSION_MINOR #endif #ifndef CygxVersionPatch -# define CygxVersionPatch 1 +# define CygxVersionPatch XORG_VERSION_PATCH #endif #ifndef CygxVersionSnap -# define CygxVersionSnap 0 +# define CygxVersionSnap XORG_VERSION_SNAP #endif #ifndef CygxVersionServer # define CygxVersionServer 0 @@ -329,6 +331,7 @@ # define XWinMultiWindowDefines #endif /* BuildXWinMultiWindow */ #if BuildXWinMultiWindowExtWM +# define BuildRootless YES # define XWinMultiWindowExtWMDefines -DXWIN_MULTIWINDOWEXTWM #else /* BuildXWinMultiWindowExtWM */ # define XWinMultiWindowExtWMDefines diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/darwin.cf x11r682/xc/config/cf/darwin.cf --- xc/config/cf/darwin.cf 2004-09-02 03:23:45.000000000 +0200 +++ xc/config/cf/darwin.cf 2004-12-15 05:53:05.000000000 +0100 @@ -1,4 +1,4 @@ -XCOMM $XdotOrg: xc/config/cf/darwin.cf,v 1.4 2004/09/02 01:23:45 kem Exp $ +XCOMM $XdotOrg: xc/config/cf/darwin.cf,v 1.4.2.1 2004/12/15 04:53:05 gisburn Exp $ XCOMM platform: $XFree86: xc/config/cf/darwin.cf,v 1.50 2004/01/20 23:54:50 torrey Exp $ /* Darwin / Mac OS X configuration by John Carmack */ @@ -133,6 +133,7 @@ # define GlxExtraDefines -DGLX_DIRECT_RENDERING -DGLX_USE_APPLEGL GlxArchDefines # endif +# define BuildRootless YES #define BuildAppleWMLibrary YES #endif /* DarwinQuartzSupport */ diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/sun.cf x11r682/xc/config/cf/sun.cf --- xc/config/cf/sun.cf 2004-08-19 18:28:42.000000000 +0200 +++ xc/config/cf/sun.cf 2005-01-13 02:18:47.000000000 +0100 @@ -1,4 +1,4 @@ -XCOMM $XdotOrg: xc/config/cf/sun.cf,v 1.9 2004/08/19 16:28:42 kem Exp $ +XCOMM $XdotOrg: xc/config/cf/sun.cf,v 1.9.2.1 2005/01/13 01:18:47 gisburn Exp $ XCOMM platform: $Xorg: sun.cf,v 1.4 2000/08/17 19:41:48 cpqbld Exp $ @@ -240,6 +240,9 @@ # endif # endif #else +# if HasSunC +# define CompilerServerExtraDefines $(XF86SRC)/os-support/sunos/sparcv8plus.il +# endif # define HasPlugin YES #endif diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/xorg.cf x11r682/xc/config/cf/xorg.cf --- xc/config/cf/xorg.cf 2004-09-17 17:38:18.000000000 +0200 +++ xc/config/cf/xorg.cf 2005-01-24 04:11:42.000000000 +0100 @@ -1,4 +1,4 @@ -XCOMM $XdotOrg: xc/config/cf/xorg.cf,v 1.27.2.2 2004/09/17 15:38:18 kem Exp $ +XCOMM $XdotOrg: xc/config/cf/xorg.cf,v 1.27.2.6 2005/01/24 03:11:42 gisburn Exp $ /* * This configuration file contains all of the configuration * information for the Xorg based X Servers. @@ -11,13 +11,7 @@ /* Get and set version information. */ #include "date.def" - -#define XORG_VERSION_MAJOR 6 -#define XORG_VERSION_MINOR 8 -#define XORG_VERSION_PATCH 1 -#define XORG_VERSION_SNAP 0 - -#define XORG_DATE "17 September 2004" +#include "xorgversion.def" #if !defined(XorgVersionString) && \ defined(XORG_VERSION_MAJOR) && defined(XORG_VERSION_MINOR) && \ @@ -421,14 +415,17 @@ # ifndef DriDrivers # ifndef ia64Architecture -# define i386DRIDrivers i810 i915 +# define i386DRIDrivers i810 i915 sis tdfx # else + /* + * The tdfx driver needs Glide, which is not available for IA64. + * SiS is 64-bit unclean as of this writing. + */ # define i386DRIDrivers /**/ # endif -# define DriDrivers gamma i386DRIDrivers mga r128 radeon r200 \ - sis tdfx +# define DriDrivers gamma i386DRIDrivers mga r128 radeon r200 # endif -#endif +#endif /* i386Architecture || ia64Architecture */ #if defined(AMD64Architecture) /* vgahw module */ @@ -447,15 +444,17 @@ # define XF86CardDrivers mga glint nv tga s3 s3virge sis rendition \ neomagic tdfx savage cirrus tseng trident \ chips apm i128 ati ark cyrix siliconmotion \ - vga dummy vesa \ + vga dummy vesa i810 \ XF86OSCardDrivers XF86ExtraCardDrivers # endif -/* The tdfx driver needs Glide, which is not available for AMD64. SiS is 64-bit - * unclean as of this writing. +/* + * The tdfx driver needs Glide, which is not available for AMD64. + * SiS is 64-bit unclean as of this writing. */ -# define DriDrivers gamma mga r128 radeon r200 - +# ifndef DriDrivers +# define DriDrivers i915 gamma mga r128 radeon r200 +# endif #endif /*AMD64Arcitecture*/ /* SPARC and UltraSPARC drivers */ @@ -540,7 +539,7 @@ DevelDrivers \ XF86OSCardDrivers XF86ExtraCardDrivers # endif -#endif +#endif /* OpenBSDArchitecture && Sparc64Architecture */ /* MIPS drivers */ @@ -564,7 +563,7 @@ DevelDrivers newport \ XF86OSCardDrivers XF86ExtraCardDrivers # endif -#endif +#endif /* MipsArchitecture */ /* * DEC Alpha drivers @@ -589,11 +588,14 @@ savage nv cirrus DevelDrivers siliconmotion \ vga XF86OSCardDrivers XF86ExtraCardDrivers # endif -/* SiS is 64-bit unclean as of this writing. */ +/* + * Glide is available for Alpha, therefore build tdfx DRM module. + * SiS is 64-bit unclean as of this writing. + */ # ifndef DriDrivers # define DriDrivers gamma tdfx mga r128 radeon r200 # endif -#endif +#endif /* AlphaArchitecture */ /* * Motorola 68k and PowerPC drivers @@ -623,10 +625,11 @@ DevelDrivers vga \ XF86OSCardDrivers XF86ExtraCardDrivers # endif +/* The tdfx driver needs Glide, which is not available for PPC. */ # ifndef DriDrivers -# define DriDrivers gamma tdfx mga r128 radeon r200 +# define DriDrivers gamma mga r128 radeon r200 # endif -#endif +#endif /* PpcArchitecture || Mc68020Architecture */ /* * Intel StrongARM and Hewlett-Packard PA-RISC @@ -672,10 +675,6 @@ # ifndef XorgServer # define XorgServer YES # endif -/* Amiga framebuffer module */ -# ifndef XF86AFB -# define XF86AFB NO -# endif /* 1bpp module */ # ifndef XF1Bpp # define XF1Bpp NO @@ -700,10 +699,6 @@ # ifndef XFShadowFB # define XFShadowFB YES # endif -/* vgahw module */ -# ifndef XF86VgaHw -# define XF86VgaHw NO -# endif /* fbdevhw module */ # ifndef XF86FBDevHw # define XF86FBDevHw YES @@ -728,11 +723,23 @@ # ifndef XF86RAC # define XF86RAC YES # endif - /* int10 module */ # ifndef XF86Int10 # define XF86Int10 YES # endif +/* vbe module */ +# ifndef XF86VBE +# define XF86VBE YES +# endif + +/* vgahw module */ +# ifndef XF86VgaHw +# define XF86VgaHw NO +# endif +/* Amiga framebuffer module */ +# ifndef XF86AFB +# define XF86AFB NO +# endif # ifndef DevelDrivers # if XFree86Devel @@ -756,7 +763,7 @@ # ifndef DriDrivers # define DriDrivers gamma r128 # endif -#endif +#endif /* Ppc64Architecture */ /* * For Mips/Arc platforms, the default is to build all modules which @@ -1550,7 +1557,7 @@ # endif #endif -#if (GccMajorVersion == 3) && (GccMinorVersion >= 1) +#if ((GccMajorVersion == 3) && (GccMinorVersion >= 1)) || (GccMajorVersion > 3) # define GccAliasingArgs -fno-strict-aliasing #else # define GccAliasingArgs /* */ diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/xorgsite.def x11r682/xc/config/cf/xorgsite.def --- xc/config/cf/xorgsite.def 2004-08-21 04:06:44.000000000 +0200 +++ xc/config/cf/xorgsite.def 2004-12-13 15:27:33.000000000 +0100 @@ -24,7 +24,7 @@ * The host.def file will never be patched. * * The distributed version of this file MUST contain no uncommented - * definitions. Default definitions belong in xfree86.cf, or .cf + * definitions. Default definitions belong in xorg.cf, or .cf * files. */ /******************************************************************************/ @@ -71,7 +71,7 @@ /* * Set the default server (ie the one that gets the sym-link to "X") * -#define ServerToInstall XFree86 +#define ServerToInstall Xorg */ /* diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/xorgversion.def x11r682/xc/config/cf/xorgversion.def --- xc/config/cf/xorgversion.def 1970-01-01 01:00:00.000000000 +0100 +++ xc/config/cf/xorgversion.def 2005-02-09 19:03:20.000000000 +0100 @@ -0,0 +1,6 @@ +#define XORG_VERSION_MAJOR 6 +#define XORG_VERSION_MINOR 8 +#define XORG_VERSION_PATCH 2 +#define XORG_VERSION_SNAP 0 + +#define XORG_DATE "9 February 2005" diff -N -x '*CVS*' -r -u x11r681/xc/config/cf/xprint_site.def x11r682/xc/config/cf/xprint_site.def --- xc/config/cf/xprint_site.def 2004-05-05 00:58:59.000000000 +0200 +++ xc/config/cf/xprint_site.def 2004-12-13 15:27:33.000000000 +0100 @@ -90,7 +90,6 @@ #define BuildGlxExt NO #define BuildXIE NO /* X extensions not needed */ -#define BuildDBE NO #define BuildXKB NO #define BuildRECORD NO #define BuildDPMS NO @@ -136,7 +135,7 @@ #endif /* BuildXprintAppsOnly */ /* Set our own XVendorString/XVendorRelease - * (and to avoid that xfree86.cf sets it's own stuff here) */ + * (and to avoid that xorg.cf sets it's own stuff here) */ #define XVendorString "xprint.mozdev.org" #define XVendorRelease 100000 diff -N -x '*CVS*' -r -u x11r681/xc/config/docbook/docbookconv.sh x11r682/xc/config/docbook/docbookconv.sh --- xc/config/docbook/docbookconv.sh 2004-04-23 20:42:00.000000000 +0200 +++ xc/config/docbook/docbookconv.sh 2004-12-15 08:17:48.000000000 +0100 @@ -1,5 +1,7 @@ #!/bin/sh +#set -x + fatal_error() { echo "$1" 1>&2 @@ -97,8 +99,15 @@ fi ;; "man") - cp "${MYCURRDIR}/${infile}" "${infile}.tmp" - ${docbook2man} "${infile}.tmp" + if [ "${infile}" != "${infile%.sgml}" ] ; then + #cp "${MYCURRDIR}/${infile}" "${infile%.sgml}.xml" + #${docbook2man} --network "${infile%.sgml}.xml" + cp "${MYCURRDIR}/${infile}" "${infile}.tmp" + ${docbook2man} --network "${infile}.tmp" + else + cp "${MYCURRDIR}/${infile}" "${infile}.tmp" + ${docbook2man} --network "${infile}.tmp" + fi manfile="$(ls -1 ${infile%.*}.__*)" verbose_echo "manfile=${manfile}" diff -N -x '*CVS*' -r -u x11r681/xc/doc/hardcopy/XPRINT/Xprint_FAQ.html x11r682/xc/doc/hardcopy/XPRINT/Xprint_FAQ.html --- xc/doc/hardcopy/XPRINT/Xprint_FAQ.html 2004-08-11 19:51:23.000000000 +0200 +++ xc/doc/hardcopy/XPRINT/Xprint_FAQ.html 2004-12-15 08:17:48.000000000 +0100 @@ -3,7 +3,7 @@

Version: 0.9.1

- Last-Modified: 2004/06/14 08:15:16 + Last-Modified: 2004/10/08 01:05:21

Maintained-by: Roland Mainz @@ -289,48 +289,48 @@ What is going wrong here ?

Q: What is XpStartDoc for ? -
Q: +
Q: How does the XLFD for printer-builtin fonts look like ? / How can I find/identify printer-builtin fonts ? -
Q: +
Q: How can I scale images using the Xprint API ? -
Q: +
Q: Can I pass my own PostScript code (fragment) to the print spooler instead of letting Xprt's PostScript DDX generate it ? -
Q: +
Q: When I use XpPutDocumentData I get a BadValue X protocol error. Any idea what am I doing wrong ? -
Q: +
Q: How do I use the XprintUtil library ?
Q: Why does the XGetImage not work for Xprt ? -
Q: +
Q: How to print with Xt/Athena widgets ? -
Q: +
Q: How to print with Xt/Motif widgets ? -
Q: +
Q: What are the differences between normal display and Xprint display ? -
Q: +
Q: How do I scale images ? -
Q: +
Q: libXp Image scaling vs. max. request size ? -
Q: +
Q: How can I use XprintUtils ? -
Q: +
Q: How do I calculate the DPI values for Xprt DDX screens ? -
Q: +
Q: How do I find scaleable fonts ? -
Q: +
Q: How do I find printer-builtin fonts ? -
Q: +
Q: The XLFD for Printer-builtin fonts look like bitmap fonts - is that bad ? -
Q: +
Q: When printing using the XawPrintShell/XmPrintShell print shells my PostScript output is always corrupt. What am I doing wrong ? -
Q: +
Q: When printing using the XawPrintShell/XmPrintShell print shells I always get a grey/dithered background on paper. Any idea how to change that to "white" ? -
Q: +
Q: Are there any caveats/suggestions when printing via Xt/Motif2 widgets ?
Q: Can I change the paper size/resolution/page orientation/etc. when printing using the @@ -810,9 +810,9 @@

Q: What is XpStartDoc for ? -
Q: +
Q: How does the XLFD for printer-builtin fonts look like ? / How can I find/identify printer-builtin fonts ? -
Q: +
Q: How can I scale images using the Xprint API ? -
Q: +
Q: Can I pass my own PostScript code (fragment) to the print spooler instead of letting Xprt's PostScript DDX generate it ? -
Q: +
Q: When I use XpPutDocumentData I get a BadValue X protocol error. Any idea what am I doing wrong ? -
Q: +
Q: How do I use the XprintUtil library ?
Q: Why does the XGetImage not work for Xprt ? -
Q: +
Q: How to print with Xt/Athena widgets ? -
Q: +
Q: How to print with Xt/Motif widgets ? -
Q: +
Q: What are the differences between normal display and Xprint display ? -
Q: +
Q: How do I scale images ? -
Q: +
Q: libXp Image scaling vs. max. request size ? -
Q: +
Q: How can I use XprintUtils ? -
Q: +
Q: How do I calculate the DPI values for Xprt DDX screens ? -
Q: +
Q: How do I find scaleable fonts ? -
Q: +
Q: How do I find printer-builtin fonts ? -
Q: +
Q: The XLFD for Printer-builtin fonts look like bitmap fonts - is that bad ? -
Q: +
Q: When printing using the XawPrintShell/XmPrintShell print shells my PostScript output is always corrupt. What am I doing wrong ? -
Q: +
Q: When printing using the XawPrintShell/XmPrintShell print shells I always get a grey/dithered background on paper. Any idea how to change that to "white" ? -
Q: +
Q: Are there any caveats/suggestions when printing via Xt/Motif2 widgets ?
Q: Can I change the paper size/resolution/page orientation/etc. when printing using the @@ -2875,7 +2875,7 @@ Because most applications of the day are only printing one document per job, XpStartPage was designed that it generates a "synthetic" XpStartDoc if it has not been called yet. -

Q:

+

Q:

How does the XLFD for printer-builtin fonts look like ? / How can I find/identify printer-builtin fonts ?

A:

There is no special XLFD scheme for printer-builtin fonts. @@ -2886,26 +2886,26 @@ thaht XListFonts and co. return both printer-builtin and normal fonts. Removing xp-list-internal-printer-fonts will make printer-builtin fonts disappear, removing xp-list-glyph-fonts will make normal glyph fonts disappear from font lists. -

Q:

+

Q:

How can I scale images using the Xprint API ?

A:

XXX -

Q:

+

Q:

Can I pass my own PostScript code (fragment) to the print spooler instead of letting Xprt's PostScript DDX generate it ?

A:

XXX -

Q:

+

Q:

When I use XpPutDocumentData I get a BadValue X protocol error. Any idea what am I doing wrong ?

A:

XXX -

Q:

+

Q:

How do I use the XprintUtil library ?

A:

XXX -

Q:

+

Q:

Why does the XGetImage not work for Xprt ?

A:

There are at least three reasons why XGetImage does not work for Xprt: @@ -2930,10 +2930,10 @@ (which means: A XGetImage implementation would return image data but glyphs rendered using the printer-builtin fonts would be missing).

-

Q:

+

Q:

How to print with Xt/Athena widgets ?

A:

- There are two examples in the Xprint.org and X11R6.7.1 source trees which demonstrate how to use Xprint using + There are two examples in the Xprint.org and X11R6.8.0 source trees which demonstrate how to use Xprint using Athena widgets:

  1. xc/programs/xphelloworld/xpawhelloworld/ contains a simple @@ -2945,40 +2945,40 @@ XmPrintShell should be used since this is the easier way to add print support to an Athena application).

-

Q:

+

Q:

How to print with Xt/Motif widgets ?

A:

The Xprint.org source tree contains the xpxmhelloworld (xc/programs/xphelloworld/xpxmhelloworld/) application to demonstrate how to print using the Motif2 toolkit. -

Q:

+

Q:

What are the differences between normal display and Xprint display ?

A:

XXX -

Q:

+

Q:

How do I scale images ?

A:

XXX -

Q:

+

Q:

libXp Image scaling vs. max. request size ?

A:

XXX -

Q:

+

Q:

How can I use XprintUtils ?

A:

XXX -

Q:

+

Q:

How do I calculate the DPI values for Xprt DDX screens ?

A:

XXX -

Q:

+

Q:

How do I find scaleable fonts ?

A:

XXX -

Q:

+

Q:

How do I find printer-builtin fonts ?

A:

XXX -

Q:

+

Q:

The XLFD for Printer-builtin fonts look like bitmap fonts - is that bad ?

A:

No, this is not "bad". The XLFD of a printer-builtin font only looks like a bitmap font since @@ -2986,7 +2986,7 @@ AFAIK specifies the resolution which was used for generating the metrics) - however this does not change the fact that the printer-builtin fonts are outline scaleable fonts these fonts reside in the printer's ROM). -

Q:

+

Q:

When printing using the XawPrintShell/XmPrintShell print shells my PostScript output is always corrupt. What am I doing wrong ?

A:

@@ -2999,13 +2999,13 @@ XtSetArg(args[n], XmNcursorPositionVisible, False); ...

-

Q:

+

Q:

When printing using the XawPrintShell/XmPrintShell print shells I always get a grey/dithered background on paper. Any idea how to change that to "white" ?

A:

XXX -

Q:

+

Q:

Are there any caveats/suggestions when printing via Xt/Motif2 widgets ?

A:

There are a couple of Xt resources which may likely differ from the normal values (e.g. those values @@ -3054,7 +3054,7 @@ a margin either.

-

Q:

+

Q:

Can I change the paper size/resolution/page orientation/etc. when printing using the XawPrintShell/XmPrintShell print shells ?

A:

@@ -3069,51 +3069,51 @@ XmNminX, XmNminY, XmNmaxX and XmNmaxX (XmPrintShell) are updated based on events send by the Xp Extension and then the print shell is resized based on the new values (XawPrintShell is slightly more flexible since the size mode can be defined using the XawNlayoutMode attribute)). -

Q:

+

Q:

Where can I find an example how to print with Xprint using the OpenGL/GLX API ?

A:

- In Xorg release 6.7.1 Xprint support was added to the GLX demo application "glxgears" + In Xorg release 6.8.0 Xprint support was added to the GLX demo application "glxgears" (xc/programs/Xserver/glxgears/). -

Known bugs

Problem +

Known bugs

Problem Xprt build from Xfree86 sources is completely broken and unuseable. -
Problem +
Problem The code which matches XLFD names to PS Type1 font names is case-sensitive in Xprts build from X.org X11R6.5.1/X11R6.6 and the current Solaris Xprt. This may cause that the PS DDX refuses to download PS Type1 fonts. -
Problem +
Problem Xprt build from X11R6.5.1/X11R6.6 sources and Solaris's version of Xprt can only download PFA (PS ASCII font) fonts which ends of the ending "*.pfa". -
Problem +
Problem There is an issue how the Linux and Solaris Xprt handles the "copy-count" of a print job. The result may be that a job with n copies of a document end-up in n jobs with n copies (usually equals to n^2 copies). -
Problem +
Problem Xprt build from Xfree86 sources is completely broken and unuseable. -
Problem +
Problem The code which matches XLFD names to PS Type1 font names is case-sensitive in Xprts build from X.org X11R6.5.1/X11R6.6 and the current Solaris Xprt. This may cause that the PS DDX refuses to download PS Type1 fonts. -
Problem +
Problem Xprt build from X11R6.5.1/X11R6.6 sources and Solaris's version of Xprt can only download PFA (PS ASCII font) fonts which ends of the ending "*.pfa". -
Problem +
Problem There is an issue how the Linux and Solaris Xprt handles the "copy-count" of a print job. The result may be that a job with n copies of a document end-up in n jobs with n copies (usually equals to n^2 copies). -
Problem

+

Problem

Xprt build from Xfree86 sources is completely broken and unuseable.

Solution

Build Xprt from the CVS tree at http://xprint.mozdev.org/ or the X.org X11R6.5.1 sources (note that the client side Xprint extension library ("libXp.so") from Xfree86 is not broken and do not need to be replaced). -

Problem

+

Problem

The code which matches XLFD names to PS Type1 font names is case-sensitive in Xprts build from X.org X11R6.5.1/X11R6.6 and the current Solaris Xprt. This may cause that the PS DDX refuses to @@ -3121,7 +3121,7 @@

Solution

Patch available, I am looking for a way to get the patch into the X11 and Solaris source trees... -

Problem

+

Problem

Xprt build from X11R6.5.1/X11R6.6 sources and Solaris's version of Xprt can only download PFA (PS ASCII font) fonts which ends of the ending "*.pfa". @@ -3131,7 +3131,7 @@ I am looking for a way to get the patch into the X11 and Solaris source trees (the fixed version can download both PFA/PFB fonts in PFA format and even handles non-standard file extensions). -

Problem

+

Problem

There is an issue how the Linux and Solaris Xprt handles the "copy-count" of a print job. The result may be that a job with n copies of a document end-up in n jobs with n copies (usually equals diff -N -x '*CVS*' -r -u x11r681/xc/doc/hardcopy/XPRINT/Xprint_FAQ.txt x11r682/xc/doc/hardcopy/XPRINT/Xprint_FAQ.txt --- xc/doc/hardcopy/XPRINT/Xprint_FAQ.txt 2004-08-11 19:51:24.000000000 +0200 +++ xc/doc/hardcopy/XPRINT/Xprint_FAQ.txt 2004-12-15 08:17:48.000000000 +0100 @@ -8,7 +8,7 @@ Version: 0.9.1 - Last-Modified: 2004/06/14 08:15:16 + Last-Modified: 2004/10/08 01:05:21 Maintained-by: Roland Mainz <[1]roland.mainz@nrubsig.org> @@ -778,12 +778,12 @@ * Motif/LessTif toolkits (full framework incl. special widgets like XmPrintShell) * Athena toolkit (full framework incl. special widgets like - XawPrintShell, starting with X.org release 6.7.1) - * Xedit, Xman, Xmore, etc. (starting with X.org release 6.7.1) + XawPrintShell, starting with X.org release 6.8.0) + * Xedit, Xman, Xmore, etc. (starting with X.org release 6.8.0) * [173]Common Desktop Environment (CDE) 2.x * [174]Mozilla, FireFox, ThunderBird, etc. * Eclipse - * KDE/Qt support is planned for Q3/2004 + * KDE/Qt support is planned for Q1/2005 * StarOffice 5.x * etc. @@ -2813,7 +2813,7 @@ How to print with Xt/Athena widgets ? A: - There are two examples in the Xprint.org and X11R6.7.1 source trees + There are two examples in the Xprint.org and X11R6.8.0 source trees which demonstrate how to use Xprint using Athena widgets: 1. xc/programs/xphelloworld/xpawhelloworld/ contains a simple demo application which prints a Athena widget using the XawPrintShell @@ -2998,7 +2998,7 @@ OpenGL/GLX API ? A: - In Xorg release 6.7.1 Xprint support was added to the GLX demo + In Xorg release 6.8.0 Xprint support was added to the GLX demo application "glxgears" ([324]xc/programs/Xserver/glxgears/). Known bugs diff -N -x '*CVS*' -r -u x11r681/xc/doc/hardcopy/XPRINT/Xprint_FAQ.xml x11r682/xc/doc/hardcopy/XPRINT/Xprint_FAQ.xml --- xc/doc/hardcopy/XPRINT/Xprint_FAQ.xml 2004-08-11 19:51:24.000000000 +0200 +++ xc/doc/hardcopy/XPRINT/Xprint_FAQ.xml 2004-12-15 08:17:48.000000000 +0100 @@ -44,7 +44,7 @@ Version: 0.9.1 - Last-Modified: 2004/06/14 08:15:16 + Last-Modified: 2004/10/08 01:05:21 Maintained-by: @@ -756,7 +756,7 @@ You can setup a TTF-aware X font server ("xfs", see - xfs__mansuffix__) + xfs__appmansuffix__) with the matching TrueType fonts and add the font server location to Xprt's font path. @@ -901,12 +901,12 @@ - Athena toolkit (full framework incl. special widgets like XawPrintShell, starting with X.org release 6.7.1) + Athena toolkit (full framework incl. special widgets like XawPrintShell, starting with X.org release 6.8.0) - Xedit, Xman, Xmore, etc. (starting with X.org release 6.7.1) + Xedit, Xman, Xmore, etc. (starting with X.org release 6.8.0) @@ -926,7 +926,7 @@ - KDE/Qt support is planned for Q3/2004 + KDE/Qt support is planned for Q1/2005 @@ -1381,14 +1381,14 @@ can be handled in various ways - like per-cookie (using MIT-MAGIC-COOKIE-1 authentification), per-user (using SUN-DES-1 or MIT-KERBEROS-5 auth., see - (see xhost__mansuffix__)) - and/or per-machine (using "xhost" (see xhost__mansuffix__) and/or + (see xhost__appmansuffix__)) + and/or per-machine (using "xhost" (see xhost__appmansuffix__) and/or /etc/X<dpy>.hosts (<dpy> == display number, - e.g. /etc/X0.hosts for display 0) (see Xserver__mansuffix__)) + e.g. /etc/X0.hosts for display 0) (see Xserver__appmansuffix__)) Consult manual pages Xsecurity__miscmansuffix__, - xhost__mansuffix__, - Xserver__mansuffix__ + xhost__appmansuffix__, + Xserver__appmansuffix__ etc. for further details. @@ -1403,7 +1403,7 @@ Logging access to Xprt can be done using the standard Xserver auditing, - see the Xserver__mansuffix__ + see the Xserver__appmansuffix__ manual page, option "-audit" @@ -1447,7 +1447,7 @@ See - xplsprinters__mansuffix__ + xplsprinters__appmansuffix__ for futher usage and a description of the output. @@ -2972,7 +2972,7 @@ If you do not want to use access control for Xprt then you can start it - with the option "-ac" (see Xserver__mansuffix__) + with the option "-ac" (see Xserver__appmansuffix__) to disable the access control. Example: @@ -3002,7 +3002,7 @@ Host-based access control can be archived using /etc/X<dpy>.hosts (<dpy> == display number, e.g. /etc/X0.hosts for display 0 (see - Xserver__mansuffix__ + Xserver__appmansuffix__ manual page for further details)).

Example @@ -3150,7 +3150,7 @@ Xserver must run set-gid "root" to access these directories). Either fix the permission or start Xprt with the option "-pn". Using this option requires to access the server always with - <hostname>:<displaynum> (see Xserver__mansuffix__ + <hostname>:<displaynum> (see Xserver__appmansuffix__ manual page for the side-effects of this option). @@ -4316,7 +4316,7 @@ - There are two examples in the Xprint.org and X11R6.7.1 source trees which demonstrate how to use Xprint using + There are two examples in the Xprint.org and X11R6.8.0 source trees which demonstrate how to use Xprint using Athena widgets: @@ -4662,7 +4662,7 @@ - In Xorg release 6.7.1 Xprint support was added to the GLX demo application "glxgears" + In Xorg release 6.8.0 Xprint support was added to the GLX demo application "glxgears" (xc/programs/Xserver/glxgears/). diff -N -x '*CVS*' -r -u x11r681/xc/doc/man/X11/XGetWProp.man x11r682/xc/doc/man/X11/XGetWProp.man --- xc/doc/man/X11/XGetWProp.man 2004-04-23 20:42:09.000000000 +0200 +++ xc/doc/man/X11/XGetWProp.man 2004-12-15 08:22:55.000000000 +0100 @@ -153,6 +153,7 @@ .HP Atom *XListProperties\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int *\fInum_prop_return\fP\^); +.HP int XChangeProperty\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom \fIproperty\fP\^, Atom \fItype\fP\^, int \fIformat\fP\^, int \fImode\fP\^, unsigned char *\fIdata\fP\^, int \fInelements\fP\^); diff -N -x '*CVS*' -r -u x11r681/xc/doc/man/Xt/XtNextEv.man x11r682/xc/doc/man/Xt/XtNextEv.man --- xc/doc/man/Xt/XtNextEv.man 2004-04-23 20:42:13.000000000 +0200 +++ xc/doc/man/Xt/XtNextEv.man 2005-01-13 00:37:05.000000000 +0100 @@ -137,7 +137,7 @@ Boolean XtPeekEvent(XEvent *\fIevent_return\fP); .HP Boolean XtPending(void); -.Hp +.HP void XtProcessEvent(XtInputMask \fImask\fP); .HP void XtMainLoop(void); diff -N -x '*CVS*' -r -u x11r681/xc/doc/man/general/Imakefile x11r682/xc/doc/man/general/Imakefile --- xc/doc/man/general/Imakefile 2004-04-23 20:42:14.000000000 +0200 +++ xc/doc/man/general/Imakefile 2004-12-15 08:38:28.000000000 +0100 @@ -8,8 +8,16 @@ MANSUFFIX = $(MISCMANSUFFIX) InstallManPage(X,$(MANDIR)) +InstallManPage(Xprint,$(MANDIR)) InstallManPageLong(Consortium,$(MANDIR),XConsortium) InstallManPageLong(Standards,$(MANDIR),XStandards) InstallManPageLong(XProjectTeam,$(MANDIR),XProjectTeam) InstallManPageAliases(XProjectTeam,$(MANDIR),X.Org) InstallManPageLong(security,$(MANDIR),Xsecurity) + +#ifdef HasDocBookTools +all:: Xprint.man Xprint.html + +ConvertDocBookToManPage(Xprint.sgml, Xprint.man) +ConvertDocBookToHTML(Xprint.sgml, Xprint.html) +#endif /* HasDocBookTools */ diff -N -x '*CVS*' -r -u x11r681/xc/doc/man/general/Xprint.html x11r682/xc/doc/man/general/Xprint.html --- xc/doc/man/general/Xprint.html 1970-01-01 01:00:00.000000000 +0100 +++ xc/doc/man/general/Xprint.html 2004-12-15 08:38:28.000000000 +0100 @@ -0,0 +1,296 @@ +Xprint

Name

Xprint — The "X print service" - a portable, network-transparent printing system based on the X11 protocol

Synopsis

Xprint is a very flexible, extensible, scaleable, client/server + print system based on ISO 10175 (and some other specs) and the X11 + rendering protocol. + Using Xprint an application can search, query and use devices like + printers, FAX machines or create documents in formats like PDF. + In particular, an application can seek a printer, query supported + attributes (like paper size, trays, fonts etc.), configure the printer + device to match it’s needs and print on it like on any other X device + reusing parts of the code which is used for the video card Xserver. +

OVERVIEW

+ The "X Print Service" technology allows X rendering to devices such as + printers and fax. Most of the service is available in the X11 + technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE). + Modifications have also been made to the LessTif/Motif/Qt technology + stacks to support Xprint. +

+ The Xp portion consists of: +

  • Xp Extension for the X-Server (included in the X-Server Xprt)

  • Xp Extension API for the client side (libXp/libXprintUtils)

  • PCL ddx driver that converts core X to native PCL

  • PDF ddx driver that converts core X to native PDF

  • PostScript ddx driver that converts core X to native PostScript

  • Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters

+ From an X clients perspective, it can attach to one of two nearly + identical X-Servers, a "Video" X-Server, and a "Print" X-Server + which has the additional Xp capability but otherwise looks and + behaves the same. +

HOW THE X PRINT SERVICE WORKS

+ The X Print Service expands on the traditional X-Server and Xlib world + in four ways. + +

  1. + Most obvious is the use of "print ddx drivers" instead of + "video ddx drivers". While a video ddx driver modifies pixels + in a video frame buffer, a print ddx driver generates "page + description language (PDL)" output (such as PCL, PDF or PostScript) + or sends the print rendering instructions to a platform-specific + print API (like Win32/GDI). +

    + Once a print ddx driver generates PDL output, it can be sent to + a spooler such as lp(1) + or retrieved by the client (to implement functionality like "print-to-file"). +

    + Though not currently done, a single X-Server can support both + print and video ddx drivers. +

  2. + Since printers support "paged" output, unlike video, a portion + of the Xp Extension supports APIs to delineate printed output. + For example, XpStartPage and XpEndPage tell the X-Server where + a physical page starts and ends in an otherwise continuous + stream of X rendering primitives. Likewise, XpStartJob and + XpEndJob determine when a collection of pages starts and ends. + XpEndJob typically causes the generated PDL to be submitted to + a spooler, such as lp(1). +

  3. + Since printers have extensive capabilities, another portion of + the Xp Extension supports APIs to manipulate "print contexts". +

    + Once a printer is selected using the Xp Extension API, a print + context to represent it can be created. A print context + embodies the printer selected - it contains the printer's + default capabilities, selectable range of capabilities, + printer state, and generated output. Some "attributes" within + the print context can be modified by the user, and the + X-Server and print ddx driver will react accordingly. For + example, the attribute "content-orientation" can be set to + "landscape" or "portrait" (if the printer supports these + values - which can be queried using the Xprint API as well). +

  4. + Since printers can have "built in" fonts, the Xp Extension in + the X-Server works with the print ddx drivers to make + available (for printing only) additional fonts on a per print + context basis. +

    + When a print context is created and set for a given printer, + the X font calls may be able to access additional printer + fonts. To do this (typically), the X-Server must have access + to "printer metric files" (.pmf) that describe at minimum the + metrics of the built in fonts. +

USAGE

+ There are three tasks to start the X Print Service: +

  1. configuring the X Print Server,

  2. starting the X Print Service

  3. configuring the user session so that clients can find the running X Print Service

+ The tasks are described in detail below. +

SERVER CONFIGURATION

+ The X Print Server (Xprt) can read a number of configuration files which + control its behavior and support for printers. Each vendor platform has + a default location for this information. Xprt can also read the + environment variable XPCONFIGDIR to locate alternate configuration + directories. Common settings include: + +

export XPCONFIGDIR=/X11/lib/X11/XpConfig/
export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/

+ Xprt has many built-in defaults, and lacking any configuration files, + will immediately try to support all printers visible via lpstat(1). +

+ In order of importance for configuration by a system administrator, the + configuration files for a "C" locale are as follows (see Xprt(7) for more + details (including support for non-"C" locales)): +

${XPCONFIGDIR}/C/print/Xprinters

+ 'Xprinters' is the top most configuration file. It tells + Xprt which specific printer names (e.g. mylaser) should + be supported, and whether lpstat(1) or other commands + should be used to automatically supplement the list of + printers. +

${XPCONFIGDIR}/C/print/attributes/printer

+ The 'printer' file maps printer names to model + configurations (see 'model-config' below). For example, + "mylaser" could be mapped to a "HPDJ1600C", and all other + arbitrary printers could be mapped to a default, such as + "HPLJ4SI". When depending on lpstat(1) in the Xprinters + file, setting up defaults in 'printer' becomes all the + more important. +

${XPCONFIGDIR}/C/print/attributes/document

+ The 'document' file specifies the initial document values + for any print jobs. For example, which paper tray to + use, what default resolution, etc. +

${XPCONFIGDIR}/C/print/attributes/job

+ The 'job' file specifies the initial job values for any + print jobs. For example, "notification-profile" can be + set so that when a print job is successfully sent to a + printer, e-mail is sent to the user. +

${XPCONFIGDIR}/C/print/models/PSdefault/model-config, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf

+ The 'model-config' file has attributes that describe the + printer model’s capabilities and default settings. + Printer model fonts may also be present. The model-config + file also identifies the print ddx driver to be used. + + For each printer model supported, a complete hierarchy of + files should exist. In most cases, these files do not + need to be modified. +

${XPCONFIGDIR}/C/print/ddx-config/raster/pcl, ${XPCONFIGDIR}/C/print/ddx-config/raster/pdf, ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript

+ The print ddx drivers can have highly specific + configuration files to control their behavior. In most + cases, these files do not need to be modified. +

+ + More information in how to configure and customize the X print server can be found in the + Xprt(7) + manual page. +

STARTING UP

+ The summary checklist for starting the X Print Service is as follows: + +

  1. + Choose an execution model for the X Print Service. The X + Print Service can be run on a per-user session basis, per + machine basis, or can be run on a few machines globally + available to a number of users. +

  2. + If print jobs are to be submitted to a spooler (almost always + the case), make sure all needed printers are available to the + spooler subsystem (most often lp(1)) + on the same machine running the X Print Service. +

  3. + Configure the X Print Server. See ``X Print Server + Configuration''. +

  4. + Depending on #1, start the X Print Server process "Xprt", and + then the toolkit-specific Print Dialog Manager Daemon process + (such as CDEnext's "dtpdmd") at the appropriate times. + Note that libXprintUtils-based applications/toolkits do not need + a Print Dialog Manager Daemon process to use Xprint. +

+ The details are described below. +

+ Because the X Print Service is based on X, it can be easily distributed. + The most significant factors in which execution model to choose will be + driven by: +

  • + how many printers will be accessable through the printer + subsystem on any given machine. A system administrator may + choose to cluster printers on a few given machines, or + scatter them across an organization and possibly make + extensive use of remote spoolers to make them globally + available. +

  • + how many machines will need a copy of the X Print Server + configuration files. The files have been architected so + that one super-set version of them can be maintained and + distributed (e.g. via NFS), and a per-machine or per-user + version of the `Xprinters' is all that is needed to have the + appropriate information in them utilized or ignored. +

  • + how many users can demand services from a given X Print + Service. +

+ + With the above in mind, some obvious execution models include: +

  • + Global - in this model, the system administrator is choosing + to run the X Print Service on a *few* select machines with + appropriate printers configured, and allow clients access to + the global resource. This can centralize the administration + of printers and configuration files, but may have to be + monitored for performance loading. +

    + Startup would likely be done by boot-up scripts (such as /etc/init.d/xprint). +

  • + Per-machine - every machine with potential X Print Service + users would run the service. Printer and configuration file + administration is decentralized, and usage would be limited + to the users on the machine. +

    + Startup would likely be done by boot-up scripts (such as /etc/init.d/xprint). +

  • + Per-user session - every user would run an entire X Print + Service for themselves. In the future, the Video X Server + normally started may contain Print X Server capability, so + this model becomes very natural. +

    + Startup would likely be done at session login or by + launching actions or processes manually once the user + logs in. Note: Deamons like "dtpdmd" must be started after Xprt. +

+ Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage): +

  1. [machineA] % Xprt [-XpFile Xprinters file] [:dispNum] 

    + Note that Xprt will look for configuration files in either + a default location or where XPCONFIGDIR points. +

    -XpFile specifies an alternate `Xprinters' file, rather + than the default one or `${XPCONFIGDIR}/C/print/Xprinters'. +

  2. [machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] 

    + The dtpdmd will maintain an X-Selection on the X-Server, + and will start dtpdm's as required to service requests. +

+ In all but the per-user session model, the machine running the dtpdmd + (thus dtpdm's) will need display authorization to the users video + display. +

CLIENT CONFIGURATION

+ Once a X Print Server and dtpdmd have been started -- many of them + in some cases -- clients will need to find and use them. There are + two mechanisms that allow clients to discover X Print Servers and + printers. + +

  • + "X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print + applications, the following notation is understood: +

    printer_name@machine[:dispNum]

    + For example: +

    colorlj7@printhub:2

    + In the above example, the X Print Server running at `printhub:2' + is assumed to support the printer named `colorlj7'. +

  • ${XPSERVERLIST} - assuming usage of the DtPrint print dialogs, + the environment variable ${XPSERVERLIST} can contain a list + of X Print Servers. For example: +

    XPSERVERLIST="printhub:2 printhub:3 otherdept:0"

    + Then in the dialogs, only a printer name needs to be entered. + The dialog will then search the X Print Servers in ${XPSERVERLIST} + for a server than supports the printer, and then establish + contact. +

END-USER SEQUENCE

+ From most CDEnext applications, printing is accomplished by bringing + down the File menu and selecting Print.... This will result in + the DtPrintSetupBox dialog, which will request the name of a printer, + and offer limited capability to configure print options (e.g. number + of copies). If the user wishes, they can select Setup..., which + will start a dtpdm capable of modifying additional print options. + Finally, the user should select Print. +

ENVIRONMENT

${XPCONFIGDIR}

This environment variable points to the root + of the Xprint server configuration directory hierarchy. + If the variable is not defined, the default + path is be assumed. The default path may be + /usr/X11R6/lib/X11/xserver/, + /usr/lib/X11/xserver/, + /usr/share/Xprint/xserver/ or + /usr/openwin/server/etc/XpConfig, depending on the + system, and may be configured in /etc/init.d/xprint.

${LANG}

+ This environment variable selects the locale settings used by the Xprint server. + Xprt allows language-specific settings (stored in ${XPCONFIGDIR}/${LANG}/print/) + which will override the default settings (stored in ${XPCONFIGDIR}/C/print/). + If ${LANG} is not set "C" is assumed. +

${XPSERVERLIST}

The environment variable ${XPSERVERLIST} contains a list + of display identifiers (separated by whitespace) which tell an + application where it can find the Xprint servers. Usually + ${XPSERVERLIST} is set by the profile startup scripts (e.g. + /etc/profile or /etc/profile.d/xprint.sh) using the output of + /etc/init.d/xprint get_xpserverlist.

Example: +

+		export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`"

Alternatively ${XPSERVERLIST} can be set + manually. Example:

+		export XPSERVERLIST="littlecat:80 bitdog:72"

+ instructs an application to find an Xprint server at display + 80 on the machine "littlecat" and at display 72 on the + machine bigdog. +

${XPRINTER}

The environment variable ${XPRINTER} + defines the default printer used by print + applications. The syntax is either + printername or + printername@display.

Examples: +

XPRINTER=ps003

+ tells an application to look for the + first printer named "ps003" on all Xprint + servers.

XPRINTER=hplaser19@littlecat:80

+ tells an application to use the printer "hplaser19" + on the Xprint server at display + "littlecat:80".

If ${XPRINTER} is not set the applications + will examine the values of the ${PDPRINTER}, + ${LPDEST}, and + ${PRINTER} environment variables (in that order). +

SEE ALSO

X11(7), xplsprinters(7), xprehashprinterlist(7), xphelloworld(7), xpxmhelloworld(7), xpawhelloworld(7), xpxthelloworld(7), xpsimplehelloworld(7), Xserver(7), Xprt(7), libXp(3x), libXprintUtils(3x), libXprintAppUtils(3x), XmPrintShell(3x), XawPrintShell(3x), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)

AUTHORS

+ This manual page was written by + Roland Mainz based on the original X11R6.6 + xc/programs/Xserver/XpConfig/README. +

diff -N -x '*CVS*' -r -u x11r681/xc/doc/man/general/Xprint.man x11r682/xc/doc/man/general/Xprint.man --- xc/doc/man/general/Xprint.man 1970-01-01 01:00:00.000000000 +0100 +++ xc/doc/man/general/Xprint.man 2004-12-15 08:38:28.000000000 +0100 @@ -0,0 +1,421 @@ +.\" -*- coding: us-ascii -*- +.TH Xprint __miscmansuffix__ "8 October 2004" +.SH NAME +Xprint \- The "X print service" - a portable, network-transparent printing system based on the X11 protocol +.SH SYNOPSIS +Xprint is a very flexible, extensible, scaleable, client/server +print system based on ISO 10175 (and some other specs) and the X11 +rendering protocol. +Using Xprint an application can search, query and use devices like +printers, FAX machines or create documents in formats like PDF. +In particular, an application can seek a printer, query supported +attributes (like paper size, trays, fonts etc.), configure the printer +device to match it\(cqs needs and print on it like on any other X device +reusing parts of the code which is used for the video card Xserver. +.SH OVERVIEW +The "X Print Service" technology allows X rendering to devices such as +printers and fax. Most of the service is available in the X11 +technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE). +Modifications have also been made to the LessTif/Motif/Qt technology +stacks to support Xprint. +.PP +The Xp portion consists of: +.TP 0.2i +\(bu +Xp Extension for the X-Server (included in the X-Server Xprt) +.TP 0.2i +\(bu +Xp Extension API for the client side (libXp/libXprintUtils) +.TP 0.2i +\(bu +PCL ddx driver that converts core X to native PCL +.TP 0.2i +\(bu +PDF ddx driver that converts core X to native PDF +.TP 0.2i +\(bu +PostScript ddx driver that converts core X to native PostScript +.TP 0.2i +\(bu +Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters +.PP +.PP +From an X clients perspective, it can attach to one of two nearly +identical X-Servers, a "Video" X-Server, and a "Print" X-Server +which has the additional Xp capability but otherwise looks and +behaves the same. +.SH "HOW THE X PRINT SERVICE WORKS" +The X Print Service expands on the traditional X-Server and Xlib world +in four ways. +.TP 0.4i +1. +Most obvious is the use of "print ddx drivers" instead of +"video ddx drivers". While a video ddx driver modifies pixels +in a video frame buffer, a print ddx driver generates "page +description language (PDL)" output (such as PCL, PDF or PostScript) +or sends the print rendering instructions to a platform-specific +print API (like Win32/GDI). + +Once a print ddx driver generates PDL output, it can be sent to +a spooler such as \fBlp\fR(1) +or retrieved by the client (to implement functionality like "print-to-file"). + +Though not currently done, a single X-Server can support both +print and video ddx drivers. +.TP 0.4i +2. +Since printers support "paged" output, unlike video, a portion +of the Xp Extension supports APIs to delineate printed output. +For example, XpStartPage and XpEndPage tell the X-Server where +a physical page starts and ends in an otherwise continuous +stream of X rendering primitives. Likewise, XpStartJob and +XpEndJob determine when a collection of pages starts and ends. +XpEndJob typically causes the generated PDL to be submitted to +a spooler, such as \fBlp\fR(1). +.TP 0.4i +3. +Since printers have extensive capabilities, another portion of +the Xp Extension supports APIs to manipulate "print contexts". + +Once a printer is selected using the Xp Extension API, a print +context to represent it can be created. A print context +embodies the printer selected - it contains the printer's +default capabilities, selectable range of capabilities, +printer state, and generated output. Some "attributes" within +the print context can be modified by the user, and the +X-Server and print ddx driver will react accordingly. For +example, the attribute "content-orientation" can be set to +"landscape" or "portrait" (if the printer supports these +values - which can be queried using the Xprint API as well). +.TP 0.4i +4. +Since printers can have "built in" fonts, the Xp Extension in +the X-Server works with the print ddx drivers to make +available (for printing only) additional fonts on a per print +context basis. + +When a print context is created and set for a given printer, +the X font calls may be able to access additional printer +fonts. To do this (typically), the X-Server must have access +to "printer metric files" (.pmf) that describe at minimum the +metrics of the built in fonts. +.PP +.SH USAGE +There are three tasks to start the X Print Service: +.TP 0.4i +1. +configuring the X Print Server, +.TP 0.4i +2. +starting the X Print Service +.TP 0.4i +3. +configuring the user session so that clients can find the running X Print Service +.PP +.PP +The tasks are described in detail below. +.SH "SERVER CONFIGURATION" +The X Print Server (Xprt) can read a number of configuration files which +control its behavior and support for printers. Each vendor platform has +a default location for this information. Xprt can also read the +environment variable \fBXPCONFIGDIR\fR to locate alternate configuration +directories. Common settings include: + +export XPCONFIGDIR=/X11/lib/X11/XpConfig/ +.PP +export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/ + +.PP +Xprt has many built-in defaults, and lacking any configuration files, +will immediately try to support all printers visible via \fBlpstat\fR(1). +.PP +In order of importance for configuration by a system administrator, the +configuration files for a "C" locale are as follows (see \fBXprt\fR(__appmansuffix__) for more +details (including support for non-"C" locales)): +.TP +\fB${XPCONFIGDIR}/C/print/Xprinters\fR +\&'Xprinters' is the top most configuration file. It tells +Xprt which specific printer names (e.g. mylaser) should +be supported, and whether \fBlpstat\fR(1) or other commands +should be used to automatically supplement the list of +printers. +.TP +\fB${XPCONFIGDIR}/C/print/attributes/printer\fR +The 'printer' file maps printer names to model +configurations (see 'model-config' below). For example, +"mylaser" could be mapped to a "HPDJ1600C", and all other +arbitrary printers could be mapped to a default, such as +"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters +file, setting up defaults in 'printer' becomes all the +more important. +.TP +\fB${XPCONFIGDIR}/C/print/attributes/document\fR +The 'document' file specifies the initial document values +for any print jobs. For example, which paper tray to +use, what default resolution, etc. +.TP +\fB${XPCONFIGDIR}/C/print/attributes/job\fR +The 'job' file specifies the initial job values for any +print jobs. For example, "notification-profile" can be +set so that when a print job is successfully sent to a +printer, e-mail is sent to the user. +.TP +\fB${XPCONFIGDIR}/C/print/models/PSdefault/model\-config\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fR +The 'model-config' file has attributes that describe the +printer model\(cqs capabilities and default settings. +Printer model fonts may also be present. The model-config +file also identifies the print ddx driver to be used. +For each printer model supported, a complete hierarchy of +files should exist. In most cases, these files do not +need to be modified. +.TP +\fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pcl\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pdf\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/postscript\fR +The print ddx drivers can have highly specific +configuration files to control their behavior. In most +cases, these files do not need to be modified. +.PP +More information in how to configure and customize the X print server can be found in the +\fBXprt\fR(__appmansuffix__) +manual page. +.SH "STARTING UP" +The summary checklist for starting the X Print Service is as follows: +.TP 0.4i +1. +Choose an execution model for the X Print Service. The X +Print Service can be run on a per-user session basis, per +machine basis, or can be run on a few machines globally +available to a number of users. +.TP 0.4i +2. +If print jobs are to be submitted to a spooler (almost always +the case), make sure all needed printers are available to the +spooler subsystem (most often \fBlp\fR(1)) +on the same machine running the X Print Service. +.TP 0.4i +3. +Configure the X Print Server. See ``X Print Server +Configuration''. +.TP 0.4i +4. +Depending on #1, start the X Print Server process "Xprt", and +then the toolkit-specific Print Dialog Manager Daemon process +(such as CDEnext's "dtpdmd") at the appropriate times. +Note that libXprintUtils-based applications/toolkits do not need +a Print Dialog Manager Daemon process to use Xprint. +.PP +The details are described below. +.PP +Because the X Print Service is based on X, it can be easily distributed. +The most significant factors in which execution model to choose will be +driven by: +.TP 0.2i +\(bu +how many printers will be accessable through the printer +subsystem on any given machine. A system administrator may +choose to cluster printers on a few given machines, or +scatter them across an organization and possibly make +extensive use of remote spoolers to make them globally +available. +.TP 0.2i +\(bu +how many machines will need a copy of the X Print Server +configuration files. The files have been architected so +that one super-set version of them can be maintained and +distributed (e.g. via NFS), and a per-machine or per-user +version of the `Xprinters' is all that is needed to have the +appropriate information in them utilized or ignored. +.TP 0.2i +\(bu +how many users can demand services from a given X Print +Service. +.PP +With the above in mind, some obvious execution models include: +.TP 0.2i +\(bu +Global - in this model, the system administrator is choosing +to run the X Print Service on a *few* select machines with +appropriate printers configured, and allow clients access to +the global resource. This can centralize the administration +of printers and configuration files, but may have to be +monitored for performance loading. + +Startup would likely be done by boot-up scripts (such as \fB/etc/init.d/xprint\fR). +.TP 0.2i +\(bu +Per-machine - every machine with potential X Print Service +users would run the service. Printer and configuration file +administration is decentralized, and usage would be limited +to the users on the machine. + +Startup would likely be done by boot-up scripts (such as \fB/etc/init.d/xprint\fR). +.TP 0.2i +\(bu +Per-user session - every user would run an entire X Print +Service for themselves. In the future, the Video X Server +normally started may contain Print X Server capability, so +this model becomes very natural. + +Startup would likely be done at session login or by +launching actions or processes manually once the user +logs in. Note: Deamons like "dtpdmd" must be started after Xprt. +.PP +.PP +Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage): +.TP 0.4i +1. + +.nf +[machineA] % Xprt [\-XpFile ] [:dispNum] & +.fi + + +Note that Xprt will look for configuration files in either +a default location or where \fBXPCONFIGDIR\fR points. + +\fB\-XpFile\fR specifies an alternate `Xprinters' file, rather +than the default one or `\fB${XPCONFIGDIR}/C/print/Xprinters\fR'. +.TP 0.4i +2. + +.nf +[machineA] % dtpdmd \-d machineA[:dispNum] [\-l /tmp/dtpdmd.log] & +.fi + + +The dtpdmd will maintain an X-Selection on the X-Server, +and will start dtpdm's as required to service requests. +.PP +.PP +In all but the per-user session model, the machine running the dtpdmd +(thus dtpdm's) will need display authorization to the users video +display. +.SH "CLIENT CONFIGURATION" +Once a X Print Server and dtpdmd have been started -- many of them +in some cases -- clients will need to find and use them. There are +two mechanisms that allow clients to discover X Print Servers and +printers. +.TP 0.2i +\(bu +"X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print +applications, the following notation is understood: + + +.nf +printer_name@machine[:dispNum] +.fi + + +For example: + + +.nf +colorlj7@printhub:2 +.fi + + +In the above example, the X Print Server running at `printhub:2' +is assumed to support the printer named `colorlj7'. +.TP 0.2i +\(bu +\fB${XPSERVERLIST}\fR - assuming usage of the DtPrint print dialogs, +the environment variable \fB${XPSERVERLIST}\fR can contain a list +of X Print Servers. For example: + + +.nf +XPSERVERLIST="printhub:2 printhub:3 otherdept:0" +.fi + + +Then in the dialogs, only a printer name needs to be entered. +The dialog will then search the X Print Servers in \fB${XPSERVERLIST}\fR +for a server than supports the printer, and then establish +contact. +.PP +.SH "END-USER SEQUENCE" +From most CDEnext applications, printing is accomplished by bringing +down the menu and selecting . This will result in +the DtPrintSetupBox dialog, which will request the name of a printer, +and offer limited capability to configure print options (e.g. number +of copies). If the user wishes, they can select , which +will start a dtpdm capable of modifying additional print options. +Finally, the user should select . +.SH ENVIRONMENT +.TP +\fB${XPCONFIGDIR}\fR +This environment variable points to the root +of the Xprint server configuration directory hierarchy. +If the variable is not defined, the default +path is be assumed. The default path may be +\fB/usr/X11R6/lib/X11/xserver/\fR, +\fB/usr/lib/X11/xserver/\fR, +\fB/usr/share/Xprint/xserver/\fR or +\fB/usr/openwin/server/etc/XpConfig\fR, depending on the +system, and may be configured in \fB/etc/init.d/xprint\fR. +.TP +\fB${LANG}\fR +This environment variable selects the locale settings used by the Xprint server. +Xprt allows language-specific settings (stored in \fB${XPCONFIGDIR}/${LANG}/print/\fR) +which will override the default settings (stored in \fB${XPCONFIGDIR}/C/print/\fR). +If \fB${LANG}\fR is not set "C" is assumed. +.TP +\fB${XPSERVERLIST}\fR +The environment variable \fB${XPSERVERLIST}\fR contains a list +of display identifiers (separated by whitespace) which tell an +application where it can find the Xprint servers. Usually +\fB${XPSERVERLIST}\fR is set by the profile startup scripts (e.g. +\fB/etc/profile\fR or \fB/etc/profile.d/xprint.sh\fR) using the output of +\fB/etc/init.d/xprint get_xpserverlist\fR. + +Example: + +.nf + + export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" +.fi + + +Alternatively \fB${XPSERVERLIST}\fR can be set +manually. Example: + +.nf + + export XPSERVERLIST="littlecat:80 bitdog:72" +.fi + +instructs an application to find an Xprint server at display +80 on the machine "littlecat" and at display 72 on the +machine bigdog. +.TP +\fB${XPRINTER}\fR +The environment variable \fB${XPRINTER}\fR +defines the default printer used by print +applications. The syntax is either +\fIprintername\fR or +\fIprintername\fR@\fIdisplay\fR. + +Examples: +.RS +.TP +\fBXPRINTER=ps003\fR +tells an application to look for the +first printer named "ps003" on all Xprint +servers. +.TP +\fBXPRINTER=hplaser19@littlecat:80\fR +tells an application to use the printer "hplaser19" +on the Xprint server at display +"littlecat:80". +.RE + + +If \fB${XPRINTER}\fR is not set the applications +will examine the values of the \fB${PDPRINTER}\fR, +\fB${LPDEST}\fR, and +\fB${PRINTER}\fR environment variables (in that order). +.SH "SEE ALSO" +\fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBXprt\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/) +.SH AUTHORS +This manual page was written by +Roland Mainz based on the original X11R6.6 +\fBxc/programs/Xserver/XpConfig/README\fR. diff -N -x '*CVS*' -r -u x11r681/xc/doc/man/general/Xprint.sgml x11r682/xc/doc/man/general/Xprint.sgml --- xc/doc/man/general/Xprint.sgml 1970-01-01 01:00:00.000000000 +0100 +++ xc/doc/man/general/Xprint.sgml 2004-12-15 08:38:28.000000000 +0100 @@ -0,0 +1,627 @@ + + + + + + + Xprint + __miscmansuffix__ + + + Xprint + + The "X print service" - a portable, network-transparent printing system based on the X11 protocol + + + Xprint is a very flexible, extensible, scaleable, client/server + print system based on ISO 10175 (and some other specs) and the X11 + rendering protocol. + Using Xprint an application can search, query and use devices like + printers, FAX machines or create documents in formats like PDF. + In particular, an application can seek a printer, query supported + attributes (like paper size, trays, fonts etc.), configure the printer + device to match it’s needs and print on it like on any other X device + reusing parts of the code which is used for the video card Xserver. + + + + + OVERVIEW + + The "X Print Service" technology allows X rendering to devices such as + printers and fax. Most of the service is available in the X11 + technology stack as Xp, with the remainder in single toolkit stacks (e.g. DtPrint for CDE). + Modifications have also been made to the LessTif/Motif/Qt technology + stacks to support Xprint. + + + The Xp portion consists of: + + Xp Extension for the X-Server (included in the X-Server Xprt) + Xp Extension API for the client side (libXp/libXprintUtils) + PCL ddx driver that converts core X to native PCL + PDF ddx driver that converts core X to native PDF + PostScript ddx driver that converts core X to native PostScript + Raster ddx driver that generates xwd rasters which can be converted to PCL, PDF or PostScript rasters + + + + From an X clients perspective, it can attach to one of two nearly + identical X-Servers, a "Video" X-Server, and a "Print" X-Server + which has the additional Xp capability but otherwise looks and + behaves the same. + + + + + HOW THE X PRINT SERVICE WORKS + + The X Print Service expands on the traditional X-Server and Xlib world + in four ways. + + + + + Most obvious is the use of "print ddx drivers" instead of + "video ddx drivers". While a video ddx driver modifies pixels + in a video frame buffer, a print ddx driver generates "page + description language (PDL)" output (such as PCL, PDF or PostScript) + or sends the print rendering instructions to a platform-specific + print API (like Win32/GDI). + + + Once a print ddx driver generates PDL output, it can be sent to + a spooler such as lp1 + or retrieved by the client (to implement functionality like "print-to-file"). + + + Though not currently done, a single X-Server can support both + print and video ddx drivers. + + + + + + Since printers support "paged" output, unlike video, a portion + of the Xp Extension supports APIs to delineate printed output. + For example, XpStartPage and XpEndPage tell the X-Server where + a physical page starts and ends in an otherwise continuous + stream of X rendering primitives. Likewise, XpStartJob and + XpEndJob determine when a collection of pages starts and ends. + XpEndJob typically causes the generated PDL to be submitted to + a spooler, such as lp1. + + + + + Since printers have extensive capabilities, another portion of + the Xp Extension supports APIs to manipulate "print contexts". + + + Once a printer is selected using the Xp Extension API, a print + context to represent it can be created. A print context + embodies the printer selected - it contains the printer's + default capabilities, selectable range of capabilities, + printer state, and generated output. Some "attributes" within + the print context can be modified by the user, and the + X-Server and print ddx driver will react accordingly. For + example, the attribute "content-orientation" can be set to + "landscape" or "portrait" (if the printer supports these + values - which can be queried using the Xprint API as well). + + + + + Since printers can have "built in" fonts, the Xp Extension in + the X-Server works with the print ddx drivers to make + available (for printing only) additional fonts on a per print + context basis. + + + When a print context is created and set for a given printer, + the X font calls may be able to access additional printer + fonts. To do this (typically), the X-Server must have access + to "printer metric files" (.pmf) that describe at minimum the + metrics of the built in fonts. + + + + + + + + USAGE + + There are three tasks to start the X Print Service: + + configuring the X Print Server, + starting the X Print Service + configuring the user session so that clients can find the running X Print Service + + + + The tasks are described in detail below. + + + + + SERVER CONFIGURATION + + The X Print Server (Xprt) can read a number of configuration files which + control its behavior and support for printers. Each vendor platform has + a default location for this information. Xprt can also read the + environment variable XPCONFIGDIR to locate alternate configuration + directories. Common settings include: + + + export XPCONFIGDIR=/X11/lib/X11/XpConfig/ + export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/ + + + + Xprt has many built-in defaults, and lacking any configuration files, + will immediately try to support all printers visible via lpstat1. + + + In order of importance for configuration by a system administrator, the + configuration files for a "C" locale are as follows (see Xprt__appmansuffix__ for more + details (including support for non-"C" locales)): + + + ${XPCONFIGDIR}/C/print/Xprinters + + + 'Xprinters' is the top most configuration file. It tells + Xprt which specific printer names (e.g. mylaser) should + be supported, and whether lpstat1 or other commands + should be used to automatically supplement the list of + printers. + + + + + + ${XPCONFIGDIR}/C/print/attributes/printer + + + The 'printer' file maps printer names to model + configurations (see 'model-config' below). For example, + "mylaser" could be mapped to a "HPDJ1600C", and all other + arbitrary printers could be mapped to a default, such as + "HPLJ4SI". When depending on lpstat1 in the Xprinters + file, setting up defaults in 'printer' becomes all the + more important. + + + + + + ${XPCONFIGDIR}/C/print/attributes/document + + + The 'document' file specifies the initial document values + for any print jobs. For example, which paper tray to + use, what default resolution, etc. + + + + + + ${XPCONFIGDIR}/C/print/attributes/job + + + The 'job' file specifies the initial job values for any + print jobs. For example, "notification-profile" can be + set so that when a print job is successfully sent to a + printer, e-mail is sent to the user. + + + + + + ${XPCONFIGDIR}/C/print/models/PSdefault/model-config + ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir + ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf + ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf + + + + The 'model-config' file has attributes that describe the + printer model’s capabilities and default settings. + Printer model fonts may also be present. The model-config + file also identifies the print ddx driver to be used. + + For each printer model supported, a complete hierarchy of + files should exist. In most cases, these files do not + need to be modified. + + + + + + ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl + ${XPCONFIGDIR}/C/print/ddx-config/raster/pdf + ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript + + + + The print ddx drivers can have highly specific + configuration files to control their behavior. In most + cases, these files do not need to be modified. + + + + + + More information in how to configure and customize the X print server can be found in the + Xprt__appmansuffix__ + manual page. + + + + + STARTING UP + + The summary checklist for starting the X Print Service is as follows: + + + + + Choose an execution model for the X Print Service. The X + Print Service can be run on a per-user session basis, per + machine basis, or can be run on a few machines globally + available to a number of users. + + + + + If print jobs are to be submitted to a spooler (almost always + the case), make sure all needed printers are available to the + spooler subsystem (most often lp1) + on the same machine running the X Print Service. + + + + + Configure the X Print Server. See ``X Print Server + Configuration''. + + + + + Depending on #1, start the X Print Server process "Xprt", and + then the toolkit-specific Print Dialog Manager Daemon process + (such as CDEnext's "dtpdmd") at the appropriate times. + Note that libXprintUtils-based applications/toolkits do not need + a Print Dialog Manager Daemon process to use Xprint. + + + + The details are described below. + + + Because the X Print Service is based on X, it can be easily distributed. + The most significant factors in which execution model to choose will be + driven by: + + + + how many printers will be accessable through the printer + subsystem on any given machine. A system administrator may + choose to cluster printers on a few given machines, or + scatter them across an organization and possibly make + extensive use of remote spoolers to make them globally + available. + + + + + how many machines will need a copy of the X Print Server + configuration files. The files have been architected so + that one super-set version of them can be maintained and + distributed (e.g. via NFS), and a per-machine or per-user + version of the `Xprinters' is all that is needed to have the + appropriate information in them utilized or ignored. + + + + + how many users can demand services from a given X Print + Service. + + + + + With the above in mind, some obvious execution models include: + + + + Global - in this model, the system administrator is choosing + to run the X Print Service on a *few* select machines with + appropriate printers configured, and allow clients access to + the global resource. This can centralize the administration + of printers and configuration files, but may have to be + monitored for performance loading. + + + Startup would likely be done by boot-up scripts (such as /etc/init.d/xprint). + + + + + + Per-machine - every machine with potential X Print Service + users would run the service. Printer and configuration file + administration is decentralized, and usage would be limited + to the users on the machine. + + + Startup would likely be done by boot-up scripts (such as /etc/init.d/xprint). + + + + + + Per-user session - every user would run an entire X Print + Service for themselves. In the future, the Video X Server + normally started may contain Print X Server capability, so + this model becomes very natural. + + + Startup would likely be done at session login or by + launching actions or processes manually once the user + logs in. Note: Deamons like "dtpdmd" must be started after Xprt. + + + + + + Starting of the processes is straight forward. In strict order (example is for manually starting the X print server for CDEnext usage): + + + + [machineA] % Xprt [-XpFile <Xprinters file>] [:dispNum] & + + + Note that Xprt will look for configuration files in either + a default location or where XPCONFIGDIR points. + + + specifies an alternate `Xprinters' file, rather + than the default one or `${XPCONFIGDIR}/C/print/Xprinters'. + + + + + [machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] & + + + The dtpdmd will maintain an X-Selection on the X-Server, + and will start dtpdm's as required to service requests. + + + + + + In all but the per-user session model, the machine running the dtpdmd + (thus dtpdm's) will need display authorization to the users video + display. + + + + + CLIENT CONFIGURATION + + Once a X Print Server and dtpdmd have been started -- many of them + in some cases -- clients will need to find and use them. There are + two mechanisms that allow clients to discover X Print Servers and + printers. + + + + + "X Print Specifier" - assuming usage of the DtPrint/XprintUtils-based print + applications, the following notation is understood: + + + printer_name@machine[:dispNum] + + + For example: + + + colorlj7@printhub:2 + + + In the above example, the X Print Server running at `printhub:2' + is assumed to support the printer named `colorlj7'. + + + + + ${XPSERVERLIST} - assuming usage of the DtPrint print dialogs, + the environment variable ${XPSERVERLIST} can contain a list + of X Print Servers. For example: + + + XPSERVERLIST="printhub:2 printhub:3 otherdept:0" + + + Then in the dialogs, only a printer name needs to be entered. + The dialog will then search the X Print Servers in ${XPSERVERLIST} + for a server than supports the printer, and then establish + contact. + + + + + + + + END-USER SEQUENCE + + From most CDEnext applications, printing is accomplished by bringing + down the <File> menu and selecting <Print...>. This will result in + the DtPrintSetupBox dialog, which will request the name of a printer, + and offer limited capability to configure print options (e.g. number + of copies). If the user wishes, they can select <Setup...>, which + will start a dtpdm capable of modifying additional print options. + Finally, the user should select <Print>. + + + + + ENVIRONMENT + + + ${XPCONFIGDIR} + + This environment variable points to the root + of the Xprint server configuration directory hierarchy. + If the variable is not defined, the default + path is be assumed. The default path may be + /usr/X11R6/lib/X11/xserver/, + /usr/lib/X11/xserver/, + /usr/share/Xprint/xserver/ or + /usr/openwin/server/etc/XpConfig, depending on the + system, and may be configured in /etc/init.d/xprint. + + + + + ${LANG} + + + This environment variable selects the locale settings used by the Xprint server. + Xprt allows language-specific settings (stored in ${XPCONFIGDIR}/${LANG}/print/) + which will override the default settings (stored in ${XPCONFIGDIR}/C/print/). + If ${LANG} is not set "C" is assumed. + + + + + + ${XPSERVERLIST} + + The environment variable ${XPSERVERLIST} contains a list + of display identifiers (separated by whitespace) which tell an + application where it can find the Xprint servers. Usually + ${XPSERVERLIST} is set by the profile startup scripts (e.g. + /etc/profile or /etc/profile.d/xprint.sh) using the output of + /etc/init.d/xprint get_xpserverlist. + Example: + + + export XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" + + + Alternatively ${XPSERVERLIST} can be set + manually. Example: + + + export XPSERVERLIST="littlecat:80 bitdog:72" + + + instructs an application to find an Xprint server at display + 80 on the machine "littlecat" and at display 72 on the + machine bigdog. + + + + + + ${XPRINTER} + + + The environment variable ${XPRINTER} + defines the default printer used by print + applications. The syntax is either + printername or + printername@display. + Examples: + + + XPRINTER=ps003 + + tells an application to look for the + first printer named "ps003" on all Xprint + servers. + + + + + + XPRINTER=hplaser19@littlecat:80 + + tells an application to use the printer "hplaser19" + on the Xprint server at display + "littlecat:80". + + + + + + If ${XPRINTER} is not set the applications + will examine the values of the ${PDPRINTER}, + ${LPDEST}, and + ${PRINTER} environment variables (in that order). + + + + + + + + SEE ALSO + + + + + + + + X11__miscmansuffix__ + xplsprinters__appmansuffix__ + xprehashprinterlist__appmansuffix__ + xphelloworld__appmansuffix__ + xpxmhelloworld__appmansuffix__ + xpawhelloworld__appmansuffix__ + xpxthelloworld__appmansuffix__ + xpsimplehelloworld__appmansuffix__ + Xserver__appmansuffix__ + Xprt__appmansuffix__ + + libXp__libmansuffix__ + libXprintUtils__libmansuffix__ + libXprintAppUtils__libmansuffix__ + XmPrintShell__libmansuffix__ + XawPrintShell__libmansuffix__ + Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html) + Xprint main site (http://xprint.mozdev.org/) + + + + + + AUTHORS + + This manual page was written by + Roland Mainz roland.mainz@nrubsig.org based on the original X11R6.6 + xc/programs/Xserver/XpConfig/README. + + + + diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/Makefile x11r682/xc/extras/Mesa/Makefile --- xc/extras/Mesa/Makefile 2004-08-28 06:26:58.000000000 +0200 +++ xc/extras/Mesa/Makefile 2004-12-15 02:50:55.000000000 +0100 @@ -45,17 +45,22 @@ # Rules to set/install a specific build configuration aix \ +aix-64 \ aix-gcc \ aix-static \ beos \ darwin \ darwin-static \ freebsd \ +freebsd-dri \ +freebsd-dri-x86 \ hpux10 \ hpux10-gcc \ hpux10-static \ +hpux11-32 \ hpux11-32-static \ hpux11-32-static-nothreads \ +hpux11-64 \ hpux11-64-static \ hpux9 \ hpux9-gcc \ @@ -81,6 +86,7 @@ linux-ppc \ linux-ppc-static \ linux-solo \ +linux-solo-x86 \ linux-solo-ia64 \ linux-sparc \ linux-sparc5 \ @@ -111,9 +117,9 @@ # Rules for making release tarballs -DIRECTORY = Mesa-6.1 -LIB_NAME = MesaLib-6.1 -DEMO_NAME = MesaDemos-6.1 +DIRECTORY = Mesa-6.2.1 +LIB_NAME = MesaLib-6.2.1 +DEMO_NAME = MesaDemos-6.2.1 LIB_FILES = \ $(DIRECTORY)/Makefile* \ @@ -121,6 +127,7 @@ $(DIRECTORY)/mms-config. \ $(DIRECTORY)/Mesa.dsw \ $(DIRECTORY)/bin/mklib \ + $(DIRECTORY)/bin/installmesa \ $(DIRECTORY)/configs/[a-z]* \ $(DIRECTORY)/docs/*.html \ $(DIRECTORY)/docs/COPYING \ @@ -186,7 +193,6 @@ $(DIRECTORY)/src/mesa/tnl_dd/imm/*.[ch] \ $(DIRECTORY)/src/mesa/tnl_dd/imm/NOTES.imm \ $(DIRECTORY)/src/mesa/drivers/beos/*.cpp \ - $(DIRECTORY)/src/mesa/drivers/beos/*.h \ $(DIRECTORY)/src/mesa/drivers/beos/Makefile \ $(DIRECTORY)/src/mesa/drivers/common/*.[ch] \ $(DIRECTORY)/src/mesa/drivers/common/descrip.mms \ @@ -249,6 +255,7 @@ $(DIRECTORY)/src/glw/*.[ch] \ $(DIRECTORY)/src/glw/Makefile* \ $(DIRECTORY)/src/glw/README \ + $(DIRECTORY)/src/glw/depend \ $(DIRECTORY)/progs/Makefile \ $(DIRECTORY)/progs/util/README \ $(DIRECTORY)/progs/util/*.[ch] \ @@ -274,6 +281,8 @@ $(DIRECTORY)/src/glut/dos/*.[ch] \ $(DIRECTORY)/src/glut/dos/Makefile.DJ \ $(DIRECTORY)/src/glut/dos/PC_HW/*.[chS] \ + $(DIRECTORY)/src/glut/ggi/*.[ch] \ + $(DIRECTORY)/src/glut/ggi/Makefile \ $(DIRECTORY)/progs/beos/*.cpp \ $(DIRECTORY)/progs/beos/Makefile \ $(DIRECTORY)/progs/images/*.rgb \ @@ -301,6 +310,26 @@ $(DIRECTORY)/progs/ggi/*.c +DRI_FILES = \ + $(DIRECTORY)/src/glx/Makefile \ + $(DIRECTORY)/src/glx/mini/*.[ch] \ + $(DIRECTORY)/src/glx/mini/example.miniglx.conf \ + $(DIRECTORY)/src/glx/mini/NOTES \ + $(DIRECTORY)/src/mesa/drivers/dri/Makefile \ + $(DIRECTORY)/src/mesa/drivers/dri/Makefile.template \ + $(DIRECTORY)/src/mesa/drivers/dri/common/*.[ch] \ + $(DIRECTORY)/src/mesa/drivers/dri/dri_client/imports/*.h \ + $(DIRECTORY)/src/mesa/drivers/dri/*/*.[ch] \ + $(DIRECTORY)/src/mesa/drivers/dri/*/depend \ + $(DIRECTORY)/src/mesa/drivers/dri/*/Makefile \ + $(DIRECTORY)/src/mesa/drivers/dri/*/Doxyfile \ + $(DIRECTORY)/src/mesa/drivers/dri/*/server/*.[ch] + + +# Everything for new a Mesa release: +tarballs: lib_gz demo_gz lib_bz2 demo_bz2 lib_zip demo_zip md5 + + lib_gz: rm -f configs/current ; \ cd .. ; \ @@ -347,6 +376,3 @@ @-md5sum $(DEMO_NAME).tar.gz @-md5sum $(DEMO_NAME).tar.bz2 @-md5sum $(DEMO_NAME).zip - -# Everything for new a Mesa release: -tarballs: lib_gz demo_gz lib_bz2 demo_bz2 lib_zip demo_zip md5 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/Makefile.mgw x11r682/xc/extras/Mesa/Makefile.mgw --- xc/extras/Mesa/Makefile.mgw 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/Makefile.mgw 2004-12-15 02:50:55.000000000 +0100 @@ -40,6 +40,9 @@ # As a consequence, you'll need the Win32 Glide3 # library to build any application. # default = no +# ICD=1 build the installable client driver interface +# (windows opengl driver interface) +# default = no # X86=1 optimize for x86 (if possible, use MMX, SSE, 3DNow). # default = no # @@ -56,7 +59,13 @@ CPU ?= pentium -CFLAGS = -Wall -W -pedantic +ifeq ($(ICD),1) + # when -std=c99 mingw will not define WIN32 + CFLAGS = -Wall -W -Werror +else + # I love c89 + CFLAGS = -Wall -W -pedantic +endif CFLAGS += -O2 -ffast-math -mcpu=$(CPU) export CFLAGS diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/Mesa.dsw x11r682/xc/extras/Mesa/Mesa.dsw --- xc/extras/Mesa/Mesa.dsw 2004-08-28 06:26:58.000000000 +0200 +++ xc/extras/Mesa/Mesa.dsw 2004-12-15 02:50:55.000000000 +0100 @@ -3,7 +3,7 @@ ############################################################################### -Project: "array_cache"=.\SRC\MESA\array_cache\array_cache.dsp - Package Owner=<4> +Project: "array_cache"=".\SRC\MESA\array_cache\array_cache.dsp" - Package Owner=<4> Package=<5> {{{ @@ -15,7 +15,7 @@ ############################################################################### -Project: "gdi"=.\src\mesa\drivers\windows\gdi\gdi.dsp - Package Owner=<4> +Project: "gdi"=".\src\mesa\drivers\windows\gdi\gdi.dsp" - Package Owner=<4> Package=<5> {{{ @@ -51,7 +51,7 @@ ############################################################################### -Project: "glapi"=.\SRC\MESA\glapi\glapi.dsp - Package Owner=<4> +Project: "glapi"=".\SRC\MESA\glapi\glapi.dsp" - Package Owner=<4> Package=<5> {{{ @@ -63,7 +63,7 @@ ############################################################################### -Project: "glu"=.\src\glu\sgi\glu.dsp - Package Owner=<4> +Project: "glu"=".\src\glu\sgi\glu.dsp" - Package Owner=<4> Package=<5> {{{ @@ -78,22 +78,7 @@ ############################################################################### -Project: "glut"=.\src\glut\glx\glut.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name glu - End Project Dependency -}}} - -############################################################################### - -Project: "main"=.\SRC\MESA\main\main.dsp - Package Owner=<4> +Project: "main"=".\SRC\MESA\main\main.dsp" - Package Owner=<4> Package=<5> {{{ @@ -105,7 +90,7 @@ ############################################################################### -Project: "math"=.\SRC\MESA\math\math.dsp - Package Owner=<4> +Project: "math"=".\SRC\MESA\math\math.dsp" - Package Owner=<4> Package=<5> {{{ @@ -117,7 +102,7 @@ ############################################################################### -Project: "osmesa"=.\SRC\MESA\DRIVERS\osmesa\osmesa.dsp - Package Owner=<4> +Project: "osmesa"=".\SRC\MESA\DRIVERS\osmesa\osmesa.dsp" - Package Owner=<4> Package=<5> {{{ @@ -132,7 +117,7 @@ ############################################################################### -Project: "shader"=.\SRC\MESA\shader\shader.dsp - Package Owner=<4> +Project: "shader"=".\SRC\MESA\shader\shader.dsp" - Package Owner=<4> Package=<5> {{{ @@ -144,7 +129,7 @@ ############################################################################### -Project: "swrast"=.\SRC\MESA\swrast\swrast.dsp - Package Owner=<4> +Project: "swrast"=".\SRC\MESA\swrast\swrast.dsp" - Package Owner=<4> Package=<5> {{{ @@ -156,7 +141,7 @@ ############################################################################### -Project: "swrast_setup"=.\SRC\MESA\swrast_setup\swrast_setup.dsp - Package Owner=<4> +Project: "swrast_setup"=".\SRC\MESA\swrast_setup\swrast_setup.dsp" - Package Owner=<4> Package=<5> {{{ @@ -168,7 +153,7 @@ ############################################################################### -Project: "tnl"=.\SRC\MESA\tnl\tnl.dsp - Package Owner=<4> +Project: "tnl"=".\SRC\MESA\tnl\tnl.dsp" - Package Owner=<4> Package=<5> {{{ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/bin/mklib x11r682/xc/extras/Mesa/bin/mklib --- xc/extras/Mesa/bin/mklib 2004-08-28 06:26:58.000000000 +0200 +++ xc/extras/Mesa/bin/mklib 2004-12-15 02:50:55.000000000 +0100 @@ -116,6 +116,14 @@ 'Linux' | 'OpenBSD') # GCC-based environment + # Set default compilers if env vars not set + if [ "x$CXX" = "x" ] ; then + CXX=g++ + fi + if [ "x$CC" = "x" ] ; then + CC=gcc + fi + if [ $NOPREFIX = 1 ] ; then # No "lib" or ".so" part echo "mklib: Making" $ARCH "shared library: " ${LIBNAME} @@ -372,7 +380,30 @@ ar -X64 -ruv ${LIBNAME} ${OBJECTS} FINAL_LIBS=${LIBNAME} else - echo "mklib: PROBLEM: AIX64 shared libs not supported!!!" + EXPFILE="lib${LIBNAME}.exp" + OFILE=shr.o #Want to be consistent with the IBM libGL.a + LIBNAME="lib${LIBNAME}.a" # shared objects are still stored in the .a libraries + OPTS="-bE:${EXPFILE} -bM:SRE -bnoentry -q64" + rm -f ${EXPFILE} ${OFILE} + NM="/bin/nm -eC -X64" + echo "#! /usr/lib/${LIBNAME}" > ${EXPFILE} + ${NM} ${OBJECTS} | awk '{ + if ((($2 == "T") || ($2 == "D") || ($2 == "B")) \ + && ( substr($1,1,1) != ".")) { + if (substr ($1, 1, 7) != "__sinit" && + substr ($1, 1, 7) != "__sterm") { + if (substr ($1, 1, 5) == "__tf1") + print (substr ($1, 7)) + else if (substr ($1, 1, 5) == "__tf9") + print (substr ($1, 15)) + else + print $1 + } + } + }' | sort -u >> ${EXPFILE} + cc ${OPTS} -o ${OFILE} ${OBJECTS} ${DEPS} + ar -X64 -r ${LIBNAME} ${OFILE} + FINAL_LIBS="${LIBNAME}" fi ;; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/aix x11r682/xc/extras/Mesa/configs/aix --- xc/extras/Mesa/configs/aix 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/aix 2004-12-15 02:50:55.000000000 +0100 @@ -20,9 +20,9 @@ OSMESA_LIB_NAME = libOSMesa.a GL_LIB_DEPS = -lX11 -lXext -lm -GLU_LIB_DEPS = -L$(TOP)/lib -lGL -lm -lC -GLUT_LIB_DEPS = -L$(TOP)/lib -lGLU -lGL -lXi -lXmu -lX11 -lm -GLW_LIB_DEPS = -L$(TOP)/lib -lGL -lXt -lX11 -OSMESA_LIB_DEPS = -L$(TOP)/lib -lGL -APP_LIB_DEPS = -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm -lC +GLU_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lm -lC +GLUT_LIB_DEPS = -L$(TOP)/lib -l$(GLU_LIB) -l$(GL_LIB) -lXi -lXmu -lX11 -lm +GLW_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lXt -lX11 +OSMESA_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) +APP_LIB_DEPS = -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm -lC diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/aix-64 x11r682/xc/extras/Mesa/configs/aix-64 --- xc/extras/Mesa/configs/aix-64 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/configs/aix-64 2004-12-15 02:50:55.000000000 +0100 @@ -0,0 +1,28 @@ +# Configuration for AIX 64-bit, dynamic libs + +include $(TOP)/configs/default + +CONFIG_NAME = aix-64 + +# Compiler and flags +CC = xlc +CXX = xlC + +CFLAGS = -q64 -qmaxmem=16384 -O -DAIXV3 +CXXFLAGS = -q64 -qmaxmem=16384 -O -DAIXV3 +MKLIB_OPTIONS = -arch AIX64 + +# Library names (actual file names) +GL_LIB_NAME = libGL.a +GLU_LIB_NAME = libGLU.a +GLUT_LIB_NAME = libglut.a +GLW_LIB_NAME = libGLw.a +OSMESA_LIB_NAME = libOSMesa.a + +GL_LIB_DEPS = -lX11 -lXext -lm +GLU_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lm -lC +GLUT_LIB_DEPS = -L$(TOP)/lib -l$(GLU_LIB) -l$(GL_LIB) -lXi -lXmu -lX11 -lm +GLW_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) -lXt -lX11 +OSMESA_LIB_DEPS = -L$(TOP)/lib -l$(GL_LIB) +APP_LIB_DEPS = -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm -lC + diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/aix-gcc x11r682/xc/extras/Mesa/configs/aix-gcc --- xc/extras/Mesa/configs/aix-gcc 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/aix-gcc 2004-12-15 02:50:55.000000000 +0100 @@ -13,7 +13,7 @@ MKLIB_OPTIONS = -arch aix-gcc GL_LIB_DEPS = -lX11 -lXext -lm -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR -lGLU -lGL -lXi -lXmu -APP_LIB_DEPS = -L$(LIB_DIR) -Wl,-brtl -lglut -lGLU -lGL -lm -lX11 -lXext -lXmu -lXi +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR -l$(GLU_LIB) -l$(GL_LIB) -lXi -lXmu +APP_LIB_DEPS = -L$(LIB_DIR) -Wl,-brtl -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lX11 -lXext -lXmu -lXi diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/beos x11r682/xc/extras/Mesa/configs/beos --- xc/extras/Mesa/configs/beos 2004-08-28 06:27:03.000000000 +0200 +++ xc/extras/Mesa/configs/beos 2004-12-15 02:50:55.000000000 +0100 @@ -42,11 +42,10 @@ ifdef DEBUG CFLAGS += -g -O0 - CXXFLAGS += -g -O0 LDFLAGS += -g + DEFINES += -DDEBUG else CFLAGS += -O3 - CXXFLAGS += -O3 endif GLUT_CFLAGS = -fexceptions @@ -93,8 +92,8 @@ # Library/program dependencies GL_LIB_DEPS = -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL +OSMESA_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) GLU_LIB_DEPS = -GLUT_LIB_DEPS = -lgame -L$(LIB_DIR) -lGL -APP_LIB_DEPS = -lbe -L$(LIB_DIR) -lGL -lglut +GLUT_LIB_DEPS = -lgame -L$(LIB_DIR) -l$(GL_LIB) +APP_LIB_DEPS = -lbe -L$(LIB_DIR) -l$(GL_LIB) -l$(GLUT_LIB) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/darwin x11r682/xc/extras/Mesa/configs/darwin --- xc/extras/Mesa/configs/darwin 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/darwin 2004-12-15 02:50:55.000000000 +0100 @@ -22,4 +22,4 @@ GLU_LIB_DEPS = $(TOP)/lib/GL.dylib GLUT_LIB_DEPS = GLW_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXt $(TOP)/lib/GL.dylib -APP_LIB_DEPS = -L$(TOP)/lib -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +APP_LIB_DEPS = -L$(TOP)/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/darwin-static x11r682/xc/extras/Mesa/configs/darwin-static --- xc/extras/Mesa/configs/darwin-static 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/darwin-static 2004-12-15 02:50:55.000000000 +0100 @@ -21,4 +21,4 @@ GLU_LIB_DEPS = GLUT_LIB_DEPS = GLW_LIB_DEPS = -APP_LIB_DEPS = -L$(TOP)/lib -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +APP_LIB_DEPS = -L$(TOP)/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/default x11r682/xc/extras/Mesa/configs/default --- xc/extras/Mesa/configs/default 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/default 2004-12-15 02:50:55.000000000 +0100 @@ -7,8 +7,8 @@ # Version info MESA_MAJOR=6 -MESA_MINOR=1 -MESA_TINY=0 +MESA_MINOR=2 +MESA_TINY=1 # external projects DRM_SOURCE_PATH=$(TOP)/../drm @@ -61,8 +61,8 @@ # Library/program dependencies GL_LIB_DEPS = -lX11 -lXext -lm -lpthread -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +OSMESA_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/freebsd-dri x11r682/xc/extras/Mesa/configs/freebsd-dri --- xc/extras/Mesa/configs/freebsd-dri 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/configs/freebsd-dri 2004-12-15 02:50:55.000000000 +0100 @@ -0,0 +1,39 @@ +# -*-makefile-*- +# Configuration for freebsd-dri: FreeBSD DRI hardware drivers + +include $(TOP)/configs/freebsd + +CONFIG_NAME = freebsd-dri + +# Compiler and flags +CC = gcc +CXX = g++ +WARN_FLAGS = -Wall +OPT_FLAGS = -O + +CFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wmissing-prototypes -g -std=c99 -Wundef -fPIC -ffast-math -I/usr/local/include -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions +CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wall -g -ansi -pedantic -fPIC + +ASM_SOURCES = + +# Library/program dependencies +DRI_LIB_DEPS = -lm -lpthread -lexpat +GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -pthread + +GLUT_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -lGLU -lGL -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -lGL -lXt -lXm -lX11 + + +# Directories +SRC_DIRS = mesa glu glut/glx glw glx/x11 +DRIVER_DIRS = dri +PROGRAM_DIRS = +WINDOW_SYSTEM=dri + +DRM_SOURCE_PATH=$(TOP)/../drm + +# ffb and gamma are missing because they have not been converted to use the new +# interface. +DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx \ + unichrome savage sis + diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/freebsd-dri-x86 x11r682/xc/extras/Mesa/configs/freebsd-dri-x86 --- xc/extras/Mesa/configs/freebsd-dri-x86 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/configs/freebsd-dri-x86 2004-12-15 02:50:55.000000000 +0100 @@ -0,0 +1,12 @@ +# -*-makefile-*- +# Configuration for freebsd-dri: FreeBSD DRI hardware drivers + +include $(TOP)/configs/freebsd-dri + +CONFIG_NAME = freebsd-dri-x86 + +# Unnecessary on x86, generally. +PIC_FLAGS = + +ASM_FLAGS = -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM +ASM_SOURCES = $(X86_SOURCES) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/hpux10-static x11r682/xc/extras/Mesa/configs/hpux10-static --- xc/extras/Mesa/configs/hpux10-static 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/hpux10-static 2004-12-15 02:50:55.000000000 +0100 @@ -26,5 +26,5 @@ GLU_LIB_DEPS = GLUT_LIB_DEPS = GLW_LIB_DEPS = -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm -lstdc++ +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm -lstdc++ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/hpux11-32 x11r682/xc/extras/Mesa/configs/hpux11-32 --- xc/extras/Mesa/configs/hpux11-32 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/configs/hpux11-32 2004-12-15 02:50:55.000000000 +0100 @@ -0,0 +1,26 @@ +# Configuration for HPUX v11 + +include $(TOP)/configs/default + +CONFIG_NAME = hpux11-32 + +# Compiler and flags +CC = cc +CXX = aCC + +CFLAGS = +z -Ae +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DUSE_XSHM -DPTHREADS + +CXXFLAGS = +z -Aa +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include + +MKLIB_OPTIONS = + + +# Library names (actual file names) +GL_LIB_NAME = libGL.a +GLU_LIB_NAME = libGLU.a +GLUT_LIB_NAME = libglut.a +GLW_LIB_NAME = libGLw.a +OSMESA_LIB_NAME = libOSMesa.a + +# Library/program dependencies +APP_LIB_DEPS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/hpux11-64 x11r682/xc/extras/Mesa/configs/hpux11-64 --- xc/extras/Mesa/configs/hpux11-64 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/configs/hpux11-64 2004-12-15 02:50:55.000000000 +0100 @@ -0,0 +1,27 @@ +# Configuration for HPUX v11, 64-bit + +include $(TOP)/configs/default + +CONFIG_NAME = hpux11-64 + +# Compiler and flags +CC = cc +CXX = aCC + +CFLAGS = +z -Ae +DD64 +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include -DUSE_XSHM -DPTHREADS + +CXXFLAGS = +z -Aa +DD64 +O2 +Onolimit +Oaggressive -D_HPUX_SOURCE -I/usr/include/X11R6 -I/usr/contrib/X11R6/include + +MKLIB_OPTIONS = + +LIBDIR = $(TOP)/lib64 + +# Library names (actual file names) +GL_LIB_NAME = libGL.a +GLU_LIB_NAME = libGLU.a +GLUT_LIB_NAME = libglut.a +GLW_LIB_NAME = libGLw.a +OSMESA_LIB_NAME = libOSMesa.a + +# Library/program dependencies +APP_LIB_DEPS = -L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib -lXext -lXmu -lXi -lX11 -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/irix6-64 x11r682/xc/extras/Mesa/configs/irix6-64 --- xc/extras/Mesa/configs/irix6-64 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/irix6-64 2004-12-15 02:50:55.000000000 +0100 @@ -15,4 +15,4 @@ LIB_DIR = $(TOP)/lib64 -APP_LIB_DEPS = -L$(LIB_DIR) -64 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXmu -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -64 -rpath $(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXi -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/irix6-64-static x11r682/xc/extras/Mesa/configs/irix6-64-static --- xc/extras/Mesa/configs/irix6-64-static 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/irix6-64-static 2004-12-15 02:50:55.000000000 +0100 @@ -15,7 +15,7 @@ LIB_DIR = $(TOP)/lib64 -APP_LIB_DEPS = -L$(LIB_DIR) -64 -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -64 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm GL_LIB_NAME = libGL.a GLU_LIB_NAME = libGLU.a diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/irix6-n32 x11r682/xc/extras/Mesa/configs/irix6-n32 --- xc/extras/Mesa/configs/irix6-n32 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/irix6-n32 2004-12-15 02:50:55.000000000 +0100 @@ -15,4 +15,4 @@ LIB_DIR = $(TOP)/lib32 -APP_LIB_DEPS = -L$(LIB_DIR) -n32 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXmu -lXi -lfpe -lm +APP_LIB_DEPS = -L$(LIB_DIR) -n32 -rpath $(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXi -lfpe -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/irix6-n32-static x11r682/xc/extras/Mesa/configs/irix6-n32-static --- xc/extras/Mesa/configs/irix6-n32-static 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/irix6-n32-static 2004-12-15 02:50:55.000000000 +0100 @@ -15,7 +15,7 @@ LIB_DIR = $(TOP)/lib32 -APP_LIB_DEPS = -L$(LIB_DIR) -n32 -glut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -n32 -glut -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm GL_LIB_NAME = libGL.a GLU_LIB_NAME = libGLU.a diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/irix6-o32 x11r682/xc/extras/Mesa/configs/irix6-o32 --- xc/extras/Mesa/configs/irix6-o32 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/irix6-o32 2004-12-15 02:50:55.000000000 +0100 @@ -15,5 +15,5 @@ LIB_DIR = $(TOP)/lib32 -APP_LIB_DEPS = -L$(LIB_DIR) -32 -rpath $(LIB_DIR) -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -32 -rpath $(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/irix6-o32-static x11r682/xc/extras/Mesa/configs/irix6-o32-static --- xc/extras/Mesa/configs/irix6-o32-static 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/irix6-o32-static 2004-12-15 02:50:55.000000000 +0100 @@ -15,7 +15,7 @@ LIB_DIR = $(TOP)/lib32 -APP_LIB_DEPS = -L$(LIB_DIR) -32 -glut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -32 -glut -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm GL_LIB_NAME = libGL.a GLU_LIB_NAME = libGLU.a diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux x11r682/xc/extras/Mesa/configs/linux --- xc/extras/Mesa/configs/linux 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux 2004-12-15 02:50:55.000000000 +0100 @@ -14,9 +14,7 @@ # Library/program dependencies +# Need to have -L/usr/X11R6/lib in these: GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-alpha x11r682/xc/extras/Mesa/configs/linux-alpha --- xc/extras/Mesa/configs/linux-alpha 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/linux-alpha 2004-12-15 02:50:55.000000000 +0100 @@ -12,8 +12,7 @@ GLUT_CFLAGS = -fexceptions GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-alpha-static x11r682/xc/extras/Mesa/configs/linux-alpha-static --- xc/extras/Mesa/configs/linux-alpha-static 2004-06-16 11:16:21.000000000 +0200 +++ xc/extras/Mesa/configs/linux-alpha-static 2004-12-15 02:50:55.000000000 +0100 @@ -22,7 +22,6 @@ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm -L/usr/X11R6/lib -lX11 -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -L/usr/X11R6/lib -lX11 -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-debug x11r682/xc/extras/Mesa/configs/linux-debug --- xc/extras/Mesa/configs/linux-debug 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-debug 2004-12-15 02:50:55.000000000 +0100 @@ -14,9 +14,7 @@ GLUT_CFLAGS = -fexceptions +# Need to have -L/usr/X11R6/lib in these: GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -lXt -L/usr/X11R6/lib -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -L/usr/X11R6/lib -lX11 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-dri x11r682/xc/extras/Mesa/configs/linux-dri --- xc/extras/Mesa/configs/linux-dri 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-dri 2004-12-15 02:50:55.000000000 +0100 @@ -9,19 +9,26 @@ CC = gcc CXX = g++ -CFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wmissing-prototypes -g -std=c99 -Wundef -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DPTHREADS -D_GNU_SOURCE -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions - -CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wall -g -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE - +WARN_FLAGS = -Wall +OPT_FLAGS = -O +SOURCE_FLAGS = -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE \ + -D_BSD_SOURCE -D_GNU_SOURCE +PIC_FLAGS = -fPIC + +CFLAGS = -DDRI_NEW_INTERFACE_ONLY $(WARN_FLAGS) -g $(OPT_FLAGS) $(ASM_FLAGS) \ + -std=c99 $(PIC_FLAGS) -ffast-math $(SOURCE_FLAGS) -DPTHREADS \ + -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions +CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY $(WARN_FLAGS) -g $(OPT_FLAGS) -fPIC \ + $(SOURCE_FLAGS) ASM_SOURCES = # Library/program dependencies GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -lexpat -ldl -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 # Directories @@ -30,8 +37,8 @@ PROGRAM_DIRS = WINDOW_SYSTEM=dri -# Savage is missing. ffb, gamma, and sis are also missing because they have -# not be converted to use the new interface. -# -DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome +# ffb and gamma are missing because they have not been converted to use the new +# interface. +DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx \ + unichrome savage sis diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-dri-x86 x11r682/xc/extras/Mesa/configs/linux-dri-x86 --- xc/extras/Mesa/configs/linux-dri-x86 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-dri-x86 2004-12-15 02:50:55.000000000 +0100 @@ -1,35 +1,12 @@ # -*-makefile-*- # Configuration for linux-dri: Linux DRI hardware drivers for XFree86 & others -include $(TOP)/configs/default +include $(TOP)/configs/linux-dri CONFIG_NAME = linux-dri-x86 -# Compiler and flags -CC = gcc -CXX = g++ - -CFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wmissing-prototypes -g -std=c99 -Wundef -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS -D_GNU_SOURCE -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions - -CXXFLAGS = -DDRI_NEW_INTERFACE_ONLY -Wall -g -ansi -pedantic -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE +# Unnecessary on x86, generally. +PIC_FLAGS = +ASM_FLAGS = -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM ASM_SOURCES = $(X86_SOURCES) - -# Library/program dependencies -GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -lexpat -ldl - -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 - - -# Directories -SRC_DIRS = mesa glu glut/glx glw -DRIVER_DIRS = dri -PROGRAM_DIRS = -WINDOW_SYSTEM=dri - -# Savage is missing. ffb, gamma, and sis are also missing because they have -# not be converted to use the new interface. -# -DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome - diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-dri-x86-64 x11r682/xc/extras/Mesa/configs/linux-dri-x86-64 --- xc/extras/Mesa/configs/linux-dri-x86-64 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-dri-x86-64 2004-12-15 02:50:55.000000000 +0100 @@ -19,8 +19,8 @@ # Library/program dependencies GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread -lexpat -ldl -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib64 -lXt -lX11 +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib64 -lXt -lX11 # Directories SRC_DIRS = mesa glu glut/glx glw @@ -28,9 +28,9 @@ PROGRAM_DIRS = WINDOW_SYSTEM=dri -# Savage is missing. ffb, gamma, and sis are also missing because they have +# ffb, gamma, and sis are missing because they have # not be converted to use the new interface. Do i810 & i830 really # need to be included here? # -DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome +DRI_DIRS = dri_client i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome savage diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-glide x11r682/xc/extras/Mesa/configs/linux-glide --- xc/extras/Mesa/configs/linux-glide 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-glide 2004-12-15 02:50:55.000000000 +0100 @@ -15,8 +15,6 @@ # Library/program dependencies GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/local/glide/lib -lglide3x -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/local/glide/lib -lglide3x -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-icc x11r682/xc/extras/Mesa/configs/linux-icc --- xc/extras/Mesa/configs/linux-icc 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-icc 2004-12-15 02:50:55.000000000 +0100 @@ -13,9 +13,8 @@ MKLIB_OPTIONS = -arch icc GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm ASM_SOURCES = $(X86_SOURCES) $(X86_API) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-icc-static x11r682/xc/extras/Mesa/configs/linux-icc-static --- xc/extras/Mesa/configs/linux-icc-static 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-icc-static 2004-12-15 02:50:55.000000000 +0100 @@ -20,9 +20,8 @@ OSMESA_LIB_NAME = libOSMesa.a GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm MKLIB_OPTIONS = -arch icc ASM_SOURCES = $(X86_SOURCES) $(X86_API) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-ppc x11r682/xc/extras/Mesa/configs/linux-ppc --- xc/extras/Mesa/configs/linux-ppc 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/linux-ppc 2004-12-15 02:50:55.000000000 +0100 @@ -12,8 +12,7 @@ GLUT_CFLAGS = -fexceptions GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-ppc-static x11r682/xc/extras/Mesa/configs/linux-ppc-static --- xc/extras/Mesa/configs/linux-ppc-static 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/linux-ppc-static 2004-12-15 02:50:55.000000000 +0100 @@ -21,7 +21,6 @@ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-solo x11r682/xc/extras/Mesa/configs/linux-solo --- xc/extras/Mesa/configs/linux-solo 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-solo 2004-12-15 02:50:55.000000000 +0100 @@ -19,9 +19,9 @@ # Library/program dependencies GL_LIB_DEPS = -lm -lpthread -lexpat -ldl -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm -lpthread +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lpthread # Directories SRC_DIRS = mesa glx glu glut/mini diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-solo-ia64 x11r682/xc/extras/Mesa/configs/linux-solo-ia64 --- xc/extras/Mesa/configs/linux-solo-ia64 2004-08-13 01:04:47.000000000 +0200 +++ xc/extras/Mesa/configs/linux-solo-ia64 2004-12-15 02:50:55.000000000 +0100 @@ -17,9 +17,8 @@ # Library/program dependencies GL_LIB_DEPS = -lm -lpthread -lexpat -ldl -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm -lpthread +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lpthread # Directories SRC_DIRS = mesa glx glu glut/mini diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-solo-x86 x11r682/xc/extras/Mesa/configs/linux-solo-x86 --- xc/extras/Mesa/configs/linux-solo-x86 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/configs/linux-solo-x86 2004-12-15 02:50:55.000000000 +0100 @@ -0,0 +1,31 @@ +# Configuration for linux-solo: Linux DRI hardware drivers for fbdev + +include $(TOP)/configs/default + +CONFIG_NAME = linux-solo-x86 + +# Compiler and flags +CC = gcc +CXX = g++ + +CCOMMON = -DDRI_NEW_INTERFACE_ONLY -D_POSIX_SOURCE -D_SVID_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=199309L -D_GNU_SOURCE -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -DPTHREADS + +CFLAGS = $(CCOMMON) -Wmissing-prototypes -O3 -g -std=c99 -Wundef -fPIC -ffast-math + +CXXFLAGS = $(CCOMMON) -Wall -O3 -ansi -pedantic -fPIC + + +ASM_SOURCES = $(X86_SOURCES) + +# Library/program dependencies +GL_LIB_DEPS = -lm -lpthread -lexpat -ldl +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lpthread + +# Directories +SRC_DIRS = mesa glx glu glut/mini +DRIVER_DIRS = dri +PROGRAM_DIRS = miniglx + +#DRI_DIRS = fb ffb gamma sis savage +DRI_DIRS = i810 i830 i915 mach64 mga r128 r200 radeon tdfx unichrome diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-sparc x11r682/xc/extras/Mesa/configs/linux-sparc --- xc/extras/Mesa/configs/linux-sparc 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/linux-sparc 2004-12-15 02:50:55.000000000 +0100 @@ -12,7 +12,5 @@ GLUT_CFLAGS = -fexceptions GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-sparc5 x11r682/xc/extras/Mesa/configs/linux-sparc5 --- xc/extras/Mesa/configs/linux-sparc5 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/linux-sparc5 2004-12-15 02:50:55.000000000 +0100 @@ -12,8 +12,6 @@ GLUT_CFLAGS = -fexceptions GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-static x11r682/xc/extras/Mesa/configs/linux-static --- xc/extras/Mesa/configs/linux-static 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/linux-static 2004-12-15 02:50:55.000000000 +0100 @@ -27,4 +27,4 @@ GLU_LIB_DEPS = GLUT_LIB_DEPS = GLW_LIB_DEPS = -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-tcc x11r682/xc/extras/Mesa/configs/linux-tcc --- xc/extras/Mesa/configs/linux-tcc 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-tcc 2004-12-15 02:50:55.000000000 +0100 @@ -17,9 +17,6 @@ GLUT_CFLAGS = -fexceptions GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -L$(TCC_DIR) -ltcc -ldl - -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -lXt -L/usr/X11R6/lib -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lXt -L/usr/X11R6/lib -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-ultrasparc x11r682/xc/extras/Mesa/configs/linux-ultrasparc --- xc/extras/Mesa/configs/linux-ultrasparc 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/linux-ultrasparc 2004-12-15 02:50:55.000000000 +0100 @@ -12,7 +12,6 @@ GLUT_CFLAGS = -fexceptions GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR)-lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR)-l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-x86 x11r682/xc/extras/Mesa/configs/linux-x86 --- xc/extras/Mesa/configs/linux-x86 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-x86 2004-12-15 02:50:55.000000000 +0100 @@ -19,8 +19,6 @@ # Library/program dependencies GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-x86-64 x11r682/xc/extras/Mesa/configs/linux-x86-64 --- xc/extras/Mesa/configs/linux-x86-64 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-x86-64 2004-12-15 02:50:55.000000000 +0100 @@ -23,8 +23,6 @@ # Library/program dependencies GL_LIB_DEPS = -L/usr/X11R6/lib64 -lX11 -lXext -lm -lpthread -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib64 -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib64 -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-x86-64-static x11r682/xc/extras/Mesa/configs/linux-x86-64-static --- xc/extras/Mesa/configs/linux-x86-64-static 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/linux-x86-64-static 2004-12-15 02:50:55.000000000 +0100 @@ -37,4 +37,4 @@ GLU_LIB_DEPS = GLUT_LIB_DEPS = GLW_LIB_DEPS = -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib64 -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib64 -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-x86-glide x11r682/xc/extras/Mesa/configs/linux-x86-glide --- xc/extras/Mesa/configs/linux-x86-glide 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-x86-glide 2004-12-15 02:50:55.000000000 +0100 @@ -19,8 +19,6 @@ # Library/program dependencies GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -L/usr/local/glide/lib -lglide3x -lm -lpthread -OSMESA_LIB_DEPS = -L$(LIB_DIR) -lGL -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/X11R6/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/local/glide/lib -lglide3x -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXmu -lXt -lXi -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/X11R6/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/local/glide/lib -lglide3x -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/linux-x86-static x11r682/xc/extras/Mesa/configs/linux-x86-static --- xc/extras/Mesa/configs/linux-x86-static 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/linux-x86-static 2004-12-15 02:50:55.000000000 +0100 @@ -34,4 +34,4 @@ GLU_LIB_DEPS = GLUT_LIB_DEPS = GLW_LIB_DEPS = -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm -lstdc++ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/openbsd x11r682/xc/extras/Mesa/configs/openbsd --- xc/extras/Mesa/configs/openbsd 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/openbsd 2004-12-15 02:50:56.000000000 +0100 @@ -12,7 +12,7 @@ GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm OSMESA_LIB_DEPS = -lm -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm -APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -lglut -lGLU -lGL -lm +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/X11R6/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/osf1 x11r682/xc/extras/Mesa/configs/osf1 --- xc/extras/Mesa/configs/osf1 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/osf1 2004-12-15 02:50:56.000000000 +0100 @@ -11,8 +11,6 @@ CXXFLAGS = -O2 -std ansi -ieee GL_LIB_DEPS = -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lX11 -lXmu -lXt -lXi -lm -APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -lXext -lXmu -lXi -lm - - +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXt -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXext -lXmu -lXi -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/solaris-x86-gcc x11r682/xc/extras/Mesa/configs/solaris-x86-gcc --- xc/extras/Mesa/configs/solaris-x86-gcc 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/solaris-x86-gcc 2004-12-15 02:50:56.000000000 +0100 @@ -13,9 +13,9 @@ MKLIB_OPTIONS = -static GL_LIB_DEPS = -L/usr/openwin/lib -lX11 -lXext -lm -lpthread -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -L/usr/openwin/lib -lX11 -lXmu -lXt -lXi -lm -APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/openwin/lib -R/usr/openwin/lib -lglut -lGLU -lGL -lm +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/openwin/lib -lX11 -lXmu -lXt -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -L/usr/openwin/lib -R/usr/openwin/lib -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm GL_LIB_NAME = libGL.a GLU_LIB_NAME = libGLU.a diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/sunos4-static x11r682/xc/extras/Mesa/configs/sunos4-static --- xc/extras/Mesa/configs/sunos4-static 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/sunos4-static 2004-12-15 02:50:56.000000000 +0100 @@ -22,4 +22,4 @@ GLU_LIB_DEPS = GLUT_LIB_DEPS = GLW_LIB_DEPS = -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lpthread -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/sunos5 x11r682/xc/extras/Mesa/configs/sunos5 --- xc/extras/Mesa/configs/sunos5 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/sunos5 2004-12-15 02:50:56.000000000 +0100 @@ -12,7 +12,7 @@ GLUT_CFLAGS = -DSOLARIS_2_4_BUG GL_LIB_DEPS = -L/usr/openwin/lib -L/usr/dt/lib -lX11 -lXext -lXmu -lXi -lm -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/openwin/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lCrun -lX11 -lglut -lGLU -lGL -lm +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/openwin/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -lCrun -lX11 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/sunos5-gcc x11r682/xc/extras/Mesa/configs/sunos5-gcc --- xc/extras/Mesa/configs/sunos5-gcc 2004-07-22 08:49:32.000000000 +0200 +++ xc/extras/Mesa/configs/sunos5-gcc 2004-12-15 02:50:56.000000000 +0100 @@ -14,8 +14,8 @@ GLUT_CFLAGS = -fexceptions -DSOLARIS_2_4_BUG GL_LIB_DEPS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/openwin/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -lglut -lGLU -lGL -lm +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/openwin/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/sunos5-smp x11r682/xc/extras/Mesa/configs/sunos5-smp --- xc/extras/Mesa/configs/sunos5-smp 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/sunos5-smp 2004-12-15 02:50:56.000000000 +0100 @@ -12,8 +12,8 @@ GLUT_CFLAGS = -DSOLARIS_2_4_BUG GL_LIB_DEPS = -L/usr/openwin/lib -lX11 -lXext -lXmu -lXi -lm -GLU_LIB_DEPS = -L$(LIB_DIR) -lGL -lm -GLUT_LIB_DEPS = -L$(LIB_DIR) -lGLU -lGL -lm -GLW_LIB_DEPS = -L$(LIB_DIR) -lGL -L/usr/openwin/lib -lXt -lX11 -APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -lglut -lGLU -lGL -lm -lCrun +GLU_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -lm +GLUT_LIB_DEPS = -L$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lm +GLW_LIB_DEPS = -L$(LIB_DIR) -l$(GL_LIB) -L/usr/openwin/lib -lXt -lX11 +APP_LIB_DEPS = -L$(LIB_DIR) -lX11 -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lm -lCrun diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/configs/ultrix-gcc x11r682/xc/extras/Mesa/configs/ultrix-gcc --- xc/extras/Mesa/configs/ultrix-gcc 2004-06-16 11:16:22.000000000 +0200 +++ xc/extras/Mesa/configs/ultrix-gcc 2004-12-15 02:50:56.000000000 +0100 @@ -18,4 +18,4 @@ GLW_LIB_NAME = libGLw.a OSMESA_LIB_NAME = libOSMesa.a -APP_LIB_DEPS = -L$(LIB_DIR) -lglut -lGLU -lGL -lXmu -lX11 -lXi -lm +APP_LIB_DEPS = -L$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) -lXmu -lX11 -lXi -lm diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/README.3DFX x11r682/xc/extras/Mesa/docs/README.3DFX --- xc/extras/Mesa/docs/README.3DFX 2004-08-13 01:43:26.000000000 +0200 +++ xc/extras/Mesa/docs/README.3DFX 2004-12-15 02:50:56.000000000 +0100 @@ -3,13 +3,13 @@ -Mesa-6.1 release notes: +Mesa-6.2 release notes: ----------------------- 1) Glide2 support has been ceased; please visit the Glide SourceForge and help us improve Glide3. 2) The current release is a WIP; among other things, the Linux build works - only to some extent. Voodoo Rush not fully supported. Any help will be + only to some extent. Voodoo Rush not fully tested. Any help will be appreciated. 3) Although Mesa is designed to work with any Glide3, it would benefit from interacting with newer Glide libraries, which can export functions like: @@ -60,10 +60,13 @@ enable driver debug code FX_TRAP_GLIDE enable Glide trace code +FX_PACKEDCOLOR + use packed color in vertex structure FX_TC_NAPALM map GL_COMPRESSED_RGB[A] to FXT1. This will have effect on Napalm only (can coexist with FX_TC_NCC, but has higher priority) FX_TC_NCC + experimental map GL_COMPRESSED_RGB[A] to NCC. This will have effect on any 3dfx HW (can coexist with FX_TC_NAPALM, but has lesser priority) FX_COMPRESS_S3TC_AS_FXT1_HACK @@ -93,7 +96,7 @@ FX_GLIDE_NUM_TMU OS: all - HW: dual-TMU cards (some Voodoo1, Voodoo2, Avenger, Napalm) + HW: dual-TMU cards (Voodoo2, Avenger, Napalm) Desc: force single-TMU Note: (*) Value: "1" @@ -141,6 +144,11 @@ HW: all Desc: verbose to stderr Value: any; special value "r" to redirect stderr to MESA.LOG +MESA_FX_NOSNAP + OS: all + HW: Voodoo1, Rush, Banshee + Desc: do not snap vertices inside Mesa + Note: to be used with Glide3x that snaps vertices itself MESA_FX_POINTCAST OS: all HW: dual-TMU cards (some Voodoo1, Voodoo2, Avenger, Napalm) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/README.BEOS x11r682/xc/extras/Mesa/docs/README.BEOS --- xc/extras/Mesa/docs/README.BEOS 2004-08-28 06:26:59.000000000 +0200 +++ xc/extras/Mesa/docs/README.BEOS 2004-12-15 02:50:56.000000000 +0100 @@ -32,12 +32,22 @@ - gcc version 2.95.3 for BeOS You can find it here: http://www.bebits.com/app/2157 -To build Mesa-powered BeOS libGL.so version, type this at root folder: +To build Mesa-powered BeOS libGL.so version, open an Terminal window, +move to Mesa root folder and type this command: $ make beos +Note that the "beos" argument is only needed the first time to setup build config. +Next times, typing "make" will be enough. + When it finishes the Mesa based libGL.so library for -BeOS will be in the lib/ directory. +BeOS will be in the lib/ directory, along libglut.so library. +Several demo/test programs should have been build too under progs/* folders. +If it stop when building one of the progs/* programs, you may want to ignore it +and force make to move on next target by adding the -k make option: + +$ cd progs +$ make -k To install it as Be's default libGL.so replacement, put it in your /boot/home/config/lib/ directory. All your GL/GLUT apps will use @@ -50,26 +60,27 @@ To build a DEBUG version, type instead this : -$ DEBUG=1 make beos +$ DEBUG=1 make * Example Programs -Look in the progs/beos/ directory for one or two BGLView demo -programs. They should have been compiled along with the Mesa -library. +Look under progs/beos/ for some BGLView-based programs. +You should find under progs/samples and progs/redbook directories GLUT-based programs too. +They all should have been compiled along with the Mesa library. * GLUT -A beta version of GLUT 3.7 port for BeOS can be found at +A beta version of GLUT 3.7 port for BeOS, made by Jake Hamby, can be found at http://anobject.com/jehamby/Code/Glut-3.7-x86.zip. +This is the version currently included in Mesa source code, and +build in lib/libglut.so. -There's is a 3.5 version in src/glut/beos/, too. -The original distribution can be obtained from -http://home.beoscentral.com/jehamby/Glut-3.5-x86.zip +A previous 3.5 version of this GLUT BeOS port used to be available at +http://home.beoscentral.com/jehamby/Glut-3.5-x86.zip. -They are special version of GLUT adapted for the BeOS. I don't +They're special versions of GLUT for the BeOS platform. I don't believe Mark Kilgard's normal GLUT distribution includes BeOS support. @@ -87,8 +98,6 @@ * Work Left To Do -- Switch to SGI GLU implementation.. -- Add to build the BeOS GLUT port. Update it to latest known (3.7 ?) - BDirectWindow single buffering support is not implemented yet. - Color index mode is not implemented yet. - Reading pixels from the front buffer not implemented yet. @@ -99,7 +108,8 @@ * Other contributors to this BeOS port -Marcin Konicki ahwayakchih neoni net +Jake Hamby jhamby anobject com +Marcin Konicki ahwayakchih neoni net Francois Revol revol free fr @@ -121,4 +131,4 @@ ---------------------------------------------------------------------- -$Id: README.BEOS,v 1.10 2004/08/14 15:23:51 brianp Exp $ +$Id: README.BEOS,v 1.11 2004/08/24 08:31:57 phoudoin Exp $ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/README.WIN32 x11r682/xc/extras/Mesa/docs/README.WIN32 --- xc/extras/Mesa/docs/README.WIN32 2004-08-13 01:43:27.000000000 +0200 +++ xc/extras/Mesa/docs/README.WIN32 2004-12-15 02:50:56.000000000 +0100 @@ -1,6 +1,6 @@ File: docs/README.WIN32 -Last updated: Sep 18, 2003 - Karl Schultz - kschultz@users.sourceforge.net +Last updated: Oct 01, 2004 - Karl Schultz - kschultz@users.sourceforge.net Quick Start @@ -14,16 +14,36 @@ workspaces and projects. Makefiles are no longer shipped or supported, but can be generated from the projects using Visual Studio. +The workspace and project files were created with Visual Studio 6, so that +they can be used with VS6 and so that they can also be imported into VS 7. + Details and Notes - To build the Mesa libraries, open the Mesa.dsw workspace file - in the top directory. You can build each project one-by-one, - or build the glut project to build everything except osmesa, - which needs to be built separately. The build process will - create a lib directory in the top directory and will put the - following files there: - OPENGL32.LIB, GLU32.LIB, GLUT32.LIB, OSMESA32.LIB - OPENGL32.DLL, GLU32.DLL, GLUT32.DLL, OSMESA32.DLL + in the top directory. You will need to build at least one + driver. Currently, only the gdi and osmesa drivers are available. + Select one or the other as the active project and build it. + If you want glu, select the glu project as active and build that as well. + +- Glut is no longer in the Mesa.dsw workspace. It is now built in + the demo workspace (see below). + +- The build process will create a lib directory in the top directory + and will put the following files there as you build them: + OPENGL32.LIB, GLU32.LIB, OSMESA32.LIB + OPENGL32.DLL, GLU32.DLL, OSMESA32.DLL + +- Some users have reported problems building glu with VS7 after importing + and converting the VS6 project files. The problem is caused by a custom + build step that was put in place to work around a problem with VS6 not + recognizing .cc files as C++ source files. It appears that VS7 can be + configured to recognize .cc files as C++ files and so it compiles these + glu files with the default settings, and does not use settings that are + required to compile the files correctly. The easiest way to solve the + problem is to remove the .cc files from the glu project. This does not + delete the files, but removes them from the project so that VS does not + try to compile them at all. This allows the custom build step to compile + the files with the proper settings. - After building, you can copy the above DLL files to a place in your PATH such as $SystemRoot/SYSTEM32. If you don't like putting things in a @@ -51,9 +71,6 @@ - The si-glu sources are used to build the GLU libs. This was done mainly to get the better tessellator code. -- The osmesa driver builds and should work on Windows as well as - any other platform. - - The Windows driver (in src/Windows) builds and runs at least at a minimal level. I modified this driver to work with the new Mesa 4.0 code and driver architecture, but I did not do a great diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/RELNOTES-6.2 x11r682/xc/extras/Mesa/docs/RELNOTES-6.2 --- xc/extras/Mesa/docs/RELNOTES-6.2 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/docs/RELNOTES-6.2 2004-12-15 02:50:56.000000000 +0100 @@ -0,0 +1,49 @@ + + Mesa 6.2 release notes + + October 2, 2004 + + PLEASE READ!!!! + + + +Introduction +------------ + +Mesa uses an even/odd version number scheme like the Linux kernel. +Odd numbered versions (such as 6.1) designate new developmental releases. +Even numbered versions (such as 6.2) designate stable releases. + + +This release primarily just fixes bugs found in the Mesa 6.1 release. +See the VERSIONS file for details. + + + +Known Issues +------------ + +The GL_EXT_pixel_buffer_object extension isn't fully implemented for +functions like glPolygonStipple, glConvolutionFilter, glColorTable, +etc. The important functions like glRead/DrawPixels, glTex[Sub]Image, +and glBitmap work with PBOs. + + + +Driver Status +---------------------- --------------------- +XMesa (Xlib) implements OpenGL 1.5 +OSMesa (off-screen) implements OpenGL 1.5 +Glide (3dfx Voodoo1/2) implements OpenGL 1.3 +SVGA implements OpenGL 1.3 +Wind River UGL implements OpenGL 1.3 +Windows/Win32 implements OpenGL 1.5 +DJGPP implements OpenGL 1.5 +GGI implements OpenGL 1.3 +BeOS implements OpenGL 1.5 +Allegro needs updating +D3D needs updating + + +---------------------------------------------------------------------- +$Id: RELNOTES-6.2,v 3.3 2004/10/02 14:59:29 brianp Exp $ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/RELNOTES-6.2.1 x11r682/xc/extras/Mesa/docs/RELNOTES-6.2.1 --- xc/extras/Mesa/docs/RELNOTES-6.2.1 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/docs/RELNOTES-6.2.1 2004-12-15 02:50:56.000000000 +0100 @@ -0,0 +1,50 @@ + + Mesa 6.2.1 release notes + + December 9, 2004 + + PLEASE READ!!!! + + + +Introduction +------------ + +Mesa uses an even/odd version number scheme like the Linux kernel. +Odd numbered versions (such as 6.1) designate new developmental releases. +Even numbered versions (such as 6.2.x) designate stable releases. + + +This release primarily just fixes bugs found in the Mesa 6.2 release. +See the VERSIONS file for details. + + + +Known Issues +------------ + +The GL_EXT_pixel_buffer_object extension isn't fully implemented for +functions like glPolygonStipple, glConvolutionFilter, glColorTable, +etc. The important functions like glRead/DrawPixels, glTex[Sub]Image, +and glBitmap work with PBOs. This has been fixed for Mesa 6.3. + + + + +Driver Status +---------------------- --------------------- +XMesa (Xlib) implements OpenGL 1.5 +OSMesa (off-screen) implements OpenGL 1.5 +Glide (3dfx Voodoo1/2) implements OpenGL 1.3 +SVGA implements OpenGL 1.3 +Wind River UGL implements OpenGL 1.3 +Windows/Win32 implements OpenGL 1.5 +DJGPP implements OpenGL 1.5 +GGI implements OpenGL 1.3 +BeOS implements OpenGL 1.5 +Allegro needs updating +D3D needs updating + + +---------------------------------------------------------------------- +$Id: RELNOTES-6.2.1,v 1.1.2.2 2004/12/09 23:09:19 brianp Exp $ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/VERSIONS x11r682/xc/extras/Mesa/docs/VERSIONS --- xc/extras/Mesa/docs/VERSIONS 2004-08-28 06:27:00.000000000 +0200 +++ xc/extras/Mesa/docs/VERSIONS 2004-12-15 02:50:56.000000000 +0100 @@ -1274,3 +1274,41 @@ - vertex program state references were broken - fixed triangle color interpolation bug on AIX (Shane Blackett) - fixed a number of minor memory leaks (bug #1002030) + + +6.2 October 2, 2004 + New: + - enabled GL_ARB_texture_rectangle (same as GL_NV_texture_rectangle) + - updated Doxygen support (Jose Fonseca) + Changes: + - some GGI driver updates (Christoph Egger, bug 1025977) + Bug fixes: + - Omit GL_ARB_texture_non_power_of_two from list of OpenGL 1.5 features + - fixed a few compilation issues on IRIX + - fixed a matrix classification bug (reported by Wes Bethel) + - we weren't reseting the vertex/fragment program error state + before parsing (Dave Reveman) + - adjust texcoords for sampling texture rectangles (Dave Reveman) + - glGet*(GL_MAX_VERTEX_ATTRIBS_ARB) wasn't implemented + - repeated calls to glDeleteTexture(t) could lead to a crash + - fixed potential ref count bugs in VBOs and vertex/fragment programs + - spriteblast demo didn't handle window size changes correctly + - glTexSubImage didn't handle pixels=NULL correctly for PBOs + - fixed color index mode glDrawPixels bug (Karl Schultz) + + +6.2.1 December 9, 2004 + Bug fixes: + - don't apply regular fog or color sum when using a fragment program + - glProgramEnvParameter4fARB always generated an error on + GL_FRAGMENT_PROGRAM_ARB (fdo bug 1645) + - glVertexAttrib3svNV and glVertexAttrib3svARB were broken + - fixed width/height mix-up in glSeparableFilter2D() + - fixed regression in glCopyPixels + convolution + - glReadPixels from a clipped front color buffer didn't always work + - glTexImage didn't accept GL_RED/GREEN/BLUE as the format + - Attempting queries/accesses of VBO 0 weren't detected as errors + - paletted textures failed if the palette had fewer that 256 entries + Changes: + - fixed a bunch of compiler warnings found with gcc 3.4 + - bug reports should to go bugzilla.freedesktop.org diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/bugs.html x11r682/xc/extras/Mesa/docs/bugs.html --- xc/extras/Mesa/docs/bugs.html 2004-08-13 01:43:28.000000000 +0200 +++ xc/extras/Mesa/docs/bugs.html 2004-12-15 02:50:56.000000000 +0100 @@ -7,9 +7,20 @@

Bug Database

-Bug reports can be filed in the Bug -Database on sourceforge.net. Please follow these guidelines: +The Mesa bug database is now hosted on +freedesktop.org +instead of SourceForge. +

+ +

+To file a Mesa bug, go to + +Bugzilla on freedesktop.org +

+ +

+Please follow these bug reporting guidelines:

    @@ -21,7 +32,8 @@

-Bug reports will automatically be forwarded to the Mesa developer's list. +Bug reports will automatically be forwarded to the Mesa developer's mailing +list.

diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/contents.html x11r682/xc/extras/Mesa/docs/contents.html --- xc/extras/Mesa/docs/contents.html 2004-08-13 01:43:28.000000000 +0200 +++ xc/extras/Mesa/docs/contents.html 2004-12-15 02:50:56.000000000 +0100 @@ -20,7 +20,7 @@ Download / Install

    -
  • Stable Release (6.0.1) +
  • Stable Release (6.2)
  • Downloading/Unpacking
  • Compilation/Installation
  • SGI's GLU diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/cvs_branches.html x11r682/xc/extras/Mesa/docs/cvs_branches.html --- xc/extras/Mesa/docs/cvs_branches.html 2004-08-13 01:43:28.000000000 +0200 +++ xc/extras/Mesa/docs/cvs_branches.html 2004-12-15 02:50:56.000000000 +0100 @@ -15,25 +15,25 @@

    -Currently (Nov 2003), the trunk is the Mesa 5.1 development code -while the mesa_5_0_branch branch has the stable Mesa 5.0.x code. +Currently (Oct 2004), the trunk is the Mesa 6.3 development code +while the mesa_6_2_branch branch has the stable Mesa 6.2.x code.

    Mesa releases use an even/odd numbering scheme to represent stable/development releases. -For example, Mesa 5.0.x (0 is considered even) is a stable release while -Mesa 5.1.x is a development release. +For example, Mesa 6.2 (0 is considered even) is a stable release while +Mesa 6.3 is a development release.

    To checkout a specific CVS branch pass -r and the branch tag after your CVS command. -For example cvs checkout -r mesa_5_0_branch Mesa will -checkout the 5.0.x branch and cvs update -r -mesa_5_0_branch will convert your current CVS tree to the 5.0.x +For example cvs checkout -r mesa_6_2_branch Mesa will +checkout the 6.2 branch and cvs update -r +mesa_6_2_branch will convert your current CVS tree to the 6.2 branch. Consult

  • GL_ARB_occlusion_query
  • GL_ARB_vertex_buffer_object -
  • GL_ARB_texture_non_power_of_two
  • GL_EXT_shadow_funcs

diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/libraries.html x11r682/xc/extras/Mesa/docs/libraries.html --- xc/extras/Mesa/docs/libraries.html 2004-08-13 01:43:29.000000000 +0200 +++ xc/extras/Mesa/docs/libraries.html 2004-12-15 02:50:56.000000000 +0100 @@ -36,7 +36,7 @@ - a scene-graph library

  • OpenVRML - a VRML parsing/display library with "lookat" - an example VRML browser -
  • PLIB - A collection of portable games libraries, including an OpenGL GUI and a simple Scene Graph API +
  • PLIB - A collection of portable games libraries, including an OpenGL GUI and a simple Scene Graph API
  • Pryan - an OpenInventor-like toolkit
  • PyOpenGL - OpenGL interface for Python
  • Quesa - QuickDraw3D-compatible library based on OpenGL, Mesa or Direct3D diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/news.html x11r682/xc/extras/Mesa/docs/news.html --- xc/extras/Mesa/docs/news.html 2004-08-13 01:43:30.000000000 +0200 +++ xc/extras/Mesa/docs/news.html 2004-12-15 02:50:56.000000000 +0100 @@ -7,6 +7,128 @@

    News

    +

    December 9, 2004

    +

    +Mesa 6.2.1 has been released. +This is a stable release which just fixes bugs since the 6.2 release. +

    +
    +    Bug fixes:
    +	- don't apply regular fog or color sum when using a fragment program
    +	- glProgramEnvParameter4fARB always generated an error on
    +	  GL_FRAGMENT_PROGRAM_ARB (fdo bug 1645)
    +	- glVertexAttrib3svNV and glVertexAttrib3svARB were broken
    +	- fixed width/height mix-up in glSeparableFilter2D()
    +	- fixed regression in glCopyPixels + convolution
    +	- glReadPixels from a clipped front color buffer didn't always work
    +	- glTexImage didn't accept GL_RED/GREEN/BLUE as the format
    +	- Attempting queries/accesses of VBO 0 weren't detected as errors
    +	- paletted textures failed if the palette had fewer that 256 entries
    +    Changes:
    +	- fixed a bunch of compiler warnings found with gcc 3.4
    +	- bug reports should to go bugzilla.freedesktop.org
    +
    +

    +The MD5 checksums are: +

    +
    +tbd
    +
    + + +

    October 2, 2004

    +

    +Mesa 6.2 has been released. +This is a stable release which just fixes bugs since the 6.1 release. +

    +
    +    New:
    +	- enabled GL_ARB_texture_rectangle (same as GL_NV_texture_rectangle)
    +	- updated Doxygen support (Jose Fonseca)
    +    Changes:
    +	- some GGI driver updates (Christoph Egger, bug 1025977)
    +    Bug fixes:
    +	- Omit GL_ARB_texture_non_power_of_two from list of OpenGL 1.5 features
    +	- fixed a few compilation issues on IRIX
    +	- fixed a matrix classification bug (reported by Wes Bethel)
    +	- we weren't reseting the vertex/fragment program error state
    +	  before parsing (Dave Reveman)
    +	- adjust texcoords for sampling texture rectangles (Dave Reveman)
    +	- glGet*(GL_MAX_VERTEX_ATTRIBS_ARB) wasn't implemented
    +	- repeated calls to glDeleteTexture(t) could lead to a crash
    +	- fixed potential ref count bugs in VBOs and vertex/fragment programs
    +	- spriteblast demo didn't handle window size changes correctly
    +	- glTexSubImage didn't handle pixels=NULL correctly for PBOs
    +	- fixed color index mode glDrawPixels bug (Karl Schultz)
    +
    +

    +The MD5 checksums are: +

    +
    +9e8f34b059272dbb8e1f2c968b33bbf0  MesaLib-6.2.tar.gz
    +3d6a6362390b6a37d3cb2e615f3ac7db  MesaLib-6.2.tar.bz2
    +6cfd7895d28e695c0dbbed9469564091  MesaLib-6.2.zip
    +3e06e33b0809f09855cb60883b8bdfef  MesaDemos-6.2.tar.gz
    +9d160009c3dfdb35fe7e4088c9ba8f85  MesaDemos-6.2.tar.bz2
    +856f7ec947122eb3c8985ebc2f654dcd  MesaDemos-6.2.zip
    +
    + + +

    August 18, 2004

    +

    +Mesa 6.1 has been released. +This is a new development release (version 6.2 will be a stabilization +release). +

    +
    +    New:
    +	- Revamped Makefile system
    +	- glXUseRotatedXFont() utility (see xdemos/xuserotfont.c)
    +	- internal driver interface changes related to texture object
    +	  allocation, vertex/fragment programs, BlendEquationSeparate, etc.
    +	- option to walk triangle edges with double-precision floats
    +	  (Justin Novosad of Discreet) (see config.h file)
    +	- support for AUX buffers in software GLX driver
    +	- updated glext.h to version 24 and glxext.h to version 6
    +	- new MESA_GLX_FORCE_ALPHA and MESA_GLX_DEPTH_BITS env vars
    +	- updated BeOS support (Philippe Houdoin)
    +    Changes:
    +	- fragment fog interpolation is perspective corrected now
    +	- new glTexImage code, much cleaner, may be a bit faster
    +    Bug fixes:
    +	- glArrayElement in display lists didn't handle generic vertex attribs
    +	- glFogCoord didn't always work properly
    +	- ARB_fragment_program fog options didn't work
    +	- frag prog TEX instruction no longer incorrectly divides s,t,r by q
    +	- ARB frag prog TEX and TEXP instructions now use LOD=0
    +	- glTexEnviv in display lists didn't work
    +	- glRasterPos didn't do texgen or apply texture matrix
    +	- GL_DOUBLE-valued vertex arrays were broken in some cases
    +	- fixed texture rectangle edge/border sampling bugs
    +	- sampling an incomplete texture in a fragment program would segfault
    +	- glTexImage was missing a few error checks
    +	- fixed some minor glGetTexParameter glitches
    +	- GL_INTENSITY was mistakenly accepted as a  to glTexImage
    +	- fragment program writes to RC/HC register were broken
    +	- fixed a few glitches in GL_HP_occlusion_test extension
    +	- glBeginQueryARB and glEndQueryARB didn't work inside display lists
    +	- vertex program state references were broken
    +	- fixed triangle color interpolation bug on AIX (Shane Blackett)
    +	- fixed a number of minor memory leaks (bug #1002030)
    +
    +The MD5 checksums are: +

    +
    +c9284d295ebcd2e0486cc3cd54e5863c  MesaLib-6.1.tar.gz
    +5de1f53ec0709f60fc68fdfed57351f3  MesaLib-6.1.tar.bz2
    +483e77cac4789a5d36c42f3c0136d6d8  MesaLib-6.1.zip
    +8c46cfa6f9732acc6f6c25724aad0246  MesaDemos-6.1.tar.gz
    +89bfe0f6c69b39fd0ebd9fff481a4e9b  MesaDemos-6.1.tar.bz2
    +161268531fcc6f0c5a056430ee97e0c1  MesaDemos-6.1.zip
    +
    + + +

    April 2, 2004

    @@ -831,6 +953,6 @@


    -$Id: news.html,v 3.13 2004/04/02 23:37:02 brianp Exp $ +$Id: news.html,v 3.15.2.3 2004/12/09 23:09:20 brianp Exp $ \ No newline at end of file diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/osmesa.html x11r682/xc/extras/Mesa/docs/osmesa.html --- xc/extras/Mesa/docs/osmesa.html 2004-08-13 01:43:30.000000000 +0200 +++ xc/extras/Mesa/docs/osmesa.html 2004-12-15 02:50:56.000000000 +0100 @@ -43,16 +43,14 @@

    To build Mesa/OSMesa with 16-bit color channels:

    -      cd Mesa-5.x/src
    -      make -f Makefile.X11 clean
    -      make -f Makefile.OSMesa16 linux-osmesa16
    +      make realclean
    +      make linux-osmesa16
     
    For 32-bit channels:
    -      cd Mesa-5.x/src
    -      make -f Makefile.X11 clean
    -      make -f Makefile.OSMesa16 linux-osmesa32
    +      make realclean
    +      make linux-osmesa32
     

    @@ -60,13 +58,12 @@

    -If you're not using Linux, you can easily edit Make-config and add -an appropriate configuration. -

    -

    -The Mesa/tests/osdemo16.c file (available via CVS) demonstrates how -to use this feature. +If you need to compile on a non-Linux platform, copy Mesa/configs/linux-osmesa16 +to a new config file and edit it as needed. Then, add the new config name to +the top-level Makefile. Send a patch to the Mesa developers too, if you're +inclined.

    +

    BE WARNED: 16 and 32-bit channel support has not been exhaustively tested and there may be some bugs. However, a number of people have diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/docs/relnotes.html x11r682/xc/extras/Mesa/docs/relnotes.html --- xc/extras/Mesa/docs/relnotes.html 2004-08-13 01:43:30.000000000 +0200 +++ xc/extras/Mesa/docs/relnotes.html 2004-12-15 02:50:56.000000000 +0100 @@ -11,6 +11,8 @@

      +
    • RELNOTES-6.2.1 +
    • RELNOTES-6.2
    • RELNOTES-6.1
    • RELNOTES-6.0
    • RELNOTES-5.1 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/include/GL/gl.h x11r682/xc/extras/Mesa/include/GL/gl.h --- xc/extras/Mesa/include/GL/gl.h 2004-06-21 15:35:05.000000000 +0200 +++ xc/extras/Mesa/include/GL/gl.h 2004-12-15 02:50:56.000000000 +0100 @@ -1,6 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.2 * * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/include/GL/gl_mangle.h x11r682/xc/extras/Mesa/include/GL/gl_mangle.h --- xc/extras/Mesa/include/GL/gl_mangle.h 2004-06-16 11:16:30.000000000 +0200 +++ xc/extras/Mesa/include/GL/gl_mangle.h 2004-12-15 02:50:56.000000000 +0100 @@ -30,6 +30,7 @@ /* Internal symbols which may collide with other OpenGL implementations. */ #define __glCoreCreateContext __mglCoreCreateContext #define __glCoreNopDispatch __mglCoreNopDispatch +#define gl__unused413 MANGLE(__unused413) /*REGENERATE_TO_END-----------ALL LINES BELOW HERE GET REPLACED ON REGENERATION */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/include/GL/glut.h x11r682/xc/extras/Mesa/include/GL/glut.h --- xc/extras/Mesa/include/GL/glut.h 2004-06-16 11:16:32.000000000 +0200 +++ xc/extras/Mesa/include/GL/glut.h 2004-12-15 02:50:56.000000000 +0100 @@ -75,7 +75,7 @@ To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */ /* XXX This is from Win32's */ -# if !defined(_MSC_VER) && !defined(__cdecl) +# if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__cdecl) /* Define __cdecl for non-Microsoft compilers. */ # define __cdecl # define GLUT_DEFINED___CDECL @@ -108,7 +108,7 @@ and redifinition of Windows system defs, also removes requirement of pretty much any standard windows header from this file */ -#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__CYGWIN32__) +#if (_MSC_VER >= 800) || defined(__MINGW32__) || defined(_STDCALL_SUPPORTED) || defined(__CYGWIN32__) # define GLUTAPIENTRY __stdcall #else # define GLUTAPIENTRY @@ -664,7 +664,8 @@ GLUTAPI int GLUTAPIENTRY glutLayerGet(GLenum type); #endif #if (GLUT_API_VERSION >= 5) -GLUTAPI void * GLUTAPIENTRY glutGetProcAddress(const char *procName); +typedef void (*GLUTproc)(); +GLUTAPI GLUTproc GLUTAPIENTRY glutGetProcAddress(const char *procName); #endif /* GLUT font sub-API */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/include/GL/glx.h x11r682/xc/extras/Mesa/include/GL/glx.h --- xc/extras/Mesa/include/GL/glx.h 2004-06-16 11:16:33.000000000 +0200 +++ xc/extras/Mesa/include/GL/glx.h 2004-12-15 02:50:56.000000000 +0100 @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.2 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -46,7 +46,7 @@ #if defined(USE_MGL_NAMESPACE) -#include +#include "glx_mangle.h" #endif diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/include/GL/internal/dri_interface.h x11r682/xc/extras/Mesa/include/GL/internal/dri_interface.h --- xc/extras/Mesa/include/GL/internal/dri_interface.h 2004-07-22 08:49:46.000000000 +0200 +++ xc/extras/Mesa/include/GL/internal/dri_interface.h 2004-12-15 02:50:57.000000000 +0100 @@ -149,6 +149,8 @@ int * backX, int * backY, int * numBackClipRects, drm_clip_rect_t ** pBackClipRects ); +/* Test for the xf86dri.h header file */ +#ifndef _XF86DRI_H_ extern GLboolean XF86DRIDestroyContext( __DRInativeDisplay *dpy, int screen, __DRIid context_id ); @@ -157,6 +159,7 @@ extern GLboolean XF86DRIDestroyDrawable( __DRInativeDisplay *dpy, int screen, __DRIid drawable); +#endif /*@}*/ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/include/GL/wmesa.h x11r682/xc/extras/Mesa/include/GL/wmesa.h --- xc/extras/Mesa/include/GL/wmesa.h 2004-06-16 11:16:34.000000000 +0200 +++ xc/extras/Mesa/include/GL/wmesa.h 2004-12-15 02:50:56.000000000 +0100 @@ -52,15 +52,17 @@ #include "gl\gl.h" -#pragma warning (disable:4273) -#pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */ -#pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */ -#pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */ -#pragma warning( disable : 4013 ) /* 'function' undefined; assuming extern returning int */ -#pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */ -#pragma warning( disable : 4273 ) /* 'identifier' : inconsistent DLL linkage. dllexport assumed */ -#if (MESA_WARNQUIET>1) -# pragma warning( disable : 4146 ) /* unary minus operator applied to unsigned type, result still unsigned */ +#if defined(_MSV_VER) && !defined(__GNUC__) +# pragma warning (disable:4273) +# pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */ +# pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */ +# pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */ +# pragma warning( disable : 4013 ) /* 'function' undefined; assuming extern returning int */ +# pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */ +# pragma warning( disable : 4273 ) /* 'identifier' : inconsistent DLL linkage. dllexport assumed */ +# if (MESA_WARNQUIET>1) +# pragma warning( disable : 4146 ) /* unary minus operator applied to unsigned type, result still unsigned */ +# endif #endif /* diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/Makefile x11r682/xc/extras/Mesa/src/Makefile --- xc/extras/Mesa/src/Makefile 2004-06-16 11:17:09.000000000 +0200 +++ xc/extras/Mesa/src/Makefile 2004-12-15 02:50:57.000000000 +0100 @@ -7,7 +7,11 @@ SUBDIRS = $(SRC_DIRS) -default: $(LIB_DIR) subdirs +default: message $(LIB_DIR) subdirs + + +message: + @echo "Making sources for" $(CONFIG_NAME) subdirs: diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/glx/mini/Makefile x11r682/xc/extras/Mesa/src/glx/mini/Makefile --- xc/extras/Mesa/src/glx/mini/Makefile 2004-07-22 08:51:13.000000000 +0200 +++ xc/extras/Mesa/src/glx/mini/Makefile 2004-12-15 02:50:57.000000000 +0100 @@ -18,7 +18,10 @@ miniglx.c \ miniglx_events.c -OBJECTS = $(C_SOURCES:.c=.o) +X86_SOURCES = $(TOP)/src/mesa/x86/glapi_x86.S + +OBJECTS = $(C_SOURCES:.c=.o) \ + $(ASM_SOURCES:.S=.o) INCLUDES = -I. $(INCLUDE_DIRS) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/glx/mini/miniglx.c x11r682/xc/extras/Mesa/src/glx/mini/miniglx.c --- xc/extras/Mesa/src/glx/mini/miniglx.c 2004-08-13 01:04:47.000000000 +0200 +++ xc/extras/Mesa/src/glx/mini/miniglx.c 2004-12-15 02:50:57.000000000 +0100 @@ -1711,7 +1711,7 @@ GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits = 0; GLint indexBits = 0, depthBits = 0, stencilBits = 0; GLint numSamples = 0; - int i; + int i=0; /* * XXX in the future, might be interpreted as a VT @@ -1805,6 +1805,7 @@ (void) alphaBits; (void) stereoFlag; for ( mode = dpy->driver_modes ; mode != NULL ; mode = mode->next ) { + i++; if (mode->rgbMode == rgbFlag && mode->doubleBufferMode == dbFlag && mode->redBits >= redBits && @@ -2149,7 +2150,8 @@ { GLXDrawable drawable = (GLXDrawable) draw; drm_clip_rect_t * cliprect; - + Display* display = (Display*)dpy; + __DRIcontextPrivate *pcp = (__DRIcontextPrivate *)CurrentContext->driContext.private; if (drawable == 0) { return GL_FALSE; } @@ -2159,15 +2161,20 @@ cliprect->y1 = drawable->y; cliprect->x2 = drawable->x + drawable->w; cliprect->y2 = drawable->y + drawable->h; + + /* the drawable index is by client id */ + *index = display->clientID; + *stamp = pcp->driScreenPriv->pSAREA->drawableTable[display->clientID].stamp; *x = drawable->x; *y = drawable->y; *width = drawable->w; *height = drawable->h; *numClipRects = 1; *pClipRects = cliprect; - *backX = 0; - *backY = 0; + + *backX = drawable->x; + *backY = drawable->y; *numBackClipRects = 0; *pBackClipRects = 0; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/Makefile x11r682/xc/extras/Mesa/src/mesa/Makefile --- xc/extras/Mesa/src/mesa/Makefile 2004-08-28 06:27:07.000000000 +0200 +++ xc/extras/Mesa/src/mesa/Makefile 2004-12-15 02:50:57.000000000 +0100 @@ -176,7 +176,7 @@ clean: -rm -f */*.o - -rm -f depend mesa.a + -rm -f depend depend.bak mesa.a -rm -f drivers/*/*.o (cd drivers/dri ; $(MAKE) clean) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/Makefile.BeOS x11r682/xc/extras/Mesa/src/mesa/Makefile.BeOS --- xc/extras/Mesa/src/mesa/Makefile.BeOS 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/src/mesa/Makefile.BeOS 2004-12-15 02:50:57.000000000 +0100 @@ -0,0 +1,303 @@ +# Mesa 3-D graphics library +# Version: 5.1 +# +# Copyright (C) 1995-2003 Brian Paul All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# BeOS driver makefile v1.0 for Mesa 5.1.x +# +# Copyright (C) 2002-2003 - Philippe Houdoin +# Email : philippe.houdoin@free.fr +# Web : http://philippe.houdoin.free.fr/phil/beos/index-en.html +# +# ------------------------------------------------------------------- + +## BeOS Generic Makefile v2.0 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you. This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= libGL.so + +# specify the type of binary +# APP: Application +# SHARED: Shared library or add-on +# STATIC: Static library archive +# DRIVER: Kernel Driver +TYPE= SHARED + +# specify the source files to use +# full paths or paths relative to the makefile can be included +# all files, regardless of directory, will have their object +# files created in the common object directory. +# Note that this means this makefile will not work correctly +# if two source files with the same name (source.c or source.cpp) +# are included from different directories. Also note that spaces +# in folder names do not work well with this makefile. + + +include sources + + +BEOS_DRIVER_SOURCES = \ + drivers/beos/GLView.cpp + +MESA_DEFINES = +ASM_SOURCES = + +# To use GAS assembler, uncomment this line instead: +MESA_DEFINES += GNU_ASSEMBLER +# To use NASM assembler, uncomment this line instead: +# MESA_DEFINES += NASM_ASSEMBLER +# To build a DEBUG version of Mesa, uncomment this line instead: +# MESA_DEFINES += DEBUG + +# x86-optimized code +MACHINE=$(shell uname -m) +ifeq ($(MACHINE), BePC) + MESA_DEFINES += USE_X86_ASM USE_SSE_ASM USE_MMX_ASM + MESA_DEFINES += USE_3DNOW_ASM + ASM_SOURCES = $(X86_SOURCES) +else + # No assembly optimization for PowerPC... + # HAVE_ALTIVEC=1 +endif + +# FIXME: SI-GLU version support currently broken +# USE_SI_GLU=1 +ifdef USE_SI_GLU + GLU_SOURCES = \ + ../si-glu/libutil/error.c \ + ../si-glu/libutil/glue.c \ + ../si-glu/libutil/mipmap.c \ + ../si-glu/libutil/project.c \ + ../si-glu/libutil/quad.c \ + ../si-glu/libutil/registry.c \ + ../si-glu/libtess/dict.c \ + ../si-glu/libtess/geom.c \ + ../si-glu/libtess/memalloc.c \ + ../si-glu/libtess/mesh.c \ + ../si-glu/libtess/normal.c \ + ../si-glu/libtess/priorityq.c \ + ../si-glu/libtess/render.c \ + ../si-glu/libtess/sweep.c \ + ../si-glu/libtess/tess.c \ + ../si-glu/libtess/tessmono.c \ + ../si-glu/libnurbs/interface/bezierEval.cc \ + ../si-glu/libnurbs/interface/bezierPatch.cc \ + ../si-glu/libnurbs/interface/bezierPatchMesh.cc \ + ../si-glu/libnurbs/interface/glcurveval.cc \ + ../si-glu/libnurbs/interface/glinterface.cc \ + ../si-glu/libnurbs/interface/glrenderer.cc \ + ../si-glu/libnurbs/interface/glsurfeval.cc \ + ../si-glu/libnurbs/interface/incurveeval.cc \ + ../si-glu/libnurbs/interface/insurfeval.cc \ + ../si-glu/libnurbs/internals/arc.cc \ + ../si-glu/libnurbs/internals/arcsorter.cc \ + ../si-glu/libnurbs/internals/arctess.cc \ + ../si-glu/libnurbs/internals/backend.cc \ + ../si-glu/libnurbs/internals/basiccrveval.cc \ + ../si-glu/libnurbs/internals/basicsurfeval.cc \ + ../si-glu/libnurbs/internals/bin.cc \ + ../si-glu/libnurbs/internals/bufpool.cc \ + ../si-glu/libnurbs/internals/cachingeval.cc \ + ../si-glu/libnurbs/internals/ccw.cc \ + ../si-glu/libnurbs/internals/coveandtiler.cc \ + ../si-glu/libnurbs/internals/curve.cc \ + ../si-glu/libnurbs/internals/curvelist.cc \ + ../si-glu/libnurbs/internals/curvesub.cc \ + ../si-glu/libnurbs/internals/dataTransform.cc \ + ../si-glu/libnurbs/internals/displaylist.cc \ + ../si-glu/libnurbs/internals/flist.cc \ + ../si-glu/libnurbs/internals/flistsorter.cc \ + ../si-glu/libnurbs/internals/hull.cc \ + ../si-glu/libnurbs/internals/intersect.cc \ + ../si-glu/libnurbs/internals/knotvector.cc \ + ../si-glu/libnurbs/internals/mapdesc.cc \ + ../si-glu/libnurbs/internals/mapdescv.cc \ + ../si-glu/libnurbs/internals/maplist.cc \ + ../si-glu/libnurbs/internals/mesher.cc \ + ../si-glu/libnurbs/internals/monoTriangulationBackend.cc \ + ../si-glu/libnurbs/internals/monotonizer.cc \ + ../si-glu/libnurbs/internals/mycode.cc \ + ../si-glu/libnurbs/internals/nurbsinterfac.cc \ + ../si-glu/libnurbs/internals/nurbstess.cc \ + ../si-glu/libnurbs/internals/patch.cc \ + ../si-glu/libnurbs/internals/patchlist.cc \ + ../si-glu/libnurbs/internals/quilt.cc \ + ../si-glu/libnurbs/internals/reader.cc \ + ../si-glu/libnurbs/internals/renderhints.cc \ + ../si-glu/libnurbs/internals/slicer.cc \ + ../si-glu/libnurbs/internals/sorter.cc \ + ../si-glu/libnurbs/internals/splitarcs.cc \ + ../si-glu/libnurbs/internals/subdivider.cc \ + ../si-glu/libnurbs/internals/tobezier.cc \ + ../si-glu/libnurbs/internals/trimline.cc \ + ../si-glu/libnurbs/internals/trimregion.cc \ + ../si-glu/libnurbs/internals/trimvertpool.cc \ + ../si-glu/libnurbs/internals/uarray.cc \ + ../si-glu/libnurbs/internals/varray.cc \ + ../si-glu/libnurbs/nurbtess/directedLine.cc \ + ../si-glu/libnurbs/nurbtess/gridWrap.cc \ + ../si-glu/libnurbs/nurbtess/monoChain.cc \ + ../si-glu/libnurbs/nurbtess/monoPolyPart.cc \ + ../si-glu/libnurbs/nurbtess/monoTriangulation.cc \ + ../si-glu/libnurbs/nurbtess/partitionX.cc \ + ../si-glu/libnurbs/nurbtess/partitionY.cc \ + ../si-glu/libnurbs/nurbtess/polyDBG.cc \ + ../si-glu/libnurbs/nurbtess/polyUtil.cc \ + ../si-glu/libnurbs/nurbtess/primitiveStream.cc \ + ../si-glu/libnurbs/nurbtess/quicksort.cc \ + ../si-glu/libnurbs/nurbtess/rectBlock.cc \ + ../si-glu/libnurbs/nurbtess/sampleComp.cc \ + ../si-glu/libnurbs/nurbtess/sampleCompBot.cc \ + ../si-glu/libnurbs/nurbtess/sampleCompRight.cc \ + ../si-glu/libnurbs/nurbtess/sampleCompTop.cc \ + ../si-glu/libnurbs/nurbtess/sampleMonoPoly.cc \ + ../si-glu/libnurbs/nurbtess/sampledLine.cc \ + ../si-glu/libnurbs/nurbtess/searchTree.cc +else + GLU_SOURCES = \ + ../glu/mesa/glu.c \ + ../glu/mesa/mipmap.c \ + ../glu/mesa/project.c \ + ../glu/mesa/quadric.c \ + ../glu/mesa/tess.c \ + ../glu/mesa/tesselat.c \ + ../glu/mesa/polytest.c \ + ../glu/mesa/nurbs.c \ + ../glu/mesa/nurbscrv.c \ + ../glu/mesa/nurbssrf.c \ + ../glu/mesa/nurbsutl.c +endif + +MESA_SOURCES = $(CORE_SOURCES) $(ASM_SOURCES) + +SRCS = $(MESA_SOURCES) $(GLU_SOURCES) $(BEOS_DRIVER_SOURCES) + +# specify the resource files to use +# full path or a relative path to the resource file can be used. +RSRCS = + +# specify additional libraries to link against +# there are two acceptable forms of library specifications +# - if your library follows the naming pattern of: +# libXXX.so or libXXX.a you can simply specify XXX +# library: libbe.so entry: be +# +# - if your library does not follow the standard library +# naming scheme you need to specify the path to the library +# and it's name +# library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS = be + +# specify additional paths to directories following the standard +# libXXX.so or libXXX.a naming scheme. You can specify full paths +# or paths relative to the makefile. The paths included may not +# be recursive, so include all of the paths where libraries can +# be found. Directories where source files are found are +# automatically included. +LIBPATHS = + +# additional paths to look for system headers +# thes use the form: #include
      +# source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = ../../include + +ifdef USE_SI_GLU + SYSTEM_INCLUDE_PATHS += ../glu/sgi/include +endif + +# additional paths to look for local headers +# thes use the form: #include "header" +# source file directories are automatically included +LOCAL_INCLUDE_PATHS = \ + . \ + ./main \ + ./glapi \ + ./math \ + ./transform \ + ./swrast \ + ./swrast_setup \ + ./tnl \ + ./tnl_dd + +# specify the level of optimization that you desire +# NONE, SOME, FULL +OPTIMIZE = FULL + +# specify any preprocessor symbols to be defined. The symbols +# will be set to a value of 1. For example specify DEBUG if you want +# DEBUG=1 to be set when compiling. +DEFINES = $(MESA_DEFINES) + +# specify special warning levels +# if unspecified default warnings will be used +# NONE = suppress all warnings +# ALL = enable all warnings +WARNINGS = ALL + +# specify whether image symbols will be created +# so that stack crawls in the debugger are meaningful +# if TRUE symbols will be created +SYMBOLS = TRUE + +# specify debug settings +# if TRUE will allow application to be run from +# a source-level debugger +# DEBUGGER = TRUE +DEBUGGER = FALSE + +# specify additional compiler flags for all files +COMPILER_FLAGS = + +# specify additional linker flags +LINKER_FLAGS = + + + +## include the makefile-engine +include /boot/develop/etc/makefile-engine + + + +# x86/matypes.h include file is *generated*! +# Rules to (re)generate it as needed: + +x86/common_x86_asm.S : x86/matypes.h + +x86/matypes.h : x86/gen_matypes.c + @echo "(Re-)Generating $@ ..." + $(CC) $< $(INCLUDES) $(CFLAGS) -o x86/gen_matypes + x86/gen_matypes > $@ + rm -f x86/gen_matypes + +## Add NASM support for assembly code compilation... +# $(OBJ_DIR)/%.o : %.nasm +# nasm -f elf $(MESA_DEFINES) -o $@ $< + +$(OBJ_DIR)/%.o : %.S + gcc -c $< $(INCLUDES) $(CFLAGS) -o $@ +# gcc $(INCLUDES) $(CFLAGS) -E $< | grep -v '^$$' > $(addsuffix .nasm, $(basename $<)) +# nasm -f elf $(MESA_DEFINES) -o $@ $(addsuffix .nasm, $(basename $<)) + diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/Makefile.mgw x11r682/xc/extras/Mesa/src/mesa/Makefile.mgw --- xc/extras/Mesa/src/mesa/Makefile.mgw 2004-07-22 08:51:14.000000000 +0200 +++ xc/extras/Mesa/src/mesa/Makefile.mgw 2004-12-15 02:50:57.000000000 +0100 @@ -40,6 +40,9 @@ # As a consequence, you'll need the Win32 Glide3 # library to build any application. # default = no +# ICD=1 build the installable client driver interface +# (windows opengl driver interface) +# default = no # X86=1 optimize for x86 (if possible, use MMX, SSE, 3DNow). # default = no # @@ -57,8 +60,13 @@ TOP = ../.. GLIDE ?= $(TOP)/glide3 LIBDIR = $(TOP)/lib -GL_DLL = opengl32.dll -GL_IMP = libopengl32.a +ifeq ($(ICD),1) + GL_DLL = mesa32.dll + GL_IMP = libmesa32.a +else + GL_DLL = opengl32.dll + GL_IMP = libopengl32.a +endif LDLIBS = -lgdi32 @@ -66,12 +74,17 @@ CFLAGS += -DBUILD_GL32 -D_OPENGL32_ -D_MSC_VER CFLAGS += $(INCLUDE_DIRS) ifeq ($(FX),1) -CFLAGS += -I$(GLIDE)/include -DFX -LDLIBS += -L$(GLIDE)/lib -lglide3x -GL_DEF = drivers/glide/fxopengl.def -GL_RES = drivers/glide/fx.rc + CFLAGS += -I$(GLIDE)/include -DFX + LDLIBS += -L$(GLIDE)/lib -lglide3x + GL_DEF = drivers/glide/fxopengl.def + GL_RES = drivers/glide/fx.rc else -GL_DEF = drivers/windows/gdi/mesa.def + ifeq ($(ICD),1) + CFLAGS += -DUSE_MGL_NAMESPACE + GL_DEF = drivers/windows/icd/mesa.def + else + GL_DEF = drivers/windows/gdi/mesa.def + endif endif AR = ar @@ -100,10 +113,16 @@ $(GLIDE_DRIVER_SOURCES) \ drivers/glide/fxwgl.c else +ifeq ($(ICD),1) +DRIVER_SOURCES = \ + drivers/windows/gdi/wmesa.c \ + drivers/windows/icd/icd.c +else DRIVER_SOURCES = \ drivers/windows/gdi/wmesa.c \ drivers/windows/gdi/wgl.c endif +endif SOURCES = $(CORE_SOURCES) $(X86_SOURCES) $(COMMON_DRIVER_SOURCES) $(DRIVER_SOURCES) @@ -138,10 +157,18 @@ # [dBorca] # glapi_x86.S needs some adjustments # in order to generate correct entrypoints +# Trick: change the following condition to +# be always false if you need C entrypoints +# with USE_X86_ASM (useful for trace/debug) +ifeq (1,1) x86/glapi_x86.o: x86/glapi_x86.S $(CC) -o $@ $(CFLAGS) -U__WIN32__ -DSTDCALL_API -c $< -#main/dispatch.o: main/dispatch.c -# $(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $< +else +main/dispatch.o: main/dispatch.c + $(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $< +glapi/glapi.o: glapi/glapi.c + $(CC) -o $@ $(CFLAGS) -UUSE_X86_ASM -c $< +endif # [dBorca] # if we want codegen, we have to stdcall @@ -161,5 +188,6 @@ -$(call UNLINK,x86/*.o) -$(call UNLINK,drivers/common/*.o) -$(call UNLINK,drivers/windows/gdi/*.o) + -$(call UNLINK,drivers/windows/icd/*.o) -$(call UNLINK,drivers/glide/*.o) -$(call UNLINK,drivers/glide/*.res) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/array_cache/ac_import.c x11r682/xc/extras/Mesa/src/mesa/array_cache/ac_import.c --- xc/extras/Mesa/src/mesa/array_cache/ac_import.c 2004-07-22 08:51:21.000000000 +0200 +++ xc/extras/Mesa/src/mesa/array_cache/ac_import.c 2004-12-15 02:50:57.000000000 +0100 @@ -276,6 +276,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.TexCoord[unit]; struct gl_client_array *to = &ac->Cache.TexCoord[unit]; + (void) type; (void) stride; ASSERT(unit < ctx->Const.MaxTextureCoordUnits); @@ -305,6 +306,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.Vertex; struct gl_client_array *to = &ac->Cache.Vertex; + (void) type; (void) stride; /* Limited choices at this stage: */ @@ -331,6 +333,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.Normal; struct gl_client_array *to = &ac->Cache.Normal; + (void) type; (void) stride; /* Limited choices at this stage: */ @@ -355,6 +358,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.Color; struct gl_client_array *to = &ac->Cache.Color; + (void) stride; import( ctx, type, to, from ); @@ -367,6 +371,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.Index; struct gl_client_array *to = &ac->Cache.Index; + (void) type; (void) stride; /* Limited choices at this stage: */ @@ -391,6 +396,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.SecondaryColor; struct gl_client_array *to = &ac->Cache.SecondaryColor; + (void) stride; import( ctx, type, to, from ); @@ -403,6 +409,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.FogCoord; struct gl_client_array *to = &ac->Cache.FogCoord; + (void) type; (void) stride; /* Limited choices at this stage: */ @@ -427,6 +434,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.EdgeFlag; struct gl_client_array *to = &ac->Cache.EdgeFlag; + (void) type; (void) stride; /* Limited choices at this stage: */ @@ -451,6 +459,7 @@ ACcontext *ac = AC_CONTEXT(ctx); const struct gl_client_array *from = &ac->Raw.Attrib[index]; struct gl_client_array *to = &ac->Cache.Attrib[index]; + (void) type; (void) stride; ASSERT(index < VERT_ATTRIB_MAX); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/beos/GLView.h x11r682/xc/extras/Mesa/src/mesa/drivers/beos/GLView.h --- xc/extras/Mesa/src/mesa/drivers/beos/GLView.h 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/src/mesa/drivers/beos/GLView.h 2004-12-15 02:50:57.000000000 +0100 @@ -0,0 +1,196 @@ +/******************************************************************************* +/ +/ File: GLView.h +/ +/ Copyright 1993-98, Be Incorporated, All Rights Reserved. +/ +*******************************************************************************/ + +#ifndef BGLVIEW_H +#define BGLVIEW_H + +// added by Brian Paul: +#ifndef BGL_RGB +#define BGL_RGB 0 +#define BGL_INDEX 1 +#define BGL_SINGLE 0 +#define BGL_DOUBLE 2 +#define BGL_DIRECT 0 +#define BGL_INDIRECT 4 +#define BGL_ACCUM 8 +#define BGL_ALPHA 16 +#define BGL_DEPTH 32 +#define BGL_OVERLAY 64 +#define BGL_UNDERLAY 128 +#define BGL_STENCIL 512 +#endif + + +#include +#include +#include +#include +#include +#include +#include + +class BGLView : public BView { +public: + + BGLView(BRect rect, char *name, + ulong resizingMode, ulong mode, + ulong options); + virtual ~BGLView(); + + void LockGL(); + void UnlockGL(); + void SwapBuffers(); + + // Added for Mesa (can't be virtual!) + void CopySubBufferMESA(GLint x, GLint y, GLuint width, GLuint height); + + BView * EmbeddedView(); + status_t CopyPixelsOut(BPoint source, BBitmap *dest); + status_t CopyPixelsIn(BBitmap *source, BPoint dest); + + virtual void ErrorCallback(unsigned long errorCode); // GLenum errorCode); + + virtual void Draw(BRect updateRect); + + virtual void AttachedToWindow(); + virtual void AllAttached(); + virtual void DetachedFromWindow(); + virtual void AllDetached(); + + virtual void FrameResized(float width, float height); + virtual status_t Perform(perform_code d, void *arg); + + /* The public methods below, for the moment, + are just pass-throughs to BView */ + + virtual status_t Archive(BMessage *data, bool deep = true) const; + + virtual void MessageReceived(BMessage *msg); + virtual void SetResizingMode(uint32 mode); + + virtual void Show(); + virtual void Hide(); + + virtual BHandler *ResolveSpecifier(BMessage *msg, int32 index, + BMessage *specifier, int32 form, + const char *property); + virtual status_t GetSupportedSuites(BMessage *data); + + /* New public functions */ + void DirectConnected( direct_buffer_info *info ); + void EnableDirectMode( bool enabled ); + +private: + + virtual void _ReservedGLView1(); + virtual void _ReservedGLView2(); + virtual void _ReservedGLView3(); + virtual void _ReservedGLView4(); + virtual void _ReservedGLView5(); + virtual void _ReservedGLView6(); + virtual void _ReservedGLView7(); + virtual void _ReservedGLView8(); + + BGLView(const BGLView &); + BGLView &operator=(const BGLView &); + + void dither_front(); + bool confirm_dither(); + void draw(BRect r); + + void * m_gc; + uint32 m_options; + uint32 m_ditherCount; + BLocker m_drawLock; + BLocker m_displayLock; +#if OLD_GLVIEW + BView * m_embeddedFront; + BView * m_embeddedBack; +#else + void * m_clip_info; + void * _reserved1; +#endif + BBitmap * m_ditherMap; + BRect m_bounds; + int16 * m_errorBuffer[2]; + uint64 _reserved[8]; + + /* Direct Window stuff */ +private: + void drawScanline( int x1, int x2, int y, void *data ); + static void scanlineHandler(struct rasStateRec *state, GLint x1, GLint x2); + void lock_draw(); + void unlock_draw(); + bool validateView(); +}; + + + +class BGLScreen : public BWindowScreen { +public: + BGLScreen(char *name, + ulong screenMode, ulong options, + status_t *error, bool debug=false); + ~BGLScreen(); + + void LockGL(); + void UnlockGL(); + void SwapBuffers(); + virtual void ErrorCallback(GLenum errorCode); + + virtual void ScreenConnected(bool connected); + virtual void FrameResized(float width, float height); + virtual status_t Perform(perform_code d, void *arg); + + /* The public methods below, for the moment, + are just pass-throughs to BWindowScreen */ + + virtual status_t Archive(BMessage *data, bool deep = true) const; + virtual void MessageReceived(BMessage *msg); + + virtual void Show(); + virtual void Hide(); + + virtual BHandler *ResolveSpecifier(BMessage *msg, + int32 index, + BMessage *specifier, + int32 form, + const char *property); + virtual status_t GetSupportedSuites(BMessage *data); + +private: + + virtual void _ReservedGLScreen1(); + virtual void _ReservedGLScreen2(); + virtual void _ReservedGLScreen3(); + virtual void _ReservedGLScreen4(); + virtual void _ReservedGLScreen5(); + virtual void _ReservedGLScreen6(); + virtual void _ReservedGLScreen7(); + virtual void _ReservedGLScreen8(); + + BGLScreen(const BGLScreen &); + BGLScreen &operator=(const BGLScreen &); + + void * m_gc; + long m_options; + BLocker m_drawLock; + + int32 m_colorSpace; + uint32 m_screen_mode; + + uint64 _reserved[7]; +}; + + +#endif + + + + + diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template x11r682/xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template --- xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template 2004-07-22 08:51:24.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/Makefile.template 2004-12-15 02:50:57.000000000 +0100 @@ -37,6 +37,7 @@ -I$(TOP)/src/mesa/drivers/dri/common \ -Iserver \ -I$(DRM_SOURCE_PATH)/shared \ + -I$(DRM_SOURCE_PATH)/linux \ -I$(TOP)/include \ -I$(TOP)/include/GL/internal \ -I$(TOP)/src/mesa \ @@ -94,6 +95,7 @@ # Remove .o and backup files clean: - -rm -f *.o */*.o *~ *.o *~ *.so server/*.o $(SYMLINKS) depend + -rm -f *.o */*.o *~ *.o *~ *.so server/*.o $(SYMLINKS) + -rm -f depend depend.bak include depend diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h --- xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h 2004-06-16 11:17:56.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/common/depthtmp.h 2004-12-15 02:50:57.000000000 +0100 @@ -64,6 +64,42 @@ HW_WRITE_UNLOCK(); } +static void TAG(WriteMonoDepthSpan)( GLcontext *ctx, + GLuint n, GLint x, GLint y, + const GLdepth depth, + const GLubyte mask[] ) +{ + HW_WRITE_LOCK() + { + GLint x1; + GLint n1; + LOCAL_DEPTH_VARS; + + y = Y_FLIP( y ); + + HW_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN( x, y, n, x1, n1, i ); + + if ( DBG ) fprintf( stderr, "%s %d..%d (x1 %d) = %u\n", + __FUNCTION__, (int)i, (int)n1, (int)x1, (GLuint)depth ); + + if ( mask ) { + for ( ; i < n1 ; i++, x1++ ) { + if ( mask[i] ) WRITE_DEPTH( x1, y, depth ); + } + } else { + for ( ; i < n1 ; i++, x1++ ) { + WRITE_DEPTH( x1, y, depth ); + } + } + } + HW_ENDCLIPLOOP(); + } + HW_WRITE_UNLOCK(); +} + static void TAG(WriteDepthPixels)( GLcontext *ctx, GLuint n, const GLint x[], diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c --- xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c 2004-08-13 01:05:42.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.c 2004-12-15 02:50:57.000000000 +0100 @@ -141,6 +141,26 @@ } } +/* + * fd.o bug #1713: Some rare libGL's have __glXFindDRIScreen defined but do not + * export it via glXGetProcAddress. These are not supported anymore, so print + * an error message to that effect. - ajax 2004-10-26 + */ +typedef __DRIscreen *(*PFNGLXFINDDRISCREEN)(__DRInativeDisplay *, int); + +static __DRIscreen *glx_find_dri_screen(__DRInativeDisplay *d, int i) +{ + PFNGLXFINDDRISCREEN findscreen = + (PFNGLXFINDDRISCREEN)glXGetProcAddress("__glXFindDRIScreen"); + + if (!findscreen) + { + __driUtilMessage("glXGetProcAddress(\"__glXFindDRIScreen\") failed!"); + __driUtilMessage("Your libGL is too old, please upgrade."); + return NULL; + } + else return findscreen(d, i); +} /*****************************************************************/ /** \name Visual utility functions */ @@ -212,23 +232,33 @@ static __DRIdrawable *__driFindDrawable(void *drawHash, __DRIid draw) { int retcode; - __DRIdrawable *pdraw; + union + { + __DRIdrawable *pdraw; + void *ptr; + } p; - retcode = drmHashLookup(drawHash, draw, (void **)&pdraw); + retcode = drmHashLookup(drawHash, draw, &p.ptr); if (retcode) return NULL; - return pdraw; + return p.pdraw; } static void __driRemoveDrawable(void *drawHash, __DRIdrawable *pdraw) { int retcode; - __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)pdraw->private; + union + { + __DRIdrawablePrivate *pdp; + void *ptr; + } p; - retcode = drmHashLookup(drawHash, pdp->draw, (void **)&pdraw); + p.pdp = (__DRIdrawablePrivate *)pdraw->private; + + retcode = drmHashLookup(drawHash, p.pdp->draw, &p.ptr); if (!retcode) { /* Found */ - drmHashDelete(drawHash, pdp->draw); + drmHashDelete(drawHash, p.pdp->draw); } } @@ -286,21 +316,25 @@ static void __driGarbageCollectDrawables(void *drawHash) { __DRIid draw; - __DRIdrawable *pdraw; __DRInativeDisplay *dpy; + union + { + __DRIdrawable *pdraw; + void *ptr; + } p; - if (drmHashFirst(drawHash, &draw, (void **)&pdraw)) { + if (drmHashFirst(drawHash, &draw, &p.ptr)) { do { - __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)pdraw->private; + __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)p.pdraw->private; dpy = pdp->driScreenPriv->display; if (! (*window_exists)(dpy, draw)) { /* Destroy the local drawable data in the hash table, if the drawable no longer exists in the Xserver */ - __driRemoveDrawable(drawHash, pdraw); - (*pdraw->destroyDrawable)(dpy, pdraw->private); - _mesa_free(pdraw); + __driRemoveDrawable(drawHash, p.pdraw); + (*p.pdraw->destroyDrawable)(dpy, p.pdraw->private); + _mesa_free(p.pdraw); } - } while (drmHashNext(drawHash, &draw, (void **)&pdraw)); + } while (drmHashNext(drawHash, &draw, &p.ptr)); } } @@ -353,7 +387,7 @@ return GL_FALSE; } - pDRIScreen = __glXFindDRIScreen(dpy, scrn); + pDRIScreen = glx_find_dri_screen(dpy, scrn); if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) { /* ERROR!!! */ return GL_FALSE; @@ -529,7 +563,7 @@ return GL_FALSE; } - pDRIScreen = __glXFindDRIScreen(dpy, scrn); + pDRIScreen = glx_find_dri_screen(dpy, scrn); if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) { /* ERROR!!! */ return GL_FALSE; @@ -563,7 +597,7 @@ return GL_FALSE; } - pDRIScreen = __glXFindDRIScreen(dpy, scrn); + pDRIScreen = glx_find_dri_screen(dpy, scrn); modes = (driCompareGLXAPIVersion( 20040317 ) >= 0) ? gc->driContext.mode : findConfigMode( dpy, scrn, gc->vid, pDRIScreen ); @@ -793,7 +827,7 @@ int renderType, const int *attrs) { - __DRIscreen * const pDRIScreen = __glXFindDRIScreen(dpy, modes->screen); + __DRIscreen * const pDRIScreen = glx_find_dri_screen(dpy, modes->screen); __DRIscreenPrivate *psp; __DRIdrawablePrivate *pdp; @@ -848,7 +882,7 @@ _mesa_free(pdp); return NULL; #else - pdp->getInfo = XF86DRIGetDrawableInfo; + pdp->getInfo = (PFNGLXGETDRAWABLEINFOPROC) XF86DRIGetDrawableInfo; #endif /* DRI_NEW_INTERFACE_ONLY */ } @@ -988,7 +1022,7 @@ __DRIscreenPrivate *psp; void * const shareCtx = (pshare != NULL) ? pshare->driverPrivate : NULL; - pDRIScreen = __glXFindDRIScreen(dpy, modes->screen); + pDRIScreen = glx_find_dri_screen(dpy, modes->screen); if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) { /* ERROR!!! */ return NULL; @@ -1033,16 +1067,16 @@ pctx->bindContext3 = driBindContext3; pctx->unbindContext3 = driUnbindContext3; #else - pctx->bindContext = driBindContext; - pctx->unbindContext = driUnbindContext; + pctx->bindContext = (void *)driBindContext; + pctx->unbindContext = (void *)driUnbindContext; if ( driCompareGLXAPIVersion( 20030606 ) >= 0 ) { - pctx->bindContext2 = driBindContext2; - pctx->unbindContext2 = driUnbindContext2; + pctx->bindContext2 = (void *)driBindContext2; + pctx->unbindContext2 = (void *)driUnbindContext2; } if ( driCompareGLXAPIVersion( 20040415 ) >= 0 ) { - pctx->bindContext3 = driBindContext3; - pctx->unbindContext3 = driUnbindContext3; + pctx->bindContext3 = (void *)driBindContext3; + pctx->unbindContext3 = (void *)driUnbindContext3; } #endif @@ -1088,7 +1122,7 @@ __DRIscreen *pDRIScreen; const __GLcontextModes *modes; - pDRIScreen = __glXFindDRIScreen(dpy, vis->screen); + pDRIScreen = glx_find_dri_screen(dpy, vis->screen); if ( (pDRIScreen == NULL) || (pDRIScreen->private == NULL) ) { /* ERROR!!! */ return NULL; @@ -1347,7 +1381,7 @@ int directCapable; __DRIscreenPrivate *psp = NULL; drm_handle_t hSAREA; - drmAddress pSAREA; + drmAddress pSAREA = MAP_FAILED; char *BusID; __GLcontextModes *modes; __GLcontextModes *temp; @@ -1360,8 +1394,9 @@ int status; const char * err_msg; const char * err_extra; - - + memset (&framebuffer, 0, sizeof (framebuffer)); + framebuffer.base = MAP_FAILED; + if (!XF86DRIQueryDirectRenderingCapable(dpy, scrn, &directCapable) || !directCapable) { return NULL; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h --- xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h 2004-07-22 08:51:27.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/common/dri_util.h 2004-12-15 02:50:57.000000000 +0100 @@ -558,8 +558,11 @@ driCalculateSwapUsage( __DRIdrawablePrivate *dPriv, int64_t last_swap_ust, int64_t current_ust ); +/* Test for the GLX header glx.h */ +#ifndef GLX extern void (*glXGetProcAddress(const GLubyte *procname))( void ); +#endif #endif /* GLX_DIRECT_RENDERING */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h --- xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/src/mesa/drivers/dri/common/mmio.h 2004-12-15 02:50:57.000000000 +0100 @@ -0,0 +1,63 @@ +/* + * (C) Copyright IBM Corporation 2004 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * on the rights to use, copy, modify, merge, publish, distribute, sub + * license, and/or sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file mmio.h + * Functions for properly handling memory mapped IO on various platforms. + * + * \author Ian Romanick + */ + + +#ifndef MMIO_H +#define MMIO_H + +#include + +#if defined( __powerpc__ ) + +static __inline__ uint32_t +read_MMIO_LE32( volatile void * base, unsigned long offset ) +{ + volatile void * p = ((volatile char *) base) + offset; + uint32_t val; + + __asm__ __volatile__( "lwbrx %0, %1, %2 ; eieio" + : "=r" (val) + : "b" (base), "r" (offset), "m" (p) ); + return val; +} + +#else + +static __inline__ uint32_t +read_MMIO_LE32( volatile void * base, unsigned long offset ) +{ + volatile uint32_t * p = (volatile uint32_t *) (((volatile char *) base) + offset); + return LE32_TO_CPU( p[0] ); +} + +#endif + +#endif /* MMIO_H */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h --- xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h 2004-06-16 11:17:56.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/common/spantmp.h 2004-12-15 02:50:57.000000000 +0100 @@ -123,15 +123,29 @@ HW_WRITE_CLIPLOOP() { - for (i=0;i0;i++,x1++,n1--) - if (mask[i]) + if (mask) + { + for (;n1>0;i++,x1++,n1--) + if (mask[i]) + WRITE_PIXEL( x1, y, p ); + } + else + { + for (;n1>0;i++,x1++,n1--) WRITE_PIXEL( x1, y, p ); + } } HW_ENDCLIPLOOP(); } @@ -186,12 +208,23 @@ HW_WRITE_CLIPLOOP() { - for (i=0;i= 2) # include @@ -256,7 +260,7 @@ string = numStart; /* scale of the first digit */ - scale = sign * powf (10.0f, (GLfloat)(pointPos-1 + exponent)); + scale = sign * (GLfloat)pow (10.0, (GLdouble)(pointPos-1 + exponent)); /* second pass: parse digits */ do { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h --- xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h 2004-06-16 11:17:57.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/common/xmlpool.h 2004-12-15 02:50:57.000000000 +0100 @@ -273,4 +273,25 @@ DRI_CONF_DESC(de,"Anzahl der Textureinheiten") \ DRI_CONF_OPT_END +/* Options for features that are not done in hardware by the driver (like GL_ARB_vertex_program + On cards where there is no documentation (r200) or on rasterization-only hardware). */ +#define DRI_CONF_SECTION_SOFTWARE \ +DRI_CONF_SECTION_BEGIN \ + DRI_CONF_DESC(de,"FunktionalitÀt, die nicht durch die Hardware beschleunigt wird") \ + DRI_CONF_DESC(en,"Features that are not hardware-accelerated") + +#define DRI_CONF_ARB_VERTEX_PROGRAM(def) \ +DRI_CONF_OPT_BEGIN(arb_vertex_program,bool,def) \ + DRI_CONF_DESC(de,"GL_ARB_vertex_program aktivieren") \ + DRI_CONF_DESC(en,"Enable GL_ARB_vertex_program") \ + DRI_CONF_DESC(fr,"Activer GL_ARB_vertex_program") \ +DRI_CONF_OPT_END + +#define DRI_CONF_NV_VERTEX_PROGRAM(def) \ +DRI_CONF_OPT_BEGIN(nv_vertex_program,bool,def) \ + DRI_CONF_DESC(de,"GL_NV_vertex_program aktivieren") \ + DRI_CONF_DESC(en,"Enable GL_NV_vertex_program") \ + DRI_CONF_DESC(fr,"Activer GL_NV_vertex_program") \ +DRI_CONF_OPT_END + #endif diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile x11r682/xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile --- xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile 2004-06-16 11:18:31.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/dri_client/Makefile 2004-12-15 02:50:57.000000000 +0100 @@ -53,6 +53,6 @@ # Remove .o and backup files clean: - -rm -f *.o */*.o *~ *.so *.a + -rm -f *.o */*.o *~ *.so *.a depend depend.bak include depend diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c --- xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c 2004-06-16 11:18:00.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/ffb/ffb_vtxfmt.c 2004-12-15 02:50:57.000000000 +0100 @@ -161,13 +161,13 @@ static void ffb_choose_Normal3f(GLfloat x, GLfloat y, GLfloat z) { choose_normals(); - glNormal3f(x, y, z); + GL_CALL(Normal3f)(x, y, z); } static void ffb_choose_Normal3fv(const GLfloat *v) { choose_normals(); - glNormal3fv(v); + GL_CALL(Normal3fv)(v); } /* Vertex functions: */ @@ -267,13 +267,13 @@ * correctly: */ if (fmesa->imm.prim != PRIM_OUTSIDE_BEGIN_END ) - glBegin(fmesa->imm.prim); + GL_CALL(Begin)(fmesa->imm.prim); if (ctx->Light.Enabled) { - glColor4fv(ctx->Current.Color); /* Catch ColorMaterial */ - glNormal3fv(current->normal); + GL_CALL(Color4fv)(ctx->Current.Color); /* Catch ColorMaterial */ + GL_CALL(Normal3fv)(current->normal); } else { - glColor4fv(current->color); + GL_CALL(Color4fv)(current->color); } } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile --- xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile 2004-06-16 11:18:05.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i810/Makefile 2004-12-15 02:50:57.000000000 +0100 @@ -15,7 +15,8 @@ ../common/texmem.c \ ../common/vblank.c \ ../common/dri_util.c \ - ../common/glcontextmodes.c + ../common/glcontextmodes.c \ + ../common/xmlconfig.c DRIVER_SOURCES = \ i810context.c \ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c 2004-07-22 08:52:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.c 2004-12-15 02:50:58.000000000 +0100 @@ -38,54 +38,12 @@ * Mesa's Driver Functions ***************************************/ -/* This is the extension list explicitly enabled by the client and - * excludes functionality available in Mesa and also excludes legacy - * extensions. It is recognized that in an open source driver, those - * extensions will probably be re-enabled. - */ -static const GLubyte *i830GetString( GLcontext *ctx, GLenum name ) +static const char * const card_extensions[] = { -#if 0 - if (name == GL_EXTENSIONS) - return - "GL_ARB_multitexture " - "GL_ARB_texture_border_clamp " - "GL_ARB_texture_compression " - "GL_ARB_texture_env_add " - "GL_ARB_texture_env_combine " - "GL_ARB_texture_env_dot3 " - "GL_ARB_texture_mirrored_repeat " - "GL_ARB_transpose_matrix " - "GL_ARB_vertex_buffer_object " - "GL_ARB_vertex_program " - "GL_ARB_window_pos " - "GL_EXT_abgr " - "GL_EXT_bgra " - "GL_EXT_blend_color " - "GL_EXT_blend_func_separate " - "GL_EXT_blend_minmax " - "GL_EXT_blend_subtract " - "GL_EXT_clip_volume_hint " - "GL_EXT_compiled_vertex_array " - "GL_EXT_draw_range_elements " - "GL_EXT_fog_coord " - "GL_EXT_multi_draw_arrays " - "GL_EXT_packed_pixels " - "GL_EXT_rescale_normal " - "GL_EXT_secondary_color " - "GL_EXT_separate_specular_color " - "GL_EXT_stencil_wrap " - "GL_EXT_texture_env_add " - "GL_EXT_texture_env_combine " - "GL_EXT_texture_filter_anisotropic " - "GL_IBM_texture_mirrored_repeat " - "GL_MESA_ycbcr_texture " - "GL_MESA_window_pos " - "GL_NV_texgen_reflection " - "GL_SGIS_generate_mipmap "; -#endif - return intelGetString( ctx, name ); -} + "GL_ARB_texture_env_crossbar", + "GL_NV_blend_square", + NULL +}; static void i830InitDriverFunctions( struct dd_function_table *functions ) @@ -93,7 +51,6 @@ intelInitDriverFunctions( functions ); i830InitStateFuncs( functions ); i830InitTextureFuncs( functions ); - functions->GetString = i830GetString; } @@ -142,7 +99,7 @@ 4, 11, /* max 2D texture size is 2048x2048 */ 8, /* max 3D texture size is 256^3 */ - 0, /* max CUBE. not supported */ + 10, /* max CUBE texture size is 1024x1024 */ 11, /* max RECT. supported */ 12, GL_FALSE ); @@ -153,6 +110,8 @@ intel->verts = TNL_CONTEXT(ctx)->clipspace.vertex_buf; + driInitExtensions( ctx, card_extensions, GL_FALSE ); + i830InitState( i830 ); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h 2004-07-22 08:52:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_context.h 2004-12-15 02:50:58.000000000 +0100 @@ -89,8 +89,9 @@ #define I830_TEXREG_TM0S2 3 #define I830_TEXREG_TM0S3 4 #define I830_TEXREG_TM0S4 5 -#define I830_TEXREG_MCS 6 /* _3DSTATE_MAP_COORD_SETS */ -#define I830_TEX_SETUP_SIZE 7 +#define I830_TEXREG_MCS 6 /* _3DSTATE_MAP_COORD_SETS */ +#define I830_TEXREG_CUBE 7 /* _3DSTATE_MAP_SUBE */ +#define I830_TEX_SETUP_SIZE 8 #define I830_TEXBLEND_SIZE 12 /* (4 args + op) * 2 + COLOR_FACTOR */ @@ -169,12 +170,9 @@ /* i830_texblend.c */ -extern GLuint -i830SetBlend_GL1_2(i830ContextPtr i830, int unit, - GLenum envMode, GLenum format, - GLuint texel_op, - GLuint *state, - const GLfloat *envcolor ); +extern GLuint i830SetTexEnvCombine(i830ContextPtr i830, + const struct gl_tex_env_combine_state * combine, GLint blendUnit, + GLuint texel_op, GLuint *state, const GLfloat *factor ); extern void i830EmitTextureBlend( i830ContextPtr i830 ); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c 2004-07-22 08:52:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_metaops.c 2004-12-15 02:50:58.000000000 +0100 @@ -163,10 +163,17 @@ */ static void set_no_texture( i830ContextPtr i830 ) { - i830->meta.TexBlendWordsUsed[0] = - i830SetBlend_GL1_2( i830, 0, GL_NONE, 0, - TEXBLENDARG_TEXEL0, - i830->meta.TexBlend[0], 0 ); + static const struct gl_tex_env_combine_state comb = { + GL_NONE, GL_NONE, + { GL_TEXTURE, 0, 0, }, { GL_TEXTURE, 0, 0, }, + { GL_SRC_COLOR, 0, 0 }, { GL_SRC_ALPHA, 0, 0 }, + 0, 0, 0, 0 + }; + + i830->meta.TexBlendWordsUsed[0] = + i830SetTexEnvCombine( i830, & comb, 0, TEXBLENDARG_TEXEL0, + i830->meta.TexBlend[0], NULL); + i830->meta.TexBlend[0][0] |= TEXOP_LAST_STAGE; i830->meta.emitted &= ~I830_UPLOAD_TEXBLEND(0); } @@ -177,10 +184,17 @@ static void enable_texture_blend_replace( i830ContextPtr i830, GLenum format ) { - i830->meta.TexBlendWordsUsed[0] = - i830SetBlend_GL1_2( i830, 0, GL_REPLACE, format, - TEXBLENDARG_TEXEL0, - i830->meta.TexBlend[0], 0 ); + static const struct gl_tex_env_combine_state comb = { + GL_REPLACE, GL_REPLACE, + { GL_TEXTURE, 0, 0, }, { GL_TEXTURE, 0, 0, }, + { GL_SRC_COLOR, 0, 0 }, { GL_SRC_ALPHA, 0, 0 }, + 0, 0, 1, 1 + }; + + i830->meta.TexBlendWordsUsed[0] = + i830SetTexEnvCombine( i830, & comb, 0, TEXBLENDARG_TEXEL0, + i830->meta.TexBlend[0], NULL); + i830->meta.TexBlend[0][0] |= TEXOP_LAST_STAGE; i830->meta.emitted &= ~I830_UPLOAD_TEXBLEND(0); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h 2004-07-22 08:52:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_reg.h 2004-12-15 02:50:58.000000000 +0100 @@ -637,6 +637,7 @@ #define TM0S2_PITCH_SHIFT 21 #define TM0S2_CUBE_FACE_ENA_SHIFT 15 +#define TM0S2_CUBE_FACE_ENA_MASK (1<<15) #define TM0S2_MAP_FORMAT (1<<14) #define TM0S2_VERTICAL_LINE_STRIDE (1<<13) #define TM0S2_VERITCAL_LINE_STRIDE_OFF (1<<12) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c 2004-07-22 08:52:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_state.c 2004-12-15 02:50:58.000000000 +0100 @@ -263,11 +263,15 @@ ALPHA_REF_VALUE(refInt)); } -/* This function makes sure that the proper enables are - * set for LogicOp, Independant Alpha Blend, and Blending. - * It needs to be called from numerous places where we +/** + * Makes sure that the proper enables are set for LogicOp, Independant Alpha + * Blend, and Blending. It needs to be called from numerous places where we * could change the LogicOp or Independant Alpha Blend without subsequent * calls to glEnable. + * + * \todo + * This function is substantially different from the old i830-specific driver. + * I'm not sure which is correct. */ static void i830EvalLogicOpBlendState(GLcontext *ctx) { @@ -310,48 +314,16 @@ i830->state.Ctx[I830_CTXREG_BLENDCOLOR1] = (a<<24) | (r<<16) | (g<<8) | b; } -static void i830BlendEquationSeparate(GLcontext *ctx, GLenum modeRGB, - GLenum modeA) -{ - i830ContextPtr i830 = I830_CONTEXT(ctx); - int func = ENABLE_ALPHA_BLENDFUNC; - - assert( modeRGB == modeA ); - - if (INTEL_DEBUG&DEBUG_DRI) - fprintf(stderr, "%s %s\n", __FUNCTION__, - _mesa_lookup_enum_by_nr(modeRGB)); - - /* This will catch a logicop blend equation */ - i830EvalLogicOpBlendState(ctx); - - switch(modeRGB) { - case GL_FUNC_ADD: - func |= BLENDFUNC_ADD; - break; - case GL_MIN: - func |= BLENDFUNC_MIN; - break; - case GL_MAX: - func |= BLENDFUNC_MAX; - break; - case GL_FUNC_SUBTRACT: - func |= BLENDFUNC_SUB; - break; - case GL_FUNC_REVERSE_SUBTRACT: - func |= BLENDFUNC_RVRSE_SUB; - break; - case GL_LOGIC_OP: - default: return; - } - - I830_STATECHANGE(i830, I830_UPLOAD_CTX); - i830->state.Ctx[I830_CTXREG_STATE1] &= ~BLENDFUNC_MASK; - i830->state.Ctx[I830_CTXREG_STATE1] |= func; -} - - +/** + * Calculate the hardware blend factor setting. This same function is used + * for source and destination of both alpha and RGB. + * + * \returns + * The hardware register value for the specified blend factor. This value + * will need to be shifted into the correct position for either source or + * destination factor. + */ static int translate_blend_factor( GLenum factor ) { switch(factor) { @@ -390,35 +362,89 @@ } } -static void i830BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB, - GLenum dfactorRGB, GLenum sfactorA, - GLenum dfactorA ) + +/** + * Sets both the blend equation (called "function" in i830 docs) and the + * blend function (called "factor" in i830 docs). This is done in a single + * function because some blend equations (i.e., \c GL_MIN and \c GL_MAX) + * change the interpretation of the blend function. + */ +static void i830_set_blend_state( GLcontext * ctx ) { i830ContextPtr i830 = I830_CONTEXT(ctx); - int iab = i830->state.Ctx[I830_CTXREG_IALPHAB]; - int s1 = i830->state.Ctx[I830_CTXREG_STATE1]; + int funcA; + int funcRGB; + int eqnA; + int eqnRGB; + int iab; + int s1; - if (INTEL_DEBUG&DEBUG_DRI) - fprintf(stderr, "%s\n", __FUNCTION__); + funcRGB = SRC_BLND_FACT( translate_blend_factor( ctx->Color.BlendSrcRGB ) ) + | DST_BLND_FACT( translate_blend_factor( ctx->Color.BlendDstRGB ) ); - iab &= ~(SRC_DST_ABLEND_MASK|ENABLE_INDPT_ALPHA_BLEND); - s1 &= ~SRC_DST_BLND_MASK; - - iab |= (ENABLE_SRC_ABLEND_FACTOR|ENABLE_DST_ABLEND_FACTOR); - s1 |= (ENABLE_SRC_BLND_FACTOR|ENABLE_DST_BLND_FACTOR); + switch(ctx->Color.BlendEquationRGB) { + case GL_FUNC_ADD: + eqnRGB = BLENDFUNC_ADD; + break; + case GL_MIN: + eqnRGB = BLENDFUNC_MIN; + funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); + break; + case GL_MAX: + eqnRGB = BLENDFUNC_MAX; + funcRGB = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); + break; + case GL_FUNC_SUBTRACT: + eqnRGB = BLENDFUNC_SUB; + break; + case GL_FUNC_REVERSE_SUBTRACT: + eqnRGB = BLENDFUNC_RVRSE_SUB; + break; + default: + fprintf( stderr, "[%s:%u] Invalid RGB blend equation (0x%04x).\n", + __func__, __LINE__, ctx->Color.BlendEquationRGB ); + return; + } + + + funcA = SRC_ABLEND_FACT( translate_blend_factor( ctx->Color.BlendSrcA ) ) + | DST_ABLEND_FACT( translate_blend_factor( ctx->Color.BlendDstA ) ); - if (ctx->Color.BlendEquationRGB == GL_MIN || - ctx->Color.BlendEquationRGB == GL_MAX) { - sfactorA = sfactorRGB = dfactorA = dfactorRGB = GL_ONE; + switch(ctx->Color.BlendEquationA) { + case GL_FUNC_ADD: + eqnA = BLENDFUNC_ADD; + break; + case GL_MIN: + eqnA = BLENDFUNC_MIN; + funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); + break; + case GL_MAX: + eqnA = BLENDFUNC_MAX; + funcA = SRC_BLND_FACT(BLENDFACT_ONE) | DST_BLND_FACT(BLENDFACT_ONE); + break; + case GL_FUNC_SUBTRACT: + eqnA = BLENDFUNC_SUB; + break; + case GL_FUNC_REVERSE_SUBTRACT: + eqnA = BLENDFUNC_RVRSE_SUB; + break; + default: + fprintf( stderr, "[%s:%u] Invalid alpha blend equation (0x%04x).\n", + __func__, __LINE__, ctx->Color.BlendEquationA ); + return; } - iab |= SRC_ABLEND_FACT(translate_blend_factor(sfactorA)); - iab |= DST_ABLEND_FACT(translate_blend_factor(dfactorA)); - s1 |= SRC_BLND_FACT(translate_blend_factor(sfactorRGB)); - s1 |= DST_BLND_FACT(translate_blend_factor(dfactorRGB)); + iab = eqnA | funcA + | _3DSTATE_INDPT_ALPHA_BLEND_CMD + | ENABLE_SRC_ABLEND_FACTOR | ENABLE_DST_ABLEND_FACTOR + | ENABLE_ALPHA_BLENDFUNC; + s1 = eqnRGB | funcRGB + | _3DSTATE_MODES_1_CMD + | ENABLE_SRC_BLND_FACTOR | ENABLE_DST_BLND_FACTOR + | ENABLE_COLR_BLND_FUNC; - if (sfactorA != sfactorRGB || dfactorA != dfactorRGB) + if ( (eqnA | funcA) != (eqnRGB | funcRGB) ) iab |= ENABLE_INDPT_ALPHA_BLEND; else iab |= DISABLE_INDPT_ALPHA_BLEND; @@ -429,6 +455,54 @@ i830->state.Ctx[I830_CTXREG_IALPHAB] = iab; i830->state.Ctx[I830_CTXREG_STATE1] = s1; } + + /* This will catch a logicop blend equation. It will also ensure + * independant alpha blend is really in the correct state (either enabled + * or disabled) if blending is already enabled. + */ + + i830EvalLogicOpBlendState(ctx); + + if (0) { + fprintf(stderr, "[%s:%u] STATE1: 0x%08x IALPHAB: 0x%08x blend is %sabled\n", + __func__, __LINE__, + i830->state.Ctx[I830_CTXREG_STATE1], + i830->state.Ctx[I830_CTXREG_IALPHAB], + (ctx->Color.BlendEnabled) ? "en" : "dis"); + } +} + + +static void i830BlendEquationSeparate(GLcontext *ctx, GLenum modeRGB, + GLenum modeA) +{ + if (INTEL_DEBUG&DEBUG_DRI) + fprintf(stderr, "%s -> %s, %s\n", __FUNCTION__, + _mesa_lookup_enum_by_nr(modeRGB), + _mesa_lookup_enum_by_nr(modeA)); + + (void) modeRGB; + (void) modeA; + i830_set_blend_state( ctx ); +} + + +static void i830BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB, + GLenum dfactorRGB, GLenum sfactorA, + GLenum dfactorA ) +{ + if (INTEL_DEBUG&DEBUG_DRI) + fprintf(stderr, "%s -> RGB(%s, %s) A(%s, %s)\n", __FUNCTION__, + _mesa_lookup_enum_by_nr(sfactorRGB), + _mesa_lookup_enum_by_nr(dfactorRGB), + _mesa_lookup_enum_by_nr(sfactorA), + _mesa_lookup_enum_by_nr(dfactorA)); + + (void) sfactorRGB; + (void) dfactorRGB; + (void) sfactorA; + (void) dfactorA; + i830_set_blend_state( ctx ); } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c 2004-07-22 08:52:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texblend.c 2004-12-15 02:50:58.000000000 +0100 @@ -113,640 +113,35 @@ } -GLuint i830SetBlend_GL1_2(i830ContextPtr i830, int blendUnit, - GLenum envMode, GLenum format, GLuint texel_op, - GLuint *state, const GLfloat *factor) +/** + * Calculate the hardware instuctions to setup the current texture enviromnemt + * settings. Since \c gl_texture_unit::_CurrentCombine is used, both + * "classic" texture enviroments and GL_ARB_texture_env_combine type texture + * environments are treated identically. + * + * \todo + * This function should return \c GLboolean. When \c GL_FALSE is returned, + * it means that an environment is selected that the hardware cannot do. This + * is the way the Radeon and R200 drivers work. + * + * \todo + * Looking at i830_3d_regs.h, it seems the i830 can do part of + * GL_ATI_texture_env_combine3. It can handle using \c GL_ONE and + * \c GL_ZERO as combine inputs (which the code already supports). It can + * also handle the \c GL_MODULATE_ADD_ATI mode. Is it worth investigating + * partial support for the extension? + */ +GLuint +i830SetTexEnvCombine(i830ContextPtr i830, + const struct gl_tex_env_combine_state * combine, + GLint blendUnit, + GLuint texel_op, + GLuint *state, + const GLfloat *factor ) { - if(INTEL_DEBUG&DEBUG_TEXTURE) - fprintf(stderr, "%s %s %s texel_op(0x%x)\n", - __FUNCTION__, - _mesa_lookup_enum_by_nr(format), - _mesa_lookup_enum_by_nr(envMode), - texel_op); - - switch(envMode) { - case GL_REPLACE: - switch(format) { - case GL_ALPHA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - return 4; - - case GL_LUMINANCE: - case GL_RGB: - case GL_YCBCR_MESA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 4; - - case GL_INTENSITY: - case GL_LUMINANCE_ALPHA: - case GL_RGBA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - return 4; - - default: - /* Always set to passthru if something is funny */ - return pass_through( state, blendUnit ); - } - - case GL_MODULATE: - switch(format) { - case GL_ALPHA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 5; - - case GL_LUMINANCE: - case GL_RGB: - case GL_YCBCR_MESA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 5; - - case GL_INTENSITY: - case GL_LUMINANCE_ALPHA: - case GL_RGBA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 6; - - default: - /* Always set to passthru if something is funny */ - return pass_through( state, blendUnit ); - } - - case GL_DECAL: - switch(format) { - case GL_RGB: - case GL_YCBCR_MESA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 4; - - case GL_RGBA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_BLEND); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG0 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_REPLICATE_ALPHA | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 6; - default: - /* Always set to passthru if something is funny */ - return pass_through( state, blendUnit ); - } + const GLuint numColorArgs = combine->_NumArgsRGB; + const GLuint numAlphaArgs = combine->_NumArgsA; - case GL_BLEND: - switch(format) { - case GL_ALPHA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 5; - - case GL_LUMINANCE: - case GL_RGB: - case GL_YCBCR_MESA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_BLEND); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG0 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_FACTOR_N); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return emit_factor( blendUnit, state, 6, factor ); - - case GL_INTENSITY: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_BLEND); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_BLEND); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG0 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_FACTOR_N); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG0 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[6] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_FACTOR_N); - state[7] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return emit_factor( blendUnit, state, 8, factor ); - - - case GL_LUMINANCE_ALPHA: - case GL_RGBA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_BLEND); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG0 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_FACTOR_N); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[6] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return emit_factor( blendUnit, state, 7, factor ); - - default: - /* Always set to passthru if something is funny */ - return pass_through( state, blendUnit ); - } - - case GL_ADD: - switch(format) { - case GL_ALPHA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 5; - - case GL_LUMINANCE: - case GL_RGB: - case GL_YCBCR_MESA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ADD); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ARG1); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 5; - - case GL_INTENSITY: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ADD); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ADD); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 6; - - case GL_LUMINANCE_ALPHA: - case GL_RGBA: - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_ADD); - state[1] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_SCALE_1X | - TEXOP_MODIFY_PARMS | - TEXBLENDOP_MODULATE); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - state[4] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - texel_op); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - TEXBLENDARG_CURRENT); - return 6; - - default: - /* Always set to passthru if something is funny */ - return pass_through( state, blendUnit ); - } - - default: - /* Always set to passthru if something is funny */ - return pass_through( state, blendUnit ); - } -} - -static GLuint i830SetTexEnvCombine(i830ContextPtr i830, - const struct gl_texture_unit *texUnit, - GLint blendUnit, - GLuint texel_op, - GLuint *state, - const GLfloat *factor ) -{ GLuint blendop; GLuint ablendop; GLuint args_RGB[3]; @@ -755,6 +150,23 @@ GLuint alpha_shift; GLboolean need_factor = 0; int i; + unsigned used; + static const GLuint tex_blend_rgb[3] = { + TEXPIPE_COLOR | TEXBLEND_ARG1 | TEXBLENDARG_MODIFY_PARMS, + TEXPIPE_COLOR | TEXBLEND_ARG2 | TEXBLENDARG_MODIFY_PARMS, + TEXPIPE_COLOR | TEXBLEND_ARG0 | TEXBLENDARG_MODIFY_PARMS, + }; + static const GLuint tex_blend_a[3] = { + TEXPIPE_ALPHA | TEXBLEND_ARG1 | TEXBLENDARG_MODIFY_PARMS, + TEXPIPE_ALPHA | TEXBLEND_ARG2 | TEXBLENDARG_MODIFY_PARMS, + TEXPIPE_ALPHA | TEXBLEND_ARG0 | TEXBLENDARG_MODIFY_PARMS, + }; + static const GLuint op_rgb[4] = { + 0, + TEXBLENDARG_INV_ARG, + TEXBLENDARG_REPLICATE_ALPHA, + TEXBLENDARG_REPLICATE_ALPHA | TEXBLENDARG_INV_ARG, + }; if(INTEL_DEBUG&DEBUG_TEXTURE) fprintf(stderr, "%s\n", __FUNCTION__); @@ -764,9 +176,9 @@ * scale factor, but the ARB version (and the version in OpenGL * 1.3) does. */ - switch (texUnit->Combine.ModeRGB) { + switch (combine->ModeRGB) { case GL_DOT3_RGB_EXT: - alpha_shift = texUnit->Combine.ScaleShiftA; + alpha_shift = combine->ScaleShiftA; rgb_shift = 0; break; @@ -776,13 +188,13 @@ break; default: - rgb_shift = texUnit->Combine.ScaleShiftRGB; - alpha_shift = texUnit->Combine.ScaleShiftA; + rgb_shift = combine->ScaleShiftRGB; + alpha_shift = combine->ScaleShiftA; break; } - switch(texUnit->Combine.ModeRGB) { + switch(combine->ModeRGB) { case GL_REPLACE: blendop = TEXBLENDOP_ARG1; break; @@ -818,10 +230,16 @@ /* Handle RGB args */ for(i = 0; i < 3; i++) { - switch(texUnit->Combine.SourceRGB[i]) { + switch(combine->SourceRGB[i]) { case GL_TEXTURE: args_RGB[i] = texel_op; break; + case GL_TEXTURE0: + case GL_TEXTURE1: + case GL_TEXTURE2: + case GL_TEXTURE3: + args_RGB[i] = GetTexelOp( combine->SourceRGB[i] - GL_TEXTURE0 ); + break; case GL_CONSTANT: args_RGB[i] = TEXBLENDARG_FACTOR_N; need_factor = 1; @@ -836,7 +254,7 @@ return pass_through( state, blendUnit ); } - switch(texUnit->Combine.OperandRGB[i]) { + switch(combine->OperandRGB[i]) { case GL_SRC_COLOR: args_RGB[i] |= 0; break; @@ -863,15 +281,15 @@ * Note - the global factor is set up with alpha == .5, so * the alpha part of the DOT4 calculation should be zero. */ - if ( texUnit->Combine.ModeRGB == GL_DOT3_RGBA_EXT || - texUnit->Combine.ModeRGB == GL_DOT3_RGBA ) { + if ( combine->ModeRGB == GL_DOT3_RGBA_EXT || + combine->ModeRGB == GL_DOT3_RGBA ) { ablendop = TEXBLENDOP_DOT4; args_A[0] = TEXBLENDARG_FACTOR; /* the global factor */ args_A[1] = TEXBLENDARG_FACTOR; args_A[2] = TEXBLENDARG_FACTOR; } else { - switch(texUnit->Combine.ModeA) { + switch(combine->ModeA) { case GL_REPLACE: ablendop = TEXBLENDOP_ARG1; break; @@ -899,10 +317,16 @@ /* Handle A args */ for(i = 0; i < 3; i++) { - switch(texUnit->Combine.SourceA[i]) { + switch(combine->SourceA[i]) { case GL_TEXTURE: args_A[i] = texel_op; break; + case GL_TEXTURE0: + case GL_TEXTURE1: + case GL_TEXTURE2: + case GL_TEXTURE3: + args_A[i] = GetTexelOp( combine->SourceA[i] - GL_TEXTURE0 ); + break; case GL_CONSTANT: args_A[i] = TEXBLENDARG_FACTOR_N; need_factor = 1; @@ -917,7 +341,7 @@ return pass_through( state, blendUnit ); } - switch(texUnit->Combine.OperandA[i]) { + switch(combine->OperandA[i]) { case GL_SRC_ALPHA: args_A[i] |= 0; break; @@ -941,59 +365,38 @@ */ - /* Build color pipeline */ + /* Build color & alpha pipelines */ - state[0] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_COLOR | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - DISABLE_TEX_CNTRL_STAGE | - TEXOP_MODIFY_PARMS | - blendop); - state[1] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - args_RGB[0]); - state[2] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - args_RGB[1]); - state[3] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_COLOR | - TEXBLEND_ARG0 | - TEXBLENDARG_MODIFY_PARMS | - args_RGB[2]); - - /* Build Alpha pipeline */ - state[4] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | - TEXPIPE_ALPHA | - ENABLE_TEXOUTPUT_WRT_SEL | - TEXOP_OUTPUT_CURRENT | - TEXOP_MODIFY_PARMS | - ablendop); - state[5] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG1 | - TEXBLENDARG_MODIFY_PARMS | - args_A[0]); - state[6] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG2 | - TEXBLENDARG_MODIFY_PARMS | - args_A[1]); - state[7] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | - TEXPIPE_ALPHA | - TEXBLEND_ARG0 | - TEXBLENDARG_MODIFY_PARMS | - args_A[2]); + used = 0; + state[used++] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | + TEXPIPE_COLOR | + ENABLE_TEXOUTPUT_WRT_SEL | + TEXOP_OUTPUT_CURRENT | + DISABLE_TEX_CNTRL_STAGE | + TEXOP_MODIFY_PARMS | + blendop); + state[used++] = (_3DSTATE_MAP_BLEND_OP_CMD(blendUnit) | + TEXPIPE_ALPHA | + ENABLE_TEXOUTPUT_WRT_SEL | + TEXOP_OUTPUT_CURRENT | + TEXOP_MODIFY_PARMS | + ablendop); + + for ( i = 0 ; i < numColorArgs ; i++ ) { + state[used++] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | + tex_blend_rgb[i] | args_RGB[i]); + } + + for ( i = 0 ; i < numAlphaArgs ; i++ ) { + state[used++] = (_3DSTATE_MAP_BLEND_ARG_CMD(blendUnit) | + tex_blend_a[i] | args_A[i]); + } if (need_factor) - return emit_factor( blendUnit, state, 8, factor ); + return emit_factor( blendUnit, state, used, factor ); else - return 8; + return used; } @@ -1010,17 +413,9 @@ /* Update i830->state.TexBlend */ - if (texUnit->EnvMode == GL_COMBINE) { - tmp_sz = i830SetTexEnvCombine(i830, texUnit, blendUnit, - GetTexelOp(unit), tmp, - texUnit->EnvColor ); - } - else { - tmp_sz = i830SetBlend_GL1_2(i830, blendUnit, texUnit->EnvMode, - t->intel.image[0][0].internalFormat, - GetTexelOp(unit), tmp, - texUnit->EnvColor ); - } + tmp_sz = i830SetTexEnvCombine(i830, texUnit->_CurrentCombine, blendUnit, + GetTexelOp(unit), tmp, + texUnit->EnvColor ); if (last_stage) tmp[0] |= TEXOP_LAST_STAGE; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c 2004-07-22 08:52:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_texstate.c 2004-12-15 02:50:58.000000000 +0100 @@ -42,6 +42,19 @@ #include "i830_context.h" #include "i830_reg.h" +static const GLint initial_offsets[6][2] = { {0,0}, + {0,2}, + {1,0}, + {1,2}, + {1,1}, + {1,3} }; + +static const GLint step_offsets[6][2] = { {0,2}, + {0,2}, + {-1,2}, + {-1,2}, + {-1,1}, + {-1,1} }; #define I830_TEX_UNIT_ENABLED(unit) (1<intel.base.lastLevel; numLevels = lastLevel - firstLevel + 1; - /* Pitch would be subject to additional rules if texture memory were - * tiled. Currently it isn't. - */ - if (0) { - pitch = 128; - while (pitch < tObj->Image[0][firstLevel]->Width * t->intel.texelBytes) - pitch *= 2; - } - else { - pitch = tObj->Image[0][firstLevel]->Width * t->intel.texelBytes; - pitch = (pitch + 3) & ~3; - } - /* All images must be loaded at this pitch. Count the number of * lines required: */ - for ( total_height = i = 0 ; i < numLevels ; i++ ) { - t->intel.image[0][i].image = tObj->Image[0][firstLevel + i]; - if (!t->intel.image[0][i].image) - break; + switch (tObj->Target) { + case GL_TEXTURE_CUBE_MAP: { + const GLuint dim = tObj->Image[0][firstLevel]->Width; + GLuint face; + + pitch = dim * t->intel.texelBytes; + pitch *= 2; /* double pitch for cube layouts */ + pitch = (pitch + 3) & ~3; - t->intel.image[0][i].offset = total_height * pitch; - t->intel.image[0][i].internalFormat = baseImage->Format; - if (t->intel.image[0][i].image->IsCompressed) - { - if (t->intel.image[0][i].image->Height > 4) - total_height += t->intel.image[0][i].image->Height/4; - else - total_height += 1; - } - else - total_height += MAX2(2, t->intel.image[0][i].image->Height); + total_height = dim * 4; + + for ( face = 0 ; face < 6 ; face++) { + GLuint x = initial_offsets[face][0] * dim; + GLuint y = initial_offsets[face][1] * dim; + GLuint d = dim; + + t->intel.base.dirty_images[face] = ~0; + + assert(tObj->Image[face][firstLevel]->Width == dim); + assert(tObj->Image[face][firstLevel]->Height == dim); + + for (i = 0; i < numLevels; i++) { + t->intel.image[face][i].image = tObj->Image[face][firstLevel + i]; + if (!t->intel.image[face][i].image) { + fprintf(stderr, "no image %d %d\n", face, i); + break; /* can't happen */ + } + + t->intel.image[face][i].offset = + y * pitch + x * t->intel.texelBytes; + t->intel.image[face][i].internalFormat = baseImage->Format; + + d >>= 1; + x += step_offsets[face][0] * d; + y += step_offsets[face][1] * d; + } + } + break; + } + default: + pitch = tObj->Image[0][firstLevel]->Width * t->intel.texelBytes; + pitch = (pitch + 3) & ~3; + t->intel.base.dirty_images[0] = ~0; + + for ( total_height = i = 0 ; i < numLevels ; i++ ) { + t->intel.image[0][i].image = tObj->Image[0][firstLevel + i]; + if (!t->intel.image[0][i].image) + break; + + t->intel.image[0][i].offset = total_height * pitch; + t->intel.image[0][i].internalFormat = baseImage->Format; + if (t->intel.image[0][i].image->IsCompressed) + { + if (t->intel.image[0][i].image->Height > 4) + total_height += t->intel.image[0][i].image->Height/4; + else + total_height += 1; + } + else + total_height += MAX2(2, t->intel.image[0][i].image->Height); + } + break; } t->intel.Pitch = pitch; @@ -176,7 +222,8 @@ ((tObj->Image[0][firstLevel]->Width - 1) << TM0S1_WIDTH_SHIFT) | textureFormat); t->Setup[I830_TEXREG_TM0S2] = - (((pitch / 4) - 1) << TM0S2_PITCH_SHIFT); + (((pitch / 4) - 1) << TM0S2_PITCH_SHIFT) | + TM0S2_CUBE_FACE_ENA_MASK; t->Setup[I830_TEXREG_TM0S3] &= ~TM0S3_MAX_MIP_MASK; t->Setup[I830_TEXREG_TM0S3] &= ~TM0S3_MIN_MIP_MASK; t->Setup[I830_TEXREG_TM0S3] |= ((numLevels - 1)*4) << TM0S3_MIN_MIP_SHIFT; @@ -216,6 +263,7 @@ i830->state.Tex[unit][I830_TEXREG_TM0S4] = t->Setup[I830_TEXREG_TM0S4]; i830->state.Tex[unit][I830_TEXREG_MCS] = (t->Setup[I830_TEXREG_MCS] & ~MAP_UNIT_MASK); + i830->state.Tex[unit][I830_TEXREG_CUBE] = t->Setup[I830_TEXREG_CUBE]; i830->state.Tex[unit][I830_TEXREG_MCS] |= MAP_UNIT(unit); t->intel.dirty &= ~I830_UPLOAD_TEX(unit); @@ -267,9 +315,11 @@ mcs &= ~TEXCOORDS_ARE_NORMAL; mcs |= TEXCOORDS_ARE_IN_TEXELUNITS; - if (mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) { + if ((mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) + || (0 != i830->state.Tex[unit][I830_TEXREG_CUBE])) { I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit)); i830->state.Tex[unit][I830_TEXREG_MCS] = mcs; + i830->state.Tex[unit][I830_TEXREG_CUBE] = 0; } return GL_TRUE; @@ -284,15 +334,61 @@ mcs &= ~TEXCOORDS_ARE_IN_TEXELUNITS; mcs |= TEXCOORDS_ARE_NORMAL; - if (mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) { + if ((mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) + || (0 != i830->state.Tex[unit][I830_TEXREG_CUBE])) { I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit)); i830->state.Tex[unit][I830_TEXREG_MCS] = mcs; + i830->state.Tex[unit][I830_TEXREG_CUBE] = 0; } return GL_TRUE; } +static GLboolean enable_tex_cube( GLcontext *ctx, GLuint unit ) +{ + i830ContextPtr i830 = I830_CONTEXT(ctx); + struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; + struct gl_texture_object *tObj = texUnit->_Current; + i830TextureObjectPtr t = (i830TextureObjectPtr)tObj->DriverData; + GLuint mcs = i830->state.Tex[unit][I830_TEXREG_MCS]; + const GLuint cube = CUBE_NEGX_ENABLE | CUBE_POSX_ENABLE + | CUBE_NEGY_ENABLE | CUBE_POSY_ENABLE + | CUBE_NEGZ_ENABLE | CUBE_POSZ_ENABLE; + GLuint face; + + mcs &= ~TEXCOORDS_ARE_IN_TEXELUNITS; + mcs |= TEXCOORDS_ARE_NORMAL; + + if ((mcs != i830->state.Tex[unit][I830_TEXREG_MCS]) + || (cube != i830->state.Tex[unit][I830_TEXREG_CUBE])) { + I830_STATECHANGE(i830, I830_UPLOAD_TEX(unit)); + i830->state.Tex[unit][I830_TEXREG_MCS] = mcs; + i830->state.Tex[unit][I830_TEXREG_CUBE] = cube; + } + + /* Upload teximages (not pipelined) + */ + if ( t->intel.base.dirty_images[0] || t->intel.base.dirty_images[1] || + t->intel.base.dirty_images[2] || t->intel.base.dirty_images[3] || + t->intel.base.dirty_images[4] || t->intel.base.dirty_images[5] ) { + i830SetTexImages( i830, tObj ); + } + + /* upload (per face) */ + for (face = 0; face < 6; face++) { + if (t->intel.base.dirty_images[face]) { + if (!intelUploadTexImages( &i830->intel, &t->intel, face )) { + return GL_FALSE; + } + } + } + + + return GL_TRUE; +} + + static GLboolean disable_tex( GLcontext *ctx, GLuint unit ) { i830ContextPtr i830 = I830_CONTEXT(ctx); @@ -324,20 +420,21 @@ INTEL_CONTEXT(ctx)->intelScreen->textureSize < 2048 * 1024) return GL_FALSE; - if (texUnit->_ReallyEnabled == TEXTURE_1D_BIT || - texUnit->_ReallyEnabled == TEXTURE_2D_BIT) { + switch(texUnit->_ReallyEnabled) { + case TEXTURE_1D_BIT: + case TEXTURE_2D_BIT: return (enable_tex_common( ctx, unit ) && enable_tex_2d( ctx, unit )); - } - else if (texUnit->_ReallyEnabled == TEXTURE_RECT_BIT) { + case TEXTURE_RECT_BIT: return (enable_tex_common( ctx, unit ) && enable_tex_rect( ctx, unit )); - } - else if (texUnit->_ReallyEnabled) { - return GL_FALSE; - } - else { + case TEXTURE_CUBE_BIT: + return (enable_tex_common( ctx, unit ) && + enable_tex_cube( ctx, unit )); + case 0: return disable_tex( ctx, unit ); + default: + return GL_FALSE; } } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c 2004-09-02 04:06:03.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i830_vtbl.c 2004-12-15 02:50:58.000000000 +0100 @@ -87,6 +87,10 @@ intel->coloroffset = 3; } + if (index & _TNL_BIT_POINTSIZE) { + EMIT_ATTR( _TNL_ATTRIB_POINTSIZE, EMIT_1F, VFT0_POINT_WIDTH ); + } + EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA, VFT0_DIFFUSE ); intel->specoffset = 0; @@ -117,11 +121,15 @@ switch (sz) { case 1: case 2: - case 3: /* XXX: fix for CUBE/VOLUME textures */ emit = EMIT_2F; sz = 2; mcs |= TEXCOORDTYPE_CARTESIAN; break; + case 3: + emit = EMIT_3F; + sz = 3; + mcs |= TEXCOORDTYPE_VECTOR; + break; case 4: emit = EMIT_3F_XYW; sz = 3; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c 2004-07-22 08:52:16.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/i915_context.c 2004-12-15 02:50:58.000000000 +0100 @@ -45,14 +45,9 @@ * Mesa's Driver Functions ***************************************/ - static const char * const card_extensions[] = { "GL_ARB_fragment_program", - "GL_ARB_texture_cube_map", - "GL_EXT_blend_equation_separate", - "GL_ATI_blend_equation_separate", - "GL_ARB_point_parameters", NULL }; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c 2004-07-22 08:52:17.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/i915/intel_context.c 2004-12-15 02:50:58.000000000 +0100 @@ -72,7 +72,7 @@ * Mesa's Driver Functions ***************************************/ -#define DRIVER_DATE "20040528" +#define DRIVER_DATE "20040919" const GLubyte *intelGetString( GLcontext *ctx, GLenum name ) { @@ -125,58 +125,60 @@ -/* Extension strings exported by the intel driver. +/** + * Extension strings exported by the intel driver. * - * NOTE: See implementation of glGetString in each hw_context.c file: + * \note + * It appears that ARB_texture_env_crossbar and NV_blend_square have + * "disappeared" compared to the old i830-specific driver. + * + * \note + * See implementation of \c glGetString in each hw_context.c file: * This set of extensions is overridden and many are not actually * exported to the driver. They are however enabled internally as * Mesa requires this when calculating things like GL version number. */ static const char * const card_extensions[] = { - "GL_APPLE_client_storage", "GL_ARB_multisample", "GL_ARB_multitexture", + "GL_ARB_point_parameters", "GL_ARB_texture_border_clamp", + "GL_ARB_texture_cube_map", "GL_ARB_texture_compression", "GL_ARB_texture_env_add", "GL_ARB_texture_env_combine", "GL_ARB_texture_env_dot3", "GL_ARB_texture_mirrored_repeat", + "GL_ARB_texture_rectangle", + "GL_ARB_vertex_buffer_object", "GL_ARB_vertex_program", + "GL_ARB_window_pos", + + "GL_EXT_abgr", + "GL_EXT_bgra", "GL_EXT_blend_color", + "GL_EXT_blend_equation_separate", "GL_EXT_blend_func_separate", "GL_EXT_blend_minmax", "GL_EXT_blend_subtract", "GL_EXT_fog_coord", + "GL_EXT_multi_draw_arrays", "GL_EXT_secondary_color", "GL_EXT_stencil_wrap", "GL_EXT_texture_edge_clamp", - "GL_EXT_texture_env_add", "GL_EXT_texture_env_combine", "GL_EXT_texture_env_dot3", "GL_EXT_texture_filter_anisotropic", "GL_EXT_texture_lod_bias", - "GL_IBM_texture_mirrored_repeat", - "GL_INGR_blend_func_separate", + + "GL_3DFX_texture_compression_FXT1", + "GL_APPLE_client_storage", "GL_MESA_pack_invert", "GL_MESA_ycbcr_texture", - "GL_NV_texture_rectangle", "GL_NV_vertex_program", - -/* New in final: - */ - "GL_ARB_vertex_buffer_object", - "GL_ARB_window_pos", - "GL_EXT_multi_draw_arrays", - "GL_EXT_abgr", - "GL_EXT_bgra", - - + "GL_NV_vertex_program1_1", "GL_SGIS_generate_mipmap", - "GL_SGIS_texture_border_clamp", - "GL_SGIS_texture_edge_clamp", - "GL_3DFX_texture_compression_FXT1", NULL }; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c --- xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c 2004-07-22 08:51:39.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/mga/mga_xmesa.c 2004-12-15 02:50:58.000000000 +0100 @@ -59,6 +59,8 @@ #include "utils.h" #include "vblank.h" +#include "extensions.h" + #include "GL/internal/dri_interface.h" /* MGA configuration @@ -74,8 +76,12 @@ DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB) DRI_CONF_COLOR_REDUCTION(DRI_CONF_COLOR_REDUCTION_DITHER) DRI_CONF_SECTION_END + DRI_CONF_SECTION_SOFTWARE + DRI_CONF_ARB_VERTEX_PROGRAM(true) + DRI_CONF_NV_VERTEX_PROGRAM(true) + DRI_CONF_SECTION_END DRI_CONF_END; -static const GLuint __driNConfigOptions = 3; +static const GLuint __driNConfigOptions = 5; #ifdef USE_NEW_INTERFACE static PFNGLXCREATECONTEXTMODES create_context_modes = NULL; @@ -420,6 +426,8 @@ &_tnl_fog_coordinate_stage, &_tnl_texgen_stage, &_tnl_texture_transform_stage, + &_tnl_vertex_program_stage, + /* REMOVE: point attenuation stage */ #if 0 &_mga_render_stage, /* ADD: unclipped rastersetup-to-dma */ @@ -449,8 +457,10 @@ { "GL_ARB_multisample", "GL_ARB_texture_compression", + "GL_ARB_texture_rectangle", "GL_EXT_blend_logic_op", "GL_EXT_fog_coord", + "GL_EXT_multi_draw_arrays", /* paletted_textures currently doesn't work, but we could fix them later */ #if 0 "GL_EXT_shared_texture_palette", @@ -458,10 +468,8 @@ #endif "GL_EXT_secondary_color", "GL_EXT_stencil_wrap", - "GL_EXT_texture_rectangle", "GL_MESA_ycbcr_texture", "GL_SGIS_generate_mipmap", - "GL_SGIS_texture_lod", NULL }; @@ -666,6 +674,16 @@ driInitExtensions( ctx, g400_extensions, GL_FALSE ); } + if ( driQueryOptionb( &mmesa->optionCache, "arb_vertex_program" ) ) { + _mesa_enable_extension( ctx, "GL_ARB_vertex_program" ); + } + + if ( driQueryOptionb( &mmesa->optionCache, "nv_vertex_program" ) ) { + _mesa_enable_extension( ctx, "GL_NV_vertex_program" ); + _mesa_enable_extension( ctx, "GL_NV_vertex_program1_1" ); + } + + /* XXX these should really go right after _mesa_init_driver_functions() */ mgaDDInitStateFuncs( ctx ); mgaDDInitSpanFuncs( ctx ); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile --- xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile 2004-06-16 11:18:13.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/Makefile 2004-12-15 02:50:58.000000000 +0100 @@ -28,8 +28,7 @@ r128_tris.c \ r128_ioctl.c \ r128_span.c \ - r128_texmem.c \ - r128_vb.c + r128_texmem.c C_SOURCES = \ $(COMMON_SOURCES) \ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c 2004-06-16 11:18:11.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.c 2004-12-15 02:50:58.000000000 +0100 @@ -56,7 +56,6 @@ #include "r128_span.h" #include "r128_tex.h" #include "r128_tris.h" -#include "r128_vb.h" #include "vblank.h" #include "utils.h" @@ -180,6 +179,7 @@ rmesa->RenderIndex = -1; /* Impossible value */ rmesa->vert_buf = NULL; rmesa->num_verts = 0; + rmesa->tnl_state = ~0; /* Set the maximum texture size small enough that we can guarentee that * all texture units can bind a maximal texture and have them both in @@ -243,7 +243,6 @@ if (sPriv->drmMinor >= 4) _mesa_enable_extension( ctx, "GL_MESA_ycbcr_texture" ); - r128InitVB( ctx ); r128InitTriFuncs( ctx ); r128DDInitStateFuncs( ctx ); r128DDInitSpanFuncs( ctx ); @@ -280,8 +279,6 @@ _ac_DestroyContext( rmesa->glCtx ); _swrast_DestroyContext( rmesa->glCtx ); - r128FreeVB( rmesa->glCtx ); - /* free the Mesa context */ rmesa->glCtx->DriverCtx = NULL; _mesa_destroy_context(rmesa->glCtx); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h 2004-06-16 11:18:11.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_context.h 2004-12-15 02:50:58.000000000 +0100 @@ -43,6 +43,7 @@ #include "r128_drm.h" #include "mtypes.h" +#include "tnl/t_vertex.h" #include "r128_reg.h" @@ -81,6 +82,7 @@ #define R128_FALLBACK_SEP_SPECULAR 0x0080 #define R128_FALLBACK_BLEND_EQ 0x0100 #define R128_FALLBACK_BLEND_FUNC 0x0200 +#define R128_FALLBACK_PROJTEX 0x0400 /* Use the templated vertex format: @@ -122,18 +124,21 @@ GLuint dirty; /* Hardware state to be updated */ drm_r128_context_regs_t setup; + /* Vertex state */ + GLuint vertex_size; + GLuint vertex_format; + struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX]; + GLuint vertex_attr_count; + char *verts; /* points to tnl->clipspace.vertex_buf */ + GLuint num_verts; + int coloroffset, specoffset; + int tnl_state; /* tnl->render_inputs for this _tnl_install_attrs */ + GLuint NewGLState; GLuint Fallback; - GLuint SetupIndex; - GLuint SetupNewInputs; GLuint RenderIndex; GLfloat hw_viewport[16]; GLfloat depth_scale; - GLuint vertex_size; - GLuint vertex_stride_shift; - GLuint vertex_format; - GLuint num_verts; - GLubyte *verts; uint32_t ClearColor; /* Color used to clear color buffer */ uint32_t ClearDepth; /* Value used to clear depth buffer */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c 2004-06-16 11:18:11.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_dd.c 2004-12-15 02:50:58.000000000 +0100 @@ -36,14 +36,14 @@ #include "r128_context.h" #include "r128_ioctl.h" #include "r128_state.h" -#include "r128_vb.h" #include "r128_dd.h" +#include "swrast/swrast.h" #include "context.h" #include "utils.h" -#define DRIVER_DATE "20030328" +#define DRIVER_DATE "20041001" /* Return the width and height of the current color buffer. diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c 2004-06-16 11:18:12.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.c 2004-12-15 02:50:58.000000000 +0100 @@ -43,6 +43,7 @@ #include "swrast/swrast.h" #include "vblank.h" +#include "mmio.h" #define R128_TIMEOUT 2048 #define R128_IDLE_RETRY 32 @@ -225,12 +226,11 @@ static int r128WaitForFrameCompletion( r128ContextPtr rmesa ) { unsigned char *R128MMIO = rmesa->r128Screen->mmio.map; - uint32_t frame; int i; int wait = 0; while ( 1 ) { - frame = *(volatile unsigned int *)(R128MMIO + R128_LAST_FRAME_REG); + uint32_t frame = read_MMIO_LE32( R128MMIO, R128_LAST_FRAME_REG ); if ( rmesa->sarea->last_frame - frame <= R128_MAX_OUTSTANDING ) { break; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h 2004-06-16 11:18:12.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_ioctl.h 2004-12-15 02:50:58.000000000 +0100 @@ -47,9 +47,11 @@ extern drmBufPtr r128GetBufferLocked( r128ContextPtr rmesa ); extern void r128FlushVerticesLocked( r128ContextPtr rmesa ); -static __inline void *r128AllocDmaLow( r128ContextPtr rmesa, int bytes ) +static __inline void *r128AllocDmaLow( r128ContextPtr rmesa, int count, + int vert_size ) { uint32_t *head; + int bytes = count * vert_size; if ( !rmesa->vert_buf ) { LOCK_HARDWARE( rmesa ); @@ -64,6 +66,8 @@ head = (uint32_t *)((char *)rmesa->vert_buf->address + rmesa->vert_buf->used); rmesa->vert_buf->used += bytes; + rmesa->num_verts += count; + return head; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c 2004-06-16 11:18:12.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_lock.c 2004-12-15 02:50:58.000000000 +0100 @@ -104,7 +104,7 @@ r128UpdatePageFlipping( rmesa ); rmesa->lastStamp = dPriv->lastStamp; rmesa->new_state |= R128_NEW_CLIP; - rmesa->SetupNewInputs = ~0; + rmesa->tnl_state = ~0; } rmesa->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_CLIPRECTS; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c 2004-07-22 08:51:42.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_screen.c 2004-12-15 02:50:58.000000000 +0100 @@ -38,7 +38,6 @@ #include "r128_context.h" #include "r128_ioctl.h" #include "r128_tris.h" -#include "r128_vb.h" #include "context.h" #include "imports.h" diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c 2004-06-16 11:18:12.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_state.c 2004-12-15 02:50:58.000000000 +0100 @@ -38,7 +38,6 @@ #include "r128_state.h" #include "r128_ioctl.h" #include "r128_tris.h" -#include "r128_vb.h" #include "r128_tex.h" #include "context.h" diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c 2004-07-22 08:51:43.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tex.c 2004-12-15 02:50:58.000000000 +0100 @@ -36,7 +36,6 @@ #include "r128_context.h" #include "r128_state.h" #include "r128_ioctl.h" -#include "r128_vb.h" #include "r128_tris.h" #include "r128_tex.h" #include "r128_texobj.h" diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c 2004-06-16 11:18:12.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texmem.c 2004-12-15 02:50:58.000000000 +0100 @@ -36,7 +36,6 @@ #include "r128_context.h" #include "r128_state.h" #include "r128_ioctl.h" -#include "r128_vb.h" #include "r128_tris.h" #include "r128_tex.h" diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c 2004-08-28 06:27:25.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_texstate.c 2004-12-15 02:50:58.000000000 +0100 @@ -42,7 +42,6 @@ #include "r128_context.h" #include "r128_state.h" #include "r128_ioctl.h" -#include "r128_vb.h" #include "r128_tris.h" #include "r128_tex.h" diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c 2004-07-22 08:51:43.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_tris.c 2004-12-15 02:50:58.000000000 +0100 @@ -47,7 +47,6 @@ #include "r128_tris.h" #include "r128_state.h" #include "r128_tex.h" -#include "r128_vb.h" #include "r128_ioctl.h" static const GLuint hw_prim[GL_POLYGON+1] = { @@ -70,84 +69,27 @@ /*********************************************************************** * Emit primitives as inline vertices * ***********************************************************************/ + +#define HAVE_QUADS 0 +#define HAVE_LINES 1 +#define HAVE_POINTS 1 +#define HAVE_LE32_VERTS 1 +#define CTX_ARG r128ContextPtr rmesa +#define CTX_ARG2 rmesa +#define GET_VERTEX_DWORDS() rmesa->vertex_size +#define ALLOC_VERTS( n, size ) r128AllocDmaLow( rmesa, (n), (size) * 4 ) +#undef LOCAL_VARS +#define LOCAL_VARS \ + r128ContextPtr rmesa = R128_CONTEXT(ctx); \ + const char *vertptr = rmesa->verts; +#define VERT(x) (r128Vertex *)(vertptr + ((x) * vertsize * 4)) +#define VERTEX r128Vertex +#undef TAG +#define TAG(x) r128_##x +#include "tnl_dd/t_dd_triemit.h" +#undef TAG +#undef LOCAL_VARS -#if defined(USE_X86_ASM) -#define COPY_DWORDS( j, vb, vertsize, v ) \ -do { \ - int __tmp; \ - __asm__ __volatile__( "rep ; movsl" \ - : "=%c" (j), "=D" (vb), "=S" (__tmp) \ - : "0" (vertsize), \ - "D" ((long)vb), \ - "S" ((long)v) ); \ -} while (0) -#else -#define COPY_DWORDS( j, vb, vertsize, v ) \ -do { \ - for ( j = 0 ; j < vertsize ; j++ ) \ - vb[j] = CPU_TO_LE32(((GLuint *)v)[j]); \ - vb += vertsize; \ -} while (0) -#endif - -static __inline void r128_draw_quad( r128ContextPtr rmesa, - r128VertexPtr v0, - r128VertexPtr v1, - r128VertexPtr v2, - r128VertexPtr v3 ) -{ - GLuint vertsize = rmesa->vertex_size; - GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, 6 * vertsize * 4 ); - GLuint j; - - rmesa->num_verts += 6; - COPY_DWORDS( j, vb, vertsize, v0 ); - COPY_DWORDS( j, vb, vertsize, v1 ); - COPY_DWORDS( j, vb, vertsize, v3 ); - COPY_DWORDS( j, vb, vertsize, v1 ); - COPY_DWORDS( j, vb, vertsize, v2 ); - COPY_DWORDS( j, vb, vertsize, v3 ); -} - - -static __inline void r128_draw_triangle( r128ContextPtr rmesa, - r128VertexPtr v0, - r128VertexPtr v1, - r128VertexPtr v2 ) -{ - GLuint vertsize = rmesa->vertex_size; - GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, 3 * vertsize * 4 ); - GLuint j; - - rmesa->num_verts += 3; - COPY_DWORDS( j, vb, vertsize, v0 ); - COPY_DWORDS( j, vb, vertsize, v1 ); - COPY_DWORDS( j, vb, vertsize, v2 ); -} - -static __inline void r128_draw_line( r128ContextPtr rmesa, - r128VertexPtr v0, - r128VertexPtr v1 ) -{ - GLuint vertsize = rmesa->vertex_size; - GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, 2 * vertsize * 4 ); - GLuint j; - - rmesa->num_verts += 2; - COPY_DWORDS( j, vb, vertsize, v0 ); - COPY_DWORDS( j, vb, vertsize, v1 ); -} - -static __inline void r128_draw_point( r128ContextPtr rmesa, - r128VertexPtr v0 ) -{ - int vertsize = rmesa->vertex_size; - GLuint *vb = (GLuint *)r128AllocDmaLow( rmesa, vertsize * 4 ); - int j; - - rmesa->num_verts += 1; - COPY_DWORDS( j, vb, vertsize, v0 ); -} /*********************************************************************** * Macros for t_dd_tritmp.h to draw basic primitives * @@ -158,7 +100,7 @@ if (DO_FALLBACK) \ rmesa->draw_tri( rmesa, a, b, c ); \ else \ - r128_draw_triangle( rmesa, a, b, c ); \ + r128_triangle( rmesa, a, b, c ); \ } while (0) #define QUAD( a, b, c, d ) \ @@ -167,7 +109,7 @@ rmesa->draw_tri( rmesa, a, b, d ); \ rmesa->draw_tri( rmesa, b, c, d ); \ } else \ - r128_draw_quad( rmesa, a, b, c, d ); \ + r128_quad( rmesa, a, b, c, d ); \ } while (0) #define LINE( v0, v1 ) \ @@ -175,7 +117,7 @@ if (DO_FALLBACK) \ rmesa->draw_line( rmesa, v0, v1 ); \ else \ - r128_draw_line( rmesa, v0, v1 ); \ + r128_line( rmesa, v0, v1 ); \ } while (0) #define POINT( v0 ) \ @@ -183,7 +125,7 @@ if (DO_FALLBACK) \ rmesa->draw_point( rmesa, v0 ); \ else \ - r128_draw_point( rmesa, v0 ); \ + r128_point( rmesa, v0 ); \ } while (0) @@ -247,35 +189,40 @@ #define VERT_SET_SPEC( v0, c ) \ do { \ if (havespec) { \ - UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.red, (c)[0]); \ - UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.green, (c)[1]); \ - UNCLAMPED_FLOAT_TO_UBYTE(v0->v.specular.blue, (c)[2]); \ + r128_color_t *spec = (r128_color_t *)&((v0)->ui[specoffset]); \ + UNCLAMPED_FLOAT_TO_UBYTE(spec->red, (c)[0]); \ + UNCLAMPED_FLOAT_TO_UBYTE(spec->green, (c)[1]); \ + UNCLAMPED_FLOAT_TO_UBYTE(spec->blue, (c)[2]); \ } \ } while (0) #define VERT_COPY_SPEC( v0, v1 ) \ do { \ if (havespec) { \ - v0->v.specular.red = v1->v.specular.red; \ - v0->v.specular.green = v1->v.specular.green; \ - v0->v.specular.blue = v1->v.specular.blue; \ + r128_color_t *spec0 = (r128_color_t *)&((v0)->ui[specoffset]); \ + r128_color_t *spec1 = (r128_color_t *)&((v1)->ui[specoffset]); \ + spec0->red = spec1->red; \ + spec0->green = spec1->green; \ + spec0->blue = spec1->blue; \ } \ } while (0) -/* These don't need LE32_TO_CPU() as they used to save and restore +/* These don't need LE32_TO_CPU() as they are used to save and restore * colors which are already in the correct format. */ #define VERT_SAVE_RGBA( idx ) color[idx] = v[idx]->ui[coloroffset] #define VERT_RESTORE_RGBA( idx ) v[idx]->ui[coloroffset] = color[idx] -#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[5] -#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[5] = spec[idx] +#define VERT_SAVE_SPEC( idx ) if (havespec) spec[idx] = v[idx]->ui[specoffset] +#define VERT_RESTORE_SPEC( idx ) if (havespec) v[idx]->ui[specoffset] = spec[idx] #define LOCAL_VARS(n) \ r128ContextPtr rmesa = R128_CONTEXT(ctx); \ GLuint color[n], spec[n]; \ - GLuint coloroffset = (rmesa->vertex_size == 4 ? 3 : 4); \ - GLboolean havespec = (rmesa->vertex_size == 4 ? 0 : 1); \ - (void) color; (void) spec; (void) coloroffset; (void) havespec; + GLuint coloroffset = rmesa->coloroffset; \ + GLuint specoffset = rmesa->specoffset; \ + GLboolean havespec = (rmesa->specoffset != 0); \ + (void) color; (void) spec; (void) specoffset; \ + (void) coloroffset; (void) havespec; /*********************************************************************** * Helpers for rendering unfilled primitives * @@ -400,9 +347,10 @@ { GLcontext *ctx = rmesa->glCtx; SWvertex v[3]; - r128_translate_vertex( ctx, v0, &v[0] ); - r128_translate_vertex( ctx, v1, &v[1] ); - r128_translate_vertex( ctx, v2, &v[2] ); + _swsetup_Translate( ctx, v0, &v[0] ); + _swsetup_Translate( ctx, v1, &v[1] ); + _swsetup_Translate( ctx, v2, &v[2] ); + /* XXX: SpanRenderStart */ _swrast_Triangle( ctx, &v[0], &v[1], &v[2] ); } @@ -414,8 +362,8 @@ { GLcontext *ctx = rmesa->glCtx; SWvertex v[2]; - r128_translate_vertex( ctx, v0, &v[0] ); - r128_translate_vertex( ctx, v1, &v[1] ); + _swsetup_Translate( ctx, v0, &v[0] ); + _swsetup_Translate( ctx, v1, &v[1] ); _swrast_Line( ctx, &v[0], &v[1] ); } @@ -426,7 +374,7 @@ { GLcontext *ctx = rmesa->glCtx; SWvertex v[1]; - r128_translate_vertex( ctx, v0, &v[0] ); + _swsetup_Translate( ctx, v0, &v[0] ); _swrast_Point( ctx, &v[0] ); } @@ -436,16 +384,15 @@ /* Render unclipped begin/end objects */ /**********************************************************************/ -#define VERT(x) (r128Vertex *)(r128verts + (x * vertsize * sizeof(int))) #define RENDER_POINTS( start, count ) \ for ( ; start < count ; start++) \ - r128_draw_point( rmesa, VERT(start) ) + r128_point( rmesa, VERT(start) ) #define RENDER_LINE( v0, v1 ) \ - r128_draw_line( rmesa, VERT(v0), VERT(v1) ) + r128_line( rmesa, VERT(v0), VERT(v1) ) #define RENDER_TRI( v0, v1, v2 ) \ - r128_draw_triangle( rmesa, VERT(v0), VERT(v1), VERT(v2) ) + r128_triangle( rmesa, VERT(v0), VERT(v1), VERT(v2) ) #define RENDER_QUAD( v0, v1, v2, v3 ) \ - r128_draw_quad( rmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) ) + r128_quad( rmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) ) #define INIT(x) do { \ if (0) fprintf(stderr, "%s\n", __FUNCTION__); \ r128RenderPrimitive( ctx, x ); \ @@ -454,7 +401,7 @@ #define LOCAL_VARS \ r128ContextPtr rmesa = R128_CONTEXT(ctx); \ const GLuint vertsize = rmesa->vertex_size; \ - const char *r128verts = (char *)rmesa->verts; \ + const char *vertptr = (char *)rmesa->verts; \ const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \ (void) elt; #define RESET_STIPPLE @@ -471,72 +418,15 @@ /**********************************************************************/ -/* Render clipped primitives */ -/**********************************************************************/ - -static void r128RenderClippedPoly( GLcontext *ctx, const GLuint *elts, - GLuint n ) -{ - TNLcontext *tnl = TNL_CONTEXT(ctx); - struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; - - /* Render the new vertices as an unclipped polygon. - */ - { - GLuint *tmp = VB->Elts; - VB->Elts = (GLuint *)elts; - tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n, PRIM_BEGIN|PRIM_END ); - VB->Elts = tmp; - } -} - -static void r128RenderClippedLine( GLcontext *ctx, GLuint ii, GLuint jj ) -{ - TNLcontext *tnl = TNL_CONTEXT(ctx); - tnl->Driver.Render.Line( ctx, ii, jj ); -} - -static void r128FastRenderClippedPoly( GLcontext *ctx, const GLuint *elts, - GLuint n ) -{ - r128ContextPtr rmesa = R128_CONTEXT( ctx ); - GLuint vertsize = rmesa->vertex_size; - GLuint *vb = r128AllocDmaLow( rmesa, (n-2) * 3 * 4 * vertsize ); - GLubyte *r128verts = (GLubyte *)rmesa->verts; - const GLuint *start = (const GLuint *)VERT(elts[0]); - int i,j; - - rmesa->num_verts += (n-2) * 3; - - for (i = 2 ; i < n ; i++) { - COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i-1]) ); - COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i]) ); - COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) start ); - } -} - - - - -/**********************************************************************/ /* Choose render functions */ /**********************************************************************/ -#define _R128_NEW_RENDER_STATE (_DD_NEW_LINE_STIPPLE | \ - _DD_NEW_LINE_SMOOTH | \ - _DD_NEW_POINT_SMOOTH | \ - _DD_NEW_TRI_SMOOTH | \ - _DD_NEW_TRI_UNFILLED | \ - _DD_NEW_TRI_LIGHT_TWOSIDE | \ - _DD_NEW_TRI_OFFSET) \ - - #define POINT_FALLBACK (DD_POINT_SMOOTH) #define LINE_FALLBACK (DD_LINE_STIPPLE|DD_LINE_SMOOTH) #define TRI_FALLBACK (DD_TRI_SMOOTH) #define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK) #define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED) - +#define _R128_NEW_RENDER_STATE (ANY_FALLBACK_FLAGS | ANY_RASTER_FLAGS) static void r128ChooseRenderState(GLcontext *ctx) { @@ -545,9 +435,9 @@ GLuint index = 0; if (flags & (ANY_RASTER_FLAGS|ANY_FALLBACK_FLAGS)) { - rmesa->draw_point = r128_draw_point; - rmesa->draw_line = r128_draw_line; - rmesa->draw_tri = r128_draw_triangle; + rmesa->draw_point = r128_point; + rmesa->draw_line = r128_line; + rmesa->draw_tri = r128_triangle; if (flags & ANY_RASTER_FLAGS) { if (flags & DD_TRI_LIGHT_TWOSIDE) index |= R128_TWOSIDE_BIT; @@ -569,19 +459,18 @@ TNLcontext *tnl = TNL_CONTEXT(ctx); tnl->Driver.Render.Points = rast_tab[index].points; tnl->Driver.Render.Line = rast_tab[index].line; + tnl->Driver.Render.ClippedLine = rast_tab[index].line; tnl->Driver.Render.Triangle = rast_tab[index].triangle; tnl->Driver.Render.Quad = rast_tab[index].quad; if (index == 0) { tnl->Driver.Render.PrimTabVerts = r128_render_tab_verts; tnl->Driver.Render.PrimTabElts = r128_render_tab_elts; - tnl->Driver.Render.ClippedLine = rast_tab[index].line; - tnl->Driver.Render.ClippedPolygon = r128FastRenderClippedPoly; + tnl->Driver.Render.ClippedPolygon = r128_fast_clipped_poly; } else { tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts; tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts; - tnl->Driver.Render.ClippedLine = r128RenderClippedLine; - tnl->Driver.Render.ClippedPolygon = r128RenderClippedPoly; + tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon; } rmesa->RenderIndex = index; @@ -600,9 +489,6 @@ r128DDUpdateHWState( ctx ); if (!rmesa->Fallback && rmesa->NewGLState) { - if (rmesa->NewGLState & _R128_NEW_VERTEX_STATE) - r128ChooseVertexState( ctx ); - if (rmesa->NewGLState & _R128_NEW_RENDER_STATE) r128ChooseRenderState( ctx ); @@ -657,13 +543,120 @@ r128RasterPrimitive( ctx, hw ); } +#define EMIT_ATTR( ATTR, STYLE, VF, SIZE ) \ +do { \ + rmesa->vertex_attrs[rmesa->vertex_attr_count].attrib = (ATTR); \ + rmesa->vertex_attrs[rmesa->vertex_attr_count].format = (STYLE); \ + rmesa->vertex_attr_count++; \ + vc_frmt |= (VF); \ + offset += (SIZE); \ +} while (0) + +#define EMIT_PAD( SIZE ) \ +do { \ + rmesa->vertex_attrs[rmesa->vertex_attr_count].attrib = 0; \ + rmesa->vertex_attrs[rmesa->vertex_attr_count].format = EMIT_PAD; \ + rmesa->vertex_attrs[rmesa->vertex_attr_count].offset = (SIZE); \ + rmesa->vertex_attr_count++; \ + offset += (SIZE); \ +} while (0) static void r128RenderStart( GLcontext *ctx ) { - /* Check for projective texturing. Make sure all texcoord - * pointers point to something. (fix in mesa?) + r128ContextPtr rmesa = R128_CONTEXT(ctx); + TNLcontext *tnl = TNL_CONTEXT(ctx); + struct vertex_buffer *VB = &tnl->vb; + GLuint index = tnl->render_inputs; + GLuint vc_frmt = 0; + GLboolean fallback_projtex = GL_FALSE; + GLuint offset = 0; + + /* Important: */ + VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr; + rmesa->vertex_attr_count = 0; + rmesa->specoffset = 0; + + /* EMIT_ATTR's must be in order as they tell t_vertex.c how to + * build up a hardware vertex. */ - r128CheckTexSizes( ctx ); + if ( index & _TNL_BITS_TEX_ANY ) + EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, R128_CCE_VC_FRMT_RHW, 16 ); + else + EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_3F_VIEWPORT, 0, 12 ); + + rmesa->coloroffset = offset; +#if MESA_LITTLE_ENDIAN + EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA, + R128_CCE_VC_FRMT_DIFFUSE_ARGB, 4 ); +#else + EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_ARGB, + R128_CCE_VC_FRMT_DIFFUSE_ARGB, 4 ); +#endif + + if ( index & (_TNL_BIT_COLOR1|_TNL_BIT_FOG) ) { +#if MESA_LITTLE_ENDIAN + if ( index & _TNL_BIT_COLOR1) { + rmesa->specoffset = offset; + EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB, + R128_CCE_VC_FRMT_SPEC_FRGB, 3 ); + } else + EMIT_PAD( 3 ); + + if (index & _TNL_BIT_FOG) + EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, R128_CCE_VC_FRMT_SPEC_FRGB, + 1 ); + else + EMIT_PAD( 1 ); +#else + if (index & _TNL_BIT_FOG) + EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, R128_CCE_VC_FRMT_SPEC_FRGB, + 1 ); + else + EMIT_PAD( 1 ); + + if ( index & _TNL_BIT_COLOR1) { + rmesa->specoffset = offset; + EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB, + R128_CCE_VC_FRMT_SPEC_FRGB, 3 ); + } else + EMIT_PAD( 3 ); +#endif + } + + if ( index & _TNL_BIT_TEX(0) ) { + if ( VB->TexCoordPtr[0]->size > 2 ) + fallback_projtex = GL_TRUE; + EMIT_ATTR( _TNL_ATTRIB_TEX0, EMIT_2F, R128_CCE_VC_FRMT_S_T, 8 ); + if ( index & _TNL_BIT_TEX(1) ) { + if ( VB->TexCoordPtr[1]->size > 2 ) + fallback_projtex = GL_TRUE; + EMIT_ATTR( _TNL_ATTRIB_TEX1, EMIT_2F, R128_CCE_VC_FRMT_S2_T2, 8 ); + } + } else if ( index & _TNL_BIT_TEX(1) ) { + if ( VB->TexCoordPtr[1]->size > 2 ) + fallback_projtex = GL_TRUE; + EMIT_ATTR( _TNL_ATTRIB_TEX1, EMIT_2F, R128_CCE_VC_FRMT_S_T, 8 ); + } + + /* projective textures are not supported by the hardware */ + FALLBACK( rmesa, R128_FALLBACK_TEXTURE, fallback_projtex ); + + /* Only need to change the vertex emit code if there has been a + * statechange to a TNL index. + */ + if ( index != rmesa->tnl_state ) { + FLUSH_BATCH( rmesa ); + rmesa->dirty |= R128_UPLOAD_CONTEXT; + + rmesa->vertex_size = + _tnl_install_attrs( ctx, + rmesa->vertex_attrs, + rmesa->vertex_attr_count, + rmesa->hw_viewport, 0 ); + rmesa->vertex_size >>= 2; + + rmesa->vertex_format = vc_frmt; + } } static void r128RenderFinish( GLcontext *ctx ) @@ -698,9 +691,19 @@ tnl->Driver.Render.Start = r128RenderStart; tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive; tnl->Driver.Render.Finish = r128RenderFinish; - tnl->Driver.Render.BuildVertices = r128BuildVertices; - rmesa->NewGLState |= (_R128_NEW_RENDER_STATE| - _R128_NEW_VERTEX_STATE); + + tnl->Driver.Render.BuildVertices = _tnl_build_vertices; + tnl->Driver.Render.CopyPV = _tnl_copy_pv; + tnl->Driver.Render.Interp = _tnl_interp; + + _tnl_invalidate_vertex_state( ctx, ~0 ); + _tnl_invalidate_vertices( ctx, ~0 ); + _tnl_install_attrs( ctx, + rmesa->vertex_attrs, + rmesa->vertex_attr_count, + rmesa->hw_viewport, 0 ); + + rmesa->NewGLState |= _R128_NEW_RENDER_STATE; } } } @@ -726,9 +729,16 @@ tnl->Driver.Render.Finish = r128RenderFinish; tnl->Driver.Render.PrimitiveNotify = r128RenderPrimitive; tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple; - tnl->Driver.Render.BuildVertices = r128BuildVertices; - rmesa->NewGLState |= (_R128_NEW_RENDER_STATE| - _R128_NEW_VERTEX_STATE); + tnl->Driver.Render.BuildVertices = _tnl_build_vertices; + tnl->Driver.Render.CopyPV = _tnl_copy_pv; + tnl->Driver.Render.Interp = _tnl_interp; + + _tnl_init_vertices( ctx, ctx->Const.MaxArrayLockSize + 12, + (6 + 2 * ctx->Const.MaxTextureUnits) * sizeof(GLfloat) ); + rmesa->verts = (char *)tnl->clipspace.vertex_buf; + rmesa->tnl_state = -1; + + rmesa->NewGLState |= _R128_NEW_RENDER_STATE; /* r128Fallback( ctx, 0x100000, 1 ); */ } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h --- xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h 2004-06-16 11:18:13.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r128/r128_vb.h 2004-12-15 02:50:58.000000000 +0100 @@ -1,74 +0,0 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_vb.h,v 1.8 2002/10/30 12:51:46 alanh Exp $ */ -/************************************************************************** - -Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and - VA Linux Systems Inc., Fremont, California. - -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -on the rights to use, copy, modify, merge, publish, distribute, sub -license, and/or sell copies of the Software, and to permit persons to whom -the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -ATI, VA LINUX SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -**************************************************************************/ - -/* - * Authors: - * Keith Whitwell - * - */ - -#ifndef R128VB_INC -#define R128VB_INC - -#include "mtypes.h" -#include "swrast/swrast.h" -#include "r128_context.h" - -#define _R128_NEW_VERTEX_STATE (_DD_NEW_SEPARATE_SPECULAR | \ - _DD_NEW_TRI_LIGHT_TWOSIDE | \ - _DD_NEW_TRI_UNFILLED | \ - _NEW_TEXTURE | \ - _NEW_FOG) - -extern void r128CheckTexSizes( GLcontext *ctx ); -extern void r128ChooseVertexState( GLcontext *ctx ); - -extern void r128BuildVertices( GLcontext *ctx, GLuint start, GLuint count, - GLuint newinputs ); - -extern void r128PrintSetupFlags(char *msg, GLuint flags ); - -extern void r128InitVB( GLcontext *ctx ); -extern void r128FreeVB( GLcontext *ctx ); - -extern void r128_emit_contiguous_verts( GLcontext *ctx, - GLuint start, - GLuint count ); - -extern void r128_emit_indexed_verts( GLcontext *ctx, - GLuint start, - GLuint count ); - -extern void r128_translate_vertex( GLcontext *ctx, - const r128Vertex *src, - SWvertex *dst ); - -extern void r128_print_vertex( GLcontext *ctx, const r128Vertex *v ); - -#endif diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c 2004-08-17 22:17:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_cmdbuf.c 2004-12-15 02:50:58.000000000 +0100 @@ -58,113 +58,139 @@ } -static void r200_emit_state_list( r200ContextPtr rmesa, - struct r200_state_atom *list ) +/* The state atoms will be emitted in the order they appear in the atom list, + * so this step is important. + */ +void r200SetUpAtomList( r200ContextPtr rmesa ) { - struct r200_state_atom *state, *tmp; - char *dest; - int i, size, mtu; + int i, mtu; - size = 0; - foreach_s( state, tmp, list ) { - if (state->check( rmesa->glCtx, state->idx )) { -/* dest = r200AllocCmdBuf( rmesa, state->cmd_size * 4, __FUNCTION__); - memcpy( dest, state->cmd, state->cmd_size * 4);*/ - size += state->cmd_size; - state->dirty = GL_TRUE; - move_to_head( &(rmesa->hw.clean), state ); - if (R200_DEBUG & DEBUG_STATE) - print_state_atom( state ); - } - else if (R200_DEBUG & DEBUG_STATE) - fprintf(stderr, "skip state %s\n", state->name); - } + mtu = rmesa->glCtx->Const.MaxTextureUnits; - if (!size) - return; + make_empty_list(&rmesa->hw.atomlist); + rmesa->hw.atomlist.name = "atom-list"; - dest = r200AllocCmdBuf( rmesa, size * 4, __FUNCTION__); - mtu = rmesa->glCtx->Const.MaxTextureUnits; + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.ctx ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.set ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.lin ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.msk ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vpt ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vtx ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vap ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.vte ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.msc ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.cst ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.zbs ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tcl ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.msl ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tcg ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.grd ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.fog ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tam ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tf ); + for (i = 0; i < mtu; ++i) + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.tex[i] ); + for (i = 0; i < mtu; ++i) + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.cube[i] ); + for (i = 0; i < 6; ++i) + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.pix[i] ); -#define EMIT_ATOM(ATOM) \ -do { \ - if (rmesa->hw.ATOM.dirty) { \ - rmesa->hw.ATOM.dirty = GL_FALSE; \ - memcpy( dest, rmesa->hw.ATOM.cmd, rmesa->hw.ATOM.cmd_size * 4); \ - dest += rmesa->hw.ATOM.cmd_size * 4; \ - } \ -} while (0) - - EMIT_ATOM (ctx); - EMIT_ATOM (set); - EMIT_ATOM (lin); - EMIT_ATOM (msk); - EMIT_ATOM (vpt); - EMIT_ATOM (vtx); - EMIT_ATOM (vap); - EMIT_ATOM (vte); - EMIT_ATOM (msc); - EMIT_ATOM (cst); - EMIT_ATOM (zbs); - EMIT_ATOM (tcl); - EMIT_ATOM (msl); - EMIT_ATOM (tcg); - EMIT_ATOM (grd); - EMIT_ATOM (fog); - EMIT_ATOM (tam); - EMIT_ATOM (tf); - for (i = 0; i < mtu; ++i) { - EMIT_ATOM (tex[i]); - } - for (i = 0; i < mtu; ++i) { - EMIT_ATOM (cube[i]); - } - for (i = 0; i < 3 + mtu; ++i) - EMIT_ATOM (mat[i]); - EMIT_ATOM (eye); - EMIT_ATOM (glt); - for (i = 0; i < 2; ++i) { - EMIT_ATOM (mtl[i]); - } for (i = 0; i < 8; ++i) - EMIT_ATOM (lit[i]); - for (i = 0; i < 6; ++i) - EMIT_ATOM (ucp[i]); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.lit[i] ); + for (i = 0; i < 3 + mtu; ++i) + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.mat[i] ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.eye ); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.glt ); + for (i = 0; i < 2; ++i) + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.mtl[i] ); for (i = 0; i < 6; ++i) - EMIT_ATOM (pix[i]); + insert_at_tail( &rmesa->hw.atomlist, &rmesa->hw.ucp[i] ); +} -#undef EMIT_ATOM +static void r200SaveHwState( r200ContextPtr rmesa ) +{ + struct r200_state_atom *atom; + char * dest = rmesa->backup_store.cmd_buf; -} + if (R200_DEBUG & DEBUG_STATE) + fprintf(stderr, "%s\n", __FUNCTION__); + rmesa->backup_store.cmd_used = 0; + + foreach( atom, &rmesa->hw.atomlist ) { + if ( atom->check( rmesa->glCtx, atom->idx ) ) { + int size = atom->cmd_size * 4; + memcpy( dest, atom->cmd, size); + dest += size; + rmesa->backup_store.cmd_used += size; + if (R200_DEBUG & DEBUG_STATE) + print_state_atom( atom ); + } + } + + assert( rmesa->backup_store.cmd_used <= R200_CMD_BUF_SZ ); + if (R200_DEBUG & DEBUG_STATE) + fprintf(stderr, "Returning to r200EmitState\n"); +} void r200EmitState( r200ContextPtr rmesa ) { - struct r200_state_atom *state, *tmp; + char *dest; + int mtu; + struct r200_state_atom *atom; if (R200_DEBUG & (DEBUG_STATE|DEBUG_PRIMS)) fprintf(stderr, "%s\n", __FUNCTION__); - /* Somewhat overkill: - */ - if ( rmesa->lost_context) { - if (R200_DEBUG & (DEBUG_STATE|DEBUG_PRIMS|DEBUG_IOCTL)) - fprintf(stderr, "%s - lost context\n", __FUNCTION__); + if (rmesa->save_on_next_emit) { + r200SaveHwState(rmesa); + rmesa->save_on_next_emit = GL_FALSE; + } + + if (!rmesa->hw.is_dirty && !rmesa->hw.all_dirty) + return; - foreach_s( state, tmp, &(rmesa->hw.clean) ) - move_to_tail(&(rmesa->hw.dirty), state ); + mtu = rmesa->glCtx->Const.MaxTextureUnits; - rmesa->lost_context = 0; + /* To avoid going across the entire set of states multiple times, just check + * for enough space for the case of emitting all state, and inline the + * r200AllocCmdBuf code here without all the checks. + */ + r200EnsureCmdBufSpace( rmesa, rmesa->hw.max_state_size ); + + /* we need to calculate dest after EnsureCmdBufSpace + as we may flush the buffer - airlied */ + dest = rmesa->store.cmd_buf + rmesa->store.cmd_used; + if (R200_DEBUG & DEBUG_STATE) { + foreach( atom, &rmesa->hw.atomlist ) { + if ( atom->dirty || rmesa->hw.all_dirty ) { + if ( atom->check( rmesa->glCtx, atom->idx ) ) + print_state_atom( atom ); + else + fprintf(stderr, "skip state %s\n", atom->name); + } + } } -/* else { - move_to_tail( &rmesa->hw.dirty, &rmesa->hw.mtl[0] );*/ - /* odd bug? -- isosurf, cycle between reflect & lit */ -/* }*/ - r200_emit_state_list( rmesa, &rmesa->hw.dirty ); -} + foreach( atom, &rmesa->hw.atomlist ) { + if ( rmesa->hw.all_dirty ) + atom->dirty = GL_TRUE; + if ( atom->dirty ) { + if ( atom->check( rmesa->glCtx, atom->idx ) ) { + int size = atom->cmd_size * 4; + memcpy( dest, atom->cmd, size); + dest += size; + rmesa->store.cmd_used += size; + atom->dirty = GL_FALSE; + } + } + } + assert( rmesa->store.cmd_used <= R200_CMD_BUF_SZ ); + rmesa->hw.is_dirty = GL_FALSE; + rmesa->hw.all_dirty = GL_FALSE; +} /* Fire a section of the retained (indexed_verts) buffer as a regular * primtive. diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c 2004-07-22 08:51:45.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.c 2004-12-15 02:50:58.000000000 +0100 @@ -62,7 +62,7 @@ #include "r200_vtxfmt.h" #include "r200_maos.h" -#define DRIVER_DATE "20030328" +#define DRIVER_DATE "20040929" #include "vblank.h" #include "utils.h" @@ -143,7 +143,6 @@ "GL_ATI_texture_env_combine3", "GL_ATI_texture_mirror_once", "GL_MESA_pack_invert", - "GL_MESA_ycbcr_texture", "GL_NV_blend_square", "GL_SGIS_generate_mipmap", NULL @@ -166,6 +165,7 @@ &_tnl_fog_coordinate_stage, &_tnl_texgen_stage, &_tnl_texture_transform_stage, + &_tnl_vertex_program_stage, /* Try again to go to tcl? * - no good for asymmetric-twoside (do with multipass) @@ -322,7 +322,7 @@ DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16; rmesa->swtcl.RenderIndex = ~0; - rmesa->lost_context = 1; + rmesa->hw.all_dirty = 1; /* Set the maximum texture size small enough that we can guarentee that * all texture units can bind a maximal texture and have them both in @@ -400,12 +400,21 @@ _math_matrix_set_identity( &rmesa->tmpmat ); driInitExtensions( ctx, card_extensions, GL_TRUE ); + if (rmesa->r200Screen->chipset & R200_CHIPSET_REAL_R200) { + /* yuv textures only work with r200 chips for unknown reasons, the + others get the bit ordering right but don't actually do YUV-RGB conversion */ + _mesa_enable_extension( ctx, "GL_MESA_ycbcr_texture" ); + } if (rmesa->r200Screen->drmSupportsCubeMaps) _mesa_enable_extension( ctx, "GL_ARB_texture_cube_map" ); if (rmesa->r200Screen->drmSupportsBlendColor) { _mesa_enable_extension( ctx, "GL_EXT_blend_equation_separate" ); _mesa_enable_extension( ctx, "GL_EXT_blend_func_separate" ); } + if(driQueryOptionb(&rmesa->optionCache, "arb_vertex_program")) + _mesa_enable_extension( ctx, "GL_ARB_vertex_program"); + if(driQueryOptionb(&rmesa->optionCache, "nv_vertex_program")) + _mesa_enable_extension( ctx, "GL_NV_vertex_program"); #if 0 r200InitDriverFuncs( ctx ); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h 2004-08-17 22:17:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_context.h 2004-12-15 02:50:58.000000000 +0100 @@ -491,10 +491,8 @@ struct r200_hw_state { - /* All state should be on one of these lists: - */ - struct r200_state_atom dirty; /* dirty list head placeholder */ - struct r200_state_atom clean; /* clean list head placeholder */ + /* Head of the linked list of state atoms. */ + struct r200_state_atom atomlist; /* Hardware state, stored as cmdbuf commands: * -- Need to doublebuffer for @@ -530,6 +528,7 @@ struct r200_state_atom glt; int max_state_size; /* Number of bytes necessary for a full state emit. */ + GLboolean is_dirty, all_dirty; }; struct r200_state { @@ -825,8 +824,6 @@ }; - - struct r200_context { GLcontext *glCtx; /* Mesa context */ @@ -854,6 +851,10 @@ struct r200_ioctl ioctl; struct r200_dma dma; struct r200_store store; + /* A full state emit as of the first state emit in the main store, in case + * the context is lost. + */ + struct r200_store backup_store; /* Page flipping */ @@ -876,6 +877,7 @@ drm_clip_rect_t *pClipRects; unsigned int lastStamp; GLboolean lost_context; + GLboolean save_on_next_emit; r200ScreenPtr r200Screen; /* Screen private DRI data */ drm_radeon_sarea_t *sarea; /* Private SAREA data */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c 2004-08-17 22:17:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.c 2004-12-15 02:50:58.000000000 +0100 @@ -59,11 +59,41 @@ static void r200WaitForIdle( r200ContextPtr rmesa ); +/* At this point we were in FlushCmdBufLocked but we had lost our context, so + * we need to unwire our current cmdbuf, hook the one with the saved state in + * it, flush it, and then put the current one back. This is so commands at the + * start of a cmdbuf can rely on the state being kept from the previous one. + */ +static void r200BackUpAndEmitLostStateLocked( r200ContextPtr rmesa ) +{ + GLuint nr_released_bufs; + struct r200_store saved_store; + + if (rmesa->backup_store.cmd_used == 0) + return; + + if (R200_DEBUG & DEBUG_STATE) + fprintf(stderr, "Emitting backup state on lost context\n"); + + rmesa->lost_context = GL_FALSE; + + nr_released_bufs = rmesa->dma.nr_released_bufs; + saved_store = rmesa->store; + rmesa->dma.nr_released_bufs = 0; + rmesa->store = rmesa->backup_store; + r200FlushCmdBufLocked( rmesa, __FUNCTION__ ); + rmesa->dma.nr_released_bufs = nr_released_bufs; + rmesa->store = saved_store; +} + int r200FlushCmdBufLocked( r200ContextPtr rmesa, const char * caller ) { int ret, i; drm_radeon_cmd_buffer_t cmd; + if (rmesa->lost_context) + r200BackUpAndEmitLostStateLocked( rmesa ); + if (R200_DEBUG & DEBUG_IOCTL) { fprintf(stderr, "%s from %s\n", __FUNCTION__, caller); @@ -132,18 +162,7 @@ rmesa->store.statenr = 0; rmesa->store.cmd_used = 0; rmesa->dma.nr_released_bufs = 0; - /* Set lost_context so that the first state emit on the new buffer is a full - * one. This is because the context might get lost while preparing the next - * buffer, and when we lock and find out, we don't have the information to - * recreate the state. This function should always be called before the new - * buffer is begun, so it's sufficient to just set lost_context here. - * - * The alternative to this would be to copy out the state on unlock - * (approximately) and if we did lose the context, dispatch a cmdbuf to reset - * the state to that old copy before continuing with the accumulated command - * buffer. - */ - rmesa->lost_context = 1; + rmesa->save_on_next_emit = 1; return ret; } @@ -464,7 +483,7 @@ } UNLOCK_HARDWARE( rmesa ); - rmesa->lost_context = 1; + rmesa->hw.all_dirty = GL_TRUE; rmesa->swap_count++; (*rmesa->get_ust)( & ust ); @@ -576,7 +595,7 @@ return; } - R200_FIREVERTICES( rmesa ); + r200Flush( ctx ); if ( mask & DD_FRONT_LEFT_BIT ) { flags |= RADEON_FRONT; @@ -613,13 +632,6 @@ cx += dPriv->x; cy = dPriv->y + dPriv->h - cy - ch; - /* We have to emit state along with the clear, since the kernel relies on - * some of it. The EmitState that was above R200_FIREVERTICES was an - * attempt to do that, except that another context may come in and cause us - * to lose our context while we're unlocked. - */ - r200EmitState( rmesa ); - LOCK_HARDWARE( rmesa ); /* Throttle the number of clear ioctls we do. @@ -722,7 +734,7 @@ } UNLOCK_HARDWARE( rmesa ); - rmesa->lost_context = 1; + rmesa->hw.all_dirty = GL_TRUE; } @@ -763,8 +775,7 @@ if (rmesa->dma.flush) rmesa->dma.flush( rmesa ); - if (!is_empty_list(&rmesa->hw.dirty)) - r200EmitState( rmesa ); + r200EmitState( rmesa ); if (rmesa->store.cmd_used) r200FlushCmdBuf( rmesa, __FUNCTION__ ); @@ -847,7 +858,7 @@ { GET_CURRENT_CONTEXT(ctx); r200ContextPtr rmesa; - int region_offset; + ptrdiff_t region_offset; drm_radeon_mem_free_t memfree; int ret; @@ -908,7 +919,7 @@ GLboolean r200IsGartMemory( r200ContextPtr rmesa, const GLvoid *pointer, GLint size ) { - int offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map; + ptrdiff_t offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map; int valid = (size >= 0 && offset >= 0 && offset + size < rmesa->r200Screen->gartTextures.size); @@ -922,7 +933,7 @@ GLuint r200GartOffsetFromVirtual( r200ContextPtr rmesa, const GLvoid *pointer ) { - int offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map; + ptrdiff_t offset = (char *)pointer - (char *)rmesa->r200Screen->gartTextures.map; if (offset < 0 || offset > rmesa->r200Screen->gartTextures.size) return ~0; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h 2004-08-17 22:17:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_ioctl.h 2004-12-15 02:50:58.000000000 +0100 @@ -117,6 +117,8 @@ extern GLuint r200GartOffsetFromVirtual( r200ContextPtr rmesa, const GLvoid *pointer ); +void r200SetUpAtomList( r200ContextPtr rmesa ); + /* ================================================================ * Helper macros: */ @@ -135,7 +137,8 @@ #define R200_STATECHANGE( rmesa, ATOM ) \ do { \ R200_NEWPRIM( rmesa ); \ - move_to_head( &(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \ + rmesa->hw.ATOM.dirty = GL_TRUE; \ + rmesa->hw.is_dirty = GL_TRUE; \ } while (0) #define R200_DB_STATE( ATOM ) \ @@ -149,7 +152,8 @@ if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) { int *tmp; R200_NEWPRIM( rmesa ); - move_to_head( &(rmesa->hw.dirty), atom ); + atom->dirty = GL_TRUE; + rmesa->hw.is_dirty = GL_TRUE; tmp = atom->cmd; atom->cmd = atom->lastcmd; atom->lastcmd = tmp; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c 2004-06-16 11:18:15.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_lock.c 2004-12-15 02:50:58.000000000 +0100 @@ -116,4 +116,6 @@ for ( i = 0 ; i < rmesa->nr_heaps ; i++ ) { DRI_AGE_TEXTURES( rmesa->texture_heaps[ i ] ); } + + rmesa->lost_context = GL_TRUE; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c 2004-07-22 08:51:46.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_screen.c 2004-12-15 02:50:58.000000000 +0100 @@ -75,8 +75,12 @@ DRI_CONF_SECTION_DEBUG DRI_CONF_NO_RAST(false) DRI_CONF_SECTION_END + DRI_CONF_SECTION_SOFTWARE + DRI_CONF_ARB_VERTEX_PROGRAM(true) + DRI_CONF_NV_VERTEX_PROGRAM(false) + DRI_CONF_SECTION_END DRI_CONF_END; -static const GLuint __driNConfigOptions = 11; +static const GLuint __driNConfigOptions = 13; #if 1 /* Including xf86PciInfo.h introduces a bunch of errors... @@ -87,7 +91,8 @@ #define PCI_CHIP_R200_QG 0x5147 #define PCI_CHIP_R200_QY 0x5159 #define PCI_CHIP_R200_QZ 0x515A -#define PCI_CHIP_R200_LW 0x4C57 +#define PCI_CHIP_R200_LW 0x4C57 +#define PCI_CHIP_R200_LX 0x4C58 #define PCI_CHIP_R200_LY 0x4C59 #define PCI_CHIP_R200_LZ 0x4C5A #define PCI_CHIP_RV200_QW 0x5157 /* Radeon 7500 - not an R200 at all */ @@ -112,8 +117,14 @@ #define PCI_CHIP_R200_QM 0x514D #define PCI_CHIP_R200_QN 0x514E #define PCI_CHIP_R200_QO 0x514F /* r200 (non-derived) end */ -/* are the R200 Qh (0x5168) and following needed too? They are not in xf86PciInfo.h - but in the pci database. Maybe just secondary ports or something ? */ +/* are the R200 Qh (0x5168) and following needed too? They are not in + xf86PciInfo.h but in the pci database. Maybe just secondary ports or + something ? Ah well, better be safe than sorry */ +#define PCI_CHIP_R200_Qh 0x5168 +#define PCI_CHIP_R200_Qi 0x5169 +#define PCI_CHIP_R200_Qj 0x516A +#define PCI_CHIP_R200_Qk 0x516B +#define PCI_CHIP_R200_Ql 0x516C #endif @@ -237,6 +248,7 @@ case PCI_CHIP_RV200_QW: case PCI_CHIP_RV200_QX: case PCI_CHIP_R200_LW: + case PCI_CHIP_R200_LX: case PCI_CHIP_R200_LY: case PCI_CHIP_R200_LZ: case PCI_CHIP_RS100_4136: @@ -265,6 +277,11 @@ case PCI_CHIP_R200_QM: case PCI_CHIP_R200_QN: case PCI_CHIP_R200_QO: + case PCI_CHIP_R200_Qh: + case PCI_CHIP_R200_Qi: + case PCI_CHIP_R200_Qj: + case PCI_CHIP_R200_Qk: + case PCI_CHIP_R200_Ql: screen->chipset |= R200_CHIPSET_REAL_R200; /* fallthrough */ default: diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c 2004-06-16 11:18:17.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_span.c 2004-12-15 02:50:58.000000000 +0100 @@ -195,7 +195,7 @@ GLint x, GLint y ) { GLuint pitch = rmesa->r200Screen->frontPitch; - GLuint b = ((y & 0x3FF) >> 4) * ((pitch & 0xFFF) >> 5) + ((x & 0x3FF) >> 5); + GLuint b = ((y & 0x7FF) >> 4) * ((pitch & 0xFFF) >> 5) + ((x & 0x7FF) >> 5); GLuint a = (BIT(x,0) << 2) | (BIT(y,0) << 3) | @@ -214,7 +214,7 @@ static GLuint r200_mba_z16( r200ContextPtr rmesa, GLint x, GLint y ) { GLuint pitch = rmesa->r200Screen->frontPitch; - GLuint b = ((y & 0x3FF) >> 4) * ((pitch & 0xFFF) >> 6) + ((x & 0x3FF) >> 6); + GLuint b = ((y & 0x7FF) >> 4) * ((pitch & 0xFFF) >> 6) + ((x & 0x7FF) >> 6); GLuint a = (BIT(x,0) << 1) | (BIT(y,0) << 2) | diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c 2004-06-16 11:18:17.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state.c 2004-12-15 02:50:58.000000000 +0100 @@ -2043,6 +2043,10 @@ r200UpdateSpecular ( ctx ); break; + case GL_VERTEX_PROGRAM_ARB: + TCL_FALLBACK(rmesa->glCtx, R200_TCL_FALLBACK_TCL_DISABLE, state); + break; + default: return; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c 2004-08-17 22:17:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c 2004-12-15 02:50:58.000000000 +0100 @@ -65,8 +65,9 @@ fprintf(stderr, msg); fprintf(stderr, ": "); - foreach(l, &(rmesa->hw.dirty)) { - fprintf(stderr, "%s, ", l->name); + foreach(l, &rmesa->hw.atomlist) { + if (l->dirty || rmesa->hw.all_dirty) + fprintf(stderr, "%s, ", l->name); } fprintf(stderr, "\n"); @@ -200,11 +201,6 @@ rmesa->state.pixel.readOffset = rmesa->state.color.drawOffset; rmesa->state.pixel.readPitch = rmesa->state.color.drawPitch; - /* Initialize lists: - */ - make_empty_list(&(rmesa->hw.dirty)); rmesa->hw.dirty.name = "DIRTY"; - make_empty_list(&(rmesa->hw.clean)); rmesa->hw.clean.name = "CLEAN"; - rmesa->hw.max_state_size = 0; #define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX ) \ @@ -214,8 +210,8 @@ rmesa->hw.ATOM.lastcmd = (int *)CALLOC(SZ * sizeof(int)); \ rmesa->hw.ATOM.name = NM; \ rmesa->hw.ATOM.idx = IDX; \ - rmesa->hw.ATOM.check = check_##CHK; \ - insert_at_head(&(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \ + rmesa->hw.ATOM.check = check_##CHK; \ + rmesa->hw.ATOM.dirty = GL_FALSE; \ rmesa->hw.max_state_size += SZ * sizeof(int); \ } while (0) @@ -308,6 +304,7 @@ ALLOC_STATE( pix[4], tex, PIX_STATE_SIZE, "PIX/pixstage-4", 4 ); ALLOC_STATE( pix[5], tex, PIX_STATE_SIZE, "PIX/pixstage-5", 5 ); + r200SetUpAtomList( rmesa ); /* Fill in the packet headers: */ @@ -772,5 +769,5 @@ r200LightingSpaceChange( ctx ); - rmesa->lost_context = 1; + rmesa->hw.all_dirty = GL_TRUE; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c 2004-08-17 22:17:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c 2004-12-15 02:50:58.000000000 +0100 @@ -117,12 +117,17 @@ } rmesa->swtcl.coloroffset = offset; +#if MESA_LITTLE_ENDIAN EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_RGBA, (R200_VTX_PK_RGBA << R200_VTX_COLOR_0_SHIFT) ); +#else + EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_ABGR, (R200_VTX_PK_RGBA << R200_VTX_COLOR_0_SHIFT) ); +#endif offset += 1; rmesa->swtcl.specoffset = 0; if (index & (_TNL_BIT_COLOR1|_TNL_BIT_FOG)) { +#if MESA_LITTLE_ENDIAN if (index & _TNL_BIT_COLOR1) { rmesa->swtcl.specoffset = offset; EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) ); @@ -137,6 +142,22 @@ else { EMIT_PAD( 1 ); } +#else + if (index & _TNL_BIT_FOG) { + EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) ); + } + else { + EMIT_PAD( 1 ); + } + + if (index & _TNL_BIT_COLOR1) { + rmesa->swtcl.specoffset = offset; + EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) ); + } + else { + EMIT_PAD( 3 ); + } +#endif } if (index & _TNL_BITS_TEX_ANY) { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c 2004-08-17 22:17:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.c 2005-01-13 02:10:28.000000000 +0100 @@ -140,32 +140,48 @@ static GLushort *r200AllocElts( r200ContextPtr rmesa, GLuint nr ) { - if (rmesa->dma.flush) - rmesa->dma.flush( rmesa ); + if (rmesa->dma.flush == r200FlushElts && + rmesa->store.cmd_used + nr*2 < R200_CMD_BUF_SZ) { - r200EnsureCmdBufSpace( rmesa, AOS_BUFSZ(rmesa->tcl.nr_aos_components) + - rmesa->hw.max_state_size + ELTS_BUFSZ(nr) ); - - r200EmitAOS( rmesa, - rmesa->tcl.aos_components, - rmesa->tcl.nr_aos_components, 0 ); + GLushort *dest = (GLushort *)(rmesa->store.cmd_buf + + rmesa->store.cmd_used); - return r200AllocEltsOpenEnded( rmesa, rmesa->tcl.hw_primitive, nr ); + rmesa->store.cmd_used += nr*2; + + return dest; + } + else { + if (rmesa->dma.flush) + rmesa->dma.flush( rmesa ); + + r200EnsureCmdBufSpace( rmesa, AOS_BUFSZ(rmesa->tcl.nr_aos_components) + + rmesa->hw.max_state_size + ELTS_BUFSZ(nr) ); + + r200EmitAOS( rmesa, + rmesa->tcl.aos_components, + rmesa->tcl.nr_aos_components, 0 ); + + return r200AllocEltsOpenEnded( rmesa, rmesa->tcl.hw_primitive, nr ); + } } -#define CLOSE_ELTS() R200_NEWPRIM( rmesa ) +#define CLOSE_ELTS() \ +do { \ + if (0) R200_NEWPRIM( rmesa ); \ +} \ +while (0) /* TODO: Try to extend existing primitive if both are identical, * discrete and there are no intervening state changes. (Somewhat * duplicates changes to DrawArrays code) */ -static void EMIT_PRIM( GLcontext *ctx, - GLenum prim, - GLuint hwprim, - GLuint start, - GLuint count) +static void r200EmitPrim( GLcontext *ctx, + GLenum prim, + GLuint hwprim, + GLuint start, + GLuint count) { r200ContextPtr rmesa = R200_CONTEXT( ctx ); r200TclPrimitive( ctx, prim, hwprim ); @@ -185,7 +201,9 @@ count - start ); } - +#define EMIT_PRIM(ctx, prim, hwprim, start, count) do { \ + r200EmitPrim( ctx, prim, hwprim, start, count ); \ + (void) rmesa; } while (0) /* Try & join small primitives */ @@ -205,9 +223,12 @@ #define EMIT_ELT(dest, offset, x) do { \ int off = offset + ( ( (GLuint)dest & 0x2 ) >> 1 ); \ GLushort *des = (GLushort *)( (GLuint)dest & ~0x2 ); \ - (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); } while (0) + (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); \ + (void)rmesa; } while (0) #else -#define EMIT_ELT(dest, offset, x) (dest)[offset] = (GLushort) (x) +#define EMIT_ELT(dest, offset, x) do { \ + (dest)[offset] = (GLushort) (x); \ + (void)rmesa; } while (0) #endif #define EMIT_TWO_ELTS(dest, offset, x, y) *(GLuint *)((dest)+offset) = ((y)<<16)|(x); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h 2004-06-16 11:18:18.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tcl.h 2004-12-15 02:50:58.000000000 +0100 @@ -60,6 +60,7 @@ #define R200_TCL_FALLBACK_TEXGEN_5 0x200 /* texgen, unit 5 */ #define R200_TCL_FALLBACK_TCL_DISABLE 0x400 /* user disable */ #define R200_TCL_FALLBACK_BITMAP 0x800 /* draw bitmap with points */ +#define R200_TCL_FALLBACK_VERTEX_PROGRAM 0x1000/* vertex program active */ #define TCL_FALLBACK( ctx, bit, mode ) r200TclFallback( ctx, bit, mode ) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c 2004-07-22 08:51:49.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_tex.c 2004-12-15 02:50:58.000000000 +0100 @@ -421,7 +421,9 @@ return &_mesa_texformat_ycbcr_rev; default: - _mesa_problem(ctx, "unexpected texture format in %s", __FUNCTION__); + _mesa_problem(ctx, + "unexpected internalFormat 0x%x in r200ChooseTextureFormat", + (int) internalFormat); return NULL; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c 2004-06-16 11:18:19.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texmem.c 2004-12-15 02:50:58.000000000 +0100 @@ -43,7 +43,6 @@ #include "context.h" #include "colormac.h" #include "macros.h" -#include "simple_list.h" #include "radeon_reg.h" /* gets definition for usleep */ #include "r200_context.h" #include "r200_state.h" @@ -73,10 +72,8 @@ for ( i = 0 ; i < rmesa->glCtx->Const.MaxTextureUnits ; i++ ) { if ( t == rmesa->state.texture.unit[i].texobj ) { rmesa->state.texture.unit[i].texobj = NULL; - remove_from_list( &rmesa->hw.tex[i] ); - make_empty_list( &rmesa->hw.tex[i] ); - remove_from_list( &rmesa->hw.cube[i] ); - make_empty_list( &rmesa->hw.cube[i] ); + rmesa->hw.tex[i].dirty = GL_FALSE; + rmesa->hw.cube[i].dirty = GL_FALSE; } } } @@ -385,6 +382,14 @@ /* copy (x,y,width,height,data) */ memcpy( &tmp, &t->image[face][hwlevel], sizeof(tmp) ); + /* Adjust the base offset to account for the Y-offset. This is done, + * instead of just letting the Y-offset automatically take care of it, + * because it is possible, for very large textures, for the Y-offset + * to exceede the [-8192,+8191] range. + */ + tex.offset += tmp.y * 1024; + tmp.y = 0; + LOCK_HARDWARE( rmesa ); do { ret = drmCommandWriteRead( rmesa->dri.fd, DRM_RADEON_TEXTURE, diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c 2004-07-22 08:51:49.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c 2004-12-15 02:50:58.000000000 +0100 @@ -999,7 +999,7 @@ R200_TEX_BLEND_0_ENABLE) << unit); rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_BLEND_0_ENABLE; - R200_STATECHANGE( rmesa, tcl ); + R200_STATECHANGE( rmesa, vtx ); rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] &= ~(7 << (unit * 3)); if (rmesa->TclFallback & (R200_TCL_FALLBACK_TEXGEN_0<hw.ctx.cmd[CTX_PP_CNTL] & (R200_TEX_0_ENABLE )) && ((((rmesa->hw.tex[0].cmd[TEX_PP_TXFILTER] & R200_MIN_FILTER_MASK)) & 0x04) == 0)) || @@ -1362,7 +1367,7 @@ 0x04) == 0))) { dbg |= 0x04; - } + }*/ if (dbg != rmesa->hw.tam.cmd[TAM_DEBUG3]) { R200_STATECHANGE( rmesa, tam ); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c --- xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c 2004-06-16 11:18:19.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_vtxfmt_c.c 2004-12-15 02:50:58.000000000 +0100 @@ -122,6 +122,7 @@ /* Color for ubyte (packed) color formats: */ +#if 0 static void r200_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -161,7 +162,7 @@ r200ContextPtr rmesa = R200_CONTEXT(ctx); *(GLuint *)rmesa->vb.colorptr = LE32_TO_CPU(*(GLuint *)v); } - +#endif /* 0 */ static void r200_Color3f_ub( GLfloat r, GLfloat g, GLfloat b ) { @@ -210,6 +211,7 @@ /* Color for float color+alpha formats: */ +#if 0 static void r200_Color3ub_4f( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -253,6 +255,7 @@ dest[2] = UBYTE_TO_FLOAT(v[2]); dest[3] = UBYTE_TO_FLOAT(v[3]); } +#endif /* 0 */ static void r200_Color3f_4f( GLfloat r, GLfloat g, GLfloat b ) @@ -302,6 +305,7 @@ /* Color for float color formats: */ +#if 0 static void r200_Color3ub_3f( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -343,6 +347,7 @@ dest[2] = UBYTE_TO_FLOAT(v[2]); ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3] = UBYTE_TO_FLOAT(v[3]); } +#endif /* 0 */ static void r200_Color3f_3f( GLfloat r, GLfloat g, GLfloat b ) @@ -390,6 +395,7 @@ /* Secondary Color: */ +#if 0 static void r200_SecondaryColor3ubEXT_ub( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -411,6 +417,7 @@ dest->blue = v[2]; dest->alpha = 0xff; } +#endif /* 0 */ static void r200_SecondaryColor3fEXT_ub( GLfloat r, GLfloat g, GLfloat b ) { @@ -434,6 +441,7 @@ dest->alpha = 255; } +#if 0 static void r200_SecondaryColor3ubEXT_3f( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -455,6 +463,7 @@ dest[2] = UBYTE_TO_FLOAT(v[2]); dest[3] = 1.0; } +#endif /* 0 */ static void r200_SecondaryColor3fEXT_3f( GLfloat r, GLfloat g, GLfloat b ) { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c 2004-06-16 11:18:19.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_compat.c 2004-12-15 02:50:58.000000000 +0100 @@ -202,30 +202,28 @@ static void radeonCompatEmitStateLocked( radeonContextPtr rmesa ) { - struct radeon_state_atom *state, *tmp; + struct radeon_state_atom *atom; if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS)) fprintf(stderr, "%s\n", __FUNCTION__); - if (rmesa->lost_context) { - if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS|DEBUG_IOCTL)) - fprintf(stderr, "%s - lost context\n", __FUNCTION__); + if (!rmesa->hw.is_dirty && !rmesa->hw.all_dirty) + return; - foreach_s( state, tmp, &(rmesa->hw.clean) ) - move_to_tail(&(rmesa->hw.dirty), state ); - - rmesa->lost_context = 0; - } - - foreach_s( state, tmp, &(rmesa->hw.dirty) ) { - if (!state->is_tcl) - radeonCompatEmitPacket( rmesa, state ); - move_to_head( &(rmesa->hw.clean), state ); + foreach(atom, &rmesa->hw.atomlist) { + if (rmesa->hw.all_dirty) + atom->dirty = GL_TRUE; + if (atom->is_tcl) + atom->dirty = GL_FALSE; + if (atom->dirty) + radeonCompatEmitPacket(rmesa, atom); } + + rmesa->hw.is_dirty = GL_FALSE; + rmesa->hw.all_dirty = GL_FALSE; } - static void radeonCompatEmitPrimitiveLocked( radeonContextPtr rmesa, GLuint hw_primitive, GLuint nverts, diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c 2004-07-22 08:51:51.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.c 2004-12-15 02:50:58.000000000 +0100 @@ -62,7 +62,7 @@ #include "radeon_vtxfmt.h" #include "radeon_maos.h" -#define DRIVER_DATE "20030328" +#define DRIVER_DATE "20040929" #include "vblank.h" #include "utils.h" @@ -306,7 +306,7 @@ DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16; rmesa->swtcl.RenderIndex = ~0; - rmesa->lost_context = 1; + rmesa->hw.all_dirty = GL_TRUE; /* Set the maximum texture size small enough that we can guarentee that * all texture units can bind a maximal texture and have them both in diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h 2004-08-17 22:17:59.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_context.h 2004-12-15 02:50:58.000000000 +0100 @@ -398,14 +398,11 @@ struct radeon_hw_state { - /* All state should be on one of these lists: - */ - struct radeon_state_atom dirty; /* dirty list head placeholder */ - struct radeon_state_atom clean; /* clean list head placeholder */ + /* Head of the linked list of state atoms. */ + struct radeon_state_atom atomlist; /* Hardware state, stored as cmdbuf commands: * -- Need to doublebuffer for - * - reviving state after loss of context * - eliding noop statechange loops? (except line stipple count) */ struct radeon_state_atom ctx; @@ -428,6 +425,7 @@ struct radeon_state_atom txr[2]; /* for NPOT */ int max_state_size; /* Number of bytes necessary for a full state emit. */ + GLboolean is_dirty, all_dirty; }; struct radeon_state { @@ -715,6 +713,10 @@ struct radeon_ioctl ioctl; struct radeon_dma dma; struct radeon_store store; + /* A full state emit as of the first state emit in the main store, in case + * the context is lost. + */ + struct radeon_store backup_store; /* Page flipping */ @@ -733,6 +735,7 @@ drm_clip_rect_t *pClipRects; unsigned int lastStamp; GLboolean lost_context; + GLboolean save_on_next_emit; radeonScreenPtr radeonScreen; /* Screen private DRI data */ drm_radeon_sarea_t *sarea; /* Private SAREA data */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c 2004-08-17 22:17:59.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.c 2005-01-25 01:43:29.000000000 +0100 @@ -59,10 +59,8 @@ static void radeonWaitForIdle( radeonContextPtr rmesa ); - -/* ============================================================= - * Kernel command buffer handling - */ +static int radeonFlushCmdBufLocked( radeonContextPtr rmesa, + const char * caller ); static void print_state_atom( struct radeon_state_atom *state ) { @@ -76,115 +74,160 @@ } -static void radeon_emit_state_list( radeonContextPtr rmesa, - struct radeon_state_atom *list ) +static void radeonSaveHwState( radeonContextPtr rmesa ) { - struct radeon_state_atom *state, *tmp; - char *dest; - int i, size, texunits; + struct radeon_state_atom *atom; + char * dest = rmesa->backup_store.cmd_buf; - /* It appears that some permutations of state atoms lock up the - * chip. Therefore we make sure that state atoms are emitted in a - * fixed order. First mark all dirty state atoms and then go - * through all state atoms in a well defined order and emit only - * the marked ones. - * FIXME: This requires knowledge of which state atoms exist. - * FIXME: Is the zbs hack below still needed? - */ - size = 0; - foreach_s( state, tmp, list ) { - if (state->check( rmesa->glCtx )) { - size += state->cmd_size; - state->dirty = GL_TRUE; - move_to_head( &(rmesa->hw.clean), state ); - if (RADEON_DEBUG & DEBUG_STATE) - print_state_atom( state ); - } - else if (RADEON_DEBUG & DEBUG_STATE) - fprintf(stderr, "skip state %s\n", state->name); - } - /* short cut */ - if (!size) - return; - - dest = radeonAllocCmdBuf( rmesa, size * 4, __FUNCTION__); - texunits = rmesa->glCtx->Const.MaxTextureUnits; - -#define EMIT_ATOM(ATOM) \ -do { \ - if (rmesa->hw.ATOM.dirty) { \ - rmesa->hw.ATOM.dirty = GL_FALSE; \ - memcpy( dest, rmesa->hw.ATOM.cmd, rmesa->hw.ATOM.cmd_size * 4); \ - dest += rmesa->hw.ATOM.cmd_size * 4; \ - } \ -} while (0) - - EMIT_ATOM (ctx); - EMIT_ATOM (set); - EMIT_ATOM (lin); - EMIT_ATOM (msk); - EMIT_ATOM (vpt); - EMIT_ATOM (tcl); - EMIT_ATOM (msc); - for (i = 0; i < texunits; ++i) { - EMIT_ATOM (tex[i]); - EMIT_ATOM (txr[i]); - } - EMIT_ATOM (zbs); - EMIT_ATOM (mtl); - for (i = 0; i < 3 + texunits; ++i) - EMIT_ATOM (mat[i]); - for (i = 0; i < 8; ++i) - EMIT_ATOM (lit[i]); - for (i = 0; i < 6; ++i) - EMIT_ATOM (ucp[i]); - EMIT_ATOM (eye); - EMIT_ATOM (grd); - EMIT_ATOM (fog); - EMIT_ATOM (glt); + if (RADEON_DEBUG & DEBUG_STATE) + fprintf(stderr, "%s\n", __FUNCTION__); + + rmesa->backup_store.cmd_used = 0; + + foreach( atom, &rmesa->hw.atomlist ) { + if ( atom->check( rmesa->glCtx ) ) { + int size = atom->cmd_size * 4; + memcpy( dest, atom->cmd, size); + dest += size; + rmesa->backup_store.cmd_used += size; + if (RADEON_DEBUG & DEBUG_STATE) + print_state_atom( atom ); + } + } + + assert( rmesa->backup_store.cmd_used <= RADEON_CMD_BUF_SZ ); + if (RADEON_DEBUG & DEBUG_STATE) + fprintf(stderr, "Returning to radeonEmitState\n"); +} + +/* At this point we were in FlushCmdBufLocked but we had lost our context, so + * we need to unwire our current cmdbuf, hook the one with the saved state in + * it, flush it, and then put the current one back. This is so commands at the + * start of a cmdbuf can rely on the state being kept from the previous one. + */ +static void radeonBackUpAndEmitLostStateLocked( radeonContextPtr rmesa ) +{ + GLuint nr_released_bufs; + struct radeon_store saved_store; + + if (rmesa->backup_store.cmd_used == 0) + return; + + if (RADEON_DEBUG & DEBUG_STATE) + fprintf(stderr, "Emitting backup state on lost context\n"); + + rmesa->lost_context = GL_FALSE; -#undef EMIT_ATOM + nr_released_bufs = rmesa->dma.nr_released_bufs; + saved_store = rmesa->store; + rmesa->dma.nr_released_bufs = 0; + rmesa->store = rmesa->backup_store; + radeonFlushCmdBufLocked( rmesa, __FUNCTION__ ); + rmesa->dma.nr_released_bufs = nr_released_bufs; + rmesa->store = saved_store; } +/* ============================================================= + * Kernel command buffer handling + */ + +/* The state atoms will be emitted in the order they appear in the atom list, + * so this step is important. + */ +void radeonSetUpAtomList( radeonContextPtr rmesa ) +{ + int i, mtu = rmesa->glCtx->Const.MaxTextureUnits; + + make_empty_list(&rmesa->hw.atomlist); + rmesa->hw.atomlist.name = "atom-list"; + + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.ctx); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.set); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.lin); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.msk); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.vpt); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.tcl); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.msc); + for (i = 0; i < mtu; ++i) { + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.tex[i]); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.txr[i]); + } + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.zbs); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.mtl); + for (i = 0; i < 3 + mtu; ++i) + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.mat[i]); + for (i = 0; i < 8; ++i) + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.lit[i]); + for (i = 0; i < 6; ++i) + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.ucp[i]); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.eye); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.grd); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.fog); + insert_at_tail(&rmesa->hw.atomlist, &rmesa->hw.glt); +} void radeonEmitState( radeonContextPtr rmesa ) { - struct radeon_state_atom *state, *tmp; + struct radeon_state_atom *atom; + char *dest; if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS)) fprintf(stderr, "%s\n", __FUNCTION__); - /* Somewhat overkill: + if (rmesa->save_on_next_emit) { + radeonSaveHwState(rmesa); + rmesa->save_on_next_emit = GL_FALSE; + } + + /* this code used to return here but now it emits zbs */ + + /* To avoid going across the entire set of states multiple times, just check + * for enough space for the case of emitting all state, and inline the + * radeonAllocCmdBuf code here without all the checks. */ - if (rmesa->lost_context) { - if (RADEON_DEBUG & (DEBUG_STATE|DEBUG_PRIMS|DEBUG_IOCTL)) - fprintf(stderr, "%s - lost context\n", __FUNCTION__); - - foreach_s( state, tmp, &(rmesa->hw.clean) ) - move_to_tail(&(rmesa->hw.dirty), state ); - - rmesa->lost_context = 0; - } - else if (1) { - /* This is a darstardly kludge to work around a lockup that I - * haven't otherwise figured out. - */ - move_to_tail(&(rmesa->hw.dirty), &(rmesa->hw.zbs) ); + radeonEnsureCmdBufSpace(rmesa, rmesa->hw.max_state_size); + dest = rmesa->store.cmd_buf + rmesa->store.cmd_used; + + /* We always always emit zbs, this is due to a bug found by keithw in + * the hardware and rediscovered after Erics changes by me. + * if you ever touch this code make sure you emit zbs otherwise + * you get tcl lockups on at least M7/7500 class of chips - airlied */ + rmesa->hw.zbs.dirty=1; + + if (RADEON_DEBUG & DEBUG_STATE) { + foreach(atom, &rmesa->hw.atomlist) { + if (atom->dirty || rmesa->hw.all_dirty) { + if (atom->check(rmesa->glCtx)) + print_state_atom(atom); + else + fprintf(stderr, "skip state %s\n", atom->name); + } + } } - if (!(rmesa->radeonScreen->chipset & RADEON_CHIPSET_TCL)) { - foreach_s( state, tmp, &(rmesa->hw.dirty) ) { - if (state->is_tcl) { - move_to_head( &(rmesa->hw.clean), state ); - } - } + foreach(atom, &rmesa->hw.atomlist) { + if (rmesa->hw.all_dirty) + atom->dirty = GL_TRUE; + if (!(rmesa->radeonScreen->chipset & RADEON_CHIPSET_TCL) && + atom->is_tcl) + atom->dirty = GL_FALSE; + if (atom->dirty) { + if (atom->check(rmesa->glCtx)) { + int size = atom->cmd_size * 4; + memcpy(dest, atom->cmd, size); + dest += size; + rmesa->store.cmd_used += size; + atom->dirty = GL_FALSE; + } + } } - radeon_emit_state_list( rmesa, &rmesa->hw.dirty ); + assert(rmesa->store.cmd_used <= RADEON_CMD_BUF_SZ); + + rmesa->hw.is_dirty = GL_FALSE; + rmesa->hw.all_dirty = GL_FALSE; } - - /* Fire a section of the retained (indexed_verts) buffer as a regular * primtive. */ @@ -376,7 +419,7 @@ (component[0]->aos_start + offset * component[0]->aos_stride * 4); #else drm_radeon_cmd_header_t *cmd; - int sz = AOS_BUFSZ; + int sz = AOS_BUFSZ(nr); int i; int *tmp; @@ -491,6 +534,9 @@ int ret, i; drm_radeon_cmd_buffer_t cmd; + if (rmesa->lost_context) + radeonBackUpAndEmitLostStateLocked(rmesa); + if (RADEON_DEBUG & DEBUG_IOCTL) { fprintf(stderr, "%s from %s\n", __FUNCTION__, caller); @@ -544,18 +590,7 @@ rmesa->store.statenr = 0; rmesa->store.cmd_used = 0; rmesa->dma.nr_released_bufs = 0; - /* Set lost_context so that the first state emit on the new buffer is a full - * one. This is because the context might get lost while preparing the next - * buffer, and when we lock and find out, we don't have the information to - * recreate the state. This function should always be called before the new - * buffer is begun, so it's sufficient to just set lost_context here. - * - * The alternative to this would be to copy out the state on unlock - * (approximately) and if we did lose the context, dispatch a cmdbuf to reset - * the state to that old copy before continuing with the accumulated command - * buffer. - */ - rmesa->lost_context = 1; + rmesa->save_on_next_emit = 1; return ret; } @@ -897,6 +932,7 @@ } rmesa->swap_ust = ust; + rmesa->hw.all_dirty = GL_TRUE; } void radeonPageFlip( const __DRIdrawablePrivate *dPriv ) @@ -990,7 +1026,14 @@ __FUNCTION__, all, cx, cy, cw, ch ); } - RADEON_FIREVERTICES( rmesa ); + { + LOCK_HARDWARE( rmesa ); + UNLOCK_HARDWARE( rmesa ); + if ( dPriv->numClipRects == 0 ) + return; + } + + radeonFlush( ctx ); if ( mask & DD_FRONT_LEFT_BIT ) { flags |= RADEON_FRONT; @@ -1028,13 +1071,6 @@ cx += dPriv->x; cy = dPriv->y + dPriv->h - cy - ch; - /* We have to emit state along with the clear, since the kernel relies on - * some of it. The EmitState that was above RADEON_FIREVERTICES was an - * attempt to do that, except that another context may come in and cause us - * to lose our context while we're unlocked. - */ - radeonEmitState( rmesa ); - LOCK_HARDWARE( rmesa ); /* Throttle the number of clear ioctls we do. @@ -1146,6 +1182,7 @@ } UNLOCK_HARDWARE( rmesa ); + rmesa->hw.all_dirty = GL_TRUE; } @@ -1189,8 +1226,7 @@ if (rmesa->dma.flush) rmesa->dma.flush( rmesa ); - if (!is_empty_list(&rmesa->hw.dirty)) - radeonEmitState( rmesa ); + radeonEmitState( rmesa ); if (rmesa->store.cmd_used) radeonFlushCmdBuf( rmesa, __FUNCTION__ ); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h 2004-08-17 22:17:59.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_ioctl.h 2004-12-15 02:50:58.000000000 +0100 @@ -103,6 +103,7 @@ extern void radeonWaitForVBlank( radeonContextPtr rmesa ); extern void radeonInitIoctlFuncs( GLcontext *ctx ); extern void radeonGetAllParams( radeonContextPtr rmesa ); +extern void radeonSetUpAtomList( radeonContextPtr rmesa ); /* radeon_compat.c: */ @@ -111,7 +112,6 @@ GLuint hw_primitive, GLuint nrverts ); - /* ================================================================ * Helper macros: */ @@ -130,7 +130,8 @@ #define RADEON_STATECHANGE( rmesa, ATOM ) \ do { \ RADEON_NEWPRIM( rmesa ); \ - move_to_head( &(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \ + rmesa->hw.ATOM.dirty = GL_TRUE; \ + rmesa->hw.is_dirty = GL_TRUE; \ } while (0) #define RADEON_DB_STATE( ATOM ) \ @@ -144,7 +145,8 @@ if (memcmp(atom->cmd, atom->lastcmd, atom->cmd_size*4)) { int *tmp; RADEON_NEWPRIM( rmesa ); - move_to_head( &(rmesa->hw.dirty), atom ); + atom->dirty = GL_TRUE; + rmesa->hw.is_dirty = GL_TRUE; tmp = atom->cmd; atom->cmd = atom->lastcmd; atom->lastcmd = tmp; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c 2004-06-16 11:18:20.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_lock.c 2004-12-15 02:50:58.000000000 +0100 @@ -124,4 +124,6 @@ DRI_AGE_TEXTURES( rmesa->texture_heaps[ i ] ); } } + + rmesa->lost_context = GL_TRUE; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c 2004-07-22 08:51:52.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c 2004-12-15 02:50:58.000000000 +0100 @@ -87,11 +87,14 @@ #define PCI_CHIP_RADEON_QZ 0x515A #define PCI_CHIP_RADEON_LW 0x4C57 /* mobility 7 - has tcl */ +#define PCI_CHIP_RADEON_LX 0x4C58 /* mobility FireGL 7800 m7 */ #define PCI_CHIP_RADEON_LY 0x4C59 #define PCI_CHIP_RADEON_LZ 0x4C5A #define PCI_CHIP_RV200_QW 0x5157 /* Radeon 7500 - not an R200 at all */ +#define PCI_CHIP_RV200_QX 0x5158 + /* IGP Chipsets */ #define PCI_CHIP_RS100_4136 0x4136 #define PCI_CHIP_RS200_4137 0x4137 @@ -309,7 +312,9 @@ case PCI_CHIP_RADEON_QF: case PCI_CHIP_RADEON_QG: case PCI_CHIP_RV200_QW: + case PCI_CHIP_RV200_QX: case PCI_CHIP_RADEON_LW: + case PCI_CHIP_RADEON_LX: screen->chipset |= RADEON_CHIPSET_TCL; case PCI_CHIP_RADEON_QY: case PCI_CHIP_RADEON_QZ: diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c 2004-08-17 22:17:59.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_state_init.c 2004-12-15 02:50:58.000000000 +0100 @@ -59,8 +59,9 @@ fprintf(stderr, msg); fprintf(stderr, ": "); - foreach(l, &(rmesa->hw.dirty)) { - fprintf(stderr, "%s, ", l->name); + foreach(l, &rmesa->hw.atomlist) { + if (l->dirty || rmesa->hw.all_dirty) + fprintf(stderr, "%s, ", l->name); } fprintf(stderr, "\n"); @@ -197,11 +198,6 @@ rmesa->state.pixel.readOffset = rmesa->state.color.drawOffset; rmesa->state.pixel.readPitch = rmesa->state.color.drawPitch; - /* Initialize lists: - */ - make_empty_list(&(rmesa->hw.dirty)); - make_empty_list(&(rmesa->hw.clean)); - rmesa->hw.max_state_size = 0; #define ALLOC_STATE( ATOM, CHK, SZ, NM, FLAG ) \ @@ -212,7 +208,7 @@ rmesa->hw.ATOM.name = NM; \ rmesa->hw.ATOM.is_tcl = FLAG; \ rmesa->hw.ATOM.check = check_##CHK; \ - insert_at_head(&(rmesa->hw.dirty), &(rmesa->hw.ATOM)); \ + rmesa->hw.ATOM.dirty = GL_TRUE; \ rmesa->hw.max_state_size += SZ * sizeof(int); \ } while (0) @@ -256,6 +252,7 @@ ALLOC_STATE( txr[0], txr0, TXR_STATE_SIZE, "TXR/txr-0", 0 ); ALLOC_STATE( txr[1], txr1, TXR_STATE_SIZE, "TXR/txr-1", 0 ); + radeonSetUpAtomList( rmesa ); /* Fill in the packet headers: */ @@ -552,4 +549,6 @@ rmesa->hw.eye.cmd[EYE_Y] = 0; rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE; rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE; + + rmesa->hw.all_dirty = GL_TRUE; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c 2004-06-16 11:18:22.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_subset_tex.c 2004-12-15 02:50:58.000000000 +0100 @@ -75,8 +75,7 @@ if ( rmesa ) { if ( t == rmesa->state.texture.unit[0].texobj ) { rmesa->state.texture.unit[0].texobj = NULL; - remove_from_list( &rmesa->hw.tex[0] ); - make_empty_list( &rmesa->hw.tex[0] ); + rmesa->hw.tex[0].dirty = GL_FALSE; } } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c 2004-08-17 22:17:59.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_swtcl.c 2005-01-13 02:10:28.000000000 +0100 @@ -564,9 +564,12 @@ #define EMIT_ELT(offset, x) do { \ int off = offset + ( ( (GLuint)dest & 0x2 ) >> 1 ); \ GLushort *des = (GLushort *)( (GLuint)dest & ~0x2 ); \ - (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); } while (0) + (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); \ + (void)rmesa; } while (0) #else -#define EMIT_ELT(offset, x) (dest)[offset] = (GLushort) (x) +#define EMIT_ELT(offset, x) do { \ + (dest)[offset] = (GLushort) (x); \ + (void)rmesa; } while (0) #endif #define EMIT_TWO_ELTS(offset, x, y) *(GLuint *)(dest+offset) = ((y)<<16)|(x); #define INCR_ELTS( nr ) dest += nr diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c 2004-08-17 22:17:59.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_tcl.c 2005-01-13 02:10:28.000000000 +0100 @@ -169,7 +169,7 @@ * discrete and there are no intervening state changes. (Somewhat * duplicates changes to DrawArrays code) */ -static void EMIT_PRIM( GLcontext *ctx, +static void radeonEmitPrim( GLcontext *ctx, GLenum prim, GLuint hwprim, GLuint start, @@ -194,7 +194,9 @@ count - start ); } - +#define EMIT_PRIM( ctx, prim, hwprim, start, count ) do { \ + radeonEmitPrim( ctx, prim, hwprim, start, count ); \ + (void) rmesa; } while (0) /* Try & join small primitives */ @@ -214,9 +216,12 @@ #define EMIT_ELT(dest, offset, x) do { \ int off = offset + ( ( (GLuint)dest & 0x2 ) >> 1 ); \ GLushort *des = (GLushort *)( (GLuint)dest & ~0x2 ); \ - (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); } while (0) + (des)[ off + 1 - 2 * ( off & 1 ) ] = (GLushort)(x); \ + (void)rmesa; } while (0) #else -#define EMIT_ELT(dest, offset, x) (dest)[offset] = (GLushort) (x) +#define EMIT_ELT(dest, offset, x) do { \ + (dest)[offset] = (GLushort) (x); \ + (void)rmesa; } while (0) #endif #define EMIT_TWO_ELTS(dest, offset, x, y) *(GLuint *)(dest+offset) = ((y)<<16)|(x); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c 2004-06-16 11:18:23.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_texmem.c 2004-12-15 02:50:58.000000000 +0100 @@ -41,7 +41,6 @@ #include "imports.h" #include "context.h" #include "macros.h" -#include "simple_list.h" #include "radeon_context.h" #include "radeon_ioctl.h" @@ -66,8 +65,7 @@ for ( i = 0 ; i < rmesa->glCtx->Const.MaxTextureUnits ; i++ ) { if ( t == rmesa->state.texture.unit[i].texobj ) { rmesa->state.texture.unit[i].texobj = NULL; - remove_from_list( &rmesa->hw.tex[i] ); - make_empty_list( &rmesa->hw.tex[i] ); + rmesa->hw.tex[i].dirty = GL_FALSE; } } } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c --- xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c 2004-06-16 11:18:24.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_vtxfmt_c.c 2004-12-15 02:50:58.000000000 +0100 @@ -117,7 +117,7 @@ } - +#if 0 /* Color for ubyte (packed) color formats: */ static void radeon_Color3ub_ub( GLubyte r, GLubyte g, GLubyte b ) @@ -159,7 +159,7 @@ radeonContextPtr rmesa = RADEON_CONTEXT(ctx); *(GLuint *)rmesa->vb.colorptr = LE32_TO_CPU(*(GLuint *)v); } - +#endif /* 0 */ static void radeon_Color3f_ub( GLfloat r, GLfloat g, GLfloat b ) { @@ -208,6 +208,7 @@ /* Color for float color+alpha formats: */ +#if 0 static void radeon_Color3ub_4f( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -251,6 +252,7 @@ dest[2] = UBYTE_TO_FLOAT(v[2]); dest[3] = UBYTE_TO_FLOAT(v[3]); } +#endif /* 0 */ static void radeon_Color3f_4f( GLfloat r, GLfloat g, GLfloat b ) @@ -300,6 +302,7 @@ /* Color for float color formats: */ +#if 0 static void radeon_Color3ub_3f( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -341,6 +344,7 @@ dest[2] = UBYTE_TO_FLOAT(v[2]); ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3] = UBYTE_TO_FLOAT(v[3]); } +#endif /* 0 */ static void radeon_Color3f_3f( GLfloat r, GLfloat g, GLfloat b ) @@ -388,6 +392,7 @@ /* Secondary Color: */ +#if 0 static void radeon_SecondaryColor3ubEXT_ub( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -409,6 +414,7 @@ dest->blue = v[2]; dest->alpha = 0xff; } +#endif /* 0 */ static void radeon_SecondaryColor3fEXT_ub( GLfloat r, GLfloat g, GLfloat b ) { @@ -432,6 +438,7 @@ dest->alpha = 255; } +#if 0 static void radeon_SecondaryColor3ubEXT_3f( GLubyte r, GLubyte g, GLubyte b ) { GET_CURRENT_CONTEXT(ctx); @@ -453,6 +460,7 @@ dest[2] = UBYTE_TO_FLOAT(v[2]); dest[3] = 1.0; } +#endif /* 0 */ static void radeon_SecondaryColor3fEXT_3f( GLfloat r, GLfloat g, GLfloat b ) { @@ -768,6 +776,7 @@ CHOOSE(Normal3fv, pfv, MASK_NORM, ACTIVE_NORM, (const GLfloat *v), (v)) +#if 0 CHOOSE_COLOR(Color4ub, p4ub, 4, MASK_COLOR, ACTIVE_COLOR, (GLubyte a,GLubyte b, GLubyte c, GLubyte d), (a,b,c,d)) CHOOSE_COLOR(Color4ubv, pubv, 4, MASK_COLOR, ACTIVE_COLOR, @@ -776,6 +785,7 @@ (GLubyte a,GLubyte b, GLubyte c), (a,b,c)) CHOOSE_COLOR(Color3ubv, pubv, 3, MASK_COLOR, ACTIVE_COLOR, (const GLubyte *v), (v)) +#endif CHOOSE_COLOR(Color4f, p4f, 4, MASK_COLOR, ACTIVE_COLOR, (GLfloat a,GLfloat b, GLfloat c, GLfloat d), (a,b,c,d)) @@ -787,10 +797,12 @@ (const GLfloat *v), (v)) +#if 0 CHOOSE_SECONDARY_COLOR(SecondaryColor3ubEXT, p3ub, MASK_SPEC, ACTIVE_SPEC, (GLubyte a,GLubyte b, GLubyte c), (a,b,c)) CHOOSE_SECONDARY_COLOR(SecondaryColor3ubvEXT, pubv, MASK_SPEC, ACTIVE_SPEC, (const GLubyte *v), (v)) +#endif CHOOSE_SECONDARY_COLOR(SecondaryColor3fEXT, p3f, MASK_SPEC, ACTIVE_SPEC, (GLfloat a,GLfloat b, GLfloat c), (a,b,c)) CHOOSE_SECONDARY_COLOR(SecondaryColor3fvEXT, pfv, MASK_SPEC, ACTIVE_SPEC, diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile x11r682/xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile --- xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/src/mesa/drivers/dri/savage/Makefile 2004-12-15 02:50:59.000000000 +0100 @@ -0,0 +1,40 @@ +# src/mesa/drivers/dri/r128/Makefile + +TOP = ../../../../.. +include $(TOP)/configs/current + +LIBNAME = savage_dri.so + +# Doesn't exist yet. +#MINIGLX_SOURCES = server/savage_dri.c + +COMMON_SOURCES = \ + ../../common/driverfuncs.c \ + ../common/mm.c \ + ../common/utils.c \ + ../common/texmem.c \ + ../common/vblank.c \ + ../common/xmlconfig.c \ + ../common/dri_util.c \ + ../common/glcontextmodes.c + +DRIVER_SOURCES = \ + savage_xmesa.c \ + savagedd.c \ + savagestate.c \ + savagetex.c \ + savagetris.c \ + savageioctl.c \ + savagespan.c \ + savagedma.c + +C_SOURCES = \ + $(COMMON_SOURCES) \ + $(DRIVER_SOURCES) + +ASM_SOURCES = + + +include ../Makefile.template + +symlinks: diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c --- xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c 2004-06-16 11:18:35.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/savage/savage_xmesa.c 2004-12-15 02:50:59.000000000 +0100 @@ -34,6 +34,8 @@ #include "simple_list.h" +#include "utils.h" + #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" #include "tnl/tnl.h" @@ -55,6 +57,10 @@ #include "savagedma.h" +#ifdef USE_NEW_INTERFACE +static PFNGLXCREATECONTEXTMODES create_context_modes = NULL; +#endif /* USE_NEW_INTERFACE */ + #ifndef SAVAGE_DEBUG int SAVAGE_DEBUG = (0 /* | DEBUG_ALWAYS_SYNC */ @@ -88,31 +94,6 @@ SAVAGEDRIPtr gDRIPriv = (SAVAGEDRIPtr)sPriv->pDevPriv; - /* Check the DRI version */ - { - int major, minor, patch; - if (XF86DRIQueryVersion(sPriv->display, &major, &minor, &patch)) { - if (major != 4 || minor < 0) { - __driUtilMessage("savage DRI driver expected DRI version 4.0.x but got version %d.%d.%d", major, minor, patch); - return GL_FALSE; - } - } - } - - /* Check that the DDX driver version is compatible */ - if (sPriv->ddxMajor != 1 || - sPriv->ddxMinor < 0) { - __driUtilMessage("savage DRI driver expected DDX driver version 1.0.x but got version %d.%d.%d", sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch); - return GL_FALSE; - } - - /* Check that the DRM driver version is compatible */ - if (sPriv->drmMajor != 1 || - sPriv->drmMinor < 0) { - __driUtilMessage("savage DRI driver expected DRM driver version 1.1.x but got version %d.%d.%d", sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch); - return GL_FALSE; - } - /* Allocate the private area */ savageScreen = (savageScreenPrivate *)Xmalloc(sizeof(savageScreenPrivate)); if (!savageScreen) @@ -813,8 +794,9 @@ +#ifndef DRI_NEW_INTERFACE_ONLY /* - * This is the bootstrap function for the driver. + * This is the (old) bootstrap function for the driver. * The __driCreateScreen name is the symbol that libGL.so fetches. * Return: pointer to a __DRIscreenPrivate. */ @@ -825,6 +807,147 @@ psp = __driUtilCreateScreen(dpy, scrn, psc, numConfigs, config, &savageAPI); return (void *) psp; } +#endif /* DRI_NEW_INTERFACE_ONLY */ + + + +#ifdef USE_NEW_INTERFACE +static __GLcontextModes * +savageFillInModes( unsigned pixel_bits, unsigned depth_bits, + unsigned stencil_bits, GLboolean have_back_buffer ) +{ + __GLcontextModes * modes; + __GLcontextModes * m; + unsigned num_modes; + unsigned depth_buffer_factor; + unsigned back_buffer_factor; + GLenum fb_format; + GLenum fb_type; + + /* Right now GLX_SWAP_COPY_OML isn't supported, but it would be easy + * enough to add support. Basically, if a context is created with an + * fbconfig where the swap method is GLX_SWAP_COPY_OML, pageflipping + * will never be used. + * + * FK: What about drivers that don't use page flipping? Could they + * just expose GLX_SWAP_COPY_OML? + */ + static const GLenum back_buffer_modes[] = { + GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */ + }; + + uint8_t depth_bits_array[2]; + uint8_t stencil_bits_array[2]; + + + depth_bits_array[0] = depth_bits; + depth_bits_array[1] = depth_bits; + + /* Just like with the accumulation buffer, always provide some modes + * with a stencil buffer. It will be a sw fallback, but some apps won't + * care about that. + */ + stencil_bits_array[0] = 0; + stencil_bits_array[1] = (stencil_bits == 0) ? 8 : stencil_bits; + + depth_buffer_factor = ((depth_bits != 0) || (stencil_bits != 0)) ? 2 : 1; + back_buffer_factor = (have_back_buffer) ? 2 : 1; + + num_modes = depth_buffer_factor * back_buffer_factor * 4; + + if ( pixel_bits == 16 ) { + fb_format = GL_RGB; + fb_type = GL_UNSIGNED_SHORT_5_6_5; + } + else { + fb_format = GL_BGR; + fb_type = GL_UNSIGNED_INT_8_8_8_8_REV; + } + + modes = (*create_context_modes)( num_modes, sizeof( __GLcontextModes ) ); + m = modes; + if ( ! driFillInModes( & m, fb_format, fb_type, + depth_bits_array, stencil_bits_array, depth_buffer_factor, + back_buffer_modes, back_buffer_factor, + GLX_TRUE_COLOR ) ) { + fprintf( stderr, "[%s:%u] Error creating FBConfig!\n", + __func__, __LINE__ ); + return NULL; + } + + if ( ! driFillInModes( & m, fb_format, fb_type, + depth_bits_array, stencil_bits_array, depth_buffer_factor, + back_buffer_modes, back_buffer_factor, + GLX_DIRECT_COLOR ) ) { + fprintf( stderr, "[%s:%u] Error creating FBConfig!\n", + __func__, __LINE__ ); + return NULL; + } + + /* Mark the visual as slow if there are "fake" stencil bits. + */ + for ( m = modes ; m != NULL ; m = m->next ) { + if ( (m->stencilBits != 0) && (m->stencilBits != stencil_bits) ) { + m->visualRating = GLX_SLOW_CONFIG; + } + } + + return modes; +} + + +/** + * This is the bootstrap function for the driver. libGL supplies all of the + * requisite information about the system, and the driver initializes itself. + * This routine also fills in the linked list pointed to by \c driver_modes + * with the \c __GLcontextModes that the driver can support for windows or + * pbuffers. + * + * \return A pointer to a \c __DRIscreenPrivate on success, or \c NULL on + * failure. + */ +void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc, + const __GLcontextModes * modes, + const __DRIversion * ddx_version, + const __DRIversion * dri_version, + const __DRIversion * drm_version, + const __DRIframebuffer * frame_buffer, + drmAddress pSAREA, int fd, + int internal_api_version, + __GLcontextModes ** driver_modes ) + +{ + __DRIscreenPrivate *psp; + static const __DRIversion ddx_expected = { 1, 0, 0 }; + static const __DRIversion dri_expected = { 4, 0, 0 }; + static const __DRIversion drm_expected = { 1, 0, 0 }; + if ( ! driCheckDriDdxDrmVersions2( "Savage", + dri_version, & dri_expected, + ddx_version, & ddx_expected, + drm_version, & drm_expected ) ) { + return NULL; + } + + psp = __driUtilCreateNewScreen(dpy, scrn, psc, NULL, + ddx_version, dri_version, drm_version, + frame_buffer, pSAREA, fd, + internal_api_version, &savageAPI); + if ( psp != NULL ) { + create_context_modes = (PFNGLXCREATECONTEXTMODES) + glXGetProcAddress( (const GLubyte *) "__glXCreateContextModes" ); + if ( create_context_modes != NULL ) { + SAVAGEDRIPtr dri_priv = (SAVAGEDRIPtr)psp->pDevPriv; + *driver_modes = savageFillInModes( dri_priv->cpp*8, + (dri_priv->cpp == 2) ? 16 : 24, + (dri_priv->cpp == 2) ? 0 : 8, + (dri_priv->backOffset != dri_priv->depthOffset) ); + } + } + + return (void *) psp; +} +#endif /* USE_NEW_INTERFACE */ + #endif diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h --- xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h 2004-06-16 11:18:35.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/savage/savagecontext.h 2004-12-15 02:50:59.000000000 +0100 @@ -37,7 +37,6 @@ #include "xf86drm.h" #include "drm.h" #include "savage_drm.h" -#include "savage_sarea.h" #include "savage_init.h" #include "mm.h" #include "tnl/t_vertex.h" @@ -237,7 +236,7 @@ unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; drm_context_t hHWContext; - drmLock *driHwLock; + drm_hw_lock_t *driHwLock; GLuint driFd; __DRIdrawablePrivate *driDrawable; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c --- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c 2004-06-16 11:18:25.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_dd.c 2004-12-15 02:50:59.000000000 +0100 @@ -44,7 +44,7 @@ #include "utils.h" -#define DRIVER_DATE "20040608" +#define DRIVER_DATE "20040925" /* Return the width and height of the given buffer. */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h --- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h 2004-06-16 11:18:26.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_reg.h 2004-12-15 02:50:59.000000000 +0100 @@ -640,13 +640,13 @@ #define SiS_S_BOTH_ONE_MINUS_SRC_ALPHA 0x0000000c /* - * REG_3D_DstBlendMode (0x8A54 - 0x8A57) + * REG_3D_ClipTopBottom (0x8A54 - 0x8A57) */ #define MASK_BottomClip 0x00001FFF #define MASK_TopClip 0x03FFE000 /* - * REG_3D_DstBlendMode (0x8A58 - 0x8A5B) + * REG_3D_ClipLeftRight (0x8A58 - 0x8A5B) */ #define MASK_RightClip 0x00001FFF #define MASK_LeftClip 0x03FFE000 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c --- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c 2004-07-22 08:51:58.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_screen.c 2004-12-15 02:50:59.000000000 +0100 @@ -46,7 +46,7 @@ const char __driConfigOptions[] = DRI_CONF_BEGIN DRI_CONF_SECTION_DEBUG - DRI_CONF_OPT_BEGIN(agp_disable,bool,true) + DRI_CONF_OPT_BEGIN(agp_disable,bool,false) DRI_CONF_DESC(en,"Disable AGP vertex dispatch") DRI_CONF_OPT_END DRI_CONF_OPT_BEGIN(fallback_force,bool,false) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c --- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c 2004-06-16 11:18:26.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c 2004-12-15 02:50:59.000000000 +0100 @@ -441,9 +441,6 @@ __GLSiSHardware *prev = &smesa->prev; __GLSiSHardware *current = &smesa->current; - if (!ctx->Color.ColorLogicOpEnabled) - return; - current->hwDstSet &= ~MASK_ROP2; switch (opcode) { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c --- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c 2004-07-22 08:51:59.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.c 2004-12-15 02:50:59.000000000 +0100 @@ -611,7 +611,7 @@ #define POINT_FALLBACK (DD_POINT_SMOOTH) #define LINE_FALLBACK (DD_LINE_STIPPLE|DD_LINE_SMOOTH) -#define TRI_FALLBACK (DD_TRI_SMOOTH) +#define TRI_FALLBACK (DD_TRI_STIPPLE|DD_TRI_SMOOTH) #define ANY_FALLBACK_FLAGS (POINT_FALLBACK|LINE_FALLBACK|TRI_FALLBACK) #define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED) #define _SIS_NEW_RENDER_STATE (ANY_RASTER_FLAGS | ANY_FALLBACK_FLAGS) @@ -889,7 +889,8 @@ void sisFlushPrimsLocked(sisContextPtr smesa) { - GLuint *start; + if (smesa->vb_cur == smesa->vb_last) + return; sisUpdateHWState(smesa->glCtx); @@ -898,7 +899,7 @@ mEndPrimitive(); MMIO(REG_3D_AGPCmBase, (smesa->vb_last - smesa->vb) + smesa->vb_agp_offset); - MMIO(REG_3D_AGPTtDwNum, (smesa->vb_cur - smesa->vb_last) / 4 | + MMIO(REG_3D_AGPTtDwNum, ((smesa->vb_cur - smesa->vb_last) / 4) | 0x50000000); MMIO(REG_3D_ParsingSet, smesa->AGPParseSet); MMIO(REG_3D_AGPCmFire, (GLint)(-1)); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h --- xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h 2004-06-16 11:18:27.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/sis/sis_tris.h 2004-12-15 02:50:59.000000000 +0100 @@ -51,6 +51,7 @@ static __inline GLuint *sisAllocDmaLow(sisContextPtr smesa, int bytes) { GLuint *start; + if (smesa->vb_cur + bytes >= smesa->vb_end) { LOCK_HARDWARE(); sisFlushPrimsLocked(smesa); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c 2004-08-13 01:06:08.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_context.c 2004-12-15 02:50:59.000000000 +0100 @@ -75,6 +75,7 @@ _mesa_enable_extension( ctx, "GL_EXT_texture_lod_bias" ); _mesa_enable_extension( ctx, "GL_EXT_blend_func_separate" ); _mesa_enable_extension( ctx, "GL_EXT_fog_coord" ); + _mesa_enable_extension( ctx, "GL_EXT_texture_env_add" ); #if 0 _mesa_enable_extension(ctx, "GL_EXT_secondary_color"); @@ -83,7 +84,6 @@ #endif if ( fxMesa->haveTwoTMUs ) { - _mesa_enable_extension( ctx, "GL_EXT_texture_env_add" ); _mesa_enable_extension( ctx, "GL_ARB_multitexture" ); } @@ -97,9 +97,7 @@ _mesa_enable_extension( ctx, "GL_EXT_blend_subtract" ); _mesa_enable_extension( ctx, "GL_EXT_blend_equation_separate" ); } else { -#if 0 /*[dBorca] cannot handle 565. badbad! revise*/ _mesa_enable_extension( ctx, "GL_SGIS_generate_mipmap" ); -#endif } if (fxMesa->haveHwStencil) { @@ -112,6 +110,7 @@ if (TDFX_IS_NAPALM(fxMesa)/*fxMesa->Glide.HaveCombineExt - JJJ*/) { _mesa_enable_extension( ctx, "GL_EXT_texture_env_combine" ); + _mesa_enable_extension( ctx, "GL_ARB_texture_env_combine" ); } /* core-level extensions */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c --- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c 2004-08-13 01:06:10.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_render.c 2004-12-15 02:50:59.000000000 +0100 @@ -501,7 +501,7 @@ fxMesa->Glide.grTexClampMode(GR_TMU0 + unit, p->sClamp, p->tClamp); fxMesa->Glide.grTexFilterMode(GR_TMU0 + unit, p->minFilt, p->magFilt); fxMesa->Glide.grTexMipMapMode(GR_TMU0 + unit, p->mmMode, p->LODblend); - fxMesa->Glide.grTexLodBiasValue(GR_TMU0 + unit, p->LodBias); + fxMesa->Glide.grTexLodBiasValue(GR_TMU0 + unit, CLAMP(p->LodBias, -8, 7.75)); } } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c --- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c 2004-07-22 08:52:01.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_tex.c 2004-12-15 02:50:59.000000000 +0100 @@ -49,19 +49,56 @@ #include "tdfx_texman.h" +/* no borders! can't halve 1x1! (stride > width * comp) not allowed */ void -_mesa_halve2x2_teximage2d ( GLuint bytesPerPixel, +_mesa_halve2x2_teximage2d ( GLcontext *ctx, + struct gl_texture_image *texImage, + GLuint bytesPerPixel, GLint srcWidth, GLint srcHeight, const GLvoid *srcImage, GLvoid *dstImage ) { GLint i, j, k; - const GLint dstWidth = srcWidth / 2; - const GLint dstHeight = srcHeight / 2; - const GLint srcRowStride = srcWidth * bytesPerPixel; - const GLubyte *src = srcImage; + GLint dstWidth = srcWidth / 2; + GLint dstHeight = srcHeight / 2; + GLint srcRowStride = srcWidth * bytesPerPixel; + GLubyte *src = (GLubyte *)srcImage; GLubyte *dst = dstImage; - /* no borders! can't halve 1x1! (stride > width * comp) not allowed */ + GLuint bpt = 0; + GLubyte *_s = NULL; + GLubyte *_d = NULL; + GLenum _t; + + if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) { + _t = GL_UNSIGNED_SHORT_5_6_5_REV; + bpt = bytesPerPixel; + } else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB4444) { + _t = GL_UNSIGNED_SHORT_4_4_4_4_REV; + bpt = bytesPerPixel; + } else if (texImage->TexFormat->MesaFormat == MESA_FORMAT_ARGB1555) { + _t = GL_UNSIGNED_SHORT_1_5_5_5_REV; + bpt = bytesPerPixel; + } + if (bpt) { + bytesPerPixel = 4; + srcRowStride = srcWidth * bytesPerPixel; + if (dstWidth == 0) { + dstWidth = 1; + } + if (dstHeight == 0) { + dstHeight = 1; + } + _s = src = MALLOC(srcRowStride * srcHeight); + _d = dst = MALLOC(dstWidth * bytesPerPixel * dstHeight); + _mesa_texstore_rgba8888(ctx, 2, GL_RGBA, + &_mesa_texformat_rgba8888_rev, src, + 0, 0, 0, /* dstX/Y/Zoffset */ + srcRowStride, /* dstRowStride */ + 0, /* dstImageStride */ + srcWidth, srcHeight, 1, + texImage->Format, _t, srcImage, &ctx->DefaultPacking); + } + if (srcHeight == 1) { for (i = 0; i < dstWidth; i++) { for (k = 0; k < bytesPerPixel; k++) { @@ -96,6 +133,20 @@ src += srcRowStride; } } + + if (bpt) { + src = _s; + dst = _d; + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, + texImage->TexFormat, dstImage, + 0, 0, 0, /* dstX/Y/Zoffset */ + dstWidth * bpt, + 0, /* dstImageStride */ + dstWidth, dstHeight, 1, + GL_BGRA, CHAN_TYPE, dst, &ctx->DefaultPacking); + FREE(dst); + FREE(src); + } } @@ -1363,7 +1414,9 @@ NULL); mipImage = _mesa_select_tex_image(ctx, texUnit, target, level); mip = TDFX_TEXIMAGE_DATA(mipImage); - _mesa_halve2x2_teximage2d(texelBytes, + _mesa_halve2x2_teximage2d(ctx, + texImage, + texelBytes, mml->width, mml->height, texImage->Data, mipImage->Data); texImage = mipImage; @@ -1470,7 +1523,9 @@ ++level; mipImage = _mesa_select_tex_image(ctx, texUnit, target, level); mip = TDFX_TEXIMAGE_DATA(mipImage); - _mesa_halve2x2_teximage2d(texelBytes, + _mesa_halve2x2_teximage2d(ctx, + texImage, + texelBytes, mml->width, mml->height, texImage->Data, mipImage->Data); texImage = mipImage; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c --- xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c 2004-07-22 08:52:03.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/tdfx/tdfx_vb.c 2004-12-15 02:50:59.000000000 +0100 @@ -300,6 +300,8 @@ } else if (ctx->Texture._EnabledUnits & 0x1) { /* unit 0 enabled */ ind |= TDFX_W_BIT|TDFX_TEX0_BIT; + } else if (fxMesa->Fog.Mode != GR_FOG_DISABLE) { + ind |= TDFX_W_BIT; } if (fxMesa->Fog.Mode == GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT) { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile x11r682/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile --- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile 2004-06-16 11:18:36.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/Makefile 2004-12-15 02:50:59.000000000 +0100 @@ -30,6 +30,7 @@ via_texstate.c \ via_tris.c \ via_vb.c \ + via_texcombine.c \ xf86drmVIA.c C_SOURCES = \ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c --- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c 2004-07-22 08:52:10.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.c 2004-12-15 02:50:59.000000000 +0100 @@ -59,7 +59,7 @@ #include #include "macros.h" -#define DRIVER_DATE "20020221" +#define DRIVER_DATE "20040923" #include "utils.h" @@ -136,6 +136,110 @@ } } + +/** + * Calculate a width that satisfies the hardware's alignment requirements. + * On the Unichrome hardware, each scanline must be aligned to a multiple of + * 16 pixels. + * + * \param width Minimum buffer width, in pixels. + * + * \returns A pixel width that meets the alignment requirements. + */ +static __inline__ unsigned +buffer_align( unsigned width ) +{ + return (width + 0x0f) & ~0x0f; +} + + +/** + * Calculate the framebuffer parameters for all buffers (front, back, depth, + * and stencil) associated with the specified context. + * + * \warning + * This function also calls \c AllocateBuffer to actually allocate the + * buffers. + * + * \sa AllocateBuffer + */ +static GLboolean +calculate_buffer_parameters( viaContextPtr vmesa ) +{ + const unsigned shift = vmesa->viaScreen->bitsPerPixel / 16; + const unsigned extra = (vmesa->drawType == GLX_PBUFFER_BIT) ? 0 : 32; + unsigned w; + unsigned h; + + if (vmesa->drawType == GLX_PBUFFER_BIT) { + w = vmesa->driDrawable->w; + h = vmesa->driDrawable->h; + } + else { + w = vmesa->viaScreen->width; + h = vmesa->viaScreen->height; + + vmesa->front.offset = 0; + vmesa->front.map = (char *) vmesa->driScreen->pFB; + } + + vmesa->front.pitch = buffer_align( w ) << shift; + vmesa->front.size = vmesa->front.pitch * h; + + + /* Allocate back-buffer */ + + vmesa->back.pitch = (buffer_align( vmesa->driDrawable->w ) << shift) + + extra; + vmesa->back.size = vmesa->back.pitch * vmesa->driDrawable->h; + +#ifdef DEBUG + if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent backbuffer: w = %d h = %d bpp = %d sizs = %d\n", + vmesa->back.pitch, + vmesa->driDrawable->h, + 8 << shift, + vmesa->back.size); +#endif + + /* Allocate depth-buffer */ + if ( vmesa->hasStencil || vmesa->hasDepth ) { + const unsigned dShift = (vmesa->hasStencil) + ? 2 : (vmesa->depthBits / 16); + + vmesa->depth.pitch = (buffer_align( vmesa->driDrawable->w ) << dShift) + + extra; + vmesa->depth.bpp = 8 << dShift; + vmesa->depth.size = vmesa->depth.pitch * vmesa->driDrawable->h; + } + else { + (void) memset( & vmesa->depth, 0, sizeof( vmesa->depth ) ); + } + +#ifdef DEBUG + if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent depthbuffer: w = %d h = %d bpp = %d sizs = %d\n", + vmesa->depth.pitch, + vmesa->driDrawable->h, + vmesa->depth.bpp, + vmesa->depth.size); +#endif + + /*=* John Sheng [2003.5.31] flip *=*/ + if( (vmesa->viaScreen->width == vmesa->driDrawable->w) + && (vmesa->viaScreen->height == vmesa->driDrawable->h) ) { + vmesa->doPageFlip = GL_FALSE; + vmesa->currentPage = 0; + vmesa->back.pitch = vmesa->front.pitch; + } + + if (!AllocateBuffer(vmesa)) { + FREE(vmesa); + return GL_FALSE; + } + + return GL_TRUE; +} + + void viaReAllocateBuffers(GLframebuffer *drawbuffer) { GLcontext *ctx; @@ -152,95 +256,11 @@ vmesa->driDrawable->w = ctx->DrawBuffer->Width; vmesa->driDrawable->h = ctx->DrawBuffer->Height; + LOCK_HARDWARE(vmesa); - - /* Allocate back & depth buffer */ - { - int w, h, bpp; - w = vmesa->driDrawable->w; - h = vmesa->driDrawable->h; - /* back buffer */ - bpp = vmesa->viaScreen->bitsPerPixel; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "driScreen->fbBPP = %d\n", bpp); -#endif - if (bpp == 32) { - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - vmesa->back.size = w * h * bpp / 8; - vmesa->back.pitch = w << 2; - } - else { - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16; - vmesa->back.size = w * h * bpp / 8; - vmesa->back.pitch = w << 1; - } -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "resizebuffer backbuffer: w = %d h = %d bpp = %d sizs = %d\n", - w, h, bpp, vmesa->back.size); -#endif - /* depth buffer */ - w = vmesa->driDrawable->w; - if (vmesa->hasDepth && vmesa->hasStencil) { - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - vmesa->depth.size = w * h * 4; - vmesa->depth.pitch = w << 2; - vmesa->depth.bpp = 32; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "depthBits = 24\n"); - if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n"); -#endif - } - else if (vmesa->hasDepth) { - /*=* John Sheng [2003.6.16] patch viewperf drv-08 draw nothing */ - /*if(vmesa->viaScreen->bitsPerPixel == 32)*/ - /*vmesa->depthBits = 16;*/ - - if (vmesa->depthBits == 16) { - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16; - vmesa->depth.size = w * h * 2; - vmesa->depth.pitch = w << 1; - vmesa->depth.bpp = 16; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "depthBits = 16\n"); -#endif - } - else { - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - vmesa->depth.size = w * h * 4; - vmesa->depth.pitch = w << 2; - vmesa->depth.bpp = 32; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "depthBits = 32\n"); -#endif - } - } - else if (vmesa->hasStencil) { - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - vmesa->depth.size = w * h * 4; - vmesa->depth.pitch = w << 2; - vmesa->depth.bpp = 32; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n"); -#endif - } -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "resizebuffer depthbuffer: w = %d h = %d bpp = %d sizs = %d\n", - w, h, vmesa->depth.bpp, vmesa->depth.size); -#endif - /*=* John Sheng [2003.5.31] flip *=*/ - { - if(vmesa->viaScreen->width == vmesa->driDrawable->w && - vmesa->viaScreen->height == vmesa->driDrawable->h) { - vmesa->back.pitch = vmesa->front.pitch; - vmesa->back.size = vmesa->front.size; - } - } - - if (!AllocateBuffer(vmesa)) { - FREE(vmesa); - } - } + calculate_buffer_parameters( vmesa ); UNLOCK_HARDWARE(vmesa); + #ifdef DEBUG if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__); #endif @@ -263,12 +283,12 @@ "GL_ARB_texture_env_add", "GL_ARB_texture_env_combine", /* John Sheng [2003.7.18] tex combine */ "GL_ARB_texture_env_dot3", /* John Sheng [2003.7.18] tex dot3 */ - "GL_EXT_point_parameters", /* John Sheng [2003.7.18] point param. */ + "GL_ARB_texture_mirrored_repeat", "GL_EXT_stencil_wrap", - "GL_EXT_texture_env_add", "GL_EXT_texture_env_combine", /* John Sheng [2003.7.18] tex combine */ "GL_EXT_texture_env_dot3", /* John Sheng [2003.7.18] tex dot3 */ "GL_EXT_texture_lod_bias", + "GL_NV_blend_square", NULL }; @@ -440,6 +460,8 @@ ctx->Const.MaxTextureLevels = 11; ctx->Const.MaxTextureUnits = 2; + ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits; + ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits; ctx->Const.MinLineWidth = 1.0; ctx->Const.MinLineWidthAA = 1.0; @@ -567,12 +589,12 @@ if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__); #endif { - GLboolean saam; - int count = 0, fbSize; #ifndef USE_XINERAMA vmesa->saam = 0; #else - saam = XineramaIsActive(vmesa->display); + GLboolean saam = XineramaIsActive(vmesa->display); + int count = 0, fbSize; + if (saam && vmesa->viaScreen->drixinerama) { vmesa->xsi = XineramaQueryScreens(vmesa->display, &count); /* Test RightOf or Down */ @@ -716,8 +738,10 @@ void viaXMesaWindowMoved(viaContextPtr vmesa) { GLuint bytePerPixel = vmesa->viaScreen->bitsPerPixel >> 3; +#ifdef USE_XINERAMA GLuint side = 0; __DRIdrawablePrivate *dPriv = vmesa->driDrawable; +#endif switch (vmesa->glCtx->Color._DrawDestMask) { case __GL_FRONT_BUFFER_MASK: @@ -904,178 +928,22 @@ fprintf(stderr, "driContextPriv = %08x\n", (GLuint)driReadPriv); } #endif - + if (driContextPriv) { viaContextPtr vmesa = (viaContextPtr)driContextPriv->driverPrivate; - current_mesa = vmesa; - - vmesa->driDrawable = driDrawPriv; - if (vmesa->drawType == GLX_PBUFFER_BIT) { - int w, h, bpp; - - w = vmesa->driDrawable->w; - h = vmesa->driDrawable->h; - bpp = vmesa->viaScreen->bitsPerPixel; - if (bpp == 32) { - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4; - vmesa->front.size = w * h * bpp / 8; - vmesa->front.pitch = w << 2; - } - else { - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2; - vmesa->front.size = w * h * bpp / 8; - vmesa->front.pitch = w << 1; - } - } - /*=* John Sheng [2003.6.20] fix resolution 720x480/720x576 front pitch error *=*/ - else { - GLuint w; - GLuint h; - GLuint bpp; - bpp = vmesa->viaScreen->bitsPerPixel; - h = vmesa->viaScreen->height; - w = vmesa->viaScreen->width; - if (bpp == 0x20) { - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4; - vmesa->front.size = w * h * bpp / 8; - vmesa->front.pitch = w << 2; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "viaScreen->bitsPerPixel = %d\n", 32); -#endif - } - else if (bpp == 0x10) { - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2; - vmesa->front.size = w * h * bpp / 8; - vmesa->front.pitch = w << 1; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "viaScreen->bitsPerPixel = %d\n", 16); -#endif - } - vmesa->front.offset = 0; - vmesa->front.map = (char *) vmesa->driScreen->pFB; - vmesa->front.size = w * h * vmesa->viaScreen->bitsPerPixel /8; - } - - /* Allocate back & depth buffer */ - { - int w, h, bpp; - - w = vmesa->driDrawable->w; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent: w = %d\n", w); -#endif - h = vmesa->driDrawable->h; - - /* back buffer */ - bpp = vmesa->viaScreen->bitsPerPixel; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "driScreen->fbBPP = %d\n", bpp); -#endif - if (bpp == 32) { - if (vmesa->drawType == GLX_PBUFFER_BIT) - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4; - else - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - - vmesa->back.size = w * h * bpp / 8; - vmesa->back.pitch = w << 2; - } - else { - if (vmesa->drawType == GLX_PBUFFER_BIT) - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2; - else - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16; - - vmesa->back.size = w * h * bpp / 8; - vmesa->back.pitch = w << 1; - } -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent backbuffer: w = %d h = %d bpp = %d sizs = %d\n", - w, h, bpp, vmesa->back.size); -#endif - /* depth buffer */ - w = vmesa->driDrawable->w; - if (vmesa->hasDepth && vmesa->hasStencil) { - if (vmesa->drawType == GLX_PBUFFER_BIT) - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4; - else - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - - vmesa->depth.size = w * h * 4; - vmesa->depth.pitch = w << 2; - vmesa->depth.bpp = 32; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "depthBits = 24\n"); - if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n"); -#endif - } - else if (vmesa->hasDepth) { + current_mesa = vmesa; - /*=* John Sheng [2003.6.16] patch viewperf drv-08 draw nothing */ - /*if(vmesa->viaScreen->bitsPerPixel == 32)*/ - /*vmesa->depthBits = 16;*/ - - if (vmesa->depthBits == 16) { - if (vmesa->drawType == GLX_PBUFFER_BIT) - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2; - else - w = BUFFER_ALIGN_WIDTH(w * 2, BUFFER_ALIGNMENT) / 2 + 16; - - vmesa->depth.size = w * h * 2; - vmesa->depth.pitch = w << 1; - vmesa->depth.bpp = 16; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "depthBits = 16\n"); -#endif - } - else { - if (vmesa->drawType == GLX_PBUFFER_BIT) - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4; - else - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - - vmesa->depth.size = w * h * 4; - vmesa->depth.pitch = w << 2; - vmesa->depth.bpp = 32; #ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "depthBits = 32\n"); -#endif - } - } - else if (vmesa->hasStencil) { - if (vmesa->drawType == GLX_PBUFFER_BIT) - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4; - else - w = BUFFER_ALIGN_WIDTH(w * 4, BUFFER_ALIGNMENT) / 4 + 8; - - vmesa->depth.size = w * h * 4; - vmesa->depth.pitch = w << 2; - vmesa->depth.bpp = 32; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "StencilBits = 8\n"); + if (VIA_DEBUG) fprintf(stderr, "viaScreen->bitsPerPixel = %d\n", viaScreen->bitsPerPixel); + if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent: w = %d\n", vmesa->driDrawable->w); #endif - } -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent depthbuffer: w = %d h = %d bpp = %d sizs = %d\n", - w, h, vmesa->depth.bpp, vmesa->depth.size); -#endif - /*=* John Sheng [2003.5.31] flip *=*/ - { - viaContextPtr vmesa = (viaContextPtr)driContextPriv->driverPrivate; - if(vmesa->viaScreen->width == vmesa->driDrawable->w && - vmesa->viaScreen->height == vmesa->driDrawable->h) { - vmesa->doPageFlip = GL_FALSE; - vmesa->currentPage = 0; - vmesa->back.pitch = vmesa->front.pitch; - } - } - if (!AllocateBuffer(vmesa)) { - FREE(vmesa); - return GL_FALSE; - } + vmesa->driDrawable = driDrawPriv; + if ( ! calculate_buffer_parameters( vmesa ) ) { + return GL_FALSE; } + _mesa_make_current2(vmesa->glCtx, (GLframebuffer *)driDrawPriv->driverPrivate, (GLframebuffer *)driReadPriv->driverPrivate); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h --- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h 2004-07-22 08:52:11.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_context.h 2004-12-15 02:50:59.000000000 +0100 @@ -75,10 +75,7 @@ #define TAG(x) via##x #include "tnl_dd/t_dd_vertex.h" #undef TAG -#define BUFFER_ALIGNMENT 32 -#define BUFFER_ALIGN_WIDTH1(w, a) (((w) + ((a) - 1)) & ~((a) - 1)) -#define BUFFER_ALIGN_WIDTH(w, a) (((w) & ((a) - 1)) ? BUFFER_ALIGN_WIDTH1(w, a) : (w)) -#define BUFFER_ALIGN_ADDRESS(p, a) ((GLvoid *)(((GLint)(p)) + ((a)-1) & ~((a)-1))) + #define RightOf 1 #define LeftOf 2 #define Down 4 @@ -451,6 +448,9 @@ extern void viaReAllocateBuffers(GLframebuffer *drawbuffer); extern void viaXMesaWindowMoved(viaContextPtr vmesa); +extern void viaTexCombineState(viaContextPtr vmesa, + const struct gl_tex_env_combine_state * combine, unsigned unit ); + #define SUBPIXEL_X -.5 #define SUBPIXEL_Y -.5 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c --- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c 2004-06-16 11:18:37.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.c 2004-12-15 02:50:59.000000000 +0100 @@ -313,7 +313,6 @@ #ifdef DEBUG if (VIA_DEBUG) fprintf(stderr, "%s SwapPBuffers\n", __FUNCTION__); #endif /*=* [DBG] for pbuffer *=*/ - /*viaDoSwapBufferSoftFront(vmesa);*/ } else { GLuint scrn = 0; @@ -1436,83 +1435,7 @@ #endif } -void viaDoSwapBufferSoft(viaContextPtr vmesa) -{ - GLuint nFrontPitch; - GLuint nBackPitch; - GLuint nFrontBase, nBackBase; - GLuint i, j; - GLubyte *by, *fy; - GLuint w; - - w = vmesa->viaScreen->width; - w = BUFFER_ALIGN_WIDTH(w, BUFFER_ALIGNMENT); - - if (vmesa->viaScreen->bitsPerPixel == 0x20) - nFrontPitch = w << 2; - else - nFrontPitch = w << 1; - - nBackPitch = vmesa->back.pitch; - - /* Caculate Base */ - nFrontBase = (GLuint) vmesa->driScreen->pFB; - nBackBase = ((GLuint) vmesa->back.offset) + ((GLuint) vmesa->driScreen->pFB); - by = (GLubyte *) nBackBase; - fy = (GLubyte *) nFrontBase; - - viaFlushPrimsLocked(vmesa); - - for (i = 0; i < vmesa->driDrawable->h; i++) { - fy = (GLubyte *)(nFrontBase + i * nFrontPitch); - for (j = 0; j < nBackPitch; j++) { - *((GLubyte*)fy) = *((GLubyte*)by); - fy = fy + 1; - by = by + 1; - } - - } - -} -void viaDoSwapBufferSoftFront(viaContextPtr vmesa) -{ - GLuint nFrontPitch; - GLuint nBackPitch; - GLuint nFrontBase, nBackBase; - GLuint i, j; - GLubyte *by, *fy; - GLuint w; - - w = vmesa->viaScreen->width; - w = BUFFER_ALIGN_WIDTH(w, BUFFER_ALIGNMENT); - - if (vmesa->viaScreen->bitsPerPixel == 0x20) - nFrontPitch = w << 2; - else - nFrontPitch = w << 1; - - nBackPitch = vmesa->front.pitch; - - /* Caculate Base */ - nFrontBase = (GLuint) vmesa->driScreen->pFB; - nBackBase = ((GLuint) vmesa->front.offset) + ((GLuint) vmesa->driScreen->pFB); - by = (GLubyte *) nBackBase; - fy = (GLubyte *) nFrontBase; - - viaFlushPrimsLocked(vmesa); - - for (i = 0; i < vmesa->driDrawable->h; i++) { - fy = (GLubyte *)(nFrontBase + i * nFrontPitch); - for (j = 0; j < nBackPitch; j++) { - *((GLubyte*)fy) = *((GLubyte*)by); - fy = fy + 1; - by = by + 1; - } - - } - -} int flush_agp(viaContextPtr vmesa, drm_via_flush_agp_t* agpCmd) { GLuint *pnAGPCurrentPhysStart; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h x11r682/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h --- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h 2004-06-16 11:18:38.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_ioctl.h 2004-12-15 02:50:59.000000000 +0100 @@ -47,8 +47,6 @@ void viaFillStencilDepthBuffer(viaContextPtr vmesa, GLuint pixel); void viaDoSwapBuffers(viaContextPtr vmesa); void viaDoSwapBuffersSaam(viaContextPtr vmesa); -void viaDoSwapBufferSoft(viaContextPtr vmesa); -void viaDoSwapBufferSoftFront(viaContextPtr vmesa); void viaDoSwapPBuffers(viaContextPtr vmesa); int flush_agp(viaContextPtr vmesa, drm_via_flush_agp_t* agpCmd); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c --- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c 2004-06-16 11:18:39.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_state.c 2004-12-15 02:50:59.000000000 +0100 @@ -46,6 +46,7 @@ #include "tnl/t_pipeline.h" + static GLuint ROP[16] = { HC_HROP_BLACK, /* GL_CLEAR 0 */ HC_HROP_DPa, /* GL_AND s & d */ @@ -506,13 +507,52 @@ } } +/** + * Convert S and T texture coordinate wrap modes to hardware bits. + */ +static uint32_t +get_wrap_mode( GLenum sWrap, GLenum tWrap ) +{ + uint32_t v = 0; + + + switch( sWrap ) { + case GL_REPEAT: + v |= HC_HTXnMPMD_Srepeat; + break; + case GL_CLAMP: + case GL_CLAMP_TO_EDGE: + v |= HC_HTXnMPMD_Sclamp; + break; + case GL_MIRRORED_REPEAT: + v |= HC_HTXnMPMD_Smirror; + break; + } + + switch( tWrap ) { + case GL_REPEAT: + v |= HC_HTXnMPMD_Trepeat; + break; + case GL_CLAMP: + case GL_CLAMP_TO_EDGE: + v |= HC_HTXnMPMD_Tclamp; + break; + case GL_MIRRORED_REPEAT: + v |= HC_HTXnMPMD_Tmirror; + break; + } + + return v; +} + + void viaChooseTextureState(GLcontext *ctx) { viaContextPtr vmesa = VIA_CONTEXT(ctx); struct gl_texture_unit *texUnit0 = &ctx->Texture.Unit[0]; struct gl_texture_unit *texUnit1 = &ctx->Texture.Unit[1]; /*=* John Sheng [2003.7.18] texture combine *=*/ - GLboolean AlphaCombine[3]; + #ifdef DEBUG if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__); #endif @@ -524,10 +564,26 @@ } #endif +#ifdef DEBUG + if (VIA_DEBUG) { + struct gl_texture_object *texObj0 = texUnit0->_Current; + struct gl_texture_object *texObj1 = texUnit1->_Current; + + fprintf(stderr, "env mode: 0x%04x / 0x%04x\n", texUnit0->EnvMode, texUnit1->EnvMode); + + if ( (texObj0 != NULL) && (texObj0->Image[0][0] != NULL) ) + fprintf(stderr, "format 0: 0x%04x\n", texObj0->Image[0][0]->Format); + + if ( (texObj1 != NULL) && (texObj1->Image[0][0] != NULL) ) + fprintf(stderr, "format 1: 0x%04x\n", texObj1->Image[0][0]->Format); + } +#endif + + if (texUnit0->_ReallyEnabled) { struct gl_texture_object *texObj = texUnit0->_Current; struct gl_texture_image *texImage = texObj->Image[0][0]; - GLint r, g, b, a; + #ifdef DEBUG if (VIA_DEBUG) fprintf(stderr, "texUnit0->_ReallyEnabled\n"); #endif @@ -580,2502 +636,15 @@ HC_HTXnFLTe_Nearest; } - if (texObj->WrapS == GL_REPEAT) - vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Srepeat; - else - vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Sclamp; + vmesa->regHTXnMPMD_0 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK); + vmesa->regHTXnMPMD_0 |= get_wrap_mode( texObj->WrapS, + texObj->WrapT ); - if (GL_TRUE) { - if (texObj->WrapT == GL_REPEAT) - vmesa->regHTXnMPMD_0 |= HC_HTXnMPMD_Trepeat; - else - vmesa->regHTXnMPMD_0 |= HC_HTXnMPMD_Tclamp; - } #ifdef DEBUG if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode %x\n",texUnit0->EnvMode); #endif - switch (texUnit0->EnvMode) { - case GL_MODULATE: - switch (texImage->Format) { - case GL_ALPHA: - /* C = Cf, A = At*Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt*Cf, A = Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt*Cf, A = At*Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - /* C = It*Cf, A = It*Af - * RGB part. - * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_RGB: - /* C = Ct*Cf, A = Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_MODULATE: GL_RGB\n"); -#endif - break; - case GL_RGBA: - /* C = Ct*Cf, A = At*Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias - | HC_HTXnTBLAshift_No; - - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_MODULATE: GL_RGBA\n"); -#endif - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - /* C = Cf, A = At*Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Adif | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt*Cf, A = Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt*Cf, A = At*Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - /* C = It*Cf, A = It*Af - * RGB part. - * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_RGB: - /* C = Ct*Cf, A = Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGBA: - /* C = Ct*Cf, A = At*Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - } - break; - } - break; - case GL_DECAL: - switch (texImage->Format) { - case GL_ALPHA: - case GL_LUMINANCE: - case GL_LUMINANCE_ALPHA: - case GL_INTENSITY: - /* Undefined. - */ - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_DECAL: GL_RGB\n"); -#endif - break; - case GL_RGBA: - /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf - * RGB part. - * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_DECAL: GL_RGBA\n"); -#endif - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - case GL_LUMINANCE: - case GL_LUMINANCE_ALPHA: - case GL_INTENSITY: - /* Undefined. - */ - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_COLOR_INDEX: GL_RGB\n"); -#endif - break; - case GL_RGBA: - /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf - * RGB part. - * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_COLOR_INDEX: GL_RGBA\n"); -#endif - break; - } - break; - } - break; - case GL_BLEND: - switch (texImage->Format) { - case GL_ALPHA: - /* C = Cf, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac - * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af - * RGB part. - * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = (a << 8); - break; - case GL_RGB: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_BLEND: GL_RGB\n"); -#endif - break; - case GL_RGBA: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_BLEND: GL_RGBA\n"); -#endif - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - /* C = Cf, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac - * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af - * RGB part. - * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = (a << 8); - break; - case GL_RGB: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGBA: - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - } - break; - } - break; - case GL_REPLACE: - switch (texImage->Format) { - case GL_ALPHA: - /* C = Cf, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_INTENSITY: - /* C = It, A = It - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_REPLACE: GL_RGB\n"); -#endif - break; - case GL_RGBA: - /* C = Ct, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; -#ifdef DEBUG - if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_REPLACE: GL_RGBA\n"); -#endif - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - /* C = Cf, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_INTENSITY: - /* C = It, A = It - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGBA: - /* C = Ct, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - } - break; - } - break; - /*=* John Sheng [2003.7.18] texture combine *=*/ - case GL_COMBINE: - switch (texUnit0->Combine.ModeRGB) { - case GL_REPLACE: - switch (texUnit0->Combine.SourceRGB[0]) { - case GL_TEXTURE: - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Tex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Atex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Atex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC; - - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - break; - } - break; - case GL_PRIMARY_COLOR : - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - } - break; - case GL_PREVIOUS : - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - } - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - - case GL_MODULATE: - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit0->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[1]=1; - break; - } - switch (texUnit0->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif; - } - break; - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif; - } - break; - } - switch (texUnit0->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - case GL_PREVIOUS : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - case GL_ADD: - case GL_SUBTRACT : - if (texUnit0->Combine.ModeRGB==GL_ADD) { - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0; - } - else { - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0; - } - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC; - vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 ); - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit0->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC; - AlphaCombine[1]=1; - break; - } - switch (texUnit0->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch (texUnit0->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC; - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif; - } - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - case GL_ADD_SIGNED : - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC| - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_HTXnTBLRC; - vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 ); - vmesa->regHTXnTBLRCc_0 = ( 128<<16 | 128<<8 |128 ); - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit0->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=1; - break; - } - switch (texUnit0->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch (texUnit0->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex; - } - else { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC; - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif; - } - else { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif; - } - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - case GL_INTERPOLATE : - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit0->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=1; - break; - } - switch (texUnit0->Combine.OperandRGB[2]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC; - AlphaCombine[2]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC; - AlphaCombine[2]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC; - AlphaCombine[2]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC; - AlphaCombine[2]=1; - break; - } - switch (texUnit0->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch (texUnit0->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b; - vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a; - vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif; - } - break; - } - switch (texUnit0->Combine.SourceRGB[2]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif; - } - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - } - switch (texUnit0->Combine.ModeA) { - case GL_REPLACE: - switch (texUnit0->Combine.SourceA[0]) { - case GL_TEXTURE: - switch (texUnit0->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Atex; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - switch (texUnit0->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = a; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = a; - break; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - switch (texUnit0->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Adif; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - } - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_MODULATE: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRFog_0 = 0x0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0= 0x0; - switch (texUnit0->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_InvTOPA; - break; - } - switch (texUnit0->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit0->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a<<16; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif; - break; - } - switch (texUnit0->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a<<8; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_ADD: - case GL_SUBTRACT : - if(texUnit0->Combine.ModeA==GL_ADD) { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | HC_HTXnTBLAbias_HTXnTBLRAbias; - } - else { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | HC_HTXnTBLAbias_HTXnTBLRAbias; - } - vmesa->regHTXnTBLRFog_0 = 0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 = 0x0 | ( 255<<16 ); - switch (texUnit0->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit0->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_InvTOPA; - break; - } - switch (texUnit0->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 8); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch (texUnit0->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif; - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_ADD_SIGNED : - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub; - vmesa->regHTXnTBLRFog_0 = 0x0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA| - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 = ( 255<<16 | 0<<8 |128 ); - switch (texUnit0->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit0->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv; - break; - } - switch (texUnit0->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 8); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch (texUnit0->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRFog_0 |= a; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif; - break; - } - switch ((GLint)(texUnit0->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_INTERPOLATE : - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - switch (texUnit0->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit0->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_InvTOPA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv; - break; - } - switch (texUnit0->Combine.OperandA[2]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_InvTOPA; - break; - } - switch (texUnit0->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 8); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch (texUnit0->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRFog_0 |= a; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif; - break; - } - switch (texUnit0->Combine.SourceA[2]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 16); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif; - break; - } - switch (texUnit0->Combine.ScaleShiftA) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_DOT3_RGB : - case GL_DOT3_RGBA : - break; - } - break; - /*=* John Sheng [2003.7.18] texture add *=*/ - case GL_ADD: - switch(texImage->Format) { - case GL_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_LUMINANCE: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - /*=* John Sheng [2003.7.18] texenv *=*/ - /*vmesa->regHTXnTBLRAa_0 = 0x0;*/ - vmesa->regHTXnTBLRAa_0 = (255<<16) | (255<<8) | 255;; - vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16; - break; - case GL_RGB: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGBA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_COLOR_INDEX: - switch(texObj->Palette.Format) { - case GL_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_LUMINANCE: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16; - break; - case GL_RGB: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGBA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - } - break; - } - break; - /*=* John Sheng [2003.7.18] texture dot3 *=*/ - case GL_DOT3_RGB : - case GL_DOT3_RGBA : - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLRFog_0 = 0x0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 = 0x0; - switch (texUnit0->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC; - break; - } - switch (texUnit0->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - break; - } - switch (texUnit0->Combine.SourceRGB[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC; - vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - break; - } - switch (texUnit0->Combine.SourceRGB[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - break; - } - break; - default: - break; - } + + viaTexCombineState( vmesa, texUnit0->_CurrentCombine, 0 ); } else { /* Should turn Cs off if actually no Cs */ @@ -3084,7 +653,6 @@ if (texUnit1->_ReallyEnabled) { struct gl_texture_object *texObj = texUnit1->_Current; struct gl_texture_image *texImage = texObj->Image[0][0]; - GLint r, g, b, a; if (texImage->Border) { FALLBACK(vmesa, VIA_FALLBACK_TEXTURE, GL_TRUE); @@ -3135,2539 +703,28 @@ break; } - if (texObj->WrapS == GL_REPEAT) - vmesa->regHTXnMPMD_1 = HC_HTXnMPMD_Srepeat; - else - vmesa->regHTXnMPMD_1 = HC_HTXnMPMD_Sclamp; - - if (GL_TRUE) { - if (texObj->WrapT == GL_REPEAT) - vmesa->regHTXnMPMD_1 |= HC_HTXnMPMD_Trepeat; - else - vmesa->regHTXnMPMD_1 |= HC_HTXnMPMD_Tclamp; - } - - switch (texUnit1->EnvMode) { - case GL_MODULATE: - switch (texImage->Format) { - case GL_ALPHA: - /* C = Cf, A = At*Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Acur | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt*Cf, A = Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt*Cf, A = At*Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_INTENSITY: - /* C = It*Cf, A = It*Af - * RGB part. - * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_RGB: - /* C = Ct*Cf, A = Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - /* C = Ct*Cf, A = At*Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias - | HC_HTXnTBLAshift_No; - - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - /* C = Cf, A = At*Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Acur | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt*Cf, A = Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt*Cf, A = At*Af - * RGB part. - * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_INTENSITY: - /* C = It*Cf, A = It*Af - * RGB part. - * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_RGB: - /* C = Ct*Cf, A = Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - /* C = Ct*Cf, A = At*Af - * RGB part. - * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - } - break; - } - break; - case GL_DECAL: - switch (texImage->Format) { - case GL_ALPHA: - case GL_LUMINANCE: - case GL_LUMINANCE_ALPHA: - case GL_INTENSITY: - /* Undefined. - */ - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf - * RGB part. - * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - case GL_LUMINANCE: - case GL_LUMINANCE_ALPHA: - case GL_INTENSITY: - /* Undefined. - */ - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf - * RGB part. - * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - } - break; - } - break; - case GL_BLEND: - switch (texImage->Format) { - case GL_ALPHA: - /* C = Cf, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_INTENSITY: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac - * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af - * RGB part. - * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Acur; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Sub | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = (a << 8); - break; - case GL_RGB: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - /* C = Cf, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf - * RGB part. - * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - case GL_INTENSITY: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac - * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af - * RGB part. - * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Acur; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Sub | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = (a << 8); - break; - case GL_RGB: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf - * RGB part. - * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b; - /* Alpha part. - * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - vmesa->regHTXnTBLRFog_1 = 0x0; - break; - } - break; - } - break; - case GL_REPLACE: - switch (texImage->Format) { - case GL_ALPHA: - /* C = Cf, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_INTENSITY: - /* C = It, A = It - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - /* C = Ct, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_COLOR_INDEX: - switch (texObj->Palette.Format) { - case GL_ALPHA: - /* C = Cf, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE: - /* C = Lt, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - /* C = Lt, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_INTENSITY: - /* C = It, A = It - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGB: - /* C = Ct, A = Af - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - case GL_RGBA: - /* C = Ct, A = At - * RGB part. - * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No. - */ - vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; - /* Alpha part. - * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No. - */ - vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_1 = 0x0; - break; - } - break; - } - break; - /*=* John Sheng [2003.7.18] texture combine *=*/ - case GL_COMBINE: - switch (texUnit1->Combine.ModeRGB) { - case GL_REPLACE: - switch (texUnit1->Combine.SourceRGB[0]) { - case GL_TEXTURE: - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Tex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Atex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Atex; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC; - - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - break; - } - break; - case GL_PRIMARY_COLOR : - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - } - break; - case GL_PREVIOUS : - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | - HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - break; - } - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - - case GL_MODULATE: - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit1->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[1]=1; - break; - } - switch (texUnit1->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif; - } - break; - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif; - } - break; - } - switch (texUnit1->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - case GL_PREVIOUS : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - case GL_ADD: - case GL_SUBTRACT : - if (texUnit1->Combine.ModeRGB==GL_ADD) { - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0; - } - else { - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0; - } - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC; - vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 ); - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit1->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC; - AlphaCombine[1]=1; - break; - } - switch (texUnit1->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch (texUnit1->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC; - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif; - } - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - case GL_ADD_SIGNED : - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC| - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_HTXnTBLRC; - vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 ); - vmesa->regHTXnTBLRCc_0 = ( 128<<16 | 128<<8 |128 ); - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit1->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=1; - break; - } - switch (texUnit1->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch (texUnit1->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex; - } - else { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC; - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[1]==0) { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif; - } - else { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif; - } - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - case GL_INTERPOLATE : - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC; - AlphaCombine[0]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC; - AlphaCombine[0]=1; - break; - } - switch (texUnit1->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias; - AlphaCombine[1]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias; - AlphaCombine[1]=1; - break; - } - switch (texUnit1->Combine.OperandRGB[2]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC; - AlphaCombine[2]=0; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC; - AlphaCombine[2]=0; - break; - case GL_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC; - AlphaCombine[2]=1; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC; - AlphaCombine[2]=1; - break; - } - switch (texUnit1->Combine.SourceRGB[0]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif; - } - break; - } - switch (texUnit1->Combine.SourceRGB[1]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b; - vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a; - vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif; - } - break; - } - switch (texUnit1->Combine.SourceRGB[2]) { - case GL_TEXTURE: - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC; - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b; - } - else { - vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - if (AlphaCombine[0]==0) { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - } - else { - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif; - } - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2; - break; - } - break; - - case GL_DOT3_RGB : - case GL_DOT3_RGBA : - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLRFog_0 = 0x0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 = 0x0; - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC; - break; - } - switch (texUnit1->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - break; - } - switch (texUnit1->Combine.SourceRGB[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC; - vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - break; - } - switch (texUnit1->Combine.SourceRGB[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - break; - } - break; - - } - switch (texUnit1->Combine.ModeA) { - case GL_REPLACE: - switch (texUnit1->Combine.SourceA[0]) { - case GL_TEXTURE: - switch (texUnit1->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Atex; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Atex; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - } - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - switch (texUnit1->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = a; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = a; - break; - } - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - switch (texUnit1->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Adif; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - } - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_MODULATE: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRFog_0 = 0x0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0= 0x0; - switch (texUnit1->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_InvTOPA; - break; - } - switch (texUnit1->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit1->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a<<16; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif; - break; - } - switch (texUnit1->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a<<8; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_ADD: - case GL_SUBTRACT : - if(texUnit1->Combine.ModeA==GL_ADD) { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | HC_HTXnTBLAbias_HTXnTBLRAbias; - } - else { - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | HC_HTXnTBLAbias_HTXnTBLRAbias; - } - vmesa->regHTXnTBLRFog_0 = 0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 = 0x0 | ( 255<<16 ); - switch (texUnit1->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit1->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_InvTOPA; - break; - } - switch (texUnit1->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 8); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch (texUnit1->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif; - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_ADD_SIGNED : - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub; - vmesa->regHTXnTBLRFog_0 = 0x0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA| - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 = ( 255<<16 | 0<<8 |128 ); - switch (texUnit1->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit1->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv; - break; - } - switch (texUnit1->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 8); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch (texUnit1->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRFog_0 |= a; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif; - break; - } - switch ((GLint)(texUnit1->Combine.ScaleShiftA)) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_INTERPOLATE : - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - switch (texUnit1->Combine.OperandA[0]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_InvTOPA; - break; - } - switch (texUnit1->Combine.OperandA[1]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_InvTOPA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv; - break; - } - switch (texUnit1->Combine.OperandA[2]) { - case GL_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_TOPA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_InvTOPA; - break; - } - switch (texUnit1->Combine.SourceA[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 8); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif; - break; - } - switch (texUnit1->Combine.SourceA[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= a; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias; - vmesa->regHTXnTBLRFog_0 |= a; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif; - break; - } - switch (texUnit1->Combine.SourceA[2]) { - case GL_TEXTURE: - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a); - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 |= (a << 16); - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif; - break; - } - switch (texUnit1->Combine.ScaleShiftA) { - case 1: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No; - break; - case 2: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1; - break; - case 4: - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2; - break; - } - break; - case GL_DOT3_RGB : - case GL_DOT3_RGBA : - break; - } - break; + vmesa->regHTXnMPMD_1 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK); + vmesa->regHTXnMPMD_1 |= get_wrap_mode( texObj->WrapS, + texObj->WrapT ); - /*=* John Sheng [2003.7.18] texture add *=*/ - case GL_ADD: - switch(texImage->Format) { - case GL_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_LUMINANCE: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - /*=* John Sheng [2003.7.18] texenv *=*/ - /*vmesa->regHTXnTBLRAa_0 = 0x0;*/ - vmesa->regHTXnTBLRAa_0 = (255<<16) | (255<<8) | 255;; - vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16; - break; - case GL_RGB: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGBA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_COLOR_INDEX: - switch(texObj->Palette.Format) { - case GL_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA | - HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_LUMINANCE: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_LUMINANCE_ALPHA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - case GL_INTENSITY: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16; - break; - case GL_RGB: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - break; - case GL_RGBA: - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC | - HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif; - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLRAa_0 = 0x0; - vmesa->regHTXnTBLRFog_0 = 0x0; - break; - } - break; - } - break; - /*=* John Sheng [2003.7.18] texture dot3 *=*/ - case GL_DOT3_RGB : - case GL_DOT3_RGBA : - vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add | - HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 | - HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add | - HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No; - vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; - vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | - HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0; - vmesa->regHTXnTBLRFog_0 = 0x0; - vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | - HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA | - HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA | - HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA; - vmesa->regHTXnTBLRAa_0 = 0x0; - switch (texUnit1->Combine.OperandRGB[0]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC; - break; - } - switch (texUnit1->Combine.OperandRGB[1]) { - case GL_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC; - break; - case GL_ONE_MINUS_SRC_COLOR: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC; - break; - } - switch (texUnit1->Combine.SourceRGB[0]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC; - vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif; - break; - } - switch (texUnit1->Combine.SourceRGB[1]) { - case GL_TEXTURE: - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex; - break; - case GL_CONSTANT : - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g); - CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b); - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC; - vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b; - break; - case GL_PRIMARY_COLOR : - case GL_PREVIOUS : - vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif; - break; - } - break; - default: - break; - } + viaTexCombineState( vmesa, texUnit1->_CurrentCombine, 1 ); } vmesa->dirty |= VIA_UPLOAD_TEXTURE; + +#ifdef DEBUG + if (VIA_DEBUG) { + fprintf( stderr, "Csat_0 / Cop_0 = 0x%08x / 0x%08x\n", + vmesa->regHTXnTBLCsat_0, vmesa->regHTXnTBLCop_0 ); + fprintf( stderr, "Asat_0 = 0x%08x\n", + vmesa->regHTXnTBLAsat_0 ); + fprintf( stderr, "RCb_0 / RAa_0 = 0x%08x / 0x%08x\n", + vmesa->regHTXnTBLRCb_0, vmesa->regHTXnTBLRAa_0 ); + fprintf( stderr, "RCa_0 / RCc_0 = 0x%08x / 0x%08x\n", + vmesa->regHTXnTBLRCa_0, vmesa->regHTXnTBLRCc_0 ); + fprintf( stderr, "RCbias_0 = 0x%08x\n", + vmesa->regHTXnTBLRCbias_0 ); + } +#endif } else { if (ctx->Fog.Enabled) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c x11r682/xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c --- xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/src/mesa/drivers/dri/unichrome/via_texcombine.c 2004-12-15 02:51:00.000000000 +0100 @@ -0,0 +1,386 @@ +/* + * (C) Copyright IBM Corporation 2004 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * on the rights to use, copy, modify, merge, publish, distribute, sub + * license, and/or sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file via_texcombine.c + * Calculate texture combine hardware state. + * + * \author Ian Romanick + */ + +#include + +#include "glheader.h" +#include "context.h" +#include "macros.h" +#include "colormac.h" +#include "enums.h" +#include "dd.h" + +#include "mm.h" +#include "via_context.h" +#include "via_state.h" +#include "via_tex.h" +#include "via_vb.h" +#include "via_tris.h" +#include "via_ioctl.h" + +#include "swrast/swrast.h" +#include "array_cache/acache.h" +#include "tnl/tnl.h" +#include "swrast_setup/swrast_setup.h" + +#include "tnl/t_pipeline.h" + +#define VIA_USE_ALPHA (HC_XTC_Adif - HC_XTC_Dif) + +#define INPUT_A_SHIFT 14 +#define INPUT_B_SHIFT 7 +#define INPUT_C_SHIFT 0 +#define INPUT_BiasC_SHIFT 14 +#define INPUT_BiasA_SHIFT 3 + +#define CONST_ONE (HC_XTC_0 | HC_XTC_InvTOPC) + +static const unsigned color_operand_modifier[4] = { + 0, + HC_XTC_InvTOPC, + VIA_USE_ALPHA, + VIA_USE_ALPHA | HC_XTC_InvTOPC, +}; + +static const unsigned alpha_operand_modifier[2] = { + 0, HC_XTA_InvTOPA +}; + +static const unsigned c_shift_table[3] = { + HC_HTXnTBLCshift_No, HC_HTXnTBLCshift_1, HC_HTXnTBLCshift_2 +}; + +static const unsigned a_shift_table[3] = { + HC_HTXnTBLAshift_No, HC_HTXnTBLAshift_1, HC_HTXnTBLAshift_2 +}; + + +/** + * Calculate the hardware state for the specified texture combine mode + * + * \bug + * For the alpha combine, \c GL_CONSTANT is still probably wrong. + * + * \bug + * All forms of DOT3 bumpmapping are completely untested, and are most + * likely wrong. + * + * \bug + * This code still fails progs/demos/texenv for all modes with \c GL_ALPHA + * textures. This was also the case with the code that Via supplied. It + * also fails for \c GL_REPLACE with \c GL_RGBA textures. Everything else + * that texenv tests looks good. + */ +void +viaTexCombineState( viaContextPtr vmesa, + const struct gl_tex_env_combine_state * combine, + unsigned unit ) +{ + unsigned color_arg[3]; + unsigned alpha_arg[3]; + unsigned color = 0; + unsigned alpha = 0; + unsigned bias = 0; + unsigned op = 0; + unsigned a_shift = combine->ScaleShiftA; + unsigned c_shift = combine->ScaleShiftRGB; + unsigned i; + unsigned constant_color[3]; + unsigned ordered_constant_color[4]; + unsigned constant_alpha = 0; + unsigned bias_alpha = 0; + const struct gl_texture_unit const * texUnit = & vmesa->glCtx->Texture.Unit[unit]; + unsigned env_color[4]; + + + CLAMPED_FLOAT_TO_UBYTE(env_color[0], texUnit->EnvColor[0]); + CLAMPED_FLOAT_TO_UBYTE(env_color[1], texUnit->EnvColor[1]); + CLAMPED_FLOAT_TO_UBYTE(env_color[2], texUnit->EnvColor[2]); + CLAMPED_FLOAT_TO_UBYTE(env_color[3], texUnit->EnvColor[3]); + + (void) memset( constant_color, 0, sizeof( constant_color ) ); + (void) memset( ordered_constant_color, 0, sizeof( ordered_constant_color ) ); + + for ( i = 0 ; i < combine->_NumArgsRGB ; i++ ) { + const GLint op = combine->OperandRGB[i] - GL_SRC_COLOR; + + switch ( combine->SourceRGB[i] ) { + case GL_TEXTURE: + color_arg[i] = HC_XTC_Tex; + color_arg[i] += color_operand_modifier[op]; + break; + case GL_CONSTANT: + color_arg[i] = HC_XTC_HTXnTBLRC; + + switch( op ) { + case 0: + constant_color[i] = ((env_color[0] << 16) + | (env_color[1] << 8) + | env_color[2]); + break; + case 1: + constant_color[i] = ~((env_color[0] << 16) + | (env_color[1] << 8) + | env_color[2]) & 0x00ffffff; + break; + case 2: + constant_color[i] = ((env_color[3] << 16) + | (env_color[3] << 8) + | env_color[3]); + break; + case 3: + constant_color[i] = ~((env_color[3] << 16) + | (env_color[3] << 8) + | env_color[3]) & 0x00ffffff; + break; + } + break; + case GL_PRIMARY_COLOR: + color_arg[i] = HC_XTC_Dif; + color_arg[i] += color_operand_modifier[op]; + break; + case GL_PREVIOUS: + color_arg[i] = (unit == 0) ? HC_XTC_Dif : HC_XTC_Cur; + color_arg[i] += color_operand_modifier[op]; + break; + } + } + + for ( i = 0 ; i < combine->_NumArgsA ; i++ ) { + const GLint op = combine->OperandA[i] - GL_SRC_ALPHA; + + switch ( combine->SourceA[i] ) { + case GL_TEXTURE: + alpha_arg[i] = HC_XTA_Atex; + alpha_arg[i] += alpha_operand_modifier[op]; + break; + case GL_CONSTANT: + alpha_arg[i] = HC_XTA_HTXnTBLRA; + constant_alpha = (op == 0) + ? env_color[3] : ~(env_color[3]) & 0x000000ff; + break; + case GL_PRIMARY_COLOR: + alpha_arg[i] = HC_XTA_Adif; + alpha_arg[i] += alpha_operand_modifier[op]; + break; + case GL_PREVIOUS: + alpha_arg[i] = (unit == 0) ? HC_XTA_Adif : HC_XTA_Acur; + alpha_arg[i] += alpha_operand_modifier[op]; + break; + } + } + + + /* On the Unichrome, all combine operations take on some form of: + * + * A * (B op Bias) + C + * + * 'op' can be selected as add, subtract, min, max, or mask. The min, max + * and mask modes are currently unused. With the exception of DOT3, all + * standard GL_COMBINE modes can be implemented simply by selecting the + * correct inputs for A, B, C, and Bias and the correct operation for op. + */ + + color = HC_HTXnTBLCsat_MASK; + alpha = HC_HTXnTBLAsat_MASK; + + switch( combine->ModeRGB ) { + /* A = 0, B = 0, C = arg0, Bias = 0 + */ + case GL_REPLACE: + bias |= (color_arg[0] << INPUT_BiasC_SHIFT); + ordered_constant_color[3] = constant_color[0]; + break; + + /* A = arg[0], B = arg[1], C = 0, Bias = 0 + */ + case GL_MODULATE: + color |= (color_arg[0] << INPUT_A_SHIFT) + | (color_arg[1] << INPUT_B_SHIFT); + + ordered_constant_color[0] = constant_color[0]; + ordered_constant_color[1] = constant_color[1]; + break; + + /* A = 1.0, B = arg[0], C = 0, Bias = arg[1] + */ + case GL_ADD: + case GL_SUBTRACT: + if ( combine->ModeRGB == GL_SUBTRACT ) { + op |= HC_HTXnTBLCop_Sub; + } + + color |= (color_arg[0] << INPUT_B_SHIFT) + | (CONST_ONE << INPUT_A_SHIFT); + + bias |= (color_arg[1] << INPUT_BiasC_SHIFT); + ordered_constant_color[1] = constant_color[0]; + ordered_constant_color[3] = constant_color[1]; + break; + + /* A = 0, B = arg[0], C = arg[1], Bias = 0.5 + */ + case GL_ADD_SIGNED: + color |= (color_arg[0] << INPUT_B_SHIFT) + | (color_arg[1] << INPUT_C_SHIFT); + bias |= HC_HTXnTBLCbias_HTXnTBLRC; + op |= HC_HTXnTBLCop_Sub; + + ordered_constant_color[1] = constant_color[0]; + ordered_constant_color[2] = constant_color[1]; + ordered_constant_color[3] = 0x00808080; + break; + + /* A = arg[2], B = arg[0], C = arg[1], Bias = arg[1] + */ + case GL_INTERPOLATE: + op |= HC_HTXnTBLCop_Sub; + + color |= (color_arg[2] << INPUT_A_SHIFT) | + (color_arg[0] << INPUT_B_SHIFT) | + (color_arg[1] << INPUT_C_SHIFT); + bias |= (color_arg[1] << INPUT_BiasC_SHIFT); + + ordered_constant_color[0] = constant_color[2]; + ordered_constant_color[1] = constant_color[0]; + ordered_constant_color[2] = constant_color[1]; + ordered_constant_color[3] = constant_color[1]; + break; + + /* At this point this code is completely untested. It appears that the + * Unichrome has the same limitation as the Radeon R100. The only + * supported post-scale when doing DOT3 bumpmapping is 1x. + */ + case GL_DOT3_RGB_EXT: + case GL_DOT3_RGBA_EXT: + case GL_DOT3_RGB: + case GL_DOT3_RGBA: + c_shift = 2; + a_shift = 2; + color |= (color_arg[0] << INPUT_A_SHIFT) | + (color_arg[1] << INPUT_B_SHIFT); + op |= HC_HTXnTBLDOT4; + break; + } + + + /* The alpha blend stage has the annoying quirk of not having a + * hard-wired 0 input, like the color stage. As a result, we have + * to program the constant register with 0 and use that as our + * 0 input. + */ + + switch( combine->ModeA ) { + /* A = 0, B = 0, C = 0, Bias = arg0 + */ + case GL_REPLACE: + bias |= (alpha_arg[0] << INPUT_BiasA_SHIFT); + + alpha |= (HC_XTA_HTXnTBLRA << INPUT_A_SHIFT) | + (HC_XTA_HTXnTBLRA << INPUT_B_SHIFT) | + (HC_XTA_HTXnTBLRA << INPUT_C_SHIFT); + break; + + /* A = arg[0], B = arg[1], C = 0, Bias = 0 + */ + case GL_MODULATE: + alpha |= (alpha_arg[1] << INPUT_A_SHIFT) + | (alpha_arg[0] << INPUT_B_SHIFT) + | (HC_XTA_HTXnTBLRA << INPUT_C_SHIFT); + + bias |= (HC_XTA_HTXnTBLRA << INPUT_BiasA_SHIFT); + break; + + /* A = 0, B = arg[0], C = 0, Bias = arg[1] + */ + case GL_ADD: + case GL_SUBTRACT: + if ( combine->ModeA == GL_SUBTRACT ) { + op |= HC_HTXnTBLAop_Sub; + } + + alpha |= (HC_XTA_HTXnTBLRA << INPUT_A_SHIFT) | + (alpha_arg[0] << INPUT_B_SHIFT) | + (HC_XTA_HTXnTBLRA << INPUT_C_SHIFT); + bias |= (alpha_arg[1] << INPUT_BiasA_SHIFT); + break; + + /* A = 0, B = arg[0], C = arg[1], Bias = 0.5 + */ + case GL_ADD_SIGNED: + op |= HC_HTXnTBLAop_Sub; + + alpha |= (alpha_arg[0] << INPUT_B_SHIFT) + | (alpha_arg[1] << INPUT_C_SHIFT); + bias |= (HC_XTA_HTXnTBLRA << INPUT_BiasA_SHIFT); + + bias_alpha = 0x00000080; + break; + + /* A = arg[2], B = arg[0], C = arg[1], Bias = arg[1] + */ + case GL_INTERPOLATE: + op |= HC_HTXnTBLAop_Sub; + + alpha |= (alpha_arg[2] << INPUT_A_SHIFT) | + (alpha_arg[0] << INPUT_B_SHIFT) | + (alpha_arg[1] << INPUT_C_SHIFT); + bias |= (alpha_arg[1] << INPUT_BiasA_SHIFT); + break; + } + + + op |= c_shift_table[ c_shift ] | a_shift_table[ a_shift ]; + + + if ( unit == 0 ) { + vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog; + + vmesa->regHTXnTBLCsat_0 = color; + vmesa->regHTXnTBLAsat_0 = alpha; + vmesa->regHTXnTBLCop_0 = op | bias; + vmesa->regHTXnTBLRAa_0 = bias_alpha | (constant_alpha << 16); + + vmesa->regHTXnTBLRCa_0 = ordered_constant_color[0]; + vmesa->regHTXnTBLRCb_0 = ordered_constant_color[1]; + vmesa->regHTXnTBLRCc_0 = ordered_constant_color[2]; + vmesa->regHTXnTBLRCbias_0 = ordered_constant_color[3]; + } + else { + vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog; + + vmesa->regHTXnTBLCsat_1 = color; + vmesa->regHTXnTBLAsat_1 = alpha; + vmesa->regHTXnTBLCop_1 = op | bias; + vmesa->regHTXnTBLRAa_1 = bias_alpha | (constant_alpha << 16); + } +} + diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c x11r682/xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c --- xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c 2004-06-16 11:18:45.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/ggi/default/linear.c 2004-12-15 02:51:00.000000000 +0100 @@ -39,7 +39,7 @@ ((color[GCOMP]>>GS) << B) | \ ((color[BCOMP]>>BS))) -#define FLIP(coord) (LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y-(coord) - 1) +#define FLIP(coord) (LIBGGI_VIRTY(ggi_ctx->ggi_visual) - (coord) - 1) /**********************************************************************/ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c x11r682/xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c --- xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c 2004-06-16 11:18:46.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_mode.c 2004-12-15 02:51:01.000000000 +0100 @@ -50,15 +50,13 @@ int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *arguments) { - struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis); + struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis); - strcpy(arguments, ""); + arguments = '\0'; - switch(num) - { - case 0: - if (priv->oldpriv->have_accel) - { + switch(num) { + case 0: + if (priv->oldpriv->have_accel) { strcpy(apiname, priv->oldpriv->accel); return 0; } @@ -70,35 +68,33 @@ static int do_setmode(ggi_visual *vis) { - struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis); + struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis); int err, id; - char libname[256], libargs[256]; + char libname[GGI_API_MAXLEN], libargs[GGI_API_MAXLEN]; ggi_graphtype gt; _ggiZapMode(vis, ~GGI_DL_OPDISPLAY); priv->have_accel = 0; - for (id = 1; GGIMesa_fbdev_getapi(vis, id, libname, libargs) == 0; id++) - { - if (_ggiOpenDL(vis, libname, libargs, NULL) == 0) - { - fprintf(stderr, "display-fbdev-mesa: Error opening the " + + for (id = 1; GGIMesa_fbdev_getapi(vis, id, libname, libargs) == 0; id++) { + if (_ggiOpenDL(vis, libname, libargs, NULL) == 0) { + GGIMESADPRINT_LIBS(stderr, "display-fbdev-mesa: Error opening the " "%s (%s) library.\n", libname, libargs); return GGI_EFATAL; } - GGIMESADPRINT_CORE("Success in loading %s (%s)\n", libname, libargs); + GGIMESADPRINT_CORE("Success in loading %s (%s)\n", + libname, libargs); } if (priv->oldpriv->accel && _ggiOpenDL(vis, priv->accel, NULL, NULL) != 0) { priv->have_accel = 1; - } - else - { + } else { priv->have_accel = 0; } vis->accelactive = 0; - + ggiIndicateChange(vis, GGI_CHG_APILIST); GGIMESADPRINT_CORE("display-fbdev-mesa: do_setmode SUCCESS\n"); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c x11r682/xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c --- xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c 2004-06-16 11:18:46.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/ggi/display/fbdev_visual.c 2004-12-15 02:51:01.000000000 +0100 @@ -38,7 +38,6 @@ #include #include -#define GGI_SYMNAME_PREFIX "MesaGGIdl_" #ifdef HAVE_SYS_VT_H #include @@ -68,69 +67,28 @@ #define NUM_ACCELS (sizeof(accel_strings)/sizeof(accel_info)) -/* FIXME: These should really be defined in the make system */ -#define CONF_FILE "/usr/local/etc/ggi/mesa/targets/fbdev.conf" -void *_configHandle; -char confstub[512] = CONF_FILE; -char *conffile = confstub; -static int changed(ggi_visual_t vis, int whatchanged) -{ - switch (whatchanged) - { - case GGI_CHG_APILIST: - { - char api[256]; - char args[256]; - int i; - const char *fname; - ggi_dlhandle *lib; - - for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++) - { - strcat(api, "-mesa"); - fname = ggMatchConfig(_configHandle, api, NULL); - if (fname == NULL) - { - /* No special implementation for this sublib */ - continue; - } - - lib = ggiExtensionLoadDL(vis, fname, args, NULL, GGI_SYMNAME_PREFIX); - } - } - break; - } - return 0; -} -int GGIdlinit(ggi_visual *vis, const char *args, void *argptr) +static int GGIopen(ggi_visual *vis, struct ggi_dlhandle *dlh, + const char *args, void *argptr, uint32 *dlret) { - struct fbdev_priv_mesa *priv; int err; + struct fbdev_priv_mesa *priv; ggifunc_getapi *oldgetapi; - GGIMESA_PRIVATE(vis) = priv = malloc(sizeof(struct fbdev_priv_mesa)); - if (priv == NULL) { - fprintf(stderr, "Failed to allocate fbdev private data\n"); - return GGI_DL_ERROR; - } - + priv->oldpriv = LIBGGI_PRIVATE(vis); /* Hook back */ - - err = ggLoadConfig(conffile, &_configHandle); - if (err != GGI_OK) - { - GGIMESADPRINT_CORE("display-fbdev: Couldn't open %s\n", conffile); - return err; + + GGIMESA_PRIV(vis) = priv = malloc(sizeof(struct fbdev_priv_mesa)); + if (priv == NULL) { + fprintf(stderr, "GGIMesa: Failed to allocate fbdev private data\n"); + return GGI_ENOMEM; } - LIBGGI_MESAEXT(vis)->update_state = NULL; - LIBGGI_MESAEXT(vis)->setup_driver = NULL; - oldgetapi = vis->opdisplay->getapi; vis->opdisplay->getapi = GGIMesa_fbdev_getapi; changed(vis, GGI_CHG_APILIST); + /* If the accel sublibs didn't sucessfuly hook a driver, * back up and keep looking */ if ((LIBGGI_MESAEXT(vis)->update_state == NULL) || @@ -139,12 +97,42 @@ vis->opdisplay->getapi = oldgetapi; } + *dlret = GGI_DL_EXTENSION; return 0; } -int GGIdlcleanup(ggi_visual *vis) + +static int GGIclose(ggi_visual *vis, struct ggi_dlhandle *dlh) { + struct fbdev_priv_mesa *priv = GGIMESA_PRIV(vis); + + if (priv) { + LIBGGI_PRIVATE(vis) = priv->oldpriv; + free(priv); + } + return 0; } + +int MesaGGIdl_fbdev_mesa(int func, void **funcptr) +{ + switch (func) { + case GGIFUNC_open: + *funcptr = GGIopen; + return 0; + case GGIFUNC_exit: + *funcptr = NULL; + return 0; + case GGIFUNC_close: + *funcptr = GGIclose; + return 0; + default: + *funcptr = NULL; + } + + return GGI_ENOTFOUND; +} + + #include diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c x11r682/xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c --- xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c 2004-06-16 11:18:45.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/ggi/ggimesa.c 2004-12-15 02:51:00.000000000 +0100 @@ -43,19 +43,56 @@ #include "texformat.h" #include "texstore.h" -ggi_extid ggiMesaID = -1; +/* We use LibGG to manage config files */ +#include + + +/* XXX: Those #defines should be provided via + * config.h + */ +#define GGIMESAPATHTAG "pAtHTAg" +#define GGIMESACONFDIR "pAtHTAg/usr/local/etc/ggi" +#define GGIMESATAGLEN 7 +#define GGIMESACONFFILE "ggimesa.conf" + + +/* Static variables + */ static int _ggimesaLibIsUp = 0; static void *_ggimesaConfigHandle; - -static char ggimesaconffile[] = GGIMESACONFFILE; +static char _ggimesaconfstub[512] = GGIMESACONFDIR; +static char *_ggimesaconfdir = _ggimesaconfstub+GGIMESATAGLEN; int _ggimesaDebugSync = 0; uint32 _ggimesaDebugState = 0; -static void gl_ggiUpdateState(GLcontext *ctx, GLuint new_state); -static int changed(ggi_visual_t vis, int whatchanged); +/* Extension ID. Defaulting to -1 should make segfault on abuse more likely... + */ +ggi_extid _ggiMesaID = -1; + + +#define SUBLIB_PREFIX "MesaGGIdl_" + + +/* + * Returns the directory where global config files are kept + */ + +const char *ggiMesaGetConfDir(void) +{ +#ifdef __WIN32__ + /* On Win32 we allow overriding of the compiled in path. */ + const char *envdir = getenv("GGI_CONFDIR"); + if (envdir) return envdir; +#endif + return _ggimesaconfdir; +} + + +/* Dummy function which returns -1 + We use this to reset the function pointers */ static int _ggi_error(void) { GGIMESADPRINT_CORE("_ggi_error() called\n"); @@ -63,6 +100,147 @@ return -1; } + +static int changed(ggi_visual_t vis, int whatchanged) +{ + GLcontext *ctx; + ctx = _mesa_get_current_context(); + + GGIMESADPRINT_CORE("changed() called\n"); + + switch (whatchanged) { + case GGI_CHG_APILIST: + { + char api[GGI_MAX_APILEN]; + char args[GGI_MAX_APILEN]; + int i; + const char *fname; + ggi_dlhandle *lib; + + GLvisual *gl_vis = &(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual); + GLframebuffer *gl_fb = &(LIBGGI_MESAEXT(vis)->mesa_buffer); + + /* Initialize the framebuffer to provide all necessary + buffers in software. The target libraries that are loaded + next are free to modify this according to their + capabilities. + */ + /* FIXME: if the target changes capabilities we'll leak + swrast's memory !!! Need to deallocate first */ + _mesa_initialize_framebuffer(gl_fb, gl_vis, + gl_vis->depthBits > 0, + gl_vis->stencilBits > 0, + gl_vis->accumRedBits > 0, + gl_vis->alphaBits > 0); + + for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++) { + strcat(api, "-mesa"); + GGIMESADPRINT_CORE("GGIMesa: looking for" + "a sublib named %s\n", api); + fname = ggMatchConfig(_ggimesaConfigHandle, api, NULL); + if (fname == NULL) { + /* No special implementation for this sublib */ + continue; + } + lib = ggiExtensionLoadDL(vis, fname, args, NULL, + SUBLIB_PREFIX); + } + + /* The targets have cleared everything they can do from + the framebuffer structure so we provide the rest in sw + */ + _swrast_alloc_buffers(gl_fb); + + break; + } + } + return 0; +} + + +int ggiMesaInit() +{ + int err; + char *str; + char *conffile; + + GGIMESADPRINT_CORE("ggiMesaInit() called\n"); + + _ggimesaLibIsUp++; + if (_ggimesaLibIsUp > 1) return 0; /* Initialize only at first call */ + + str = getenv("GGIMESA_DEBUGSYNC"); + if (str != NULL) { + _ggimesaDebugSync = 1; + } + + str = getenv("GGIMESA_DEBUG"); + if (str != NULL) { + _ggimesaDebugState = atoi(str); + GGIMESADPRINT_CORE("%s Debugging=%d\n", + _ggimesaDebugSync ? "sync" : "async", + _ggimesaDebugState); + } + + + conffile = malloc(strlen(ggiMesaGetConfDir()) + 1 + + strlen(GGIMESACONFFILE) +1); + if (conffile == NULL) { + fprintf(stderr, "GGIMesa: unable to allocate memory for config filename.\n"); + return GGI_ENOMEM; + } + sprintf(conffile, "%s%c%s", + ggiMesaGetConfDir(), '/', GGIMESACONFFILE); + err = ggLoadConfig(conffile, &_ggimesaConfigHandle); + if (err != GGI_OK) { + fprintf(stderr, "GGIMesa: Couldn't open %s\n", + conffile); + free(conffile); + _ggimesaLibIsUp--; + return err; + } + free(conffile); + + _ggiMesaID = ggiExtensionRegister("GGIMesa", + sizeof(struct ggi_mesa_ext), changed); + if (_ggiMesaID < 0) { + fprintf(stderr, "GGIMesa: failed to register as extension\n"); + _ggimesaLibIsUp--; + ggFreeConfig(_ggimesaConfigHandle); + return _ggiMesaID; + } + + return 0; +} + +int ggiMesaExit(void) +{ + int rc; + + GGIMESADPRINT_CORE("ggiMesaExit() called\n"); + + if (!_ggimesaLibIsUp) return -1; + + if (_ggimesaLibIsUp > 1) { + /* Exit only at last call */ + _ggimesaLibIsUp--; + return 0; + } + + rc = ggiExtensionUnregister(_ggiMesaID); + ggFreeConfig(_ggimesaConfigHandle); + + _ggimesaLibIsUp = 0; + + return rc; +} + + + + +static void gl_ggiUpdateState(GLcontext *ctx, GLuint new_state); + + static void gl_ggiGetSize(GLframebuffer *fb, GLuint *width, GLuint *height) { /* FIXME: this is a hack to work around the new interface */ @@ -73,8 +251,8 @@ GGIMESADPRINT_CORE("gl_ggiGetSize() called\n"); - *width = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.x; - *height = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y; + *width = LIBGGI_VIRTX(ggi_ctx->ggi_visual); + *height = LIBGGI_VIRTY(ggi_ctx->ggi_visual); printf("returning %d, %d\n", *width, *height); } @@ -91,9 +269,9 @@ static void gl_ggiSetClearIndex(GLcontext *ctx, GLuint ci) { ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx; - + GGIMESADPRINT_CORE("gl_ggiSetClearIndex() called\n"); - + ggiSetGCForeground(ggi_ctx->ggi_visual, ci); ggi_ctx->clearcolor = (ggi_pixel)ci; } @@ -126,19 +304,15 @@ GGIMESADPRINT_CORE("gl_ggiClear() called\n"); - if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) - { + if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) { ggiSetGCForeground(ggi_ctx->ggi_visual, ggi_ctx->clearcolor); - if (all) - { + if (all) { int w, h; - w = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.x; - h = LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y; + w = LIBGGI_VIRTX(ggi_ctx->ggi_visual); + h = LIBGGI_VIRTX(ggi_ctx->ggi_visual); ggiDrawBox(ggi_ctx->ggi_visual, 0, 0, w, h); - } - else - { + } else { ggiDrawBox(ggi_ctx->ggi_visual, x, y, //FLIP(y), width, height); } @@ -156,7 +330,7 @@ static GLboolean gl_ggiSetBuffer(GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit) { ggi_mesa_context_t ggi_ctx = (ggi_mesa_context_t)ctx->DriverCtx; - + printf("set read %d\n", bufferBit); GGIMESADPRINT_CORE("gl_ggiSetBuffer() called\n"); @@ -184,11 +358,12 @@ static const GLubyte * gl_ggiGetString(GLcontext *ctx, GLenum name) { GGIMESADPRINT_CORE("gl_ggiGetString() called\n"); - - if (name == GL_RENDERER) - return (GLubyte *) "Mesa GGI"; - else + + if (name == GL_RENDERER) { + return (GLubyte *) "Mesa GGI"; + } else { return NULL; + } } static void gl_ggiFlush(GLcontext *ctx) @@ -219,7 +394,7 @@ static void gl_ggiSetupPointers(GLcontext *ctx) { TNLcontext *tnl; - + GGIMESADPRINT_CORE("gl_ggiSetupPointers() called\n"); /* General information */ @@ -293,13 +468,13 @@ *g = 0; *b = 0; - for(i = 0; i < sizeof(ggi_pixel)*8; ++i){ + for(i = 0; i < sizeof(ggi_pixel)*8; ++i) { int mask = 1 << i; - if(LIBGGI_PIXFMT(vis)->red_mask & mask) + if (LIBGGI_PIXFMT(vis)->red_mask & mask) ++(*r); - if(LIBGGI_PIXFMT(vis)->green_mask & mask) + if (LIBGGI_PIXFMT(vis)->green_mask & mask) ++(*g); - if(LIBGGI_PIXFMT(vis)->blue_mask & mask) + if (LIBGGI_PIXFMT(vis)->blue_mask & mask) ++(*b); } @@ -310,84 +485,14 @@ printf("rgb (%d, %d, %d) db %d, rgb %d ci %d\n",*r,*g,*b,*db,*rgb,*ci); } -int ggiMesaInit() -{ - int err; - char *str; - - GGIMESADPRINT_CORE("ggiMesaInit() called\n"); - - str = getenv("GGIMESA_DEBUG"); - if (str != NULL) { - _ggimesaDebugState = atoi(str); - GGIMESADPRINT_CORE("Debugging=%d\n", _ggimesaDebugState); - } - - str = getenv("GGIMESA_DEBUGSYNC"); - if (str != NULL) { - _ggimesaDebugSync = 1; - } - - GGIMESADPRINT_CORE("ggiMesaInit()\n"); - - _ggimesaLibIsUp++; - if (_ggimesaLibIsUp > 1) - return 0; /* Initialize only at first call */ - - err = ggLoadConfig(ggimesaconffile, &_ggimesaConfigHandle); - if (err != GGI_OK) - { - GGIMESADPRINT_CORE("GGIMesa: Couldn't open %s\n", - ggimesaconffile); - _ggimesaLibIsUp--; - return err; - } - - ggiMesaID = ggiExtensionRegister("GGIMesa", - sizeof(struct ggi_mesa_ext), changed); - - if (ggiMesaID < 0) - { - GGIMESADPRINT_CORE("GGIMesa: failed to register as extension\n"); - _ggimesaLibIsUp--; - ggFreeConfig(_ggimesaConfigHandle); - return ggiMesaID; - } - - return 0; -} - -int ggiMesaExit(void) -{ - int rc; - - GGIMESADPRINT_CORE("ggiMesaExit() called\n"); - - if (!_ggimesaLibIsUp) - return -1; - - if (_ggimesaLibIsUp > 1) - { - /* Exit only at last call */ - _ggimesaLibIsUp--; - return 0; - } - - rc = ggiExtensionUnregister(ggiMesaID); - ggFreeConfig(_ggimesaConfigHandle); - - _ggimesaLibIsUp = 0; - - return rc; -} int ggiMesaAttach(ggi_visual_t vis) { int rc; - + GGIMESADPRINT_CORE("ggiMesaAttach() called\n"); - - rc = ggiExtensionAttach(vis, ggiMesaID); + + rc = ggiExtensionAttach(vis, _ggiMesaID); if (rc == 0) { int r, g, b, ci; @@ -419,7 +524,7 @@ { GGIMESADPRINT_CORE("ggiMesaDetach() called\n"); - return ggiExtensionDetach(vis, ggiMesaID); + return ggiExtensionDetach(vis, _ggiMesaID); } int ggiMesaExtendVisual(ggi_visual_t vis, GLboolean alpha_flag, @@ -531,10 +636,10 @@ if (ctx->gl_ctx->Viewport.Width == 0) { _mesa_Viewport(0, 0, - LIBGGI_MODE(vis)->visible.x, - LIBGGI_MODE(vis)->visible.y); - ctx->gl_ctx->Scissor.Width = LIBGGI_MODE(vis)->visible.x; - ctx->gl_ctx->Scissor.Height = LIBGGI_MODE(vis)->visible.y; + LIBGGI_VIRTX(vis), + LIBGGI_VIRTY(vis)); + ctx->gl_ctx->Scissor.Width = LIBGGI_VIRTX(vis); + ctx->gl_ctx->Scissor.Height = LIBGGI_VIRTY(vis); } } @@ -579,6 +684,7 @@ _swsetup_InvalidateState(ctx, new_state); _tnl_InvalidateState(ctx, new_state); + /* XXX: Better use an assertion that bails out here on failure */ if (!LIBGGI_MESAEXT(ggi_ctx->ggi_visual)->update_state) { GGIMESADPRINT_CORE("update_state == NULL!\n"); GGIMESADPRINT_CORE("Please check your config files!\n"); @@ -588,59 +694,3 @@ LIBGGI_MESAEXT(ggi_ctx->ggi_visual)->update_state(ggi_ctx); } -static int changed(ggi_visual_t vis, int whatchanged) -{ - GLcontext *ctx; - ctx = _mesa_get_current_context(); - - GGIMESADPRINT_CORE("changed() called\n"); - - switch (whatchanged) - { - case GGI_CHG_APILIST: - { - char api[256]; - char args[256]; - int i; - const char *fname; - ggi_dlhandle *lib; - GLvisual *gl_vis=&(LIBGGI_MESAEXT(vis)->mesa_visual.gl_visual); - GLframebuffer *gl_fb = &(LIBGGI_MESAEXT(vis)->mesa_buffer); - - /* Initialize the framebuffer to provide all necessary - buffers in software. The target libraries that are loaded - next are free to modify this according to their - capabilities. - */ - /* FIXME: if the target changes capabilities we'll leak - swrast's memory !!! Need to deallocate first */ - _mesa_initialize_framebuffer(gl_fb, gl_vis, - gl_vis->depthBits > 0, - gl_vis->stencilBits > 0, - gl_vis->accumRedBits > 0, - gl_vis->alphaBits > 0); - - for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++) - { - strcat(api, "-mesa"); - fname = ggMatchConfig(_ggimesaConfigHandle, api, NULL); - if (fname == NULL) - { - /* No special implementation for this sublib */ - continue; - } - lib = ggiExtensionLoadDL(vis, fname, args, NULL, - GGI_SYMNAME_PREFIX); - } - - /* The targets have cleared everything they can do from - the framebuffer structure so we provide the rest in sw - */ - _swrast_alloc_buffers(gl_fb); - - break; - } - } - return 0; -} - diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h x11r682/xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h --- xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h 2004-06-16 11:18:46.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa.h 2004-12-15 02:51:01.000000000 +0100 @@ -75,7 +75,7 @@ ggi_pixel color; /* Current color or index*/ ggi_pixel clearcolor; - void *private; + void *priv; }; #define SHIFT (GGI_COLOR_PRECISION - 8) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h x11r682/xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h --- xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h 2004-06-16 11:18:46.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/ggi/include/ggi/mesa/ggimesa_int.h 2004-12-15 02:51:01.000000000 +0100 @@ -4,9 +4,8 @@ #include #include "ggimesa.h" -#define GGI_SYMNAME_PREFIX "MesaGGIdl_" -extern ggi_extid ggiMesaID; +extern ggi_extid _ggiMesaID; ggifunc_setmode GGIMesa_setmode; ggifunc_getapi GGIMesa_getapi; @@ -39,7 +38,7 @@ void *private; } ggi_mesa_ext_t; -#define LIBGGI_MESAEXT(vis) ((ggi_mesa_ext_t *)LIBGGI_EXT(vis,ggiMesaID)) -#define GGIMESA_PRIVATE(vis) ((LIBGGI_MESAEXT(vis)->private)) +#define LIBGGI_MESAEXT(vis) ((ggi_mesa_ext_t *)LIBGGI_EXT(vis,_ggiMesaID)) +#define GGIMESA_PRIV(vis) ((LIBGGI_MESAEXT(vis)->priv)) #endif /* _GGI_MISC_INT_H */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fx.rc x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fx.rc --- xc/extras/Mesa/src/mesa/drivers/glide/fx.rc 2004-08-28 06:27:42.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fx.rc 2004-12-15 02:51:01.000000000 +0100 @@ -5,10 +5,10 @@ #define HWSTR "3dfx Voodoo Graphics, Voodoo^2, Voodoo Banshee, Velocity 100/200, Voodoo3, Voodoo4, Voodoo5" #define COPYRIGHTSTR "Copyright \251 Brian E. Paul" -#define VERSIONSTR "6.1.0.9" +#define VERSIONSTR "6.2.0.1" #define MANVERSION 6 -#define MANREVISION 1 -#define BUILD_NUMBER 9 +#define MANREVISION 2 +#define BUILD_NUMBER 1 VS_VERSION_INFO VERSIONINFO FILEVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c 2004-08-28 06:27:42.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxapi.c 2004-12-15 02:51:01.000000000 +0100 @@ -356,11 +356,7 @@ } grSstSelect(glbCurrentBoard); - /*grEnable(GR_OPENGL_MODE_EXT);*/ /* ZZZ: trick to make GL happy. - Glide3 will unmap memory for card when grSstWinClose is called. - This also forces the SLI band height to be 32 (above 1024x768) or 16 - and disables the splash screen due to y-origin swapping. - Note: We only want the former. */ + /*grEnable(GR_OPENGL_MODE_EXT);*/ /* [koolsmoky] */ voodoo = &glbHWConfig.SSTs[glbCurrentBoard]; fxMesa = (fxMesaContext)CALLOC_STRUCT(tfxMesaContext); @@ -393,7 +389,7 @@ case GR_SSTTYPE_SST96: case GR_SSTTYPE_Banshee: fxMesa->bgrOrder = GL_TRUE; - fxMesa->snapVertices = GL_TRUE; + fxMesa->snapVertices = (getenv("MESA_FX_NOSNAP") == NULL); break; case GR_SSTTYPE_Voodoo2: fxMesa->bgrOrder = GL_TRUE; @@ -411,7 +407,7 @@ fxMesa->snapVertices = GL_FALSE; break; } - /* ZZZ TO DO: Add the old SLI/AA settings for Napalm. */ + /* XXX todo - Add the old SLI/AA settings for Napalm. */ switch(voodoo->numChips) { case 4: /* 4 chips */ switch(sliaa) { @@ -526,8 +522,6 @@ goto errorhandler; } - /* ZZZ TODO: check if there is enough fbRam */ - /* Tips: * 1. we don't bother setting/checking AUX for stencil, because we'll decide * later whether we have HW stencil, based on depth buffer (thus AUX is @@ -644,7 +638,7 @@ fxMesa->snapVertices ? "" : "no "); } - sprintf(fxMesa->rendererString, "Mesa %s v0.61 %s%s", + sprintf(fxMesa->rendererString, "Mesa %s v0.62 %s%s", grGetString(GR_RENDERER), grGetString(GR_HARDWARE), ((fxMesa->type < GR_SSTTYPE_Voodoo4) && (voodoo->numChips > 1)) ? " SLI" : ""); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c 2004-08-28 06:27:42.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxdd.c 2004-12-15 02:51:01.000000000 +0100 @@ -160,26 +160,14 @@ (int) x, (int) y, (int) width, (int) height ); } - /* Need this check to respond to glScissor and clipping updates */ - /* should also take care of FX_NEW_COLOR_MASK, FX_NEW_STENCIL, depth? */ - if (fxMesa->new_state & FX_NEW_SCISSOR) { - fxSetupScissor(ctx); - fxMesa->new_state &= ~FX_NEW_SCISSOR; - } + /* we can't clear accum buffers nor stereo */ + mask &= ~(DD_ACCUM_BIT | DD_FRONT_RIGHT_BIT | DD_BACK_RIGHT_BIT); - /* we can't clear accum buffers */ - mask &= ~(DD_ACCUM_BIT); - - /* - * As per GL spec, stencil masking should be obeyed when clearing - */ - if (mask & DD_STENCIL_BIT) { - if (!fxMesa->haveHwStencil || fxMesa->unitsState.stencilWriteMask != 0xff) { - /* Napalm seems to have trouble with stencil write masks != 0xff */ - /* do stencil clear in software */ - softwareMask |= DD_STENCIL_BIT; - mask &= ~(DD_STENCIL_BIT); - } + /* Need this check to respond to certain HW updates */ + if (fxMesa->new_state & (FX_NEW_SCISSOR | FX_NEW_COLOR_MASK)) { + fxSetupScissor(ctx); + fxSetupColorMask(ctx); + fxMesa->new_state &= ~(FX_NEW_SCISSOR | FX_NEW_COLOR_MASK); } /* @@ -202,7 +190,7 @@ */ BEGIN_BOARD_LOCK(); if (mask & DD_STENCIL_BIT) { - fxMesa->Glide.grStencilMaskExt(0xff /*fxMesa->unitsState.stencilWriteMask*/); + fxMesa->Glide.grStencilMaskExt(fxMesa->unitsState.stencilWriteMask); /* set stencil ref value = desired clear value */ fxMesa->Glide.grStencilFuncExt(GR_CMP_ALWAYS, clearS, 0xff); fxMesa->Glide.grStencilOpExt(GR_STENCILOP_REPLACE, @@ -213,6 +201,9 @@ grDisable(GR_STENCIL_MODE_EXT); } END_BOARD_LOCK(); + } else if (mask & DD_STENCIL_BIT) { + softwareMask |= (mask & (DD_STENCIL_BIT)); + mask &= ~(DD_STENCIL_BIT); } /* @@ -228,8 +219,7 @@ switch (mask & ~DD_STENCIL_BIT) { case DD_BACK_LEFT_BIT | DD_DEPTH_BIT: /* back buffer & depth */ - /* FX_grColorMaskv_NoLock(ctx, true4); */ /* work around Voodoo3 bug */ - grDepthMask(FXTRUE); + grDepthMask(FXTRUE); grRenderBuffer(GR_BUFFER_BACKBUFFER); if (stencil_size > 0) { fxMesa->Glide.grBufferClearExt(fxMesa->clearC, @@ -240,9 +230,6 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - if (!fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXFALSE); - } break; case DD_FRONT_LEFT_BIT | DD_DEPTH_BIT: /* XXX it appears that the depth buffer isn't cleared when @@ -250,9 +237,9 @@ * This is a work-around/ */ /* clear depth */ - grDepthMask(FXTRUE); - grRenderBuffer(GR_BUFFER_BACKBUFFER); + grDepthMask(FXTRUE); fxDisableColor(fxMesa); + grRenderBuffer(GR_BUFFER_BACKBUFFER); if (stencil_size > 0) fxMesa->Glide.grBufferClearExt(fxMesa->clearC, fxMesa->clearA, @@ -261,8 +248,9 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - /* clear front */ fxSetupColorMask(ctx); + grDepthMask(FXFALSE); + /* clear front */ grRenderBuffer(GR_BUFFER_FRONTBUFFER); if (stencil_size > 0) fxMesa->Glide.grBufferClearExt(fxMesa->clearC, @@ -272,9 +260,6 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - if (!fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXFALSE); - } break; case DD_BACK_LEFT_BIT: /* back buffer only */ @@ -288,9 +273,6 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - if (fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXTRUE); - } break; case DD_FRONT_LEFT_BIT: /* front buffer only */ @@ -304,9 +286,6 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - if (fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXTRUE); - } break; case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT: /* front and back */ @@ -329,15 +308,12 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - if (fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXTRUE); - } break; case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT | DD_DEPTH_BIT: - /* clear front */ - grDepthMask(FXFALSE); - grRenderBuffer(GR_BUFFER_FRONTBUFFER); - if (stencil_size > 0) + /* clear back and depth */ + grDepthMask(FXTRUE); + grRenderBuffer(GR_BUFFER_BACKBUFFER); + if (stencil_size > 0) fxMesa->Glide.grBufferClearExt(fxMesa->clearC, fxMesa->clearA, clearD, clearS); @@ -345,10 +321,10 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - /* clear back and depth */ - grDepthMask(FXTRUE); - grRenderBuffer(GR_BUFFER_BACKBUFFER); - if (stencil_size > 0) + /* clear front */ + grDepthMask(FXFALSE); + grRenderBuffer(GR_BUFFER_FRONTBUFFER); + if (stencil_size > 0) fxMesa->Glide.grBufferClearExt(fxMesa->clearC, fxMesa->clearA, clearD, clearS); @@ -356,15 +332,12 @@ grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD); - if (!fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXFALSE); - } break; case DD_DEPTH_BIT: /* just the depth buffer */ - grRenderBuffer(GR_BUFFER_BACKBUFFER); + grDepthMask(FXTRUE); fxDisableColor(fxMesa); - grDepthMask(FXTRUE); + grRenderBuffer(GR_BUFFER_BACKBUFFER); if (stencil_size > 0) fxMesa->Glide.grBufferClearExt(fxMesa->clearC, fxMesa->clearA, @@ -374,41 +347,29 @@ fxMesa->clearA, clearD); fxSetupColorMask(ctx); - if (ctx->Color._DrawDestMask & DD_FRONT_LEFT_BIT) { - grRenderBuffer(GR_BUFFER_FRONTBUFFER); - } - if (!fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXFALSE); - } break; default: /* clear no color buffers or depth buffer but might clear stencil */ - if (stencil_size > 0 && (mask & DD_STENCIL_BIT)) { + if ((stencil_size > 0) && (mask & DD_STENCIL_BIT)) { /* XXX need this RenderBuffer call to work around Glide bug */ - grRenderBuffer(GR_BUFFER_BACKBUFFER); grDepthMask(FXFALSE); + grRenderBuffer(GR_BUFFER_BACKBUFFER); fxDisableColor(fxMesa); fxMesa->Glide.grBufferClearExt(fxMesa->clearC, fxMesa->clearA, clearD, clearS); - if (fxMesa->unitsState.depthTestEnabled) { - grDepthMask(FXTRUE); - } fxSetupColorMask(ctx); - if (ctx->Color._DrawDestMask & DD_FRONT_LEFT_BIT) { - grRenderBuffer(GR_BUFFER_FRONTBUFFER); - } } } } END_CLIP_LOOP(); - if (fxMesa->haveHwStencil && (mask & DD_STENCIL_BIT)) { - /* We changed the stencil state above. Signal that we need to - * upload it again. - */ - fxMesa->new_state |= FX_NEW_STENCIL; + if (fxMesa->haveHwStencil) { + /* We changed the stencil state above. Restore it! */ + fxSetupStencil(ctx); } + fxSetupDepthTest(ctx); + grRenderBuffer(fxMesa->currentFB); if (softwareMask) _swrast_Clear( ctx, softwareMask, all, x, y, width, height ); @@ -417,6 +378,7 @@ /* Set the buffer used for drawing */ /* XXX support for separate read/draw buffers hasn't been tested */ +/* XXX GL_NONE disables color, but fails to correctly maintain state */ static void fxDDSetDrawBuffer(GLcontext * ctx, GLenum mode) { @@ -1693,7 +1655,7 @@ } static const struct tnl_pipeline_stage *fx_pipeline[] = { - &_tnl_vertex_transform_stage, /* TODO: Add the fastpath here */ + &_tnl_vertex_transform_stage, /* XXX todo - Add the fastpath here */ &_tnl_normal_transform_stage, &_tnl_lighting_stage, &_tnl_fog_coordinate_stage, @@ -1893,35 +1855,12 @@ _mesa_enable_extension(ctx, "GL_EXT_shared_texture_palette"); _mesa_enable_extension(ctx, "GL_EXT_blend_func_separate"); _mesa_enable_extension(ctx, "GL_EXT_texture_env_add"); + _mesa_enable_extension(ctx, "GL_EXT_stencil_wrap"); if (fxMesa->haveTwoTMUs) { _mesa_enable_extension(ctx, "GL_ARB_multitexture"); } - if (fxMesa->haveHwStencil) { - _mesa_enable_extension( ctx, "GL_EXT_stencil_wrap" ); - } - - /* [dBorca] Hack alert: - * True texture compression can be done only on Napalm. - * We will advertise, however, generic texture compression - * on all Voodoo cards; the Mesa logic allows us to eventually - * fallback to uncompressed. This will fix those dumb applications - * which refuse to run w/o texture compression! We actually _can_ - * do texture compression for pre-Napalm cores, through NCC. But - * NCC poses many issues: - * 1) NCC w/o DITHER_ERR has poor quality and NCC w/ DITHER_ERR is - * damn slow! - * 2) NCC compression cannot be used with multitexturing, because - * the decompression tables are not per TMU anymore (bear in mind - * that earlier Voodoos could handle 2 NCC tables for each TMU -- - * just look for POINTCAST_PALETTE). As a last resort, we could - * fake NCC multitexturing through multipass rendering, but... - * ohwell, it's not worth the effort... - * This stand true for multitexturing palletized textures. - * 3) since NCC is not an OpenGL standard (as opposed to FXT1/DXTC), we - * can't use precompressed textures! - */ if (fxMesa->type >= GR_SSTTYPE_Voodoo4) { _mesa_enable_extension(ctx, "GL_ARB_texture_compression"); _mesa_enable_extension(ctx, "GL_3DFX_texture_compression_FXT1"); @@ -1929,17 +1868,31 @@ _mesa_enable_extension(ctx, "GL_S3_s3tc"); _mesa_enable_extension(ctx, "GL_NV_blend_square"); } else { +#if FX_TC_NCC + /* [dBorca] Hack alert: + * 1) NCC w/o DITHER_ERR has poor quality and NCC w/ DITHER_ERR is + * damn slow! + * 2) NCC compression cannot be used with multitexturing, because + * the decompression tables are not per TMU anymore (bear in mind + * that earlier Voodoos could handle 2 NCC tables for each TMU -- + * just look for POINTCAST_PALETTE). As a last resort, we could + * fake NCC multitexturing through multipass rendering, but... + * ohwell, it's not worth the effort... + * This stand true for multitexturing palletized textures. + * 3) since NCC is not an OpenGL standard (as opposed to FXT1/DXTC), we + * can't use precompressed textures! + */ if (fxMesa->HaveTexus2) { _mesa_enable_extension(ctx, "GL_ARB_texture_compression"); } -#if FX_TC_NCC - else -#endif +#else /* doesn't like texture compression */ _mesa_enable_extension(ctx, "GL_SGIS_generate_mipmap"); +#endif } if (fxMesa->HaveCmbExt) { + _mesa_enable_extension(ctx, "GL_ARB_texture_env_combine"); _mesa_enable_extension(ctx, "GL_EXT_texture_env_combine"); } @@ -2016,8 +1969,7 @@ #if 0 /* [dBorca] * We fail the spec here, unless certain blending modes: - * (c1 + c2) * 1 + d * 1 = c1 * 1 + d * 1 + c2 * 1 - * (c1 + c2) * 1 + d * 0 = c1 * 1 + d * 0 + c2 * 1 + * RGB: (GL_ONE + GL_*) or (GL_ZERO + GL_*) or ... */ if (NEED_SECONDARY_COLOR(ctx)) { if ((ctx->Color.BlendEquationRGB != GL_FUNC_ADD) && diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c 2004-08-28 06:27:42.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxddspan.c 2004-12-15 02:51:01.000000000 +0100 @@ -100,30 +100,23 @@ #define HW_WRITE_CLIPLOOP() \ do { \ - const int _nc = 1; /* numcliprects */ \ - /* [dBorca] Hack alert: */ \ /* remember, we need to flip the scissor, too */ \ /* is it better to do it inside fxDDScissor? */ \ - while (_nc--) { \ - const int minx = fxMesa->clipMinX; \ - const int maxy = Y_FLIP(fxMesa->clipMinY); \ - const int maxx = fxMesa->clipMaxX; \ - const int miny = Y_FLIP(fxMesa->clipMaxY); + const int minx = fxMesa->clipMinX; \ + const int maxy = Y_FLIP(fxMesa->clipMinY); \ + const int maxx = fxMesa->clipMaxX; \ + const int miny = Y_FLIP(fxMesa->clipMaxY); #define HW_READ_CLIPLOOP() \ do { \ - const int _nc = 1; /* numcliprects */ \ - /* [dBorca] Hack alert: */ \ /* remember, we need to flip the scissor, too */ \ /* is it better to do it inside fxDDScissor? */ \ - while (_nc--) { \ - const int minx = fxMesa->clipMinX; \ - const int maxy = Y_FLIP(fxMesa->clipMinY); \ - const int maxx = fxMesa->clipMaxX; \ - const int miny = Y_FLIP(fxMesa->clipMaxY); + const int minx = fxMesa->clipMinX; \ + const int maxy = Y_FLIP(fxMesa->clipMinY); \ + const int maxx = fxMesa->clipMaxX; \ + const int miny = Y_FLIP(fxMesa->clipMaxY); #define HW_ENDCLIPLOOP() \ - } \ } while (0) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c 2004-08-28 06:27:43.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxddtex.c 2004-12-15 02:51:01.000000000 +0100 @@ -60,12 +60,12 @@ GLint dstWidth = srcWidth / 2; GLint dstHeight = srcHeight / 2; GLint srcRowStride = srcWidth * bytesPerPixel; - GLubyte *src = srcImage; + GLubyte *src = (GLubyte *)srcImage; GLubyte *dst = dstImage; GLuint bpt = 0; - GLubyte *_s; - GLubyte *_d; + GLubyte *_s = NULL; + GLubyte *_d = NULL; GLenum _t; if (texImage->TexFormat->MesaFormat == MESA_FORMAT_RGB565) { @@ -615,21 +615,8 @@ fprintf(stderr, "fxDDTexUseGlbPalette(%d)\n", state); } - if (state) { - fxMesa->haveGlobalPaletteTexture = 1; - } - else { - fxMesa->haveGlobalPaletteTexture = 0; - - /* [dBorca] tis beyond my comprehension */ - if ((ctx->Texture.Unit[0]._Current == ctx->Texture.Unit[0].Current2D) && - (ctx->Texture.Unit[0]._Current != NULL)) { - struct gl_texture_object *tObj = ctx->Texture.Unit[0]._Current; - if (!tObj->DriverData) - tObj->DriverData = fxAllocTexObjData(fxMesa); - fxTexInvalidate(ctx, tObj); - } - } + fxMesa->haveGlobalPaletteTexture = state; + fxMesa->new_state |= FX_NEW_TEXTURING; } @@ -1539,17 +1526,7 @@ ti->info.format = mml->glideFormat; texImage->FetchTexelc = fxFetchFunction(texImage->TexFormat->MesaFormat); - /* [dBorca] - * Hack alert: unsure... - */ - if (0 && ti->validated && ti->isInTM) { - /*fprintf(stderr, "reloadmipmaplevels\n"); */ - fxTMReloadMipMapLevel(fxMesa, texObj, level); - } - else { - /*fprintf(stderr, "invalidate2\n"); */ - fxTexInvalidate(ctx, texObj); - } + fxTexInvalidate(ctx, texObj); } @@ -1781,17 +1758,7 @@ assert(!texImage->IsCompressed); } - /* [dBorca] - * Hack alert: unsure... - */ - if (0 && ti->validated && ti->isInTM) { - /*fprintf(stderr, "reloadmipmaplevels\n"); */ - fxTMReloadMipMapLevel(fxMesa, texObj, level); - } - else { - /*fprintf(stderr, "invalidate2\n"); */ - fxTexInvalidate(ctx, texObj); - } + fxTexInvalidate(ctx, texObj); } @@ -1829,7 +1796,7 @@ mml->width, (GLubyte*) texImage->Data); - rows = height / 4; /* [dBorca] hardcoded 4, but works for FXT1/DXTC */ + rows = height / 4; /* hardcoded 4, but works for FXT1/DXTC */ for (i = 0; i < rows; i++) { MEMCPY(dest, data, srcRowStride); @@ -1905,9 +1872,7 @@ GLint width, GLint height, GLint depth, GLint border) { - /* [dBorca] - * TODO - maybe through fxTexValidate() - */ + /* XXX todo - maybe through fxTexValidate() */ return _mesa_test_proxy_teximage(ctx, target, level, internalFormat, format, type, diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h --- xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h 2004-07-22 08:52:21.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxdrv.h 2004-12-15 02:51:01.000000000 +0100 @@ -714,6 +714,7 @@ void fxSetupBlend (GLcontext *ctx); void fxSetupDepthTest (GLcontext *ctx); void fxSetupTexture (GLcontext *ctx); +void fxSetupStencil (GLcontext *ctx); /* Flags for software fallback cases */ #define FX_FALLBACK_TEXTURE_MAP 0x0001 @@ -730,6 +731,28 @@ extern GLuint fx_check_IsInHardware(GLcontext *ctx); +/*** + *** CNORM: clamp float to [0,1] and map to float in [0,255] + ***/ +#if defined(USE_IEEE) && !defined(DEBUG) +#define IEEE_0996 0x3f7f0000 /* 0.996 or so */ +#define CNORM(N, F) \ + do { \ + fi_type __tmp; \ + __tmp.f = (F); \ + if (__tmp.i < 0) \ + N = 0; \ + else if (__tmp.i >= IEEE_0996) \ + N = 255.0f; \ + else { \ + N = (F) * 255.0f; \ + } \ + } while (0) +#else +#define CNORM(n, f) \ + n = (CLAMP((f), 0.0F, 1.0F) * 255.0F) +#endif + /* run-time debugging */ #ifndef FX_DEBUG #define FX_DEBUG 0 diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c 2004-06-16 11:18:48.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.c 2004-12-15 02:51:01.000000000 +0100 @@ -126,7 +126,12 @@ grCoordinateSpace(GR_WINDOW_COORDS); grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE); +#if FX_PACKEDCOLOR grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE); +#else /* !FX_PACKEDCOLOR */ + grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE); + grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE); +#endif /* !FX_PACKEDCOLOR */ grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE); grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, @@ -210,7 +215,7 @@ config->SSTs[i].type = GR_SSTTYPE_VOODOO; } - grGet(GR_MEMORY_FB, 4, &result); /* ZZZ: differs after grSstWinOpen */ + grGet(GR_MEMORY_FB, 4, &result); config->SSTs[i].fbRam = result / (1024 * 1024); grGet(GR_NUM_TMU, 4, &result); @@ -220,7 +225,7 @@ config->SSTs[i].fbiRev = result; for (j = 0; j < config->SSTs[i].nTexelfx; j++) { - grGet(GR_MEMORY_TMU, 4, &result); /* ZZZ: differs after grSstWinOpen */ + grGet(GR_MEMORY_TMU, 4, &result); config->SSTs[i].tmuConfig[j].tmuRam = result / (1024 * 1024); grGet(GR_REVISION_TMU, 4, &result); config->SSTs[i].tmuConfig[j].tmuRev = result; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h --- xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h 2004-06-16 11:18:48.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxglidew.h 2004-12-15 02:51:01.000000000 +0100 @@ -38,7 +38,9 @@ #include "fxg.h" - +#ifndef FX_PACKEDCOLOR +#define FX_PACKEDCOLOR 1 +#endif #define MAX_NUM_SST 4 @@ -112,6 +114,7 @@ float oow; /* 1/w (used mipmapping - really 0xfff/w) */ } GrTmuVertex; +#if FX_PACKEDCOLOR typedef struct { float x, y; /* X and Y in screen space */ float ooz; /* 65535/Z (used for Z-buffering) */ @@ -137,6 +140,34 @@ #define GR_VERTEX_OOW_TMU1_OFFSET 10 #define GR_VERTEX_FOG_OFFSET 11 #define GR_VERTEX_PSPEC_OFFSET 12 +#else /* !FX_PACKEDCOLOR */ +typedef struct { + float x, y; /* X and Y in screen space */ + float ooz; /* 65535/Z (used for Z-buffering) */ + float oow; /* 1/W (used for W-buffering, texturing) */ + float r, g, b, a; /* R, G, B, A [0..255] */ + GrTmuVertex tmuvtx[GLIDE_NUM_TMU]; + float fog; /* fog coordinate */ + float r1, g1, b1; /* R, G, B [0..255] */ + float psize; /* point size */ + long pad[20 - 19]; /* ensure multiple of 16 */ +} GrVertex; + +#define GR_VERTEX_X_OFFSET 0 +#define GR_VERTEX_Y_OFFSET 1 +#define GR_VERTEX_OOZ_OFFSET 2 +#define GR_VERTEX_OOW_OFFSET 3 +#define GR_VERTEX_RGB_OFFSET 4 +#define GR_VERTEX_A_OFFSET 7 +#define GR_VERTEX_SOW_TMU0_OFFSET 8 +#define GR_VERTEX_TOW_TMU0_OFFSET 9 +#define GR_VERTEX_OOW_TMU0_OFFSET 10 +#define GR_VERTEX_SOW_TMU1_OFFSET 11 +#define GR_VERTEX_TOW_TMU1_OFFSET 12 +#define GR_VERTEX_OOW_TMU1_OFFSET 13 +#define GR_VERTEX_FOG_OFFSET 14 +#define GR_VERTEX_SPEC_OFFSET 15 +#endif /* !FX_PACKEDCOLOR */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c 2004-08-28 06:27:44.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.c 2004-12-15 02:51:01.000000000 +0100 @@ -76,9 +76,7 @@ const GLvoid *srcImage, GLvoid *dstImage ); fxMesaContext fxMesa = FX_CONTEXT(ctx); /* [dBorca] - * Ooooooook! Here's a(nother) long story. - * We get here because we need to handle a texture larger - * than hardware can support. Two cases: + * Fake textures larger than HW supports: * 1) we have mipmaps. Then we just push up to the first supported * LOD. A possible drawback is that Mesa will ignore the skipped * LODs on further texture handling. @@ -88,13 +86,6 @@ * once in TexImage2D to accomodate aspect ratio, and now we * are rescaling again. The thing is, in TexImage2D we don't * know whether we'll hit 1) or 2) by the time of validation. - * NB: we could handle mml->[wh]Scale nicely, using (biased) shifts. - * - * Which brings me to another issue. How can we handle NPOT textures? - * - rescaling NPOT to the next bigger POT (mml->[wh]Scale can't shift) - * - upping the max LOD to the next power-of-two, in fxTexGetInfo; then - * choosing non-power-of-two values for ti->[st]Scale... Anyhow, we - * still need to align mipmaps correctly in texture memory! */ if ((tObj->MinFilter == GL_NEAREST) || (tObj->MinFilter == GL_LINEAR)) { /* no mipmaps! */ @@ -155,7 +146,7 @@ else FX_smallLodLog2(ti->info) = FX_largeLodLog2(ti->info); - /* this is necessary because of fxDDCompressedTexImage2D */ + /* [dBorca] this is necessary because of fxDDCompressedTexImage2D */ if (ti->padded) { struct gl_texture_image *texImage = tObj->Image[0][minl]; tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage); @@ -351,9 +342,7 @@ fprintf(stderr, "fxSetupSingleTMU_NoLock(%p (%d))\n", (void *)tObj, tObj->Name); } -#if 1 /* [dBorca] Good... bad... I'm the guy with the gun! */ ti->lastTimeUsed = fxMesa->texBindNumber; -#endif /* Make sure we're not loaded incorrectly */ if (ti->isInTM) { @@ -654,10 +643,9 @@ colorComb.Factor = GR_COMBINE_FACTOR_TEXTURE_ALPHA; colorComb.Other = GR_COMBINE_OTHER_CONSTANT; } else { - /* [dBorca] Hack alert: - * only Voodoo^2 can GL_BLEND (GR_COMBINE_FACTOR_TEXTURE_RGB) - * These settings assume that the TexEnv color is black - * and incoming fragment color is white. + /* Only Voodoo^2 can GL_BLEND (GR_COMBINE_FACTOR_TEXTURE_RGB) + * These settings assume that the TexEnv color is black and + * incoming fragment color is white. */ colorComb.Function = GR_COMBINE_FUNCTION_SCALE_OTHER; colorComb.Factor = GR_COMBINE_FACTOR_ONE; @@ -1781,7 +1769,7 @@ } } -static void +void fxSetupStencil (GLcontext * ctx) { fxMesaContext fxMesa = FX_CONTEXT(ctx); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h --- xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h 2004-06-16 11:18:49.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxsetup.h 2004-12-15 02:51:01.000000000 +0100 @@ -32,8 +32,7 @@ */ /* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */ -/* [dBorca] Hack alert: - * this code belongs to fxsetup.c, but I didn't want to clutter +/* This code belongs to fxsetup.c, but I didn't want to clutter * the original code with Napalm specifics, in order to keep things * clear -- especially for backward compatibility. I should have * put it into another .c file, but I didn't want to export so many @@ -379,9 +378,7 @@ break; /* COMBINE_EXT */ case GL_COMBINE_EXT: - /* [dBorca] Hack alert: - * INCOMPLETE!!! - */ + /* XXX todo - INCOMPLETE!!! */ if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) { #if 1 fprintf(stderr, "COMBINE_EXT: %s + %s\n", @@ -1024,10 +1021,7 @@ } if (LODblend) { - /* [dBorca] Hack alert: - * TODO: GR_CMBX_LOD_FRAC - */ - + /* XXX todo - GR_CMBX_LOD_FRAC? */ fxMesa->tmuSrc = FX_TMU_SPLIT; } else { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c 2004-06-16 11:18:49.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxtexman.c 2004-12-15 02:51:01.000000000 +0100 @@ -486,7 +486,7 @@ /*texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));*/ ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize); - fxMesa->stats.memTexUpload += texmemsize; /* ZZZ: required? */ + fxMesa->stats.memTexUpload += texmemsize; for (i = FX_largeLodValue(ti->info), l = ti->minLevel; i <= FX_smallLodValue(ti->info); i++, l++) { @@ -550,6 +550,7 @@ assert(mml->width > 0); assert(mml->height > 0); assert(mml->glideFormat > 0); + assert(ti->isInTM); if (!ti->validated) { fprintf(stderr, "fxTMReloadMipMapLevel: INTERNAL ERROR: not validated\n"); @@ -558,17 +559,8 @@ } tmu = (int) ti->whichTMU; -#if 0 - /* [dBorca] - * We get here by (see Tex[Sub]Image2D), thus we are in TMU. - * Also, we just set the correct TMU above. fxTMMoveInTM will - * bail early, so don't bother... - */ - fxTMMoveInTM(fxMesa, tObj, tmu); -#else fxMesa->stats.reqTexUpload++; fxMesa->stats.texUpload++; -#endif lodlevel = ti->info.largeLodLog2 - (level - ti->minLevel); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c 2004-08-28 06:27:44.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxtris.c 2004-12-15 02:51:01.000000000 +0100 @@ -146,6 +146,7 @@ dst->win[2] = src->ooz; dst->win[3] = src->oow; +#if FX_PACKEDCOLOR dst->color[0] = src->pargb[2]; dst->color[1] = src->pargb[1]; dst->color[2] = src->pargb[0]; @@ -154,6 +155,16 @@ dst->specular[0] = src->pspec[2]; dst->specular[1] = src->pspec[1]; dst->specular[2] = src->pspec[0]; +#else /* !FX_PACKEDCOLOR */ + dst->color[0] = src->r; + dst->color[1] = src->g; + dst->color[2] = src->b; + dst->color[3] = src->a; + + dst->specular[0] = src->r1; + dst->specular[1] = src->g1; + dst->specular[2] = src->g1; +#endif /* !FX_PACKEDCOLOR */ dst->texcoord[ts0][0] = fxMesa->inv_s0scale * src->tmuvtx[0].sow * w; dst->texcoord[ts0][1] = fxMesa->inv_t0scale * src->tmuvtx[0].tow * w; @@ -227,7 +238,11 @@ fprintf(stderr, "\tvertex at %p\n", (void *) v); fprintf(stderr, "\tx %f y %f z %f oow %f\n", v->x, v->y, v->ooz, v->oow); +#if FX_PACKEDCOLOR fprintf(stderr, "\tr %d g %d b %d a %d\n", v->pargb[2], v->pargb[1], v->pargb[0], v->pargb[3]); +#else /* !FX_PACKEDCOLOR */ + fprintf(stderr, "\tr %f g %f b %f a %f\n", v->r, v->g, v->b, v->a); +#endif /* !FX_PACKEDCOLOR */ fprintf(stderr, "\n"); } @@ -298,14 +313,25 @@ /* point coverage? */ /* we don't care about culling here (see fxSetupCull) */ - _v_[0].x -= radius; - _v_[0].y += radius; - _v_[1].x += radius; - _v_[1].y += radius; - _v_[2].x += radius; - _v_[2].y -= radius; - _v_[3].x -= radius; - _v_[3].y -= radius; + if (ctx->Point.SpriteOrigin == GL_UPPER_LEFT) { + _v_[0].x -= radius; + _v_[0].y += radius; + _v_[1].x += radius; + _v_[1].y += radius; + _v_[2].x += radius; + _v_[2].y -= radius; + _v_[3].x -= radius; + _v_[3].y -= radius; + } else { + _v_[0].x -= radius; + _v_[0].y -= radius; + _v_[1].x += radius; + _v_[1].y -= radius; + _v_[2].x += radius; + _v_[2].y += radius; + _v_[3].x -= radius; + _v_[3].y += radius; + } if (ctx->Point.CoordReplace[ts0]) { _v_[0].tmuvtx[0].sow = 0; @@ -340,7 +366,9 @@ GrVertex *_v_[3]; const GLcontext *ctx = fxMesa->glCtx; - const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) ? v0->psize : ctx->Point.Size; + const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) + ? CLAMP(v0->psize, ctx->Point.MinSize, ctx->Point.MaxSize) + : ctx->Point._Size; /* clamped */ if (ctx->Point.PointSprite) { fx_draw_point_sprite(fxMesa, v0, psize); @@ -415,7 +443,9 @@ GrVertex vtxB, vtxC; const GLcontext *ctx = fxMesa->glCtx; - const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) ? v0->psize : ctx->Point.Size; + const GLfloat psize = (ctx->_TriangleCaps & DD_POINT_ATTEN) + ? CLAMP(v0->psize, ctx->Point.MinSize, ctx->Point.MaxSize) + : ctx->Point._Size; /* clamped */ if (ctx->Point.PointSprite) { fx_draw_point_sprite(fxMesa, v0, psize); @@ -499,6 +529,7 @@ #endif +#if FX_PACKEDCOLOR #define VERT_SET_RGBA( dst, f ) \ do { \ UNCLAMPED_FLOAT_TO_UBYTE(dst->pargb[2], f[0]);\ @@ -538,6 +569,74 @@ fxMesaContext fxMesa = FX_CONTEXT(ctx); \ GLubyte color[n][4], spec[n][4]; \ (void) color; (void) spec; +#else /* !FX_PACKEDCOLOR */ +#define VERT_SET_RGBA( dst, f ) \ +do { \ + CNORM(dst->r, f[0]); \ + CNORM(dst->g, f[1]); \ + CNORM(dst->b, f[2]); \ + CNORM(dst->a, f[3]); \ +} while (0) + +#define VERT_COPY_RGBA( v0, v1 ) \ +do { \ + *(GLuint *)&v0->r = *(GLuint *)&v1->r; \ + *(GLuint *)&v0->g = *(GLuint *)&v1->g; \ + *(GLuint *)&v0->b = *(GLuint *)&v1->b; \ + *(GLuint *)&v0->a = *(GLuint *)&v1->a; \ +} while (0) + +#define VERT_SAVE_RGBA( idx ) \ +do { \ + *(GLuint *)&color[idx][0] = *(GLuint *)&v[idx]->r;\ + *(GLuint *)&color[idx][1] = *(GLuint *)&v[idx]->g;\ + *(GLuint *)&color[idx][2] = *(GLuint *)&v[idx]->b;\ + *(GLuint *)&color[idx][3] = *(GLuint *)&v[idx]->a;\ +} while (0) + +#define VERT_RESTORE_RGBA( idx ) \ +do { \ + *(GLuint *)&v[idx]->r = *(GLuint *)&color[idx][0];\ + *(GLuint *)&v[idx]->g = *(GLuint *)&color[idx][1];\ + *(GLuint *)&v[idx]->b = *(GLuint *)&color[idx][2];\ + *(GLuint *)&v[idx]->a = *(GLuint *)&color[idx][3];\ +} while (0) + + +#define VERT_SET_SPEC( dst, f ) \ +do { \ + CNORM(dst->r1, f[0]); \ + CNORM(dst->g1, f[1]); \ + CNORM(dst->b1, f[2]); \ +} while (0) + +#define VERT_COPY_SPEC( v0, v1 ) \ +do { \ + *(GLuint *)&v0->r1 = *(GLuint *)&v1->r1; \ + *(GLuint *)&v0->g1 = *(GLuint *)&v1->g1; \ + *(GLuint *)&v0->b1 = *(GLuint *)&v1->b1; \ +} while (0) + +#define VERT_SAVE_SPEC( idx ) \ +do { \ + *(GLuint *)&spec[idx][0] = *(GLuint *)&v[idx]->r1;\ + *(GLuint *)&spec[idx][1] = *(GLuint *)&v[idx]->g1;\ + *(GLuint *)&spec[idx][2] = *(GLuint *)&v[idx]->b1;\ +} while (0) + +#define VERT_RESTORE_SPEC( idx ) \ +do { \ + *(GLuint *)&v[idx]->r1 = *(GLuint *)&spec[idx][0];\ + *(GLuint *)&v[idx]->g1 = *(GLuint *)&spec[idx][1];\ + *(GLuint *)&v[idx]->b1 = *(GLuint *)&spec[idx][2];\ +} while (0) + + +#define LOCAL_VARS(n) \ + fxMesaContext fxMesa = FX_CONTEXT(ctx); \ + GLuint color[n][4], spec[n][4]; \ + (void) color; (void) spec; +#endif /* !FX_PACKEDCOLOR */ @@ -904,7 +1003,6 @@ { fxMesaContext fxMesa = FX_CONTEXT(ctx); GrVertex *fxVB = fxMesa->verts; - int mode; (void) flags; if (TDFX_DEBUG & VERBOSE_VARRAY) { @@ -913,13 +1011,9 @@ INIT(GL_TRIANGLE_STRIP); - /* [dBorca] WTF?!? - if (flags & PRIM_PARITY) - mode = GR_TRIANGLE_STRIP_CONTINUE; - else*/ - mode = GR_TRIANGLE_STRIP; + /* no GR_TRIANGLE_STRIP_CONTINUE?!? */ - grDrawVertexArrayContiguous( mode, count-start, + grDrawVertexArrayContiguous( GR_TRIANGLE_STRIP, count-start, fxVB + start, sizeof(GrVertex)); } @@ -1273,58 +1367,41 @@ */ if (new_gl_state & _NEW_PROJECTION) fxMesa->new_state |= FX_NEW_FOG; - /* [dBorca] Hack alert: - * the above _NEW_PROJECTION is not included in the test below, - * so we may end up with fxMesa->new_state still dirty by the end - * of the routine. The fact is, we don't have NearFar callback - * anymore. We could use fxDDDepthRange instead, but it seems - * fog needs to be updated only by a fog-basis. - * Implementing fxDDDepthRange correctly is another story: - * that, together with a presumable fxDDViewport function would set - * fxMesa->SetupNewInputs |= VERT_BIT_CLIP; - * which might be useful in fxBuildVertices... - */ #endif - if (new_gl_state & (_FX_NEW_IS_IN_HARDWARE | - _FX_NEW_RENDERSTATE | - _FX_NEW_SETUP_FUNCTION | - _NEW_TEXTURE)) { - - if (new_gl_state & _FX_NEW_IS_IN_HARDWARE) - fxCheckIsInHardware(ctx); - - if (fxMesa->new_state) - fxSetupFXUnits(ctx); - - if (!fxMesa->fallback) { - if (new_gl_state & _FX_NEW_RENDERSTATE) - fxDDChooseRenderState(ctx); + if (new_gl_state & _FX_NEW_IS_IN_HARDWARE) + fxCheckIsInHardware(ctx); + + if (fxMesa->new_state) + fxSetupFXUnits(ctx); + + if (!fxMesa->fallback) { + if (new_gl_state & _FX_NEW_RENDERSTATE) + fxDDChooseRenderState(ctx); + + if (new_gl_state & _FX_NEW_SETUP_FUNCTION) + fxChooseVertexState(ctx); + } + + if (new_gl_state & _NEW_TEXTURE) { + struct gl_texture_unit *t0 = &ctx->Texture.Unit[fxMesa->tmu_source[0]]; + struct gl_texture_unit *t1 = &ctx->Texture.Unit[fxMesa->tmu_source[1]]; - if (new_gl_state & _FX_NEW_SETUP_FUNCTION) - fxChooseVertexState(ctx); + if (t0->_Current && FX_TEXTURE_DATA(t0)) { + fxMesa->s0scale = FX_TEXTURE_DATA(t0)->sScale; + fxMesa->t0scale = FX_TEXTURE_DATA(t0)->tScale; + fxMesa->inv_s0scale = 1.0 / fxMesa->s0scale; + fxMesa->inv_t0scale = 1.0 / fxMesa->t0scale; } - if (new_gl_state & _NEW_TEXTURE) { - struct gl_texture_unit *t0 = &ctx->Texture.Unit[fxMesa->tmu_source[0]]; - struct gl_texture_unit *t1 = &ctx->Texture.Unit[fxMesa->tmu_source[1]]; - - if (t0->_Current && FX_TEXTURE_DATA(t0)) { - fxMesa->s0scale = FX_TEXTURE_DATA(t0)->sScale; - fxMesa->t0scale = FX_TEXTURE_DATA(t0)->tScale; - fxMesa->inv_s0scale = 1.0 / fxMesa->s0scale; - fxMesa->inv_t0scale = 1.0 / fxMesa->t0scale; - } - - if (t1->_Current && FX_TEXTURE_DATA(t1)) { - fxMesa->s1scale = FX_TEXTURE_DATA(t1)->sScale; - fxMesa->t1scale = FX_TEXTURE_DATA(t1)->tScale; - fxMesa->inv_s1scale = 1.0 / fxMesa->s1scale; - fxMesa->inv_t1scale = 1.0 / fxMesa->t1scale; - } + if (t1->_Current && FX_TEXTURE_DATA(t1)) { + fxMesa->s1scale = FX_TEXTURE_DATA(t1)->sScale; + fxMesa->t1scale = FX_TEXTURE_DATA(t1)->tScale; + fxMesa->inv_s1scale = 1.0 / fxMesa->s1scale; + fxMesa->inv_t1scale = 1.0 / fxMesa->t1scale; } } - + fxMesa->new_gl_state = 0; _tnl_run_pipeline( ctx ); @@ -1483,7 +1560,7 @@ /* [dBorca] Hack alert: * doesn't work with blending. - * need to take care of stencil. + * XXX todo - need to take care of stencil. */ GLboolean fxMultipass_ColorSum (GLcontext *ctx, GLuint pass) { @@ -1518,7 +1595,11 @@ fxDDDepthMask( ctx, GL_FALSE ); } /* switch to secondary colors */ +#if FX_PACKEDCOLOR grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PSPEC_OFFSET << 2, GR_PARAM_ENABLE); +#else /* !FX_PACKEDCOLOR */ + grVertexLayout(GR_PARAM_RGB, GR_VERTEX_SPEC_OFFSET << 2, GR_PARAM_ENABLE); +#endif /* !FX_PACKEDCOLOR */ /* don't advertise new state */ fxMesa->new_state = 0; break; @@ -1529,7 +1610,11 @@ ctx->Texture.Unit[0]._ReallyEnabled = t0; ctx->Texture.Unit[1]._ReallyEnabled = t1; /* revert to primary colors */ +#if FX_PACKEDCOLOR grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE); +#else /* !FX_PACKEDCOLOR */ + grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE); +#endif /* !FX_PACKEDCOLOR */ break; default: assert(0); /* NOTREACHED */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c 2004-07-22 08:52:24.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxvb.c 2004-12-15 02:51:01.000000000 +0100 @@ -55,7 +55,14 @@ GrVertex *dst = fxMesa->verts + edst; GrVertex *src = fxMesa->verts + esrc; +#if FX_PACKEDCOLOR *(GLuint *)&dst->pargb = *(GLuint *)&src->pargb; +#else /* !FX_PACKEDCOLOR */ + *(GLuint *)&dst->r = *(GLuint *)&src->r; + *(GLuint *)&dst->g = *(GLuint *)&src->g; + *(GLuint *)&dst->b = *(GLuint *)&src->b; + *(GLuint *)&dst->a = *(GLuint *)&src->a; +#endif /* !FX_PACKEDCOLOR */ } static void copy_pv2( GLcontext *ctx, GLuint edst, GLuint esrc ) @@ -64,8 +71,18 @@ GrVertex *dst = fxMesa->verts + edst; GrVertex *src = fxMesa->verts + esrc; +#if FX_PACKEDCOLOR *(GLuint *)&dst->pargb = *(GLuint *)&src->pargb; *(GLuint *)&dst->pspec = *(GLuint *)&src->pspec; +#else /* !FX_PACKEDCOLOR */ + *(GLuint *)&dst->r = *(GLuint *)&src->r; + *(GLuint *)&dst->g = *(GLuint *)&src->g; + *(GLuint *)&dst->b = *(GLuint *)&src->b; + *(GLuint *)&dst->a = *(GLuint *)&src->a; + *(GLuint *)&dst->r1 = *(GLuint *)&src->r1; + *(GLuint *)&dst->g1 = *(GLuint *)&src->g1; + *(GLuint *)&dst->b1 = *(GLuint *)&src->b1; +#endif /* !FX_PACKEDCOLOR */ } static struct { @@ -695,10 +712,6 @@ } else { GLuint ind = 0; - /* [dBorca] masked by VERT_BIT_POS ?!? - if (newinputs & VERT_BIT_POINT_SIZE) - ind |= SETUP_PSIZ;*/ - if (newinputs & VERT_BIT_COLOR0) ind |= SETUP_RGBA; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h --- xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h 2004-08-13 01:06:37.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxvbtmp.h 2004-12-15 02:51:01.000000000 +0100 @@ -145,6 +145,7 @@ proj = (GLfloat (*)[4])((GLubyte *)proj + proj_stride); } if (IND & SETUP_RGBA) { +#if FX_PACKEDCOLOR UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[2], col[0][0]); UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[1], col[0][1]); UNCLAMPED_FLOAT_TO_UBYTE(v->pargb[0], col[0][2]); @@ -153,12 +154,28 @@ } else { v->pargb[3] = 255; } +#else /* !FX_PACKEDCOLOR */ + CNORM(v->r, col[0][0]); + CNORM(v->g, col[0][1]); + CNORM(v->b, col[0][2]); + if (col_size == 4) { + CNORM(v->a, col[0][3]); + } else { + v->a = 255.0f; + } +#endif /* !FX_PACKEDCOLOR */ STRIDE_4F(col, col_stride); } if (IND & SETUP_SPEC) { +#if FX_PACKEDCOLOR UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[2], spec[0][0]); UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[1], spec[0][1]); UNCLAMPED_FLOAT_TO_UBYTE(v->pspec[0], spec[0][2]); +#else /* !FX_PACKEDCOLOR */ + CNORM(v->r1, spec[0][0]); + CNORM(v->g1, spec[0][1]); + CNORM(v->b1, spec[0][2]); +#endif /* !FX_PACKEDCOLOR */ STRIDE_4F(spec, spec_stride); } if (IND & SETUP_FOGC) { @@ -253,15 +270,28 @@ } +#if FX_PACKEDCOLOR INTERP_UB( t, dst->pargb[0], out->pargb[0], in->pargb[0] ); INTERP_UB( t, dst->pargb[1], out->pargb[1], in->pargb[1] ); INTERP_UB( t, dst->pargb[2], out->pargb[2], in->pargb[2] ); INTERP_UB( t, dst->pargb[3], out->pargb[3], in->pargb[3] ); +#else /* !FX_PACKEDCOLOR */ + INTERP_F( t, dst->r, out->r, in->r ); + INTERP_F( t, dst->g, out->g, in->g ); + INTERP_F( t, dst->b, out->b, in->b ); + INTERP_F( t, dst->a, out->a, in->a ); +#endif /* !FX_PACKEDCOLOR */ if (IND & SETUP_SPEC) { +#if FX_PACKEDCOLOR INTERP_UB( t, dst->pspec[0], out->pspec[0], in->pspec[0] ); INTERP_UB( t, dst->pspec[1], out->pspec[1], in->pspec[1] ); INTERP_UB( t, dst->pspec[2], out->pspec[2], in->pspec[2] ); +#else /* !FX_PACKEDCOLOR */ + INTERP_F( t, dst->r1, out->r1, in->r1 ); + INTERP_F( t, dst->g1, out->g1, in->g1 ); + INTERP_F( t, dst->b1, out->b1, in->b1 ); +#endif /* !FX_PACKEDCOLOR */ } if (IND & SETUP_FOGC) { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c x11r682/xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c --- xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c 2004-08-28 06:27:44.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/glide/fxwgl.c 2004-12-15 02:51:01.000000000 +0100 @@ -348,7 +348,7 @@ SetForegroundWindow(hWnd); Sleep(100); /* a hack for win95 */ if (env_check("MESA_GLX_FX", 'w') && !(GetWindowLong (hWnd, GWL_STYLE) & WS_POPUP)) { - /* [dBorca] Hack alert: unfinished business! */ + /* XXX todo - windowed modes */ error = !(ctx = fxMesaCreateContext((GLuint) hWnd, GR_RESOLUTION_NONE, GR_REFRESH_NONE, pix[curPFD - 1].mesaAttr)); } else { GetClientRect(hWnd, &cliRect); @@ -629,7 +629,7 @@ int i; PROC p = (PROC) _glapi_get_proc_address((const char *) lpszProc); - /* [dBorca] we can't do BlendColor */ + /* we can't BlendColor. work around buggy applications */ if (p && strcmp(lpszProc, "glBlendColor") && strcmp(lpszProc, "glBlendColorEXT")) return p; @@ -860,10 +860,7 @@ if (!(pfd.dwFlags & PFD_DOUBLEBUFFER_DONTCARE) && ((pfd.dwFlags & PFD_DOUBLEBUFFER) != (pix[i].pfd.dwFlags & PFD_DOUBLEBUFFER))) continue; -#if 0 /* [dBorca] Hack alert: - * Doom3 fails here! - * Can we get away by implementing WGL_ARB_pixel_format? - */ +#if 1 /* Doom3 fails here! */ if (!(pfd.dwFlags & PFD_STEREO_DONTCARE) && ((pfd.dwFlags & PFD_STEREO) != (pix[i].pfd.dwFlags & PFD_STEREO))) continue; @@ -875,7 +872,7 @@ if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0) continue; /* need alpha buffer */ -#if 0 /* [dBorca] regression bug? */ +#if 0 /* regression bug? */ if (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0) continue; /* need stencil buffer */ #endif diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c x11r682/xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c --- xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c 2004-06-16 11:18:50.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/osmesa/osmesa.c 2004-12-15 02:51:01.000000000 +0100 @@ -1273,23 +1273,25 @@ } +typedef void (*OSMESAproc)(void); -struct name_address { +struct name_function +{ const char *Name; - GLvoid *Address; + OSMESAproc Function; }; -static struct name_address functions[] = { - { "OSMesaCreateContext", (void *) OSMesaCreateContext }, - { "OSMesaCreateContextExt", (void *) OSMesaCreateContextExt }, - { "OSMesaDestroyContext", (void *) OSMesaDestroyContext }, - { "OSMesaMakeCurrent", (void *) OSMesaMakeCurrent }, - { "OSMesaGetCurrentContext", (void *) OSMesaGetCurrentContext }, - { "OSMesaPixelsStore", (void *) OSMesaPixelStore }, - { "OSMesaGetIntegerv", (void *) OSMesaGetIntegerv }, - { "OSMesaGetDepthBuffer", (void *) OSMesaGetDepthBuffer }, - { "OSMesaGetColorBuffer", (void *) OSMesaGetColorBuffer }, - { "OSMesaGetProcAddress", (void *) OSMesaGetProcAddress }, +static struct name_function functions[] = { + { "OSMesaCreateContext", (OSMESAproc) OSMesaCreateContext }, + { "OSMesaCreateContextExt", (OSMESAproc) OSMesaCreateContextExt }, + { "OSMesaDestroyContext", (OSMESAproc) OSMesaDestroyContext }, + { "OSMesaMakeCurrent", (OSMESAproc) OSMesaMakeCurrent }, + { "OSMesaGetCurrentContext", (OSMESAproc) OSMesaGetCurrentContext }, + { "OSMesaPixelsStore", (OSMESAproc) OSMesaPixelStore }, + { "OSMesaGetIntegerv", (OSMESAproc) OSMesaGetIntegerv }, + { "OSMesaGetDepthBuffer", (OSMESAproc) OSMesaGetDepthBuffer }, + { "OSMesaGetColorBuffer", (OSMESAproc) OSMesaGetColorBuffer }, + { "OSMesaGetProcAddress", (OSMESAproc) OSMesaGetProcAddress }, { NULL, NULL } }; @@ -1299,7 +1301,7 @@ int i; for (i = 0; functions[i].Name; i++) { if (_mesa_strcmp(functions[i].Name, funcName) == 0) - return (void *) functions[i].Address; + return (void *) functions[i].Function; } return (void *) _glapi_get_proc_address(funcName); } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h x11r682/xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h --- xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h 2004-06-16 11:18:50.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/colors.h 2004-12-15 02:51:01.000000000 +0100 @@ -24,6 +24,9 @@ /* * $Log: colors.h,v $ + * Revision 1.2 2004/08/25 15:59:48 brianp + * Silence gcc 3.4 warnings on ReactOS. Mostly unused var warnings. (patch 1015696) + * * Revision 1.1 2003/07/24 03:47:46 kschultz * Source code for GDI driver. * @@ -49,6 +52,9 @@ /* * $Log: colors.h,v $ + * Revision 1.2 2004/08/25 15:59:48 brianp + * Silence gcc 3.4 warnings on ReactOS. Mostly unused var warnings. (patch 1015696) + * * Revision 1.1 2003/07/24 03:47:46 kschultz * Source code for GDI driver. * @@ -74,6 +80,9 @@ /* * $Log: colors.h,v $ + * Revision 1.2 2004/08/25 15:59:48 brianp + * Silence gcc 3.4 warnings on ReactOS. Mostly unused var warnings. (patch 1015696) + * * Revision 1.1 2003/07/24 03:47:46 kschultz * Source code for GDI driver. * @@ -141,7 +150,7 @@ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}; -#define BGR8(r,g,b) (unsigned)(((BYTE)(b & 0xc0 | (g & 0xe0)>>2 | (r & 0xe0)>>5))) +#define BGR8(r,g,b) (unsigned)(((BYTE)((b & 0xc0) | ((g & 0xe0)>>2) | ((r & 0xe0)>>5)))) #ifdef DDRAW #define BGR16(r,g,b) ((WORD)(((BYTE)(ColorMap16[b]) | ((BYTE)(g&0xfc) << 3)) | (((WORD)(BYTE)(ColorMap16[r])) << 11))) #else diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c x11r682/xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c --- xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c 2004-06-16 11:18:51.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/wgl.c 2004-12-15 02:51:01.000000000 +0100 @@ -1,4 +1,4 @@ -/* $Id: wgl.c,v 1.3 2004/01/07 12:34:28 dborca Exp $ */ +/* $Id: wgl.c,v 1.6 2004/08/30 08:37:57 dborca Exp $ */ /* * This library is free software; you can redistribute it and/or @@ -102,11 +102,12 @@ static MesaWglCtx wgl_ctx[MESAWGL_CTX_MAX_COUNT]; static unsigned ctx_count = 0; -static unsigned ctx_current = -1; +static int ctx_current = -1; static unsigned curPFD = 0; WGLAPI BOOL GLAPIENTRY wglCopyContext(HGLRC hglrcSrc,HGLRC hglrcDst,UINT mask) { + (void) hglrcSrc; (void) hglrcDst; (void) mask; return(FALSE); } @@ -166,6 +167,7 @@ WGLAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC hdc,int iLayerPlane) { + (void) hdc; (void) iLayerPlane; SetLastError(0); return(NULL); } @@ -212,6 +214,7 @@ WGLAPI BOOL GLAPIENTRY wglShareLists(HGLRC hglrc1,HGLRC hglrc2) { + (void) hglrc1; (void) hglrc2; return(TRUE); } @@ -219,7 +222,7 @@ static FIXED FixedFromDouble(double d) { long l = (long) (d * 65536L); - return *(FIXED *)&l; + return *(FIXED *) (void *) &l; } @@ -258,9 +261,9 @@ SetTextColor(bitDevice, tempColor); // Place chars based on base line - VERIFY(SetTextAlign(bitDevice, TA_BASELINE) >= 0 ? 1 : 0); + VERIFY(SetTextAlign(bitDevice, TA_BASELINE) != GDI_ERROR ? 1 : 0); - for(i = 0; i < numChars; i++) { + for(i = 0; i < (int)numChars; i++) { SIZE size; char curChar; int charWidth,charHeight,bmapWidth,bmapHeight,numBytes,res; @@ -285,7 +288,7 @@ // Assign the output bitmap to the device origBmap = SelectObject(bitDevice, bitObject); - VERIFY(origBmap); + (void) VERIFY(origBmap); VERIFY( PatBlt( bitDevice, 0, 0, bmapWidth, bmapHeight,BLACKNESS ) ); @@ -344,11 +347,7 @@ MAT2 mat; int success = TRUE; - if (first<0) - return FALSE; - if (count<0) - return FALSE; - if (listBase<0) + if (count == 0) return FALSE; font_list = listBase; @@ -373,7 +372,7 @@ /* ** Otherwise process all desired characters. */ - for (i = 0; i < count; i++) + for (i = 0; i < (int)count; i++) { DWORD err; @@ -432,6 +431,7 @@ WGLAPI BOOL GLAPIENTRY wglUseFontBitmapsW(HDC hdc,DWORD first,DWORD count,DWORD listBase) { + (void) hdc; (void) first; (void) count; (void) listBase; return FALSE; } @@ -440,6 +440,9 @@ FLOAT extrusion,int format, LPGLYPHMETRICSFLOAT lpgmf) { + (void) hdc; (void) first; (void) count; + (void) listBase; (void) deviation; (void) extrusion; (void) format; + (void) lpgmf; SetLastError(0); return(FALSE); } @@ -449,6 +452,9 @@ FLOAT extrusion,int format, LPGLYPHMETRICSFLOAT lpgmf) { + (void) hdc; (void) first; (void) count; + (void) listBase; (void) deviation; (void) extrusion; (void) format; + (void) lpgmf; SetLastError(0); return(FALSE); } @@ -457,6 +463,7 @@ int iLayerPlane,UINT nBytes, LPLAYERPLANEDESCRIPTOR plpd) { + (void) hdc; (void) iPixelFormat; (void) iLayerPlane; (void) nBytes; (void) plpd; SetLastError(0); return(FALSE); } @@ -465,6 +472,7 @@ int iStart,int cEntries, CONST COLORREF *pcr) { + (void) hdc; (void) iLayerPlane; (void) iStart; (void) cEntries; (void) pcr; SetLastError(0); return(0); } @@ -473,18 +481,21 @@ int iStart,int cEntries, COLORREF *pcr) { + (void) hdc; (void) iLayerPlane; (void) iStart; (void) cEntries; (void) pcr; SetLastError(0); return(0); } WGLAPI BOOL GLAPIENTRY wglRealizeLayerPalette(HDC hdc,int iLayerPlane,BOOL bRealize) { + (void) hdc; (void) iLayerPlane; (void) bRealize; SetLastError(0); return(FALSE); } WGLAPI BOOL GLAPIENTRY wglSwapLayerBuffers(HDC hdc,UINT fuPlanes) { + (void) fuPlanes; if( !hdc ) { WMesaSwapBuffers(); @@ -498,6 +509,7 @@ CONST PIXELFORMATDESCRIPTOR *ppfd) { int i,best = -1,bestdelta = 0x7FFFFFFF,delta,qt_valid_pix; + (void) hdc; qt_valid_pix = qt_pix; if(ppfd->nSize != sizeof(PIXELFORMATDESCRIPTOR) || ppfd->nVersion != 1) @@ -556,6 +568,7 @@ LPPIXELFORMATDESCRIPTOR ppfd) { int qt_valid_pix; + (void) hdc; qt_valid_pix = qt_pix; if(ppfd == NULL) @@ -584,6 +597,7 @@ WGLAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc) { + (void) hdc; if(curPFD == 0) { SetLastError(0); @@ -596,6 +610,7 @@ PIXELFORMATDESCRIPTOR *ppfd) { int qt_valid_pix; + (void) hdc; qt_valid_pix = qt_pix; if(iPixelFormat < 1 || iPixelFormat > qt_valid_pix || ppfd->nSize != sizeof(PIXELFORMATDESCRIPTOR)) @@ -609,6 +624,7 @@ WGLAPI BOOL GLAPIENTRY wglSwapBuffers(HDC hdc) { + (void) hdc; if (ctx_current < 0) return FALSE; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c x11r682/xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c --- xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c 2004-07-22 08:52:26.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesa.c 2004-12-15 02:51:01.000000000 +0100 @@ -45,6 +45,7 @@ #include "array_cache/acache.h" #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" +#include "swrast/s_alphabuf.h" #include "swrast/s_context.h" #include "swrast/s_depth.h" #include "swrast/s_lines.h" @@ -165,7 +166,6 @@ #define USE_GDI_TO_CLEAR 1 #endif -static void FlushToFile(PWMC pwc, PSTR szFile); BOOL wmCreateBackingStore(PWMC pwc, long lxSize, long lySize); BOOL wmDeleteBackingStore(PWMC pwc); void wmCreatePalette( PWMC pwdc ); @@ -347,15 +347,20 @@ BYTE DITHER_RGB_2_8BIT( int r, int g, int b, int x, int y); +#if 0 /* unused */ + /* Finish all pending operations and synchronize. */ static void finish(GLcontext* ctx) { /* No op */ + (void) ctx; } +#endif /* unused */ static void flush(GLcontext* ctx) { + (void) ctx; if((Current->rgb_flag &&!(Current->db_flag)) ||(!Current->rgb_flag)) { @@ -371,6 +376,7 @@ */ static void clear_index(GLcontext* ctx, GLuint index) { + (void) ctx; Current->clearpixel = index; } @@ -382,6 +388,7 @@ static void clear_color( GLcontext* ctx, const GLfloat color[4] ) { GLubyte col[4]; + (void) ctx; CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]); CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]); CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]); @@ -400,7 +407,7 @@ * Otherwise, we let swrast do it. */ -static clear(GLcontext* ctx, GLbitfield mask, +static void clear(GLcontext* ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height) { const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask; @@ -467,7 +474,7 @@ WORD wColor; BYTE bColor; LPDWORD lpdw = (LPDWORD)Current->pbPixels; - LPWORD lpw = (LPWORD)Current->pbPixels; + /*LPWORD lpw = (LPWORD)Current->pbPixels; */ LPBYTE lpb = Current->pbPixels; int lines; /* Double-buffering - clear back buffer */ @@ -513,7 +520,9 @@ dwColor = BGR32(GetRValue(Current->clearpixel), GetGValue(Current->clearpixel), GetBValue(Current->clearpixel)); - } + } + else + dwColor = 0; if (nBypp != 3) { @@ -567,6 +576,7 @@ static void enable( GLcontext* ctx, GLenum pname, GLboolean enable ) { + (void) ctx; if (!Current) return; @@ -592,6 +602,7 @@ static void set_buffer(GLcontext *ctx, GLframebuffer *colorBuffer, GLuint bufferBit ) { + (void) ctx; (void) colorBuffer; (void) bufferBit; /* XXX todo - examine bufferBit and set read/write pointers */ return; } @@ -601,9 +612,10 @@ /* Return characteristics of the output buffer. */ static void buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height ) { - GET_CURRENT_CONTEXT(ctx); + /*GET_CURRENT_CONTEXT(ctx);*/ int New_Size; RECT CR; + (void) buffer; GetClientRect(Current->Window,&CR); @@ -649,25 +661,36 @@ /* Accelerated routines are not implemented in 4.0. See OSMesa for ideas. */ +#if 0 /* unused */ + static void fast_rgb_points( GLcontext* ctx, GLuint first, GLuint last ) { + (void) ctx; (void) first; (void) last; } +#endif /* unused */ + /* Return pointer to accelerated points function */ extern tnl_points_func choose_points_function( GLcontext* ctx ) { + (void) ctx; return NULL; } +#if 0 /* unused */ + static void fast_flat_rgb_line( GLcontext* ctx, GLuint v0, GLuint v1, GLuint pv ) { + (void) ctx; (void) v0; (void) v1; (void) pv; } static tnl_line_func choose_line_function( GLcontext* ctx ) { + (void) ctx; } +#endif /* unused */ /**********************************************************************/ /***** Span-based pixel drawing *****/ @@ -682,6 +705,7 @@ { GLuint i; PBYTE Mem=Current->ScreenMem+FLIP(y)*Current->ScanWidth+x; + (void) ctx; assert(Current->rgb_flag==GL_FALSE); for (i=0; iScreenMem+FLIP(y)*Current->ScanWidth+x; + (void) ctx; assert(Current->rgb_flag==GL_FALSE); for (i=0; iScreenMem+FLIP(y)*Current->ScanWidth+x; + (void) ctx; assert(Current->rgb_flag==GL_FALSE); for (i=0; irgb_flag==GL_TRUE) { GLuint i; - HDC DC=DD_GETDC; + /*HDC DC=DD_GETDC;*/ y=FLIP(y); if (mask) { for (i=0; irgb_flag==GL_TRUE) { GLuint i; - HDC DC=DD_GETDC; + /*HDC DC=DD_GETDC;*/ y=FLIP(y); if (mask) { for (i=0; irgb_flag==GL_TRUE); y=FLIP(y); if(Current->rgb_flag==GL_TRUE) @@ -863,6 +892,7 @@ const GLuint index[], const GLubyte mask[] ) { GLuint i; + (void) ctx; assert(Current->rgb_flag==GL_FALSE); for (i=0; irgb_flag==GL_FALSE); for (i=0; irgb_flag==GL_TRUE); for (i=0; irgb_flag==GL_TRUE); for (i=0; iScreenMem+FLIP(y)*Current->ScanWidth+x; + (void) ctx; assert(Current->rgb_flag==GL_FALSE); for (i=0; irgb_flag==GL_FALSE); for (i=0; irgb_flag==GL_TRUE); y = Current->height - y - 1; for (i=0; irgb_flag==GL_TRUE); for (i=0; ihDC; +/* HDC DC = Current->hDC;*/ GET_CURRENT_CONTEXT(ctx); /* If we're swapping the buffer associated with the current context @@ -1699,6 +1737,8 @@ DWORD dwScanWidth; UINT nBypp = pwc->cColorBits / 8; HDC hic; + (void) hDC; + (void) pbmi; dwScanWidth = (((pwc->ScanWidth * nBypp)+ 3) & ~3); @@ -1742,14 +1782,14 @@ pwc->hbmDIB = CreateDIBSection(hic, &(pwc->bmi), (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS), - &(pwc->pbPixels), + (void **)&(pwc->pbPixels), pwc->dib.hFileMap, 0); #else pwc->hbmDIB = CreateDIBSection(hic, &(pwc->bmi), (iUsage ? DIB_PAL_COLORS : DIB_RGB_COLORS), - &(pwc->pbPixels), + (void **)&(pwc->pbPixels), 0, 0); #endif // USE_MAPPED_FILE @@ -1768,7 +1808,7 @@ BOOL wmFlush(PWMC pwc) { BOOL bRet = 0; - DWORD dwErr = 0; +/* DWORD dwErr = 0;*/ #ifdef DDRAW HRESULT ddrval; #endif @@ -3182,8 +3222,11 @@ #endif /************** END DEAD TRIANGLE CODE ***********************/ +#if 0 /* unused */ + static tnl_triangle_func choose_triangle_function( GLcontext *ctx ) { + (void) ctx; #if 0 WMesaContext wmesa = (WMesaContext) ctx->DriverCtx; int depth = wmesa->cColorBits; @@ -3277,6 +3320,8 @@ #endif } +#endif /* unused */ + /* * Define a new viewport and reallocate auxillary buffers if the size of * the window (color buffer) has changed. @@ -3284,6 +3329,7 @@ void WMesaViewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { + (void) ctx; (void) x; (void) y; (void) width; (void) height; assert(0); /* I don't think that this is being used. */ #if 0 /* Save viewport */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h x11r682/xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h --- xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h 2004-06-16 11:18:51.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/windows/gdi/wmesadef.h 2004-12-15 02:51:01.000000000 +0100 @@ -93,6 +93,7 @@ }WMDIBSECTION, *PWMDIBSECTION; #ifdef COMPILE_SETPIXEL +struct wmesa_context; typedef void (*SETPIXELTYPE)(struct wmesa_context *pwc, int iScanLine, int iPixel, BYTE r, BYTE g, BYTE b); #endif diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c x11r682/xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c --- xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c 2004-08-13 01:06:51.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/x11/fakeglx.c 2004-12-15 02:51:02.000000000 +0100 @@ -1,6 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 6.1 + * Version: 6.2 * * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * @@ -80,10 +80,6 @@ "GLX_SGI_video_sync " \ "GLX_SGIX_fbconfig " \ "GLX_SGIX_pbuffer " -/* - "GLX_ARB_render_texture" -*/ - /* * Our fake GLX context will contain a "real" GLX context and an XMesa context. @@ -144,7 +140,8 @@ /* * Test if the given XVisualInfo is usable for Mesa rendering. */ -static GLboolean is_usable_visual( XVisualInfo *vinfo ) +static GLboolean +is_usable_visual( XVisualInfo *vinfo ) { switch (vinfo->CLASS) { case StaticGray: @@ -181,7 +178,8 @@ * >0 = overlay planes * <0 = underlay planes */ -static int level_of_visual( Display *dpy, XVisualInfo *vinfo ) +static int +level_of_visual( Display *dpy, XVisualInfo *vinfo ) { Atom overlayVisualsAtom; OverlayInfo *overlay_info = NULL; @@ -332,7 +330,9 @@ /* add xmvis to the list */ VisualTable[NumVisuals] = xmvis; NumVisuals++; - /* XXX minor hack */ + /* XXX minor hack, because XMesaCreateVisual doesn't support an + * aux buffers parameter. + */ xmvis->mesa_visual.numAuxBuffers = numAuxBuffers; } return xmvis; @@ -467,7 +467,8 @@ * Input: glxvis - the glx_visual * Return: a pixel value or -1 if no transparent pixel */ -static int transparent_pixel( XMesaVisual glxvis ) +static int +transparent_pixel( XMesaVisual glxvis ) { Display *dpy = glxvis->display; XVisualInfo *vinfo = glxvis->visinfo; @@ -532,8 +533,8 @@ /* * Try to get an X visual which matches the given arguments. */ -static XVisualInfo *get_visual( Display *dpy, int scr, - unsigned int depth, int xclass ) +static XVisualInfo * +get_visual( Display *dpy, int scr, unsigned int depth, int xclass ) { XVisualInfo temp, *vis; long mask; @@ -586,7 +587,8 @@ * varname - the name of the environment variable * Return: an XVisualInfo pointer to NULL if error. */ -static XVisualInfo *get_env_visual(Display *dpy, int scr, const char *varname) +static XVisualInfo * +get_env_visual(Display *dpy, int scr, const char *varname) { char value[100], type[100]; int depth, xclass = -1; @@ -631,9 +633,9 @@ * preferred_class - preferred GLX visual class or DONT_CARE * Return: pointer to an XVisualInfo or NULL. */ -static XVisualInfo *choose_x_visual( Display *dpy, int screen, - GLboolean rgba, int min_depth, - int preferred_class ) +static XVisualInfo * +choose_x_visual( Display *dpy, int screen, GLboolean rgba, int min_depth, + int preferred_class ) { XVisualInfo *vis; int xclass, visclass = 0; @@ -801,12 +803,10 @@ * preferred_class - preferred GLX visual class or DONT_CARE * Return: pointer to an XVisualInfo or NULL. */ -static XVisualInfo *choose_x_overlay_visual( Display *dpy, int scr, - GLboolean rgbFlag, - int level, int trans_type, - int trans_value, - int min_depth, - int preferred_class ) +static XVisualInfo * +choose_x_overlay_visual( Display *dpy, int scr, GLboolean rgbFlag, + int level, int trans_type, int trans_value, + int min_depth, int preferred_class ) { Atom overlayVisualsAtom; OverlayInfo *overlay_info; @@ -931,8 +931,9 @@ /**********************************************************************/ -static XMesaVisual choose_visual( Display *dpy, int screen, const int *list, - GLboolean rgbModeDefault ) +static XMesaVisual +choose_visual( Display *dpy, int screen, const int *list, + GLboolean rgbModeDefault ) { const int *parselist; XVisualInfo *vis; @@ -1392,7 +1393,6 @@ } - static Bool Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) { @@ -1400,7 +1400,6 @@ } - static GLXPixmap Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap ) { @@ -1463,7 +1462,6 @@ } - static void Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, unsigned long mask ) @@ -1477,7 +1475,6 @@ } - static Bool Fake_glXQueryExtension( Display *dpy, int *errorb, int *event ) { @@ -1512,7 +1509,6 @@ } - static Bool Fake_glXIsDirect( Display *dpy, GLXContext ctx ) { @@ -1554,7 +1550,6 @@ } - static Bool Fake_glXQueryVersion( Display *dpy, int *maj, int *min ) { @@ -1567,7 +1562,6 @@ } - /* * Query the GLX attributes of the given XVisualInfo. */ @@ -2738,9 +2732,19 @@ } - +/* silence warning */ extern struct _glxapi_table *_mesa_GetGLXDispatchTable(void); -struct _glxapi_table *_mesa_GetGLXDispatchTable(void) + + +/** + * Create a new GLX API dispatch table with its function pointers + * initialized to point to Mesa's "fake" GLX API functions. + * Note: there's a similar function (_real_GetGLXDispatchTable) that + * returns a new dispatch table with all pointers initalized to point + * to "real" GLX functions (which understand GLX wire protocol, etc). + */ +struct _glxapi_table * +_mesa_GetGLXDispatchTable(void) { static struct _glxapi_table glx; diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c x11r682/xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c --- xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c 2004-06-16 11:19:00.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/x11/glxapi.c 2004-12-15 02:51:02.000000000 +0100 @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.2.1 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -1141,160 +1140,161 @@ void _glxapi_set_no_op_table(struct _glxapi_table *t) { + typedef int (*nop_func)(void); + nop_func *dispatch = (nop_func *) t; GLuint n = _glxapi_get_dispatch_table_size(); GLuint i; - void **dispatch = (void **) t; for (i = 0; i < n; i++) { - dispatch[i] = (void *) generic_no_op_func; + dispatch[i] = generic_no_op_func; } } struct name_address_pair { const char *Name; - GLvoid *Address; + __GLXextFuncPtr Address; }; static struct name_address_pair GLX_functions[] = { /*** GLX_VERSION_1_0 ***/ - { "glXChooseVisual", (GLvoid *) glXChooseVisual }, - { "glXCopyContext", (GLvoid *) glXCopyContext }, - { "glXCreateContext", (GLvoid *) glXCreateContext }, - { "glXCreateGLXPixmap", (GLvoid *) glXCreateGLXPixmap }, - { "glXDestroyContext", (GLvoid *) glXDestroyContext }, - { "glXDestroyGLXPixmap", (GLvoid *) glXDestroyGLXPixmap }, - { "glXGetConfig", (GLvoid *) glXGetConfig }, - { "glXGetCurrentContext", (GLvoid *) glXGetCurrentContext }, - { "glXGetCurrentDrawable", (GLvoid *) glXGetCurrentDrawable }, - { "glXIsDirect", (GLvoid *) glXIsDirect }, - { "glXMakeCurrent", (GLvoid *) glXMakeCurrent }, - { "glXQueryExtension", (GLvoid *) glXQueryExtension }, - { "glXQueryVersion", (GLvoid *) glXQueryVersion }, - { "glXSwapBuffers", (GLvoid *) glXSwapBuffers }, - { "glXUseXFont", (GLvoid *) glXUseXFont }, - { "glXWaitGL", (GLvoid *) glXWaitGL }, - { "glXWaitX", (GLvoid *) glXWaitX }, + { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual }, + { "glXCopyContext", (__GLXextFuncPtr) glXCopyContext }, + { "glXCreateContext", (__GLXextFuncPtr) glXCreateContext }, + { "glXCreateGLXPixmap", (__GLXextFuncPtr) glXCreateGLXPixmap }, + { "glXDestroyContext", (__GLXextFuncPtr) glXDestroyContext }, + { "glXDestroyGLXPixmap", (__GLXextFuncPtr) glXDestroyGLXPixmap }, + { "glXGetConfig", (__GLXextFuncPtr) glXGetConfig }, + { "glXGetCurrentContext", (__GLXextFuncPtr) glXGetCurrentContext }, + { "glXGetCurrentDrawable", (__GLXextFuncPtr) glXGetCurrentDrawable }, + { "glXIsDirect", (__GLXextFuncPtr) glXIsDirect }, + { "glXMakeCurrent", (__GLXextFuncPtr) glXMakeCurrent }, + { "glXQueryExtension", (__GLXextFuncPtr) glXQueryExtension }, + { "glXQueryVersion", (__GLXextFuncPtr) glXQueryVersion }, + { "glXSwapBuffers", (__GLXextFuncPtr) glXSwapBuffers }, + { "glXUseXFont", (__GLXextFuncPtr) glXUseXFont }, + { "glXWaitGL", (__GLXextFuncPtr) glXWaitGL }, + { "glXWaitX", (__GLXextFuncPtr) glXWaitX }, /*** GLX_VERSION_1_1 ***/ - { "glXGetClientString", (GLvoid *) glXGetClientString }, - { "glXQueryExtensionsString", (GLvoid *) glXQueryExtensionsString }, - { "glXQueryServerString", (GLvoid *) glXQueryServerString }, + { "glXGetClientString", (__GLXextFuncPtr) glXGetClientString }, + { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString }, + { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString }, /*** GLX_VERSION_1_2 ***/ - { "glXGetCurrentDisplay", (GLvoid *) glXGetCurrentDisplay }, + { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay }, /*** GLX_VERSION_1_3 ***/ - { "glXChooseFBConfig", (GLvoid *) glXChooseFBConfig }, - { "glXCreateNewContext", (GLvoid *) glXCreateNewContext }, - { "glXCreatePbuffer", (GLvoid *) glXCreatePbuffer }, - { "glXCreatePixmap", (GLvoid *) glXCreatePixmap }, - { "glXCreateWindow", (GLvoid *) glXCreateWindow }, - { "glXDestroyPbuffer", (GLvoid *) glXDestroyPbuffer }, - { "glXDestroyPixmap", (GLvoid *) glXDestroyPixmap }, - { "glXDestroyWindow", (GLvoid *) glXDestroyWindow }, - { "glXGetCurrentReadDrawable", (GLvoid *) glXGetCurrentReadDrawable }, - { "glXGetFBConfigAttrib", (GLvoid *) glXGetFBConfigAttrib }, - { "glXGetFBConfigs", (GLvoid *) glXGetFBConfigs }, - { "glXGetSelectedEvent", (GLvoid *) glXGetSelectedEvent }, - { "glXGetVisualFromFBConfig", (GLvoid *) glXGetVisualFromFBConfig }, - { "glXMakeContextCurrent", (GLvoid *) glXMakeContextCurrent }, - { "glXQueryContext", (GLvoid *) glXQueryContext }, - { "glXQueryDrawable", (GLvoid *) glXQueryDrawable }, - { "glXSelectEvent", (GLvoid *) glXSelectEvent }, + { "glXChooseFBConfig", (__GLXextFuncPtr) glXChooseFBConfig }, + { "glXCreateNewContext", (__GLXextFuncPtr) glXCreateNewContext }, + { "glXCreatePbuffer", (__GLXextFuncPtr) glXCreatePbuffer }, + { "glXCreatePixmap", (__GLXextFuncPtr) glXCreatePixmap }, + { "glXCreateWindow", (__GLXextFuncPtr) glXCreateWindow }, + { "glXDestroyPbuffer", (__GLXextFuncPtr) glXDestroyPbuffer }, + { "glXDestroyPixmap", (__GLXextFuncPtr) glXDestroyPixmap }, + { "glXDestroyWindow", (__GLXextFuncPtr) glXDestroyWindow }, + { "glXGetCurrentReadDrawable", (__GLXextFuncPtr) glXGetCurrentReadDrawable }, + { "glXGetFBConfigAttrib", (__GLXextFuncPtr) glXGetFBConfigAttrib }, + { "glXGetFBConfigs", (__GLXextFuncPtr) glXGetFBConfigs }, + { "glXGetSelectedEvent", (__GLXextFuncPtr) glXGetSelectedEvent }, + { "glXGetVisualFromFBConfig", (__GLXextFuncPtr) glXGetVisualFromFBConfig }, + { "glXMakeContextCurrent", (__GLXextFuncPtr) glXMakeContextCurrent }, + { "glXQueryContext", (__GLXextFuncPtr) glXQueryContext }, + { "glXQueryDrawable", (__GLXextFuncPtr) glXQueryDrawable }, + { "glXSelectEvent", (__GLXextFuncPtr) glXSelectEvent }, /*** GLX_VERSION_1_4 ***/ - { "glXGetProcAddress", (GLvoid *) glXGetProcAddress }, + { "glXGetProcAddress", (__GLXextFuncPtr) glXGetProcAddress }, /*** GLX_SGI_swap_control ***/ - { "glXSwapIntervalSGI", (GLvoid *) glXSwapIntervalSGI }, + { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI }, /*** GLX_SGI_video_sync ***/ - { "glXGetVideoSyncSGI", (GLvoid *) glXGetVideoSyncSGI }, - { "glXWaitVideoSyncSGI", (GLvoid *) glXWaitVideoSyncSGI }, + { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI }, + { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI }, /*** GLX_SGI_make_current_read ***/ - { "glXMakeCurrentReadSGI", (GLvoid *) glXMakeCurrentReadSGI }, - { "glXGetCurrentReadDrawableSGI", (GLvoid *) glXGetCurrentReadDrawableSGI }, + { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI }, + { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI }, /*** GLX_SGIX_video_source ***/ #if defined(_VL_H) - { "glXCreateGLXVideoSourceSGIX", (GLvoid *) glXCreateGLXVideoSourceSGIX }, - { "glXDestroyGLXVideoSourceSGIX", (GLvoid *) glXDestroyGLXVideoSourceSGIX }, + { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX }, + { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX }, #endif /*** GLX_EXT_import_context ***/ - { "glXFreeContextEXT", (GLvoid *) glXFreeContextEXT }, - { "glXGetContextIDEXT", (GLvoid *) glXGetContextIDEXT }, - { "glXGetCurrentDisplayEXT", (GLvoid *) glXGetCurrentDisplayEXT }, - { "glXImportContextEXT", (GLvoid *) glXImportContextEXT }, - { "glXQueryContextInfoEXT", (GLvoid *) glXQueryContextInfoEXT }, + { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT }, + { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT }, + { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT }, + { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT }, + { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT }, /*** GLX_SGIX_fbconfig ***/ - { "glXGetFBConfigAttribSGIX", (GLvoid *) glXGetFBConfigAttribSGIX }, - { "glXChooseFBConfigSGIX", (GLvoid *) glXChooseFBConfigSGIX }, - { "glXCreateGLXPixmapWithConfigSGIX", (GLvoid *) glXCreateGLXPixmapWithConfigSGIX }, - { "glXCreateContextWithConfigSGIX", (GLvoid *) glXCreateContextWithConfigSGIX }, - { "glXGetVisualFromFBConfigSGIX", (GLvoid *) glXGetVisualFromFBConfigSGIX }, - { "glXGetFBConfigFromVisualSGIX", (GLvoid *) glXGetFBConfigFromVisualSGIX }, + { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX }, + { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX }, + { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX }, + { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX }, + { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX }, + { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX }, /*** GLX_SGIX_pbuffer ***/ - { "glXCreateGLXPbufferSGIX", (GLvoid *) glXCreateGLXPbufferSGIX }, - { "glXDestroyGLXPbufferSGIX", (GLvoid *) glXDestroyGLXPbufferSGIX }, - { "glXQueryGLXPbufferSGIX", (GLvoid *) glXQueryGLXPbufferSGIX }, - { "glXSelectEventSGIX", (GLvoid *) glXSelectEventSGIX }, - { "glXGetSelectedEventSGIX", (GLvoid *) glXGetSelectedEventSGIX }, + { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX }, + { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX }, + { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX }, + { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX }, + { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX }, /*** GLX_SGI_cushion ***/ - { "glXCushionSGI", (GLvoid *) glXCushionSGI }, + { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI }, /*** GLX_SGIX_video_resize ***/ - { "glXBindChannelToWindowSGIX", (GLvoid *) glXBindChannelToWindowSGIX }, - { "glXChannelRectSGIX", (GLvoid *) glXChannelRectSGIX }, - { "glXQueryChannelRectSGIX", (GLvoid *) glXQueryChannelRectSGIX }, - { "glXQueryChannelDeltasSGIX", (GLvoid *) glXQueryChannelDeltasSGIX }, - { "glXChannelRectSyncSGIX", (GLvoid *) glXChannelRectSyncSGIX }, + { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX }, + { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX }, + { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX }, + { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX }, + { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX }, /*** GLX_SGIX_dmbuffer **/ #if defined(_DM_BUFFER_H_) - { "glXAssociateDMPbufferSGIX", (GLvoid *) glXAssociateDMPbufferSGIX }, + { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX }, #endif /*** GLX_SGIX_swap_group ***/ - { "glXJoinSwapGroupSGIX", (GLvoid *) glXJoinSwapGroupSGIX }, + { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX }, /*** GLX_SGIX_swap_barrier ***/ - { "glXBindSwapBarrierSGIX", (GLvoid *) glXBindSwapBarrierSGIX }, - { "glXQueryMaxSwapBarriersSGIX", (GLvoid *) glXQueryMaxSwapBarriersSGIX }, + { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX }, + { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX }, /*** GLX_SUN_get_transparent_index ***/ - { "glXGetTransparentIndexSUN", (GLvoid *) glXGetTransparentIndexSUN }, + { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN }, /*** GLX_MESA_copy_sub_buffer ***/ - { "glXCopySubBufferMESA", (GLvoid *) glXCopySubBufferMESA }, + { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA }, /*** GLX_MESA_pixmap_colormap ***/ - { "glXCreateGLXPixmapMESA", (GLvoid *) glXCreateGLXPixmapMESA }, + { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA }, /*** GLX_MESA_release_buffers ***/ - { "glXReleaseBuffersMESA", (GLvoid *) glXReleaseBuffersMESA }, + { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA }, /*** GLX_MESA_set_3dfx_mode ***/ - { "glXSet3DfxModeMESA", (GLvoid *) glXSet3DfxModeMESA }, + { "glXSet3DfxModeMESA", (__GLXextFuncPtr) glXSet3DfxModeMESA }, /*** GLX_ARB_get_proc_address ***/ - { "glXGetProcAddressARB", (GLvoid *) glXGetProcAddressARB }, + { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB }, /*** GLX_NV_vertex_array_range ***/ - { "glXAllocateMemoryNV", (GLvoid *) glXAllocateMemoryNV }, - { "glXFreeMemoryNV", (GLvoid *) glXFreeMemoryNV }, + { "glXAllocateMemoryNV", (__GLXextFuncPtr) glXAllocateMemoryNV }, + { "glXFreeMemoryNV", (__GLXextFuncPtr) glXFreeMemoryNV }, /*** GLX_MESA_agp_offset ***/ - { "glXGetAGPOffsetMESA", (GLvoid *) glXGetAGPOffsetMESA }, + { "glXGetAGPOffsetMESA", (__GLXextFuncPtr) glXGetAGPOffsetMESA }, /*** GLX_ARB_render_texture ***/ - { "glXBindTexImageARB", (GLvoid *) glXBindTexImageARB }, - { "glXReleaseTexImageARB", (GLvoid *) glXReleaseTexImageARB }, - { "glXDrawableAttribARB", (GLvoid *) glXDrawableAttribARB }, + { "glXBindTexImageARB", (__GLXextFuncPtr) glXBindTexImageARB }, + { "glXReleaseTexImageARB", (__GLXextFuncPtr) glXReleaseTexImageARB }, + { "glXDrawableAttribARB", (__GLXextFuncPtr) glXDrawableAttribARB }, { NULL, NULL } /* end of list */ }; @@ -1304,7 +1304,7 @@ /* * Return address of named glX function, or NULL if not found. */ -const GLvoid * +__GLXextFuncPtr _glxapi_get_proc_address(const char *funcName) { GLuint i; @@ -1321,17 +1321,17 @@ * This function does not get dispatched through the dispatch table * since it's really a "meta" function. */ -void (*glXGetProcAddressARB(const GLubyte *procName))() +__GLXextFuncPtr +glXGetProcAddressARB(const GLubyte *procName) { - typedef void (*gl_function)(); - gl_function f; + __GLXextFuncPtr f; - f = (gl_function) _glxapi_get_proc_address((const char *) procName); + f = _glxapi_get_proc_address((const char *) procName); if (f) { return f; } - f = (gl_function) _glapi_get_proc_address((const char *) procName); + f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName); return f; } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h x11r682/xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h --- xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h 2004-06-16 11:19:00.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/x11/glxapi.h 2004-12-15 02:51:02.000000000 +0100 @@ -229,7 +229,7 @@ _glxapi_set_no_op_table(struct _glxapi_table *t); -extern const GLvoid * +extern __GLXextFuncPtr _glxapi_get_proc_address(const char *funcName); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c x11r682/xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c --- xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c 2004-06-16 11:19:02.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/x11/xm_span.c 2004-12-15 02:51:02.000000000 +0100 @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.2.1 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -3456,6 +3456,49 @@ /***** Pixel reading *****/ /**********************************************************************/ +#ifndef XFree86Server +/** + * Do clip testing prior to calling XGetImage. If any of the region lies + * outside the screen's bounds, XGetImage will return NULL. + * We use XTranslateCoordinates() to check if that's the case and + * adjust the x, y and length parameters accordingly. + * \return -1 if span is totally clipped away, + * else return number of pixels to skip in the destination array. + */ +static int +clip_for_xgetimage(XMesaContext xmesa, GLuint *n, GLint *x, GLint *y) +{ + XMesaBuffer source = xmesa->xm_buffer; + Window rootWin = RootWindow(xmesa->display, 0); + Window child; + int screenWidth = WidthOfScreen(DefaultScreenOfDisplay(xmesa->display)); + int dx, dy; + if (source->type == PBUFFER) + return 0; + XTranslateCoordinates(xmesa->display, source->buffer, rootWin, + *x, *y, &dx, &dy, &child); + if (dx >= screenWidth) { + /* totally clipped on right */ + return -1; + } + if (dx < 0) { + /* clipped on left */ + int clip = -dx; + if (clip >= *n) + return -1; /* totally clipped on left */ + *x += clip; + *n -= clip; + dx = 0; + return clip; + } + if (dx + *n > screenWidth) { + /* clipped on right */ + int clip = dx + *n - screenWidth; + *n -= clip; + } + return 0; +} +#endif /* @@ -3474,6 +3517,11 @@ #ifndef XFree86Server XMesaImage *span = NULL; int error; + int k = clip_for_xgetimage(xmesa, &n, &x, &y); + if (k < 0) + return; + index += k; + catch_xgetimage_errors( xmesa->display ); span = XGetImage( xmesa->display, source->buffer, x, y, n, 1, AllPlanes, ZPixmap ); @@ -3530,9 +3578,15 @@ x, FLIP(source, y), n, 1, ZPixmap, ~0L, (pointer)span->data); #else + int k; + y = FLIP(source, y); + k = clip_for_xgetimage(xmesa, &n, &x, &y); + if (k < 0) + return; + rgba += k; catch_xgetimage_errors( xmesa->display ); span = XGetImage( xmesa->display, source->buffer, - x, FLIP(source, y), n, 1, AllPlanes, ZPixmap ); + x, y, n, 1, AllPlanes, ZPixmap ); error = check_xgetimage_errors(); #endif if (span && !error) { diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c x11r682/xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c --- xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c 2004-06-16 11:19:02.000000000 +0200 +++ xc/extras/Mesa/src/mesa/drivers/x11/xm_tri.c 2004-12-15 02:51:02.000000000 +0100 @@ -1352,7 +1352,6 @@ USE(smooth_DITHER8_z_triangle); else USE(smooth_DITHER_z_triangle); - break; case PF_Lookup: if (depth == 8) USE(smooth_LOOKUP8_z_triangle); @@ -1390,7 +1389,6 @@ USE(flat_DITHER8_z_triangle); else USE(flat_DITHER_z_triangle); - break; case PF_Lookup: if (depth == 8) USE(flat_LOOKUP8_z_triangle); @@ -1425,7 +1423,6 @@ USE(smooth_DITHER8_triangle); else USE(smooth_DITHER_triangle); - break; case PF_Lookup: if (depth == 8) USE(smooth_LOOKUP8_triangle); @@ -1461,7 +1458,6 @@ USE(flat_DITHER8_triangle); else USE(flat_DITHER_triangle); - break; case PF_Lookup: if (depth == 8) USE(flat_LOOKUP8_triangle); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/Makefile x11r682/xc/extras/Mesa/src/mesa/glapi/Makefile --- xc/extras/Mesa/src/mesa/glapi/Makefile 1970-01-01 01:00:00.000000000 +0100 +++ xc/extras/Mesa/src/mesa/glapi/Makefile 2004-12-15 02:51:02.000000000 +0100 @@ -0,0 +1,38 @@ +# This file isn't used during a normal compilation since we don't want to +# require Python in order to compile Mesa. +# Instead, when the Mesa developers update/change the API interface it's +# up to him/her to re-run this makefile and check in the newly generated files. + + +OUTPUTS = glprocs.h glapitemp.h glapioffsets.h glapitable.h glapi_x86.S + +COMMON = gl_XML.pyc license.pyc gl_API.xml + +all: $(OUTPUTS) + +gl_XML.pyc: gl_XML.py + rm -f gl_XML.pyc > /dev/null + python2 -t -O gl_XML.py + +license.pyc: license.py + rm -f license.pyc > /dev/null + python2 -t -O license.py + +glprocs.h: $(COMMON) gl_procs.py + python2 -t gl_procs.py > glprocs.h + +glapitemp.h: $(COMMON) gl_apitemp.py + python2 -t gl_apitemp.py > glapitemp.h + +glapioffsets.h: $(COMMON) gl_offsets.py + python2 -t gl_offsets.py > glapioffsets.h + +glapitable.h: $(COMMON) gl_table.py + python2 -t gl_table.py > glapitable.h + +glapi_x86.S: $(COMMON) gl_x86_asm.py + python2 -t gl_x86_asm.py > glapi_x86.S + +clean: + rm -f *~ *.pyc + rm -f $(OUTPUTS) diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/gl_API.xml x11r682/xc/extras/Mesa/src/mesa/glapi/gl_API.xml --- xc/extras/Mesa/src/mesa/glapi/gl_API.xml 2004-06-16 11:19:07.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/gl_API.xml 2004-12-15 02:51:02.000000000 +0100 @@ -3806,6 +3806,7 @@ + diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py x11r682/xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py --- xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py 2004-06-16 11:19:07.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/gl_SPARC_asm.py 2004-12-15 02:51:02.000000000 +0100 @@ -48,7 +48,7 @@ print '' print '#define GLOBL_FN(x) .globl x ; .type x,#function' print '' - print '#if defined(__sparc_v9__) && !defined(__linux__)' + print '#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))' print '# define GL_STUB(fn,off)\t\t\t\t\\' print 'GLOBL_FN(fn) ; fn:\t\t\t\t\t\\' print '\tsethi\t%hi(0x00000000), %g4 ;\t\t\t\\' diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py x11r682/xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py --- xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py 2004-07-22 08:52:47.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/gl_apitemp.py 2004-12-15 02:51:02.000000000 +0100 @@ -149,7 +149,7 @@ #error TABLE_ENTRY must be defined #endif -static void * DISPATCH_TABLE_NAME[] = {""" +static _glapi_proc DISPATCH_TABLE_NAME[] = {""" keys = self.functions.keys() keys.sort() for k in keys: @@ -176,7 +176,7 @@ * We list the functions which are not otherwise used. */ #ifdef UNUSED_TABLE_NAME -static const void * const UNUSED_TABLE_NAME[] = {""" +static _glapi_proc UNUSED_TABLE_NAME[] = {""" keys = self.functions.keys() keys.sort() diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/gl_procs.py x11r682/xc/extras/Mesa/src/mesa/glapi/gl_procs.py --- xc/extras/Mesa/src/mesa/glapi/gl_procs.py 2004-06-16 11:19:07.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/gl_procs.py 2004-12-15 02:51:02.000000000 +0100 @@ -50,15 +50,15 @@ print ' */' print '' print 'typedef struct {' - print ' int Name_offset;' + print ' GLint Name_offset;' print '#ifdef NEED_FUNCTION_POINTER' - print ' void * Address;' + print ' _glapi_proc Address;' print '#endif' - print ' unsigned int Offset;' + print ' GLuint Offset;' print '} glprocs_table_t;' print '' print '#ifdef NEED_FUNCTION_POINTER' - print '# define NAME_FUNC_OFFSET(n,f,o) { n , (void *) f , o }' + print '# define NAME_FUNC_OFFSET(n,f,o) { n , (_glapi_proc) f , o }' print '#else' print '# define NAME_FUNC_OFFSET(n,f,o) { n , o }' print '#endif' @@ -132,7 +132,7 @@ base_offset += len(self.functions[k].name) + 3 - print ' NAME_FUNC_OFFSET( -1, NULL, -1 )' + print ' NAME_FUNC_OFFSET( -1, NULL, 0 )' print '};' return diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py x11r682/xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py --- xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py 2004-08-28 06:27:54.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/gl_x86_asm.py 2004-12-15 02:51:02.000000000 +0100 @@ -62,11 +62,17 @@ print '#ifndef __WIN32__' print '' print '#if defined(STDCALL_API)' - print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))' - print '#elif defined(USE_MGL_NAMESPACE)' - print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))' + print '# if defined(USE_MGL_NAMESPACE)' + print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n2))' + print '# else' + print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))' + print '# endif' print '#else' - print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))' + print '# if defined(USE_MGL_NAMESPACE)' + print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))' + print '# else' + print '# define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))' + print '# endif' print '#endif' print '' print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))' diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/glapi.c x11r682/xc/extras/Mesa/src/mesa/glapi/glapi.c --- xc/extras/Mesa/src/mesa/glapi/glapi.c 2004-07-22 08:52:42.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/glapi.c 2004-12-15 02:51:02.000000000 +0100 @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.3 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 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"), @@ -100,25 +99,23 @@ #define F NULL -#define DISPATCH(func, args, msg) \ - if (warn()) { \ - warning_func(NULL, "GL User Error: called without context:"); \ - warning_func msg; \ +#define DISPATCH(func, args, msg) \ + if (warn()) { \ + warning_func(NULL, "GL User Error: called without context: %s", #func); \ } -#define RETURN_DISPATCH(func, args, msg) \ - if (warn()) { \ - warning_func(NULL, "GL User Error: called without context:"); \ - warning_func msg; \ - } \ +#define RETURN_DISPATCH(func, args, msg) \ + if (warn()) { \ + warning_func(NULL, "GL User Error: called without context: %s", #func); \ + } \ return 0 #define DISPATCH_TABLE_NAME __glapi_noop_table -#define UNUSED_TABLE_NAME __usused_noop_functions +#define UNUSED_TABLE_NAME __unused_noop_functions -#define TABLE_ENTRY(name) (void *) NoOp##name +#define TABLE_ENTRY(name) (_glapi_proc) NoOp##name -static int NoOpUnused(void) +static GLint NoOpUnused(void) { if (warn()) { warning_func(NULL, "GL User Error: calling extension function without a current context\n"); @@ -171,11 +168,11 @@ #define DISPATCH_TABLE_NAME __glapi_threadsafe_table -#define UNUSED_TABLE_NAME __usused_threadsafe_functions +#define UNUSED_TABLE_NAME __unused_threadsafe_functions -#define TABLE_ENTRY(name) (void *) gl##name +#define TABLE_ENTRY(name) (_glapi_proc) gl##name -static int glUnused(void) +static GLint glUnused(void) { return 0; } @@ -203,7 +200,8 @@ -/* strdup() is actually not a standard ANSI C or POSIX routine. +/** + * strdup() is actually not a standard ANSI C or POSIX routine. * Irix will not define it if ANSI mode is in effect. */ static char * @@ -219,7 +217,7 @@ -/* +/** * We should call this periodically from a function such as glXMakeCurrent * in order to test if multiple threads are being used. */ @@ -248,7 +246,7 @@ -/* +/** * Set the current context pointer for this thread. * The context pointer is an opaque type which should be cast to * void from the real context pointer type. @@ -256,7 +254,9 @@ void _glapi_set_context(void *context) { + (void) __unused_noop_functions; /* silence a warning */ #if defined(THREADS) + (void) __unused_threadsafe_functions; /* silence a warning */ _glthread_SetTSD(&ContextTSD, context); _glapi_Context = (ThreadSafe) ? NULL : context; #else @@ -266,7 +266,7 @@ -/* +/** * Get the current context pointer for this thread. * The context pointer is an opaque type which should be cast from * void to the real context pointer type. @@ -288,7 +288,7 @@ -/* +/** * Set the global or per-thread dispatch table pointer. */ void @@ -336,7 +336,7 @@ -/* +/** * Return pointer to current dispatch table for calling thread. */ struct _glapi_table * @@ -452,13 +452,6 @@ } -struct name_address_offset { - const char *Name; - GLvoid *Address; - GLuint Offset; -}; - - #if !defined( USE_X86_ASM ) #define NEED_FUNCTION_POINTER #endif @@ -467,12 +460,16 @@ #include "glprocs.h" +/** + * Search the table of static entrypoint functions for the named function + * and return the corresponding glprocs_table_t entry. + */ static const glprocs_table_t * find_entry( const char * n ) { - unsigned i; + GLuint i; - for ( i = 0 ; static_functions[i].Name_offset >= 0 ; i++ ) { + for (i = 0; static_functions[i].Name_offset >= 0; i++) { const char * test_name; test_name = gl_string_table + static_functions[i].Name_offset; @@ -483,7 +480,8 @@ return NULL; } -/* + +/** * Return dispatch table offset of the named static (built-in) function. * Return -1 if function not found. */ @@ -509,18 +507,18 @@ # endif -/* +/** * Return dispatch function address the named static (built-in) function. * Return NULL if function not found. */ -static const GLvoid * +static const _glapi_proc get_static_proc_address(const char *funcName) { const glprocs_table_t * const f = find_entry( funcName ); if ( f != NULL ) { - return gl_dispatch_functions_start - + (X86_DISPATCH_FUNCTION_SIZE * f->Offset); + return (_glapi_proc) (gl_dispatch_functions_start + + (X86_DISPATCH_FUNCTION_SIZE * f->Offset)); } else { return NULL; @@ -530,11 +528,11 @@ #else -/* - * Return dispatch function address the named static (built-in) function. - * Return NULL if function not found. +/** + * Return pointer to the named static (built-in) function. + * \return NULL if function not found. */ -static const GLvoid * +static const _glapi_proc get_static_proc_address(const char *funcName) { const glprocs_table_t * const f = find_entry( funcName ); @@ -544,12 +542,16 @@ #endif /* USE_X86_ASM */ +/** + * Return the name of the function at the given offset in the dispatch + * table. For debugging only. + */ static const char * get_static_proc_name( GLuint offset ) { - unsigned i; + GLuint i; - for ( i = 0 ; static_functions[i].Name_offset >= 0 ; i++ ) { + for (i = 0; static_functions[i].Name_offset >= 0; i++) { if (static_functions[i].Offset == offset) { return gl_string_table + static_functions[i].Name_offset; } @@ -570,7 +572,7 @@ /* - * The disptach table size (number of entries) is the sizeof the + * The dispatch table size (number of entries) is the size of the * _glapi_table struct plus the number of dynamic entries we can add. * The extra slots can be filled in by DRI drivers that register new extension * functions. @@ -578,6 +580,13 @@ #define DISPATCH_TABLE_SIZE (sizeof(struct _glapi_table) / sizeof(void *) + MAX_EXTENSION_FUNCS) +struct name_address_offset { + const char *Name; + _glapi_proc Address; + GLuint Offset; +}; + + static struct name_address_offset ExtEntryTable[MAX_EXTENSION_FUNCS]; static GLuint NumExtEntryPoints = 0; @@ -585,12 +594,12 @@ extern void __glapi_sparc_icache_flush(unsigned int *); #endif -/* +/** * Generate a dispatch function (entrypoint) which jumps through * the given slot number (offset) in the current dispatch table. * We need assembly language in order to accomplish this. */ -static void * +static _glapi_proc generate_entrypoint(GLuint functionOffset) { #if defined(USE_X86_ASM) @@ -633,10 +642,10 @@ *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn; *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4; } - return code; + return (_glapi_proc) code; #elif defined(USE_SPARC_ASM) -#if defined(__sparc_v9__) && !defined(__linux__) +#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__))) static const unsigned int insn_template[] = { 0x05000000, /* sethi %uhi(_glapi_Dispatch), %g2 */ 0x03000000, /* sethi %hi(_glapi_Dispatch), %g1 */ @@ -664,7 +673,7 @@ if (code) { memcpy(code, insn_template, sizeof(insn_template)); -#if defined(__sparc_v9__) && !defined(__linux__) +#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__))) code[0] |= (glapi_addr >> (32 + 10)); code[1] |= ((glapi_addr & 0xffffffff) >> 10); __glapi_sparc_icache_flush(&code[0]); @@ -682,19 +691,20 @@ __glapi_sparc_icache_flush(&code[2]); #endif } - return code; + return (_glapi_proc) code; #else + (void) functionOffset; return NULL; #endif /* USE_*_ASM */ } -/* +/** * This function inserts a new dispatch offset into the assembly language * stub that was generated with the preceeding function. */ static void -fill_in_entrypoint_offset(void *entrypoint, GLuint offset) +fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset) { #if defined(USE_X86_ASM) @@ -706,7 +716,7 @@ /* XXX this hasn't been tested! */ unsigned int *code = (unsigned int *) entrypoint; -#if defined(__sparc_v9__) && !defined(__linux__) +#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__))) code[6] = 0x05000000; /* sethi %hi(8 * glapioffset), %g2 */ code[7] = 0x8410a000; /* or %g2, %lo(8 * glapioffset), %g2 */ code[6] |= ((offset * 8) >> 10); @@ -718,11 +728,17 @@ __glapi_sparc_icache_flush(&code[2]); #endif /* __sparc_v9__ && !linux */ +#else + + /* an unimplemented architecture */ + (void) entrypoint; + (void) offset; + #endif /* USE_*_ASM */ } -/* +/** * Add a new extension function entrypoint. * Return: GL_TRUE = success or GL_FALSE = failure */ @@ -732,7 +748,7 @@ /* trivial rejection test */ #ifdef MANGLE if (!funcName || funcName[0] != 'm' || funcName[1] != 'g' || funcName[2] != 'l') - return NULL; + return GL_FALSE; #else if (!funcName || funcName[0] != 'g' || funcName[1] != 'l') return GL_FALSE; @@ -778,7 +794,7 @@ return GL_FALSE; } else { - void *entrypoint = generate_entrypoint(offset); + _glapi_proc entrypoint = generate_entrypoint(offset); if (!entrypoint) return GL_FALSE; /* couldn't generate assembly */ @@ -796,7 +812,7 @@ } -/* +/** * Return offset of entrypoint for named function within dispatch table. */ GLint @@ -816,10 +832,12 @@ -/* - * Return entrypoint for named function. +/** + * Return pointer to the named function. If the function name isn't found + * in the name of static functions, try generating a new API entrypoint on + * the fly with assembly language. */ -const GLvoid * +const _glapi_proc _glapi_get_proc_address(const char *funcName) { GLuint i; @@ -841,7 +859,7 @@ /* search static functions */ { - const GLvoid *func = get_static_proc_address(funcName); + const _glapi_proc func = get_static_proc_address(funcName); if (func) return func; } @@ -853,7 +871,7 @@ * when you try calling a GL function that doesn't really exist. */ if (NumExtEntryPoints < MAX_EXTENSION_FUNCS) { - GLvoid *entrypoint = generate_entrypoint(~0); + _glapi_proc entrypoint = generate_entrypoint(~0); if (!entrypoint) return GL_FALSE; @@ -872,7 +890,7 @@ -/* +/** * Return the name of the function at the given dispatch offset. * This is only intended for debugging. */ @@ -899,7 +917,7 @@ -/* +/** * Return size of dispatch table struct as number of functions (or * slots). */ @@ -911,7 +929,7 @@ -/* +/** * Get API dispatcher version string. */ const char * @@ -922,7 +940,7 @@ -/* +/** * Make sure there are no NULL pointers in the given dispatch table. * Intended for debugging purposes. */ @@ -988,7 +1006,7 @@ GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *); assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT); assert(secondaryColor3fOffset == offset); - assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (void *) &glSecondaryColor3fEXT); + assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (_glapi_proc) &glSecondaryColor3fEXT); } { GLuint pointParameterivOffset = _glapi_get_proc_offset("glPointParameterivNV"); @@ -996,7 +1014,7 @@ GLuint offset = (pointParameterivFunc - (char *) table) / sizeof(void *); assert(pointParameterivOffset == _gloffset_PointParameterivNV); assert(pointParameterivOffset == offset); - assert(_glapi_get_proc_address("glPointParameterivNV") == (void *) &glPointParameterivNV); + assert(_glapi_get_proc_address("glPointParameterivNV") == (_glapi_proc) &glPointParameterivNV); } { GLuint setFenceOffset = _glapi_get_proc_offset("glSetFenceNV"); @@ -1004,7 +1022,9 @@ GLuint offset = (setFenceFunc - (char *) table) / sizeof(void *); assert(setFenceOffset == _gloffset_SetFenceNV); assert(setFenceOffset == offset); - assert(_glapi_get_proc_address("glSetFenceNV") == (void *) &glSetFenceNV); + assert(_glapi_get_proc_address("glSetFenceNV") == (_glapi_proc) &glSetFenceNV); } +#else + (void) table; #endif } diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/glapi.h x11r682/xc/extras/Mesa/src/mesa/glapi/glapi.h --- xc/extras/Mesa/src/mesa/glapi/glapi.h 2004-06-16 11:19:03.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/glapi.h 2004-12-15 02:51:02.000000000 +0100 @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 6.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -24,6 +23,24 @@ */ +/** + * \mainpage Mesa GL API Module + * + * \section GLAPIIntroduction Introduction + * + * The Mesa GL API module is responsible for dispatching all the + * gl*() functions. All GL functions are dispatched by jumping through + * the current dispatch table (basically a struct full of function + * pointers.) + * + * A per-thread current dispatch table and per-thread current context + * pointer are managed by this module too. + * + * This module is intended to be non-Mesa-specific so it can be used + * with the X/DRI libGL also. + */ + + #ifndef _GLAPI_H #define _GLAPI_H @@ -34,6 +51,8 @@ typedef void (*_glapi_warning_func)(void *ctx, const char *str, ...); +typedef void (*_glapi_proc)(void); /* generic function pointer */ + extern void *_glapi_Context; @@ -98,7 +117,7 @@ _glapi_get_proc_offset(const char *funcName); -extern const GLvoid * +extern const _glapi_proc _glapi_get_proc_address(const char *funcName); diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/glapioffsets.h x11r682/xc/extras/Mesa/src/mesa/glapi/glapioffsets.h --- xc/extras/Mesa/src/mesa/glapi/glapioffsets.h 2004-06-16 11:19:04.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/glapioffsets.h 2004-12-15 02:51:02.000000000 +0100 @@ -1,4 +1,31 @@ -/* DO NOT EDIT - This file generated automatically by gloffsets.py script */ +/* DO NOT EDIT - This file generated automatically by gl_offsets.py (from Mesa) script */ + +/* + * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * (C) Copyright IBM Corporation 2004 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL, IBM, + * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + #ifndef _GLAPI_OFFSETS_H_ #define _GLAPI_OFFSETS_H_ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/glapitable.h x11r682/xc/extras/Mesa/src/mesa/glapi/glapitable.h --- xc/extras/Mesa/src/mesa/glapi/glapitable.h 2004-06-16 11:19:04.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/glapitable.h 2004-12-15 02:51:02.000000000 +0100 @@ -1,4 +1,31 @@ -/* DO NOT EDIT - This file generated automatically with gltable.py script */ +/* DO NOT EDIT - This file generated automatically by a script */ + +/* + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * (C) Copyright IBM Corporation 2004 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL, IBM, + * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + #ifndef _GLAPI_TABLE_H_ #define _GLAPI_TABLE_H_ @@ -703,9 +730,9 @@ void (GLAPIENTRYP GenBuffersARB)(GLsizei n, GLuint * buffer); /* 692 */ void (GLAPIENTRYP GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 693 */ void (GLAPIENTRYP GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 694 */ - void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); /* 695 */ + void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); /* 695 */ GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 696 */ - void * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 697 */ + GLvoid * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 697 */ GLboolean (GLAPIENTRYP UnmapBufferARB)(GLenum target); /* 698 */ void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 699 */ void (GLAPIENTRYP GenQueriesARB)(GLsizei n, GLuint * ids); /* 700 */ diff -N -x '*CVS*' -r -u x11r681/xc/extras/Mesa/src/mesa/glapi/glapitemp.h x11r682/xc/extras/Mesa/src/mesa/glapi/glapitemp.h --- xc/extras/Mesa/src/mesa/glapi/glapitemp.h 2004-07-22 08:52:43.000000000 +0200 +++ xc/extras/Mesa/src/mesa/glapi/glapitemp.h 2004-12-15 02:51:02.000000000 +0100 @@ -1,5 +1,31 @@ +/* DO NOT EDIT - This file generated automatically by gl_apitemp.py (from Mesa) script */ + +/* + * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * (C) Copyright IBM Corporation 2004 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL, IBM, + * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ -/* DO NOT EDIT! This file is generated by the glapitemp.py script. */ /* * This file is a template which generates the OpenGL API entry point @@ -12,7 +38,7 @@ * msg is a printf-style debug message. * RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return value * - * Here's an example which generates the usual OpenGL functions: + * Here is an example which generates the usual OpenGL functions: * #define KEYWORD1 * #define KEYWORD2 * #define NAME(func) gl##func @@ -107,7 +133,7 @@ KEYWORD1 void KEYWORD2 NAME(Color3dv)(const GLdouble * v) { - DISPATCH(Color3dv, (v), (F, "glColor3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(Color3dv, (v), (F, "glColor3dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Color3f)(GLfloat red, GLfloat green, GLfloat blue) @@ -117,7 +143,7 @@ KEYWORD1 void KEYWORD2 NAME(Color3fv)(const GLfloat * v) { - DISPATCH(Color3fv, (v), (F, "glColor3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(Color3fv, (v), (F, "glColor3fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Color3i)(GLint red, GLint green, GLint blue) @@ -187,7 +213,7 @@ KEYWORD1 void KEYWORD2 NAME(Color4dv)(const GLdouble * v) { - DISPATCH(Color4dv, (v), (F, "glColor4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(Color4dv, (v), (F, "glColor4dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Color4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) @@ -197,7 +223,7 @@ KEYWORD1 void KEYWORD2 NAME(Color4fv)(const GLfloat * v) { - DISPATCH(Color4fv, (v), (F, "glColor4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(Color4fv, (v), (F, "glColor4fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Color4i)(GLint red, GLint green, GLint blue, GLint alpha) @@ -322,7 +348,7 @@ KEYWORD1 void KEYWORD2 NAME(Normal3dv)(const GLdouble * v) { - DISPATCH(Normal3dv, (v), (F, "glNormal3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(Normal3dv, (v), (F, "glNormal3dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Normal3f)(GLfloat nx, GLfloat ny, GLfloat nz) @@ -332,7 +358,7 @@ KEYWORD1 void KEYWORD2 NAME(Normal3fv)(const GLfloat * v) { - DISPATCH(Normal3fv, (v), (F, "glNormal3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(Normal3fv, (v), (F, "glNormal3fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Normal3i)(GLint nx, GLint ny, GLint nz) @@ -362,7 +388,7 @@ KEYWORD1 void KEYWORD2 NAME(RasterPos2dv)(const GLdouble * v) { - DISPATCH(RasterPos2dv, (v), (F, "glRasterPos2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1])); + DISPATCH(RasterPos2dv, (v), (F, "glRasterPos2dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(RasterPos2f)(GLfloat x, GLfloat y) @@ -372,7 +398,7 @@ KEYWORD1 void KEYWORD2 NAME(RasterPos2fv)(const GLfloat * v) { - DISPATCH(RasterPos2fv, (v), (F, "glRasterPos2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1])); + DISPATCH(RasterPos2fv, (v), (F, "glRasterPos2fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(RasterPos2i)(GLint x, GLint y) @@ -402,7 +428,7 @@ KEYWORD1 void KEYWORD2 NAME(RasterPos3dv)(const GLdouble * v) { - DISPATCH(RasterPos3dv, (v), (F, "glRasterPos3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(RasterPos3dv, (v), (F, "glRasterPos3dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(RasterPos3f)(GLfloat x, GLfloat y, GLfloat z) @@ -412,7 +438,7 @@ KEYWORD1 void KEYWORD2 NAME(RasterPos3fv)(const GLfloat * v) { - DISPATCH(RasterPos3fv, (v), (F, "glRasterPos3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(RasterPos3fv, (v), (F, "glRasterPos3fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(RasterPos3i)(GLint x, GLint y, GLint z) @@ -442,7 +468,7 @@ KEYWORD1 void KEYWORD2 NAME(RasterPos4dv)(const GLdouble * v) { - DISPATCH(RasterPos4dv, (v), (F, "glRasterPos4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(RasterPos4dv, (v), (F, "glRasterPos4dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(RasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) @@ -452,7 +478,7 @@ KEYWORD1 void KEYWORD2 NAME(RasterPos4fv)(const GLfloat * v) { - DISPATCH(RasterPos4fv, (v), (F, "glRasterPos4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(RasterPos4fv, (v), (F, "glRasterPos4fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(RasterPos4i)(GLint x, GLint y, GLint z, GLint w) @@ -562,7 +588,7 @@ KEYWORD1 void KEYWORD2 NAME(TexCoord2dv)(const GLdouble * v) { - DISPATCH(TexCoord2dv, (v), (F, "glTexCoord2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1])); + DISPATCH(TexCoord2dv, (v), (F, "glTexCoord2dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(TexCoord2f)(GLfloat s, GLfloat t) @@ -572,7 +598,7 @@ KEYWORD1 void KEYWORD2 NAME(TexCoord2fv)(const GLfloat * v) { - DISPATCH(TexCoord2fv, (v), (F, "glTexCoord2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1])); + DISPATCH(TexCoord2fv, (v), (F, "glTexCoord2fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(TexCoord2i)(GLint s, GLint t) @@ -602,7 +628,7 @@ KEYWORD1 void KEYWORD2 NAME(TexCoord3dv)(const GLdouble * v) { - DISPATCH(TexCoord3dv, (v), (F, "glTexCoord3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(TexCoord3dv, (v), (F, "glTexCoord3dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(TexCoord3f)(GLfloat s, GLfloat t, GLfloat r) @@ -612,7 +638,7 @@ KEYWORD1 void KEYWORD2 NAME(TexCoord3fv)(const GLfloat * v) { - DISPATCH(TexCoord3fv, (v), (F, "glTexCoord3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(TexCoord3fv, (v), (F, "glTexCoord3fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(TexCoord3i)(GLint s, GLint t, GLint r) @@ -642,7 +668,7 @@ KEYWORD1 void KEYWORD2 NAME(TexCoord4dv)(const GLdouble * v) { - DISPATCH(TexCoord4dv, (v), (F, "glTexCoord4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(TexCoord4dv, (v), (F, "glTexCoord4dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(TexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q) @@ -652,7 +678,7 @@ KEYWORD1 void KEYWORD2 NAME(TexCoord4fv)(const GLfloat * v) { - DISPATCH(TexCoord4fv, (v), (F, "glTexCoord4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(TexCoord4fv, (v), (F, "glTexCoord4fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(TexCoord4i)(GLint s, GLint t, GLint r, GLint q) @@ -682,7 +708,7 @@ KEYWORD1 void KEYWORD2 NAME(Vertex2dv)(const GLdouble * v) { - DISPATCH(Vertex2dv, (v), (F, "glVertex2dv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1])); + DISPATCH(Vertex2dv, (v), (F, "glVertex2dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Vertex2f)(GLfloat x, GLfloat y) @@ -692,7 +718,7 @@ KEYWORD1 void KEYWORD2 NAME(Vertex2fv)(const GLfloat * v) { - DISPATCH(Vertex2fv, (v), (F, "glVertex2fv(%p /* %g, %g */);\n", (const void *) v, v[0], v[1])); + DISPATCH(Vertex2fv, (v), (F, "glVertex2fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Vertex2i)(GLint x, GLint y) @@ -722,7 +748,7 @@ KEYWORD1 void KEYWORD2 NAME(Vertex3dv)(const GLdouble * v) { - DISPATCH(Vertex3dv, (v), (F, "glVertex3dv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(Vertex3dv, (v), (F, "glVertex3dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Vertex3f)(GLfloat x, GLfloat y, GLfloat z) @@ -732,7 +758,7 @@ KEYWORD1 void KEYWORD2 NAME(Vertex3fv)(const GLfloat * v) { - DISPATCH(Vertex3fv, (v), (F, "glVertex3fv(%p /* %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2])); + DISPATCH(Vertex3fv, (v), (F, "glVertex3fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Vertex3i)(GLint x, GLint y, GLint z) @@ -762,7 +788,7 @@ KEYWORD1 void KEYWORD2 NAME(Vertex4dv)(const GLdouble * v) { - DISPATCH(Vertex4dv, (v), (F, "glVertex4dv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(Vertex4dv, (v), (F, "glVertex4dv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) @@ -772,7 +798,7 @@ KEYWORD1 void KEYWORD2 NAME(Vertex4fv)(const GLfloat * v) { - DISPATCH(Vertex4fv, (v), (F, "glVertex4fv(%p /* %g, %g, %g, %g */);\n", (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(Vertex4fv, (v), (F, "glVertex4fv(%p);\n", (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(Vertex4i)(GLint x, GLint y, GLint z, GLint w) @@ -1062,7 +1088,7 @@ KEYWORD1 void KEYWORD2 NAME(Clear)(GLbitfield mask) { - DISPATCH(Clear, (mask), (F, "glClear(%p);\n", (const void *) mask)); + DISPATCH(Clear, (mask), (F, "glClear(%d);\n", mask)); } KEYWORD1 void KEYWORD2 NAME(ClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) @@ -1142,7 +1168,7 @@ KEYWORD1 void KEYWORD2 NAME(PushAttrib)(GLbitfield mask) { - DISPATCH(PushAttrib, (mask), (F, "glPushAttrib(%p);\n", (const void *) mask)); + DISPATCH(PushAttrib, (mask), (F, "glPushAttrib(%d);\n", mask)); } KEYWORD1 void KEYWORD2 NAME(Map1d)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points) @@ -1212,7 +1238,7 @@ KEYWORD1 void KEYWORD2 NAME(EvalCoord2dv)(const GLdouble * u) { - DISPATCH(EvalCoord2dv, (u), (F, "glEvalCoord2dv(%p /* %g, %g */);\n", (const void *) u, u[0], u[1])); + DISPATCH(EvalCoord2dv, (u), (F, "glEvalCoord2dv(%p);\n", (const void *) u)); } KEYWORD1 void KEYWORD2 NAME(EvalCoord2f)(GLfloat u, GLfloat v) @@ -1222,7 +1248,7 @@ KEYWORD1 void KEYWORD2 NAME(EvalCoord2fv)(const GLfloat * u) { - DISPATCH(EvalCoord2fv, (u), (F, "glEvalCoord2fv(%p /* %g, %g */);\n", (const void *) u, u[0], u[1])); + DISPATCH(EvalCoord2fv, (u), (F, "glEvalCoord2fv(%p);\n", (const void *) u)); } KEYWORD1 void KEYWORD2 NAME(EvalMesh1)(GLenum mode, GLint i1, GLint i2) @@ -1580,6 +1606,11 @@ DISPATCH(ArrayElement, (i), (F, "glArrayElement(%d);\n", i)); } +KEYWORD1 void KEYWORD2 NAME(BindTexture)(GLenum target, GLuint texture) +{ + DISPATCH(BindTexture, (target, texture), (F, "glBindTexture(0x%x, %d);\n", target, texture)); +} + KEYWORD1 void KEYWORD2 NAME(ColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) { DISPATCH(ColorPointer, (size, type, stride, pointer), (F, "glColorPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); @@ -1610,14 +1641,19 @@ DISPATCH(EnableClientState, (array), (F, "glEnableClientState(0x%x);\n", array)); } -KEYWORD1 void KEYWORD2 NAME(GetPointerv)(GLenum pname, GLvoid ** params) +KEYWORD1 void KEYWORD2 NAME(IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer) { - DISPATCH(GetPointerv, (pname, params), (F, "glGetPointerv(0x%x, %p);\n", pname, (const void *) params)); + DISPATCH(IndexPointer, (type, stride, pointer), (F, "glIndexPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer)); } -KEYWORD1 void KEYWORD2 NAME(IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer) +KEYWORD1 void KEYWORD2 NAME(Indexub)(GLubyte c) { - DISPATCH(IndexPointer, (type, stride, pointer), (F, "glIndexPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer)); + DISPATCH(Indexub, (c), (F, "glIndexub(%d);\n", c)); +} + +KEYWORD1 void KEYWORD2 NAME(Indexubv)(const GLubyte * c) +{ + DISPATCH(Indexubv, (c), (F, "glIndexubv(%p);\n", (const void *) c)); } KEYWORD1 void KEYWORD2 NAME(InterleavedArrays)(GLenum format, GLsizei stride, const GLvoid * pointer) @@ -1630,6 +1666,11 @@ DISPATCH(NormalPointer, (type, stride, pointer), (F, "glNormalPointer(0x%x, %d, %p);\n", type, stride, (const void *) pointer)); } +KEYWORD1 void KEYWORD2 NAME(PolygonOffset)(GLfloat factor, GLfloat units) +{ + DISPATCH(PolygonOffset, (factor, units), (F, "glPolygonOffset(%f, %f);\n", factor, units)); +} + KEYWORD1 void KEYWORD2 NAME(TexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) { DISPATCH(TexCoordPointer, (size, type, stride, pointer), (F, "glTexCoordPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); @@ -1640,9 +1681,9 @@ DISPATCH(VertexPointer, (size, type, stride, pointer), (F, "glVertexPointer(%d, 0x%x, %d, %p);\n", size, type, stride, (const void *) pointer)); } -KEYWORD1 void KEYWORD2 NAME(PolygonOffset)(GLfloat factor, GLfloat units) +KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences) { - DISPATCH(PolygonOffset, (factor, units), (F, "glPolygonOffset(%f, %f);\n", factor, units)); + RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResident(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); } KEYWORD1 void KEYWORD2 NAME(CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) @@ -1665,26 +1706,6 @@ DISPATCH(CopyTexSubImage2D, (target, level, xoffset, yoffset, x, y, width, height), (F, "glCopyTexSubImage2D(0x%x, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height)); } -KEYWORD1 void KEYWORD2 NAME(TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) -{ - DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1D(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels)); -} - -KEYWORD1 void KEYWORD2 NAME(TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) -{ - DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels)); -} - -KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences) -{ - RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResident(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); -} - -KEYWORD1 void KEYWORD2 NAME(BindTexture)(GLenum target, GLuint texture) -{ - DISPATCH(BindTexture, (target, texture), (F, "glBindTexture(0x%x, %d);\n", target, texture)); -} - KEYWORD1 void KEYWORD2 NAME(DeleteTextures)(GLsizei n, const GLuint * textures) { DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTextures(%d, %p);\n", n, (const void *) textures)); @@ -1695,6 +1716,11 @@ DISPATCH(GenTextures, (n, textures), (F, "glGenTextures(%d, %p);\n", n, (const void *) textures)); } +KEYWORD1 void KEYWORD2 NAME(GetPointerv)(GLenum pname, GLvoid ** params) +{ + DISPATCH(GetPointerv, (pname, params), (F, "glGetPointerv(0x%x, %p);\n", pname, (const void *) params)); +} + KEYWORD1 GLboolean KEYWORD2 NAME(IsTexture)(GLuint texture) { RETURN_DISPATCH(IsTexture, (texture), (F, "glIsTexture(%d);\n", texture)); @@ -1705,14 +1731,14 @@ DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTextures(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities)); } -KEYWORD1 void KEYWORD2 NAME(Indexub)(GLubyte c) +KEYWORD1 void KEYWORD2 NAME(TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) { - DISPATCH(Indexub, (c), (F, "glIndexub(%d);\n", c)); + DISPATCH(TexSubImage1D, (target, level, xoffset, width, format, type, pixels), (F, "glTexSubImage1D(0x%x, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, width, format, type, (const void *) pixels)); } -KEYWORD1 void KEYWORD2 NAME(Indexubv)(const GLubyte * c) +KEYWORD1 void KEYWORD2 NAME(TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) { - DISPATCH(Indexubv, (c), (F, "glIndexubv(%p);\n", (const void *) c)); + DISPATCH(TexSubImage2D, (target, level, xoffset, yoffset, width, height, format, type, pixels), (F, "glTexSubImage2D(0x%x, %d, %d, %d, %d, %d, 0x%x, 0x%x, %p);\n", target, level, xoffset, yoffset, width, height, format, type, (const void *) pixels)); } KEYWORD1 void KEYWORD2 NAME(PopClientAttrib)(void) @@ -1722,7 +1748,7 @@ KEYWORD1 void KEYWORD2 NAME(PushClientAttrib)(GLbitfield mask) { - DISPATCH(PushClientAttrib, (mask), (F, "glPushClientAttrib(%p);\n", (const void *) mask)); + DISPATCH(PushClientAttrib, (mask), (F, "glPushClientAttrib(%d);\n", mask)); } KEYWORD1 void KEYWORD2 NAME(BlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) @@ -1972,7 +1998,7 @@ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dvARB)(GLenum target, const GLdouble * v) { - DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dvARB(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1])); + DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dvARB(0x%x, %p);\n", target, (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t) @@ -1982,7 +2008,7 @@ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fvARB)(GLenum target, const GLfloat * v) { - DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fvARB(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1])); + DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fvARB(0x%x, %p);\n", target, (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iARB)(GLenum target, GLint s, GLint t) @@ -2012,7 +2038,7 @@ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3dvARB)(GLenum target, const GLdouble * v) { - DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dvARB(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2])); + DISPATCH(MultiTexCoord3dvARB, (target, v), (F, "glMultiTexCoord3dvARB(0x%x, %p);\n", target, (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r) @@ -2022,7 +2048,7 @@ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3fvARB)(GLenum target, const GLfloat * v) { - DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fvARB(0x%x, %p /* %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2])); + DISPATCH(MultiTexCoord3fvARB, (target, v), (F, "glMultiTexCoord3fvARB(0x%x, %p);\n", target, (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(MultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r) @@ -2052,7 +2078,7 @@ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4dvARB)(GLenum target, const GLdouble * v) { - DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dvARB(0x%x, %p /* %g, %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(MultiTexCoord4dvARB, (target, v), (F, "glMultiTexCoord4dvARB(0x%x, %p);\n", target, (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) @@ -2062,7 +2088,7 @@ KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4fvARB)(GLenum target, const GLfloat * v) { - DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fvARB(0x%x, %p /* %g, %g, %g, %g */);\n", target, (const void *) v, v[0], v[1], v[2], v[3])); + DISPATCH(MultiTexCoord4fvARB, (target, v), (F, "glMultiTexCoord4fvARB(0x%x, %p);\n", target, (const void *) v)); } KEYWORD1 void KEYWORD2 NAME(MultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q) @@ -2115,1853 +2141,1719 @@ DISPATCH(__unused413, (), (F, "gl__unused413();\n")); } -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias) { - DISPATCH(CompressedTexImage3DARB, (target, level, internalformat, width, height, depth, border, imageSize, data), (F, "glCompressedTexImage3DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, depth, border, imageSize, (const void *) data)); + DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias)); } -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights) { - DISPATCH(CompressedTexImage2DARB, (target, level, internalformat, width, height, border, imageSize, data), (F, "glCompressedTexImage2DARB(0x%x, %d, 0x%x, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, (const void *) data)); + DISPATCH(GetTexFilterFuncSGIS, (target, filter, weights), (F, "glGetTexFilterFuncSGIS(0x%x, 0x%x, %p);\n", target, filter, (const void *) weights)); } -KEYWORD1 void KEYWORD2 NAME(CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights) { - DISPATCH(CompressedTexImage1DARB, (target, level, internalformat, width, border, imageSize, data), (F, "glCompressedTexImage1DARB(0x%x, %d, 0x%x, %d, %d, %d, %p);\n", target, level, internalformat, width, border, imageSize, (const void *) data)); + DISPATCH(TexFilterFuncSGIS, (target, filter, n, weights), (F, "glTexFilterFuncSGIS(0x%x, 0x%x, %d, %p);\n", target, filter, n, (const void *) weights)); } -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) { - DISPATCH(CompressedTexSubImage3DARB, (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data), (F, "glCompressedTexSubImage3DARB(0x%x, %d, %d, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (const void *) data)); + DISPATCH(GetHistogramEXT, (target, reset, format, type, values), (F, "glGetHistogramEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); } -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) { - DISPATCH(CompressedTexSubImage2DARB, (target, level, xoffset, yoffset, width, height, format, imageSize, data), (F, "glCompressedTexSubImage2DARB(0x%x, %d, %d, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, (const void *) data)); + DISPATCH(GetHistogramParameterfvEXT, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) +KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params) { - DISPATCH(CompressedTexSubImage1DARB, (target, level, xoffset, width, format, imageSize, data), (F, "glCompressedTexSubImage1DARB(0x%x, %d, %d, %d, 0x%x, %d, %p);\n", target, level, xoffset, width, format, imageSize, (const void *) data)); + DISPATCH(GetHistogramParameterivEXT, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img) +KEYWORD1 void KEYWORD2 NAME(GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) { - DISPATCH(GetCompressedTexImageARB, (target, level, img), (F, "glGetCompressedTexImageARB(0x%x, %d, %p);\n", target, level, (const void *) img)); + DISPATCH(GetMinmaxEXT, (target, reset, format, type, values), (F, "glGetMinmaxEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); } -KEYWORD1 void KEYWORD2 NAME(ActiveTexture)(GLenum texture) +KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) { - DISPATCH(ActiveTextureARB, (texture), (F, "glActiveTexture(0x%x);\n", texture)); + DISPATCH(GetMinmaxParameterfvEXT, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(ClientActiveTexture)(GLenum texture) +KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params) { - DISPATCH(ClientActiveTextureARB, (texture), (F, "glClientActiveTexture(0x%x);\n", texture)); + DISPATCH(GetMinmaxParameterivEXT, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1d)(GLenum target, GLdouble s) +KEYWORD1 void KEYWORD2 NAME(GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image) { - DISPATCH(MultiTexCoord1dARB, (target, s), (F, "glMultiTexCoord1d(0x%x, %f);\n", target, s)); + DISPATCH(GetConvolutionFilterEXT, (target, format, type, image), (F, "glGetConvolutionFilterEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1dv)(GLenum target, const GLdouble * v) +KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) { - DISPATCH(MultiTexCoord1dvARB, (target, v), (F, "glMultiTexCoord1dv(0x%x, %p);\n", target, (const void *) v)); + DISPATCH(GetConvolutionParameterfvEXT, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1f)(GLenum target, GLfloat s) +KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params) { - DISPATCH(MultiTexCoord1fARB, (target, s), (F, "glMultiTexCoord1f(0x%x, %f);\n", target, s)); + DISPATCH(GetConvolutionParameterivEXT, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1fv)(GLenum target, const GLfloat * v) +KEYWORD1 void KEYWORD2 NAME(GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) { - DISPATCH(MultiTexCoord1fvARB, (target, v), (F, "glMultiTexCoord1fv(0x%x, %p);\n", target, (const void *) v)); + DISPATCH(GetSeparableFilterEXT, (target, format, type, row, column, span), (F, "glGetSeparableFilterEXT(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1i)(GLenum target, GLint s) +KEYWORD1 void KEYWORD2 NAME(GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table) { - DISPATCH(MultiTexCoord1iARB, (target, s), (F, "glMultiTexCoord1i(0x%x, %d);\n", target, s)); + DISPATCH(GetColorTableSGI, (target, format, type, table), (F, "glGetColorTableSGI(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1iv)(GLenum target, const GLint * v) +KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params) { - DISPATCH(MultiTexCoord1ivARB, (target, v), (F, "glMultiTexCoord1iv(0x%x, %p);\n", target, (const void *) v)); + DISPATCH(GetColorTableParameterfvSGI, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1s)(GLenum target, GLshort s) +KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params) { - DISPATCH(MultiTexCoord1sARB, (target, s), (F, "glMultiTexCoord1s(0x%x, %d);\n", target, s)); + DISPATCH(GetColorTableParameterivSGI, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord1sv)(GLenum target, const GLshort * v) +KEYWORD1 void KEYWORD2 NAME(PixelTexGenSGIX)(GLenum mode) { - DISPATCH(MultiTexCoord1svARB, (target, v), (F, "glMultiTexCoord1sv(0x%x, %p);\n", target, (const void *) v)); + DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t) +KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameteriSGIS)(GLenum pname, GLint param) { - DISPATCH(MultiTexCoord2dARB, (target, s, t), (F, "glMultiTexCoord2d(0x%x, %f, %f);\n", target, s, t)); + DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2dv)(GLenum target, const GLdouble * v) +KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params) { - DISPATCH(MultiTexCoord2dvARB, (target, v), (F, "glMultiTexCoord2dv(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1])); + DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t) +KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param) { - DISPATCH(MultiTexCoord2fARB, (target, s, t), (F, "glMultiTexCoord2f(0x%x, %f, %f);\n", target, s, t)); + DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2fv)(GLenum target, const GLfloat * v) +KEYWORD1 void KEYWORD2 NAME(PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params) { - DISPATCH(MultiTexCoord2fvARB, (target, v), (F, "glMultiTexCoord2fv(0x%x, %p /* %g, %g */);\n", target, (const void *) v, v[0], v[1])); + DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2i)(GLenum target, GLint s, GLint t) +KEYWORD1 void KEYWORD2 NAME(GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params) { - DISPATCH(MultiTexCoord2iARB, (target, s, t), (F, "glMultiTexCoord2i(0x%x, %d, %d);\n", target, s, t)); + DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1 void KEYWORD2 NAME(MultiTexCoord2iv)(GL