Compare commits
36 Commits
retrodebia
...
Glide3-Fre
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
747e6ee3df | ||
|
|
5653005997 | ||
|
|
cbe7c38855 | ||
|
|
d58fb3563c | ||
|
|
6eb73cf6c1 | ||
|
|
77a9dd13d3 | ||
|
|
3093a8a5f4 | ||
|
|
95b6aa00da | ||
|
|
c025951e50 | ||
|
|
5345122667 | ||
|
|
4e5ad8319b | ||
|
|
ef07fcc06b | ||
|
|
9bcd91c23a | ||
|
|
21130b308d | ||
|
|
7816b80116 | ||
|
|
985b19361e | ||
|
|
2de5d67c15 | ||
|
|
9f97da914e | ||
|
|
ccf55bd6d7 | ||
|
|
32c9fceb2b | ||
|
|
b17cdee744 | ||
|
|
65e9e693f1 | ||
|
|
68adba47ab | ||
|
|
08ef754384 | ||
|
|
bc03716156 | ||
|
|
fc7d1171eb | ||
|
|
5b2cccf44f | ||
|
|
3f90077226 | ||
|
|
f69716c149 | ||
|
|
f3f29b54f5 | ||
|
|
8b7ff82e87 | ||
|
|
13692f96c6 | ||
|
|
f0e606b604 | ||
|
|
ef7301331f | ||
|
|
bc31dae192 | ||
|
|
6acad1fd79 |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,9 +0,0 @@
|
||||
*.o
|
||||
*.a
|
||||
*.lo
|
||||
*.so
|
||||
*.exe
|
||||
fxgasm.h
|
||||
*.exe
|
||||
fxgasm
|
||||
fxinline.h
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,300 +0,0 @@
|
||||
2011-07-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* Makefile (KBUILD): Handle Linux 3.x versions.
|
||||
|
||||
2011-07-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* Makefile (help): Do not print command only their output.
|
||||
|
||||
2011-05-27 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (MODULE_VERSION): Bump to '2011.05.27'.
|
||||
|
||||
2011-05-27 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c [HAVE_UNLOCKED_IOCTL] (ioctl_3dfx): Use new
|
||||
prototype for unlocked_ioctl.
|
||||
(fops_3dfx) [HAVE_UNLOCKED_IOCTL]: Assign ioctl_3dfx to
|
||||
.unlocked_ioctl instead of .ioctl.
|
||||
|
||||
2011-05-27 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c: On Linux >= 2.6.33, use <generated/autoconf.h>
|
||||
instead of <linux/autoconf.h>. Include it after <linux/version.h>.
|
||||
* Makefile (VERSION_HEADER): Use generated/utsrelease.h if present
|
||||
instead of linux/utsrelease.h or linux/version.h.
|
||||
|
||||
2011-05-27 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* Makefile: Do not use negative exit codes.
|
||||
|
||||
2008-06-24 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (MODULE_VERSION): Bump to '2008.06.24'.
|
||||
|
||||
2008-06-24 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (KERNEL_MIN_VER): Remove defenition, and replace all
|
||||
users with its contents.
|
||||
|
||||
2008-06-24 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (pci_dev_put): Define to nothing on kernels < 2.5.73.
|
||||
(setmtrr_3dfx): Call pci_dev_put to release the refcount on the
|
||||
Intel 82441FX PCI device when done with it.
|
||||
|
||||
2008-06-22 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (id_table_3dfx): Terminate the list with an empty
|
||||
element.
|
||||
|
||||
2008-06-22 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (pci_get_device): On Linux < 2.5.73 define it as
|
||||
pci_find_device.
|
||||
(findCardType, setmtrr_3dfx): Use pci_get_device instead of deprecated
|
||||
pci_find_device.
|
||||
|
||||
2008-06-22 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (cleanup_module): Ignore return value from
|
||||
unregister_chrdev as it actually returns void now.
|
||||
|
||||
2007-02-06 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (MODULE_VERSION): Bump to '2007.02.06'.
|
||||
|
||||
2007-02-06 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
Fix warnings when not checking pci_register_driver return codes.
|
||||
|
||||
* 3dfx_driver.c (findCards): Return int instead of void, and normalize
|
||||
error code to be always negative, otherwise return numCards.
|
||||
(init_module): Check for findCards return code, print a warning and
|
||||
exit the module on error.
|
||||
(init_3dfx): Likewise.
|
||||
|
||||
2007-02-06 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_driver.c (HAVE_DEVFS): Define to 1 if
|
||||
LINUX_VERSION_CODE >= 2.3.46 and LINUX_VERSION_CODE <= 2.6.17 or
|
||||
if DEVFS_SUPPORT is defined, define to 0 otherwise.
|
||||
(devfs_handle): Only use if HAVE_DEVFS.
|
||||
(init_module): Only use devfs_mk_cdev or devfs_register if HAVE_DEVFS.
|
||||
(cleanup_module): Only use devfs_remove or devfs_unregister if
|
||||
HAVE_DEVFS.
|
||||
|
||||
2007-02-06 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* Makefile (CFLAGS): Use '-march' instead of the deprecated '-mcpu'.
|
||||
|
||||
2007-02-06 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* kinfo.c: Removed.
|
||||
* kver.c: New file.
|
||||
* Makefile: Include kver.mak.
|
||||
(KVERS): Move this variable to 'kver.mak', which is a generated file.
|
||||
(VERSION_HEADER): New variable to cope with UTS_RELEASE being moved
|
||||
from 'linux/version.h' to 'linux/utsrelease.h' in 2.6.18.
|
||||
(kver, kver.mak): New targets.
|
||||
(KBUILD): New variable.
|
||||
(KVER_MAJOR, KVER_MINOR, BUILD_TYPE, MODULE_TDFX): Likewise, moved
|
||||
from the generated file 'config'.
|
||||
(config, kinfo, kinfo.h): Remove targets.
|
||||
(modules, intstall, clean): Do not depend on config target.
|
||||
(modules, intstall): Depend on sanity target .
|
||||
|
||||
2007-02-06 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* Makefile (.PHONY): Add clean_kbuild. Rename modules-legacy,
|
||||
modules-kbuild, install-legacy, install-kbuild and clean-legacy to
|
||||
modules_legacy, modules_kbuild, install_legacy, install_kbuild
|
||||
and clean_legacy.
|
||||
|
||||
2007-01-31 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c (cardInfo_t): Make dev be 'struct pci_dev *' even for
|
||||
kernels < 2.6.0.
|
||||
(findCardType): Assign to cards[n].dev the dev variable instead of
|
||||
devfn. Fix macro to use devfn instead.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c (my_remap_page_range): Define as remap_pfn_range for
|
||||
linux 2.6.10 or higher.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
Use the "new" kernel level exception handling for memory accesses
|
||||
introduced in linux 2.1.8, which obsoletes verify_aread.
|
||||
|
||||
* 3dfx_device.c (doQueryFetch): Remove verify_area and check for
|
||||
copy_to_user return values.
|
||||
(doPIORead): Likewise.
|
||||
(doQueryUpdate): Remove verify_area and check for copy_from_user
|
||||
return values.
|
||||
(doQuery): Likewise.
|
||||
(doPIOWrite): Likewise.
|
||||
(doPIO): Likewise.
|
||||
(verify_area) [DEBUG]: Remove function.
|
||||
(a_last_dummy_function) [DEBUG]: Likewise.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c (doQueryFetch): Assign desc->device to i, and use it
|
||||
when referencing cards.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c (setmtrr_3dfx): Make it static.
|
||||
(resetmtrr_3dfx): Likewise.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c (id_table_3dfx): Move near the corresponding ifdef
|
||||
for older kernels.
|
||||
(findCards): Likewise.
|
||||
(driver_3dfx): Forward declare.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
Rename functions obsoleted in linux 2.1.93.
|
||||
|
||||
* 3dfx_device.c (pcibios_read_config_byte): Rename to ...
|
||||
(pci_read_config_byte): ... this and remove first argument.
|
||||
(pcibios_read_config_word): Rename to ...
|
||||
(pci_read_config_word): ... this and remove first argument.
|
||||
(pcibios_read_config_dword): Rename to ...
|
||||
(pci_read_config_dword): ... this and remove first argument.
|
||||
(pcibios_write_config_dword): Rename to ...
|
||||
(pci_write_config_dword): ... this and remove first argument.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c (VM_OFFSET_ALIGNED): New macro.
|
||||
(mmap_3dfx): Use VM_OFFSET_ALIGNED, instead of checking for specific
|
||||
kernel versions and changing behaviour.
|
||||
|
||||
2006-12-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c: Indentation fixes.
|
||||
|
||||
2006-03-03 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c: Rename HAVE_MTRR to CONFIG_MTRR.
|
||||
|
||||
2005-04-23 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c: Add GPL notice.
|
||||
|
||||
2005-04-24 Ozkan Sezer <sezeroz@gmail.com>
|
||||
|
||||
* 3dfx_device.c: Add Macronix MX86251 Voodoo Rush support.
|
||||
|
||||
2005-04-24 Ozkan Sezer <sezeroz@gmail.com>
|
||||
|
||||
* 3dfx_device.c (setmtrr_3dfx): Add missing break on default case.
|
||||
|
||||
2005-04-23 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c: Fix comment format. Remove obsolete compiler flags
|
||||
info.
|
||||
|
||||
2005-04-23 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* 3dfx_device.c: Move ChangeLog entries to ...
|
||||
* ChangeLog: ... here.
|
||||
|
||||
2004-05-05 Guillem Jover <guillem@debian.org>
|
||||
|
||||
* Use designators in fops_3dfx instead of the obsolete colon syntax.
|
||||
|
||||
2004-05-04 Guillem Jover <guillem@debian.org>
|
||||
|
||||
* Cleaned new kernel build system.
|
||||
* Indentation fixes. Normalized ChangeLog date format.
|
||||
|
||||
2004-02-13 Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
|
||||
|
||||
* Use kernel build system.
|
||||
* Use new pci probe present in 2.6.x kernels.
|
||||
* Use module auto-loading.
|
||||
|
||||
2004-01-22 Guillem Jover <guillem@debian.org>
|
||||
|
||||
* Ported to 2.6 kernels.
|
||||
|
||||
2002-05-05 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* Re-included VOODOO pci id, accidentally removed in last patch,
|
||||
thanks to Jan Kuipers to point this out.
|
||||
|
||||
2002-01-29 Guillem Jover <guillem@hadrons.org>
|
||||
|
||||
* Fixed bug when compiling for 2.4 kernels with modversions.
|
||||
* Added devfs support.
|
||||
* Added MODULE_* declarations.
|
||||
* Cleaned detection code.
|
||||
|
||||
2000-02-04 Joseph Kain <joseph@3dfx.com>
|
||||
|
||||
* Updated Carlo Woord's email address.
|
||||
|
||||
1999-12-22 Joseph Kain <joseph@3dfx.com>
|
||||
|
||||
* Support for new VMA structure in Kernels 2.3.14 and higher.
|
||||
This patch is based on Dieter Nuetzel's work.
|
||||
|
||||
1999-11-09 Joseph Kain <joseph@3dfx.com>
|
||||
|
||||
* Made cards static to remove conflict with hisax ISDN driver.
|
||||
|
||||
1998-10-30 Carlo Wood <carlo@alinoe.com>
|
||||
|
||||
* Re-included module versions (this source was based on the
|
||||
source by Jon Taylor which was based on an older version
|
||||
by Daryll Straus. I now included the later changes made
|
||||
by Daryll in this source too).
|
||||
* Use pci_find_device for 2.1/2.2 kernels instead of the old
|
||||
pcibios_find_device. Idem pci_present().
|
||||
|
||||
1998-10-21 Carlo Wood <carlo@alinoe.com>
|
||||
|
||||
* Fixed compile bugs related to 2.0 kernels.
|
||||
|
||||
1998-10-21 Carlo Wood <carlo@alinoe.com>
|
||||
|
||||
* `struct file_operations' was changed as of kernel 2.1.118,
|
||||
fixed this module to also work with versions > 2.1.117.
|
||||
|
||||
* Machines that don't have mtrr still need <asm/uaccess.h>.
|
||||
|
||||
1998-10-20 Carlo Wood <carlo@alinoe.com>
|
||||
|
||||
* Finally fixed in init_module() the right way. This time I tested
|
||||
it too (it now really works).
|
||||
|
||||
* Added resetmtrr_3dfx() to clean up the MTRR settings when the
|
||||
module is unloaded. This is not really necessary but its clean.
|
||||
It allows to compare using this device WITH MTRR with another
|
||||
method WITHOUT MTRR, without being confused by sticky MTRR settings
|
||||
for instance.
|
||||
|
||||
1998-10-18 Carlo Wood <carlo@alinoe.com>
|
||||
|
||||
* Forgot the '== -EBUSY' in init_module(), causing the registration
|
||||
of character device to always fail. You need to reboot if you
|
||||
tried the previous version (if there is junk in `cat /proc/devices'
|
||||
major 107).
|
||||
|
||||
1998-10-18 Carlo Wood <carlo@alinoe.com>
|
||||
|
||||
* struct file_operations fops_3dfx was initialized wrong:
|
||||
`release_3dfx' was put on the place of `fsync', causing weird
|
||||
behaviour :).
|
||||
|
||||
* Several warning fixes.
|
||||
|
||||
* setmtrr_3dfx did not always return a value, and the value was
|
||||
ignored, effectively ignoring errors returned by mtrr_add().
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
Summary: Device driver for 3Dfx boards for Linux kernels
|
||||
Name: Device3Dfx
|
||||
Version: 2.3
|
||||
Release: 5
|
||||
Icon: 3dfx.gif
|
||||
Source: Device3Dfx.tar.gz
|
||||
License: GPL
|
||||
Group: Drivers
|
||||
|
||||
%changelog
|
||||
|
||||
* Sat Apr 08 2000 Joseph Kain <joseph@3dfx.com>
|
||||
Release 2.3-5
|
||||
- Check both the kernel and the processor for MTRR support before enabling.
|
||||
|
||||
* Wed Jan 04 2000 Joseph Kain <joseph@3dfx.com>
|
||||
Release 2.3-4
|
||||
|
||||
- Forgot to include kinfo.h in 3dfx_driver.c in the last release. This
|
||||
fixes some build problems for SMP kernels.
|
||||
|
||||
* Wed Dec 22 1999 Joseph Kain <joseph@3dfx.com>
|
||||
Release 2.3-3
|
||||
|
||||
- Fixes to the Makefile to stop grepping the header files. Changes to
|
||||
mtrr.c and 3dfx_driver.c to support these Makefile changes.
|
||||
- 3dfx_driver.c now supports 2.3.14+ kernels.
|
||||
|
||||
* Mon Dec 13 1999 Joseph Kain <joseph@3dfx.com>
|
||||
Release 2.3-2
|
||||
|
||||
- Removed depmod -a from the Makefile. This elliminates errors in the
|
||||
build on systems with modules with broken depedancies (Happens on Madrake)
|
||||
- Changed depmod -a to depmod -a > /dev/null in the post and postun to
|
||||
elliminate any warnings/errors with modules that don't have anything
|
||||
to do with Device3Dfx. Warnings scare people.
|
||||
|
||||
* Tue Nov 09 1999 Joseph Kain <joseph@3dfx.com>
|
||||
Release 2.3:
|
||||
|
||||
- Made cards static to remove conflict with hisax ISDN driver.
|
||||
- Removed 3dfx.o from the source distribution
|
||||
|
||||
* Fri Jun 25 1999 Daryll Strauss <daryll@harlot.rb.ca.us>
|
||||
|
||||
Release 2.2:
|
||||
|
||||
- Set MTRR for VB/V3 boards
|
||||
- Allow build without kernel sources installed
|
||||
- Code cleanup
|
||||
- Improvements in /etc/conf.modules setup
|
||||
|
||||
* Sun May 16 1999 Daryll Strauss <daryll@harlot.rb.ca.us>
|
||||
|
||||
Release 2.1:
|
||||
|
||||
- Added support for multiple board mappings
|
||||
- Enlarged size of mappings
|
||||
- Changes to support VB/V3 boards
|
||||
|
||||
* Sun Apr 4 1999 Daryll Strauss <daryll@harlot.rb.ca.us>
|
||||
|
||||
Release 2.0-1:
|
||||
|
||||
- This is just a rename of Michael's version to return it to my original
|
||||
naming scheme.
|
||||
- Added the License field to the spec file.
|
||||
|
||||
* Thu Mar 11 1999 Michael Vance <mkv102@psu.edu>
|
||||
|
||||
Release 2.5-2:
|
||||
|
||||
- Fixed for 2.2.3 kernels because of an mmap() update
|
||||
|
||||
* Fri Oct 30 1998 Carlo Wood <carlo@runaway.xs4all.nl>
|
||||
|
||||
Release 2.5-1:
|
||||
|
||||
- Upped source to Dev3Dfx-2.5.tar.gz
|
||||
- Boosted version number of rpm to the version of the tar.gz.
|
||||
Moved everything to the Makefile, so Dev3Dfx-2.5.tar.gz is
|
||||
self containing and will work without rpm too.
|
||||
|
||||
* Wed Oct 21 1998 Carlo Wood <carlo@runaway.xs4all.nl>
|
||||
|
||||
Release 1.2-5:
|
||||
|
||||
- Upped source to Dev3Dfx-2.4.tar.gz
|
||||
- Removed dangerous and confusing use of /lib/modules/preferred
|
||||
- Removed the use of `uname': It now will compile for the kernel
|
||||
version in /usr/src/linux and not be bothered by the running
|
||||
kernel version.
|
||||
|
||||
* Wed Oct 21 1998 Carlo Wood <carlo@runaway.xs4all.nl>
|
||||
|
||||
Release 1.2-4:
|
||||
|
||||
- Upped source to Dev3Dfx-2.3.tar.gz
|
||||
|
||||
* Mon Oct 19 1998 Carlo Wood <carlo@runaway.xs4all.nl>
|
||||
|
||||
Release 1.2-3:
|
||||
|
||||
- Corrected Summary and Description to refer to 2.x rather
|
||||
then 2.1 kernels.
|
||||
- Removed script lines that write an `option' line to /etc/conf.modules.
|
||||
- Upped source to Dev3Dfx-2.2.tar.gz
|
||||
|
||||
* Sun Oct 18 1998 Carlo Wood <carlo@runaway.xs4all.nl>
|
||||
|
||||
Release 1.2-2:
|
||||
|
||||
- Added OPT_CFLAGS stuff.
|
||||
|
||||
* Sun Oct 18 1998 Carlo Wood <carlo@runaway.xs4all.nl>
|
||||
|
||||
Release 1.2-1:
|
||||
|
||||
- Packaged version 1.2 with support for 2.1 kernels by John Taylor and
|
||||
MTRR settings added by Jens Axboe.
|
||||
|
||||
%description
|
||||
This package installs the 3Dfx device driver to allow access to 3Dfx
|
||||
boards without the user having root privledges. It should work on >= 2.x
|
||||
kernels and set the MTRR settings correctly. It should also work with
|
||||
SMP kernels (>= 2.1).
|
||||
|
||||
%prep
|
||||
%setup -c
|
||||
|
||||
%build
|
||||
make OPT_CFLAGS="$RPM_OPT_FLAGS"
|
||||
|
||||
%install
|
||||
make RPM_INSTALL="1" install | grep '^/lib/modules/' > modules-file-list
|
||||
|
||||
%post
|
||||
if [ "$1" = 1 ]; then
|
||||
grep -v 3dfx /etc/conf.modules > /etc/conf.modules.tmp
|
||||
echo alias char-major-107 3dfx >> /etc/conf.modules.tmp
|
||||
mv /etc/conf.modules.tmp /etc/conf.modules
|
||||
fi
|
||||
/sbin/depmod -a > /dev/null
|
||||
|
||||
%postun
|
||||
if [ "$1" = 0 ]; then
|
||||
grep -v 3dfx /etc/conf.modules > /etc/conf.modules.tmp
|
||||
mv /etc/conf.modules.tmp /etc/conf.modules
|
||||
fi
|
||||
/sbin/depmod -a > /dev/null
|
||||
|
||||
%verifyscript
|
||||
inconf=`grep 'alias char-major-107 3dfx' /etc/conf.modules`
|
||||
if [ "x$inconf" = "x" ]; then
|
||||
echo "3dfx entry not included in /etc/conf.modules"
|
||||
fi
|
||||
|
||||
%files -f modules-file-list
|
||||
%verify(not mode user group) /dev/3dfx
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
###############################################################################
|
||||
# Makefile by Carlo Wood (and others)
|
||||
|
||||
# Determine the machine type
|
||||
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
|
||||
|
||||
# Setup machine dependant compiler flags
|
||||
ifeq ($(ARCH), i386)
|
||||
CFLAGS ?= -O2 -march=pentium -fomit-frame-pointer -fno-strength-reduce \
|
||||
-falign-loops=2 -falign-jumps=2 -falign-functions=2
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), alpha)
|
||||
CFLAGS ?= -O2 -mno-fp-regs -mcpu=ev4 -ffixed-8 -Wa,-mev6 \
|
||||
-fomit-frame-pointer -fno-strict-aliasing
|
||||
endif
|
||||
|
||||
KSRC ?= /usr/src/linux
|
||||
KHEADERS ?= $(KSRC)/include
|
||||
|
||||
-include kver.mak
|
||||
|
||||
MODULES_DIR = $(DESTDIR)/lib/modules/$(KVERS)
|
||||
|
||||
ALL_CFLAGS := -DMODULE -D__KERNEL__ \
|
||||
-I$(KHEADERS) -I$(KHEADERS)/asm/mach-default \
|
||||
$(CFLAGS)
|
||||
|
||||
ifneq ($(wildcard $(KHEADERS)/generated/utsrelease.h),)
|
||||
VERSION_HEADER := $(KHEADERS)/generated/utsrelease.h
|
||||
else
|
||||
ifneq ($(wildcard $(KHEADERS)/linux/utsrelease.h),)
|
||||
VERSION_HEADER := $(KHEADERS)/linux/utsrelease.h
|
||||
else
|
||||
VERSION_HEADER := $(KHEADERS)/linux/version.h
|
||||
endif
|
||||
endif
|
||||
|
||||
###############################################################################
|
||||
# You should never need to change anything below.
|
||||
|
||||
NAME := 3dfx
|
||||
|
||||
all: modules
|
||||
|
||||
kver: kver.c
|
||||
$(CC) -include $(VERSION_HEADER) -x c -o $@ $<
|
||||
|
||||
kver.mak: kver
|
||||
./$^ > $@
|
||||
|
||||
# Sanity checks
|
||||
sanity:
|
||||
@( \
|
||||
if [ ! -r $(KHEADERS)/linux ]; then \
|
||||
echo "Expect readable headers in $(KHEADERS)/linux"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ ! -r $(KHEADERS)/linux/version.h ]; then \
|
||||
echo "Missing $(KHEADERS)/linux/version.h"; \
|
||||
echo "Configure and install the kernel first"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ ! -e /proc/cpuinfo ]; then \
|
||||
echo "You need the /proc file system"; \
|
||||
echo "Reconfigure kernel and say Yes to CONFIG_PROC_FS"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
)
|
||||
|
||||
KVER_MAJOR = $(shell echo "$(KVERS)" | cut -d. -f1 )
|
||||
KVER_MINOR = $(shell echo "$(KVERS)" | cut -d. -f2 )
|
||||
|
||||
KBUILD = $(shell [ "$(KVER_MAJOR)" = 2 ] && [ "$(KVER_MINOR)" -ge 6 ] || \
|
||||
[ "$(KVER_MAJOR)" -ge 3 ] && echo yes )
|
||||
|
||||
help:
|
||||
@echo KVER_MAJOR = $(KVER_MAJOR)
|
||||
@echo KVER_MINOR = $(KVER_MINOR)
|
||||
@echo KBUILD = $(KBUILD)
|
||||
|
||||
ifeq ($(KBUILD),yes)
|
||||
BUILD_TYPE = kbuild
|
||||
MODULE_TDFX = kbuild/$(NAME).ko
|
||||
else
|
||||
BUILD_TYPE = legacy
|
||||
MODULE_TDFX = $(NAME).o
|
||||
endif
|
||||
|
||||
clean_type = clean_$(BUILD_TYPE)
|
||||
module_type = module_$(BUILD_TYPE)
|
||||
|
||||
###############################################################################
|
||||
|
||||
modules: sanity $(module_type)
|
||||
|
||||
module_legacy: $(NAME).o
|
||||
|
||||
$(NAME).o: 3dfx_driver.c Makefile
|
||||
$(CC) $(ALL_CFLAGS) -c -o $@ 3dfx_driver.c
|
||||
|
||||
module_kbuild:
|
||||
$(MAKE) -C kbuild
|
||||
|
||||
###############################################################################
|
||||
|
||||
install: sanity install_modules
|
||||
@( \
|
||||
if [ -e $(MODULES_DIR)/modules.dep ]; then \
|
||||
indep=`grep '$(NAME)/$(MODULE_TDFX):' $(MODULES_DIR)/modules.dep`; \
|
||||
if [ -z "$$indep" ]; then \
|
||||
echo "$(MODULES_DIR)/$(NAME)/$(MODULE_TDFX):" >> $(MODULES_DIR)/modules.dep; \
|
||||
echo "" >> $(MODULES_DIR)/modules.dep; \
|
||||
fi; \
|
||||
fi; \
|
||||
if [ ! -e $(DESTDIR)/dev/.devfsd -a ! -c $(DESTDIR)/dev/$(NAME) ]; then \
|
||||
mknod $(DESTDIR)/dev/$(NAME) c 107 0; \
|
||||
chmod go+w $(DESTDIR)/dev/$(NAME); \
|
||||
fi; \
|
||||
if [ "$(RPM_INSTALL)" = "1" ]; then \
|
||||
echo "$(MODULES_DIR)/$(NAME)/$(MODULE_TDFX)"; \
|
||||
else \
|
||||
inconf=`grep 'alias char-major-107 $(NAME)' $(DESTDIR)/etc/modules.conf`; \
|
||||
if [ -z "$$inconf" ]; then \
|
||||
echo "alias char-major-107 $(NAME)" >> $(DESTDIR)/etc/modules.conf; \
|
||||
fi; \
|
||||
fi; \
|
||||
)
|
||||
|
||||
install_modules: modules
|
||||
mkdir -p $(MODULES_DIR)/$(NAME)
|
||||
cp $(MODULE_TDFX) $(MODULES_DIR)/$(NAME)/
|
||||
|
||||
###############################################################################
|
||||
# This is for debugging purposes by the developers:
|
||||
|
||||
clean: $(clean_type)
|
||||
rm -f kver.mak kver
|
||||
|
||||
clean_legacy:
|
||||
rm -f *.ko *.o *.mod.* .*.mod.* .*.cmd
|
||||
|
||||
clean_kbuild:
|
||||
$(MAKE) -C kbuild clean
|
||||
|
||||
tar:
|
||||
tar czf ../../SOURCES/Dev3Dfx-2.5.tar.gz 3dfx_driver.c Makefile
|
||||
|
||||
debug:
|
||||
$(MAKE) CFLAGS="-g -Wall -Wstrict-prototypes -DDEBUG"
|
||||
|
||||
.PHONY: all sanity modules modules_legacy modules_kbuild
|
||||
.PHONY: install install_legacy install_kbuild
|
||||
.PHONY: clean clean_legacy clean_kbuild tar debug
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
Build instructions
|
||||
------------------
|
||||
|
||||
The new build system supports Linux kernel legacy build systems
|
||||
as used on 2.4.x or earlier and the new kbuild system used on 2.6
|
||||
and up.
|
||||
|
||||
Current make targets are:
|
||||
|
||||
modules
|
||||
clean
|
||||
install
|
||||
|
||||
If your kernel source is in some place different than /usr/src/linux
|
||||
specify the KSRC variable, like:
|
||||
|
||||
$ make KSRC=~/src/linux
|
||||
|
||||
If you want to install in a different base dir specify DESTDIR.
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
device3dfx (2.3-1) unstable; urgency=low
|
||||
|
||||
* Initial package.
|
||||
|
||||
-- RetroDebian <root@retrodebian.local> Thu, 20 Mar 2026 10:00:00 +0000
|
||||
@@ -1 +0,0 @@
|
||||
5
|
||||
@@ -1,14 +0,0 @@
|
||||
Source: device3dfx
|
||||
Section: misc
|
||||
Priority: optional
|
||||
Maintainer: RetroDebian <root@retrodebian.local>
|
||||
Standards-Version: 3.7.3
|
||||
|
||||
Package: device3dfx-modules-_KVERS_
|
||||
Architecture: any
|
||||
Provides: device3dfx-modules
|
||||
Depends: linux-modules-_KVERS_ | linux-image-_KVERS_
|
||||
Description: Device3Dfx kernel module for Debian Linux kernels
|
||||
External kernel module providing /dev/3dfx support for 3dfx hardware.
|
||||
.
|
||||
This package contains the compiled kernel module for _KVERS_.
|
||||
@@ -1,37 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
# -*- mode: makefile; coding: utf-8 -*-
|
||||
|
||||
PACKAGE=device3dfx-modules
|
||||
MA_DIR ?= /usr/share/modass
|
||||
|
||||
-include $(MA_DIR)/include/generic.make
|
||||
-include $(MA_DIR)/include/common-rules.make
|
||||
|
||||
kdist_config: prep-deb-files
|
||||
ln -sf ../3dfx_driver.c kbuild/3dfx.c
|
||||
|
||||
kdist_clean:
|
||||
rm -f kbuild/3dfx.c
|
||||
$(MAKE) -C $(KSRC) M=$(PWD)/kbuild clean
|
||||
|
||||
binary-modules:
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
dh_installdirs
|
||||
|
||||
ln -sf ../3dfx_driver.c kbuild/3dfx.c
|
||||
$(MAKE) -C $(KSRC) M=$(PWD)/kbuild modules
|
||||
|
||||
mkdir -p debian/$(PACKAGE)-$(KVERS)/lib/modules/$(KVERS)/extra
|
||||
cp kbuild/3dfx.ko debian/$(PACKAGE)-$(KVERS)/lib/modules/$(KVERS)/extra/
|
||||
|
||||
dh_installdocs
|
||||
dh_installchangelogs
|
||||
dh_installmodules
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
dh_installdeb
|
||||
dh_gencontrol -- -v$(VERSION)
|
||||
dh_md5sums
|
||||
dh_builddeb --destdir=$(DEB_DESTDIR)
|
||||
dh_clean -k
|
||||
@@ -1,16 +0,0 @@
|
||||
KSRC ?= /usr/src/linux
|
||||
|
||||
obj-m += 3dfx.o
|
||||
|
||||
modules:
|
||||
ln -sf ../3dfx_driver.c 3dfx.c
|
||||
$(MAKE) -C $(KSRC) M=$(shell pwd) modules
|
||||
|
||||
clean:
|
||||
rm -f 3dfx.c
|
||||
$(MAKE) -C $(KSRC) M=$(shell pwd) clean
|
||||
|
||||
install: modules
|
||||
$(MAKE) -C $(KSRC) M=$(shell pwd) INSTALL_MOD_PATH="$(DESTDIR)" \
|
||||
modules_install
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("KVERS = %s\n", UTS_RELEASE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
255
LICENSE
255
LICENSE
@@ -1,255 +0,0 @@
|
||||
3DFX GLIDE Source Code General Public License
|
||||
|
||||
|
||||
1. PREAMBLE
|
||||
|
||||
This license is for software that provides a 3D graphics application
|
||||
program interface (API).The license is intended to offer terms similar
|
||||
to some standard General Public Licenses designed to foster open
|
||||
standards and unrestricted accessibility to source code. Some of these
|
||||
licenses require that, as a condition of the license of the software,
|
||||
any derivative works (that is, new software which is a work containing
|
||||
the original program or a portion of it) must be available for general
|
||||
use, without restriction other than for a minor transfer fee, and that
|
||||
the source code for such derivative works must likewise be made
|
||||
available. The only restriction is that such derivative works must be
|
||||
subject to the same General Public License terms as the original work.
|
||||
|
||||
This 3dfx GLIDE Source Code General Public License differs from the
|
||||
standard licenses of this type in that it does not require the entire
|
||||
derivative work to be made available under the terms of this license
|
||||
nor is the recipient required to make available the source code for
|
||||
the entire derivative work. Rather, the license is limited to only the
|
||||
identifiable portion of the derivative work that is derived from the
|
||||
licensed software. The precise terms and conditions for copying,
|
||||
distribution and modification follow.
|
||||
|
||||
|
||||
2. DEFINITIONS
|
||||
|
||||
2.1 This License applies to any program (or other "work") which
|
||||
contains a notice placed by the copyright holder saying it may be
|
||||
distributed under the terms of this 3dfx GLIDE Source Code General
|
||||
Public License.
|
||||
|
||||
2.2 The term "Program" as used in this Agreement refers to 3DFX's
|
||||
GLIDE source code and object code and any Derivative Work.
|
||||
|
||||
2.3 "Derivative Work" means, for the purpose of the License, that
|
||||
portion of any work that contains the Program or the identifiable
|
||||
portion of a work that is derived from the Program, either verbatim or
|
||||
with modifications and/or translated into another language, and that
|
||||
performs 3D graphics API operations. It does not include any other
|
||||
portions of a work.
|
||||
|
||||
2.4 "Modifications of the Program" means any work, which includes a
|
||||
Derivative Work, and includes the whole of such work.
|
||||
|
||||
2.5 "License" means this 3dfx GLIDE Source Code General Public License.
|
||||
|
||||
2.6 The "Source Code" for a work means the preferred form of the work
|
||||
for making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, any
|
||||
associated interface definition files, and the scripts used to control
|
||||
compilation and installation of the executable work.
|
||||
|
||||
2.7 "3dfx" means 3dfx Interactive, Inc.
|
||||
|
||||
|
||||
3. LICENSED ACTIVITIES
|
||||
|
||||
3.1 COPYING - You may copy and distribute verbatim copies of the
|
||||
Program's Source Code as you receive it, in any medium, subject to the
|
||||
provision of section 3.3 and provided also that:
|
||||
|
||||
(a) you conspicuously and appropriately publish on each copy
|
||||
an appropriate copyright notice (3dfx Interactive, Inc. 1999), a notice
|
||||
that recipients who wish to copy, distribute or modify the Program can
|
||||
only do so subject to this License, and a disclaimer of warranty as
|
||||
set forth in section 5;
|
||||
|
||||
(b) keep intact all the notices that refer to this License and
|
||||
to the absence of any warranty; and
|
||||
|
||||
(c) do not make any use of the GLIDE trademark without the prior
|
||||
written permission of 3dfx, and
|
||||
|
||||
(d) give all recipients of the Program a copy of this License
|
||||
along with the Program or instructions on how to easily receive a copy
|
||||
of this License.
|
||||
|
||||
|
||||
3.2 MODIFICATION OF THE PROGRAM/DERIVATIVE WORKS - You may modify your
|
||||
copy or copies of the Program or any portion of it, and copy and
|
||||
distribute such modifications subject to the provisions of section 3.3
|
||||
and provided that you also meet all of the following conditions:
|
||||
|
||||
(a) you conspicuously and appropriately publish on each copy
|
||||
of a Derivative Work an appropriate copyright notice, a notice that
|
||||
recipients who wish to copy, distribute or modify the Derivative Work
|
||||
can only do so subject to this License, and a disclaimer of warranty
|
||||
as set forth in section 5;
|
||||
|
||||
(b) keep intact all the notices that refer to this License and
|
||||
to the absence of any warranty; and
|
||||
|
||||
(c) give all recipients of the Derivative Work a copy of this
|
||||
License along with the Derivative Work or instructions on how to easily
|
||||
receive a copy of this License.
|
||||
|
||||
(d) You must cause the modified files of the Derivative Work
|
||||
to carry prominent notices stating that you changed the files and the
|
||||
date of any change.
|
||||
|
||||
(e) You must cause any Derivative Work that you distribute or
|
||||
publish to be licensed at no charge to all third parties under the
|
||||
terms of this License.
|
||||
|
||||
(f) You do not make any use of the GLIDE trademark without the
|
||||
prior written permission of 3dfx.
|
||||
|
||||
(g) If the Derivative Work normally reads commands
|
||||
interactively when run, you must cause it, when started running for
|
||||
such interactive use, to print or display an announcement as follows:
|
||||
|
||||
"COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED THIS
|
||||
SOFTWARE IS FREE AND PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND,
|
||||
EITHER EXPRESSED OR IMPLIED. THERE IS NO RIGHT TO USE THE GLIDE
|
||||
TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX INTERACTIVE,
|
||||
INC. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A FULL TEXT OF THE
|
||||
DISTRIBUTION AND NON-WARRANTY PROVISIONS (REQUEST COPY FROM
|
||||
INFO@3DFX.COM)."
|
||||
|
||||
(h) The requirements of this section 3.2 do not apply to the
|
||||
modified work as a whole but only to the Derivative Work. It is not
|
||||
the intent of this License to claim rights or contest your rights to
|
||||
work written entirely by you; rather, the intent is to exercise the
|
||||
right to control the distribution of Derivative Works.
|
||||
|
||||
|
||||
3.3 DISTRIBUTION
|
||||
|
||||
(a) All copies of the Program or Derivative Works which are
|
||||
distributed must include in the file headers the following language
|
||||
verbatim:
|
||||
|
||||
"THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED
|
||||
ONLY PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO
|
||||
RIGHT TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF
|
||||
3DFX INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM
|
||||
THE DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC (info@3dfx.com).
|
||||
THIS PROGRAM. IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
|
||||
USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS
|
||||
IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
THE UNITED STATES.
|
||||
|
||||
COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED"
|
||||
|
||||
(b) You may distribute the Program or a Derivative Work in
|
||||
object code or executable form under the terms of Sections 3.1 and 3.2
|
||||
provided that you also do one of the following:
|
||||
|
||||
(1) Accompany it with the complete corresponding
|
||||
machine-readable source code, which must be distributed under the
|
||||
terms of Sections 3.1 and 3.2; or,
|
||||
|
||||
(2) Accompany it with a written offer, valid for at
|
||||
least three years, to give any third party, for a charge no more than
|
||||
your cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 3.1 and 3.2 on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
(3) Accompany it with the information you received as
|
||||
to the offer to distribute corresponding source code. (This alternative
|
||||
is allowed only for noncommercial distribution and only if you received
|
||||
the program in object code or executable form with such an offer, in
|
||||
accord with Subsection 3.3(b)(2) above.)
|
||||
|
||||
(c) The source code distributed need not include anything
|
||||
that is normally distributed (in either source or binary form) with
|
||||
the major components (compiler, kernel, and so on) of the operating
|
||||
system on which the executable runs, unless that component itself
|
||||
accompanies the executable code.
|
||||
|
||||
(d) If distribution of executable code or object code is made
|
||||
by offering access to copy from a designated place, then offering
|
||||
equivalent access to copy the source code from the same place counts
|
||||
as distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
(e) Each time you redistribute the Program or any Derivative
|
||||
Work, the recipient automatically receives a license from 3dfx and
|
||||
successor licensors to copy, distribute or modify the Program and
|
||||
Derivative Works subject to the terms and conditions of the License.
|
||||
You may not impose any further restrictions on the recipients'
|
||||
exercise of the rights granted herein. You are not responsible for
|
||||
enforcing compliance by third parties to this License.
|
||||
|
||||
(f) You may not make any use of the GLIDE trademark without
|
||||
the prior written permission of 3dfx.
|
||||
|
||||
(g) You may not copy, modify, sublicense, or distribute the
|
||||
Program or any Derivative Works except as expressly provided under
|
||||
this License. Any attempt otherwise to copy, modify, sublicense or
|
||||
distribute the Program or any Derivative Works is void, and will
|
||||
automatically terminate your rights under this License. However,
|
||||
parties who have received copies, or rights, from you under this
|
||||
License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
|
||||
4. MISCELLANEOUS
|
||||
|
||||
4.1 Acceptance of this License is voluntary. By using, modifying or
|
||||
distributing the Program or any Derivative Work, you indicate your
|
||||
acceptance of this License to do so, and all its terms and conditions
|
||||
for copying, distributing or modifying the Program or works based on
|
||||
it. Nothing else grants you permission to modify or distribute the
|
||||
Program or Derivative Works and doing so without acceptance of this
|
||||
License is in violation of the U.S. and international copyright laws.
|
||||
|
||||
4.2 If the distribution and/or use of the Program or Derivative Works
|
||||
is restricted in certain countries either by patents or by copyrighted
|
||||
interfaces, the original copyright holder who places the Program under
|
||||
this License may add an explicit geographical distribution limitation
|
||||
excluding those countries, so that distribution is permitted only in
|
||||
or among countries not thus excluded. In such case, this License
|
||||
incorporates the limitation as if written in the body of this License.
|
||||
|
||||
4.3 This License is to be construed according to the laws of the
|
||||
State of California and you consent to personal jurisdiction in the
|
||||
State of California in the event it is necessary to enforce the
|
||||
provisions of this License.
|
||||
|
||||
|
||||
5. NO WARRANTIES
|
||||
|
||||
5.1 TO THE EXTENT PERMITTED BY APPLICABLE LAW, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM. OR DERIVATIVE WORKS THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE PROGRAM AND ANY DERIVATIVE WORKS"AS IS"
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY
|
||||
AND PERFORMANCE OF THE PROGRAM AND ANY DERIVATIVE WORK IS WITH YOU.
|
||||
SHOULD THE PROGRAM OR ANY DERIVATIVE WORK PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
5.2 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL 3DFX
|
||||
INTERACTIVE, INC., OR ANY OTHER COPYRIGHT HOLDER, OR ANY OTHER PARTY
|
||||
WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM OR DERIVATIVE WORKS AS
|
||||
PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
|
||||
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
|
||||
INABILITY TO USE THE PROGRAM OR DERIVATIVE WORKS (INCLUDING BUT NOT
|
||||
LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
|
||||
SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM OR
|
||||
DERIVATIVE WORKS TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
5
README
5
README
@@ -1,5 +0,0 @@
|
||||
This is the source code to 3Dfx Glide for Voodoo graphics accelerators.
|
||||
It's forked from the original CVS repo of Glide open source project at
|
||||
sourceforge: https://sourceforge.net/projects/glide/
|
||||
|
||||
Source is licensed under 3DFX GLIDE Source Code General Public License.
|
||||
@@ -1,31 +0,0 @@
|
||||
Here are a few notes about building Glide3x from CVS.
|
||||
|
||||
The Glide source trees are branced by platform and the platform names are
|
||||
internal names used at 3dfx. Since these name may not make sense to others
|
||||
here is a quick list.
|
||||
|
||||
sst1: Voodoo Graphics
|
||||
sst96: Voodoo Rush
|
||||
cvg: Voodoo 2
|
||||
h3: Voodoo Banshee/Voodoo 3
|
||||
|
||||
There is a single toplevel makefile for glide2x. To select a build
|
||||
for either sst1, cvg or h3 set FX_GLIDE_HW to either sst1, cvg or h3. The
|
||||
default is to build for h3.
|
||||
|
||||
There are many other environment variables used to control the Glide
|
||||
build. Here is a listing of some of the important ones:
|
||||
|
||||
DEBUG=1: Turn on debugging information, note this disables
|
||||
the asm optimizations.
|
||||
FX_GLIDE_PIC=1: Enable PIC in shared libraries.
|
||||
FX_GLIDE_CTRISETUP=1: Use C versions as opposed to ASM versions of triangle
|
||||
setup code.
|
||||
GL_AMD3D=1: Enable AMD 3DNow! optimizations. Note this is
|
||||
currently broken on several platforms.
|
||||
|
||||
All glide source trees use a common set of libraries kept in the
|
||||
swlibs branch. In order to build any glide library the swlibs branch
|
||||
must be moved inside the glide3x directory. The swlibs branch is not
|
||||
stored here within the glide2x cvs tree because it is also shared with
|
||||
the glide3x branch.
|
||||
@@ -1,26 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
#
|
||||
# $Revision$
|
||||
# $Date$
|
||||
#
|
||||
|
||||
LDIRT = $(patsubst CVS,,$(patsubst makefile%,,$(wildcard *)))
|
||||
|
||||
include $(BUILD_ROOT_SWLIBS)/include/make/3dfx.mak
|
||||
@@ -1,27 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
#
|
||||
# $Revision$
|
||||
# $Date$
|
||||
#
|
||||
|
||||
THISDIR = cmd
|
||||
SUBDIRS = pass
|
||||
|
||||
include $(BUILD_ROOT_SWLIBS)/include/make/3dfx.mak
|
||||
@@ -1,40 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
#
|
||||
# $Revision$
|
||||
# $Date$
|
||||
#
|
||||
|
||||
# local defines, options, includes
|
||||
LCDEFS =
|
||||
LCOPTS =
|
||||
LCINCS = -I$(BUILD_ROOT)/$(FX_GLIDE_HW)/include
|
||||
|
||||
# sources
|
||||
CFILES = pass.c
|
||||
LLDLIBS = -L$(BUILD_ROOT)/$(FX_GLIDE_HW)/lib -lsst1init \
|
||||
-L$(BUILD_ROOT_SWLIBS)/lib -lfxmisc -lfxpci
|
||||
|
||||
|
||||
# targets
|
||||
PROGRAM = pass
|
||||
INSTALL_DESTINATION = $(BUILD_ROOT)/$(FX_GLIDE_HW)
|
||||
|
||||
include $(BUILD_ROOT_SWLIBS)/include/make/3dfx.mak
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
* PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
* TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
* INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
* DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
* THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
* FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
*
|
||||
* USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
* RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
* TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
* AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
* SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
* THE UNITED STATES.
|
||||
*
|
||||
* COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <3dfx.h>
|
||||
#include <glide.h>
|
||||
#include <sst1init.h>
|
||||
|
||||
/* This should be exported, but isn't yet */
|
||||
#define SST1INIT_MAX_BOARDS 16
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
FxU32* sst[SST1INIT_MAX_BOARDS];
|
||||
int num_sst;
|
||||
int i;
|
||||
|
||||
/* Map all the boards in the system */
|
||||
num_sst = 0;
|
||||
do {
|
||||
sst[num_sst] = sst1InitMapBoard (num_sst);
|
||||
} while (sst[num_sst++] != NULL);
|
||||
|
||||
/* Shut them all down */
|
||||
for (i = 0; i < num_sst; i += 1)
|
||||
sst1InitVgaPassCtrl(sst[i], 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
#
|
||||
# $Revision$
|
||||
# $Date$
|
||||
#
|
||||
|
||||
THISDIR = glide
|
||||
!if "$(FX_TARGET)" == "DOS"
|
||||
SUBDIRS = src tests
|
||||
!else
|
||||
SUBDIRS = oem src tests
|
||||
!endif
|
||||
|
||||
!include $(BUILD_ROOT_SWLIBS)/include/nmake/3dfx.mak
|
||||
@@ -1,24 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
#
|
||||
|
||||
THISDIR = glide
|
||||
SUBDIRS = oem src tests
|
||||
|
||||
include $(BUILD_ROOT_SWLIBS)/include/make/3dfx.mak
|
||||
@@ -1,24 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
#
|
||||
|
||||
THISDIR = glide
|
||||
SUBDIRS = oem src tests
|
||||
|
||||
include $(BUILD_ROOT_SWLIBS)/include/make/3dfx.mak
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
* PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
* TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
* INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
* DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
* THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
* FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
*
|
||||
* USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
* RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
* TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
* AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
* SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
* THE UNITED STATES.
|
||||
*
|
||||
* COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
*
|
||||
* $Header$
|
||||
* $Log$
|
||||
*
|
||||
* 1 7/25/97 9:05a Pgj
|
||||
* generate fxbldno.h which defines BUILD_NUMBER
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct tm locTime;
|
||||
time_t sysTime;
|
||||
char *build;
|
||||
|
||||
time(&sysTime);
|
||||
locTime = *localtime(&sysTime);
|
||||
|
||||
if (build = getenv("BUILD_NUMBER")) {
|
||||
printf("#define BUILD_NUMBER %s\n", build);
|
||||
} else {
|
||||
unsigned short magic;
|
||||
magic = (locTime.tm_yday << 7) |
|
||||
(locTime.tm_hour << 2) |
|
||||
(locTime.tm_min / 15);
|
||||
printf("#define BUILD_NUMBER %d\n", magic);
|
||||
}
|
||||
return 0;
|
||||
|
||||
} /* end main() */
|
||||
@@ -1,63 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
|
||||
!if "$(FX_GLIDE_HW)" == "sst96"
|
||||
GLIDE_SRC_BASE = sst1
|
||||
!else
|
||||
GLIDE_SRC_BASE = $(FX_GLIDE_HW)
|
||||
!endif
|
||||
LCINCS = $(LCINCS) -I$(BUILD_ROOT)\$(GLIDE_SRC_BASE)\include \
|
||||
-I$(BUILD_ROOT)\$(GLIDE_SRC_BASE)\glide\src
|
||||
|
||||
!if "$(DEBUG)" == "1"
|
||||
LCDEFS = -DDEBUG=1
|
||||
!endif
|
||||
|
||||
CFILES = oeminit.c
|
||||
RCFILE = oeminit.rc
|
||||
HEADERS = oeminit.h
|
||||
PRIVATE_HEADERS = rcver.h
|
||||
LIBRARIES = fxoem2x.lib
|
||||
|
||||
INSTALL_DESTINATION = $(BUILD_ROOT)\$(GLIDE_SRC_BASE)
|
||||
|
||||
# Make a static link library for things like the diags.
|
||||
!if "$(FX_DLL_BUILD)" == "1"
|
||||
FX_DLL_LIBRARY = 1
|
||||
!else
|
||||
LCDEFS = $(LCDEFS) -DFX_STATIC_BUILD
|
||||
!endif
|
||||
|
||||
LCDEFS = $(LCDEFS)
|
||||
|
||||
!include $(BUILD_ROOT)\swlibs/include/nmake/3dfx.mak
|
||||
|
||||
!if "$(FX_TARGET)" == "WIN32"
|
||||
!if "$(FX_DLL_BUILD)" != ""
|
||||
fxoem2x.dll:
|
||||
!endif
|
||||
!endif
|
||||
|
||||
fxbldno.exe: fxbldno.c $(HEADERS) $(PRIVATE_HEADERS)
|
||||
$(CC) -o $@ fxbldno.c $(GCDEFS) $(LCDEFS) $(VCDEFS) $(LCOPTS) $(LDFLAGS)
|
||||
|
||||
fxbldno.h: fxbldno.exe
|
||||
fxbldno > fxbldno.h
|
||||
|
||||
oeminit.res: rcver.h fxbldno.h
|
||||
@@ -1,49 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
|
||||
ifeq ($(FX_GLIDE_HW),sst96)
|
||||
GLIDE_SRC_BASE = sst1
|
||||
else
|
||||
GLIDE_SRC_BASE = $(FX_GLIDE_HW)
|
||||
endif
|
||||
LCINCS += -I$(BUILD_ROOT)\$(GLIDE_SRC_BASE)/include \
|
||||
-I$(BUILD_ROOT)/$(GLIDE_SRC_BASE)/glide/src
|
||||
|
||||
ifeq ($(DEBUG),1)
|
||||
DBGOPTS = -DGLIDE_DEBUG -DGDBG_INFO_ON
|
||||
GLIDE_SANITY_ALL = 1
|
||||
endif
|
||||
|
||||
CFILES = oeminit.c
|
||||
|
||||
HEADERS = oeminit.h
|
||||
|
||||
INSTALL_DESTINATION = $(BUILD_ROOT)/$(GLIDE_SRC_BASE)
|
||||
|
||||
LIBRARIES = libfxoem2x.a
|
||||
|
||||
# Make a static link library for things like the diags.
|
||||
ifeq ($(FX_DLL_BUILD),1)
|
||||
FX_DLL_LIBRARY = 1
|
||||
else
|
||||
LCDEFS += -DFX_STATIC_BUILD
|
||||
endif
|
||||
|
||||
include $(BUILD_ROOT)/swlibs/include/make/3dfx.mak
|
||||
|
||||
@@ -1,372 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef __linux__
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <3dfx.h>
|
||||
#include <fxdll.h>
|
||||
#include "oeminit.h"
|
||||
|
||||
const OemPciRegister OEM_PCI_VENDOR_ID = { 0x0, 2, OEM_READ_ONLY };
|
||||
const OemPciRegister OEM_PCI_DEVICE_ID = { 0x2, 2, OEM_READ_ONLY };
|
||||
const OemPciRegister OEM_PCI_COMMAND = { 0x4, 2, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_STATUS = { 0x6, 2, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_REVISION_ID = { 0x8, 1, OEM_READ_ONLY };
|
||||
const OemPciRegister OEM_PCI_CLASS_CODE = { 0x9, 3, OEM_READ_ONLY };
|
||||
const OemPciRegister OEM_PCI_CACHE_LINE_SIZE = { 0xC, 1, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_LATENCY_TIMER = { 0xD, 1, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_HEADER_TYPE = { 0xE, 1, OEM_READ_ONLY };
|
||||
const OemPciRegister OEM_PCI_BIST = { 0xF, 1, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_0 = { 0x10, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_1 = { 0x14, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_2 = { 0x18, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_3 = { 0x1C, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_4 = { 0x20, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_5 = { 0x24, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_6 = { 0x28, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_7 = { 0x2c, 4, OEM_READ_WRITE };
|
||||
const OemPciRegister OEM_PCI_BASE_ADDRESS_8 = { 0x30, 4, OEM_READ_WRITE };
|
||||
|
||||
static FILE* outFile = NULL;
|
||||
|
||||
static const char*
|
||||
myGetenv(const char* envKey)
|
||||
{
|
||||
FxBool callRealGetenvP = FXTRUE;
|
||||
|
||||
#if __WIN32__
|
||||
/* NB: If were being called from cya code in
|
||||
* DllMain(DLL_PROCESS_DETACH) because the current app has called
|
||||
* exit() or dropped off of the end of main the per dll environ
|
||||
* string table has been freed by the c runtime but has not been set
|
||||
* to NULL. Bad things happen if this memory has been unmapped by
|
||||
* the system or if the string cannot be found.
|
||||
*/
|
||||
{
|
||||
HANDLE curProcessHandle = GetCurrentProcess();
|
||||
DWORD exitCode = STILL_ACTIVE;
|
||||
|
||||
callRealGetenvP = ((curProcessHandle != NULL) &&
|
||||
GetExitCodeProcess(curProcessHandle, &exitCode) &&
|
||||
(exitCode == STILL_ACTIVE));
|
||||
}
|
||||
#endif /* __WIN32__ */
|
||||
|
||||
return (callRealGetenvP
|
||||
? getenv(envKey)
|
||||
: NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
MyDebugPrintf(FILE* outputFile, const char* fmtString, ...)
|
||||
{
|
||||
static FxBool debugDumpP = FXFALSE;
|
||||
static FxBool calledP = FXFALSE;
|
||||
|
||||
if (!calledP) {
|
||||
const char* envStr = myGetenv("GDBG_LEVEL");
|
||||
|
||||
debugDumpP = ((envStr != NULL) &&
|
||||
(atoi(envStr) >= 80));
|
||||
|
||||
calledP = FXTRUE;
|
||||
}
|
||||
|
||||
if (debugDumpP) {
|
||||
va_list args;
|
||||
|
||||
#if !DIRECTX
|
||||
va_start(args, fmtString);
|
||||
if (outputFile != NULL) vfprintf(outputFile, fmtString, args);
|
||||
va_end(args);
|
||||
#endif /* !DIRECTX */
|
||||
|
||||
va_start(args, fmtString);
|
||||
{
|
||||
//char msgBuf[256];
|
||||
|
||||
vfprintf(stderr, fmtString, args);
|
||||
//vsprintf(msgBuf, fmtString, args);
|
||||
//OutputDebugString(msgBuf);
|
||||
}
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
|
||||
static struct {
|
||||
const char* resName;
|
||||
GrScreenResolution_t resId;
|
||||
} resTable[] = {
|
||||
{ "320x200", GR_RESOLUTION_320x200 }, /* 0x0 */
|
||||
{ "320x240", GR_RESOLUTION_320x240 }, /* 0x1 */
|
||||
{ "400x256", GR_RESOLUTION_400x256 }, /* 0x2 */
|
||||
{ "512x384", GR_RESOLUTION_512x384 }, /* 0x3 */
|
||||
{ "640x200", GR_RESOLUTION_640x200 }, /* 0x4 */
|
||||
{ "640x350", GR_RESOLUTION_640x350 }, /* 0x5 */
|
||||
{ "640x400", GR_RESOLUTION_640x400 }, /* 0x6 */
|
||||
{ "640x480", GR_RESOLUTION_640x480 }, /* 0x7 */
|
||||
{ "800x600", GR_RESOLUTION_800x600 }, /* 0x8 */
|
||||
{ "960x720", GR_RESOLUTION_960x720 }, /* 0x9 */
|
||||
{ "856x480", GR_RESOLUTION_856x480 }, /* 0xA */
|
||||
{ "512x256", GR_RESOLUTION_512x256 }, /* 0xB */
|
||||
{ "1024x768", GR_RESOLUTION_1024x768 }, /* 0xC */
|
||||
{ "1280x1024", GR_RESOLUTION_1280x1024 }, /* 0xD */
|
||||
{ "1600x1200", GR_RESOLUTION_1600x1200 }, /* 0xE */
|
||||
{ "400x300", GR_RESOLUTION_400x300 } /* 0xF */
|
||||
};
|
||||
|
||||
static const char*
|
||||
GlideRes2String(GrScreenResolution_t res)
|
||||
{
|
||||
int i;
|
||||
const char* retVal = NULL;
|
||||
|
||||
for(i = 0; i < sizeof(resTable) / sizeof(resTable[0]); i++) {
|
||||
if (resTable[i].resId == res) {
|
||||
retVal = resTable[i].resName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ((retVal == NULL)
|
||||
? "Unknown"
|
||||
: retVal);
|
||||
}
|
||||
|
||||
static const char*
|
||||
GlideRefresh2String(GrScreenRefresh_t refresh)
|
||||
{
|
||||
static const char* refreshStrings[] = {
|
||||
"60", "70", "72", "75", "80", "90", "100", "85", "120"
|
||||
};
|
||||
|
||||
return ((refresh > sizeof(refreshStrings) / sizeof(refreshStrings[0]))
|
||||
? "Unknown"
|
||||
: refreshStrings[refresh]);
|
||||
}
|
||||
|
||||
static void
|
||||
DumpOemVideoInfo(const OemVideoTimingInfo* videoInfo)
|
||||
{
|
||||
if ((outFile != NULL) && (videoInfo != NULL)) {
|
||||
MyDebugPrintf(outFile, "VideoTimingInfo:\n");
|
||||
MyDebugPrintf(outFile, "\tGlideResolution: (0x%lX : %s)\n",
|
||||
videoInfo->res, GlideRes2String(videoInfo->res));
|
||||
MyDebugPrintf(outFile, "\tGlideRefreshRate: (0x%lX : %s Mhz)\n",
|
||||
videoInfo->refresh, GlideRefresh2String(videoInfo->refresh));
|
||||
MyDebugPrintf(outFile, "\tDepth: %ld\n", videoInfo->depth);
|
||||
MyDebugPrintf(outFile, "\tHSyncOn: 0x%lX\n", videoInfo->hSyncOn);
|
||||
MyDebugPrintf(outFile, "\tHSyncOff: 0x%lX\n", videoInfo->hSyncOff);
|
||||
MyDebugPrintf(outFile, "\tVSyncOn: 0x%lX\n", videoInfo->vSyncOn);
|
||||
MyDebugPrintf(outFile, "\tVSyncOn: 0x%lX\n", videoInfo->vSyncOff);
|
||||
MyDebugPrintf(outFile, "\tHBackPorch: 0x%lX\n", videoInfo->hBackPorch);
|
||||
MyDebugPrintf(outFile, "\tVBackPorch: 0x%lX\n", videoInfo->vBackPorch);
|
||||
MyDebugPrintf(outFile, "\tXDimension: 0x%lX\n", videoInfo->xDimension);
|
||||
MyDebugPrintf(outFile, "\tYDimension: 0x%lX\n", videoInfo->yDimension);
|
||||
MyDebugPrintf(outFile, "\tClkFreq 16bpp: %g\n", videoInfo->clkFreq16bpp);
|
||||
MyDebugPrintf(outFile, "\tClkFreq 24bpp: %g\n", videoInfo->clkFreq24bpp);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
DumpOemInitInfo(const char* fnName, const OemInitInfo* oemInfo)
|
||||
{
|
||||
const char* envStr = myGetenv("GDBG_LEVEL");
|
||||
|
||||
if ((envStr != NULL) && (atoi(envStr) >= 80)) {
|
||||
if (outFile == NULL) outFile = fopen("oemdll.txt", "w");
|
||||
if (outFile != NULL) {
|
||||
MyDebugPrintf(outFile, "%s: \n", fnName);
|
||||
if (oemInfo == NULL) goto __errExit;
|
||||
|
||||
MyDebugPrintf(outFile, "\tVersion: %d.%d\n",
|
||||
(oemInfo->version >> 16UL), (oemInfo->version & 0xFFFFUL));
|
||||
MyDebugPrintf(outFile, "\tVendorId: 0x%lX\n", oemInfo->vendorID);
|
||||
MyDebugPrintf(outFile, "\tSubVendorId: 0x%lX\n", oemInfo->subvendorID);
|
||||
MyDebugPrintf(outFile, "\tDeviceId: 0x%lX\n", oemInfo->deviceID);
|
||||
MyDebugPrintf(outFile, "\tBoardId: 0x%lX\n", oemInfo->boardID);
|
||||
MyDebugPrintf(outFile, "\tHW BaseAddr: 0x%lX\n", (FxU32)oemInfo->linearAddress);
|
||||
MyDebugPrintf(outFile, "\tSliSlaveAddr: 0x%lX\n", (FxU32)oemInfo->slaveAddress);
|
||||
|
||||
DumpOemVideoInfo(&oemInfo->vid);
|
||||
|
||||
__errExit:
|
||||
MyDebugPrintf(outFile, "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: fxoemInitMapBoard
|
||||
Date: 04-Feb-98
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
null function for oem dll
|
||||
Arguments:
|
||||
oem - information for oem dll
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemInitMapBoard(OemInitInfo *oem)
|
||||
{
|
||||
#define FN_NAME "fxoemInitMapBoard"
|
||||
|
||||
DumpOemInitInfo(FN_NAME, oem);
|
||||
|
||||
return 1;
|
||||
#undef FN_NAME
|
||||
} /* fxoemInitMapBoard */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: fxoemGet
|
||||
Date: 12-Mar-98
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
null function for oem dll
|
||||
Arguments:
|
||||
pname - selector to query oem dll functions
|
||||
plenth - length of the parameter in bytes
|
||||
param - data field
|
||||
Return:
|
||||
size of the parameter. O on error or not supported
|
||||
-------------------------------------------------------------------*/
|
||||
FX_EXPORT FxI32 FX_CSTYLE fxoemGet(FxU32 pname, FxU32 plength, FxI32 *params)
|
||||
{
|
||||
#define FN_NAME "fxoemGet"
|
||||
|
||||
switch(pname) {
|
||||
case FX_OEM_TVOUT:
|
||||
if (plength == 4) {
|
||||
*params = FXFALSE;
|
||||
return 4;
|
||||
}
|
||||
break;
|
||||
case FX_OEM_SLIMASTER:
|
||||
if (plength == 8) {
|
||||
*params = 0;
|
||||
*(params +1) = 0;
|
||||
return 8;
|
||||
}
|
||||
break;
|
||||
case FX_OEM_SLISLAVE:
|
||||
if (plength == 8) {
|
||||
*params = 0;
|
||||
*(params +1) = 0;
|
||||
return 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
#undef FN_NAME
|
||||
} /* fxoemGet */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: fxoemInitVideoTiming
|
||||
Date: 23-Feb-98
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
null function for oem dll
|
||||
Arguments:
|
||||
vid - video timing data
|
||||
Return:
|
||||
1 if video timing is modified
|
||||
0 if video timing is unchanged
|
||||
-------------------------------------------------------------------*/
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemInitVideoTiming(OemVideoTimingInfo *vid)
|
||||
{
|
||||
#define FN_NAME "fxoemInitVideoTiming"
|
||||
|
||||
DumpOemVideoInfo(vid);
|
||||
|
||||
return 0;
|
||||
#undef FN_NAME
|
||||
} /* fxoemInitSetVideo */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: fxoemInitSetVideo
|
||||
Date: 04-Feb-98
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
null function for oem dll
|
||||
Arguments:
|
||||
oem - information for oem dll
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemInitSetVideo(OemInitInfo *oem)
|
||||
{
|
||||
#define FN_NAME "fxoemInitSetVideo"
|
||||
|
||||
DumpOemInitInfo(FN_NAME, oem);
|
||||
|
||||
return 1;
|
||||
#undef FN_NAME
|
||||
} /* fxoemInitSetVideo */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: fxoemRestoreVideo
|
||||
Date: 04-Feb-98
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
null function for oem dll
|
||||
Arguments:
|
||||
oem - information for oem dll
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemRestoreVideo(OemInitInfo *oem)
|
||||
{
|
||||
#define FN_NAME "fxoemRestoreVideo"
|
||||
|
||||
DumpOemInitInfo(FN_NAME, oem);
|
||||
if (outFile != NULL) {
|
||||
fclose(outFile);
|
||||
outFile = NULL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
#undef FN_NAME
|
||||
} /* fxoemRestoreVideo */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: fxoemControl
|
||||
Date: 23-Feb-98
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
null function for oem dll
|
||||
Arguments:
|
||||
mode - determine whether the VGA display or Voodoo Graphics is visiable
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemControl(FxU32 mode)
|
||||
{
|
||||
#define FN_NAME "fxoemControlMode"
|
||||
|
||||
DumpOemInitInfo(FN_NAME, NULL);
|
||||
|
||||
return 1;
|
||||
#undef FN_NAME
|
||||
} /* fxoemRestoreVideo */
|
||||
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
*/
|
||||
|
||||
#ifndef __OEMINIT_H__
|
||||
#define __OEMINIT_H__
|
||||
|
||||
#define OEMINIT_INVALID_BOARD_ID 0xdeadfeed
|
||||
#define OEMINIT_VERSION 0x10001
|
||||
|
||||
#include "3dfx.h"
|
||||
#define FX_DLL_DEFINITION
|
||||
#include "fxdll.h"
|
||||
#include "sst1vid.h"
|
||||
|
||||
#define FX_OEM_CONTROL_ACTIVATE 1
|
||||
#define FX_OEM_CONTROL_DEACTIVATE 2
|
||||
|
||||
#define FX_OEM_TVOUT 1
|
||||
#define FX_OEM_SLIMASTER 2
|
||||
#define FX_OEM_SLISLAVE 3
|
||||
|
||||
#define FX_OEM_FBI_CONFIG_SHIFT 8
|
||||
|
||||
typedef enum {
|
||||
OEM_READ_ONLY,
|
||||
OEM_WRITE_ONLY,
|
||||
OEM_READ_WRITE
|
||||
} OemPciIOFlag;
|
||||
|
||||
typedef struct {
|
||||
FxU32 regAddress;
|
||||
FxU32 sizeInBytes;
|
||||
OemPciIOFlag rwFlag;
|
||||
} OemPciRegister;
|
||||
|
||||
typedef FxU32 (FX_CALL *PciConfigProc)(OemPciRegister, FxU32, FxU32 *);
|
||||
|
||||
typedef struct {
|
||||
GrScreenResolution_t res;
|
||||
GrScreenRefresh_t refresh;
|
||||
FxU32 depth;
|
||||
FxU32 hSyncOn;
|
||||
FxU32 hSyncOff;
|
||||
FxU32 vSyncOn;
|
||||
FxU32 vSyncOff;
|
||||
FxU32 hBackPorch;
|
||||
FxU32 vBackPorch;
|
||||
FxU32 xDimension;
|
||||
FxU32 yDimension;
|
||||
float clkFreq16bpp;
|
||||
float clkFreq24bpp;
|
||||
} OemVideoTimingInfo;
|
||||
|
||||
typedef struct {
|
||||
FxU32 version; /* Version for this structure */
|
||||
FxU32 vendorID; /* PCI Vendor ID field */
|
||||
FxU32 subvendorID; /* PCI sub Vendor ID field */
|
||||
FxU32 deviceID; /* PCI Device ID field */
|
||||
FxU32 boardID; /* Board ID: defined for Voodoo2 only!!! */
|
||||
FxU32 *linearAddress; /* address for primary board */
|
||||
FxU32 *slaveAddress; /* address for slave board */
|
||||
PciConfigProc fxoemPciWriteConfig;
|
||||
PciConfigProc fxoemPciReadConfig;
|
||||
OemVideoTimingInfo vid;
|
||||
FxU32 reserved[42];
|
||||
} OemInitInfo;
|
||||
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemInitMapBoard(OemInitInfo *oem);
|
||||
FX_EXPORT FxI32 FX_CSTYLE fxoemGet(FxU32 pname, FxU32 plength, FxI32 *params);
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemInitVideoTiming(OemVideoTimingInfo *vid);
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemInitSetVideo(OemInitInfo *oem);
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemRestoreVideo(OemInitInfo *oem);
|
||||
FX_EXPORT FxU32 FX_CSTYLE fxoemControl(FxU32 mode);
|
||||
|
||||
#endif /* __OEMINIT_H__ */
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*/
|
||||
|
||||
#define OFFICIAL 1
|
||||
#define FINAL 1
|
||||
|
||||
#include <fxver.h>
|
||||
#include "rcver.h"
|
||||
#include "fxbldno.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
#ifndef GLIDE3
|
||||
#define VERSIONNAME "oeminit2x.dll\0"
|
||||
#else
|
||||
#define VERSIONNAME "oeminit3x.dll\0"
|
||||
#endif
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
|
||||
PRODUCTVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
|
||||
FILEFLAGSMASK 0x0030003FL
|
||||
FILEFLAGS (VER_PRIVATEBUILD|VER_PRERELEASE|VER_DEBUG)
|
||||
|
||||
FILEOS VOS_DOS_WINDOWS32
|
||||
FILETYPE VFT_DRV
|
||||
FILESUBTYPE VFT2_DRV_INSTALLABLE
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "3Dfx Interactive, Inc.\0"
|
||||
VALUE "FileDescription", "3Dfx Interactive, Inc. OEM DLL\0"
|
||||
VALUE "FileVersion", VERSIONSTR
|
||||
VALUE "InternalName", VERSIONNAME
|
||||
VALUE "LegalCopyright", "Copyright \251 3Dfx Interactive, Inc. 1997\0"
|
||||
VALUE "OriginalFilename", VERSIONNAME
|
||||
VALUE "ProductName", PRODNAME
|
||||
VALUE "ProductVersion", VERSIONSTR
|
||||
VALUE "Graphics Subsystem", HWSTR
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
/* the following line should be extended for localized versions */
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
* PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
* TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
* INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
* DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
* THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
* FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
*
|
||||
* USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
* RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
* TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
* AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
* SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
* THE UNITED STATES.
|
||||
*
|
||||
* COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
*/
|
||||
|
||||
#define MANVERSION 2
|
||||
#define MANREVISION 53
|
||||
|
||||
#ifndef GLIDE3
|
||||
#define VERSIONSTR "2.53\0"
|
||||
#else
|
||||
#define VERSIONSTR "3.0\0"
|
||||
#endif
|
||||
|
||||
#if defined(CVG) || defined(VOODOO2)
|
||||
# define HWSTR " Voodoo(tm)\0"
|
||||
# ifdef NT_BUILD
|
||||
# define PRODNAME "Glide(tm) for Voodoo\251 and Windows\256 NT\0"
|
||||
# else
|
||||
# define PRODNAME "Glide(tm) for Voodoo\251 and Windows\256 95/98\0"
|
||||
# endif /* NT_BUILD */
|
||||
#elif defined(H3)
|
||||
# define HWSTR " Banshee(tm)\0"
|
||||
# ifdef NT_BUILD
|
||||
# define PRODNAME "Glide(tm) for Banshee\251 and Windows\256 NT\0"
|
||||
# else
|
||||
# define PRODNAME "Glide(tm) for Banshee\251 and Windows\256 95/98\0"
|
||||
# endif /* NT_BUILD */
|
||||
#else
|
||||
# define PRODNAME "Something really, really important\0"
|
||||
# define HWSTR " Unknown Chip\0"
|
||||
#endif
|
||||
@@ -1,352 +0,0 @@
|
||||
# Win32 makefile for Glide2/CVG and Texus2
|
||||
# This makefile MUST be processed by GNU make!!!
|
||||
#
|
||||
# Copyright (c) 2004
|
||||
#
|
||||
# Daniel Borca
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
#
|
||||
# Hiroshi Morii
|
||||
# Email : koolsmoky@users.sourceforge.net
|
||||
# Web : http://www.3dfxzone.it/koolsmoky
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# Available options:
|
||||
#
|
||||
# Environment variables:
|
||||
# FX_GLIDE_HW build for the given ASIC (cvg).
|
||||
# default = cvg
|
||||
# CPU optimize for the given processor.
|
||||
# default = 6 (PentiumPro)
|
||||
# DEBUG=1 disable optimizations and build for debug.
|
||||
# default = no
|
||||
# USE_X86=1 use assembler triangle specializations; req by CVG
|
||||
# default = yes
|
||||
# USE_3DNOW=1 allow 3DNow! specializations. However, the true CPU
|
||||
# capabilities are still checked at run-time to avoid
|
||||
# crashes.
|
||||
# default = no
|
||||
# USE_MMX=1 allow MMX specializations.
|
||||
# default = no
|
||||
# TEXUS2=1 embed Texus2 functions into Glide2.
|
||||
# default = no
|
||||
# FXOEM2X=1 build fxoem2x.dll
|
||||
# default = no
|
||||
#
|
||||
# Targets:
|
||||
# all: build everything
|
||||
# glide2x: build Glide2x lib
|
||||
# clean: remove object files
|
||||
# realclean: remove all generated files
|
||||
#
|
||||
|
||||
|
||||
|
||||
.PHONY: all glide2x clean realclean
|
||||
.INTERMEDIATE: fxgasm.exe
|
||||
.SUFFIXES: .c .obj .rc .res
|
||||
|
||||
###############################################################################
|
||||
# general defines (user settable?)
|
||||
###############################################################################
|
||||
|
||||
GLIDE_RES = glide.res
|
||||
GLIDE_DLL = glide2x.dll
|
||||
GLIDE_IMP = glide2x.lib
|
||||
TEXUS_EXE = texus2.exe
|
||||
|
||||
FX_GLIDE_HW ?= cvg
|
||||
FX_GLIDE_SW = ../../../swlibs
|
||||
GLIDE_LIBDIR = ../../lib
|
||||
TEXUS_EXEDIR = $(FX_GLIDE_SW)/bin
|
||||
|
||||
###############################################################################
|
||||
# tools
|
||||
###############################################################################
|
||||
|
||||
CC = cl
|
||||
AS = nasm
|
||||
LD = link
|
||||
RC = rc
|
||||
|
||||
ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
|
||||
UNLINK = del $(subst /,\,$(1))
|
||||
else
|
||||
UNLINK = $(RM) $(1)
|
||||
endif
|
||||
|
||||
###############################################################################
|
||||
# defines
|
||||
###############################################################################
|
||||
|
||||
# platform
|
||||
CDEFS = -D__WIN32__ -DDIRECTX -DFX_DLL_ENABLE -D__3Dfx_PCI_CFG__
|
||||
|
||||
# general
|
||||
CDEFS += -DGLIDE_HW_TRI_SETUP=1 -DGLIDE_PACKED_RGB=1 -DGLIDE_TRI_CULLING=1 -DGLIDE_DEFAULT_GAMMA=1.3f -DGLIDE_LIB=1
|
||||
#CDEFS += -DGLIDE3 -DGLIDE3_ALPHA -DGLIDE3_SCALER
|
||||
|
||||
# special sli buffer clears
|
||||
CDEFS += -DGLIDE_BLIT_CLEAR=1
|
||||
|
||||
# workaround for CVGs with broken tsus which cannot send commands to multiple
|
||||
# tmus using chipfield. chipfield will always be set to 0xf
|
||||
CDEFS += -DGLIDE_CHIP_BROADCAST=1
|
||||
|
||||
# subsystem
|
||||
CDEFS += -DCVG
|
||||
|
||||
# debug
|
||||
ifdef DEBUG
|
||||
CDEFS += -DGDBG_INFO_ON -DGLIDE_DEBUG -DGLIDE_SANITY_ASSERT -DGLIDE_SANITY_SIZE
|
||||
endif
|
||||
|
||||
override USE_FIFO = 1
|
||||
#override USE_X86 = 1
|
||||
|
||||
ifeq ($(USE_X86),1)
|
||||
CDEFS += -DGLIDE_DISPATCH_SETUP=1 -DGLIDE_DISPATCH_DOWNLOAD=1
|
||||
override USE_FIFO = 1
|
||||
else
|
||||
CDEFS += -DGLIDE_USE_C_TRISETUP=1
|
||||
endif
|
||||
|
||||
# fifo
|
||||
ifeq ($(USE_FIFO),1)
|
||||
CDEFS += -DUSE_PACKET_FIFO=1 -DGLIDE_PACKET3_TRI_SETUP=1
|
||||
endif
|
||||
|
||||
# other
|
||||
CDEFS += -DGLIDE_PLUG -DGLIDE_SPLASH
|
||||
|
||||
ifeq ($(TEXUS2),1)
|
||||
CDEFS += -DHAVE_TEXUS2
|
||||
endif
|
||||
|
||||
###############################################################################
|
||||
# flags
|
||||
###############################################################################
|
||||
|
||||
# linker
|
||||
LDFLAGS = -nologo -dll -opt:WIN98 -machine:IX86 -nodefaultlib
|
||||
|
||||
# assembler
|
||||
ASFLAGS = -O6 -fwin32 -D__WIN32__ --prefix _
|
||||
ASFLAGS += $(CDEFS)
|
||||
|
||||
# compiler
|
||||
CFLAGS = -nologo -W3 -WX -D__MSC__=1
|
||||
|
||||
LDLIBS = user32.lib kernel32.lib advapi32.lib
|
||||
ifdef DEBUG
|
||||
CFLAGS += -Od -MTd -Zi
|
||||
LDFLAGS += -debugtype:both -debug
|
||||
LDLIBS += LIBCMTD.lib
|
||||
else
|
||||
CPU ?= 6
|
||||
CFLAGS += -DNDEBUG -G$(CPU) -O2 -MT
|
||||
LDLIBS += LIBCMT.lib
|
||||
endif
|
||||
|
||||
CFLAGS += -I. -I../../incsrc -I../../init
|
||||
CFLAGS += -I$(FX_GLIDE_SW)/fxmisc -I$(FX_GLIDE_SW)/newpci/pcilib -I$(FX_GLIDE_SW)/fxmemmap
|
||||
CFLAGS += -I$(FX_GLIDE_SW)/texus2/lib
|
||||
CFLAGS += $(CDEFS)
|
||||
|
||||
# cpu optimized triangle
|
||||
ifeq ($(USE_MMX),1)
|
||||
CFLAGS += -DGL_MMX
|
||||
override USE_X86 = 1
|
||||
endif
|
||||
|
||||
ifeq ($(USE_3DNOW),1)
|
||||
CFLAGS += -DGL_AMD3D
|
||||
override USE_X86 = 1
|
||||
endif
|
||||
|
||||
###############################################################################
|
||||
# objects
|
||||
###############################################################################
|
||||
|
||||
GLIDE_OBJECTS = \
|
||||
fifo.obj \
|
||||
gsplash.obj \
|
||||
g3df.obj \
|
||||
gu.obj \
|
||||
guclip.obj \
|
||||
gpci.obj \
|
||||
gump.obj \
|
||||
diglide.obj \
|
||||
disst.obj \
|
||||
ditex.obj \
|
||||
gbanner.obj \
|
||||
gerror.obj \
|
||||
gmovie.obj \
|
||||
digutex.obj \
|
||||
ddgump.obj \
|
||||
gaa.obj \
|
||||
gdraw.obj \
|
||||
gglide.obj \
|
||||
glfb.obj \
|
||||
gsst.obj \
|
||||
gtex.obj \
|
||||
gtexdl.obj \
|
||||
gutex.obj \
|
||||
cpuid.obj \
|
||||
fpu.obj \
|
||||
xtexdl_def.obj
|
||||
|
||||
ifeq ($(USE_X86),1)
|
||||
GLIDE_OBJECTS += \
|
||||
xdraw2_def.obj
|
||||
ifeq ($(USE_MMX),1)
|
||||
GLIDE_OBJECTS += \
|
||||
xtexdl_mmx.obj
|
||||
endif
|
||||
ifeq ($(USE_3DNOW),1)
|
||||
GLIDE_OBJECTS += \
|
||||
xdraw2_3dnow.obj \
|
||||
xtexdl_3dnow.obj
|
||||
endif
|
||||
else
|
||||
GLIDE_OBJECTS += \
|
||||
gxdraw.obj
|
||||
endif
|
||||
|
||||
GLIDE_OBJECTS += \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxpci.obj \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxw32.obj \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxvxd.obj \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxnt.obj \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxmsr.obj \
|
||||
../../init/canopus.obj \
|
||||
../../init/dac.obj \
|
||||
../../init/gamma.obj \
|
||||
../../init/gdebug.obj \
|
||||
../../init/info.obj \
|
||||
../../init/parse.obj \
|
||||
../../init/print.obj \
|
||||
../../init/sli.obj \
|
||||
../../init/sst1init.obj \
|
||||
../../init/util.obj \
|
||||
../../init/video.obj \
|
||||
../../init/fxremap.obj
|
||||
|
||||
TEXUS_SOURCES = \
|
||||
$(FX_GLIDE_SW)/texus2/lib/texuslib.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/clamp.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/read.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/resample.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/mipmap.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/quantize.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/ncc.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/nccnnet.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/pal256.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/pal6666.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/dequant.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/view.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/util.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/diffuse.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/write.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/tga.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/3df.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/ppm.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/rgt.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/txs.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/codec.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/eigen.c \
|
||||
$(FX_GLIDE_SW)/texus2/lib/bitcoder.c
|
||||
|
||||
ifeq ($(TEXUS2),1)
|
||||
GLIDE_OBJECTS += $(TEXUS_SOURCES:.c=.obj)
|
||||
endif
|
||||
|
||||
###############################################################################
|
||||
# rules
|
||||
###############################################################################
|
||||
|
||||
.c.obj:
|
||||
$(CC) -Fo$@ $(CFLAGS) -c $<
|
||||
.rc.res:
|
||||
$(RC) -Fo$@ $(CDEFS) -I$(FX_GLIDE_SW)/fxmisc $<
|
||||
|
||||
###############################################################################
|
||||
# main
|
||||
###############################################################################
|
||||
all: glide2x $(TEXUS_EXEDIR)/$(TEXUS_EXE) fxoem2x
|
||||
|
||||
glide2x: $(GLIDE_LIBDIR)/$(GLIDE_DLL)
|
||||
|
||||
$(GLIDE_LIBDIR)/$(GLIDE_DLL): $(GLIDE_OBJECTS) $(GLIDE_RES)
|
||||
$(LD) -out:$@ $(LDFLAGS) $(GLIDE_OBJECTS) $(LDLIBS) $(GLIDE_RES)
|
||||
|
||||
$(TEXUS_EXEDIR)/$(TEXUS_EXE): $(FX_GLIDE_SW)/texus2/cmd/cmd.c $(GLIDE_LIBDIR)/$(GLIDE_IMP)
|
||||
#ifeq ($(TEXUS2),1)
|
||||
# $(CC) -o $@ $(CFLAGS) $^
|
||||
#else
|
||||
# $(warning Texus2 not enabled... Skipping $(TEXUS_EXE))
|
||||
#endif
|
||||
|
||||
fxoem2x: $(GLIDE_LIBDIR)/fxoem2x.dll
|
||||
|
||||
ifeq ($(FXOEM2X),1)
|
||||
$(GLIDE_LIBDIR)/fxoem2x.dll: ../oem/oeminit.obj ../oem/oeminit.res
|
||||
# $(LD) -out:$@ $(LDFLAGS) ../oem/oeminit.obj $(LDLIBS) ../oem/oeminit.res
|
||||
else
|
||||
$(GLIDE_LIBDIR)/fxoem2x.dll:
|
||||
# $(warning FxOem2x not enabled... Skipping fxoem2x.dll)
|
||||
endif
|
||||
|
||||
###############################################################################
|
||||
# rules(2)
|
||||
###############################################################################
|
||||
|
||||
#cpuid.obj: cpudtect.asm
|
||||
# $(AS) -o $@ $(ASFLAGS) $<
|
||||
xdraw2_def.obj: xdraw2.asm
|
||||
$(AS) -o $@ $(ASFLAGS) $<
|
||||
xtexdl_def.obj: xtexdl.c
|
||||
$(CC) -Fo$@ $(CFLAGS) -c $<
|
||||
xtexdl_mmx.obj: xtexdl.asm
|
||||
$(AS) -o $@ $(ASFLAGS) -DGL_MMX=1 $<
|
||||
xdraw2_3dnow.obj: xdraw2.asm
|
||||
$(AS) -o $@ $(ASFLAGS) -DGL_AMD3D=1 $<
|
||||
xtexdl_3dnow.obj: xtexdl.asm
|
||||
$(AS) -o $@ $(ASFLAGS) -DGL_AMD3D=1 $<
|
||||
|
||||
$(GLIDE_OBJECTS): fxinline.h fxgasm.h
|
||||
|
||||
fxinline.h: fxgasm.exe
|
||||
./$< -inline > $@
|
||||
|
||||
fxgasm.h: fxgasm.exe
|
||||
./$< -hex > $@
|
||||
|
||||
fxgasm.exe: fxgasm.c
|
||||
$(CC) -o $@ $(CFLAGS) $<
|
||||
|
||||
###############################################################################
|
||||
# clean, realclean
|
||||
###############################################################################
|
||||
|
||||
clean:
|
||||
-$(call UNLINK,*.obj)
|
||||
-$(call UNLINK,../../init/*.obj)
|
||||
-$(call UNLINK,$(FX_GLIDE_SW)/newpci/pcilib/*.obj)
|
||||
-$(call UNLINK,fxinline.h)
|
||||
-$(call UNLINK,fxgasm.h)
|
||||
-$(call UNLINK,$(FX_GLIDE_SW)/texus2/lib/*.obj)
|
||||
-$(call UNLINK,../oem/oeminit.obj)
|
||||
-$(call UNLINK,../oem/oeminit.res)
|
||||
|
||||
realclean: clean
|
||||
-$(call UNLINK,$(GLIDE_LIBDIR)/glide2x.exp)
|
||||
-$(call UNLINK,$(GLIDE_LIBDIR)/$(GLIDE_DLL))
|
||||
-$(call UNLINK,$(GLIDE_LIBDIR)/$(GLIDE_IMP))
|
||||
-$(call UNLINK,$(TEXUS_EXEDIR)/$(TEXUS_EXE))
|
||||
-$(call UNLINK,$(GLIDE_LIBDIR)/fxoem2x.exp)
|
||||
-$(call UNLINK,$(GLIDE_LIBDIR)/fxoem2x.dll)
|
||||
-$(call UNLINK,$(GLIDE_LIBDIR)/fxoem2x.lib)
|
||||
@@ -1,101 +0,0 @@
|
||||
static int banner_width = 180;
|
||||
static int banner_height = 90;
|
||||
static unsigned short banner_data[] = {
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52aa, 0xad34, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2922, 0xacee, 0x39a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x93ea, 0xd5d0, 0x944d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9383, 0xd506, 0x8beb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbc63, 0xd506, 0xd58d, 0x7b6a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a82, 0xd4e4, 0xd504, 0xc54d, 0x2943, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5202, 0xd4e3, 0xd4e3, 0xd505, 0xcd6d, 0x5aa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3961, 0xc483, 0xd503, 0xd504, 0xd569, 0x8baa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5268, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9364, 0xd4e2, 0xd4e2, 0xd4e2, 0xd505, 0xc54e, 0x4206, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa3e3, 0xd504, 0xd546, 0xd504, 0xd525, 0xc54d, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20e1, 0x93a4, 0xcd4c, 0x20e2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbc86, 0xd504, 0xd547, 0xd548, 0xd504, 0xd526, 0xbd2f, 0x2944, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7ae3, 0xd504, 0xd56a, 0xd634, 0xd569, 0xd525, 0xdd69, 0x8369, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49c3, 0xb487, 0xd504, 0xd528, 0x5246, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0x6ac4, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x528a, 0x39e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xd526, 0xd548, 0xd5cf, 0xd613, 0xd527, 0xd505, 0xd548, 0xacae, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49a1, 0xcce5, 0xd56a, 0xde12, 0xde98, 0xddce, 0xd548, 0xdd04, 0xc52e, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72c5, 0xcce7, 0xd504, 0xd503, 0xd527, 0x7b48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49e2, 0x9b83, 0xc4a4, 0xac23, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5247, 0xc570, 0x736a, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9363, 0xd505, 0xd58c, 0xd634, 0xd678, 0xd5f1, 0xd548, 0xd504, 0xd58b, 0x942c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18a1, 0xb444, 0xdd48, 0xddf0, 0xde98, 0xdeb9, 0xde55, 0xdd6b, 0xdd03, 0xdd8b, 0x7349, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2902, 0x9be6, 0xd527, 0xd524, 0xd524, 0xdd03, 0xd526, 0x9c09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20e1, 0x72c4, 0xac25, 0xd4e3, 0xd4e3, 0xd4e3, 0x8345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbc85, 0xd5cf, 0xacef, 0x4227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbc85, 0xd526, 0xd5f1, 0xd698, 0xd6ba, 0xd699, 0xd5cf, 0xd547, 0xd525, 0xd5ae, 0x7b6a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8b43, 0xdd04, 0xddae, 0xde76, 0xdeda, 0xdeda, 0xdeba, 0xddcf, 0xdd25, 0xdd47, 0xbd0c, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a04, 0xbc86, 0xdd24, 0xdd26, 0xddcf, 0xddcf, 0xdd25, 0xdd26, 0xb4ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41a3, 0x8b64, 0xc4a6, 0xd503, 0xd4e3, 0xd4e3, 0xd4e3, 0xd507, 0x49e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9362, 0xd4e3, 0xd56b, 0xcdb2, 0x83cc, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xd525, 0xd548, 0xd613, 0xd6b9, 0xd6ba, 0xd6ba, 0xd677, 0xddae, 0xd527, 0xdd25, 0xd58d, 0x62c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xd505, 0xdd68, 0xde34, 0xdeda, 0xdedb, 0xdedb, 0xdeda, 0xde33, 0xdd8a, 0xdd25, 0xdd8c, 0x6b09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72e5, 0xcd06, 0xdd24, 0xdd68, 0xde33, 0xdeb9, 0xde34, 0xdd46, 0xdd25, 0xcd49, 0x20c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c1, 0x6aa4, 0xa404, 0xd4e4, 0xd504, 0xd549, 0xd5ae, 0xd5ad, 0xd548, 0xd505, 0xbc86, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a21, 0xd4e2, 0xd4e3, 0xd506, 0xd58c, 0xb531, 0x5248, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9363, 0xd504, 0xd5ad, 0xd655, 0xdeba, 0xdeba, 0xdeba, 0xdeba, 0xde76, 0xddae, 0xdd04, 0xdd47, 0xc54d, 0x4a06, 0x0000, 0x0000, 0x0000, 0x2921, 0xbc84, 0xdd46, 0xde11, 0xde98, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeb8, 0xddf0, 0xdd46, 0xdd47, 0xbcec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2922, 0x9c07, 0xdd26, 0xdd26, 0xdd8a, 0xde55, 0xdeb9, 0xdedb, 0xde55, 0xdd8b, 0xdd25, 0xdd47, 0x5246, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3983, 0x8b65, 0xbcc8, 0xd526, 0xd526, 0xd56a, 0xd612, 0xd676, 0xd698, 0xd5f2, 0xd525, 0xd506, 0x93c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18a1, 0xc462, 0xd4e3, 0xd503, 0xd504, 0xd527, 0xcdd1, 0x8c0d, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbc86, 0xd505, 0xd5f1, 0xde98, 0xd6ba, 0xdeda, 0xdedb, 0xdedb, 0xdeba, 0xde55, 0xdd8c, 0xdd25, 0xdd26, 0xbd2e, 0x2943, 0x0000, 0x0000, 0x9b83, 0xdd26, 0xddcd, 0xde77, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xde33, 0xdd89, 0xdd25, 0xddad, 0x6ae9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5204, 0xbca8, 0xdd46, 0xdd48, 0xddcf, 0xdeb8, 0xdeda, 0xdedb, 0xdedb, 0xde97, 0xddee, 0xdd25, 0xdd46, 0x7b68, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a44, 0xa3e6, 0xcce5, 0xd504, 0xd547, 0xd58c, 0xd633, 0xd698, 0xd6ba, 0xd6ba, 0xd678, 0xd5d0, 0xd504, 0xd527, 0x6286, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9b82, 0xd548, 0xd58b, 0xd549, 0xd4e3, 0xd505, 0xd58c, 0xbd51, 0x5aa9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a24, 0xd526, 0xd526, 0xde35, 0xdeba, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeb9, 0xde34, 0xdd6a, 0xdd25, 0xdd26, 0xacac, 0x1081, 0x6aa3, 0xd504, 0xdd48, 0xde76, 0xdeda, 0xdedb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdeda, 0xde97, 0xddcf, 0xdd25, 0xdd47, 0xb4ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b25, 0xd507, 0xdd24, 0xdd8a, 0xde32, 0xdeb9, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xde97, 0xddef, 0xdd46, 0xdd46, 0x9c2b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2922, 0x7b26, 0xbc86, 0xd525, 0xdd04, 0xd546, 0xddd0, 0xde55, 0xd699, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd634, 0xd58c, 0xd504, 0xc4e9, 0x20c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a62, 0xd527, 0xd5d0, 0xd656, 0xd5ad, 0xd527, 0xd505, 0xd527, 0xd5b0, 0x944d, 0x2924, 0x0000, 0x0000, 0x0000, 0x0000, 0x9384, 0xd525, 0xd58a, 0xde56, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeb9, 0xde55, 0xdd48, 0xdd24, 0xdd24, 0xa3c3, 0xc4a4, 0xdd48, 0xde10, 0xdeb9, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xde54, 0xdd68, 0xdd26, 0xdd8a, 0x5a87, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2922, 0xa407, 0xdd26, 0xdd45, 0xddab, 0xde55, 0xdeda, 0xdedb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xdeb8, 0xde32, 0xdd46, 0xdd25, 0xb4cb, 0x0000, 0x0000, 0x0000, 0x5224, 0x9be7, 0xcce7, 0xdd04, 0xdd47, 0xdd8b, 0xde11, 0xde97, 0xdeba, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xd6b9, 0xd612, 0xd569, 0xd504, 0xa3e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20e1, 0xc4c5, 0xd5af, 0xd698, 0xd698, 0xd634, 0xd58c, 0xd525, 0xd526, 0xd56a, 0xbd70, 0x62e9, 0x0000, 0x0000, 0x0000, 0xbc85, 0xd526, 0xddf0, 0xde98, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeb9, 0xde32, 0xdd48, 0xdd25, 0xdd24, 0xdd46, 0xddcd, 0xdeb8, 0xdeda, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xde97, 0xddee, 0xdd46, 0xdd46, 0xacad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5224, 0xc4e9, 0xdd25, 0xdd47, 0xde10, 0xde97, 0xdeda, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xde75, 0xdd68, 0xdd25, 0xcd29, 0x3142, 0x7306, 0xb467, 0xd527, 0xdd25, 0xdd48, 0xddce, 0xde54, 0xde98, 0xdeba, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xde98, 0xd5d0, 0xd546, 0xd526, 0x7305, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c2, 0x39a5, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa3e4, 0xd56b, 0xd655, 0xd6ba, 0xd6ba, 0xd698, 0xd5f1, 0xd549, 0xd504, 0xd525, 0xd5ad, 0x9c6d, 0x3163, 0x5a23, 0xd525, 0xdd47, 0xde55, 0xdeb9, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeb9, 0xde32, 0xddce, 0xddcd, 0xde11, 0xde97, 0xdeda, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xded9, 0xde54, 0xdd47, 0xdd46, 0xddcd, 0x5246, 0x0000, 0x0000, 0x0000, 0x0000, 0x8347, 0xd527, 0xdd46, 0xdd8a, 0xde32, 0xded9, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xde97, 0xddab, 0xdd46, 0xdd24, 0xcd06, 0xdd46, 0xdd46, 0xdd8b, 0xddcd, 0xde76, 0xdeb9, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xd654, 0xd58b, 0xd525, 0xcd4a, 0x3163, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3143, 0x5a65, 0x7b27, 0x9bc7, 0xac46, 0xc4a5, 0x93e8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72a2, 0xd548, 0xd5f1, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6b9, 0xd656, 0xd5ae, 0xd525, 0xd504, 0xdd47, 0xc4c6, 0xb444, 0xdd26, 0xdd8a, 0xde97, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefa, 0xde97, 0xddab, 0xdd46, 0xdd67, 0xa48d, 0x0000, 0x0000, 0x3163, 0xac27, 0xdd68, 0xdd45, 0xddcd, 0xde75, 0xdeda, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xde97, 0xddcd, 0xdd47, 0xdd24, 0xdd67, 0xddac, 0xde12, 0xde76, 0xdeda, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xde12, 0xd569, 0xd526, 0xb468, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2103, 0x4a26, 0x7307, 0x93a6, 0xa426, 0xbca7, 0xd506, 0xd4e3, 0xd4e2, 0xd4e2, 0xd4e3, 0xb445, 0x18a1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3141, 0xcce5, 0xd5ad, 0xd6b9, 0xd6ba, 0xd6ba, 0xd6ba, 0xdeba, 0xde99, 0xd654, 0xd56a, 0xd525, 0xdd03, 0xdd03, 0xdd48, 0xddef, 0xdeb8, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xded9, 0xde52, 0xdd68, 0xdd45, 0xd5af, 0x4a05, 0x5a65, 0xc4e7, 0xdd46, 0xdd68, 0xddef, 0xde96, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xde76, 0xddef, 0xde31, 0xdeb8, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xddce, 0xdd25, 0xd547, 0x8366, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39a4, 0x62c7, 0x8388, 0x9c29, 0xb487, 0xccc5, 0xd507, 0xd504, 0xd504, 0xd505, 0xd527, 0xd528, 0xd548, 0xd505, 0xd4e2, 0xc4c6, 0x4182, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xabe2, 0xd56b, 0xd678, 0xd6ba, 0xdeba, 0xd6ba, 0xdeda, 0xdeda, 0xdeba, 0xde98, 0xd5f0, 0xddad, 0xdd8c, 0xddcf, 0xde97, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xded9, 0xddab, 0xdd45, 0xdd68, 0xc4a7, 0xd548, 0xdd46, 0xdd89, 0xde32, 0xe6d9, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xdeda, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xde98, 0xdd8c, 0xdd04, 0xd56b, 0x4a04, 0x0000, 0x2944, 0x5a87, 0x7b48, 0x93e7, 0xac68, 0xc4ea, 0xd56a, 0xd527, 0xd525, 0xd505, 0xd526, 0xd549, 0xd58c, 0xd5d0, 0xd5f3, 0xd635, 0xd656, 0xd655, 0xd58c, 0xd506, 0xccc4, 0x6264, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7ae2, 0xd549, 0xd634, 0xd6b9, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeda, 0xdeda, 0xdeb9, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe6fa, 0xde31, 0xdd89, 0xe546, 0xdd45, 0xe567, 0xddaa, 0xe696, 0xe6fa, 0xe71b, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeba, 0xde54, 0xdd6b, 0xdd03, 0xcd08, 0xa448, 0xbcc9, 0xd528, 0xd526, 0xd525, 0xd505, 0xd505, 0xd526, 0xd528, 0xd56a, 0xd5ce, 0xd633, 0xd677, 0xd699, 0xd699, 0xd6ba, 0xd6ba, 0xd6ba, 0xd677, 0xd5cf, 0xd506, 0xd505, 0x8345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a48, 0xa48c, 0x940a, 0x734a, 0x4207, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3961, 0xd506, 0xd5cf, 0xde98, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xad75, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x8430, 0x94b2, 0xb5b6, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71b, 0xe6d9, 0xe653, 0xe5ed, 0xe5cc, 0xe631, 0xe6b8, 0xe6fb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdeda, 0xdeb9, 0xde10, 0xdd49, 0xdd03, 0xdd03, 0xdd04, 0xdd27, 0xd547, 0xd569, 0xd5ae, 0xddf1, 0xd634, 0xd676, 0xd698, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd678, 0xd5f1, 0xd506, 0xd504, 0xa427, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a43, 0xc4a5, 0xd505, 0xd56c, 0xbd2d, 0xa4ae, 0x83cc, 0x5ac8, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb446, 0xddab, 0xde97, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0x8430, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x39e7, 0x4208, 0x738e, 0xa534, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71b, 0xe71b, 0xe71b, 0xe71b, 0xe71b, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdeda, 0xde75, 0xddce, 0xddcd, 0xde11, 0xde54, 0xde55, 0xde77, 0xdeba, 0xdeba, 0xdeba, 0xdeba, 0xdeba, 0xdeba, 0xdeba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd699, 0xd5f2, 0xd547, 0xd504, 0xbc85, 0x2922, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a21, 0xc482, 0xd4e3, 0xd504, 0xd505, 0xd527, 0xd56b, 0xcd90, 0xb4cd, 0x942c, 0x734b, 0x39c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x8323, 0xdd47, 0xde54, 0xdeb9, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0x5aeb, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0xb5b6, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdeda, 0xdeda, 0xdeba, 0xdeda, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd613, 0xd56a, 0xd505, 0xcd08, 0x5204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a21, 0xc4a3, 0xd526, 0xd569, 0xd526, 0xd505, 0xd505, 0xd504, 0xd525, 0xd548, 0xd5ae, 0xbd4e, 0xa48e, 0x838a, 0x5a45, 0x51e2, 0xd506, 0xddf0, 0xde97, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xb5b6, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0xad55, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe71c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xd6ba, 0xd6ba, 0xd6ba, 0xd6ba, 0xd655, 0xd58d, 0xd503, 0xd549, 0x72e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a21, 0xc4c6, 0xd5ae, 0xd677, 0xd655, 0xd612, 0xd5cf, 0xd56a, 0xd525, 0xd503, 0xd503, 0xd504, 0xd526, 0xd547, 0xccc4, 0xd505, 0xddce, 0xde77, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xd6ba, 0x738e, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0xbdd7, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xd6ba, 0xdedb, 0xd6ba, 0xd677, 0xd58c, 0xd526, 0xd505, 0x93c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a21, 0xccc6, 0xd5cd, 0xd677, 0xd699, 0xd6ba, 0xd6b9, 0xd699, 0xde77, 0xd611, 0xd58b, 0xdd47, 0xdd26, 0xdd26, 0xdd69, 0xde33, 0xdeb8, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xd69a, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0xc638, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xa514, 0xbdd7, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xd6ba, 0xd6ba, 0xd698, 0xd5ad, 0xd526, 0xd505, 0xb48a, 0x18c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xccc6, 0xd5f1, 0xd677, 0xd6ba, 0xdeba, 0xd6ba, 0xdeba, 0xdeba, 0xdeb9, 0xde98, 0xde55, 0xde76, 0xde97, 0xdeb9, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xd6ba, 0x8430, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0xad55, 0xe71c, 0xe71c, 0xe71c, 0xad75, 0x4228, 0x4a49, 0x7bcf, 0xad75, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xde98, 0xd611, 0xd527, 0xd504, 0xc52b, 0x39a3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xccc5, 0xd5f1, 0xd698, 0xd6ba, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0x8430, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x7bcf, 0xe71c, 0xe71c, 0xe71c, 0x7bcf, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x8c71, 0xbdf7, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xad75, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xde98, 0xde33, 0xd547, 0xd525, 0xcd28, 0x6286, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xcce7, 0xd5f1, 0xde98, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xc638, 0xb5b6, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xb5b6, 0x9cd3, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x52aa, 0xce59, 0xe71c, 0xce59, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0xa514, 0xce79, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0x9cf3, 0x4a49, 0x4a49, 0x9cf3, 0xbdf7, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xde34, 0xdd69, 0xdd25, 0xd569, 0x8389, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xcce6, 0xd5f0, 0xdeb9, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xc638, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0xbdf7, 0xe73c, 0x8c71, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x7bef, 0xb596, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xce79, 0x4a69, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0xad55, 0x9cf3, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xde55, 0xddad, 0xdd04, 0xdd26, 0xb4cb, 0x3185, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xcd09, 0xde11, 0xdeb9, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xbdd7, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x9cf3, 0xce59, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x528a, 0x528a, 0x528a, 0xb5b6, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x7bef, 0x4a69, 0x4a69, 0x632c, 0x4a49, 0x4a49, 0x528a, 0x4a49, 0x630c, 0x4228, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeb9, 0xddf0, 0xdd47, 0xdd04, 0xdd26, 0xd58b, 0xd5d0, 0xc56f, 0xbcee, 0xa46c, 0x940b, 0x838a, 0x6b09, 0x5247, 0x2123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b03, 0xdd47, 0xde32, 0xdeb9, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xbdd7, 0xbdd7, 0xbdd7, 0x9cd3, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x8c71, 0x9cf3, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x528a, 0x528a, 0x528a, 0x528a, 0x528a, 0x528a, 0x52aa, 0x52aa, 0xc638, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x4a69, 0x7bef, 0x4a69, 0x632c, 0x4a69, 0x630c, 0x4a49, 0x7bcf, 0x4a49, 0x8c71, 0x630c, 0x4228, 0xe71c, 0xd6ba, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdeba, 0xde75, 0xddef, 0xdd69, 0xdd26, 0xdd26, 0xdd26, 0xdd05, 0xd505, 0xd525, 0xd526, 0xd526, 0xd548, 0xd549, 0xd56c, 0xc4e8, 0xb4a9, 0xa44a, 0x93eb, 0x7b6a, 0x62c8, 0x41e5, 0x18c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5204, 0x8b86, 0xbc86, 0xd505, 0xdd26, 0xddce, 0xdeb9, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0x9492, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4a49, 0x7bcf, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x528a, 0x528a, 0x528a, 0x528a, 0x528a, 0x528a, 0x52aa, 0x52aa, 0x52aa, 0x52aa, 0xbdd7, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0x9492, 0xb596, 0xc618, 0x7bef, 0x4a69, 0x7bef, 0x4a49, 0x8c71, 0x4a49, 0x4a49, 0xad75, 0x4a49, 0x7bcf, 0x9cf3, 0x4228, 0x8c51, 0xce59, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeb9, 0xde76, 0xde54, 0xde33, 0xd611, 0xd5d0, 0xd5ae, 0xd58d, 0xd56b, 0xd549, 0xd527, 0xd525, 0xd504, 0xd4e3, 0xd4e3, 0xd504, 0xd504, 0xd506, 0xbc65, 0x4a25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a44, 0x9385, 0xbc65, 0xd527, 0xdd26, 0xdd46, 0xddad, 0xde55, 0xdeb9, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0x630c, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x528a, 0x528a, 0x528a, 0x528a, 0x52aa, 0x52aa, 0x52aa, 0x52aa, 0x52aa, 0x52aa, 0x52aa, 0x5acb, 0xad55, 0xef7d, 0xef7d, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xc638, 0xd69a, 0xef5d, 0xef5d, 0xc618, 0xc618, 0x4a69, 0x9492, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0xce79, 0x9cf3, 0x4228, 0x4228, 0x630c, 0x4228, 0x9cd3, 0xbdd7, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeda, 0xdeba, 0xdeba, 0xd6ba, 0xd6b9, 0xd699, 0xd698, 0xd678, 0xd677, 0xd656, 0xd5f2, 0xd548, 0xd504, 0xd4c2, 0x9bc4, 0x3121, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a44, 0x93a6, 0xbca6, 0xd525, 0xd526, 0xdd47, 0xdd8c, 0xde11, 0xde76, 0xdeb9, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xad55, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4228, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x528a, 0x528a, 0x528a, 0x528a, 0x52aa, 0x52aa, 0x52aa, 0x52aa, 0x5acb, 0x5acb, 0x5acb, 0x5acb, 0x5acb, 0x5acb, 0xce59, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xc638, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xd69a, 0xce59, 0xef5d, 0x9492, 0x8c71, 0x4a49, 0x4a49, 0xbdf7, 0xbdf7, 0x4228, 0x4228, 0x4228, 0x73ae, 0x4228, 0x4208, 0x73ae, 0xbdd7, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xd6ba, 0xd6ba, 0xd698, 0xd634, 0xd56a, 0xd505, 0xbc85, 0x6262, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c1, 0x5a65, 0x93a4, 0xc4a5, 0xd525, 0xd505, 0xd548, 0xd5ad, 0xd633, 0xde77, 0xdeb9, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0x8c51, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x39e7, 0x2165, 0x2185, 0x2186, 0x21c6, 0x2a07, 0x3228, 0x4228, 0x4a49, 0x4a49, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x528a, 0x528a, 0x94b2, 0x8410, 0x52aa, 0x52aa, 0x52aa, 0x5acb, 0x5acb, 0x5acb, 0x5acb, 0x5acb, 0x5acb, 0x5aeb, 0x5aeb, 0x5aeb, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xbdd7, 0x52aa, 0x52aa, 0xa534, 0xd69a, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xc618, 0x8c71, 0x7bcf, 0x4a49, 0x4228, 0x4228, 0x8c71, 0xe73c, 0x4228, 0x630c, 0x4208, 0x8c51, 0x8c51, 0xad55, 0xe71c, 0xc638, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xd6ba, 0xdeba, 0xd656, 0xd5ce, 0xd527, 0xd4e5, 0x9ba3, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c1, 0x6264, 0x9bc5, 0xc4a5, 0xd505, 0xd525, 0xd549, 0xd5ae, 0xd634, 0xde98, 0xdeba, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0x8c51, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x1904, 0x08e3, 0x0903, 0x0944, 0x0985, 0x09c6, 0x09e6, 0x09e6, 0x21e7, 0x3a08, 0x4a49, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x528a, 0x8410, 0xef7d, 0xef7d, 0xd6ba, 0xad55, 0x8430, 0x5acb, 0x5acb, 0x5acb, 0x5aeb, 0x5aeb, 0x5aeb, 0x5aeb, 0x630c, 0x5aeb, 0xbdf7, 0xf7be, 0xf7be, 0xf7be, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0x5acb, 0x52aa, 0x52aa, 0x52aa, 0x528a, 0xd69a, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x8c71, 0xbdf7, 0x8430, 0x7bcf, 0x8c71, 0x4228, 0x73ae, 0x4228, 0x630c, 0x4208, 0x9cd3, 0x4208, 0x4208, 0xce79, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xd698, 0xd612, 0xd56b, 0xd504, 0xbc85, 0x5a43, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20e1, 0x6a83, 0x9bc4, 0xc4c6, 0xd505, 0xd526, 0xd569, 0xd5cf, 0xd655, 0xd698, 0xd6b9, 0xdeba, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0x8c51, 0x4208, 0x4208, 0x4208, 0x4208, 0x2986, 0x08c3, 0x08e3, 0x0903, 0x0924, 0x0965, 0x09c6, 0x09e7, 0x09e6, 0x09c6, 0x0985, 0x31c7, 0x4a69, 0x4a69, 0x4a69, 0x4a69, 0x4228, 0xad75, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xbdf7, 0x8c51, 0x5aeb, 0x5aeb, 0x630c, 0x630c, 0x630c, 0x630c, 0x630c, 0x8c71, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf79e, 0xad75, 0x5acb, 0x5acb, 0x4228, 0x3186, 0x39c7, 0xb596, 0xdefb, 0xef5d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xbdd7, 0x9492, 0x4228, 0x4228, 0x4228, 0x4228, 0x4208, 0x4208, 0x4208, 0x4208, 0x9cd3, 0xbdf7, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeb9, 0xde55, 0xd5ad, 0xdd27, 0xd506, 0x93a5, 0x20e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3143, 0x9bc5, 0xc4c5, 0xd4e3, 0xd4e3, 0xd505, 0xd58c, 0xd633, 0xd698, 0xd6b9, 0xd6ba, 0xd6ba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xb5b6, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xad55, 0x4208, 0x4208, 0x4208, 0x4208, 0x08e3, 0x08c3, 0x08c3, 0x0903, 0x0924, 0x0965, 0x09a6, 0x09e6, 0x09e7, 0x09c6, 0x0985, 0x0924, 0x4228, 0x4a69, 0x528a, 0x39e7, 0x08c2, 0x2165, 0x632c, 0x8c92, 0xb5b6, 0xd69a, 0xef7d, 0xf7be, 0xf7be, 0x9cf3, 0x630c, 0x630c, 0x630c, 0x632c, 0x632c, 0x632c, 0x632c, 0xdefb, 0xffdf, 0xffdf, 0xffdf, 0xf7be, 0xf7be, 0xdedb, 0x5aeb, 0x5acb, 0x52aa, 0x18e3, 0x0861, 0x0861, 0x4208, 0x73ae, 0x4208, 0x9cd3, 0x9492, 0xd69a, 0xdefb, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0x7bcf, 0x9cf3, 0x8c71, 0x4228, 0x4208, 0x4208, 0x4208, 0x4208, 0x9cd3, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdeba, 0xde97, 0xde11, 0xdd47, 0xd526, 0xbc86, 0x6244, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3121, 0x6a82, 0x9b82, 0xbc63, 0xd505, 0xd58b, 0xd612, 0xd677, 0xd6b9, 0xd6ba, 0xdeba, 0xdeda, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0x738e, 0x39e7, 0xc638, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0x9cf3, 0x4208, 0x4228, 0x4228, 0x1924, 0x08c3, 0x08e3, 0x0965, 0x0985, 0x09a6, 0x09e7, 0x0a28, 0x0a28, 0x09e7, 0x09a6, 0x0945, 0x31c6, 0x528a, 0x4a49, 0x0903, 0x08c2, 0x08c2, 0x08c2, 0x0903, 0x0965, 0x0965, 0x3a69, 0x73cf, 0x9d34, 0xce79, 0x9cf3, 0x632c, 0x632c, 0x6b4d, 0x6b4d, 0x6b4d, 0x6b4d, 0xb5b6, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xa514, 0x5aeb, 0x5aeb, 0x39c7, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x10a2, 0x0861, 0x0861, 0x632c, 0x4228, 0xce59, 0x7bcf, 0xa534, 0xdefb, 0xdedb, 0xe73c, 0xe73c, 0xce79, 0x4228, 0xe73c, 0xce59, 0xbdf7, 0x8c51, 0x4208, 0x4208, 0xbdd7, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdeb8, 0xde54, 0xdd8c, 0xdd25, 0xd505, 0x93a5, 0x20e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4181, 0x7ae3, 0xa3e5, 0xc4a5, 0xd548, 0xd5cf, 0xde55, 0xde77, 0xdeb9, 0xdeba, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xbdd7, 0x39e7, 0x39e7, 0x39e7, 0x8430, 0xce59, 0xe73c, 0xe71c, 0xe73c, 0xad75, 0x4208, 0x4208, 0x4208, 0x2985, 0x08e3, 0x0985, 0x09c6, 0x0a27, 0x0a28, 0x09e7, 0x0a07, 0x0a68, 0x0aa9, 0x0a69, 0x09c6, 0x2165, 0x4a69, 0x2185, 0x08e3, 0x08c2, 0x08c2, 0x08a2, 0x0903, 0x0944, 0x0965, 0x0965, 0x0965, 0x0985, 0x0985, 0x2a28, 0x3a28, 0x52cb, 0x6b4d, 0x6b4d, 0x6b6d, 0x6b6d, 0xad55, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xe71c, 0x630c, 0x630c, 0x52aa, 0x2104, 0x3186, 0x0861, 0x0861, 0x31a6, 0x0861, 0x6b4d, 0x0861, 0x39c7, 0x4a49, 0x6b4d, 0xad55, 0x0861, 0x0861, 0x4a69, 0x0861, 0x8c51, 0x7bcf, 0xbdd7, 0xc618, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xbdf7, 0xce59, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdeda, 0xde97, 0xddcf, 0xdd46, 0xdd26, 0xbc86, 0x5a43, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18a1, 0x5202, 0x8b43, 0xac25, 0xcd07, 0xdd8c, 0xddf0, 0xde54, 0xde98, 0xdeda, 0xdeda, 0xdedb, 0xdedb, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0x8430, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x8c51, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x31c7, 0x0944, 0x09a6, 0x09a5, 0x09e7, 0x0a27, 0x0a68, 0x0a28, 0x0a07, 0x0a28, 0x0a89, 0x0a89, 0x09c6, 0x31e7, 0x0903, 0x08e3, 0x08c2, 0x08e3, 0x08c2, 0x08c3, 0x0944, 0x0965, 0x0965, 0x0965, 0x0985, 0x0985, 0x09a6, 0x0985, 0x0965, 0x3a28, 0x632c, 0x738e, 0x738e, 0x738e, 0xffff, 0xffff, 0xffff, 0xffff, 0x9492, 0x632c, 0x630c, 0x5acb, 0x39e7, 0x5acb, 0xc638, 0xc618, 0xbdd7, 0x39e7, 0x7bcf, 0x0861, 0x4208, 0x0861, 0x6b4d, 0x8c51, 0x0861, 0x2945, 0x2945, 0x8430, 0x10a2, 0x10a2, 0x10a2, 0x94b2, 0x738e, 0xdedb, 0xad75, 0xb5b6, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdeb9, 0xde32, 0xdd8a, 0xdd47, 0xd506, 0x8b86, 0x20c1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20e1, 0x6262, 0x9384, 0xb465, 0xd548, 0xddce, 0xde33, 0xde76, 0xdeb9, 0xdeda, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4208, 0x31e7, 0x2186, 0x52ca, 0x634d, 0x1144, 0x09a6, 0x0a48, 0x0a89, 0x0a68, 0x0a48, 0x0a68, 0x0a48, 0x0965, 0x0924, 0x08e3, 0x0924, 0x0965, 0x0944, 0x0924, 0x0965, 0x09a6, 0x0985, 0x0965, 0x0965, 0x0985, 0x09a6, 0x0985, 0x0965, 0x0965, 0x1985, 0x632c, 0x73ae, 0x738e, 0xdedb, 0xffff, 0xffff, 0xb596, 0x6b4d, 0x632c, 0x4208, 0x2124, 0x31a6, 0x7bef, 0xe73c, 0xf7be, 0xef5d, 0xc618, 0x528a, 0x4228, 0x73ae, 0x7bcf, 0x8c71, 0x10a2, 0x4a49, 0x94b2, 0x3186, 0x7bcf, 0x2945, 0x4a49, 0x0861, 0x2104, 0x2945, 0x8c51, 0x0861, 0x39c7, 0xdefb, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xde76, 0xdd8a, 0xdd46, 0xdd25, 0xd56b, 0xac8d, 0x6b09, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3961, 0x72c3, 0x9bc4, 0xcce6, 0xddab, 0xde33, 0xdeda, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0x8c51, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x3186, 0x0903, 0x0924, 0x0903, 0x08e3, 0x0944, 0x0965, 0x0a68, 0x0aca, 0x0aca, 0x0aa9, 0x0a89, 0x09c6, 0x0924, 0x0903, 0x0985, 0x09c6, 0x09e7, 0x09e6, 0x09a6, 0x09c6, 0x0a27, 0x0a07, 0x09e7, 0x09e7, 0x09e6, 0x09a6, 0x0985, 0x0965, 0x0944, 0x2165, 0x6b6d, 0x7bcf, 0xffff, 0xffff, 0xffff, 0x6b6d, 0x6b4d, 0x5acb, 0x0861, 0x0861, 0x0861, 0x0861, 0xb596, 0xf7be, 0xf7be, 0xf7be, 0x7bef, 0x528a, 0x528a, 0x8410, 0xef7d, 0xdedb, 0xe73c, 0xdedb, 0x7bcf, 0x738e, 0x39c7, 0x2104, 0x0861, 0x10a2, 0x528a, 0x2104, 0x0861, 0x94b2, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xde75, 0xddcd, 0xdd47, 0xdd25, 0xdd47, 0xddce, 0xc56f, 0x8c2d, 0x4207, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4181, 0xbc85, 0xdd68, 0xde11, 0xdeda, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0x8c51, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x39e7, 0x08e3, 0x08e3, 0x0944, 0x0903, 0x08e3, 0x0924, 0x0965, 0x0a48, 0x0aa9, 0x0aea, 0x0b0b, 0x0aca, 0x09c6, 0x0924, 0x0985, 0x0944, 0x0965, 0x09e7, 0x09e7, 0x09e7, 0x09e7, 0x09e7, 0x09e7, 0x0a48, 0x0a89, 0x0aa9, 0x0a89, 0x0a28, 0x09c6, 0x0945, 0x0904, 0x5acb, 0x7bef, 0xc638, 0xe71c, 0xce79, 0x738e, 0x6b4d, 0x2945, 0x0861, 0x0861, 0x0861, 0x0861, 0xa514, 0xf7be, 0xf7be, 0xf7be, 0xbdd7, 0x528a, 0x528a, 0x528a, 0xd6ba, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xce59, 0x8c51, 0x94b2, 0xa534, 0xad75, 0x9cd3, 0x4a49, 0x39c7, 0xc638, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xde97, 0xddef, 0xdd69, 0xdd46, 0xdd25, 0xdd47, 0xd5af, 0xacce, 0x6b2a, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41a1, 0xc4a6, 0xdd47, 0xde11, 0xdeb8, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0x8c51, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x31a6, 0x08c2, 0x08c2, 0x0924, 0x0904, 0x08e3, 0x0904, 0x09e6, 0x0a48, 0x0a89, 0x0aaa, 0x0aca, 0x0a89, 0x0924, 0x0985, 0x09e7, 0x0985, 0x0944, 0x0944, 0x0985, 0x638d, 0x4aeb, 0x09c6, 0x09c6, 0x09e7, 0x0a48, 0x0aa9, 0x0aca, 0x0aaa, 0x0a89, 0x0a28, 0x0965, 0x3a08, 0x8410, 0x7bef, 0x7bcf, 0x7bcf, 0x738e, 0x4a49, 0x0861, 0x0861, 0x0861, 0x0861, 0x4a49, 0xef5d, 0xffdf, 0xf7be, 0xf7be, 0xdefb, 0x52aa, 0x528a, 0x528a, 0xbdd7, 0xf79e, 0xef7d, 0xef7d, 0xd69a, 0xa514, 0x4208, 0x94b2, 0xd69a, 0xef5d, 0xef5d, 0xce79, 0xd69a, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdeda, 0xde98, 0xde54, 0xddce, 0xdd48, 0xdd25, 0xdd48, 0xdd8c, 0xc570, 0x942d, 0x4a27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49c2, 0xc4a5, 0xdd46, 0xddf0, 0xdeb7, 0xdeda, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0x8c51, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x39e7, 0x08c2, 0x08c2, 0x0944, 0x0924, 0x0924, 0x0944, 0x0985, 0x09e7, 0x0a28, 0x0a68, 0x0a69, 0x09a5, 0x0944, 0x0985, 0x0985, 0x0985, 0x0965, 0x0965, 0x73cf, 0xffdf, 0xffdf, 0xa534, 0x52cb, 0x3a69, 0x19e7, 0x0a27, 0x0a69, 0x0aa9, 0x0a89, 0x0a89, 0x0a68, 0x1985, 0x7bef, 0x8410, 0x7bef, 0x7bcf, 0x632c, 0x1082, 0x0861, 0x0861, 0x0861, 0x0861, 0xc618, 0xffdf, 0xdedb, 0x9492, 0xb5b6, 0xd6ba, 0x94b2, 0x528a, 0x528a, 0x8410, 0xf79e, 0xc638, 0x9492, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4228, 0x5aeb, 0x8c71, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdeda, 0xde97, 0xddf0, 0xdd6a, 0xdd26, 0xdd26, 0xdd47, 0xd58d, 0xaccd, 0x732a, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49e2, 0xc4c5, 0xdd46, 0xddef, 0xde98, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xad75, 0x8c51, 0x4208, 0x4208, 0x4208, 0x31a6, 0x31c7, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x10e3, 0x0924, 0x0965, 0x0944, 0x0944, 0x0944, 0x0924, 0x0944, 0x0985, 0x09a6, 0x0944, 0x08e3, 0x09c6, 0x09a6, 0x0965, 0x0965, 0x0965, 0x21e7, 0xb5b6, 0xa514, 0x632c, 0x632c, 0x6b4d, 0x6b6d, 0x6b6d, 0x428a, 0x0a48, 0x0a89, 0x0a89, 0x0a68, 0x0a27, 0x09c6, 0x73ae, 0x8430, 0x7bef, 0x7bcf, 0x3186, 0x0861, 0x0861, 0x0861, 0x0861, 0x3186, 0xc618, 0xffff, 0xef7d, 0x2124, 0x0861, 0x0861, 0x4228, 0x4a69, 0x528a, 0x528a, 0x8410, 0x4a69, 0x4a69, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4a49, 0x4228, 0x4228, 0xb596, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xde98, 0xde34, 0xddcf, 0xdd47, 0xdd04, 0xd525, 0xd569, 0xc54e, 0x940b, 0x4a27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5203, 0xccc5, 0xdd68, 0xde10, 0xdeb9, 0xdedb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xbdf7, 0x9cf3, 0x6b4d, 0x08e3, 0x08e3, 0x2165, 0x31c7, 0x39e7, 0x3a07, 0x7bef, 0x4249, 0x0985, 0x09c6, 0x09a6, 0x0965, 0x0985, 0x1185, 0x1965, 0x0903, 0x08e3, 0x08a2, 0x0924, 0x09c6, 0x09a6, 0x0985, 0x0985, 0x09a6, 0x3a49, 0x5aeb, 0x630c, 0x632c, 0x6b4d, 0x6b4d, 0x6b6d, 0x738e, 0x3208, 0x09e7, 0x0a89, 0x0a89, 0x0a48, 0x09c6, 0x0944, 0xad96, 0x9cd3, 0x8410, 0x52aa, 0x0861, 0x0861, 0x0861, 0x0861, 0x18c3, 0x5aeb, 0x630c, 0xffff, 0xffff, 0x9cd3, 0x0861, 0x0861, 0x0861, 0x39c7, 0x528a, 0x528a, 0x4a69, 0x4a69, 0x4a49, 0x39c7, 0x39e7, 0x4228, 0x4a49, 0x4228, 0x7bcf, 0xad55, 0xd69a, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdedb, 0xdedb, 0xdeda, 0xdeba, 0xde98, 0xde11, 0xdd6a, 0xd504, 0xd504, 0xd505, 0xd549, 0xb445, 0x7305, 0x2102, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a22, 0xcce6, 0xdd69, 0xde10, 0xded9, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0x634d, 0x08c2, 0x08e3, 0x0903, 0x0924, 0x0944, 0x0944, 0x0924, 0x08e3, 0x0944, 0x09a6, 0x09a6, 0x0985, 0x0965, 0x31c7, 0x29a6, 0x08e3, 0x08e3, 0x08c2, 0x0944, 0x0985, 0x0985, 0x0965, 0x0944, 0x21c6, 0x5acb, 0x5aeb, 0x630c, 0x632c, 0x6b4d, 0x6b4d, 0x6b6d, 0x4aaa, 0x0944, 0x0985, 0x0a69, 0x0a68, 0x0a28, 0x09a6, 0x0965, 0x3a69, 0x4228, 0x528a, 0x10a2, 0x0861, 0x0861, 0x0861, 0x0861, 0x4a69, 0x632c, 0x630c, 0xffff, 0xffff, 0xc638, 0x31a6, 0x0861, 0x0861, 0x10a2, 0x4a69, 0x4a69, 0x4208, 0x2965, 0x10a2, 0x0861, 0x0861, 0x1082, 0x39e7, 0x7bcf, 0xdefb, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdedb, 0xdeda, 0xdeda, 0xdeb9, 0xde97, 0xde54, 0xde12, 0xddcf, 0xdd6a, 0xdd25, 0xd504, 0xc4a4, 0xac04, 0x8b64, 0x6aa4, 0x2943, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a42, 0xccc5, 0xdd68, 0xde10, 0xdeb9, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xef5d, 0xe71c, 0x3a28, 0x08a2, 0x08e3, 0x08e3, 0x0924, 0x0944, 0x0965, 0x0944, 0x08e3, 0x08e3, 0x0965, 0x09a6, 0x09a6, 0x0985, 0x1185, 0x0924, 0x08e3, 0x08e3, 0x0924, 0x0924, 0x0944, 0x0965, 0x09a6, 0x11a6, 0x4a8a, 0x5aeb, 0x5aeb, 0x630c, 0x632c, 0x632c, 0x634d, 0x4289, 0x09a6, 0x0965, 0x0985, 0x0a89, 0x0a89, 0x0a27, 0x09c6, 0x0944, 0x0903, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x31a6, 0x9cf3, 0x630c, 0xa534, 0xb5b6, 0x5aeb, 0x5acb, 0x4228, 0x0861, 0x0861, 0x0861, 0x2945, 0x18e3, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0xb596, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdeda, 0xdeda, 0xdeb8, 0xde54, 0xddee, 0xdd69, 0xdd46, 0xdd26, 0xcce6, 0xb444, 0x9b83, 0x72c2, 0x49c2, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6242, 0xcce5, 0xdd68, 0xde32, 0xdeb9, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0x7bef, 0x08a2, 0x0924, 0x0903, 0x0924, 0x0944, 0x0944, 0x0944, 0x0903, 0x08e3, 0x0985, 0x09c6, 0x0985, 0x0965, 0x0965, 0x0924, 0x0903, 0x0924, 0x09a6, 0x09a6, 0x0965, 0x0944, 0x0965, 0x3a28, 0x5acb, 0x5aeb, 0x5aeb, 0x630c, 0x630c, 0x52aa, 0x2a28, 0x09a6, 0x09a6, 0x0985, 0x09c6, 0x0aa9, 0x0aa9, 0x0a68, 0x09e7, 0x0965, 0x08c3, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x39c7, 0x630c, 0x5aeb, 0x5aeb, 0x5acb, 0x528a, 0x18e3, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x4a49, 0x9492, 0xd6ba, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe6fb, 0xded9, 0xde96, 0xde53, 0xde10, 0xddac, 0xdd68, 0xdd45, 0xd505, 0xbc64, 0xa3c4, 0x8303, 0x5a22, 0x20c1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a62, 0xd4e6, 0xdd68, 0xde32, 0xdeb8, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xa555, 0x08a2, 0x0944, 0x0944, 0x0965, 0x0944, 0x0965, 0x0965, 0x0924, 0x0924, 0x0985, 0x0965, 0x0924, 0x0944, 0x0965, 0x0944, 0x0924, 0x0985, 0x09c6, 0x09c6, 0x09e7, 0x09a6, 0x0965, 0x21a6, 0x31e7, 0x3a28, 0x3269, 0x3248, 0x11a6, 0x0985, 0x09e6, 0x09a6, 0x0985, 0x09a6, 0x09e6, 0x0a48, 0x0a89, 0x0a68, 0x0a07, 0x3269, 0x7c10, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x5acb, 0x52aa, 0x4208, 0x2945, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x4a69, 0x94b2, 0xce59, 0xef7d, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71b, 0xe6fb, 0xe6d9, 0xe674, 0xe630, 0xe5aa, 0xdd68, 0xdd47, 0xdd47, 0xccc6, 0xac25, 0x8b64, 0x6284, 0x3142, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6aa3, 0xd505, 0xdd48, 0xde54, 0xdeb9, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xce79, 0x0944, 0x0965, 0x0985, 0x0985, 0x0985, 0x0985, 0x09a6, 0x09a6, 0x0985, 0x0985, 0x0965, 0x0945, 0x0985, 0x0985, 0x0965, 0x09a6, 0x0a07, 0x0a07, 0x09e7, 0x09e7, 0x09e7, 0x0985, 0x0924, 0x0944, 0x0985, 0x0a07, 0x09e7, 0x0985, 0x0965, 0x09c6, 0x09c6, 0x0985, 0x0a27, 0x0a48, 0x0a28, 0x0a48, 0x0a48, 0x0a28, 0xa555, 0xb5b6, 0x0861, 0x0861, 0x0861, 0x0861, 0x2104, 0x2124, 0x0861, 0x0861, 0x2945, 0x4228, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x10a2, 0x3186, 0xb5b6, 0xf79e, 0xf7be, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71b, 0xe6f9, 0xe631, 0xe5cc, 0xe568, 0xe568, 0xd507, 0xb466, 0x93a5, 0x72a3, 0x4182, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72c3, 0xd505, 0xdd69, 0xde33, 0xdeb9, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xb5b6, 0x52eb, 0x09a6, 0x0985, 0x0944, 0x0924, 0x0944, 0x0985, 0x0965, 0x0965, 0x0944, 0x636d, 0x532c, 0x0985, 0x09c6, 0x0a28, 0x0a27, 0x0a28, 0x0a07, 0x0a07, 0x09c6, 0x0965, 0x0944, 0x0944, 0x0965, 0x09e6, 0x0a07, 0x09a6, 0x0965, 0x09c6, 0x09e7, 0x09c6, 0x0a48, 0x0a89, 0x0aca, 0x0aa9, 0x0a69, 0x6c0f, 0xf7be, 0xc618, 0x0861, 0x0861, 0x0861, 0x1082, 0x5acb, 0x6b4d, 0x4228, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x18c3, 0x0861, 0x0861, 0x2104, 0x4a49, 0xad55, 0xf7be, 0xf7be, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71b, 0xe6d8, 0xe5ec, 0xe589, 0xe566, 0x9be6, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72c3, 0xd4e4, 0xdd6a, 0xde32, 0xdeb9, 0xdeda, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe71c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xe73c, 0xc659, 0x9d13, 0x73ef, 0x4aca, 0x4289, 0x428a, 0x5b4d, 0x8c92, 0xc638, 0xf79e, 0x9d14, 0x0985, 0x0a69, 0x0a89, 0x0a28, 0x0a07, 0x0a07, 0x0a28, 0x09e7, 0x0985, 0x0944, 0x0924, 0x0944, 0x09c6, 0x0a07, 0x09c6, 0x0965, 0x09a6, 0x0a27, 0x0a28, 0x0a48, 0x0a69, 0x0aca, 0x0aea, 0x53ef, 0xef7d, 0xffff, 0xe73c, 0x18c3, 0x0861, 0x0861, 0x0861, 0x18c3, 0x2965, 0x39c7, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x2124, 0x7bef, 0xc638, 0xc618, 0x0861, 0x0861, 0x0861, 0x39c7, 0x8410, 0xf7be, 0xf7be, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe6f9, 0xe5ee, 0xe567, 0xdd68, 0x8326, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7ae3, 0xd505, 0xdd04, 0xdd26, 0xdd48, 0xdd69, 0xdd6a, 0xdd8b, 0xdd8b, 0xddab, 0xddab, 0xddcc, 0xddee, 0xddee, 0xde0f, 0xe60f, 0xe630, 0xe674, 0xe6b7, 0xe6d7, 0xe6d8, 0xe6d7, 0xe6f9, 0xe71b, 0xe73c, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xc659, 0x0a07, 0x0a89, 0x0a89, 0x0a28, 0x09c6, 0x09c6, 0x0a07, 0x0a48, 0x0a27, 0x09c6, 0x0985, 0x0985, 0x09c6, 0x0a27, 0x09e6, 0x09a5, 0x09a6, 0x09c6, 0x0a07, 0x0a48, 0x0a68, 0x0a89, 0x7491, 0xef7d, 0xffff, 0xffff, 0xffff, 0x9492, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x5aeb, 0xad55, 0xb5b6, 0x9492, 0x630c, 0x52aa, 0xad55, 0xe73c, 0xffff, 0xffff, 0xffdf, 0x5acb, 0x0861, 0x0861, 0x10a2, 0x4228, 0xce59, 0x9cf3, 0x632c, 0x9492, 0xd6ba, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe71b, 0xe6d8, 0xe60f, 0xe588, 0xdd69, 0x7b06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3961, 0x49c2, 0x5202, 0x5a22, 0x6a62, 0x6aa3, 0x7ae3, 0x8303, 0x8b44, 0x8b64, 0x93a4, 0x9bc5, 0xa3e5, 0xac25, 0xb446, 0xb466, 0xbca6, 0xc4c7, 0xcce7, 0xcd08, 0xd528, 0xdd68, 0xe5cc, 0xe693, 0xe71b, 0xef3c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xef7d, 0xadd7, 0x84d2, 0x536d, 0x1a68, 0x0a07, 0x09c6, 0x09e6, 0x0a28, 0x0a48, 0x0a48, 0x09e7, 0x0985, 0x0965, 0x0985, 0x09a6, 0x0985, 0x0944, 0x0924, 0x0965, 0x09a6, 0x3aeb, 0xb5d7, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7be, 0xad55, 0x39e7, 0x0861, 0x0861, 0x0861, 0x52aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb5b6, 0x0861, 0x0861, 0x0861, 0x630c, 0x9cd3, 0x3186, 0x2124, 0x31a6, 0xa534, 0xf79e, 0xf79e, 0xf79e, 0xef7d, 0xf79e, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71b, 0xe6b6, 0xe60f, 0xe567, 0xdd6a, 0x72e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0xbc86, 0xe60f, 0xe6b6, 0xe73b, 0xef3c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xe75d, 0xce79, 0xa575, 0x7c71, 0x434c, 0x0a89, 0x0a68, 0x0a28, 0x09c6, 0x0944, 0x0924, 0x0965, 0x0965, 0x0944, 0x21c6, 0x634c, 0xb5b6, 0xf79e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79e, 0xce79, 0x9cf3, 0x7bcf, 0x5acb, 0xf79e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef7d, 0x9cf3, 0x73ae, 0x39e7, 0x630c, 0xb596, 0x0861, 0x0861, 0x39e7, 0xce59, 0xf79e, 0xf79e, 0xf79e, 0xf79d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe696, 0xe5ec, 0xe568, 0xdd48, 0x6ae6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20c1, 0xb446, 0xe5aa, 0xe651, 0xe71b, 0xef3c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xe73c, 0xce9a, 0xb5f7, 0x9d34, 0x94b2, 0x94b2, 0x9d34, 0xad75, 0xc659, 0xef5d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79e, 0xdefb, 0xe71c, 0x94b2, 0x9cf3, 0xad55, 0xf7be, 0xf7be, 0xf79e, 0xf77c, 0xf739, 0xf6f6, 0xef39, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71b, 0xe6b6, 0xe5cc, 0xe568, 0xd548, 0x62a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa3e5, 0xe5a9, 0xe630, 0xe6f9, 0xef3c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf79e, 0xf738, 0xf671, 0xf62e, 0xf64f, 0xf64f, 0xee91, 0xeed6, 0xef3a, 0xef5c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71b, 0xe6b7, 0xe5ab, 0xe567, 0xd549, 0x6285, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8b65, 0xe588, 0xe631, 0xe6f8, 0xef3c, 0xef3c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xf7be, 0xf7be, 0xf79d, 0xf738, 0xf670, 0xf5ea, 0xf5eb, 0xf62c, 0xee0b, 0xedeb, 0xee0c, 0xee71, 0xeeb5, 0xeef8, 0xef19, 0xef3b, 0xef3c, 0xef3c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71b, 0xe695, 0xe5cc, 0xe568, 0xd549, 0x6264, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b05, 0xe568, 0xe60f, 0xe6d7, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xef7d, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xf7be, 0xf7be, 0xf7be, 0xf738, 0xf670, 0xf5eb, 0xd54b, 0x8bca, 0xb4ce, 0xcd6e, 0xe60d, 0xedeb, 0xedca, 0xedeb, 0xedec, 0xee2e, 0xee73, 0xeed7, 0xef1a, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe73c, 0xe71c, 0xe71b, 0xe695, 0xe5cd, 0xe546, 0xd54b, 0x5a45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6aa3, 0xdd48, 0xe5ed, 0xe6d7, 0xe73b, 0xe73c, 0xef5d, 0xef5d, 0xef5d, 0xef3b, 0xef19, 0xeef8, 0xeeb4, 0xee71, 0xee70, 0xeed5, 0xf75a, 0xf79e, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffd, 0xff12, 0xfed0, 0xff34, 0xffbb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xf7be, 0xf7be, 0xf759, 0xf691, 0xf5eb, 0xcd2c, 0x0000, 0x0000, 0x0000, 0x2924, 0x62e9, 0x93ea, 0xb48a, 0xcd2b, 0xe5cc, 0xedca, 0xeda9, 0xedca, 0xe60e, 0xe674, 0xe6b6, 0xe6d8, 0xe6f9, 0xe6fa, 0xe71b, 0xe71c, 0xe71b, 0xe674, 0xe5ab, 0xe567, 0xcd29, 0x5224, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5a23, 0xdd48, 0xe5cb, 0xe6b7, 0xe73b, 0xef3c, 0xef3c, 0xef3b, 0xef19, 0xeeb4, 0xee50, 0xedec, 0xedca, 0xdd69, 0xcd29, 0xedea, 0xee2d, 0xf718, 0xf79e, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffc, 0xff76, 0xff76, 0xfffd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffba, 0xfed0, 0xfeae, 0xfe8e, 0xfed1, 0xff57, 0xffdd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffde, 0xf7be, 0xf79c, 0xf6b3, 0xf60b, 0xdd8c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3163, 0x6ac7, 0x93c9, 0xb48a, 0xcd2a, 0xe58a, 0xe5aa, 0xe5cb, 0xe5cc, 0xe5cd, 0xe60f, 0xe673, 0xe6b7, 0xe6d8, 0xe653, 0xe5aa, 0xe567, 0xcd08, 0x5205, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49e2, 0xcd08, 0xe5cc, 0xe6b5, 0xe71a, 0xe71b, 0xe6f9, 0xeeb5, 0xee30, 0xedcb, 0xedca, 0xd54a, 0xac27, 0x72c5, 0x20c1, 0xa407, 0xedeb, 0xf670, 0xf719, 0xf79e, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffd, 0xff77, 0xfecf, 0xfecf, 0xff33, 0xfffc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xff76, 0xfed0, 0xbceb, 0xc50b, 0xfe8f, 0xfeaf, 0xff13, 0xffbc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xf7be, 0xf7be, 0xf6d5, 0xf60b, 0xe5ed, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3984, 0x6ac6, 0x93a7, 0xac47, 0xcce8, 0xe589, 0xe588, 0xe588, 0xe5aa, 0xe5ed, 0xe5cd, 0xe567, 0xe547, 0xcd09, 0x49e4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3962, 0xc4a6, 0xe5cb, 0xe672, 0xe6f9, 0xe673, 0xe60f, 0xe5cb, 0xeda9, 0xcd08, 0x9be6, 0x6284, 0x1081, 0x0000, 0x0000, 0x0000, 0xbcc9, 0xedeb, 0xf6b3, 0xf75a, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffdf, 0xffdf, 0xffde, 0xffde, 0xffde, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xff77, 0xfef1, 0xfed0, 0xfecf, 0xfecf, 0xff54, 0xfffc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xff55, 0xfed0, 0x7b69, 0x0000, 0x8389, 0xee2e, 0xfeaf, 0xfed1, 0xff78, 0xffdd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffbe, 0xf6f5, 0xf62c, 0xee2e, 0x3163, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3162, 0x6aa5, 0x93a6, 0xac46, 0xccc6, 0xdd47, 0xe567, 0xdd46, 0xe546, 0xcd09, 0x41c4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0xbc86, 0xe587, 0xe5aa, 0xe5ec, 0xe5a9, 0xe568, 0xc4c7, 0x93a6, 0x5a24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdd6a, 0xf60c, 0xf6f7, 0xf77c, 0xf79e, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffde, 0xffde, 0xffbd, 0xff16, 0xfed2, 0xfef3, 0xff79, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffb9, 0xff32, 0xff12, 0xaced, 0xacec, 0xff11, 0xfed0, 0xff75, 0xfffc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffd, 0xff54, 0xfeb0, 0x41e5, 0x0000, 0x0000, 0x39a4, 0xbccb, 0xfe8f, 0xfe8f, 0xff14, 0xffbb, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffbe, 0xf6f5, 0xf62c, 0xf64d, 0x4a05, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3983, 0x6ac4, 0x9385, 0xac25, 0xccc6, 0xc4ea, 0x41c4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20c1, 0xac26, 0xe567, 0xe567, 0xdd47, 0xbc87, 0x8b86, 0x49c3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41c3, 0xedeb, 0xf64e, 0xf718, 0xf79d, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffbe, 0xffbd, 0xff59, 0xfeb1, 0xfe6e, 0xfe6d, 0xfe8e, 0xff14, 0xffdd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xff55, 0xfef0, 0xde53, 0x2103, 0x0000, 0xacee, 0xff11, 0xff11, 0xff75, 0xfffd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffd, 0xff11, 0xe60e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7327, 0xe5ee, 0xfe8f, 0xfed1, 0xff57, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffbe, 0xf6f6, 0xf64d, 0xf64d, 0x62a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41a3, 0x41e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9be6, 0xdd27, 0xb446, 0x8324, 0x41a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b05, 0xf5eb, 0xf690, 0xf739, 0xf79d, 0xf7be, 0xf7be, 0xf7be, 0xf7be, 0xffbd, 0xff7a, 0xfef4, 0xfe6e, 0xfe4d, 0xf66f, 0xee0d, 0xfe6e, 0xfed1, 0xff78, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff97, 0xff12, 0xf713, 0x62e8, 0x0000, 0x0000, 0x0000, 0xad0e, 0xff32, 0xff11, 0xff75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffc, 0xfef1, 0xc54d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3163, 0xb4ab, 0xfe6e, 0xfeaf, 0xfef3, 0xffbb, 0xffde, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffde, 0xff37, 0xf66e, 0xf64d, 0x7b26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41a3, 0x72e5, 0x3121, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9be7, 0xf60c, 0xf6b3, 0xf75b, 0xf79d, 0xf7be, 0xf7be, 0xf7be, 0xff7b, 0xfef4, 0xfe6f, 0xfe4d, 0xfe90, 0xd5af, 0x6ae8, 0x7b48, 0xfeb0, 0xfe8e, 0xff14, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffb, 0xff33, 0xff33, 0xa4ef, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0e, 0xff11, 0xff12, 0xff75, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffc, 0xfef1, 0xa48c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6ac6, 0xddcd, 0xfe8e, 0xfeb0, 0xff58, 0xffdd, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffde, 0xff37, 0xf66f, 0xf64d, 0x8b88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbca8, 0xf60c, 0xf6f6, 0xf77c, 0xf7be, 0xf7be, 0xf77c, 0xf716, 0xf66f, 0xfe4d, 0xfe4d, 0xe610, 0x83aa, 0x18a2, 0x0000, 0x0000, 0xcd8f, 0xfe6e, 0xfed1, 0xff98, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffd, 0xff54, 0xff11, 0xd674, 0x2123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0e, 0xff11, 0xff11, 0xff75, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffb9, 0xfef1, 0x7b69, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2943, 0xa449, 0xf64e, 0xfe8f, 0xff14, 0xff9b, 0xfffe, 0xffff, 0xffdf, 0xffdf, 0xff37, 0xfe8f, 0xf64d, 0x9be8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd54a, 0xf62d, 0xf75a, 0xf79d, 0xf77c, 0xf738, 0xf691, 0xfe4d, 0xfe4d, 0xee50, 0xa46c, 0x2943, 0x0000, 0x0000, 0x0000, 0x0000, 0x62a7, 0xfe8f, 0xfeaf, 0xfef2, 0xffdd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xffb8, 0xfef1, 0xf6f3, 0x62e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0d, 0xff11, 0xff11, 0xff97, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffd, 0xff97, 0xfef2, 0x41e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6286, 0xd58d, 0xfe6e, 0xfed1, 0xff37, 0xffbd, 0xffde, 0xffdf, 0xff79, 0xfeb1, 0xfe4d, 0xac49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41a3, 0xedeb, 0xf64e, 0xf75a, 0xf75a, 0xf6d4, 0xf62d, 0xf62d, 0xf64f, 0xb4ed, 0x4a06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd2e, 0xfeaf, 0xfeb0, 0xff77, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffb, 0xff33, 0xff32, 0xa4cf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaced, 0xff32, 0xff12, 0xffb8, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffd, 0xff96, 0xe650, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20e2, 0x9c09, 0xf62e, 0xfe8e, 0xfed1, 0xff9c, 0xffde, 0xff79, 0xfed2, 0xfe4d, 0xb48a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x72e5, 0xf60c, 0xf66f, 0xf6b2, 0xf66f, 0xf62c, 0xf66e, 0xcd8e, 0x6ae8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a06, 0xf690, 0xfeaf, 0xff12, 0xffdc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffc, 0xff76, 0xff32, 0xd652, 0x18c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0e, 0xff32, 0xff32, 0xffb8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffc, 0xff75, 0xc56e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5205, 0xcd2b, 0xfe6e, 0xfeb0, 0xff36, 0xff36, 0xfed2, 0xfe4d, 0xc4ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9bc7, 0xf60b, 0xf60b, 0xf60b, 0xf62c, 0xddce, 0x838a, 0x18a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xacad, 0xfeb0, 0xfed0, 0xffb9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff98, 0xff11, 0xf714, 0x5ac8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0e, 0xff31, 0xff53, 0xffb8, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffb, 0xff53, 0xa4ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ba8, 0xeded, 0xfe6d, 0xfe8f, 0xfe8f, 0xfe4d, 0xcd2b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb489, 0xf60b, 0xf60c, 0xe60e, 0x9c2a, 0x2943, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3184, 0xee2f, 0xfed0, 0xff33, 0xffdb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffda, 0xff55, 0xff75, 0x9ccf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0d, 0xff32, 0xff53, 0xffb8, 0xffff, 0xffff, 0xffff, 0xffda, 0xff33, 0x7b89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49e4, 0xc4eb, 0xfe4d, 0xfe4d, 0xfe4d, 0xdd6b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd54b, 0xee0e, 0xb4ab, 0x41e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x940b, 0xfef1, 0xfef1, 0xff98, 0xfffe, 0xffff, 0xffff, 0xfffe, 0xff76, 0xff53, 0xd654, 0x18c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0d, 0xff32, 0xff33, 0xffd8, 0xffff, 0xfffd, 0xffb8, 0xff13, 0x41e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b27, 0xe5cc, 0xfe4d, 0xe5ed, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39c7, 0xc5b4, 0x6ae7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2103, 0xde0f, 0xfef1, 0xff34, 0xffdb, 0xffff, 0xffff, 0xff97, 0xff32, 0xf736, 0x52a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaced, 0xff32, 0xff32, 0xffb7, 0xff96, 0xff32, 0xe691, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3983, 0xb48a, 0xee2f, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c3, 0x18c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7348, 0xff12, 0xfef0, 0xff77, 0xfffe, 0xfffc, 0xff33, 0xff74, 0x9c8e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0d, 0xff33, 0xff32, 0xff32, 0xff11, 0xc58e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7329, 0x2944, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcdb0, 0xfed0, 0xff11, 0xff33, 0xff32, 0xff33, 0xd655, 0x18c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0e, 0xff32, 0xff32, 0xff11, 0xa48c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x62a7, 0xfed1, 0xfef1, 0xfef1, 0xff12, 0xf734, 0x5268, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0d, 0xff53, 0xff32, 0x7b68, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb52e, 0xff11, 0xff11, 0xff75, 0x948e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad0e, 0xfef1, 0x41e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a05, 0xf6b0, 0xff33, 0xce12, 0x18c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x940a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa48c, 0xef15, 0x4a47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2964, 0x73ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
};
|
||||
#define banner_pixel 16200
|
||||
#define MAXR 31
|
||||
#define MINR 0
|
||||
#define MAXG 63
|
||||
#define MING 0
|
||||
#define MAXB 31
|
||||
#define MINB 0
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
* PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
* TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
* INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
* DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
* THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
* FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
*
|
||||
* USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
* RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
* TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
* AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
* SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
* THE UNITED STATES.
|
||||
*
|
||||
* COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
*/
|
||||
|
||||
#include <sys/utsname.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int _cpu_detect_asm() {
|
||||
struct utsname name;
|
||||
|
||||
uname(&name);
|
||||
if (!strcmp(name.machine, "i386")) return 3;
|
||||
if (!strcmp(name.machine, "i486")) return 4;
|
||||
if (!strcmp(name.machine, "i586")) return 5;
|
||||
if (!strcmp(name.machine, "i686")) return 6;
|
||||
fprintf(stderr, "Couldn't determine cpu type. Using i586\n");
|
||||
return 5;
|
||||
}
|
||||
|
||||
void single_precision_asm() {
|
||||
asm("push %eax \n fnclex \n fstcw (%esp) \n movl (%esp), %eax \n "
|
||||
"and $0x0000fcff, %eax \n movl %eax, (%esp) \n fldcw (%esp) \n pop %eax");
|
||||
}
|
||||
|
||||
|
||||
void double_precision_asm() {
|
||||
asm("push %eax \n fnclex \n fstcw (%esp) \n movw (%esp), %eax \n "
|
||||
"and $0x0000fcff, %eax \n or $0x000002ff, %eax \n mov %eax, (%esp) \n "
|
||||
"fldcw (%esp) \n pop %eax");
|
||||
}
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
#
|
||||
# $Header$
|
||||
# $Log$
|
||||
# Revision 1.1.1.1 1999/12/07 21:49:08 joseph
|
||||
# Initial checkin into SourceForge.
|
||||
#
|
||||
#
|
||||
# 2 3/04/97 9:10p Dow
|
||||
# Neutered mutiplatform multiheaded monster.
|
||||
#
|
||||
#
|
||||
|
||||
.file "cpudtect.s"
|
||||
|
||||
# 586P
|
||||
# model FLAT,C
|
||||
|
||||
# Data for data segment goes here
|
||||
# DATA SEGMENT DWORD USE32 PUBLIC DATA;
|
||||
# DATA ENDS
|
||||
|
||||
# Some useful constants
|
||||
# CPU Type
|
||||
CPUTypeUnknown .ASSIGNA 0xffffffff
|
||||
CPUTypePrePent .ASSIGNA 4
|
||||
CPUTypeP5 .ASSIGNA 5
|
||||
CPUTypeP6 .ASSIGNA 6
|
||||
|
||||
# References to external data:
|
||||
|
||||
#_TEXT SEGMENT
|
||||
#
|
||||
# _cpu_detect_asm - detect the type of CPU
|
||||
#
|
||||
# USAGE:
|
||||
#
|
||||
# int __cdecl _cpu_detect_asm(void);
|
||||
#
|
||||
# returns 4 for non-pen
|
||||
|
||||
.text
|
||||
.align 4
|
||||
.globl _cpu_detect_asm
|
||||
_cpu_detect_asm:
|
||||
P6Stuff:
|
||||
pusha # save all regs.
|
||||
|
||||
# First, determine whether CPUID instruction is available.
|
||||
# If it's not, then it's a 386 or 486.
|
||||
pushf # push original EFLAGS.
|
||||
pop %eax # pop into eax
|
||||
mov %eax, %ecx # save original EFLAGS in ecx
|
||||
xor $0x200000, %eax # flip ID bit in EFLAGS
|
||||
push %eax # put it back on stack
|
||||
popf # pop into EFLAGS
|
||||
pushf # get EFLAGS back
|
||||
pop %eax # into eax
|
||||
xor %ecx, %eax # check to see if we could toggle ID
|
||||
jz NotPentium # Sorry, not P5 or P6.
|
||||
|
||||
#
|
||||
# Now determine whether it's an intel P6 CPU.
|
||||
#
|
||||
## Is it an Intel CPU?
|
||||
xor %eax, %eax # eax = 0.
|
||||
cpuid # get cpuid
|
||||
xor $0x756e6547, %ebx # "Genu"
|
||||
jnz NotIntel
|
||||
xor $0x49656e69, %edx # "ineI"
|
||||
jnz NotIntel
|
||||
xor $0x6c65746e, %ecx # "ntel"
|
||||
jnz NotIntel #
|
||||
## Verifying architecture family
|
||||
mov $1, %eax
|
||||
cpuid # get family/model/stepping
|
||||
shr $8, %eax # rid of model & stepping number
|
||||
and $0xf, %eax # use only family
|
||||
cmp $6, %eax
|
||||
jl IsP5 # It's a P5
|
||||
## Else it's a P6
|
||||
#
|
||||
# Intel P6 processor.
|
||||
# Make sure it supports Memory Type Range Request registers
|
||||
#
|
||||
IsP6:
|
||||
popa
|
||||
mov $6, %eax #
|
||||
ret # return
|
||||
|
||||
IsP5:
|
||||
popa
|
||||
mov $5, %eax #
|
||||
ret
|
||||
|
||||
NotPentium:
|
||||
popa
|
||||
mov $4, %eax
|
||||
ret
|
||||
|
||||
NotIntel:
|
||||
popa
|
||||
mov $0xffffffff, %eax
|
||||
ret
|
||||
|
||||
.L_end__cpu_detect_asm:
|
||||
.size _cpu_detect_asm,.L_end__cpu_detect_asm-_cpu_detect_asm
|
||||
.END
|
||||
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
;;
|
||||
;; THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
;; PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
;; TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
;; INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
;; DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
;; THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
;; EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
;; FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
;;
|
||||
;; USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
;; RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
;; TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
;; AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
;; SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
;; THE UNITED STATES.
|
||||
;;
|
||||
;; COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
;;
|
||||
;; $Header$
|
||||
;; $Log$
|
||||
;
|
||||
; 4 5/28/97 8:23a Peter
|
||||
; Merge w/ original glide source
|
||||
;
|
||||
; 2 3/04/97 9:10p Dow
|
||||
; Neutered mutiplatform multiheaded monster.
|
||||
;;
|
||||
;;
|
||||
|
||||
TITLE cpudtect.asm
|
||||
|
||||
.586P
|
||||
.model FLAT,C ; Flat memory, mangle publics with leading '_'
|
||||
|
||||
;; Data for data segment goes here
|
||||
;_DATA SEGMENT DWORD USE32 PUBLIC 'DATA';
|
||||
;_DATA ENDS
|
||||
|
||||
;;; Some useful constants
|
||||
; CPU Type
|
||||
CPUTypeUnknown = 0ffffffffh
|
||||
CPUTypePrePent = 4h
|
||||
CPUTypeP5 = 5h
|
||||
CPUTypeP6 = 6h
|
||||
|
||||
;;; References to external data:
|
||||
|
||||
_TEXT SEGMENT
|
||||
;;
|
||||
;; _cpu_detect_asm - detect the type of CPU
|
||||
;;
|
||||
;; USAGE:
|
||||
;;
|
||||
;; int __cdecl _cpu_detect_asm(void);
|
||||
;;
|
||||
;; returns 4 for non-pen
|
||||
|
||||
PUBLIC _cpu_detect_asm
|
||||
_cpu_detect_asm PROC NEAR
|
||||
P6Stuff:
|
||||
.586
|
||||
pushad ; save all regs.
|
||||
|
||||
; First, determine whether CPUID instruction is available.
|
||||
; If it's not, then it's a 386 or 486.
|
||||
pushfd ; push original EFLAGS.
|
||||
pop eax ; pop into eax
|
||||
mov ecx, eax ; save original EFLAGS in ecx
|
||||
xor eax, 0200000h ; flip ID bit in EFLAGS
|
||||
push eax ; put it back on stack
|
||||
popfd ; pop into EFLAGS
|
||||
pushfd ; get EFLAGS back
|
||||
pop eax ; into eax
|
||||
xor eax, ecx ; check to see if we could toggle ID
|
||||
jz NotPentium ; Sorry, not P5 or P6.
|
||||
|
||||
;
|
||||
; Now determine whether it's an intel P6 CPU.
|
||||
;
|
||||
;; Is it an Intel CPU?
|
||||
xor eax, eax ; eax = 0.
|
||||
cpuid ; get cpuid
|
||||
xor ebx, 0756e6547h ; "Genu"
|
||||
jnz NotIntel
|
||||
xor edx, 049656e69h ; "ineI"
|
||||
jnz NotIntel
|
||||
xor ecx, 06c65746eh ; "ntel"
|
||||
jnz NotIntel ;
|
||||
;; Verifying architecture family
|
||||
mov eax, 1
|
||||
cpuid ; get family/model/stepping
|
||||
shr eax, 8 ; rid of model & stepping number
|
||||
and eax, 0fh ; use only family
|
||||
cmp eax, 6
|
||||
jl IsP5 ; It's a P5
|
||||
;; Else it's a P6
|
||||
;
|
||||
; Intel P6 processor.
|
||||
; Make sure it supports Memory Type Range Request registers
|
||||
;
|
||||
IsP6:
|
||||
popad
|
||||
mov eax, 6 ;
|
||||
ret ; return
|
||||
|
||||
IsP5:
|
||||
popad
|
||||
mov eax, 5 ;
|
||||
ret
|
||||
|
||||
NotPentium:
|
||||
popad
|
||||
mov eax, 4
|
||||
ret
|
||||
|
||||
NotIntel:
|
||||
popad
|
||||
mov eax, 0ffffffffh
|
||||
ret
|
||||
|
||||
_cpu_detect_asm ENDP
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; this routine sets the precision to single
|
||||
; which effects all adds, mults, and divs
|
||||
align 4 ;
|
||||
PUBLIC single_precision_asm
|
||||
single_precision_asm PROC NEAR
|
||||
.586
|
||||
push eax ; make room
|
||||
fnclex ; clear pending exceptions
|
||||
fstcw WORD PTR [esp]
|
||||
mov eax, DWORD PTR [esp]
|
||||
and eax, 0000fcffh ; clear bits 9:8
|
||||
mov DWORD PTR [esp], eax
|
||||
fldcw WORD PTR [esp]
|
||||
pop eax
|
||||
ret 0
|
||||
single_precision_asm ENDP
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; this routine sets the precision to double
|
||||
; which effects all adds, mults, and divs
|
||||
align 4 ;
|
||||
PUBLIC double_precision_asm
|
||||
double_precision_asm PROC NEAR
|
||||
.586
|
||||
push eax ; make room
|
||||
fnclex ; clear pending exceptions
|
||||
fstcw WORD PTR [esp]
|
||||
mov eax, DWORD PTR [esp]
|
||||
and eax, 0000fcffh ; clear bits 9:8
|
||||
or eax, 000002ffh ; set 9:8 to 10
|
||||
mov DWORD PTR [esp], eax
|
||||
fldcw WORD PTR [esp]
|
||||
pop eax
|
||||
ret 0
|
||||
double_precision_asm ENDP
|
||||
|
||||
_TEXT ENDS
|
||||
END
|
||||
@@ -1,352 +0,0 @@
|
||||
/*
|
||||
* CPU detection code
|
||||
*
|
||||
*
|
||||
* Revision 1.1.2.2 2006/09/02 03:12:29 guillemj
|
||||
* Backport glide3 fix for PIC compilation with gcc 4.1 from Hans de Goede.
|
||||
*
|
||||
* Revision 1.1.2.1 2004/12/12 15:16:02 koolsmoky
|
||||
* new cpuid
|
||||
*
|
||||
* Revision 1.1.2.10 2004/10/05 14:54:29 dborca
|
||||
* DOS/OpenWatcom woes
|
||||
*
|
||||
* Revision 1.1.2.9 2003/08/04 12:45:47 dborca
|
||||
* Preparing for MinGW 2.0
|
||||
*
|
||||
* Revision 1.1.2.8 2003/07/29 10:04:32 dborca
|
||||
* Shamelessness.
|
||||
* Safeguard in CPUID.
|
||||
* Changed contact address!
|
||||
* Koolsmoky's texture download fixes.
|
||||
*
|
||||
* Revision 1.1.2.7 2003/07/25 07:14:58 dborca
|
||||
* ... in the name of the Linux, DRI and the sacred Glide...
|
||||
*
|
||||
* Revision 1.1.2.6 2003/07/24 13:13:03 koolsmoky
|
||||
* use __try/__except mechanism for win32 to catch SSE sigillegal in win95
|
||||
*
|
||||
* Revision 1.1.2.5 2003/07/01 11:16:42 dborca
|
||||
* fixed a bug in GNUC code when running Intel; also removed detritus
|
||||
*
|
||||
* Revision 1.1.2.3 2003/06/13 07:22:58 dborca
|
||||
* more fixes to NASM sources
|
||||
*
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "cpuid.h"
|
||||
|
||||
#if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ > 3)))
|
||||
typedef unsigned int __attribute__((__may_alias__)) word32;
|
||||
#else
|
||||
typedef unsigned int word32;
|
||||
#endif
|
||||
|
||||
/* These are the bit flags that get set on calling cpuid
|
||||
* with register eax set to 1
|
||||
*/
|
||||
#define _MMX_FEATURE_BIT 0x00800000
|
||||
#define _SSE_FEATURE_BIT 0x02000000
|
||||
#define _SSE2_FEATURE_BIT 0x04000000
|
||||
|
||||
/* This bit is set when cpuid is called with
|
||||
* register set to 80000001h (only applicable to AMD)
|
||||
*/
|
||||
#define _3DNOW_FEATURE_BIT 0x80000000
|
||||
#define _3DNOWPLUS_FEATURE_BIT 0x40000000
|
||||
#define _MMXPLUS_FEATURE_BIT 0x00400000
|
||||
|
||||
/* Testing code:
|
||||
* TEST_SSE = xorps xmm0, xmm0
|
||||
* TEST_SSE2 = xorpd xmm0, xmm0
|
||||
* TEST_3DNOW = femms
|
||||
* TEST_MMX = emms
|
||||
* TEST_3DNOWPLUS = femms | pswapd mm0, mm0 | femms
|
||||
* TEST_MMXPLUS = emms | pminsw mm0, mm0 | emms
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#define TEST_CPUID(f) __asm __volatile ("pushl %%ebx; cpuid; popl %%ebx"::"a"(f):"%ecx", "%edx")
|
||||
#define TEST_SSE() __asm __volatile (".byte 0x0f, 0x57, 0xc0")
|
||||
#define TEST_SSE2() __asm __volatile (".byte 0x66, 0x0f, 0x57, 0xc0")
|
||||
#define TEST_3DNOW() __asm __volatile (".byte 0x0f, 0x0e")
|
||||
#define TEST_MMX() __asm __volatile (".byte 0x0f, 0x77")
|
||||
#define TEST_3DNOWPLUS() __asm __volatile (".byte 0x0f, 0x0e, 0x0f, 0x0f, 0xc0, 0xbb, 0x0f, 0x0e")
|
||||
#define TEST_MMXPLUS() __asm __volatile (".byte 0x0f, 0x77, 0x0f, 0xea, 0xc0, 0x0f, 0x77")
|
||||
#else
|
||||
#define TEST_CPUID(f) __asm { _asm mov eax, f _asm cpuid }
|
||||
#define TEST_SSE() __asm { _asm _emit 0x0f _asm _emit 0x57 _asm _emit 0xc0 }
|
||||
#define TEST_SSE2() __asm { _asm _emit 0x66 _asm _emit 0x0f _asm _emit 0x57 _asm _emit 0xc0 }
|
||||
#define TEST_3DNOW() __asm { _asm _emit 0x0f _asm _emit 0x0e }
|
||||
#define TEST_MMX() __asm { _asm _emit 0x0f _asm _emit 0x77 }
|
||||
#define TEST_3DNOWPLUS() __asm { _asm _emit 0x0f _asm _emit 0x0e _asm _emit 0x0f _asm _emit 0x0f _asm _emit 0xc0 _asm _emit 0xbb _asm _emit 0x0f _asm _emit 0x0e }
|
||||
#define TEST_MMXPLUS() __asm { _asm _emit 0x0f _asm _emit 0x77 _asm _emit 0x0f _asm _emit 0xea _asm _emit 0xc0 _asm _emit 0x0f _asm _emit 0x77 }
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __MSC__
|
||||
static jmp_buf j;
|
||||
|
||||
|
||||
|
||||
/* Desc: signal handler
|
||||
*
|
||||
* In : signal number
|
||||
* Out : -
|
||||
*
|
||||
* Note: returns by `longjmp'ing
|
||||
*/
|
||||
static void handler (int signal)
|
||||
{
|
||||
longjmp(j, signal + 1); /* so we can tell... also ensure we don't pass 0 */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Desc: check if CPU has specific feature
|
||||
*
|
||||
* In : feature request
|
||||
* Out : 0 == fail, input == pass
|
||||
*
|
||||
* Note: this should be in the `has_feature' body. The reason it isn't:
|
||||
* under some systems (notably Linux), the `setjmp' may thrash EBX,
|
||||
* which is used for PositionIndependentCode/GlobalOffsetTable system.
|
||||
* Since EBX is non-volatile register, it should be restored upon return.
|
||||
*/
|
||||
static int check_feature (int feature)
|
||||
{
|
||||
if (setjmp(j)) {
|
||||
/* we got here only when `longjmp'ed by signal handlers */
|
||||
return 0;
|
||||
} else {
|
||||
/* we have signals and jump buffer set */
|
||||
switch (feature) {
|
||||
case _CPU_HAS_CPUID: TEST_CPUID(0); break;
|
||||
case _CPU_FEATURE_SSE: TEST_SSE(); break;
|
||||
case _CPU_FEATURE_SSE2: TEST_SSE2(); break;
|
||||
case _CPU_FEATURE_3DNOW: TEST_3DNOW(); break;
|
||||
case _CPU_FEATURE_MMX: TEST_MMX(); break;
|
||||
case _CPU_FEATURE_3DNOWPLUS: TEST_3DNOWPLUS(); break;
|
||||
case _CPU_FEATURE_MMXPLUS: TEST_MMXPLUS(); break;
|
||||
default: return 0;
|
||||
}
|
||||
return feature;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Desc: perform (possibly faulting) instructions in a safe manner
|
||||
*
|
||||
* In : feature request
|
||||
* Out : 0 == fail, input == pass
|
||||
*
|
||||
* Note: pure ANSI code; stupid Watcom cannot handle this.
|
||||
*/
|
||||
static int has_feature (int feature)
|
||||
{
|
||||
#ifndef __MSC__
|
||||
int rv;
|
||||
|
||||
/* register signal handlers */
|
||||
void (*old_sigill)(int) = signal(SIGILL, handler);
|
||||
if (old_sigill == SIG_ERR) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
rv = check_feature(feature);
|
||||
|
||||
/* restore the signal handlers */
|
||||
signal(SIGILL, old_sigill);
|
||||
return rv;
|
||||
#else
|
||||
/* Use the non-standard __try/__except mechanism because win95 fails to catch
|
||||
* sigillegal for SSE using standard signal mechanism.
|
||||
* HACK ALERT! HACK ALERT! HACK ALERT!
|
||||
* This means the MinGW version cannot be safely run under Win95!
|
||||
*/
|
||||
#define _TRY() __try {
|
||||
#define _EXCEPTION() } __except(1) { return 0; } /* EXCEPTION_EXECUTE_HANDLER=1 */
|
||||
switch (feature) {
|
||||
case _CPU_HAS_CPUID: _TRY() TEST_CPUID(0) _EXCEPTION() break;
|
||||
case _CPU_FEATURE_SSE: _TRY() TEST_SSE() _EXCEPTION() break;
|
||||
case _CPU_FEATURE_SSE2: _TRY() TEST_SSE2() _EXCEPTION() break;
|
||||
case _CPU_FEATURE_3DNOW: _TRY() TEST_3DNOW() _EXCEPTION() break;
|
||||
case _CPU_FEATURE_MMX: _TRY() TEST_MMX() _EXCEPTION() break;
|
||||
case _CPU_FEATURE_3DNOWPLUS: _TRY() TEST_3DNOWPLUS() _EXCEPTION() break;
|
||||
case _CPU_FEATURE_MMXPLUS: _TRY() TEST_MMXPLUS() _EXCEPTION() break;
|
||||
default: return 0;
|
||||
}
|
||||
return feature;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Desc: get CPU info
|
||||
*
|
||||
* In : pointer to _p_info
|
||||
* Out : features
|
||||
*
|
||||
* Note: -
|
||||
*/
|
||||
int _cpuid (_p_info *pinfo)
|
||||
{
|
||||
word32 dwId = 0;
|
||||
word32 dwFeature = 0;
|
||||
word32 dwExt = 0;
|
||||
int feature = 0, os_support = 0;
|
||||
char Ident[13];
|
||||
|
||||
if (!has_feature(_CPU_HAS_CPUID)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
__asm("\n\
|
||||
/* get the vendor string */ \n\
|
||||
pushl %%ebx \n\
|
||||
xorl %%eax, %%eax \n\
|
||||
cpuid \n\
|
||||
movl %%ebx, %%eax \n\
|
||||
popl %%ebx \n\
|
||||
movl %%eax, %3 \n\
|
||||
movl %%edx, %4 \n\
|
||||
movl %%ecx, %5 \n\
|
||||
/* get the Standard bits */ \n\
|
||||
pushl %%ebx \n\
|
||||
movl $1, %%eax \n\
|
||||
cpuid \n\
|
||||
popl %%ebx \n\
|
||||
movl %%eax, %1 \n\
|
||||
movl %%edx, %2 \n\
|
||||
/* get AMD-specials */ \n\
|
||||
pushl %%ebx \n\
|
||||
movl $0x80000000, %%eax \n\
|
||||
cpuid \n\
|
||||
popl %%ebx \n\
|
||||
cmpl $0x80000000, %%eax \n\
|
||||
jc 0f \n\
|
||||
pushl %%ebx \n\
|
||||
movl $0x80000001, %%eax \n\
|
||||
cpuid \n\
|
||||
popl %%ebx \n\
|
||||
movl %%edx, %0 \n\
|
||||
0: \n\
|
||||
":"=g"(dwExt), "=g"(dwId), "=g"(dwFeature),
|
||||
"=g"(((long *)Ident)[0]), "=g"(((long *)Ident)[1]), "=g"(((long *)Ident)[2])
|
||||
::"%eax", "%ecx", "%edx");
|
||||
#else
|
||||
_asm
|
||||
{
|
||||
push ebx
|
||||
push ecx
|
||||
push edx
|
||||
|
||||
/* get the vendor string */
|
||||
xor eax,eax
|
||||
cpuid
|
||||
mov dword ptr [Ident],ebx
|
||||
mov dword ptr [Ident+4],edx
|
||||
mov dword ptr [Ident+8],ecx
|
||||
|
||||
/* get the Standard bits */
|
||||
mov eax,1
|
||||
cpuid
|
||||
mov dwId,eax
|
||||
mov dwFeature,edx
|
||||
|
||||
/* get AMD-specials */
|
||||
mov eax,80000000h
|
||||
cpuid
|
||||
cmp eax,80000000h
|
||||
jc notamd
|
||||
mov eax,80000001h
|
||||
cpuid
|
||||
mov dwExt,edx
|
||||
|
||||
notamd:
|
||||
pop ecx
|
||||
pop ebx
|
||||
pop edx
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef __WATCOMC__
|
||||
/* stupid watcom does not sigill... */
|
||||
if (dwFeature & _MMX_FEATURE_BIT) {
|
||||
feature |= _CPU_FEATURE_MMX;
|
||||
os_support |= has_feature(_CPU_FEATURE_MMX);
|
||||
}
|
||||
if (dwExt & _3DNOW_FEATURE_BIT) {
|
||||
feature |= _CPU_FEATURE_3DNOW;
|
||||
os_support |= has_feature(_CPU_FEATURE_3DNOW);
|
||||
}
|
||||
if (dwExt & _3DNOWPLUS_FEATURE_BIT) {
|
||||
feature |= _CPU_FEATURE_3DNOWPLUS;
|
||||
os_support |= has_feature(_CPU_FEATURE_3DNOWPLUS);
|
||||
}
|
||||
if (dwExt & _MMXPLUS_FEATURE_BIT) {
|
||||
feature |= _CPU_FEATURE_MMXPLUS;
|
||||
os_support |= has_feature(_CPU_FEATURE_MMXPLUS);
|
||||
}
|
||||
if (dwFeature & _SSE_FEATURE_BIT) {
|
||||
feature |= _CPU_FEATURE_SSE;
|
||||
os_support |= has_feature(_CPU_FEATURE_SSE);
|
||||
}
|
||||
if (dwFeature & _SSE2_FEATURE_BIT) {
|
||||
feature |= _CPU_FEATURE_SSE2;
|
||||
os_support |= has_feature(_CPU_FEATURE_SSE2);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pinfo) {
|
||||
memset(pinfo, 0, sizeof(_p_info));
|
||||
pinfo->os_support = os_support;
|
||||
pinfo->feature = feature;
|
||||
pinfo->family = (dwId >> 8) & 0xF; /* retrieving family */
|
||||
pinfo->model = (dwId >> 4) & 0xF; /* retrieving model */
|
||||
pinfo->stepping = dwId & 0xF; /* retrieving stepping */
|
||||
Ident[12] = 0;
|
||||
strcpy(pinfo->v_name, Ident);
|
||||
}
|
||||
|
||||
return feature;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if CPUTEST
|
||||
#include <stdio.h>
|
||||
/* Desc:
|
||||
*
|
||||
* In :
|
||||
* Out :
|
||||
*
|
||||
* Note:
|
||||
*/
|
||||
int main (void)
|
||||
{
|
||||
_p_info p;
|
||||
_cpuid(&p);
|
||||
printf("vendor : %s\n", p.v_name);
|
||||
printf("family : %d\n", p.family);
|
||||
printf("model : %d\n", p.model);
|
||||
printf("stepping: %X\n", p.stepping);
|
||||
printf("feature : %08x\n", p.feature);
|
||||
printf("support : %08x\n", p.os_support);
|
||||
printf("--------\n");
|
||||
printf("cpuid : %d\n", has_feature(_CPU_HAS_CPUID));
|
||||
printf("MMX : %d\n", has_feature(_CPU_FEATURE_MMX));
|
||||
printf("SSE : %d\n", has_feature(_CPU_FEATURE_SSE));
|
||||
printf("SSE2 : %d\n", has_feature(_CPU_FEATURE_SSE2));
|
||||
printf("3DNow! : %d\n", has_feature(_CPU_FEATURE_3DNOW));
|
||||
printf("3DNow!+ : %d\n", has_feature(_CPU_FEATURE_3DNOWPLUS));
|
||||
printf("MMX+ : %d\n", has_feature(_CPU_FEATURE_MMXPLUS));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -1,581 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.2.2.1 2005/01/22 14:52:01 koolsmoky
|
||||
** enabled packed argb for cmd packet type 3
|
||||
**
|
||||
** Revision 1.2 2000/10/03 18:28:33 mercury
|
||||
** 003-clean_up_cvg-000, cvg tree cleanup.
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:08 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 16 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
*
|
||||
* 15 12/17/97 4:45p Peter
|
||||
* groundwork for CrybabyGlide
|
||||
*
|
||||
* 14 12/15/97 5:51p Atai
|
||||
* disable obsolete glide2 api for glide3
|
||||
*
|
||||
* 13 12/08/97 12:06p Atai
|
||||
* change prototype for grDrawPoint, grDrawLine, grDrawTriangel
|
||||
*
|
||||
* 12 11/18/97 4:36p Peter
|
||||
* chipfield stuff cleanup and w/ direct writes
|
||||
*
|
||||
* 11 11/17/97 4:55p Peter
|
||||
* watcom warnings/chipfield stuff
|
||||
*
|
||||
* 10 11/03/97 3:43p Peter
|
||||
* h3/cvg cataclysm
|
||||
*
|
||||
* 9 10/27/97 1:16p Peter
|
||||
* fixed silliness
|
||||
*
|
||||
* 8 10/27/97 11:10a Peter
|
||||
* starting cleanup
|
||||
*
|
||||
* 7 9/15/97 7:31p Peter
|
||||
* more cmdfifo cleanup, fixed normal buffer clear, banner in the right
|
||||
* place, lfb's are on, Hmmmm.. probably more
|
||||
*
|
||||
* 6 9/04/97 3:32p Peter
|
||||
* starting grouping serial reg writes
|
||||
*
|
||||
* 5 6/06/97 10:47a Peter
|
||||
* texture downloading, fixed 640x480 dimension, changed cvg dep to be the
|
||||
* same as sst1
|
||||
*
|
||||
* 4 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 3 5/21/97 6:04a Peter
|
||||
*
|
||||
* 2 3/04/97 9:08p Dow
|
||||
*
|
||||
* 1 12/23/96 1:39p Dow
|
||||
* Changes for multiplatform
|
||||
**
|
||||
*/
|
||||
|
||||
/* Implements multipass drawing */
|
||||
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
#include "gump.h"
|
||||
|
||||
/* gump.c */
|
||||
extern GrMPState _gumpState;
|
||||
|
||||
/*
|
||||
** _gumpTexCombineFunction
|
||||
**
|
||||
** Sets the texture combine function. For a dual TMU system this function
|
||||
** will configure the TEXTUREMODE registers as appropriate. For a
|
||||
** single TMU system this function will configure TEXTUREMODE if
|
||||
** possible, or defer operations until grDrawTriangle() is called.
|
||||
*/
|
||||
GR_DDFUNC(_gumpTexCombineFunction, void, (int virtual_tmu))
|
||||
{
|
||||
#define FN_NAME "_gumpTexCombineFunction"
|
||||
FxU32 texmode;
|
||||
GrMPTextureCombineFnc_t tc;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("_gumpTexCombineFunction",99);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",virtual_tmu);
|
||||
|
||||
texmode = gc->state.tmu_config[0].textureMode;
|
||||
texmode &= ~(SST_TCOMBINE | SST_TACOMBINE);
|
||||
tc = _gumpState.tc_fnc;
|
||||
|
||||
switch (tc) {
|
||||
case GR_MPTEXTURECOMBINE_ADD:
|
||||
/* tmu0: other + local */
|
||||
/* tmu1: local */
|
||||
/* pass0(tm0): local */
|
||||
/* pass1(tm1): local */
|
||||
if (virtual_tmu == 0) {
|
||||
texmode |= (SST_TC_REPLACE | SST_TCA_REPLACE);
|
||||
} else {
|
||||
texmode |= (SST_TC_REPLACE | SST_TCA_REPLACE);
|
||||
}
|
||||
break;
|
||||
|
||||
case GR_MPTEXTURECOMBINE_MULTIPLY:
|
||||
/* tmu0: other * local */
|
||||
/* tmu1: local */
|
||||
/* pass0(tm0): local */
|
||||
/* pass1(tm1): local */
|
||||
if (virtual_tmu == 0) {
|
||||
texmode |= (SST_TC_REPLACE | SST_TCA_REPLACE);
|
||||
} else {
|
||||
texmode |= (SST_TC_REPLACE | SST_TCA_REPLACE);
|
||||
}
|
||||
break;
|
||||
|
||||
case GR_MPTEXTURECOMBINE_DETAIL0:
|
||||
/* tmu0: (other - local) * lod + local */
|
||||
/* = lod * other + (1 - lod) * local */
|
||||
/* tmu1: local */
|
||||
/* pass0(tm0): (-local) * lod + local */
|
||||
/* = (1 - lod) * local */
|
||||
/* pass1(tm1): (-local) * (1 - lod) + local */
|
||||
/* = lod * local */
|
||||
if (virtual_tmu == 0) {
|
||||
texmode |= (SST_TC_BLEND_LOD | SST_TCA_BLEND_LOD |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
} else {
|
||||
texmode |= (SST_TC_BLEND_LOD | SST_TCA_BLEND_LOD |
|
||||
SST_TC_REVERSE_BLEND | SST_TCA_REVERSE_BLEND |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
}
|
||||
break;
|
||||
|
||||
case GR_MPTEXTURECOMBINE_DETAIL1:
|
||||
/* tmu0: (other - local) * (1 - lod) + local */
|
||||
/* = (1 - lod) * other + lod * local */
|
||||
/* tmu1: local */
|
||||
/* pass0(tm0): (-local) * (1 - lod) + local */
|
||||
/* = lod * local */
|
||||
/* pass1(tm1): (-local) * lod + local */
|
||||
/* = (1 - lod) * local */
|
||||
if (virtual_tmu == 0) {
|
||||
texmode |= (SST_TC_BLEND_LOD | SST_TCA_BLEND_LOD |
|
||||
SST_TC_REVERSE_BLEND | SST_TCA_REVERSE_BLEND |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
} else {
|
||||
texmode |= (SST_TC_BLEND_LOD | SST_TCA_BLEND_LOD |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
}
|
||||
break;
|
||||
|
||||
case GR_MPTEXTURECOMBINE_TRILINEAR0:
|
||||
/* tmu0: (other - local) * lodbfrac + local */
|
||||
/* = lodbfrac * other + (1 - lodbfrac) * local */
|
||||
/* tmu1: local */
|
||||
/* pass0(tm0): (-local) * lodbfrac + local */
|
||||
/* = (1 - lodbfrac) * local */
|
||||
/* pass1(tm1): (-local) * (1 - lodbfrac) + local */
|
||||
/* = lodbfrac * local */
|
||||
if (virtual_tmu == 0) {
|
||||
texmode |= (SST_TC_BLEND_LODFRAC | SST_TCA_BLEND_LODFRAC |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
} else {
|
||||
texmode |= (SST_TC_BLEND_LODFRAC | SST_TCA_BLEND_LODFRAC |
|
||||
SST_TC_REVERSE_BLEND | SST_TCA_REVERSE_BLEND |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
}
|
||||
break;
|
||||
|
||||
case GR_MPTEXTURECOMBINE_TRILINEAR1:
|
||||
/* tmu0: (other - local) * (1 - lodbfrac) + local
|
||||
= (1 - lodbfrac) * other + lodbfrac * local
|
||||
tmu1: local
|
||||
pass0(tm0): (-local) * (1 - lodbfrac) + local
|
||||
= lodbfrac * local
|
||||
pass1(tm1): (-local) * lodbfrac + local
|
||||
= (1 - lodbfrac) * local
|
||||
*/
|
||||
if (virtual_tmu == 0) {
|
||||
texmode |= (SST_TC_BLEND_LODFRAC | SST_TCA_BLEND_LODFRAC |
|
||||
SST_TC_REVERSE_BLEND | SST_TCA_REVERSE_BLEND |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
} else {
|
||||
texmode |= (SST_TC_BLEND_LODFRAC | SST_TCA_BLEND_LODFRAC |
|
||||
SST_TC_ZERO_OTHER | SST_TCA_ZERO_OTHER);
|
||||
}
|
||||
break;
|
||||
|
||||
case GR_MPTEXTURECOMBINE_SUBTRACT:
|
||||
/*
|
||||
tmu0: other - local
|
||||
tmu1: local
|
||||
doesn't work, alpha blender can't subtract
|
||||
*/
|
||||
GrErrorCallback("_gumpTexCombineFunction: TEXTURE_SUBTRACT not supported", FXFALSE);
|
||||
return;
|
||||
break;
|
||||
|
||||
default:
|
||||
GrErrorCallback("_gumpTexCombineFunction: Unsupported function", FXFALSE);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
GR_SET_EXPECTED_SIZE(sizeof(FxU32), 1);
|
||||
{
|
||||
SstRegs* tmuRegs = SST_TMU(hw, 0);
|
||||
|
||||
GR_SET(eChipTMU0, tmuRegs, textureMode, texmode);
|
||||
}
|
||||
GR_CHECK_SIZE();
|
||||
|
||||
GR_END();
|
||||
#undef _gumpTexCombineFunction
|
||||
} /* _gumpTexCombineFunction */
|
||||
|
||||
GR_ENTRY(guMPDrawTriangle, void, (const GrVertex *a, const GrVertex *b, const GrVertex *c))
|
||||
{
|
||||
GR_BEGIN_NOFIFOCHECK("guMPDrawTriangle",98);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(0x%x,0x%x,0x%x)\n",a,b,c);
|
||||
GR_CHECK_F(myName, !a || !b || !c, "NULL pointer passed");
|
||||
|
||||
/* check for multipass texture modes */
|
||||
/* xxx complex multipass mode checks should be moved into gtex/gglide */
|
||||
/* specific color combine modes use texture */
|
||||
/* this is equivalent to
|
||||
fbzColorPath & SST_ENTEXTREMAP
|
||||
cc_state & STATE_CC_REQUIRES_DECAL_STW */
|
||||
/* specific texture combine modes */
|
||||
/* xxx don't even check anymore, because you can't */
|
||||
|
||||
{
|
||||
/* check for not possible on one tmu modes */
|
||||
/* alpha blend enabled (grAlphaBlendMode)
|
||||
xxx some can work, with some cheats, even more
|
||||
low bit alpha switches between iterated and constant rgb
|
||||
(grAlphaControlsITRGBLighting)
|
||||
alpha test (grAlphaTestFunction)
|
||||
xxx actually, NEVER is ok too
|
||||
chromakey
|
||||
*/
|
||||
|
||||
if ((gc->state.fbi_config.alphaMode & SST_ENALPHABLEND) ||
|
||||
(gc->state.fbi_config.fbzColorPath & SST_LOCALSELECT_OVERRIDE_WITH_ATEX) ||
|
||||
(gc->state.fbi_config.alphaMode & SST_ENALPHAFUNC) ||
|
||||
(gc->state.fbi_config.fbzMode & SST_ENCHROMAKEY)) {
|
||||
GrErrorCallback("guMPDrawTriangle: Illegal state", FXFALSE);
|
||||
}
|
||||
|
||||
if (_gumpState.tc_fnc == GR_MPTEXTURECOMBINE_ADD ||
|
||||
_gumpState.tc_fnc == GR_MPTEXTURECOMBINE_DETAIL0 ||
|
||||
_gumpState.tc_fnc == GR_MPTEXTURECOMBINE_DETAIL1 ||
|
||||
_gumpState.tc_fnc == GR_MPTEXTURECOMBINE_TRILINEAR0 ||
|
||||
_gumpState.tc_fnc == GR_MPTEXTURECOMBINE_TRILINEAR1) {
|
||||
/* render pass with all effects */
|
||||
/* select other texture map */
|
||||
/* set alpha blend to add to dest buffer */
|
||||
/* if depth buffering, save depth buffer function,
|
||||
set to z-equal */
|
||||
/* disable fog and color combine bias */
|
||||
/* render other pass */
|
||||
/* restore depth buffer function, restore alpha blend, enable fog
|
||||
and color combine bias */
|
||||
|
||||
FxU32 alphamode, alphamode_orig;
|
||||
FxU32 fbzcolorpath, fbzcolorpath_orig;
|
||||
FxU32 fbzmode, fbzmode_orig = 0;
|
||||
FxU32 fogmode, fogmode_orig = 0;
|
||||
|
||||
alphamode = alphamode_orig = gc->state.fbi_config.alphaMode;
|
||||
fbzcolorpath = fbzcolorpath_orig = gc->state.fbi_config.fbzColorPath;
|
||||
GR_CHECK_SIZE();
|
||||
|
||||
/* first pass */
|
||||
|
||||
/* tmu setup */
|
||||
guTexSource(_gumpState.mmid[0]);
|
||||
_gumpTexCombineFunction(0);
|
||||
|
||||
/* render first pass */
|
||||
grDrawTriangle(a, b, c);
|
||||
|
||||
/* second pass */
|
||||
|
||||
/* xxx may need to copy texture coordinates, see
|
||||
grTexCombineFunction's second parameter. if so,
|
||||
we have to disable the second coordinate when drawing. */
|
||||
|
||||
/* tmu setup */
|
||||
guTexSource(_gumpState.mmid[1]);
|
||||
_gumpTexCombineFunction(1);
|
||||
|
||||
{
|
||||
const FxBool depthP = ((gc->state.fbi_config.fbzMode & SST_ENDEPTHBUFFER) == SST_ENDEPTHBUFFER);
|
||||
const FxBool fogP = ((gc->state.fbi_config.fogMode & SST_ENFOGGING) == SST_ENFOGGING);
|
||||
const FxU32 regCount = (2 + depthP + fogP);
|
||||
const FxU32 regMask = (0x05 | MaskSelect(depthP, 0x08UL) | MaskSelect(fogP, 0x02UL));
|
||||
|
||||
REG_GROUP_BEGIN(BROADCAST_ID, fbzColorPath, regCount, regMask);
|
||||
{
|
||||
/* disable biasing in color combine */
|
||||
/* this can change the parameters output */
|
||||
/* xxx the equivalent of GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA
|
||||
does not work, you need to do this instead of below.
|
||||
|
||||
if (gc->state.cc_fnc == GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA)
|
||||
{
|
||||
fbzcolorpath &= ~SST_CC_ADD_CLOCAL;
|
||||
}
|
||||
*/
|
||||
|
||||
fbzcolorpath &= ~(SST_CC_ADD_CLOCAL | SST_CC_ADD_ALOCAL | SST_CC_SUB_CLOCAL);
|
||||
REG_GROUP_SET(hw, fbzColorPath, fbzcolorpath);
|
||||
|
||||
/* disable (fogta * fogColor) bias */
|
||||
/* xxx setting ADD_FOG with fog disabled is harmless */
|
||||
if (fogP) {
|
||||
fogmode = fogmode_orig = gc->state.fbi_config.fogMode;
|
||||
fogmode |= SST_FOGADD;
|
||||
|
||||
REG_GROUP_SET(hw, fogMode, fogmode);
|
||||
}
|
||||
|
||||
/* enable alpha blend to add to destination buffers */
|
||||
alphamode &= ~(SST_RGBSRCFACT | SST_RGBDSTFACT | SST_ASRCFACT | SST_ADSTFACT);
|
||||
alphamode |= (SST_ENALPHABLEND |
|
||||
(SST_A_ONE << SST_RGBSRCFACT_SHIFT) |
|
||||
(SST_A_ONE << SST_RGBDSTFACT_SHIFT) |
|
||||
(SST_A_ONE << SST_ASRCFACT_SHIFT) |
|
||||
(SST_A_ONE << SST_ADSTFACT_SHIFT));
|
||||
|
||||
REG_GROUP_SET(hw, alphaMode, alphamode);
|
||||
|
||||
/* if depth buffering, set to z= mode and disable writes */
|
||||
if (depthP) {
|
||||
fbzmode = fbzmode_orig = gc->state.fbi_config.fbzMode;
|
||||
|
||||
fbzmode &= ~(SST_ZAWRMASK | SST_ZFUNC);
|
||||
fbzmode |= GR_CMP_EQUAL;
|
||||
|
||||
REG_GROUP_SET(hw, fbzMode, fbzmode);
|
||||
}
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
/* render other pass */
|
||||
grDrawTriangle(a, b, c);
|
||||
|
||||
/* restore */
|
||||
REG_GROUP_BEGIN(BROADCAST_ID, fbzColorPath, regCount, regMask);
|
||||
{
|
||||
/* restore ccu/acu state */
|
||||
REG_GROUP_SET(hw, fbzColorPath, fbzcolorpath_orig);
|
||||
|
||||
/* restore fog state */
|
||||
if (fogP) REG_GROUP_SET(hw, fogMode, fogmode_orig);
|
||||
|
||||
/* restore alpha blending state */
|
||||
REG_GROUP_SET(hw, alphaMode, alphamode_orig);
|
||||
|
||||
/* restore depth buffer state */
|
||||
if (depthP) REG_GROUP_SET(hw, fbzMode, fbzmode_orig);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
}
|
||||
|
||||
goto all_done;
|
||||
} else if (_gumpState.tc_fnc == GR_MPTEXTURECOMBINE_MULTIPLY) {
|
||||
/* disable fog and color combine bias */
|
||||
/* render pass with all other effects */
|
||||
/* select other texture map */
|
||||
/* set alpha blend to multiply to dest buffer */
|
||||
/* if depth buffering, save depth buffer function,
|
||||
set to z-equal */
|
||||
/* disable fog and color combine factor */
|
||||
/* render other pass */
|
||||
/* if fog or color combine w/bias */
|
||||
/* disable tmu */
|
||||
/* set alpha blend to add to dest buffer */
|
||||
/* enable fog and color combine bias */
|
||||
/* render bias pass */
|
||||
/* restore depth buffer function, restore alpha blend, enable fog
|
||||
and color combine bias */
|
||||
|
||||
FxU32 alphamode, alphamode_orig;
|
||||
FxU32 fbzcolorpath, fbzcolorpath_orig;
|
||||
FxU32 fbzmode, fbzmode_orig = 0;
|
||||
FxU32 fogmode, fogmode_orig = 0;
|
||||
|
||||
alphamode = alphamode_orig = gc->state.fbi_config.alphaMode;
|
||||
fbzcolorpath = fbzcolorpath_orig = gc->state.fbi_config.fbzColorPath;
|
||||
|
||||
/* first pass */
|
||||
|
||||
/* tmu setup */
|
||||
|
||||
guTexSource(_gumpState.mmid[0]);
|
||||
_gumpTexCombineFunction(0);
|
||||
|
||||
/* disable bias */
|
||||
{
|
||||
const FxBool depthP = ((gc->state.fbi_config.fbzMode & SST_ENDEPTHBUFFER) == SST_ENDEPTHBUFFER);
|
||||
const FxBool fogP = ((gc->state.fbi_config.fogMode & SST_ENFOGGING) == SST_ENFOGGING);
|
||||
const FxU32 regCount = (2 + depthP + fogP);
|
||||
const FxU32 regMask = (0x05 | MaskSelect(depthP, 0x08UL) | MaskSelect(fogP, 0x02UL));
|
||||
|
||||
REG_GROUP_BEGIN(BROADCAST_ID, fbzColorPath, (1 + fogP), (0x01UL | MaskSelect(fogP, 0x02UL)));
|
||||
{
|
||||
/* disable biasing in color combine */
|
||||
/* this can change the parameters output */
|
||||
/* xxx consult add path for switch version */
|
||||
/* xxx the equivalent of GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA
|
||||
does not work, you need to do this instead of below.
|
||||
|
||||
if (gc->state.cc_fnc == GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA)
|
||||
{
|
||||
fbzcolorpath &= ~SST_CC_ADD_CLOCAL;
|
||||
}
|
||||
*/
|
||||
|
||||
fbzcolorpath &= ~(SST_CC_ADD_CLOCAL | SST_CC_ADD_ALOCAL | SST_CC_SUB_CLOCAL);
|
||||
REG_GROUP_SET(hw, fbzColorPath, fbzcolorpath);
|
||||
|
||||
/* disable (fogta * fogColor) bias */
|
||||
/* xxx setting ADD_FOG with fog disabled is harmless */
|
||||
if (fogP) {
|
||||
fogmode = fogmode_orig = gc->state.fbi_config.fogMode;
|
||||
fogmode |= SST_FOGADD;
|
||||
|
||||
REG_GROUP_SET(hw, fogMode, fogmode);
|
||||
}
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
/* render first pass */
|
||||
grDrawTriangle(a, b, c);
|
||||
|
||||
/* second pass */
|
||||
/* xxx may sometimes need to copy texture coordinates */
|
||||
|
||||
/* tmu setup */
|
||||
guTexSource(_gumpState.mmid[1]);
|
||||
_gumpTexCombineFunction(1);
|
||||
|
||||
REG_GROUP_BEGIN(BROADCAST_ID, fbzColorPath, regCount, regMask);
|
||||
{
|
||||
/* disable factor and bias in color combine--
|
||||
decal, except for the cases that need texture alpha */
|
||||
/* this can change the parameters output */
|
||||
fbzcolorpath = fbzcolorpath_orig;
|
||||
fbzcolorpath &= ~( SST_RGBSELECT |
|
||||
SST_LOCALSELECT |
|
||||
SST_CC_ZERO_OTHER |
|
||||
SST_CC_SUB_CLOCAL |
|
||||
SST_CC_MSELECT |
|
||||
SST_CC_REVERSE_BLEND |
|
||||
SST_CC_ADD_CLOCAL |
|
||||
SST_CC_ADD_ALOCAL |
|
||||
SST_CC_INVERT_OUTPUT |
|
||||
SST_CC_REVERSE_BLEND );
|
||||
|
||||
/* xxx the equivalent of GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA
|
||||
does not work, you need to do this instead of below.
|
||||
|
||||
if ( gc->state.cc_fnc == GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA )
|
||||
{
|
||||
xxx see implementation notes on why this isn't implemented yet
|
||||
GrErrorCallback("guDrawTriangleMP: "
|
||||
"MULTIPLY and BLEND_ITRGB_ON_TEXALPHA not implemented yet!", FXFALSE );
|
||||
goto all_done;
|
||||
}
|
||||
*/
|
||||
fbzcolorpath |= SST_RGBSEL_TMUOUT;
|
||||
REG_GROUP_SET(hw, fbzColorPath, fbzcolorpath);
|
||||
|
||||
/* disable fog */
|
||||
if (fogP) REG_GROUP_SET(hw, fogMode, 0);
|
||||
|
||||
/* enable alpha blend to multiply to destination buffers */
|
||||
/* xxx alpha component blender can only handle factors of
|
||||
0 and 1 */
|
||||
alphamode &= ~(SST_RGBSRCFACT | SST_RGBDSTFACT | SST_ASRCFACT | SST_ADSTFACT);
|
||||
alphamode |= (SST_ENALPHABLEND |
|
||||
(SST_A_COLOR << SST_RGBSRCFACT_SHIFT) |
|
||||
(SST_A_ZERO << SST_RGBDSTFACT_SHIFT) |
|
||||
(SST_A_ONE << SST_ASRCFACT_SHIFT) |
|
||||
(SST_A_ZERO << SST_ADSTFACT_SHIFT));
|
||||
|
||||
REG_GROUP_SET(hw, alphaMode, alphamode);
|
||||
|
||||
/* if depth buffering, set to z= mode and disable writes */
|
||||
if (depthP) {
|
||||
fbzmode = fbzmode_orig = gc->state.fbi_config.fbzMode;
|
||||
fbzmode &= ~(SST_ZAWRMASK | SST_ZFUNC);
|
||||
fbzmode |= GR_CMP_EQUAL;
|
||||
|
||||
REG_GROUP_SET(hw, fbzMode, fbzmode);
|
||||
}
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
/* render second pass */
|
||||
grDrawTriangle(a, b, c);
|
||||
|
||||
/* if bias, third pass */
|
||||
if (fogP) {
|
||||
/* enable alpha blend to add to destination buffers */
|
||||
REG_GROUP_BEGIN(BROADCAST_ID, fogMode, 2, 0x03);
|
||||
{
|
||||
/* disable fog factor, leave fog bias enabled */
|
||||
/* xxx setting ADD_MULT with fog disabled is harmless */
|
||||
fogmode = fogmode_orig;
|
||||
fogmode |= SST_FOGMULT;
|
||||
REG_GROUP_SET(hw, fogMode, fogmode);
|
||||
|
||||
alphamode &= ~(SST_RGBSRCFACT | SST_RGBDSTFACT | SST_ASRCFACT | SST_ADSTFACT);
|
||||
alphamode |= (SST_ENALPHABLEND |
|
||||
(SST_A_ONE << SST_RGBSRCFACT_SHIFT) |
|
||||
(SST_A_ONE << SST_RGBDSTFACT_SHIFT) |
|
||||
(SST_A_ONE << SST_ASRCFACT_SHIFT) |
|
||||
(SST_A_ONE << SST_ADSTFACT_SHIFT));
|
||||
REG_GROUP_SET(hw, alphaMode, alphamode);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
/* render third pass */
|
||||
grDrawTriangle(a, b, c);
|
||||
}
|
||||
|
||||
REG_GROUP_BEGIN(BROADCAST_ID, fbzColorPath, regCount, regMask);
|
||||
{
|
||||
/* restore ccu/acu state */
|
||||
REG_GROUP_SET(hw, fbzColorPath, fbzcolorpath_orig);
|
||||
|
||||
/* restore fog state */
|
||||
if (fogP) REG_GROUP_SET(hw, fogMode, fogmode_orig);
|
||||
|
||||
/* restore alpha blending state */
|
||||
REG_GROUP_SET(hw, alphaMode, alphamode_orig);
|
||||
|
||||
/* restore depth buffer state */
|
||||
if (depthP) REG_GROUP_SET(hw, fbzMode, fbzmode_orig);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
}
|
||||
|
||||
goto all_done;
|
||||
} else if (_gumpState.tc_fnc == GR_MPTEXTURECOMBINE_SUBTRACT) {
|
||||
GrErrorCallback("gumpDrawTriangle: GR_MPTEXCOMBINE_SUBTRACT not implemented", FXFALSE);
|
||||
goto all_done;
|
||||
}
|
||||
}
|
||||
|
||||
all_done:
|
||||
GR_END();
|
||||
}
|
||||
|
||||
@@ -1,420 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.2.3 2005/01/22 14:52:01 koolsmoky
|
||||
** enabled packed argb for cmd packet type 3
|
||||
**
|
||||
** Revision 1.1.1.1.2.2 2004/12/23 20:45:56 koolsmoky
|
||||
** converted to nasm syntax
|
||||
** added x86 asm, 3dnow! triangle and mmx, 3dnow! texture download optimizations
|
||||
**
|
||||
** Revision 1.1.1.1.2.1 2004/12/12 15:18:58 koolsmoky
|
||||
** changes to support new cpuid; moved single_precision_asm(), double_precision_asm() from cpudetect.asm
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:08 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 40 6/23/98 5:38p Peter
|
||||
** lfb hinting
|
||||
**
|
||||
** 39 3/17/98 3:00p Peter
|
||||
** removed unused stats
|
||||
**
|
||||
** 38 3/02/98 7:22p Peter
|
||||
** moved internal function to where it is used
|
||||
**
|
||||
** 37 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
**
|
||||
** 36 2/20/98 9:05a Peter
|
||||
** removed remnants of comdex grot
|
||||
**
|
||||
** 35 1/30/98 4:31p Peter
|
||||
** general clenaup
|
||||
**
|
||||
** 34 1/20/98 10:48a Atai
|
||||
** validate state in grGlideGetState
|
||||
*
|
||||
* 33 1/07/98 10:22a Peter
|
||||
* lod dithering env var
|
||||
*
|
||||
* 32 1/06/98 3:53p Atai
|
||||
* remove grHint, modify grLfbWriteRegion and grGet
|
||||
*
|
||||
* 31 12/17/97 4:05p Atai
|
||||
* added grChromaRange(), grGammaCorrecionRGB(), grRest(), and grGet()
|
||||
* functions
|
||||
*
|
||||
* 30 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 29 12/01/97 5:46p Peter
|
||||
* fixed variable names in swizzle
|
||||
*
|
||||
* 28 12/01/97 5:17p Peter
|
||||
*
|
||||
* 27 11/18/97 4:36p Peter
|
||||
* chipfield stuff cleanup and w/ direct writes
|
||||
*
|
||||
* 26 11/14/97 5:02p Peter
|
||||
* more comdex stuff
|
||||
*
|
||||
* 25 11/14/97 12:09a Peter
|
||||
* comdex thing and some other stuff
|
||||
*
|
||||
* 24 11/12/97 2:27p Peter
|
||||
*
|
||||
* 23 11/12/97 11:39a Dow
|
||||
* H3 Stuff
|
||||
*
|
||||
* 22 11/12/97 9:21a Dow
|
||||
* Changed CVG_FIFO to USE_PACKET_FIFO
|
||||
*
|
||||
* 21 11/04/97 4:00p Dow
|
||||
* Banshee Mods
|
||||
*
|
||||
* 20 11/03/97 3:43p Peter
|
||||
* h3/cvg cataclysm
|
||||
*
|
||||
* 19 10/16/97 3:40p Peter
|
||||
* packed rgb
|
||||
*
|
||||
* 18 9/20/97 10:53a Peter
|
||||
* keep track of palette stats
|
||||
*
|
||||
* 17 9/15/97 7:31p Peter
|
||||
* more cmdfifo cleanup, fixed normal buffer clear, banner in the right
|
||||
* place, lfb's are on, Hmmmm.. probably more
|
||||
*
|
||||
* 16 9/10/97 10:13p Peter
|
||||
* fifo logic from GaryT, non-normalized fp first cut
|
||||
*
|
||||
* 15 7/25/97 11:40a Peter
|
||||
* removed dHalf, change field name to match real use for cvg
|
||||
*
|
||||
* 14 7/08/97 2:48p Peter
|
||||
*
|
||||
* 13 6/30/97 3:20p Peter
|
||||
* error callback
|
||||
*
|
||||
* 12 6/23/97 4:43p Peter
|
||||
* cleaned up #defines etc for a nicer tree
|
||||
*
|
||||
**
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
#include "rcver.h"
|
||||
static char glideIdent[] = "@#%" VERSIONSTR ;
|
||||
|
||||
/* the root of all EVIL */
|
||||
struct _GlideRoot_s GR_CDECL _GlideRoot;
|
||||
/* This is global to speed up the function call wrappers */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
**
|
||||
*/
|
||||
void
|
||||
_grDisplayStats(void)
|
||||
{
|
||||
int frames = _GlideRoot.stats.bufferSwaps;
|
||||
|
||||
if (frames <= 0) frames = 1;
|
||||
gdbg_info(80,"GLIDE STATISTICS:\n");
|
||||
gdbg_info(80," triangles processed: %7d tris drawn: %7d\n",
|
||||
_GlideRoot.stats.trisProcessed, _GlideRoot.stats.trisDrawn);
|
||||
gdbg_info(80," buffer swaps: %7d tris/frame: %7d , %d\n",
|
||||
_GlideRoot.stats.bufferSwaps,
|
||||
_GlideRoot.stats.trisProcessed/frames,
|
||||
_GlideRoot.stats.trisDrawn/frames);
|
||||
gdbg_info(80," points: %7d pnts/frame: %7d\n",
|
||||
_GlideRoot.stats.pointsDrawn, _GlideRoot.stats.pointsDrawn/frames);
|
||||
gdbg_info(80," lines: %7d lines/frame: %7d\n",
|
||||
_GlideRoot.stats.linesDrawn, _GlideRoot.stats.linesDrawn/frames);
|
||||
gdbg_info(80," texture downloads: %7d texture bytes: %7d\n",
|
||||
_GlideRoot.stats.texDownloads, _GlideRoot.stats.texBytes);
|
||||
gdbg_info(80," palette downloads: %7d palette bytes: %7d\n",
|
||||
_GlideRoot.stats.palDownloads, _GlideRoot.stats.palBytes);
|
||||
gdbg_info(80," NCC downloads: %7d NCC bytes: %7d\n",
|
||||
_GlideRoot.stats.nccDownloads, _GlideRoot.stats.nccBytes);
|
||||
|
||||
#if USE_PACKET_FIFO
|
||||
gdbg_info(80,"\tCommandFifo:\n");
|
||||
gdbg_info(80,"\t\tWraps: %ld\n", _GlideRoot.stats.fifoWraps);
|
||||
if (_GlideRoot.stats.fifoWraps > 0) {
|
||||
gdbg_info(80,"\t\tAvg Drain Depth: %g\n",
|
||||
(double)_GlideRoot.stats.fifoWrapDepth / _GlideRoot.stats.fifoWraps);
|
||||
}
|
||||
gdbg_info(80,"\t\tStalls: %ld\n", _GlideRoot.stats.fifoStalls);
|
||||
if (_GlideRoot.stats.fifoStalls > 0) {
|
||||
gdbg_info(80,"\t\tAvg Stall Depth: %g\n",
|
||||
(double)_GlideRoot.stats.fifoStallDepth / _GlideRoot.stats.fifoStalls);
|
||||
}
|
||||
#endif /* CVG_FIFO */
|
||||
}
|
||||
|
||||
#if !USE_PACKET_FIFO
|
||||
/*
|
||||
** fifoFree is kept in bytes, each fifo entry is 8 bytes, but since there
|
||||
** are headers involved, we assume an average of 2 registers per 8 bytes
|
||||
** or 4 bytes of registers stored in every fifo entry
|
||||
*/
|
||||
void
|
||||
_grReCacheFifo(FxI32 n)
|
||||
{
|
||||
#if !(GLIDE_PLATFORM & GLIDE_HW_H3)
|
||||
GR_DCL_GC;
|
||||
gc->state.fifoFree = ((grSstStatus() >> SST_MEMFIFOLEVEL_SHIFT) & 0xffff)<<2;
|
||||
|
||||
#if 0
|
||||
gc->state.fifoFree -= gc->hwDep.sst1Dep.swFifoLWM + n;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
FxI32 GR_CDECL
|
||||
_grSpinFifo(FxI32 n)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
do {
|
||||
_grReCacheFifo(n);
|
||||
} while (gc->state.fifoFree < 0);
|
||||
|
||||
return gc->state.fifoFree;
|
||||
}
|
||||
#endif /* !USE_PACKET_FIFO */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
**
|
||||
*/
|
||||
void
|
||||
_grSwizzleColor(GrColor_t *color)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
FxU32 red, green, blue, alpha;
|
||||
|
||||
switch(gc->state.color_format) {
|
||||
case GR_COLORFORMAT_ARGB:
|
||||
break;
|
||||
|
||||
case GR_COLORFORMAT_ABGR:
|
||||
red = (*color & 0x000000ff) << 16; /* 00RR0000 */
|
||||
blue = (*color & 0x00ff0000) >> 16; /* 000000BB */
|
||||
*color &= 0xff00ff00; /* AA00GG00 */
|
||||
*color |= (red | blue); /* AARRGGBB */
|
||||
break;
|
||||
|
||||
case GR_COLORFORMAT_RGBA:
|
||||
blue = (*color & 0x0000ff00) >> 8; /* 000000BB */
|
||||
green = (*color & 0x00ff0000) >> 8; /* 0000GG00 */
|
||||
red = (*color & 0xff000000) >> 8; /* 00RR0000 */
|
||||
alpha = (*color & 0x000000ff) << 24; /* AA000000 */
|
||||
*color = alpha | red | green | blue; /* AARRGGBB */
|
||||
break;
|
||||
|
||||
case GR_COLORFORMAT_BGRA:
|
||||
blue = (*color & 0xff000000) >> 24; /* 000000BB */
|
||||
green = (*color & 0x00ff0000) >> 8; /* 0000GG00 */
|
||||
red = (*color & 0x0000ff00) << 8; /* 00RR0000 */
|
||||
alpha = (*color & 0x000000ff) << 24; /* AA000000 */
|
||||
*color = alpha | red | green | blue; /* AARRGGBB */
|
||||
break;
|
||||
|
||||
default:
|
||||
GR_ASSERT(0);
|
||||
break;
|
||||
}
|
||||
} /* _grSwizzleColor */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grGlideGetVersion
|
||||
** NOTE: allow this to be called before grGlideInit()
|
||||
*/
|
||||
GR_DIENTRY(grGlideGetVersion, void, (char version[80]))
|
||||
{
|
||||
GDBG_INFO(87,"grGlideGetVersion(0x%x) => \"%s\"\n",version,glideIdent+3);
|
||||
GR_ASSERT(version != NULL);
|
||||
strcpy(version,glideIdent+3);
|
||||
} /* grGlideGetVersion */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grGlideGetState
|
||||
*/
|
||||
GR_DIENTRY(grGlideGetState, void, (GrState *state))
|
||||
{
|
||||
GR_BEGIN_NOFIFOCHECK("grGlideGetState",87);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(0x%x)\n",state);
|
||||
GR_ASSERT(state != NULL);
|
||||
|
||||
*state = gc->state;
|
||||
GR_END();
|
||||
} /* grGlideGetState */
|
||||
|
||||
#ifndef GLIDE_ALPHA
|
||||
/*---------------------------------------------------------------------------
|
||||
** grHints
|
||||
*/
|
||||
GR_DIENTRY(grHints, void, (GrHint_t hintType, FxU32 hints))
|
||||
{
|
||||
GR_BEGIN_NOFIFOCHECK("grHints",85);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,0x%x)\n",hintType,hints);
|
||||
|
||||
switch (hintType) {
|
||||
case GR_HINT_STWHINT:
|
||||
if (gc->state.paramHints != hints) {
|
||||
gc->state.paramHints = hints;
|
||||
_grUpdateParamIndex();
|
||||
}
|
||||
break;
|
||||
|
||||
case GR_HINT_FIFOCHECKHINT:
|
||||
/* swFifoLWM is kept internally in bytes, hints are in fifo entries */
|
||||
gc->state.checkFifo = hints;
|
||||
break;
|
||||
|
||||
case GR_HINT_FPUPRECISION:
|
||||
hints ? double_precision_asm() : single_precision_asm();
|
||||
break;
|
||||
|
||||
case GR_HINT_ALLOW_MIPMAP_DITHER:
|
||||
/* Regardless of the game hint, force the user selection */
|
||||
gc->state.allowLODdither = ((_GlideRoot.environment.texLodDither != 0) ||
|
||||
hints);
|
||||
break;
|
||||
|
||||
case GR_HINT_LFB_WRITE:
|
||||
{
|
||||
const FxU32 lfbRange = (((hints * gc->state.screen_height) + 0x1000UL) &
|
||||
~(0x1000UL - 1));
|
||||
|
||||
pciLinearRangeSetPermission((const FxU32)((const FxU8*)gc->base_ptr + 0x200000UL),
|
||||
0x200000UL,
|
||||
FXFALSE);
|
||||
pciLinearRangeSetPermission((const FxU32)gc->lfb_ptr,
|
||||
lfbRange,
|
||||
FXTRUE);
|
||||
pciLinearRangeSetPermission((const FxU32)((const FxU8*)gc->lfb_ptr + lfbRange),
|
||||
0x400000UL - lfbRange,
|
||||
FXFALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
case GR_HINT_LFB_PROTECT:
|
||||
pciLinearRangeSetPermission((const FxU32)((const FxU8*)gc->base_ptr + 0x200000UL),
|
||||
0x200000UL,
|
||||
FXTRUE);
|
||||
pciLinearRangeSetPermission((const FxU32)gc->lfb_ptr,
|
||||
0x400000,
|
||||
FXFALSE);
|
||||
break;
|
||||
|
||||
case GR_HINT_LFB_RESET:
|
||||
pciLinearRangeSetPermission((const FxU32)gc->base_ptr,
|
||||
0x1000000UL,
|
||||
FXTRUE);
|
||||
break;
|
||||
|
||||
default:
|
||||
GR_CHECK_F(myName, 1, "invalid hints type");
|
||||
}
|
||||
GR_END();
|
||||
} /* grHints */
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grGlideInit
|
||||
*/
|
||||
GR_DIENTRY(grGlideInit, void, (void))
|
||||
{
|
||||
GDBG_INIT();
|
||||
|
||||
GDBG_INFO(80,"grGlideInit()\n");
|
||||
_GlideInitEnvironment(); /* the main init code */
|
||||
FXUNUSED(*glideIdent);
|
||||
|
||||
#if GDBG_INFO_ON
|
||||
gdbg_error_set_callback(_grErrorCallback);
|
||||
#endif
|
||||
|
||||
grResetTriStats();
|
||||
|
||||
GDBG_INFO(281,"grGlideInit --done---------------------------------------\n");
|
||||
} /* grGlideInit */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grGlideShamelessPlug - grGlideShamelessPlug
|
||||
**
|
||||
** Returns:
|
||||
**
|
||||
** Notes:
|
||||
**
|
||||
*/
|
||||
GR_DIENTRY(grGlideShamelessPlug, void, (const FxBool mode))
|
||||
{
|
||||
GDBG_INFO(80,"grGlideShamelessPlug(%d)\n",mode);
|
||||
_GlideRoot.environment.shamelessPlug = mode;
|
||||
} /* grGlideShamelessPlug */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grResetTriStats - Set triangle counters to zero.
|
||||
*/
|
||||
GR_DIENTRY(grResetTriStats, void, (void))
|
||||
{
|
||||
GDBG_INFO(80,"grResetTriStats()\n");
|
||||
_GlideRoot.stats.bufferSwaps = 0;
|
||||
_GlideRoot.stats.linesDrawn = 0;
|
||||
_GlideRoot.stats.trisProcessed = 0;
|
||||
_GlideRoot.stats.trisDrawn = 0;
|
||||
_GlideRoot.stats.texDownloads = 0;
|
||||
_GlideRoot.stats.texBytes = 0;
|
||||
_GlideRoot.stats.palDownloads = 0;
|
||||
_GlideRoot.stats.palBytes = 0;
|
||||
} /* grResetTriStats */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grResetTriStats - Set triangle counters to zero.
|
||||
*/
|
||||
GR_DIENTRY(grTriStats, void, (FxU32 *trisProcessed, FxU32 *trisDrawn))
|
||||
{
|
||||
GDBG_INFO(80,"grTriStats() => %d %d\n",
|
||||
_GlideRoot.stats.trisProcessed,
|
||||
_GlideRoot.stats.trisDrawn);
|
||||
*trisProcessed = _GlideRoot.stats.trisProcessed;
|
||||
*trisDrawn = _GlideRoot.stats.trisDrawn;
|
||||
} /* grTriStats */
|
||||
|
||||
void GR_CDECL
|
||||
_grFence(void)
|
||||
{
|
||||
GDBG_INFO(120,"\t\t\t\t\t\t\tFENCE\n");
|
||||
P6FENCE;
|
||||
}
|
||||
@@ -1,581 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
**
|
||||
** 11 2/20/98 5:31p Peter
|
||||
** crybaby glide
|
||||
**
|
||||
** 10 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
*
|
||||
* 9 1/08/98 7:09p Peter
|
||||
* real hw stuff modulo makefile change
|
||||
*
|
||||
* 8 1/06/98 6:47p Atai
|
||||
* undo grSplash and remove gu routines
|
||||
*
|
||||
* 7 12/15/97 5:51p Atai
|
||||
* disable obsolete glide2 api for glide3
|
||||
*
|
||||
* 6 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 5 5/21/97 6:04a Peter
|
||||
*
|
||||
* 4 5/05/97 4:24p Pgj
|
||||
* Neuter guTexDownloadMipMap error message
|
||||
*
|
||||
* 3 3/18/97 9:07p Dow
|
||||
* Got rid of #$#%#$ // comments
|
||||
*
|
||||
* 2 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
*
|
||||
* 1 12/23/96 1:39p Dow
|
||||
* Changes for multiplatform
|
||||
**
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/* externals from ditex.c */
|
||||
extern FxU32 _grMipMapHostSize[][16];
|
||||
extern FxU32 _gr_aspect_index_table[];
|
||||
extern FxU32 _gr_aspect_xlate_table[];
|
||||
extern FxU32 _gr_evenOdd_xlate_table[];
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexAllocateMemory
|
||||
*/
|
||||
GR_DIENTRY(guTexAllocateMemory, GrMipMapId_t, ( GrChipID_t tmu,
|
||||
FxU8 odd_even_mask,
|
||||
int width, int height,
|
||||
GrTextureFormat_t format,
|
||||
GrMipMapMode_t mipmap_mode,
|
||||
GrLOD_t small_lod, GrLOD_t large_lod,
|
||||
GrAspectRatio_t aspect_ratio,
|
||||
GrTextureClampMode_t s_clamp_mode,
|
||||
GrTextureClampMode_t t_clamp_mode,
|
||||
GrTextureFilterMode_t minfilter_mode,
|
||||
GrTextureFilterMode_t magfilter_mode,
|
||||
float lod_bias,
|
||||
FxBool trilinear
|
||||
))
|
||||
{
|
||||
FxU32
|
||||
memrequired,
|
||||
memavail,
|
||||
baseAddress,
|
||||
tLod,
|
||||
texturemode,
|
||||
filterMode, /* filter mode bits */
|
||||
clampMode; /* clamp mode bits */
|
||||
|
||||
GrMipMapId_t
|
||||
mmid = (GrMipMapId_t) GR_NULL_MIPMAP_HANDLE;
|
||||
int
|
||||
int_lod_bias;
|
||||
GrTexInfo info;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("guTexAllocateMemory",99);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,%d, %d,%d, %d,%d, %d,%d,%d, %d,%d, %d,%d)\n",
|
||||
tmu,odd_even_mask,width,height,format,mipmap_mode,
|
||||
small_lod,large_lod,aspect_ratio,
|
||||
s_clamp_mode,t_clamp_mode, minfilter_mode,magfilter_mode);
|
||||
/*
|
||||
** The constants are actually reverse of each other so the following
|
||||
** test IS valid!
|
||||
*/
|
||||
GR_CHECK_F(myName, small_lod < large_lod, "smallest_lod is larger than large_lod");
|
||||
|
||||
info.smallLod = small_lod;
|
||||
info.largeLod = large_lod;
|
||||
info.aspectRatio = aspect_ratio;
|
||||
info.format = format;
|
||||
memrequired = grTexTextureMemRequired(odd_even_mask, &info);
|
||||
|
||||
/*
|
||||
** Make sure to not cross 2 MByte texture boundry
|
||||
*/
|
||||
if ((gc->tmu_state[tmu].freemem_base < 0x200000) &&
|
||||
(gc->tmu_state[tmu].freemem_base + memrequired > 0x200000))
|
||||
gc->tmu_state[tmu].freemem_base = 0x200000;
|
||||
|
||||
/*
|
||||
** If we have enough memory and a free mip map handle then go for it
|
||||
*/
|
||||
memavail = guTexMemQueryAvail( tmu );
|
||||
|
||||
if ( memavail < memrequired )
|
||||
return (GrMipMapId_t) GR_NULL_MIPMAP_HANDLE;
|
||||
|
||||
if (gc->mm_table.free_mmid >= MAX_MIPMAPS_PER_SST )
|
||||
return (GrMipMapId_t) GR_NULL_MIPMAP_HANDLE;
|
||||
|
||||
/*
|
||||
** Allocate the mip map id
|
||||
*/
|
||||
mmid = gc->mm_table.free_mmid++;
|
||||
|
||||
/*
|
||||
** calculate baseAddress (where LOD 0 would go)
|
||||
*/
|
||||
baseAddress = _grTexCalcBaseAddress( gc->tmu_state[tmu].freemem_base,
|
||||
large_lod,
|
||||
aspect_ratio,
|
||||
format,
|
||||
odd_even_mask );
|
||||
|
||||
GDBG_INFO(gc->myLevel," baseAddress = 0x%x (in bytes)\n",baseAddress);
|
||||
|
||||
/*
|
||||
** reduce available memory to reflect allocation
|
||||
*/
|
||||
gc->tmu_state[tmu].freemem_base += memrequired;
|
||||
|
||||
/*
|
||||
** Create the tLOD register value for this mip map
|
||||
*/
|
||||
int_lod_bias = _grTexFloatLODToFixedLOD( lod_bias );
|
||||
tLod = mipmap_mode==GR_MIPMAP_DISABLE ? large_lod : small_lod;
|
||||
tLod = SST_TLOD_MINMAX_INT(large_lod,tLod);
|
||||
tLod |= _gr_evenOdd_xlate_table[odd_even_mask];
|
||||
tLod |= _gr_aspect_xlate_table[aspect_ratio];
|
||||
tLod |= int_lod_bias << SST_LODBIAS_SHIFT;
|
||||
filterMode = (
|
||||
(minfilter_mode == GR_TEXTUREFILTER_BILINEAR ? SST_TMINFILTER : 0) |
|
||||
(magfilter_mode == GR_TEXTUREFILTER_BILINEAR ? SST_TMAGFILTER : 0)
|
||||
);
|
||||
|
||||
clampMode = (
|
||||
(s_clamp_mode == GR_TEXTURECLAMP_CLAMP ? SST_TCLAMPS : 0) |
|
||||
(t_clamp_mode == GR_TEXTURECLAMP_CLAMP ? SST_TCLAMPT : 0)
|
||||
);
|
||||
|
||||
/*
|
||||
** Create the tTextureMode register value for this mip map
|
||||
*/
|
||||
texturemode = ( format << SST_TFORMAT_SHIFT );
|
||||
texturemode |= SST_TCLAMPW;
|
||||
texturemode |= SST_TPERSP_ST;
|
||||
texturemode |= filterMode;
|
||||
texturemode |= clampMode;
|
||||
|
||||
if ( mipmap_mode == GR_MIPMAP_NEAREST_DITHER )
|
||||
texturemode |= SST_TLODDITHER;
|
||||
|
||||
if ( trilinear ) {
|
||||
texturemode |= SST_TRILINEAR;
|
||||
|
||||
if ( odd_even_mask & GR_MIPMAPLEVELMASK_ODD )
|
||||
tLod |= SST_LOD_ODD;
|
||||
|
||||
if ( odd_even_mask != GR_MIPMAPLEVELMASK_BOTH )
|
||||
tLod |= SST_LOD_TSPLIT;
|
||||
}
|
||||
|
||||
/*
|
||||
** Fill in the mm_table data for this mip map
|
||||
*/
|
||||
gc->mm_table.data[mmid].format = format;
|
||||
gc->mm_table.data[mmid].mipmap_mode = mipmap_mode;
|
||||
gc->mm_table.data[mmid].magfilter_mode = magfilter_mode;
|
||||
gc->mm_table.data[mmid].minfilter_mode = minfilter_mode;
|
||||
gc->mm_table.data[mmid].s_clamp_mode = s_clamp_mode;
|
||||
gc->mm_table.data[mmid].t_clamp_mode = t_clamp_mode;
|
||||
gc->mm_table.data[mmid].tLOD = tLod;
|
||||
gc->mm_table.data[mmid].tTextureMode = texturemode;
|
||||
gc->mm_table.data[mmid].lod_bias = int_lod_bias;
|
||||
gc->mm_table.data[mmid].lod_min = small_lod;
|
||||
gc->mm_table.data[mmid].lod_max = large_lod;
|
||||
gc->mm_table.data[mmid].tmu = tmu;
|
||||
gc->mm_table.data[mmid].odd_even_mask = odd_even_mask;
|
||||
gc->mm_table.data[mmid].tmu_base_address = baseAddress;
|
||||
gc->mm_table.data[mmid].trilinear = trilinear;
|
||||
gc->mm_table.data[mmid].aspect_ratio = aspect_ratio;
|
||||
gc->mm_table.data[mmid].data = 0;
|
||||
/* gc->mm_table.data[mmid].ncc_table = 0; */
|
||||
gc->mm_table.data[mmid].sst = _GlideRoot.current_sst;
|
||||
gc->mm_table.data[mmid].valid = FXTRUE;
|
||||
gc->mm_table.data[mmid].width = width;
|
||||
gc->mm_table.data[mmid].height = height;
|
||||
|
||||
GR_RETURN(mmid);
|
||||
} /* guTexAllocateMemory */
|
||||
|
||||
static void
|
||||
_guTexRebuildRegisterShadows( GrMipMapId_t mmid )
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GrMipMapInfo *mminfo = &gc->mm_table.data[mmid];
|
||||
int texturemode = 0;
|
||||
int tLod = 0;
|
||||
FxU32
|
||||
filterMode, /* filter mode bits of texturemode */
|
||||
clampMode; /* clamp mode bits of texturemode */
|
||||
|
||||
/* build filterMode */
|
||||
filterMode = (
|
||||
(mminfo->minfilter_mode == GR_TEXTUREFILTER_BILINEAR ? SST_TMINFILTER : 0) |
|
||||
(mminfo->magfilter_mode == GR_TEXTUREFILTER_BILINEAR ? SST_TMAGFILTER : 0)
|
||||
);
|
||||
clampMode = (
|
||||
(mminfo->s_clamp_mode == GR_TEXTURECLAMP_CLAMP ? SST_TCLAMPS : 0) |
|
||||
(mminfo->t_clamp_mode == GR_TEXTURECLAMP_CLAMP ? SST_TCLAMPT : 0)
|
||||
);
|
||||
|
||||
/*
|
||||
** build up tTextureMode
|
||||
*/
|
||||
texturemode |= ( mminfo->format << SST_TFORMAT_SHIFT );
|
||||
texturemode |= SST_TCLAMPW;
|
||||
texturemode |= SST_TPERSP_ST;
|
||||
texturemode |= filterMode;
|
||||
texturemode |= clampMode;
|
||||
|
||||
if ( mminfo->mipmap_mode == GR_MIPMAP_NEAREST_DITHER )
|
||||
texturemode |= SST_TLODDITHER;
|
||||
|
||||
if ( mminfo->trilinear )
|
||||
texturemode |= SST_TRILINEAR;
|
||||
|
||||
/*
|
||||
** build up tLOD
|
||||
*/
|
||||
tLod = mminfo->mipmap_mode == GR_MIPMAP_DISABLE ? mminfo->lod_max : mminfo->lod_min;
|
||||
tLod = SST_TLOD_MINMAX_INT(mminfo->lod_max,tLod);
|
||||
tLod |= _gr_evenOdd_xlate_table[mminfo->odd_even_mask];
|
||||
tLod |= _gr_aspect_xlate_table[mminfo->aspect_ratio];
|
||||
tLod |= mminfo->lod_bias << SST_LODBIAS_SHIFT;
|
||||
|
||||
/*
|
||||
** assign them
|
||||
*/
|
||||
mminfo->tTextureMode = texturemode;
|
||||
mminfo->tLOD = tLod;
|
||||
} /* guTexRebuildRegisterShadows */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexChangeAttributes
|
||||
*/
|
||||
GR_DIENTRY(guTexChangeAttributes, FxBool, ( GrMipMapId_t mmid,
|
||||
int width, int height,
|
||||
GrTextureFormat_t fmt,
|
||||
GrMipMapMode_t mm_mode,
|
||||
GrLOD_t smallest_lod, GrLOD_t largest_lod,
|
||||
GrAspectRatio_t aspect,
|
||||
GrTextureClampMode_t s_clamp_mode,
|
||||
GrTextureClampMode_t t_clamp_mode,
|
||||
GrTextureFilterMode_t minFilterMode,
|
||||
GrTextureFilterMode_t magFilterMode
|
||||
))
|
||||
{
|
||||
GrMipMapInfo *mminfo;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("guTexChangeAttributes",88);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d, %d,%d, %d,%d, %d,%d,%d, %d,%d, %d,%d)\n",
|
||||
mmid,width,height,fmt,mm_mode,
|
||||
smallest_lod,largest_lod,aspect,
|
||||
s_clamp_mode,t_clamp_mode, minFilterMode,magFilterMode);
|
||||
/*
|
||||
** Make sure that mmid is not NULL
|
||||
*/
|
||||
if ( mmid == GR_NULL_MIPMAP_HANDLE ) {
|
||||
GR_RETURN(FXFALSE);
|
||||
}
|
||||
|
||||
mminfo = &gc->mm_table.data[mmid];
|
||||
|
||||
/*
|
||||
** Fill in the mm_table data for this mip map
|
||||
*/
|
||||
if ( fmt != -1 )
|
||||
mminfo->format = fmt;
|
||||
|
||||
if ( mm_mode != -1 )
|
||||
mminfo->mipmap_mode = mm_mode;
|
||||
|
||||
if ( smallest_lod != -1 )
|
||||
mminfo->lod_min = smallest_lod;
|
||||
if ( largest_lod != -1 )
|
||||
mminfo->lod_max = largest_lod;
|
||||
if ( minFilterMode != -1 )
|
||||
mminfo->minfilter_mode = minFilterMode;
|
||||
if ( magFilterMode != -1 )
|
||||
mminfo->magfilter_mode = magFilterMode;
|
||||
if ( s_clamp_mode != -1 )
|
||||
mminfo->s_clamp_mode = s_clamp_mode;
|
||||
if ( t_clamp_mode != -1 )
|
||||
mminfo->t_clamp_mode = t_clamp_mode;
|
||||
if ( aspect != -1 )
|
||||
mminfo->aspect_ratio = aspect;
|
||||
if ( width != -1 )
|
||||
mminfo->width = width;
|
||||
if ( height != -1 )
|
||||
mminfo->height = height;
|
||||
|
||||
_guTexRebuildRegisterShadows( mmid );
|
||||
GR_RETURN(FXTRUE);
|
||||
} /* guTexChangeAttributes */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grTexCombineFunction - obsolete
|
||||
**
|
||||
*/
|
||||
GR_DIENTRY(grTexCombineFunction, void,
|
||||
(GrChipID_t tmu, GrTextureCombineFnc_t tc))
|
||||
{
|
||||
guTexCombineFunction( tmu, tc );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexCombineFunction
|
||||
**
|
||||
** Sets the texture combine function. For a dual TMU system this function
|
||||
** will configure the TEXTUREMODE registers as appropriate. For a
|
||||
** single TMU system this function will configure TEXTUREMODE if
|
||||
** possible, or defer operations until grDrawTriangle() is called.
|
||||
*/
|
||||
GR_DIENTRY(guTexCombineFunction, void,
|
||||
(GrChipID_t tmu, GrTextureCombineFnc_t tc))
|
||||
{
|
||||
GDBG_INFO(99,"guTexCombineFunction(%d,%d)\n",tmu,tc);
|
||||
switch ( tc ) {
|
||||
case GR_TEXTURECOMBINE_ZERO:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_DECAL:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_ONE:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE, FXTRUE, FXTRUE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_ADD:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, GR_COMBINE_FACTOR_ONE, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_MULTIPLY:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_LOCAL, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_DETAIL:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR,
|
||||
GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_DETAIL_OTHER:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_DETAIL_FACTOR,
|
||||
GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_DETAIL_FACTOR, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_TRILINEAR_ODD:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION,
|
||||
GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_TRILINEAR_EVEN:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_LOD_FRACTION,
|
||||
GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_LOD_FRACTION, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_SUBTRACT:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, GR_COMBINE_FACTOR_ONE, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_TEXTURECOMBINE_OTHER:
|
||||
grTexCombine( tmu, GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_ONE, FXFALSE, FXFALSE );
|
||||
break;
|
||||
|
||||
default:
|
||||
GrErrorCallback( "guTexCombineFunction: Unsupported function", FXTRUE );
|
||||
break;
|
||||
}
|
||||
} /* guTexCombineFunction */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexDownloadMipMap
|
||||
**
|
||||
** Downloads a mip map (previously allocated with guTexAllocateMemory) to
|
||||
** the hardware using the given data and ncctble. The "data" is assumed
|
||||
** to be in row major order from largest mip map to smallest mip map.
|
||||
*/
|
||||
GR_DIENTRY(guTexDownloadMipMap, void,
|
||||
(GrMipMapId_t mmid, const void *src, const GuNccTable
|
||||
*ncc_table ) )
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GrLOD_t lod;
|
||||
const void *ptr = src;
|
||||
|
||||
GDBG_INFO(99,"guTexDownloadMipMap(%d,0x%x,0x%x)\n",mmid,src,ncc_table);
|
||||
GR_ASSERT(gc != NULL);
|
||||
GR_ASSERT(src != NULL);
|
||||
GR_CHECK_F("guTexDownloadMipMap",
|
||||
( mmid == GR_NULL_MIPMAP_HANDLE ) || ( mmid >= gc->mm_table.free_mmid ),
|
||||
"invalid mip map handle passed");
|
||||
|
||||
#if 0 /* Fixme!!! XXX ??? */
|
||||
GR_CHECK_F("guTexDownloadMipMap",
|
||||
gc->mm_table.data[mmid].format == GR_TEXFMT_P_8,
|
||||
"guTex* does not support palletted textures - use grTex* instead");
|
||||
#endif /* 0 */
|
||||
|
||||
/*
|
||||
** Bind data and ncc table to this mip map
|
||||
*/
|
||||
gc->mm_table.data[mmid].data = (void *) ptr;
|
||||
if (gc->mm_table.data[mmid].format == GR_TEXFMT_YIQ_422)
|
||||
gc->mm_table.data[mmid].ncc_table = *ncc_table;
|
||||
|
||||
/*
|
||||
** Start downloading mip map levels, note that ptr is updated by the caller
|
||||
*/
|
||||
for ( lod = gc->mm_table.data[mmid].lod_max; lod <= gc->mm_table.data[mmid].lod_min; lod++ ) {
|
||||
guTexDownloadMipMapLevel( mmid, lod, &ptr );
|
||||
}
|
||||
} /* guTexDownloadMipMap */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexDownloadMipMapLevel
|
||||
**
|
||||
** Downloads a single mip map level to a mip map. "src" is considered to be
|
||||
** row major data of the correct aspect ratio and format.
|
||||
*/
|
||||
GR_DIENTRY(guTexDownloadMipMapLevel, void,
|
||||
(GrMipMapId_t mmid, GrLOD_t lod,
|
||||
const void **src_base))
|
||||
{
|
||||
FxU32 i;
|
||||
const GrMipMapInfo *mminfo;
|
||||
GR_DCL_GC;
|
||||
|
||||
GDBG_INFO(99,"guTexDownloadMipMapLevel(%d,%d,0x%x)\n",mmid,lod,src_base);
|
||||
GR_ASSERT(src_base != NULL);
|
||||
mminfo = &gc->mm_table.data[mmid];
|
||||
GR_CHECK_F( "guTexDownloadMipMapLevel",
|
||||
( lod > mminfo->lod_min ) || ( lod < mminfo->lod_max ),
|
||||
"specified lod is out of range");
|
||||
|
||||
/* GMT: replace with array access */
|
||||
/* download this level */
|
||||
i = _grTexCalcBaseAddress( 0,
|
||||
mminfo->lod_max,
|
||||
mminfo->aspect_ratio,
|
||||
mminfo->format,
|
||||
mminfo->odd_even_mask);
|
||||
grTexDownloadMipMapLevel( mminfo->tmu,
|
||||
mminfo->tmu_base_address - i,
|
||||
lod,
|
||||
mminfo->lod_max,
|
||||
mminfo->aspect_ratio,
|
||||
mminfo->format,
|
||||
mminfo->odd_even_mask,
|
||||
(void *)*src_base );
|
||||
|
||||
/* update src_base to point to next mipmap level */
|
||||
*src_base = (void *) (((FxU32)*src_base) +
|
||||
(_grMipMapHostSize[_gr_aspect_index_table[mminfo->aspect_ratio]][lod]
|
||||
<< (mminfo->format>=GR_TEXFMT_16BIT)));
|
||||
|
||||
} /* guTexDownloadMipmapLevel */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexGetCurrentMipMap
|
||||
*/
|
||||
GR_DIENTRY(guTexGetCurrentMipMap, GrMipMapId_t, ( GrChipID_t tmu ))
|
||||
{
|
||||
#define FN_NAME "guTexGetCurrentMipMap"
|
||||
GR_BEGIN_NOFIFOCHECK("guTexGetCurrentMipMap",99);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",tmu);
|
||||
GR_CHECK_TMU(FN_NAME, tmu );
|
||||
|
||||
GR_RETURN(gc->state.current_mm[tmu]);
|
||||
#undef FN_NAME
|
||||
} /* guTexGetCurrentMipMap */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexGetMipMapInfo
|
||||
*/
|
||||
GR_DIENTRY(guTexGetMipMapInfo, GrMipMapInfo *, ( GrMipMapId_t mmid ))
|
||||
{
|
||||
GR_BEGIN_NOFIFOCHECK("guTexGetMipMapInfo",99);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d) => 0x%x\n",mmid,&gc->mm_table.data[mmid]);
|
||||
return &( gc->mm_table.data[mmid] );
|
||||
} /* guTexGetMipMapInfo */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexMemQueryAvail
|
||||
**
|
||||
** returns the amount of available texture memory on a specified TMU.
|
||||
*/
|
||||
GR_DIENTRY(guTexMemQueryAvail, FxU32, ( GrChipID_t tmu ))
|
||||
{
|
||||
#define FN_NAME "guTexMemQueryAvail"
|
||||
GR_BEGIN_NOFIFOCHECK("guTexMemQueryAvail",99);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",tmu);
|
||||
GR_CHECK_TMU(FN_NAME, tmu );
|
||||
GR_RETURN(gc->tmu_state[tmu].total_mem - gc->tmu_state[tmu].freemem_base);
|
||||
#undef FN_NAME
|
||||
} /* guTexQueryMemAvail */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexMemReset
|
||||
**
|
||||
** Clears out texture buffer memory.
|
||||
*/
|
||||
GR_DIENTRY(guTexMemReset, void, ( void ))
|
||||
{
|
||||
int i;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("guTexMemReset",99);
|
||||
GDBG_INFO_MORE(gc->myLevel,"()\n");
|
||||
|
||||
memset( gc->mm_table.data, 0, sizeof( gc->mm_table.data ) );
|
||||
gc->mm_table.free_mmid = 0;
|
||||
|
||||
for ( i = 0; i < gc->num_tmu; i++ ) {
|
||||
gc->state.current_mm[i] = (GrMipMapId_t) GR_NULL_MIPMAP_HANDLE;
|
||||
gc->tmu_state[i].freemem_base = 0;
|
||||
gc->tmu_state[i].ncc_mmids[0] =
|
||||
gc->tmu_state[i].ncc_mmids[1] = GR_NULL_MIPMAP_HANDLE;
|
||||
gc->tmu_state[i].ncc_table[0] =
|
||||
gc->tmu_state[i].ncc_table[1] = 0;
|
||||
}
|
||||
GR_END();
|
||||
} /* guTexMemReset */
|
||||
|
||||
@@ -1,216 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:08 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 22 4/21/98 10:05a Peter
|
||||
** grSstSelect cleanup (Thanks John/Rufus)
|
||||
**
|
||||
** 21 3/17/98 6:50p Peter
|
||||
** sli paired vs active
|
||||
**
|
||||
** 20 2/24/98 10:15a Peter
|
||||
** oem dll muckage
|
||||
**
|
||||
** 19 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
*
|
||||
* 18 12/17/97 4:05p Atai
|
||||
* added grChromaRange(), grGammaCorrecionRGB(), grRest(), and grGet()
|
||||
* functions
|
||||
*
|
||||
* 17 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 16 11/19/97 2:49p Peter
|
||||
* env vars in registry for win32
|
||||
*
|
||||
* 15 11/18/97 4:36p Peter
|
||||
* chipfield stuff cleanup and w/ direct writes
|
||||
*
|
||||
* 14 10/31/97 9:15a Peter
|
||||
* only lie about v2 boards
|
||||
*
|
||||
* 13 10/31/97 8:53a Peter
|
||||
* last lying change, really
|
||||
*
|
||||
* 12 9/05/97 5:29p Peter
|
||||
* changes for direct hw
|
||||
*
|
||||
* 11 6/20/97 9:56a Peter
|
||||
* better lines/pts, hopefully
|
||||
*
|
||||
* 10 6/02/97 4:09p Peter
|
||||
* Compile w/ gcc for Dural
|
||||
*
|
||||
* 9 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 8 5/21/97 6:04a Peter
|
||||
*
|
||||
* 7 5/02/97 2:07p Pgj
|
||||
* grSstScreenWidth/Height now FxU32
|
||||
*
|
||||
* 6 3/17/97 6:25a Jdt
|
||||
* Added initDeviceSelect to grSstSelect()
|
||||
*
|
||||
* 5 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
*
|
||||
* 4 3/04/97 9:08p Dow
|
||||
*
|
||||
* 3 1/18/97 11:39p Dow
|
||||
* Changed location of _curGCFuncs
|
||||
*
|
||||
* 2 1/16/97 3:39p Dow
|
||||
* Added ref to _curGCFuncs during grSstSelect()
|
||||
*
|
||||
* 1 12/23/96 1:39p Dow
|
||||
* Changes for multiplatform
|
||||
**
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <3dfx.h>
|
||||
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grSstQueryBoards
|
||||
**
|
||||
** NOTE: it is OK to call this routine before grGlideInit
|
||||
*/
|
||||
GR_DIENTRY(grSstQueryBoards, FxBool, ( GrHwConfiguration *hwc ))
|
||||
{
|
||||
GDBG_INIT();
|
||||
GDBG_INFO(80,"grSstQueryBoards(0x%x)\n",hwc);
|
||||
|
||||
#if 1 /*GLIDE_INIT_HAL*/
|
||||
hwc->num_sst = (_grSstDetectResources()
|
||||
? _GlideRoot.hwConfig.num_sst
|
||||
: 0);
|
||||
#else /* !GLIDE_INIT_HAL */
|
||||
hwc->num_sst = sst1InitNumBoardsInSystem();
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
|
||||
return FXTRUE;
|
||||
} /* grSstQueryBoards */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grSstQueryHardware
|
||||
**
|
||||
*/
|
||||
GR_DIENTRY(grSstQueryHardware, FxBool, ( GrHwConfiguration *hwc ))
|
||||
{
|
||||
FxBool retVal;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("grSstQueryHardware",80);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(0x%x)\n",hwc);
|
||||
|
||||
/* init and copy the data back to the user's structure */
|
||||
retVal = _GlideRoot.hwConfig.num_sst > 0;
|
||||
*hwc = _GlideRoot.hwConfig;
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG)
|
||||
/* Lie that we are an sst1 for backwards compatability */
|
||||
{
|
||||
int i;
|
||||
const GrSstType reportType = ((GETENV("FX_GLIDE_REPORT_REAL_HW") == NULL)
|
||||
? GR_SSTTYPE_VOODOO
|
||||
: GR_SSTTYPE_Voodoo2);
|
||||
|
||||
for(i = 0; i < _GlideRoot.hwConfig.num_sst; i++) {
|
||||
if (hwc->SSTs[i].type == GR_SSTTYPE_Voodoo2) hwc->SSTs[i].type = reportType;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
GR_RETURN(retVal);
|
||||
} /* grSstQueryHardware */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grSstSelect
|
||||
*/
|
||||
GR_DIENTRY(grSstSelect, void, ( int which ))
|
||||
{
|
||||
GR_BEGIN_NOFIFOCHECK("grSstSelect",80);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",which);
|
||||
|
||||
if ( which >= _GlideRoot.hwConfig.num_sst )
|
||||
GrErrorCallback( "grSstSelect: non-existent SST", FXTRUE );
|
||||
|
||||
_GlideRoot.current_sst = _GlideRoot.gcMap[which];
|
||||
_GlideRoot.curGC = &_GlideRoot.GCs[_GlideRoot.current_sst];
|
||||
|
||||
#ifdef GLIDE_MULTIPLATFORM
|
||||
_GlideRoot.curGCFuncs = _GlideRoot.curGC->gcFuncs;
|
||||
#endif
|
||||
|
||||
GR_END();
|
||||
} /* grSstSelect */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grSstScreenWidth
|
||||
*/
|
||||
GR_DIENTRY(grSstScreenWidth, FxU32, (void))
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GR_ASSERT(gc != NULL);
|
||||
return gc->state.screen_width;
|
||||
} /* grSstScreenWidth */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grSstScreenHeight
|
||||
*/
|
||||
GR_DIENTRY(grSstScreenHeight, FxU32, (void))
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GR_ASSERT(gc != NULL);
|
||||
return gc->state.screen_height;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grSstVidMode - override args to grSstOpen()
|
||||
*/
|
||||
GR_DIENTRY(grSstVidMode, void, (FxU32 whichSst, FxVideoTimingInfo* vidTimings))
|
||||
{
|
||||
GDBG_INFO(80,"grSstVidMode(%d,0x%x)\n",whichSst,vidTimings);
|
||||
#ifdef GLIDE_DEBUG
|
||||
if (whichSst >= MAX_NUM_SST) {
|
||||
char errStr[1028];
|
||||
sprintf(errStr, "grSstVidMode: %ld greater than MAX_NUM_SST (%d)\n",
|
||||
whichSst, MAX_NUM_SST);
|
||||
|
||||
GrErrorCallback(errStr, FXTRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
_GlideRoot.GCs[whichSst].vidTimings = vidTimings;
|
||||
} /* grSstVidMode */
|
||||
@@ -1,943 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 17 1/13/98 12:42p Atai
|
||||
* fixed grtexinfo, grVertexLayout, and draw triangle
|
||||
*
|
||||
* 16 1/10/98 4:01p Atai
|
||||
* inititialize vertex layout, viewport, added defines
|
||||
*
|
||||
* 15 1/05/98 6:06p Atai
|
||||
* glide extension stuff
|
||||
*
|
||||
* 14 12/17/97 4:05p Atai
|
||||
* added grChromaRange(), grGammaCorrecionRGB(), grRest(), and grGet()
|
||||
* functions
|
||||
*
|
||||
* 13 12/16/97 11:38a Atai
|
||||
* added grChromaRange()
|
||||
*
|
||||
* 12 12/15/97 5:52p Atai
|
||||
* disable obsolete glide2 api for glide3
|
||||
*
|
||||
* 10 12/12/97 1:30p Atai
|
||||
* remove fp z buffer
|
||||
*
|
||||
* 8 12/08/97 10:44a Atai
|
||||
* added entry point for grCoordinateSpace(), grDepthRange(), and
|
||||
* grViewport()
|
||||
*
|
||||
* 7 11/13/97 4:38p Atai
|
||||
* invalidate lfbMode and c0c1
|
||||
*
|
||||
* 6 11/10/97 5:20p Atai
|
||||
* added factor for grAlphaCombine and remove extra _grChromakeyMode
|
||||
*
|
||||
* 5 11/07/97 11:22a Atai
|
||||
* remove GR_*_SMOOTH. use GR_SMOOTH
|
||||
*
|
||||
* 4 10/15/97 7:33a Dow
|
||||
* Made _grValidateState use central routine for writing data
|
||||
*
|
||||
* 3 10/14/97 4:18p Atai
|
||||
* added grEnable and grDisable
|
||||
*
|
||||
* 2 10/10/97 2:57p Dow
|
||||
* Minor adjustments
|
||||
*
|
||||
* 1 10/09/97 5:19p Dow
|
||||
* State Monster file
|
||||
*/
|
||||
|
||||
#ifdef GLIDE3
|
||||
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/*=============================================================================
|
||||
** Replacement state routines.
|
||||
**
|
||||
** These routines store away their arguments, and mark a piece of glide state
|
||||
** as invalid. The next time a rendering primitive is called, the state will
|
||||
** be invalid, and grValidateState will be called. See that routine for more
|
||||
** info.
|
||||
**===========================================================================*/
|
||||
|
||||
/*
|
||||
Some macros for use in this file only
|
||||
*/
|
||||
|
||||
#define STOREARG(function, arg) \
|
||||
gc->state.stateArgs.##function##Args.arg = arg
|
||||
|
||||
#define LOADARG(function, arg) \
|
||||
gc->state.stateArgs.##function##Args.arg
|
||||
|
||||
#define INVALIDATE(regset) \
|
||||
gc->state.invalid |= ##regset##BIT
|
||||
|
||||
#define NOTVALID(regset) \
|
||||
(gc->state.invalid & ##regset##BIT)
|
||||
|
||||
#define SETVALID(regset) \
|
||||
(gc->state.invalid &= ~(##regset##BIT))
|
||||
|
||||
#define ENABLEMODE(mode) \
|
||||
gc->state.grEnableArgs.##mode## = GR_MODE_ENABLE;
|
||||
|
||||
#define DISABLEMODE(mode) \
|
||||
gc->state.grEnableArgs.##mode## = GR_MODE_DISABLE;
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grAlphaBlendFunction
|
||||
Date: 06-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
Inform Glide that the Alpha Blend Function has been modified.
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grAlphaBlendFunction, void , (GrAlphaBlendFnc_t rgb_sf, GrAlphaBlendFnc_t rgb_df, GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df) )
|
||||
{
|
||||
#define FN_NAME "grAlphaBlendFunction"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 87);
|
||||
|
||||
/* Invalidate AlphaMode */
|
||||
INVALIDATE(alphaMode);
|
||||
|
||||
STOREARG(grAlphaBlendFunction, rgb_sf);
|
||||
STOREARG(grAlphaBlendFunction, rgb_df);
|
||||
STOREARG(grAlphaBlendFunction, alpha_sf);
|
||||
STOREARG(grAlphaBlendFunction, alpha_df);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grAlphaBlendFunction */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grAlphaTestFunction
|
||||
Date: 06-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grAlphaTestFunction, void , (GrCmpFnc_t fnc) )
|
||||
{
|
||||
#define FN_NAME "grAlphaTestFunction"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 87);
|
||||
|
||||
/* Invalidate AlphaMode */
|
||||
INVALIDATE(alphaMode);
|
||||
|
||||
STOREARG(grAlphaTestFunction, fnc);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grAlphaTestFunction */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grAlphaTestReferenceValue
|
||||
Date: 06-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grAlphaTestReferenceValue, void , (GrAlpha_t value) )
|
||||
{
|
||||
#define FN_NAME "grAlphaTestReferenceValue"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 87);
|
||||
|
||||
INVALIDATE(alphaMode);
|
||||
|
||||
STOREARG(grAlphaTestReferenceValue,value);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grAlphaTestReferenceValue */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grAlphaCombine
|
||||
Date: 06-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grAlphaCombine, void ,
|
||||
(GrCombineFunction_t function, GrCombineFactor_t factor,
|
||||
GrCombineLocal_t local, GrCombineOther_t other, FxBool invert) )
|
||||
{
|
||||
#define FN_NAME "grAlphaCombine"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(fbzColorPath);
|
||||
|
||||
STOREARG(grAlphaCombine, function);
|
||||
STOREARG(grAlphaCombine, factor);
|
||||
STOREARG(grAlphaCombine, local);
|
||||
STOREARG(grAlphaCombine, other);
|
||||
STOREARG(grAlphaCombine, invert);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grAlphaCombine */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grAlphaControlsITRGBLighting
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grAlphaControlsITRGBLighting, void , (FxBool enable) )
|
||||
{
|
||||
#define FN_NAME "grAlphaControlsITRGBLighting"
|
||||
GR_BEGIN_NOFIFOCHECK("grAlphaControlsITRGBLighting",85);
|
||||
|
||||
INVALIDATE(fbzColorPath);
|
||||
|
||||
STOREARG(grAlphaControlsITRGBLighting, enable);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grAlphaControlsITRGBLighting */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grColorCombine
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grColorCombine, void , (GrCombineFunction_t function,
|
||||
GrCombineFactor_t factor,
|
||||
GrCombineLocal_t local,
|
||||
GrCombineOther_t other, FxBool invert) )
|
||||
{
|
||||
#define FN_NAME "grColorCombine"
|
||||
GR_BEGIN_NOFIFOCHECK("grColorCombine",85);
|
||||
|
||||
INVALIDATE(fbzColorPath);
|
||||
|
||||
STOREARG(grColorCombine, function);
|
||||
STOREARG(grColorCombine, factor);
|
||||
STOREARG(grColorCombine, local);
|
||||
STOREARG(grColorCombine, other);
|
||||
STOREARG(grColorCombine, invert);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grColorCombine */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grChromakeyMode
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grChromakeyMode, void , (GrChromakeyMode_t mode) )
|
||||
{
|
||||
#define FN_NAME "grChromakeyMode"
|
||||
GR_BEGIN_NOFIFOCHECK("grChromakeyMode",85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grChromakeyMode, mode);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grChromakeyMode */
|
||||
|
||||
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grChromaModeExt
|
||||
Date: 05-Jan-98
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
void _grChromaModeExt(GrChromakeyMode_t mode)
|
||||
{
|
||||
#define FN_NAME "_grChromaModeExt"
|
||||
GR_BEGIN_NOFIFOCHECK("_grChromaModeExt",85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grChromakeyMode, mode);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* _grChromaModeExt */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: _grChromaRangeExt
|
||||
Date: 15-Dec-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
void _grChromaRangeExt(GrColor_t color, GrColor_t range, GrChromaRangeMode_t mode)
|
||||
{
|
||||
#define FN_NAME "_grChromaRangeExt"
|
||||
GR_BEGIN_NOFIFOCHECK("_grChromaRangeExt",85);
|
||||
|
||||
GR_CHECK_F(myName,
|
||||
(_GlideRoot.hwConfig.SSTs[_GlideRoot.current_sst].type != GR_SSTTYPE_Voodoo2),
|
||||
"grChromaRange not supported.");
|
||||
|
||||
INVALIDATE(chromaKey);
|
||||
|
||||
STOREARG(grChromakeyValue, color);
|
||||
STOREARG(grChromaRange, range);
|
||||
STOREARG(grChromaRange, mode);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* _grChromaRangeExt */
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grChromakeyValue
|
||||
Date: 09-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_ENTRY(grChromakeyValue, void , (GrColor_t color) )
|
||||
{
|
||||
#define FN_NAME "grChromakeyValue"
|
||||
GR_BEGIN_NOFIFOCHECK("grChromakeyMode",85);
|
||||
|
||||
INVALIDATE(chromaKey);
|
||||
|
||||
STOREARG(grChromakeyValue, color);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grChromakeyValue */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDeptMask
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDepthMask, void , (FxBool enable) )
|
||||
{
|
||||
#define FN_NAME "grDepthMask"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grDepthMask, enable);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grDeptMask */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDepthBufferFunction
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDepthBufferFunction, void , (GrCmpFnc_t fnc) )
|
||||
{
|
||||
#define FN_NAME "grDepthBufferFunction"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grDepthBufferFunction, fnc);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grDepthBufferFunction */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDepthBufferMode
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDepthBufferMode, void , (GrDepthBufferMode_t mode) )
|
||||
{
|
||||
#define FN_NAME "grDepthBufferMode"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grDepthBufferMode, mode);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grDepthBufferMode */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDitherMode
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDitherMode, void , (GrDitherMode_t mode) )
|
||||
{
|
||||
#define FN_NAME "grDitherMode"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grDitherMode, mode);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grDitherMode */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grRenderBuffer
|
||||
Date: 07-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grRenderBuffer, void , (GrBuffer_t buffer) )
|
||||
{
|
||||
#define FN_NAME "grRenderBuffer"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grRenderBuffer, buffer);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grRenderBuffer */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grColorMask
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_ENTRY(grColorMask, void , (FxBool rgb, FxBool alpha) )
|
||||
{
|
||||
#define FN_NAME "grColorMask"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(fbzMode);
|
||||
|
||||
STOREARG(grColorMask, rgb);
|
||||
STOREARG(grColorMask, alpha);
|
||||
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grColorMask */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grSstOrigin
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grSstOrigin, void , (GrOriginLocation_t origin) )
|
||||
{
|
||||
#define FN_NAME "grSstOrigin"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 83);
|
||||
|
||||
INVALIDATE(chromaKey);
|
||||
|
||||
STOREARG(grSstOrigin, origin);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grSstOrigin */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grClipWindow
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grClipWindow, void , (FxU32 minx, FxU32 miny, FxU32 maxx,
|
||||
FxU32 maxy) )
|
||||
{
|
||||
#define FN_NAME "grClipWindow"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 83);
|
||||
|
||||
INVALIDATE(clipRegs);
|
||||
|
||||
STOREARG(grClipWindow, minx);
|
||||
STOREARG(grClipWindow, miny);
|
||||
STOREARG(grClipWindow, maxx);
|
||||
STOREARG(grClipWindow, maxy);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grClipWindow */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDepthBiasLevel
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDepthBiasLevel, void , (FxI16 level) )
|
||||
{
|
||||
#define FN_NAME "grDepthBiasLevel"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 83);
|
||||
|
||||
INVALIDATE(zaColor);
|
||||
|
||||
STOREARG(grDepthBiasLevel, level);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grDepthBiasLevel */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grFogMode
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grFogMode, void , (GrFogMode_t mode) )
|
||||
{
|
||||
#define FN_NAME "grFogMode"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 83);
|
||||
|
||||
INVALIDATE(fogMode);
|
||||
|
||||
STOREARG(grFogMode, mode);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grFogMode */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grFogColorValue
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grFogColorValue, void , (GrColor_t color) )
|
||||
{
|
||||
#define FN_NAME "grFogColorValue"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 83);
|
||||
|
||||
INVALIDATE(fogColor);
|
||||
|
||||
STOREARG(grFogColorValue, color);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grFogColorValue */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grLfbWriteColorFormat
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grLfbWriteColorFormat, void , (GrColorFormat_t colorFormat) )
|
||||
{
|
||||
#define FN_NAME "grLfbWriteColorFormat"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 82);
|
||||
|
||||
INVALIDATE(lfbMode);
|
||||
|
||||
STOREARG(grLfbWriteColorFormat, colorFormat);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grLfbWriteColorFormat */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grLfbWriteColorSwizzle
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grLfbWriteColorSwizzle, void , (FxBool swizzleBytes, FxBool
|
||||
swapWords) )
|
||||
{
|
||||
#define FN_NAME "grLfbWriteColorSwizzle"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 82);
|
||||
|
||||
INVALIDATE(lfbMode);
|
||||
|
||||
STOREARG(grLfbWriteColorSwizzle, swizzleBytes);
|
||||
STOREARG(grLfbWriteColorSwizzle, swapWords);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grLfbWriteColorSwizzle */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grConstantColorValue
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grConstantColorValue, void , (GrColor_t color) )
|
||||
{
|
||||
#define FN_NAME "grConstantColorValue"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
INVALIDATE(c0c1);
|
||||
|
||||
STOREARG(grConstantColorValue, color);
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grConstantColorValue */
|
||||
|
||||
|
||||
/*==========================================================================*/
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grValidateState
|
||||
Date: 08-Oct-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
State Validation:
|
||||
Once a rendering primitive has determined that the state is invalid,
|
||||
it calls this routine. grValidateState then goes through valid
|
||||
markers and flushes all invalid state.
|
||||
-------------------------------------------------------------------*/
|
||||
void
|
||||
_grValidateState()
|
||||
{
|
||||
#define FN_NAME "_grValidateState"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
if (NOTVALID(alphaMode)) {
|
||||
_grAlphaBlendFunction(LOADARG(grAlphaBlendFunction, rgb_sf),
|
||||
LOADARG(grAlphaBlendFunction, rgb_df),
|
||||
LOADARG(grAlphaBlendFunction, alpha_sf),
|
||||
LOADARG(grAlphaBlendFunction, alpha_df));
|
||||
_grAlphaTestFunction(LOADARG(grAlphaTestFunction, fnc));
|
||||
_grAlphaTestReferenceValue(LOADARG(grAlphaTestReferenceValue, value));
|
||||
|
||||
}
|
||||
|
||||
if (NOTVALID(fbzColorPath)) {
|
||||
_grAlphaCombine(LOADARG(grAlphaCombine, function),
|
||||
LOADARG(grAlphaCombine, factor),
|
||||
LOADARG(grAlphaCombine, local),
|
||||
LOADARG(grAlphaCombine, other),
|
||||
LOADARG(grAlphaCombine, invert));
|
||||
_grAlphaControlsITRGBLighting(LOADARG(grAlphaControlsITRGBLighting,
|
||||
enable));
|
||||
_grColorCombine(LOADARG(grColorCombine, function),
|
||||
LOADARG(grColorCombine, factor),
|
||||
LOADARG(grColorCombine, local),
|
||||
LOADARG(grColorCombine, other),
|
||||
LOADARG(grColorCombine, invert));
|
||||
|
||||
}
|
||||
|
||||
if (NOTVALID(fbzMode)) {
|
||||
_grChromakeyMode(LOADARG(grChromakeyMode, mode));
|
||||
_grDepthMask(LOADARG(grDepthMask, enable));
|
||||
_grDepthBufferFunction(LOADARG(grDepthBufferFunction, fnc));
|
||||
_grDepthBufferMode(LOADARG(grDepthBufferMode, mode));
|
||||
_grDitherMode(LOADARG(grDitherMode, mode));
|
||||
_grRenderBuffer(LOADARG(grRenderBuffer, buffer));
|
||||
_grColorMask(LOADARG(grColorMask, rgb), LOADARG(grColorMask, alpha));
|
||||
_grSstOrigin(LOADARG(grSstOrigin, origin));
|
||||
|
||||
}
|
||||
|
||||
if (NOTVALID(chromaKey)) {
|
||||
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
|
||||
_grChromaRangeExt(LOADARG(grChromakeyValue, color),LOADARG(grChromaRange, range)
|
||||
, LOADARG(grChromaRange, mode));
|
||||
|
||||
#else
|
||||
_grChromakeyValue(LOADARG(grChromakeyValue, color));
|
||||
#endif
|
||||
}
|
||||
|
||||
if (NOTVALID(clipRegs)) {
|
||||
_grClipWindow(
|
||||
LOADARG(grClipWindow, minx),
|
||||
LOADARG(grClipWindow, miny),
|
||||
LOADARG(grClipWindow, maxx),
|
||||
LOADARG(grClipWindow, maxy));
|
||||
}
|
||||
|
||||
if (NOTVALID(zaColor)) {
|
||||
_grDepthBiasLevel((FxI16) LOADARG(grDepthBiasLevel, level));
|
||||
}
|
||||
|
||||
if (NOTVALID(fogMode)) {
|
||||
_grFogMode(LOADARG(grFogMode, mode));
|
||||
}
|
||||
|
||||
if (NOTVALID(fogColor)) {
|
||||
_grFogColorValue(LOADARG(grFogColorValue, color));
|
||||
}
|
||||
|
||||
if (NOTVALID(lfbMode)) {
|
||||
_grLfbWriteColorFormat(LOADARG(grLfbWriteColorFormat, colorFormat));
|
||||
_grLfbWriteColorSwizzle(LOADARG(grLfbWriteColorSwizzle, swizzleBytes),
|
||||
LOADARG(grLfbWriteColorSwizzle, swapWords));
|
||||
|
||||
}
|
||||
|
||||
if (NOTVALID(c0c1)) {
|
||||
_grConstantColorValue(LOADARG(grConstantColorValue, color));
|
||||
}
|
||||
|
||||
_grUpdateParamIndex();
|
||||
|
||||
_grFlushCommonStateRegs();
|
||||
|
||||
#undef FN_NAME
|
||||
} /* _grValidateState */
|
||||
|
||||
#define IARRAY(p,i) (*((FxU32 *)(p)+(i)))
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grEnable
|
||||
Date: 10-Oct-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grEnable, void , (GrEnableMode_t mode) )
|
||||
{
|
||||
#define FN_NAME "grEnable"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
switch (mode) {
|
||||
case GR_AA_ORDERED:
|
||||
ENABLEMODE(primitive_smooth_mode);
|
||||
break;
|
||||
case GR_SHAMELESS_PLUG:
|
||||
ENABLEMODE(shameless_plug_mode);
|
||||
_GlideRoot.environment.shamelessPlug = mode;
|
||||
break;
|
||||
case GR_VIDEO_SMOOTHING:
|
||||
ENABLEMODE(video_smooth_mode);
|
||||
break;
|
||||
case GR_ALLOW_MIPMAP_DITHER:
|
||||
gc->state.allowLODdither = GR_MODE_ENABLE;
|
||||
break;
|
||||
}
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grEnable */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDisable
|
||||
Date: 10-Oct-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDisable, void , (GrEnableMode_t mode) )
|
||||
{
|
||||
#define FN_NAME "grDisable"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
switch (mode) {
|
||||
case GR_AA_ORDERED:
|
||||
DISABLEMODE(primitive_smooth_mode);
|
||||
break;
|
||||
case GR_SHAMELESS_PLUG:
|
||||
DISABLEMODE(shameless_plug_mode);
|
||||
break;
|
||||
case GR_VIDEO_SMOOTHING:
|
||||
DISABLEMODE(video_smooth_mode);
|
||||
break;
|
||||
case GR_ALLOW_MIPMAP_DITHER:
|
||||
gc->state.allowLODdither = GR_MODE_DISABLE;
|
||||
break;
|
||||
}
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grDisable */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grCoordinateSpace
|
||||
Date: 01-Dec-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grCoordinateSpace, void , (GrCoordinateSpaceMode_t mode) )
|
||||
{
|
||||
#define FN_NAME "grCoordinateSpace"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
switch (mode) {
|
||||
case GR_WINDOW_COORDS:
|
||||
gc->state.grCoordinateSpaceArgs.coordinate_space_mode = GR_WINDOW_COORDS;
|
||||
break;
|
||||
case GR_CLIP_COORDS:
|
||||
gc->state.grCoordinateSpaceArgs.coordinate_space_mode = GR_CLIP_COORDS;
|
||||
break;
|
||||
}
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grCoordinateSpace */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDepthRange
|
||||
Date: 01-Dec-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDepthRange, void , (FxFloat n, FxFloat f) )
|
||||
{
|
||||
#define FN_NAME "grDepthRange"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
gc->state.Viewport.n = n;
|
||||
gc->state.Viewport.f = f;
|
||||
gc->state.Viewport.hdepth = (f - n) * 0.5f * 65535.f;
|
||||
gc->state.Viewport.oz = (f + n) * 0.5f * 65535.f;
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grDepthRange */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grViewport
|
||||
Date: 01-Dec-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grViewport, void , (FxI32 x, FxI32 y, FxI32 width, FxI32 height) )
|
||||
{
|
||||
#define FN_NAME "grViewport"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
gc->state.Viewport.ox = (FxFloat)(x + width * 0.5f);
|
||||
gc->state.Viewport.oy = (FxFloat)(y + height *0.5f);
|
||||
gc->state.Viewport.hwidth = width * 0.5f;
|
||||
gc->state.Viewport.hheight = height * 0.5f;
|
||||
|
||||
#undef FN_NAME
|
||||
} /* grViewport */
|
||||
|
||||
#endif /* GLIDE3 */
|
||||
@@ -1,445 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 14 1/08/98 4:58p Atai
|
||||
* tex table broadcast, grVertexLayout enable/disable, stq, and some
|
||||
* defines
|
||||
*
|
||||
* 13 12/12/97 10:59a Atai
|
||||
* clip space and viewport
|
||||
*
|
||||
* 12 12/08/97 10:42a Atai
|
||||
* added grDrawVertexArrayLinear()
|
||||
*
|
||||
* 11 11/21/97 6:05p Atai
|
||||
* use one datalist (tsuDataList) in glide3
|
||||
*
|
||||
* 10 11/18/97 6:11p Peter
|
||||
* fixed glide3 muckage
|
||||
*
|
||||
* 9 11/18/97 3:24p Atai
|
||||
* change grParameterData to grVertexLayout
|
||||
* define GR_PARAM_*
|
||||
*
|
||||
* 8 11/07/97 11:22a Atai
|
||||
* remove GR_*_SMOOTH. use GR_SMOOTH
|
||||
*
|
||||
* 7 11/06/97 6:10p Atai
|
||||
* update GrState size
|
||||
* rename grDrawArray to grDrawVertexArray
|
||||
* update _grDrawPoint and _grDrawVertexList
|
||||
*
|
||||
* 6 10/21/97 8:36p Atai
|
||||
* added gr_lines routines
|
||||
* use dword offset
|
||||
*
|
||||
* 5 10/17/97 2:11p Atai
|
||||
* added grContinueArray. We only support non aa mode for now.
|
||||
*
|
||||
* 4 10/14/97 4:34p Atai
|
||||
* filled out the calls to different drawarray routines
|
||||
*
|
||||
* 3 9/29/97 1:26p Dow
|
||||
* Fixed packed color strips/fans
|
||||
*
|
||||
* 2 9/26/97 10:24a Dow
|
||||
* Fixed state muckage in Glide3 parameter data
|
||||
*
|
||||
* 1 9/23/97 2:04p Dow
|
||||
* DI code for strips
|
||||
**
|
||||
*/
|
||||
#ifdef GLIDE3
|
||||
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grVertexLayout
|
||||
Date: 17-Sep-97
|
||||
Implementor(s): dow
|
||||
Library: Init Code for
|
||||
Description:
|
||||
This routine defines the format for vertex arrays.
|
||||
|
||||
Arguments:
|
||||
param - Type of date-i.e. vertex, color, or texture info:
|
||||
GR_COLOR, GR_VERTEX, GR_TEXTURE0, GR_TEXTURE1
|
||||
components - Which components are specified
|
||||
Valid Components:
|
||||
|
||||
|
||||
So, this table summarizes the legal combinations:
|
||||
Param Type Size Description
|
||||
=======================================================================================================
|
||||
GR_PARAM_XY FxFloat 8 X and Y coordinates. Offset must be zero.
|
||||
GR_PARAM_Z FxFloat 4 Z coordinate.
|
||||
GR_PARAM_A FxFloat 4 Alpha value.
|
||||
GR_PARAM_RGB FxFloat 12 RGB triplet.
|
||||
GR_PARAM_PARGB FxU32 4 Packed ARGB. High-order byte is A, followed by R, G, and B.
|
||||
GR_PARAM_STn FxFloat 8 S and T coordinates for TMU , where n is in the range [0, TBD]
|
||||
GR_PARAM_Wn FxFloat 4
|
||||
|
||||
Return:
|
||||
Nothing ever.
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grVertexLayout, void , (FxU32 param, FxI32 offset, FxU32 mode) )
|
||||
{
|
||||
#define FN_NAME "grParameterData"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 85);
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel, "(0x%x, 0x%x)\n", param, offset);
|
||||
|
||||
gc->state.vData.vertexInfo.param = param;
|
||||
|
||||
switch (param) {
|
||||
case GR_PARAM_XY:
|
||||
GR_CHECK_F(myName,
|
||||
(offset != 0),
|
||||
"Offset must be zero.");
|
||||
|
||||
gc->state.vData.vertexInfo.offset = offset;
|
||||
gc->state.vData.vertexInfo.mode = mode;
|
||||
break;
|
||||
|
||||
case GR_PARAM_Z:
|
||||
|
||||
gc->state.vData.zInfo.offset = offset;
|
||||
gc->state.vData.zInfo.mode = mode;
|
||||
|
||||
break;
|
||||
|
||||
case GR_PARAM_W:
|
||||
|
||||
gc->state.vData.wInfo.offset = offset;
|
||||
gc->state.vData.wInfo.mode = mode;
|
||||
|
||||
break;
|
||||
|
||||
case GR_PARAM_A:
|
||||
|
||||
gc->state.vData.aInfo.offset = offset;
|
||||
gc->state.vData.colorType = GR_FLOAT;
|
||||
gc->state.vData.aInfo.mode = mode;
|
||||
|
||||
break;
|
||||
case GR_PARAM_RGB:
|
||||
|
||||
gc->state.vData.rgbInfo.offset = offset;
|
||||
gc->state.vData.colorType = GR_FLOAT;
|
||||
gc->state.vData.rgbInfo.mode = mode;
|
||||
|
||||
break;
|
||||
case GR_PARAM_PARGB:
|
||||
|
||||
gc->state.vData.pargbInfo.offset = offset;
|
||||
gc->state.vData.colorType = GR_U8;
|
||||
gc->state.vData.pargbInfo.mode = mode;
|
||||
|
||||
break;
|
||||
case GR_PARAM_ST0:
|
||||
|
||||
gc->state.vData.st0Info.offset = offset;
|
||||
gc->state.vData.st0Info.mode = mode;
|
||||
|
||||
break;
|
||||
case GR_PARAM_ST1:
|
||||
|
||||
gc->state.vData.st1Info.offset = offset;
|
||||
gc->state.vData.st1Info.mode = mode;
|
||||
|
||||
break;
|
||||
case GR_PARAM_Q:
|
||||
|
||||
gc->state.vData.qInfo.offset = offset;
|
||||
gc->state.vData.qInfo.mode = mode;
|
||||
|
||||
break;
|
||||
case GR_PARAM_Q0:
|
||||
|
||||
gc->state.vData.q0Info.offset = offset;
|
||||
gc->state.vData.q0Info.mode = mode;
|
||||
|
||||
break;
|
||||
case GR_PARAM_Q1:
|
||||
|
||||
gc->state.vData.q1Info.offset = offset;
|
||||
gc->state.vData.q1Info.mode = mode;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
#if !GLIDE3_VERTEX_LAYOUT
|
||||
switch (param) {
|
||||
case GR_VERTEX:
|
||||
GR_CHECK_F(myName,
|
||||
!((components == GR_VERTEX_XYZ) ||
|
||||
(components == GR_VERTEX_XYZW)),
|
||||
"Bad Component for Vertex Parameter");
|
||||
gc->state.vData.vertexInfo.components = components;
|
||||
|
||||
GR_CHECK_F(myName, !(type == GR_FLOAT), "Bad Type for Vertex Parameter");
|
||||
gc->state.vData.vertexInfo.type = type;
|
||||
|
||||
gc->state.vData.vertexInfo.offset = offset;
|
||||
|
||||
GDBG_INFO(gc->myLevel, "%s: Vertex Offset = %d\n", FN_NAME,
|
||||
gc->state.vData.vertexInfo.offset);
|
||||
|
||||
break;
|
||||
|
||||
case GR_COLOR:
|
||||
GR_CHECK_F(myName,
|
||||
!((components == GR_COLOR_RGB) || (components == GR_COLOR_RGBA)),
|
||||
"Bad Component for Color Parameter");
|
||||
gc->state.vData.colorInfo.components = components;
|
||||
|
||||
GR_CHECK_F(myName, !((type == GR_FLOAT) || (type == GR_U8)),
|
||||
"Bad Type for Color Parameter");
|
||||
gc->state.vData.colorInfo.type = type;
|
||||
|
||||
gc->state.vData.colorInfo.offset = offset;
|
||||
GDBG_INFO(gc->myLevel, "%s: Color Offset = %d\n", FN_NAME,
|
||||
gc->state.vData.colorInfo.offset);
|
||||
|
||||
break;
|
||||
|
||||
case GR_TEXTURE0:
|
||||
GR_CHECK_F(myName,
|
||||
!((components == GR_TEX_NONE) || (components == GR_TEX_ST) ||
|
||||
(components == GR_TEX_STW)),
|
||||
"Bad Component for Texture Parameter");
|
||||
gc->state.vData.tex0Info.components = components;
|
||||
|
||||
GR_CHECK_F(myName, !(type == GR_FLOAT), "Bad Type for Texture Parameter");
|
||||
gc->state.vData.tex0Info.type == type;
|
||||
|
||||
gc->state.vData.tex0Info.offset = offset;
|
||||
GDBG_INFO(gc->myLevel, "%s: Tex0 Offset = %d\n", FN_NAME,
|
||||
gc->state.vData.tex0Info.offset);
|
||||
|
||||
break;
|
||||
|
||||
case GR_TEXTURE1:
|
||||
GR_CHECK_F(myName,
|
||||
!((components == GR_TEX_NONE) || (components == GR_TEX_ST) ||
|
||||
(components == GR_TEX_STW)),
|
||||
"Bad Component for Texture Parameter");
|
||||
gc->state.vData.tex1Info.components = components;
|
||||
|
||||
GR_CHECK_F(myName, !(type == GR_FLOAT), "Bad Type for Texture Parameter");
|
||||
gc->state.vData.tex1Info.type == type;
|
||||
|
||||
gc->state.vData.tex1Info.offset = offset;
|
||||
GDBG_INFO(gc->myLevel, "%s: Tex1 Offset = %d\n", FN_NAME,
|
||||
gc->state.vData.tex1Info.offset);
|
||||
break;
|
||||
|
||||
default:
|
||||
GR_CHECK_F(myName, 0, "Invalid Parameter");
|
||||
break;
|
||||
|
||||
}
|
||||
#endif /* !GLIDE3_VERTEX_LAYOUT */
|
||||
|
||||
_grRebuildDataList();
|
||||
|
||||
GR_END();
|
||||
#undef FN_NAME
|
||||
} /* grParameterData */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDrawVertexArray
|
||||
Date: 18-Sep-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
mode: GR_POINTS, GR_LINE_STRIP, GR_POLYGON, GR_TRIANLGE_STRIP,
|
||||
GR_TRIANGLE_FAN, GR_TRIANGLES
|
||||
|
||||
Return:
|
||||
Nothing ever
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDrawVertexArray, void , (FxU32 mode, FxU32 Count, void *pointers) )
|
||||
{
|
||||
#define FN_NAME "grDrawVertexArray"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 90);
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel, "(0x%x, 0x%x, 0x%x)\n",
|
||||
mode, Count, pointers);
|
||||
|
||||
#ifdef GDBG_INFO_ON
|
||||
{
|
||||
FxU32 i;
|
||||
for (i = 0; i < Count; i++)
|
||||
GDBG_INFO(110, "%s: pointers[%d] = 0x%x\n",
|
||||
FN_NAME, i, ((float **)pointers)[i]);
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (mode) {
|
||||
case GR_POINTS:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawPoints(GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
else
|
||||
_grDrawPoints(GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
break;
|
||||
case GR_LINE_STRIP:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINE_STRIP, Count, pointers);
|
||||
else
|
||||
_grDrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINE_STRIP, Count, pointers);
|
||||
break;
|
||||
case GR_LINES:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINES, Count, pointers);
|
||||
else
|
||||
_grDrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINES, Count, pointers);
|
||||
break;
|
||||
case GR_POLYGON:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawVertexList(kSetupFan, GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
else
|
||||
_grDrawVertexList(kSetupFan, GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
break;
|
||||
|
||||
case GR_TRIANGLE_STRIP:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawVertexList(kSetupStrip, GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
else
|
||||
_grDrawVertexList(kSetupStrip, GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
break;
|
||||
|
||||
case GR_TRIANGLE_FAN:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawVertexList(kSetupFan, GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
else
|
||||
_grDrawVertexList(kSetupFan, GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
break;
|
||||
|
||||
case GR_TRIANGLES:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
if (gc->state.grCoordinateSpaceArgs.coordinate_space_mode == GR_WINDOW_COORDS)
|
||||
_grAADrawTriangles(GR_VTX_PTR_ARRAY, GR_TRIANGLES, Count, pointers);
|
||||
else
|
||||
_grAAVpDrawTriangles(GR_VTX_PTR_ARRAY, GR_TRIANGLES, Count, pointers);
|
||||
else
|
||||
_grDrawTriangles(GR_VTX_PTR_ARRAY, Count, pointers);
|
||||
break;
|
||||
|
||||
}
|
||||
#undef FN_NAME
|
||||
} /* grDrawVertexArray */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grDrawVertexArrayLinear
|
||||
Date: 04-Dec-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
|
||||
Arguments:
|
||||
mode: GR_POINTS, GR_LINE_STRIP, GR_POLYGON, GR_TRIANLGE_STRIP,
|
||||
GR_TRIANGLE_FAN, GR_TRIANGLES
|
||||
|
||||
Return:
|
||||
Nothing ever
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grDrawVertexArrayLinear, void , (FxU32 mode, FxU32 Count, void *pointers, FxU32 stride) )
|
||||
{
|
||||
#define FN_NAME "grDrawVertexArrayLinear"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 90);
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel, "(0x%x, 0x%x, 0x%x)\n",
|
||||
mode, Count, pointers);
|
||||
|
||||
#ifdef GDBG_INFO_ON
|
||||
{
|
||||
FxU32 i;
|
||||
for (i = 0; i < Count; i++)
|
||||
GDBG_INFO(110, "%s: pointers[%d] = 0x%x\n",
|
||||
FN_NAME, i, (int)pointers + gc->state.vData.vStride * i);
|
||||
}
|
||||
#endif
|
||||
|
||||
gc->state.vData.vStride = stride >> 2;
|
||||
switch (mode) {
|
||||
case GR_POINTS:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawPoints(GR_VTX_PTR, Count, pointers);
|
||||
else
|
||||
_grDrawPoints(GR_VTX_PTR, Count, pointers);
|
||||
break;
|
||||
case GR_LINE_STRIP:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawLineStrip(GR_VTX_PTR, GR_LINE_STRIP, Count, pointers);
|
||||
else
|
||||
_grDrawLineStrip(GR_VTX_PTR, GR_LINE_STRIP, Count, pointers);
|
||||
break;
|
||||
case GR_LINES:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawLineStrip(GR_VTX_PTR, GR_LINES, Count, pointers);
|
||||
else
|
||||
_grDrawLineStrip(GR_VTX_PTR, GR_LINES, Count, pointers);
|
||||
break;
|
||||
case GR_POLYGON:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawVertexList(kSetupFan, GR_VTX_PTR, Count, pointers);
|
||||
else
|
||||
_grDrawVertexList(kSetupFan, GR_VTX_PTR, Count, pointers);
|
||||
break;
|
||||
|
||||
case GR_TRIANGLE_STRIP:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawVertexList(kSetupStrip, GR_VTX_PTR, Count, pointers);
|
||||
else
|
||||
_grDrawVertexList(kSetupStrip, GR_VTX_PTR, Count, pointers);
|
||||
break;
|
||||
|
||||
case GR_TRIANGLE_FAN:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
_grAADrawVertexList(kSetupFan, GR_VTX_PTR, Count, pointers);
|
||||
else
|
||||
_grDrawVertexList(kSetupFan, GR_VTX_PTR, Count, pointers);
|
||||
break;
|
||||
|
||||
case GR_TRIANGLES:
|
||||
if (gc->state.grEnableArgs.primitive_smooth_mode)
|
||||
if (gc->state.grCoordinateSpaceArgs.coordinate_space_mode == GR_WINDOW_COORDS)
|
||||
_grAADrawTriangles(GR_VTX_PTR, GR_TRIANGLES, Count, pointers);
|
||||
else
|
||||
_grAAVpDrawTriangles(GR_VTX_PTR, GR_TRIANGLES, Count, pointers);
|
||||
else
|
||||
_grDrawTriangles(GR_VTX_PTR, Count, pointers);
|
||||
break;
|
||||
|
||||
}
|
||||
#undef FN_NAME
|
||||
} /* grDrawVertexArrayLinear */
|
||||
|
||||
#endif /* GLIDE3 */
|
||||
@@ -1,674 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
**
|
||||
** 20 6/06/98 12:06p Peter
|
||||
** gmt's trilinear hell bug
|
||||
**
|
||||
** 19 2/20/98 5:31p Peter
|
||||
** crybaby glide
|
||||
**
|
||||
** 18 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
**
|
||||
** 17 1/30/98 4:31p Peter
|
||||
** general clenaup
|
||||
*
|
||||
* 16 1/13/98 12:42p Atai
|
||||
* fixed grtexinfo, grVertexLayout, and draw triangle
|
||||
*
|
||||
* 15 1/09/98 6:48p Atai
|
||||
* grTexInfo, GR_LOD_* and GR_ASPECT_*
|
||||
*
|
||||
* 13 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 12 12/02/97 9:49a Dow
|
||||
* Got rid of Texelfx rev 0 warning
|
||||
*
|
||||
* 11 11/20/97 6:58p Dow
|
||||
* Marked _grTexTextureMemRequired for movement
|
||||
*
|
||||
* 10 8/18/97 3:52p Peter
|
||||
* pre-hw arrival fixes/cleanup
|
||||
*
|
||||
* 9 6/02/97 4:09p Peter
|
||||
* Compile w/ gcc for Dural
|
||||
*
|
||||
* 8 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 7 5/21/97 6:04a Peter
|
||||
*
|
||||
* 6 3/15/97 8:09p Jdt
|
||||
* Remove grTexDownloadTable from this file because I added SST-1 only
|
||||
* code to it
|
||||
*
|
||||
* 5 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
*
|
||||
* 4 2/12/97 2:09p Hanson
|
||||
* Hopefully removed the rest of my muckage.
|
||||
*
|
||||
* 3 2/12/97 12:34p Dow
|
||||
* Fixed Hanson muckage
|
||||
*
|
||||
* 2 1/18/97 11:41p Dow
|
||||
* Fixed Gary's "Last C Bug" analog
|
||||
* Fixed usage of _grMipMapOffset_Tsplit
|
||||
*
|
||||
* 1 12/23/96 1:39p Dow
|
||||
* Changes for multiplatform
|
||||
**
|
||||
*/
|
||||
|
||||
#include <3dfx.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
const FxU32 _gr_aspect_index_table[] =
|
||||
{
|
||||
3,
|
||||
2,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
};
|
||||
|
||||
/* size in texels */
|
||||
const FxU32 _grMipMapHostSize[4][16] =
|
||||
{
|
||||
{ /* 1:1 aspect ratio */
|
||||
65536, /* 0 : 256x256 */
|
||||
16384, /* 1 : 128x128 */
|
||||
4096, /* 2 : 64x64 */
|
||||
1024, /* 3 : 32x32 */
|
||||
256, /* 4 : 16x16 */
|
||||
64, /* 5 : 8x8 */
|
||||
16, /* 6 : 4x4 */
|
||||
4, /* 7 : 2x2 */
|
||||
1, /* 8 : 1x1 */
|
||||
},
|
||||
{ /* 2:1 aspect ratio */
|
||||
32768, /* 0 : 256x128 */
|
||||
8192, /* 1 : 128x64 */
|
||||
2048, /* 2 : 64x32 */
|
||||
512, /* 3 : 32x16 */
|
||||
128, /* 4 : 16x8 */
|
||||
32, /* 5 : 8x4 */
|
||||
8, /* 6 : 4x2 */
|
||||
2, /* 7 : 2x1 */
|
||||
1, /* 8 : 1x1 */
|
||||
},
|
||||
{ /* 4:1 aspect ratio */
|
||||
16384, /* 0 : 256x64 */
|
||||
4096, /* 1 : 128x32 */
|
||||
1024, /* 2 : 64x16 */
|
||||
256, /* 3 : 32x8 */
|
||||
64, /* 4 : 16x4 */
|
||||
16, /* 5 : 8x2 */
|
||||
4, /* 6 : 4x1 */
|
||||
2, /* 7 : 2x1 */
|
||||
1, /* 8 : 1x1 */
|
||||
},
|
||||
{ /* 8:1 aspect ratio */
|
||||
8192, /* 0 : 256x32 */
|
||||
2048, /* 1 : 128x16 */
|
||||
512, /* 2 : 64x8 */
|
||||
128, /* 3 : 32x4 */
|
||||
32, /* 4 : 16x2 */
|
||||
8, /* 5 : 8x1 */
|
||||
4, /* 6 : 4x1 */
|
||||
2, /* 7 : 2x1 */
|
||||
1, /* 8 : 1x1 */
|
||||
}
|
||||
};
|
||||
|
||||
const int _grMipMapHostWH[GR_ASPECT_1x8 + 1][GR_LOD_1 + 1][2] =
|
||||
{
|
||||
{
|
||||
{ 256 , 32 },
|
||||
{ 128 , 16 },
|
||||
{ 64 , 8 },
|
||||
{ 32 , 4 },
|
||||
{ 16 , 2 },
|
||||
{ 8 , 1 },
|
||||
{ 4 , 1 },
|
||||
{ 2 , 1 },
|
||||
{ 1 , 1 }
|
||||
},
|
||||
{
|
||||
{ 256 , 64 },
|
||||
{ 128 , 32 },
|
||||
{ 64 , 16 },
|
||||
{ 32 , 8 },
|
||||
{ 16 , 4 },
|
||||
{ 8 , 2 },
|
||||
{ 4 , 1 },
|
||||
{ 2 , 1 },
|
||||
{ 1 , 1 }
|
||||
} ,
|
||||
{
|
||||
{ 256 , 128 },
|
||||
{ 128 , 64 },
|
||||
{ 64 , 32 },
|
||||
{ 32 , 16 },
|
||||
{ 16 , 8 },
|
||||
{ 8 , 4 },
|
||||
{ 4 , 2 },
|
||||
{ 2 , 1 },
|
||||
{ 1 , 1 }
|
||||
},
|
||||
{
|
||||
{ 256 , 256 },
|
||||
{ 128 , 128 },
|
||||
{ 64 , 64 },
|
||||
{ 32 , 32 },
|
||||
{ 16 , 16 },
|
||||
{ 8 , 8 },
|
||||
{ 4 , 4 },
|
||||
{ 2 , 2 },
|
||||
{ 1 , 1 }
|
||||
},
|
||||
{
|
||||
{ 128, 256 },
|
||||
{ 64, 128 },
|
||||
{ 32, 64 },
|
||||
{ 16, 32 },
|
||||
{ 8, 16 },
|
||||
{ 4, 8 },
|
||||
{ 2, 4 },
|
||||
{ 1, 2 },
|
||||
{ 1, 1 }
|
||||
},
|
||||
{
|
||||
{ 64, 256 },
|
||||
{ 32, 128 },
|
||||
{ 16, 64 },
|
||||
{ 8, 32 },
|
||||
{ 4, 16 },
|
||||
{ 2, 8 },
|
||||
{ 1, 4 },
|
||||
{ 1, 2 },
|
||||
{ 1, 1 }
|
||||
},
|
||||
{
|
||||
{ 32, 256 },
|
||||
{ 16, 128 },
|
||||
{ 8, 64 },
|
||||
{ 4, 32 },
|
||||
{ 2, 16 },
|
||||
{ 1, 8 },
|
||||
{ 1, 4 },
|
||||
{ 1, 2 },
|
||||
{ 1, 1 }
|
||||
}
|
||||
};
|
||||
|
||||
/* translates GR_ASPECT_* to bits for the TLOD register */
|
||||
const FxU32 _gr_aspect_xlate_table[] =
|
||||
{
|
||||
(3<< SST_LOD_ASPECT_SHIFT) | SST_LOD_S_IS_WIDER,
|
||||
(2<< SST_LOD_ASPECT_SHIFT) | SST_LOD_S_IS_WIDER,
|
||||
(1<< SST_LOD_ASPECT_SHIFT) | SST_LOD_S_IS_WIDER,
|
||||
0<< SST_LOD_ASPECT_SHIFT,
|
||||
1<< SST_LOD_ASPECT_SHIFT,
|
||||
2<< SST_LOD_ASPECT_SHIFT,
|
||||
3<< SST_LOD_ASPECT_SHIFT
|
||||
};
|
||||
|
||||
const FxU32 _gr_evenOdd_xlate_table[] =
|
||||
{
|
||||
0xFFFFFFFF, /* invalid */
|
||||
SST_LOD_TSPLIT, /* even */
|
||||
SST_LOD_TSPLIT | SST_LOD_ODD, /* odd */
|
||||
0, /* both */
|
||||
};
|
||||
|
||||
/* the size of each mipmap level in texels, 4 is the minimum no matter what */
|
||||
/* index is [aspect_ratio][lod] */
|
||||
static const FxU32 _grMipMapSize[4][16] = {
|
||||
{ /* 8:1 aspect ratio */
|
||||
0x02000, /* 0 : 256x32 */
|
||||
0x00800, /* 1 : 128x16 */
|
||||
0x00200, /* 2 : 64x8 */
|
||||
0x00080, /* 3 : 32x4 */
|
||||
0x00020, /* 4 : 16x2 */
|
||||
0x00010, /* 5 : 8x1 */
|
||||
0x00008, /* 6 : 4x1 */
|
||||
0x00004, /* 7 : 2x1 */
|
||||
0x00004, /* 8 : 1x1 */
|
||||
},
|
||||
{ /* 4:1 aspect ratio */
|
||||
0x04000, /* 0 : 256x64 */
|
||||
0x01000, /* 1 : 128x32 */
|
||||
0x00400, /* 2 : 64x16 */
|
||||
0x00100, /* 3 : 32x8 */
|
||||
0x00040, /* 4 : 16x4 */
|
||||
0x00010, /* 5 : 8x2 */
|
||||
0x00008, /* 6 : 4x1 */
|
||||
0x00004, /* 7 : 2x1 */
|
||||
0x00004, /* 8 : 1x1 */
|
||||
},
|
||||
{ /* 2:1 aspect ratio */
|
||||
0x08000, /* 0 : 256x128 */
|
||||
0x02000, /* 1 : 128x64 */
|
||||
0x00800, /* 2 : 64x32 */
|
||||
0x00200, /* 3 : 32x16 */
|
||||
0x00080, /* 4 : 16x8 */
|
||||
0x00020, /* 5 : 8x4 */
|
||||
0x00008, /* 6 : 4x2 */
|
||||
0x00004, /* 7 : 2x1 */
|
||||
0x00004, /* 8 : 1x1 */
|
||||
},
|
||||
{ /* 1:1 aspect ratio */
|
||||
0x10000, /* 0 : 256x256 */
|
||||
0x04000, /* 1 : 128x128 */
|
||||
0x01000, /* 2 : 64x64 */
|
||||
0x00400, /* 3 : 32x32 */
|
||||
0x00100, /* 4 : 16x16 */
|
||||
0x00040, /* 5 : 8x8 */
|
||||
0x00010, /* 6 : 4x4 */
|
||||
0x00004, /* 7 : 2x2 */
|
||||
0x00004, /* 8 : 1x1 */
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
/* the offset from mipmap level 0 of each mipmap level in texels */
|
||||
/* index is [aspect_ratio][lod] */
|
||||
static FxU32 _grMipMapOffset[4][16];
|
||||
static FxU32 _grMipMapOffset_Tsplit[4][16];
|
||||
|
||||
/* initialize the MipMap Offset arrays */
|
||||
void
|
||||
_grMipMapInit(void)
|
||||
{
|
||||
int ar,lod;
|
||||
|
||||
for (ar=0; ar<4; ar++) { /* for each aspect ratio */
|
||||
_grMipMapOffset[ar][0] = 0; /* start off with offset=0 */
|
||||
for (lod=1; lod<=9; lod++) { /* for each lod, add in prev size */
|
||||
_grMipMapOffset[ar][lod] = _grMipMapOffset[ar][lod-1] +
|
||||
_grMipMapSize[ar][lod-1];
|
||||
}
|
||||
_grMipMapOffset_Tsplit[ar][0] = 0; /* start off with offset=0 */
|
||||
_grMipMapOffset_Tsplit[ar][1] = 0; /* start off with offset=0 */
|
||||
for (lod=2; lod<=9; lod++) { /* for each lod, add in prev size */
|
||||
_grMipMapOffset_Tsplit[ar][lod] = _grMipMapOffset_Tsplit[ar][lod-2] +
|
||||
_grMipMapSize[ar][lod-2];
|
||||
}
|
||||
}
|
||||
} /* _grMipMapInit */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** This is not DI anymore. Perhaps all of these size routines need
|
||||
** to be in gtex.c now.
|
||||
*/
|
||||
FxU32
|
||||
_grTexTextureMemRequired( GrLOD_t small_lod, GrLOD_t large_lod,
|
||||
GrAspectRatio_t aspect, GrTextureFormat_t format,
|
||||
FxU32 evenOdd )
|
||||
{
|
||||
FxU32 memrequired;
|
||||
|
||||
GR_CHECK_W("_grTexTextureMemRequired", small_lod < large_lod,
|
||||
"small_lod bigger than large_lod" );
|
||||
GR_CHECK_F( "_grTexTextureMemRequired", evenOdd > GR_MIPMAPLEVELMASK_BOTH || evenOdd == 0,
|
||||
"invalid evenOdd mask" );
|
||||
|
||||
/* mirror aspect ratios */
|
||||
if ( aspect > GR_ASPECT_1x1 ) aspect = GR_ASPECT_1x8 - aspect;
|
||||
|
||||
if ( evenOdd == GR_MIPMAPLEVELMASK_BOTH ) {
|
||||
memrequired = _grMipMapOffset[aspect][small_lod+1];
|
||||
memrequired -= _grMipMapOffset[aspect][large_lod];
|
||||
} else {
|
||||
memrequired = 0;
|
||||
/* construct XOR mask */
|
||||
evenOdd = (evenOdd == GR_MIPMAPLEVELMASK_EVEN);
|
||||
while (large_lod <= small_lod) { /* sum up all the mipmap levels */
|
||||
if ((large_lod ^ evenOdd) & 1) /* that match the XOR mask */
|
||||
memrequired += _grMipMapSize[aspect][large_lod];
|
||||
large_lod++;
|
||||
}
|
||||
}
|
||||
|
||||
if ( format >= GR_TEXFMT_16BIT ) /* convert from texels to bytes */
|
||||
memrequired <<= 1; /* 2 bytes per texel */
|
||||
|
||||
memrequired += 7; /* round up to 8 byte boundary */
|
||||
memrequired &= ~7;
|
||||
return memrequired;
|
||||
} /* _grTexTextureMemRequired */
|
||||
|
||||
FxU16
|
||||
_grTexFloatLODToFixedLOD( float value )
|
||||
{
|
||||
float num_quarters;
|
||||
int new_value;
|
||||
|
||||
num_quarters = ( value + .125F ) / .25F;
|
||||
new_value = ( int ) num_quarters;
|
||||
|
||||
new_value &= 0x003F;
|
||||
|
||||
return new_value;
|
||||
} /* _grTexFloatLODToFixedLOD */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** _grTexCalcBaseAddress
|
||||
*/
|
||||
FxU32
|
||||
_grTexCalcBaseAddress( FxU32 start, GrLOD_t large_lod,
|
||||
GrAspectRatio_t aspect, GrTextureFormat_t format,
|
||||
FxU32 odd_even_mask )
|
||||
{
|
||||
FxU32 sum_of_lod_sizes;
|
||||
|
||||
/* mirror aspect ratios */
|
||||
if ( aspect > GR_ASPECT_1x1 ) aspect = GR_ASPECT_1x8 - aspect;
|
||||
|
||||
if ( odd_even_mask == GR_MIPMAPLEVELMASK_BOTH )
|
||||
sum_of_lod_sizes = _grMipMapOffset[aspect][large_lod];
|
||||
else {
|
||||
if (((odd_even_mask == GR_MIPMAPLEVELMASK_EVEN) && (large_lod & 1)) ||
|
||||
((odd_even_mask == GR_MIPMAPLEVELMASK_ODD) && !(large_lod & 1)))
|
||||
large_lod += 1;
|
||||
sum_of_lod_sizes = _grMipMapOffset_Tsplit[aspect][large_lod];
|
||||
}
|
||||
|
||||
if ( format >= GR_TEXFMT_16BIT ) sum_of_lod_sizes <<= 1;
|
||||
|
||||
return ( start - sum_of_lod_sizes );
|
||||
} /* _grTexCalcBaseAddress */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grTexCalcMemRequired
|
||||
*/
|
||||
GR_DIENTRY(grTexCalcMemRequired, FxU32,
|
||||
( GrLOD_t small_lod, GrLOD_t large_lod,
|
||||
GrAspectRatio_t aspect, GrTextureFormat_t format ))
|
||||
{
|
||||
const FxU32 memrequired = _grTexTextureMemRequired(small_lod, large_lod,
|
||||
aspect, format,
|
||||
GR_MIPMAPLEVELMASK_BOTH );
|
||||
|
||||
GDBG_INFO(88,"grTexCalcMemRequired(%d,%d,%d,%d) => 0x%x(%d)\n",
|
||||
small_lod,large_lod,aspect,format,memrequired,memrequired);
|
||||
|
||||
return memrequired;
|
||||
} /* grTexCalcMemRequired */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grTexDetailControl
|
||||
*/
|
||||
GR_DIENTRY(grTexDetailControl, void,
|
||||
( GrChipID_t tmu, int lod_bias, FxU8 detail_scale,
|
||||
float detail_max ))
|
||||
{
|
||||
#define FN_NAME "grTexDetailControl"
|
||||
FxU32 tDetail;
|
||||
FxU32 dmax = ( FxU32 ) ( detail_max * _GlideRoot.pool.f255 );
|
||||
FxU32 dscale = detail_scale;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("grTexDetailControl",88);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,%d,%g)\n",tmu,detail_scale,detail_max);
|
||||
GR_CHECK_TMU( FN_NAME, tmu );
|
||||
GR_CHECK_F( myName, lod_bias < -32 || lod_bias > 31, "lod_bias out of range" );
|
||||
GR_CHECK_F( myName, detail_scale > 7, "detail_scale out of range" );
|
||||
GR_CHECK_F( myName, detail_max < 0.0 || detail_max > 1.0, "detail_max out of range" );
|
||||
|
||||
tDetail = ( ( lod_bias << SST_DETAIL_BIAS_SHIFT ) & SST_DETAIL_BIAS );
|
||||
tDetail |= ( ( dmax << SST_DETAIL_MAX_SHIFT ) & SST_DETAIL_MAX );
|
||||
tDetail |= ( ( dscale << SST_DETAIL_SCALE_SHIFT ) & SST_DETAIL_SCALE );
|
||||
|
||||
/* MULTIPLAT */
|
||||
_grTexDetailControl( tmu, tDetail );
|
||||
GR_END();
|
||||
#undef FN_NAME
|
||||
} /* grTexDetailControl */
|
||||
|
||||
GR_DIENTRY(grTexMinAddress, FxU32, ( GrChipID_t tmu ))
|
||||
{
|
||||
#define FN_NAME "grTexMinAddress"
|
||||
GR_BEGIN_NOFIFOCHECK("grTexMinAddress",88);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",tmu);
|
||||
GR_CHECK_TMU(FN_NAME, tmu);
|
||||
FXUNUSED( tmu );
|
||||
GR_RETURN(0);
|
||||
#undef FN_NAME
|
||||
} /* grTexMinAddress */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grTexMaxAddress
|
||||
Date: 6/2
|
||||
Implementor(s): GaryT
|
||||
Library: glide
|
||||
Description:
|
||||
Returns address of maximum extent of texture ram for a given TMU
|
||||
Arguments:
|
||||
tmu
|
||||
Return:
|
||||
the largest valid texture start Address
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grTexMaxAddress, FxU32, ( GrChipID_t tmu ))
|
||||
{
|
||||
#define FN_NAME "grTexMaxAddress"
|
||||
GR_BEGIN_NOFIFOCHECK("grTexMaxAddress",88);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",tmu);
|
||||
GR_CHECK_TMU(FN_NAME, tmu );
|
||||
GR_RETURN(gc->tmu_state[tmu].total_mem-8);
|
||||
#undef FN_NAME
|
||||
} /* grTexMaxAddress */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grTexTextureMemRequired
|
||||
Date: 6/2
|
||||
Implementor(s): GaryMcT, Jdt
|
||||
Library: glide
|
||||
Description:
|
||||
Returns the tmu memory required to store the specified mipmap
|
||||
( Gary and I don't like the name of this function, but are
|
||||
a little backed into a corner because of the existence
|
||||
of grTexMemRequired() which does not imply any distinction
|
||||
between texture memory and system ram )
|
||||
Arguments:
|
||||
evenOdd - which set of mipmap levels are to be stored
|
||||
One of:
|
||||
GR_MIPMAPLEVELMASK_EVEN
|
||||
GR_MIPMAPLEVELMASK_ODD
|
||||
GR_MIPMAPLEVELMASK_BOTH
|
||||
info - pointer to GrTexInfo structure defining dimensions
|
||||
of texture
|
||||
Return:
|
||||
offset to be added to current texture base address to calculate next
|
||||
valid texture memory download location
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grTexTextureMemRequired, FxU32,
|
||||
( FxU32 evenOdd, GrTexInfo *info))
|
||||
{
|
||||
FxU32 memrequired;
|
||||
|
||||
GR_CHECK_F( "grTexTextureMemRequired", !info, "invalid info pointer" );
|
||||
memrequired = _grTexTextureMemRequired(info->smallLod,
|
||||
info->largeLod,
|
||||
info->aspectRatio,
|
||||
info->format,
|
||||
evenOdd );
|
||||
|
||||
GDBG_INFO(88,"grTexTextureMemRequired(%d,0x%x) => 0x%x(%d)\n",
|
||||
evenOdd,info,memrequired,memrequired);
|
||||
return memrequired;
|
||||
} /* grTexTextureMemRequired */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grTexDownloadMipMap
|
||||
Date: 6/2
|
||||
Implementor(s): GaryMcT, Jdt
|
||||
Library: glide
|
||||
Description:
|
||||
Downloads a texture mipmap to the specified tmu at the specified
|
||||
base address.
|
||||
Arguments:
|
||||
tmu - which tmu
|
||||
startAddress - starting address for texture download,
|
||||
evenOdd - which set of mipmap levels have been downloaded for
|
||||
the selected texture
|
||||
One of:
|
||||
GR_MIPMAPLEVELMASK_EVEN
|
||||
GR_MIPMAPLEVELMASK_ODD
|
||||
GR_MIPMAPLEVELMASK_BOTH
|
||||
info - pointer to GrTexInfo structure defining dimension of
|
||||
texture to be downloaded and containing texture data
|
||||
Return:
|
||||
none
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grTexDownloadMipMap, void,
|
||||
( GrChipID_t tmu, FxU32 startAddress, FxU32
|
||||
evenOdd, GrTexInfo *info ))
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GrLOD_t lod;
|
||||
char *src_base;
|
||||
FxU32 size = grTexTextureMemRequired( evenOdd, info );
|
||||
|
||||
FXUNUSED(gc);
|
||||
|
||||
GDBG_INFO(89,"grTexDownloadMipMap(%d,0x%x,%d,0x%x\n",tmu,startAddress,evenOdd,info);
|
||||
GR_CHECK_TMU( "grTexDownloadMipMap", tmu );
|
||||
GR_CHECK_COMPATABILITY("grTexDownloadMipMap",
|
||||
startAddress + size > gc->tmu_state[tmu].total_mem,
|
||||
"insufficient texture ram at startAddress" );
|
||||
GR_CHECK_F( "grTexDownloadMipMap", evenOdd > 0x3, "evenOdd mask invalid" );
|
||||
GR_CHECK_F( "grTexDownloadMipMap", !info, "info invalid" );
|
||||
|
||||
if ((startAddress < 0x200000) && (startAddress + size > 0x200000)) {
|
||||
GR_CHECK_COMPATABILITY("grTexDownloadMipMap",
|
||||
((startAddress < 0x200000UL) && (startAddress + size > 0x200000UL)),
|
||||
"mipmap cannot span 2 MB boundary");
|
||||
GrErrorCallback("grTexDownloadMipMap: mipmap cannot span 2 Mbyte boundary", FXTRUE);
|
||||
}
|
||||
|
||||
src_base = (char *)info->data;
|
||||
|
||||
/*---------------------------------------------------------------
|
||||
Download one mipmap level at a time
|
||||
---------------------------------------------------------------*/
|
||||
for(lod = info->largeLod; lod <= info->smallLod; lod++ ) {
|
||||
grTexDownloadMipMapLevel( tmu,
|
||||
startAddress,
|
||||
lod,
|
||||
info->largeLod,
|
||||
info->aspectRatio,
|
||||
info->format,
|
||||
evenOdd,
|
||||
src_base );
|
||||
|
||||
src_base += (_grMipMapHostSize[_gr_aspect_index_table[info->aspectRatio]][lod] <<
|
||||
(info->format >= GR_TEXFMT_16BIT));
|
||||
}
|
||||
} /* grTexDownloadMipMap */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grTexDownloadTablePartial
|
||||
Date: 6/3
|
||||
Implementor(s): GaryT
|
||||
Library: glide
|
||||
Description:
|
||||
download part of a look up table data to a tmu
|
||||
Arguments:
|
||||
tmu - which tmu
|
||||
type - what type of table to download
|
||||
One of:
|
||||
GR_TEXTABLE_NCC0
|
||||
GR_TEXTABLE_NCC1
|
||||
GR_TEXTABLE_PALETTE
|
||||
void *data - pointer to table data
|
||||
Return:
|
||||
none
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grTexDownloadTablePartial, void,
|
||||
( GrChipID_t tmu, GrTexTable_t type,
|
||||
void *data, int start, int end ))
|
||||
{
|
||||
#define FN_NAME "grTexDownloadTablePartial"
|
||||
GR_BEGIN_NOFIFOCHECK("grTexDownloadTablePartial",89);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,%d,0x%x, %d,%d)\n",tmu,type,data,start,end);
|
||||
GR_CHECK_TMU(FN_NAME,tmu);
|
||||
GR_CHECK_F(myName, type > 0x2, "invalid table specified");
|
||||
GR_CHECK_F(myName, !data, "invalid data pointer");
|
||||
|
||||
if ( type == GR_TEXTABLE_PALETTE ) /* Need Palette Download Code */
|
||||
_grTexDownloadPalette( tmu, (GuTexPalette *)data, start, end );
|
||||
else { /* Type is an ncc table */
|
||||
_grTexDownloadNccTable( tmu, type, (GuNccTable*)data, start, end );
|
||||
/* Removed redundant call
|
||||
* _grTexDownloadNccTable( tmu, type, (GuNccTable*)data, start, end );
|
||||
*/
|
||||
}
|
||||
GR_END();
|
||||
#undef FN_NAME
|
||||
} /* grTexDownloadTable */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** grTexDownloadMipMapLevel
|
||||
*/
|
||||
GR_DIENTRY(grTexDownloadMipMapLevel, void,
|
||||
( GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLod,
|
||||
GrLOD_t largeLod, GrAspectRatio_t aspectRatio,
|
||||
GrTextureFormat_t format, FxU32 evenOdd, void *data ))
|
||||
{
|
||||
GR_BEGIN_NOFIFOCHECK("grTexDownloadMipMapLevel",89);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,0x%x, %d,%d,%d, %d,%d 0x%x)\n",
|
||||
tmu,startAddress,thisLod,largeLod,aspectRatio,
|
||||
format,evenOdd,data);
|
||||
/*
|
||||
** note for glide3 lod translation:
|
||||
** we are calling gr* routine so the lod data should remain the same
|
||||
*/
|
||||
grTexDownloadMipMapLevelPartial( tmu, startAddress,
|
||||
thisLod, largeLod,
|
||||
aspectRatio, format,
|
||||
evenOdd, data,
|
||||
0, _grMipMapHostWH[aspectRatio][thisLod][1] - 1 );
|
||||
GR_END();
|
||||
} /* grTexDownloadMipmapLevel */
|
||||
|
||||
FxU16 rle_line[256];
|
||||
FxU16 *rle_line_end;
|
||||
|
||||
#if (GLIDE_PLATFORM & (GLIDE_OS_WIN32 | GLIDE_OS_MACOS | GLIDE_OS_UNIX))
|
||||
void rle_decode_line_asm(FxU16 *tlut,FxU8 *src,FxU16 *dest)
|
||||
{
|
||||
/* don't do anything just shut up the compiler */
|
||||
}
|
||||
#endif /* (GLIDE_PLATFORM & (GLIDE_OS_WIN32 | GLIDE_OS_MACOS)) */
|
||||
@@ -1,733 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:08 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 22 3/14/98 1:07p Peter
|
||||
** mac port happiness
|
||||
**
|
||||
** 21 2/20/98 9:05a Peter
|
||||
** removed remnants of comdex grot
|
||||
**
|
||||
** 20 2/11/98 5:22p Peter
|
||||
** added fifo get stuff for hanson
|
||||
**
|
||||
** 19 2/01/98 7:44p Peter
|
||||
** parameter dumping level
|
||||
*
|
||||
* 18 12/17/97 4:45p Peter
|
||||
* groundwork for CrybabyGlide
|
||||
*
|
||||
* 17 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 16 12/09/97 10:28a Peter
|
||||
* cleaned up some frofanity
|
||||
*
|
||||
* 15 12/05/97 4:26p Peter
|
||||
* watcom warnings
|
||||
*
|
||||
* 14 12/03/97 11:34a Peter
|
||||
* dos debugging
|
||||
*
|
||||
* 13 11/21/97 3:53p Peter
|
||||
* reset messages are controlled by gdbg_level
|
||||
*
|
||||
* 12 11/19/97 6:04p Peter
|
||||
* actually exit if not reset
|
||||
*
|
||||
* 11 11/18/97 4:36p Peter
|
||||
* chipfield stuff cleanup and w/ direct writes
|
||||
*
|
||||
* 10 11/17/97 4:55p Peter
|
||||
* watcom warnings/chipfield stuff
|
||||
*
|
||||
* 9 11/15/97 9:20p Peter
|
||||
* I am the sorriest f*cker on the face of the planet
|
||||
*
|
||||
**
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#if defined(__WIN32__)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
|
||||
#if GDBG_INFO_ON
|
||||
|
||||
static const char*
|
||||
cvgRegNames[] = {
|
||||
"status", /* 0x00 */
|
||||
"intrCtrl", /* 0x01 */
|
||||
"vAx", /* 0x02 */
|
||||
"vAy", /* 0x03 */
|
||||
"vBx", /* 0x04 */
|
||||
"vBy", /* 0x05 */
|
||||
"vCx", /* 0x06 */
|
||||
"vCy", /* 0x07 */
|
||||
"r", /* 0x08 */
|
||||
"g", /* 0x09 */
|
||||
"b", /* 0x0A */
|
||||
"z", /* 0x0B */
|
||||
"a", /* 0x0C */
|
||||
"s", /* 0x0D */
|
||||
"t", /* 0x0E */
|
||||
"w", /* 0x0F */
|
||||
"drdx", /* 0x10 */
|
||||
"dgdx", /* 0x11 */
|
||||
"dbdx", /* 0x12 */
|
||||
"dzdx", /* 0x13 */
|
||||
"dadx", /* 0x14 */
|
||||
"dsdx", /* 0x15 */
|
||||
"dtdx", /* 0x16 */
|
||||
"dwdx", /* 0x17 */
|
||||
"drdy", /* 0x18 */
|
||||
"dgdy", /* 0x19 */
|
||||
"dbdy", /* 0x1A */
|
||||
"dzdy", /* 0x1B */
|
||||
"dady", /* 0x1C */
|
||||
"dsdy", /* 0x1D */
|
||||
"dtdy", /* 0x1E */
|
||||
"dwdy", /* 0x1F */
|
||||
"triangleCMD", /* 0x20 */
|
||||
"reserved021", /* 0x21 */
|
||||
"FvAx", /* 0x22 */
|
||||
"FvAy", /* 0x23 */
|
||||
"FvBx", /* 0x24 */
|
||||
"FvBy", /* 0x25 */
|
||||
"FvCx", /* 0x26 */
|
||||
"FvCy", /* 0x27 */
|
||||
"Fr", /* 0x28 */
|
||||
"Fg", /* 0x29 */
|
||||
"Fb", /* 0x2A */
|
||||
"Fz", /* 0x2B */
|
||||
"Fa", /* 0x2C */
|
||||
"Fs", /* 0x2D */
|
||||
"Ft", /* 0x2E */
|
||||
"Fw", /* 0x2F */
|
||||
"Fdrdx", /* 0x30 */
|
||||
"Fdgdx", /* 0x31 */
|
||||
"Fdbdx", /* 0x32 */
|
||||
"Fdzdx", /* 0x33 */
|
||||
"Fdadx", /* 0x34 */
|
||||
"Fdsdx", /* 0x35 */
|
||||
"Fdtdx", /* 0x36 */
|
||||
"Fdwdx", /* 0x37 */
|
||||
"Fdrdy", /* 0x38 */
|
||||
"Fdgdy", /* 0x39 */
|
||||
"Fdbdy", /* 0x3A */
|
||||
"Fdzdy", /* 0x3B */
|
||||
"Fdady", /* 0x3C */
|
||||
"Fdsdy", /* 0x3D */
|
||||
"Fdtdy", /* 0x3E */
|
||||
"Fdwdy", /* 0x3F */
|
||||
"FtriangleCMD", /* 0x40 */
|
||||
"fbzColorPath", /* 0x41 */
|
||||
"fogMode", /* 0x42 */
|
||||
"alphaMode", /* 0x43 */
|
||||
"fbzMode", /* 0x44 */
|
||||
"lfbMode", /* 0x45 */
|
||||
"clipLeftRight", /* 0x46 */
|
||||
"clipLowYHighY", /* 0x47 */
|
||||
"nopCMD", /* 0x48 */
|
||||
"fastfillCMD", /* 0x49 */
|
||||
"swapbufferCMD", /* 0x4A */
|
||||
"fogColor", /* 0x4B */
|
||||
"zaColor", /* 0x4C */
|
||||
"chromaKey", /* 0x4D */
|
||||
"chromaRange", /* 0x4E */
|
||||
"userIntrCMD", /* 0x4F */
|
||||
"stipple", /* 0x50 */
|
||||
"color0", /* 0x51 */
|
||||
"color1", /* 0x52 */
|
||||
"fbiPixelsIn", /* 0x53 */
|
||||
"fbiChromaFail", /* 0x54 */
|
||||
"fbiZfuncFail", /* 0x55 */
|
||||
"fbiAfuncFail", /* 0x56 */
|
||||
"fbiPixelsOut", /* 0x57 */
|
||||
"fogTable0001", /* 0x58 */
|
||||
"fogTable0203", /* 0x59 */
|
||||
"fogTable0405", /* 0x5A */
|
||||
"fogTable0607", /* 0x5B */
|
||||
"fogTable0809", /* 0x5C */
|
||||
"fogTable0A0B", /* 0x5D */
|
||||
"fogTable0C0D", /* 0x5E */
|
||||
"fogTable0E0F", /* 0x5F */
|
||||
"fogTable1011", /* 0x60 */
|
||||
"fogTable1213", /* 0x61 */
|
||||
"fogTable1415", /* 0x62 */
|
||||
"fogTable1617", /* 0x63 */
|
||||
"fogTable1819", /* 0x64 */
|
||||
"fogTable1A1B", /* 0x65 */
|
||||
"fogTable1C1D", /* 0x66 */
|
||||
"fogTable1E1F", /* 0x67 */
|
||||
"fogTable2021", /* 0x68 */
|
||||
"fogTable2223", /* 0x69 */
|
||||
"fogTable2425", /* 0x6A */
|
||||
"fogTable2627", /* 0x6B */
|
||||
"fogTable2829", /* 0x6C */
|
||||
"fogTable2A2B", /* 0x6D */
|
||||
"fogTable2C2D", /* 0x6E */
|
||||
"fogTable2E2F", /* 0x6F */
|
||||
"fogTable3031", /* 0x70 */
|
||||
"fogTable3233", /* 0x71 */
|
||||
"fogTable3435", /* 0x72 */
|
||||
"fogTable3637", /* 0x73 */
|
||||
"fogTable3839", /* 0x74 */
|
||||
"fogTable3A3B", /* 0x75 */
|
||||
"fogTable3C3D", /* 0x76 */
|
||||
"fogTable3E3F", /* 0x77 */
|
||||
"cmdFifoBaseAddr", /* 0x78 */
|
||||
"cmdFifoBump", /* 0x79 */
|
||||
"cmdFifoRdPtr", /* 0x7A */
|
||||
"cmdFifoAMin", /* 0x7B */
|
||||
"cmdFifoAMax", /* 0x7C */
|
||||
"cmdFifoDepth", /* 0x7D */
|
||||
"cmdFifoHoles", /* 0x7E */
|
||||
"reserved07F", /* 0x7F */
|
||||
"fbiInit4", /* 0x80 */
|
||||
"vRetrace", /* 0x81 */
|
||||
"backPorch", /* 0x82 */
|
||||
"videoDim", /* 0x83 */
|
||||
"fbiInit0", /* 0x84 */
|
||||
"fbiInit1", /* 0x85 */
|
||||
"fbiInit2", /* 0x86 */
|
||||
"fbiInit3", /* 0x87 */
|
||||
"hSync", /* 0x88 */
|
||||
"vSync", /* 0x89 */
|
||||
"clutData", /* 0x8A */
|
||||
"dacData", /* 0x8B */
|
||||
"maxRGBDelta", /* 0x8C */
|
||||
"hBorder", /* 0x8D */
|
||||
"vBorder", /* 0x8E */
|
||||
"borderColor", /* 0x8F */
|
||||
"hvRetrace", /* 0x90 */
|
||||
"fbiInit5", /* 0x91 */
|
||||
"fbiInit6", /* 0x92 */
|
||||
"fbiInit7", /* 0x93 */
|
||||
"reserved094", /* 0x94 */
|
||||
"reserved095", /* 0x95 */
|
||||
"fbiSwapHistory", /* 0x96 */
|
||||
"fbiTriOut", /* 0x97 */
|
||||
"sSetupMode", /* 0x98 */
|
||||
"sVx", /* 0x99 */
|
||||
"sVy", /* 0x9A */
|
||||
"sARGB", /* 0x9B */
|
||||
"sRed", /* 0x9C */
|
||||
"sGreen", /* 0x9D */
|
||||
"sBlue", /* 0x9E */
|
||||
"sAlpha", /* 0x9F */
|
||||
"sVz", /* 0xA0 */
|
||||
"sWb", /* 0xA1 */
|
||||
"sWtmu0", /* 0xA2 */
|
||||
"sS/W0", /* 0xA3 */
|
||||
"sT/W0", /* 0xA4 */
|
||||
"sWtmu1", /* 0xA5 */
|
||||
"sS/Wtmu1", /* 0xA6 */
|
||||
"sT/Wtmu1", /* 0xA7 */
|
||||
"sDrawTriCMD", /* 0xA8 */
|
||||
"sBeginTriCMD", /* 0xA9 */
|
||||
"reserved0AA", /* 0xAA */
|
||||
"reserved0AB", /* 0xAB */
|
||||
"reserved0AC", /* 0xAC */
|
||||
"reserved0AD", /* 0xAD */
|
||||
"reserved0AE", /* 0xAE */
|
||||
"reserved0AF", /* 0xAF */
|
||||
"bltSrcBase", /* 0xB0 */
|
||||
"bltDstBase", /* 0xB1 */
|
||||
"bltXYStrides", /* 0xB2 */
|
||||
"bltSrcChroma", /* 0xB3 */
|
||||
"bltDstChroma", /* 0xB4 */
|
||||
"bltClipX", /* 0xB5 */
|
||||
"bltClipY", /* 0xB6 */
|
||||
"reserved067", /* 0xB7 */
|
||||
"bltSrcXY", /* 0xB8 */
|
||||
"bltDstXY", /* 0xB9 */
|
||||
"bltSize", /* 0xBA */
|
||||
"bltRop", /* 0xBB */
|
||||
"bltColor", /* 0xBC */
|
||||
"reserved067", /* 0xBD */
|
||||
"bltCommand", /* 0xBE */
|
||||
"bltData", /* 0xBF */
|
||||
"textureMode", /* 0xc0 */
|
||||
"tLOD", /* 0xc1 */
|
||||
"tDetail", /* 0xc2 */
|
||||
"texBaseAddr", /* 0xc3 */
|
||||
"texBaseAddr1", /* 0xc4 */
|
||||
"texBaseAddr2", /* 0xc5 */
|
||||
"texBaseAddr38", /* 0xc6 */
|
||||
"trexInit0", /* 0xc7 */
|
||||
"trexInit1", /* 0xc8 */
|
||||
"nccTable0_0", /* 0xc9 */
|
||||
"nccTable0_1", /* 0xca */
|
||||
"nccTable0_2", /* 0xcb */
|
||||
"nccTable0_3", /* 0xcc */
|
||||
"nccTable0_4", /* 0xcd */
|
||||
"nccTable0_5", /* 0xce */
|
||||
"nccTable0_6", /* 0xcf */
|
||||
"nccTable0_7", /* 0xd0 */
|
||||
"nccTable0_8", /* 0xd1 */
|
||||
"nccTable0_9", /* 0xd2 */
|
||||
"nccTable0_A", /* 0xd3 */
|
||||
"nccTable0_B", /* 0xd4 */
|
||||
"nccTable1_0", /* 0xd5 */
|
||||
"nccTable1_1", /* 0xd6 */
|
||||
"nccTable1_2", /* 0xd7 */
|
||||
"nccTable1_3", /* 0xd8 */
|
||||
"nccTable1_4", /* 0xd9 */
|
||||
"nccTable1_5", /* 0xda */
|
||||
"nccTable1_6", /* 0xdb */
|
||||
"nccTable1_7", /* 0xdc */
|
||||
"nccTable1_8", /* 0xdd */
|
||||
"nccTable1_9", /* 0xde */
|
||||
"nccTable1_A", /* 0xdf */
|
||||
"nccTable1_B", /* 0xe0 */
|
||||
"reserved0E1", /* 0xe1 */
|
||||
"reserved0E2", /* 0xe2 */
|
||||
"reserved0E3", /* 0xe3 */
|
||||
"reserved0E4", /* 0xe4 */
|
||||
"reserved0E5", /* 0xe5 */
|
||||
"reserved0E6", /* 0xe6 */
|
||||
"reserved0E7", /* 0xe7 */
|
||||
"reserved0E8", /* 0xe8 */
|
||||
"reserved0E9", /* 0xe9 */
|
||||
"reserved0EA", /* 0xea */
|
||||
"reserved0EB", /* 0xeb */
|
||||
"reserved0EC", /* 0xec */
|
||||
"reserved0ED", /* 0xed */
|
||||
"reserved0EE", /* 0xee */
|
||||
"reserved0EF", /* 0xef */
|
||||
"reserved0F0", /* 0xf0 */
|
||||
"reserved0F1", /* 0xf1 */
|
||||
"reserved0F2", /* 0xf2 */
|
||||
"reserved0F3", /* 0xf3 */
|
||||
"reserved0F4", /* 0xf4 */
|
||||
"reserved0F5", /* 0xf5 */
|
||||
"reserved0F6", /* 0xf6 */
|
||||
"reserved0F7", /* 0xf7 */
|
||||
"reserved0F8", /* 0xf8 */
|
||||
"reserved0F9", /* 0xf9 */
|
||||
"reserved0FA", /* 0xfa */
|
||||
"reserved0FB", /* 0xfb */
|
||||
"reserved0FC", /* 0xfc */
|
||||
"reserved0FD", /* 0xfd */
|
||||
"reserved0FE", /* 0xfe */
|
||||
"reserved0FF", /* 0xff */
|
||||
};
|
||||
|
||||
#define GEN_INDEX(a) ((((FxU32) a) - ((FxU32) gc->reg_ptr)) >> 2)
|
||||
|
||||
void
|
||||
_grFifoWriteDebug(FxU32 addr, FxU32 val, FxU32 fifoPtr)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
FxU32 index = GEN_INDEX(addr);
|
||||
|
||||
GDBG_INFO(gc->myLevel + 199, "Storing to FIFO:\n");
|
||||
GDBG_INFO(gc->myLevel + 199, " FIFO Ptr: 0x%x : 0x%X\n", fifoPtr, gc->cmdTransportInfo.fifoRoom);
|
||||
if (index <= 0xff) {
|
||||
GDBG_INFO(gc->myLevel + 199, " Reg Name: %s\n", cvgRegNames[index]);
|
||||
GDBG_INFO(gc->myLevel + 199, " Reg Num: 0x%X\n", index);
|
||||
} else {
|
||||
const char* strP;
|
||||
const FxU32 offset = (addr - (FxU32)gc->reg_ptr);
|
||||
|
||||
if (offset >= HW_TEXTURE_OFFSET) {
|
||||
strP = "Texture";
|
||||
} else if (offset >= HW_LFB_OFFSET) {
|
||||
strP = "LFB";
|
||||
index = addr;
|
||||
} else if (offset >= HW_FIFO_OFFSET) {
|
||||
strP = "Cmd FIFO";
|
||||
} else {
|
||||
strP = "Woah!";
|
||||
}
|
||||
GDBG_INFO(gc->myLevel + 199, " %s Addr: 0x%X\n",
|
||||
strP, index);
|
||||
}
|
||||
GDBG_INFO(gc->myLevel + 199, " Value: 0x%X 0x%X\n", (index << 2), val);
|
||||
|
||||
GDBG_INFO(120, " SET(0x%X, %ld(0x%X)) 0 %s (0x%X)\n",
|
||||
0x10000000UL + (FxU32)(index << 2), val, val,
|
||||
cvgRegNames[index & 0xFF], fifoPtr);
|
||||
} /* _grFifoWriteDebug */
|
||||
|
||||
void
|
||||
_grFifoFWriteDebug(FxU32 addr, float val, FxU32 fifoPtr)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
FxU32 index = GEN_INDEX(addr);
|
||||
|
||||
GDBG_INFO(gc->myLevel + 200, "Storing to FIFO:\n");
|
||||
GDBG_INFO(gc->myLevel + 200, " FIFO Ptr: 0x%x\n", fifoPtr);
|
||||
if (index <= 0xff) {
|
||||
GDBG_INFO(gc->myLevel + 200, " Reg Name: %s\n", cvgRegNames[index]);
|
||||
GDBG_INFO(gc->myLevel + 200, " Reg Num: 0x%x\n", index);
|
||||
}
|
||||
GDBG_INFO(gc->myLevel + 200, " Value: %4.2f\n", val);
|
||||
|
||||
GDBG_INFO(120, " SET(0x%X, %4.2f (0x%X)) 0 %s\n",
|
||||
0x10000000UL + (FxU32)(index << 2), val, *(const FxU32*)&val,
|
||||
cvgRegNames[index & 0xFF]);
|
||||
} /* _grFifoFWriteDebug */
|
||||
|
||||
extern void
|
||||
_grCVGFifoDump_TriHdr(const FxU32 hdrVal)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
|
||||
/* Dump Packet Header */
|
||||
GDBG_INFO(gc->myLevel + 200, "CMD Fifo Triangle Packet (0x%X)\n", hdrVal);
|
||||
GDBG_INFO(gc->myLevel + 200, " # Vertex: 0x%X\n",
|
||||
(hdrVal & SSTCP_PKT3_NUMVERTEX) >> SSTCP_PKT3_NUMVERTEX_SHIFT);
|
||||
GDBG_INFO(gc->myLevel + 200, " RGB: %s\n",
|
||||
(hdrVal & SSTCP_PKT3_PACKEDCOLOR) ? "Packed" : "Separate");
|
||||
|
||||
GDBG_INFO(gc->myLevel + 200, " StripMode: %s\n",
|
||||
(((hdrVal & (0x01 << 22)) == 0) ? "Strip" : "Fan"));
|
||||
|
||||
GDBG_INFO(gc->myLevel + 200, " Culling: %s\n",
|
||||
(((hdrVal & (0x01 << 23)) == 0) ? "Disable" : "Enable"));
|
||||
|
||||
GDBG_INFO(gc->myLevel + 200, " CullingSign: %s\n",
|
||||
(((hdrVal & (0x01 << 24)) == 0) ? "Positive" : "Negative"));
|
||||
|
||||
GDBG_INFO(gc->myLevel + 200, " PingPongSign: %s\n",
|
||||
(((hdrVal & (0x01 << 25)) == 0) ? "Normal" : "Disable"));
|
||||
|
||||
if (GDBG_GET_DEBUGLEVEL(gc->myLevel + 200)) {
|
||||
const FxU32 temp = (hdrVal & SSTCP_PKT3_PMASK);
|
||||
int i;
|
||||
|
||||
GDBG_INFO(gc->myLevel + 200, " Params: X Y");
|
||||
|
||||
for(i = 10; i <= 17; i++) {
|
||||
static const char* paramSel[] = { "RGB", "Alpha", "Z", "Wb", "W0", "ST[0]", "W1", "ST[1]" };
|
||||
|
||||
if ((temp & (0x01UL << i)) != 0) GDBG_PRINTF("%s ", paramSel[i - 10]);
|
||||
}
|
||||
GDBG_INFO(gc->myLevel + 200, "\n");
|
||||
}
|
||||
|
||||
{
|
||||
const FxU32 temp = (hdrVal & SSTCP_PKT3_CMD) >> SSTCP_PKT3_CMD_SHIFT;
|
||||
const char* tempStr;
|
||||
|
||||
switch(temp) {
|
||||
case 0x00: tempStr = "Independent"; break;
|
||||
case 0x01: tempStr = "NewStrip"; break;
|
||||
case 0x02: tempStr = "ContinueStrip"; break;
|
||||
default: tempStr = "Reserved"; break;
|
||||
}
|
||||
GDBG_INFO(gc->myLevel + 200, " Command: 0x%X(%s)\n", temp, tempStr);
|
||||
}
|
||||
}
|
||||
|
||||
extern void
|
||||
_grCVGFifoDump_Linear(const FxU32* const linearPacketAddr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
_grErrorCallback(const char* const procName,
|
||||
const char* const format,
|
||||
va_list args)
|
||||
{
|
||||
static FxBool inProcP = FXFALSE;
|
||||
|
||||
if (!inProcP) {
|
||||
static char errMsgBuf[1024];
|
||||
|
||||
inProcP = FXTRUE;
|
||||
{
|
||||
extern void (*GrErrorCallback)( const char *string, FxBool fatal );
|
||||
|
||||
vsprintf(errMsgBuf, format, args);
|
||||
(*GrErrorCallback)(errMsgBuf, (GETENV("FX_ERROR_FAIL") != NULL));
|
||||
}
|
||||
inProcP = FXFALSE;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* GDBG_INFO_ON */
|
||||
|
||||
#if USE_PACKET_FIFO
|
||||
|
||||
/* Routines privately exported so that the manufacturing diags
|
||||
* and other things can do register writes etc w/o having access
|
||||
* to the glide internals etc.
|
||||
*/
|
||||
extern void
|
||||
_grSet32(volatile FxU32* const sstAddr, const FxU32 val)
|
||||
{
|
||||
#define FN_NAME "_grSet32"
|
||||
GR_DCL_GC;
|
||||
|
||||
GR_ASSERT(sstAddr >= gc->base_ptr);
|
||||
GR_ASSERT(sstAddr < &SST_TMU(gc->reg_ptr, GR_TMU0)->status);
|
||||
|
||||
GR_SET_EXPECTED_SIZE(sizeof(FxU32), 1);
|
||||
GR_SET_INDEX(BROADCAST_ID, gc->reg_ptr, (sstAddr - gc->reg_ptr), val);
|
||||
GR_CHECK_SIZE();
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
extern FxU32
|
||||
_grGet32(volatile FxU32* const sstAddr)
|
||||
{
|
||||
return GR_GET(*sstAddr);
|
||||
}
|
||||
|
||||
#if FIFO_ASSERT_FULL
|
||||
const FxU32 kFifoCheckMask = 0xFFFF;
|
||||
FxU32 gFifoCheckCount = 0;
|
||||
#endif
|
||||
|
||||
void FX_CALL
|
||||
_FifoMakeRoom(const FxI32 blockSize, const char* fName, const int fLine)
|
||||
{
|
||||
#define FN_NAME "_FifoMakeRoom"
|
||||
FxU32 wrapAddr = 0x00UL;
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 400);
|
||||
|
||||
GR_ASSERT(blockSize > 0);
|
||||
GR_ASSERT((FxU32)blockSize < gc->cmdTransportInfo.fifoSize);
|
||||
FIFO_ASSERT();
|
||||
|
||||
/* Update the roomToXXX values w/ the # of writes since the last
|
||||
* fifo stall/wrap.
|
||||
*/
|
||||
{
|
||||
const FxI32 writes = (MIN(gc->cmdTransportInfo.roomToReadPtr, gc->cmdTransportInfo.roomToEnd) -
|
||||
gc->cmdTransportInfo.fifoRoom);
|
||||
|
||||
gc->cmdTransportInfo.roomToReadPtr -= writes;
|
||||
gc->cmdTransportInfo.roomToEnd -= writes;
|
||||
|
||||
#if GDBG_INFO_ON
|
||||
GDBG_INFO_MORE(gc->myLevel, ": (%s : %d)\n"
|
||||
"\tfifoBlock: (0x%X : 0x%X)\n"
|
||||
"\tfifoRoom: (0x%X : 0x%X) : (0x%X : 0x%X)\n"
|
||||
"\tfifo hw: (0x%X : 0x%X)\n",
|
||||
((fName == NULL) ? "Unknown" : fName), fLine,
|
||||
(FxU32)gc->cmdTransportInfo.fifoPtr, blockSize,
|
||||
gc->cmdTransportInfo.roomToReadPtr, gc->cmdTransportInfo.roomToEnd,
|
||||
gc->cmdTransportInfo.fifoRoom, writes,
|
||||
HW_FIFO_PTR(FXTRUE), gc->cmdTransportInfo.fifoRead);
|
||||
|
||||
#if !GLIDE_INIT_HAL
|
||||
if (gc->scanline_interleaved) {
|
||||
SstRegs* slaveHw = (SstRegs*)gc->slave_ptr;
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel, "\tsli: 0x%X : (0x%X : 0x%X : 0x%X)\n",
|
||||
HW_FIFO_PTR(FXFALSE),
|
||||
GR_GET(slaveHw->cmdFifoDepth),
|
||||
GR_GET(slaveHw->cmdFifoHoles),
|
||||
GR_GET(slaveHw->status));
|
||||
}
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
#endif /* GDBG_INFO_ON */
|
||||
|
||||
ASSERT_FAULT_IMMED((gc->cmdTransportInfo.roomToReadPtr >= 0) &&
|
||||
(gc->cmdTransportInfo.roomToEnd >= 0));
|
||||
}
|
||||
|
||||
again:
|
||||
/* do we need to stall? */
|
||||
{
|
||||
FxU32 lastHwRead = gc->cmdTransportInfo.fifoRead;
|
||||
FxI32 roomToReadPtr = gc->cmdTransportInfo.roomToReadPtr;
|
||||
|
||||
while (roomToReadPtr < blockSize) {
|
||||
FxU32 curReadPtr = HW_FIFO_PTR(FXTRUE);
|
||||
FxU32 curReadDist = curReadPtr - lastHwRead;
|
||||
|
||||
GR_ASSERT((curReadPtr >= (FxU32)gc->cmdTransportInfo.fifoStart) &&
|
||||
(curReadPtr < (FxU32)gc->cmdTransportInfo.fifoEnd));
|
||||
|
||||
#if !GLIDE_INIT_HAL
|
||||
/* If we're in an sli configuration then we need to make sure
|
||||
* that we don't catch up to either the slave as well.
|
||||
*/
|
||||
if (gc->scanline_interleaved) {
|
||||
const FxU32 slaveReadPtr = HW_FIFO_PTR(FXFALSE);
|
||||
const FxU32 slaveReadDist = (slaveReadPtr - lastHwRead);
|
||||
FxI32 distSlave = (FxI32)slaveReadDist;
|
||||
FxI32 distMaster = (FxI32)curReadDist;
|
||||
|
||||
GR_ASSERT((slaveReadPtr >= (FxU32)gc->cmdTransportInfo.fifoStart) &&
|
||||
(slaveReadPtr < (FxU32)gc->cmdTransportInfo.fifoEnd));
|
||||
|
||||
/* Get the actual absolute distance to the respective fifo ptrs */
|
||||
if (distSlave < 0) distSlave += (FxI32)gc->cmdTransportInfo.fifoSize - FIFO_END_ADJUST;
|
||||
if (distMaster < 0) distMaster += (FxI32)gc->cmdTransportInfo.fifoSize - FIFO_END_ADJUST;
|
||||
|
||||
/* Is the slave closer than the master? */
|
||||
if (distSlave < distMaster) {
|
||||
#if GDBG_INFO_ON
|
||||
{
|
||||
SstRegs* slaveHw = (SstRegs*)gc->slave_ptr;
|
||||
GDBG_INFO(gc->myLevel, " Wait sli: 0x%X : (0x%X : 0x%X : 0x%X)\n"
|
||||
"\tMaster: 0x%X : 0x%X\n"
|
||||
"\tSlave : 0x%X : 0x%X\n",
|
||||
HW_FIFO_PTR(FXFALSE),
|
||||
GR_GET(slaveHw->cmdFifoDepth),
|
||||
GR_GET(slaveHw->cmdFifoHoles),
|
||||
GR_GET(slaveHw->status),
|
||||
curReadPtr, curReadDist,
|
||||
slaveReadPtr, slaveReadDist);
|
||||
}
|
||||
#endif /* GDBG_INFO_ON */
|
||||
|
||||
curReadDist = slaveReadDist;
|
||||
curReadPtr = slaveReadPtr;
|
||||
}
|
||||
}
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
|
||||
roomToReadPtr += curReadDist;
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG) && GLIDE_USE_DEBUG_FIFO
|
||||
_GlideRoot.stats.fifoStalls++;
|
||||
_GlideRoot.stats.fifoStallDepth += GR_GET(hw->cmdFifoDepth);
|
||||
#endif
|
||||
/* Have we wrapped yet? */
|
||||
if (lastHwRead > curReadPtr) roomToReadPtr += (FxI32)gc->cmdTransportInfo.fifoSize - FIFO_END_ADJUST;
|
||||
lastHwRead = curReadPtr;
|
||||
}
|
||||
|
||||
GR_ASSERT((lastHwRead >= (FxU32)gc->cmdTransportInfo.fifoStart) &&
|
||||
(lastHwRead < (FxU32)gc->cmdTransportInfo.fifoEnd));
|
||||
|
||||
/* Update cached copies */
|
||||
gc->cmdTransportInfo.fifoRead = lastHwRead;
|
||||
gc->cmdTransportInfo.roomToReadPtr = roomToReadPtr;
|
||||
|
||||
GDBG_INFO(gc->myLevel, " Wait: (0x%X : 0x%X) : 0x%X\n",
|
||||
gc->cmdTransportInfo.roomToReadPtr, gc->cmdTransportInfo.roomToEnd,
|
||||
gc->cmdTransportInfo.fifoRead);
|
||||
}
|
||||
|
||||
/* Do we need to wrap to front? */
|
||||
if (gc->cmdTransportInfo.roomToEnd <= blockSize) {
|
||||
GDBG_INFO(gc->myLevel + 10, " Pre-Wrap: (0x%X : 0x%X) : 0x%X\n",
|
||||
gc->cmdTransportInfo.roomToReadPtr, gc->cmdTransportInfo.roomToEnd,
|
||||
gc->cmdTransportInfo.fifoRead);
|
||||
|
||||
/* Set the jsr packet.
|
||||
* NB: This command must be fenced.
|
||||
*/
|
||||
FIFO_ASSERT();
|
||||
{
|
||||
SET(*gc->cmdTransportInfo.fifoPtr, gc->cmdTransportInfo.fifoJmpHdr);
|
||||
P6FENCE;
|
||||
}
|
||||
FIFO_ASSERT();
|
||||
|
||||
wrapAddr = (FxU32)gc->cmdTransportInfo.fifoPtr;
|
||||
|
||||
/* Update roomXXX fields for the actual wrap */
|
||||
gc->cmdTransportInfo.roomToReadPtr -= gc->cmdTransportInfo.roomToEnd;
|
||||
gc->cmdTransportInfo.roomToEnd = gc->cmdTransportInfo.fifoSize - FIFO_END_ADJUST;
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG) && GLIDE_USE_DEBUG_FIFO
|
||||
_GlideRoot.stats.fifoWraps++;
|
||||
_GlideRoot.stats.fifoWrapDepth += GR_GET(hw->cmdFifoDepth);
|
||||
#endif
|
||||
|
||||
/* Reset fifo ptr to start */
|
||||
gc->cmdTransportInfo.fifoPtr = gc->cmdTransportInfo.fifoStart;
|
||||
|
||||
#if GLIDE_USE_SHADOW_FIFO
|
||||
{
|
||||
FxU32* fifoPtr = gc->cmdTransportInfo.fifoShadowPtr;
|
||||
|
||||
while(fifoPtr < gc->cmdTransportInfo.fifoShadowBase + (kDebugFifoSize >> 2))
|
||||
*fifoPtr++ = 0x00UL;
|
||||
gc->cmdTransportInfo.fifoShadowPtr = gc->cmdTransportInfo.fifoShadowBase;
|
||||
}
|
||||
#endif /* GLIDE_USE_SHADOW_FIFO */
|
||||
|
||||
GDBG_INFO(gc->myLevel + 10, " Post-Wrap: (0x%X : 0x%X) : 0x%X\n",
|
||||
gc->cmdTransportInfo.roomToReadPtr, gc->cmdTransportInfo.roomToEnd,
|
||||
gc->cmdTransportInfo.fifoRead);
|
||||
|
||||
goto again;
|
||||
}
|
||||
|
||||
/* compute room left */
|
||||
gc->cmdTransportInfo.fifoRoom = MIN(gc->cmdTransportInfo.roomToReadPtr, gc->cmdTransportInfo.roomToEnd);
|
||||
|
||||
#if GDBG_INFO_ON
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG)
|
||||
GDBG_INFO(gc->myLevel, FN_NAME"_Done:\n"
|
||||
"\tfifoBlock: (0x%X : 0x%X)\n"
|
||||
"\tfifoRoom: (0x%X : 0x%X : 0x%X)\n"
|
||||
"\tfifo hw: (0x%X : 0x%X) : (0x%X : 0x%X : 0x%X)\n",
|
||||
(FxU32)gc->cmdTransportInfo.fifoPtr, blockSize,
|
||||
gc->cmdTransportInfo.roomToReadPtr,
|
||||
gc->cmdTransportInfo.roomToEnd, gc->cmdTransportInfo.fifoRoom,
|
||||
HW_FIFO_PTR(FXTRUE), gc->cmdTransportInfo.fifoRead,
|
||||
GR_GET(hw->cmdFifoDepth), GR_GET(hw->cmdFifoHoles), GR_GET(hw->status));
|
||||
#endif
|
||||
|
||||
#if !GLIDE_INIT_HAL
|
||||
if (gc->scanline_interleaved) {
|
||||
SstRegs* slaveHw = (SstRegs*)gc->slave_ptr;
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel, "\tsli: 0x%X : (0x%X : 0x%X : 0x%X)\n",
|
||||
HW_FIFO_PTR(FXFALSE),
|
||||
GR_GET(slaveHw->cmdFifoDepth),
|
||||
GR_GET(slaveHw->cmdFifoHoles),
|
||||
GR_GET(slaveHw->status));
|
||||
}
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
#endif /* GDBG_INFO_ON */
|
||||
|
||||
FIFO_ASSERT();
|
||||
GR_TRACE_EXIT(FN_NAME);
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
extern void
|
||||
_grGetCommandTransportInfo(GrCmdTransportInfo* info)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
|
||||
GR_ASSERT(info != NULL);
|
||||
*info = gc->cmdTransportInfo;
|
||||
}
|
||||
|
||||
#endif /* USE_PACKET_FIFO */
|
||||
@@ -1,85 +0,0 @@
|
||||
/*
|
||||
* FPU handling code
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This routine sets the precision to single which effects all
|
||||
* adds, mults, and divs.
|
||||
*/
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
void single_precision_asm()
|
||||
{
|
||||
#if defined(__MSC__)
|
||||
__asm {
|
||||
push eax ; make room
|
||||
fnclex ; clear pending exceptions
|
||||
fstcw WORD PTR [esp]
|
||||
mov eax, DWORD PTR [esp]
|
||||
and eax, 0000fcffh ; clear bits 9:8
|
||||
mov DWORD PTR [esp], eax
|
||||
fldcw WORD PTR [esp]
|
||||
pop eax
|
||||
}
|
||||
#elif defined(__GNUC__)
|
||||
asm("push %eax\n"
|
||||
"fnclex\n"
|
||||
"fstcw (%esp)\n"
|
||||
"movl (%esp), %eax\n"
|
||||
"and $0x0000fcff, %eax\n"
|
||||
"movl %eax, (%esp)\n"
|
||||
"fldcw (%esp)\n"
|
||||
"pop %eax");
|
||||
#else
|
||||
#error "Need to implement single_precision_asm() for this compiler"
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
#warning "Using a stub for single_precision_asm() for this architecture"
|
||||
void single_precision_asm()
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This routine sets the precision to double which effects all
|
||||
* adds, mults, and divs.
|
||||
*/
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
void double_precision_asm()
|
||||
{
|
||||
#if defined(__MSC__)
|
||||
__asm {
|
||||
push eax ; make room
|
||||
fnclex ; clear pending exceptions
|
||||
fstcw WORD PTR [esp]
|
||||
mov eax, DWORD PTR [esp]
|
||||
and eax, 0000fcffh ; clear bits 9:8
|
||||
or eax, 000002ffh ; set 9:8 to 10
|
||||
mov DWORD PTR [esp], eax
|
||||
fldcw WORD PTR [esp]
|
||||
pop eax
|
||||
}
|
||||
#elif defined(__GNUC__)
|
||||
asm("push %eax\n"
|
||||
"fnclex\n"
|
||||
"fstcw (%esp)\n"
|
||||
"movw (%esp), %eax\n"
|
||||
"and $0x0000fcff, %eax\n"
|
||||
"or $0x000002ff, %eax\n"
|
||||
"mov %eax, (%esp)\n"
|
||||
"fldcw (%esp)\n"
|
||||
"pop %eax");
|
||||
#else
|
||||
#error "Need to implement double_precision_asm() for this compiler"
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
#warning "Using a stub for double_precision_asm() for this architecture"
|
||||
void double_precision_asm()
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
* PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
* TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
* INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
* DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
* THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
* FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
*
|
||||
* USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
* RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
* TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
* AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
* SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
* THE UNITED STATES.
|
||||
*
|
||||
* COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
*
|
||||
* $Header$
|
||||
* $Log$
|
||||
*
|
||||
* 1 7/25/97 9:05a Pgj
|
||||
* generate fxbldno.h which defines BUILD_NUMBER
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct tm locTime;
|
||||
time_t sysTime;
|
||||
char *build;
|
||||
|
||||
time(&sysTime);
|
||||
locTime = *localtime(&sysTime);
|
||||
|
||||
if (build = getenv("BUILD_NUMBER")) {
|
||||
printf("#define BUILD_NUMBER %s\n", build);
|
||||
} else {
|
||||
unsigned short magic;
|
||||
magic = (locTime.tm_yday << 7) |
|
||||
(locTime.tm_hour << 2) |
|
||||
(locTime.tm_min / 15);
|
||||
printf("#define BUILD_NUMBER %d\n", magic);
|
||||
}
|
||||
return 0;
|
||||
|
||||
} /* end main() */
|
||||
@@ -1,184 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Revision$
|
||||
** $Date$
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
* macros for creating assembler offset files
|
||||
*----------------------------------------------------------------------*/
|
||||
|
||||
#define NEWLINE printf("\n")
|
||||
#define COMMENT printf(";----------------------------------------------------------------------\n")
|
||||
|
||||
#define HEADER(str) NEWLINE; COMMENT; \
|
||||
printf("; Assembler offsets for %s struct\n",str);\
|
||||
COMMENT; NEWLINE
|
||||
|
||||
#define OFFSET(p,o,pname) if (hex) \
|
||||
printf("%s\tequ %08xh\n",pname,((int)&p.o)-(int)&p); \
|
||||
else printf("%s\tequ %10d\n",pname,((int)&p.o)-(int)&p)
|
||||
|
||||
#define OFFSET2(p,o,pname) if (hex) \
|
||||
printf("%s\tequ %08xh\n",pname,((int)&o)-(int)&p); \
|
||||
else printf("%s\tequ %10d\n",pname,((int)&o)-(int)&p)
|
||||
|
||||
#define SIZEOF(p,pname) if (hex) \
|
||||
printf("SIZEOF_%s\tequ %08lxh\n",pname,sizeof(p)); \
|
||||
else printf("SIZEOF_%s\tequ %10ld\n",pname,sizeof(p))
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int hex=0; /* default is print in decimal */
|
||||
static struct _GlideRoot_s gr;
|
||||
static GrGC gc;
|
||||
|
||||
#if !GLIDE_HW_TRI_SETUP
|
||||
static SstRegs sst;
|
||||
static struct dataList_s dl;
|
||||
#endif /* !GLIDE_HW_TRI_SETUP */
|
||||
|
||||
if (argc > 1) {
|
||||
if (strcmp("-inline", argv[1]) == 0) {
|
||||
SstRegs dummyRegs = { 0x00UL };
|
||||
|
||||
printf("#ifndef __FX_INLINE_H__\n");
|
||||
printf("#define __FX_INLINE_H__\n");
|
||||
printf("\n");
|
||||
|
||||
#if GLIDE_DISPATCH_SETUP
|
||||
printf("#define kCurGCOffset 0x%lXUL\n",
|
||||
offsetof(struct _GlideRoot_s, curGC));
|
||||
|
||||
printf("#define kTriProcOffset 0x%lXUL\n",
|
||||
offsetof(struct GrGC_s, curArchProcs.triSetupProc));
|
||||
printf("#define kTriProcOffsetClean %d\n",
|
||||
offsetof(struct GrGC_s, curArchProcs.triSetupProc));
|
||||
#endif /* GLIDE_DISPATCH_SETUP */
|
||||
|
||||
printf("/* The # of 2-byte entries in the hw fog table */\n");
|
||||
printf("#define kInternalFogTableEntryCount 0x%lXUL\n",
|
||||
sizeof(dummyRegs.fogTable) >> 1);
|
||||
|
||||
printf("\n");
|
||||
printf("#endif /* __FX_INLINE_H__ */\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
hex = 1;
|
||||
}
|
||||
|
||||
HEADER ("SSTREGS");
|
||||
|
||||
NEWLINE;
|
||||
HEADER ("GC");
|
||||
OFFSET (gc,base_ptr,"base_ptr\t");
|
||||
OFFSET (gc,reg_ptr,"reg_ptr\t\t");
|
||||
OFFSET (gc,lfb_ptr,"lfb_ptr\t\t");
|
||||
OFFSET (gc,tex_ptr,"tex_ptr\t\t");
|
||||
OFFSET (gc,state.cull_mode,"cull_mode\t");
|
||||
OFFSET (gc, regDataList,"regDataList\t");
|
||||
OFFSET (gc, tsuDataList,"tsuDataList\t");
|
||||
OFFSET (gc, cmdTransportInfo.triPacketHdr, "triPacketHdr");
|
||||
OFFSET (gc, cmdTransportInfo.cullStripHdr, "cullStripHdr");
|
||||
OFFSET (gc, cmdTransportInfo.paramMask, "paramMask");
|
||||
|
||||
OFFSET (gc, cmdTransportInfo.fifoStart, "fifoStart");
|
||||
OFFSET (gc, cmdTransportInfo.fifoEnd, "fifoEnd");
|
||||
OFFSET (gc, cmdTransportInfo.fifoOffset, "fifoOffset");
|
||||
OFFSET (gc, cmdTransportInfo.fifoSize, "fifoSize");
|
||||
OFFSET (gc, cmdTransportInfo.fifoJmpHdr, "fifoJmpHdr");
|
||||
OFFSET (gc, cmdTransportInfo.fifoPtr, "fifoPtr");
|
||||
OFFSET (gc, cmdTransportInfo.fifoRead, "fifoRead");
|
||||
|
||||
OFFSET (gc, cmdTransportInfo.fifoRoom, "fifoRoom");
|
||||
OFFSET (gc, cmdTransportInfo.roomToReadPtr, "roomToReadPtr");
|
||||
OFFSET (gc, cmdTransportInfo.roomToEnd, "roomToEnd");
|
||||
|
||||
OFFSET (gc, cmdTransportInfo.fifoLfbP, "fifoLfbP");
|
||||
OFFSET (gc, cmdTransportInfo.lfbLockCount, "lfbLockCount");
|
||||
|
||||
#if GLIDE_DISPATCH_SETUP
|
||||
OFFSET (gc,curArchProcs.triSetupProc,"kTriProcOffset\t\t");
|
||||
#endif
|
||||
|
||||
SIZEOF (gr.GCs[0].state,"GrState\t");
|
||||
SIZEOF (gr.hwConfig,"GrHwConfiguration");
|
||||
SIZEOF (gr.GCs[0],"GC\t");
|
||||
NEWLINE;
|
||||
|
||||
HEADER ("GlideRoot");
|
||||
OFFSET (gr,p6Fencer,"p6Fencer\t");
|
||||
OFFSET (gr,current_sst,"current_sst\t");
|
||||
OFFSET (gr,CPUType,"CPUType\t\t");
|
||||
OFFSET (gr,curGC,"curGC\t\t");
|
||||
OFFSET (gr,curTriSize,"curTriSize\t");
|
||||
|
||||
OFFSET (gr,stats.trisProcessed,"trisProcessed\t");
|
||||
OFFSET (gr,stats.trisDrawn,"trisDrawn\t");
|
||||
|
||||
#if GLIDE_PACKED_RGB
|
||||
OFFSET (gr, pool.ftemp1, "fTemp1");
|
||||
OFFSET (gr, pool.ftemp2, "fTemp2");
|
||||
OFFSET (gr, pool.fBiasHi,"fBiasHi");
|
||||
OFFSET (gr, pool.fBiasLo,"fBiasLo");
|
||||
#endif /* (GLIDE_PLATFORM & GLIDE_HW_CVG) && GLIDE_PACKED_RGB */
|
||||
|
||||
SIZEOF (gr,"GlideRoot");
|
||||
NEWLINE;
|
||||
|
||||
HEADER ("GrVertex");
|
||||
{
|
||||
GrVertex v;
|
||||
|
||||
OFFSET(v, x, "x");
|
||||
OFFSET(v, y, "y");
|
||||
OFFSET(v, r, "r");
|
||||
OFFSET(v, g, "g");
|
||||
OFFSET(v, b, "b");
|
||||
OFFSET(v, a, "a");
|
||||
SIZEOF(v, "GrVertex");
|
||||
}
|
||||
NEWLINE;
|
||||
|
||||
#if !GLIDE_HW_TRI_SETUP
|
||||
HEADER ("dataList");
|
||||
OFFSET (dl,i,"dl_i\t\t");
|
||||
OFFSET (dl,addr,"dl_addr\t\t");
|
||||
SIZEOF (dl,"dataList\t");
|
||||
NEWLINE;
|
||||
#endif /* !GLIDE_HW_TRI_SETUP */
|
||||
|
||||
return 0;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log:
|
||||
** 3 3dfx 1.0.1.0.1.0 10/11/00 Brent Forced check in to enforce
|
||||
** branching.
|
||||
** 2 3dfx 1.0.1.0 06/20/00 Joseph Kain Changes to support the
|
||||
** Napalm Glide open source release. Changes include cleaned up offensive
|
||||
** comments and new legal headers.
|
||||
** 1 3dfx 1.0 09/11/99 StarTeam VTS Administrator
|
||||
** $
|
||||
**
|
||||
** 1 2/19/99 5:50p Peter
|
||||
** type definitions for new splash screen
|
||||
*/
|
||||
|
||||
#ifndef _FX_SPLASH_H_
|
||||
#define _FX_SPLASH_H_
|
||||
|
||||
#include "3dfx.h"
|
||||
#define FX_DLL_DEFINITION
|
||||
#include "fxdll.h"
|
||||
#include "glide.h"
|
||||
|
||||
typedef FxBool
|
||||
(FX_CALL* GrSplashInitProc)(FxU32 hWnd,
|
||||
FxU32 screenWidth, FxU32 screenHeight,
|
||||
FxU32 numColBuf, FxU32 numAuxBuf,
|
||||
GrColorFormat_t colorFormat);
|
||||
|
||||
typedef void
|
||||
(FX_CALL* GrSplashShutdownProc)(void);
|
||||
|
||||
typedef void
|
||||
(FX_CALL* GrSplashProc)(float x, float y,
|
||||
float w, float h,
|
||||
FxU32 frameNumber);
|
||||
|
||||
typedef const void*
|
||||
(FX_CALL* GrSplashPlugProc)(FxU32* w, FxU32* h,
|
||||
FxI32* strideInBytes,
|
||||
GrLfbWriteMode_t* format);
|
||||
|
||||
#endif /* _FX_SPLASH_H_ */
|
||||
@@ -1,562 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.2.2 2006/12/03 04:49:19 guillemj
|
||||
** Backport "sequence point" fix for string upper code from glide3x.
|
||||
**
|
||||
** Revision 1.1.1.1.2.1 2004/12/12 15:20:35 koolsmoky
|
||||
** use toupper for __MSC__
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:09 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 17 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
*
|
||||
* 16 1/13/98 7:48p Atai
|
||||
* fixed gu3dfGetInfo, grBufferClear, and GrState size
|
||||
*
|
||||
* 15 1/13/98 12:42p Atai
|
||||
* fixed grtexinfo, grVertexLayout, and draw triangle
|
||||
*
|
||||
* 14 1/09/98 6:48p Atai
|
||||
* grTexInfo, GR_LOD_* and GR_ASPECT_*
|
||||
*
|
||||
* 12 12/17/97 4:45p Peter
|
||||
* groundwork for CrybabyGlide
|
||||
*
|
||||
* 11 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 10 6/06/97 5:56p Peter
|
||||
* fixed gcc/dural compilation things
|
||||
*
|
||||
* 9 6/02/97 4:09p Peter
|
||||
* Compile w/ gcc for Dural
|
||||
*
|
||||
* 8 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 7 5/21/97 6:05a Peter
|
||||
*
|
||||
* 6 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
**
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <3dfx.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
#ifdef __linux__
|
||||
#include <ctype.h>
|
||||
#endif
|
||||
|
||||
extern const int _grMipMapHostWH[GR_ASPECT_1x8 + 1][GR_LOD_1 + 1][2];
|
||||
extern FxU32 _gr_aspect_index_table[];
|
||||
extern FxU32 _grMipMapHostSize[4][16];
|
||||
|
||||
static FxU16 ReadDataShort(FILE *);
|
||||
static FxU32 ReadDataLong(FILE *);
|
||||
static void Read8Bit(FxU8 *dst, FILE *image, int small_lod, int large_lod, GrAspectRatio_t aspect);
|
||||
static void Read16Bit(FxU16 *dst, FILE *image, int small_lod, int large_lod, GrAspectRatio_t aspect);
|
||||
|
||||
#if ((GLIDE_PLATFORM & (GLIDE_OS_DOS32 | GLIDE_OS_WIN32 | GLIDE_OS_MACOS)) != 0)
|
||||
const char *openmode = "rb";
|
||||
#else
|
||||
const char *openmode = "r";
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char *name;
|
||||
GrTextureFormat_t fmt;
|
||||
FxBool valid;
|
||||
} CfTableEntry;
|
||||
|
||||
|
||||
static FxBool
|
||||
_grGet3dfHeader(FILE* stream, char* const buffer, const FxU32 bufSize)
|
||||
{
|
||||
int numLines = 0;
|
||||
FxU32 bufPos = 0;
|
||||
|
||||
while(numLines < 4) {
|
||||
/* Handle stream errors */
|
||||
if (fgets(buffer + bufPos, bufSize - bufPos, stream) == NULL) break;
|
||||
bufPos += strlen(buffer + bufPos);
|
||||
|
||||
/* fgets includes the '\n' in the buffer. If this is not there
|
||||
* then the buffer is too small so fail.
|
||||
*/
|
||||
if (*(buffer + bufPos - sizeof(char)) != '\n') break;
|
||||
numLines++;
|
||||
}
|
||||
|
||||
return (numLines == 4);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** gu3dfGetInfo
|
||||
*/
|
||||
GR_DIENTRY(gu3dfGetInfo, FxBool,
|
||||
(const char *FileName, Gu3dfInfo *Info))
|
||||
{
|
||||
FILE *image_file;
|
||||
FxU32 i;
|
||||
char version[5];
|
||||
char color_format[10];
|
||||
int aspect_width, aspect_height;
|
||||
char buffer[100];
|
||||
int small_lod, large_lod;
|
||||
FxBool ratio_found = FXFALSE;
|
||||
FxBool format_found = FXFALSE;
|
||||
GrAspectRatio_t wh_aspect_table[] =
|
||||
{
|
||||
GR_ASPECT_1x1,
|
||||
GR_ASPECT_1x2,
|
||||
GR_ASPECT_1x4,
|
||||
GR_ASPECT_1x8
|
||||
};
|
||||
GrAspectRatio_t hw_aspect_table[] =
|
||||
{
|
||||
GR_ASPECT_1x1,
|
||||
GR_ASPECT_2x1,
|
||||
GR_ASPECT_4x1,
|
||||
GR_ASPECT_8x1
|
||||
};
|
||||
CfTableEntry cftable[] =
|
||||
{
|
||||
{ "I8", GR_TEXFMT_INTENSITY_8, FXTRUE },
|
||||
{ "A8", GR_TEXFMT_ALPHA_8, FXTRUE },
|
||||
{ "AI44", GR_TEXFMT_ALPHA_INTENSITY_44, FXTRUE },
|
||||
{ "YIQ", GR_TEXFMT_YIQ_422, FXTRUE },
|
||||
{ "RGB332", GR_TEXFMT_RGB_332, FXTRUE },
|
||||
{ "RGB565", GR_TEXFMT_RGB_565, FXTRUE },
|
||||
{ "ARGB8332", GR_TEXFMT_ARGB_8332, FXTRUE },
|
||||
{ "ARGB1555", GR_TEXFMT_ARGB_1555, FXTRUE },
|
||||
{ "AYIQ8422", GR_TEXFMT_AYIQ_8422, FXTRUE },
|
||||
{ "ARGB4444", GR_TEXFMT_ARGB_4444, FXTRUE },
|
||||
{ "AI88", GR_TEXFMT_ALPHA_INTENSITY_88, FXTRUE },
|
||||
{ "P8", GR_TEXFMT_P_8, FXTRUE },
|
||||
{ "AP88", GR_TEXFMT_AP_88, FXTRUE },
|
||||
{ 0, 0, FXFALSE }
|
||||
};
|
||||
|
||||
GDBG_INFO(81,"gu3dfGetInfo(%s,0x%x)\n",FileName,Info);
|
||||
/*
|
||||
** open the filen
|
||||
*/
|
||||
if((image_file = fopen(FileName, openmode)) == NULL) return FXFALSE;
|
||||
if (!_grGet3dfHeader(image_file, buffer, sizeof(buffer))) return FXFALSE;
|
||||
|
||||
/*
|
||||
** grab statistics out of the header
|
||||
*/
|
||||
if(sscanf(buffer,"3df v%s %s lod range: %i %i aspect ratio: %i %i\n",
|
||||
version,
|
||||
color_format,
|
||||
&small_lod, &large_lod,
|
||||
&aspect_width, &aspect_height) == 0)
|
||||
return FXFALSE;
|
||||
|
||||
/*
|
||||
** determine aspect ratio, height, and width
|
||||
*/
|
||||
i = 0;
|
||||
ratio_found = FXFALSE;
|
||||
while ((i < 4) && (!ratio_found)) {
|
||||
if ((aspect_width << i) == aspect_height) {
|
||||
Info->header.aspect_ratio = wh_aspect_table[i];
|
||||
ratio_found = FXTRUE;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
while ((i < 4) && (!ratio_found)) {
|
||||
if ((aspect_height << i) == aspect_width) {
|
||||
Info->header.aspect_ratio = hw_aspect_table[i];
|
||||
ratio_found = FXTRUE;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
if (!ratio_found) return FXFALSE;
|
||||
|
||||
/*
|
||||
** determine height and width of the mip map
|
||||
*/
|
||||
if (aspect_width >= aspect_height) {
|
||||
Info->header.width = large_lod;
|
||||
Info->header.height = large_lod / aspect_width;
|
||||
} else {
|
||||
Info->header.height = large_lod;
|
||||
Info->header.width = large_lod / aspect_height;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** calculate proper LOD values
|
||||
*/
|
||||
/*
|
||||
** note for glide3 lod translation:
|
||||
** we should return the new defines for glide3
|
||||
*/
|
||||
switch (small_lod) {
|
||||
case 1:
|
||||
Info->header.small_lod = GR_LOD_1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
Info->header.small_lod = GR_LOD_2;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Info->header.small_lod = GR_LOD_4;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
Info->header.small_lod = GR_LOD_8;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
Info->header.small_lod = GR_LOD_16;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
Info->header.small_lod = GR_LOD_32;
|
||||
break;
|
||||
|
||||
case 64:
|
||||
Info->header.small_lod = GR_LOD_64;
|
||||
break;
|
||||
|
||||
case 128:
|
||||
Info->header.small_lod = GR_LOD_128;
|
||||
break;
|
||||
|
||||
case 256:
|
||||
Info->header.small_lod = GR_LOD_256;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (large_lod) {
|
||||
case 1:
|
||||
Info->header.large_lod = GR_LOD_1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
Info->header.large_lod = GR_LOD_2;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Info->header.large_lod = GR_LOD_4;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
Info->header.large_lod = GR_LOD_8;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
Info->header.large_lod = GR_LOD_16;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
Info->header.large_lod = GR_LOD_32;
|
||||
break;
|
||||
|
||||
case 64:
|
||||
Info->header.large_lod = GR_LOD_64;
|
||||
break;
|
||||
|
||||
case 128:
|
||||
Info->header.large_lod = GR_LOD_128;
|
||||
break;
|
||||
|
||||
case 256:
|
||||
Info->header.large_lod = GR_LOD_256;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
** determine the color format of the input image
|
||||
*/
|
||||
{
|
||||
char *tempStr = (char*)color_format;
|
||||
while (*tempStr != '\0') {
|
||||
*tempStr = toupper(*tempStr);
|
||||
tempStr++;
|
||||
}
|
||||
}
|
||||
|
||||
i = 0;
|
||||
format_found = FXFALSE;
|
||||
while ((cftable[i].name != 0) && (!format_found)) {
|
||||
if (strcmp(color_format, cftable[i].name) == 0) {
|
||||
Info->header.format = cftable[i].fmt;
|
||||
format_found = FXTRUE;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
/*
|
||||
** close the input file
|
||||
*/
|
||||
if (image_file != NULL) fclose(image_file);
|
||||
|
||||
if (format_found) {
|
||||
FxI32 lod;
|
||||
Info->mem_required = 0;
|
||||
for(lod = Info->header.large_lod; lod <= Info->header.small_lod; lod++) {
|
||||
Info->mem_required += (_grMipMapHostSize[_gr_aspect_index_table[Info->header.aspect_ratio]]
|
||||
[lod] << (Info->header.format >= GR_TEXFMT_16BIT));
|
||||
}
|
||||
}
|
||||
|
||||
return format_found;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** gu3dfLoad
|
||||
*/
|
||||
GR_DIENTRY(gu3dfLoad, FxBool, (const char *filename, Gu3dfInfo *info))
|
||||
{
|
||||
FILE *image_file = 0;
|
||||
FxU32 index = 0;
|
||||
char buffer[100] = "";
|
||||
|
||||
GDBG_INFO(81,"gu3dfLoad(%s,0x%x)\n",filename,info);
|
||||
/*
|
||||
** open the file
|
||||
*/
|
||||
if ((image_file = fopen(filename, openmode)) == NULL) return FXFALSE;
|
||||
if (!_grGet3dfHeader(image_file, buffer, sizeof(buffer))) return FXFALSE;
|
||||
|
||||
/*
|
||||
** If necessary, read in the YIQ decompression table
|
||||
*/
|
||||
if ((info->header.format == GR_TEXFMT_YIQ_422) ||
|
||||
(info->header.format == GR_TEXFMT_AYIQ_8422))
|
||||
{
|
||||
/*
|
||||
** read in Y
|
||||
*/
|
||||
for (index = 0; index < 16; index++)
|
||||
info->table.nccTable.yRGB[index] = ((FxI16) ReadDataShort(image_file)) & 0xFF;
|
||||
|
||||
/*
|
||||
** read in I
|
||||
*/
|
||||
for (index = 0; index < 4; index++) {
|
||||
info->table.nccTable.iRGB[index][0] = ((FxI16) ReadDataShort(image_file)) & 0x1FF;
|
||||
info->table.nccTable.iRGB[index][1] = ((FxI16) ReadDataShort(image_file)) & 0x1FF;
|
||||
info->table.nccTable.iRGB[index][2] = ((FxI16) ReadDataShort(image_file)) & 0x1FF;
|
||||
}
|
||||
|
||||
/*
|
||||
** read in Q
|
||||
*/
|
||||
for (index = 0; index < 4; index++) {
|
||||
info->table.nccTable.qRGB[index][0] = ((FxI16) ReadDataShort(image_file)) & 0x1FF;
|
||||
info->table.nccTable.qRGB[index][1] = ((FxI16) ReadDataShort(image_file)) & 0x1FF;
|
||||
info->table.nccTable.qRGB[index][2] = ((FxI16) ReadDataShort(image_file)) & 0x1FF;
|
||||
}
|
||||
|
||||
/*
|
||||
** pack the table Y entries
|
||||
*/
|
||||
for (index = 0; index < 4; index++) {
|
||||
FxU32 packedvalue;
|
||||
|
||||
packedvalue = ((FxU32) info->table.nccTable.yRGB[index*4+0]);
|
||||
packedvalue |= ((FxU32) info->table.nccTable.yRGB[index*4+1]) << 8;
|
||||
packedvalue |= ((FxU32) info->table.nccTable.yRGB[index*4+2]) << 16;
|
||||
packedvalue |= ((FxU32) info->table.nccTable.yRGB[index*4+3]) << 24;
|
||||
|
||||
info->table.nccTable.packed_data[index] = packedvalue;
|
||||
}
|
||||
|
||||
/*
|
||||
** pack the table I entries
|
||||
*/
|
||||
for (index = 0; index < 4; index++) {
|
||||
FxU32 packedvalue;
|
||||
|
||||
packedvalue = ((FxU32) info->table.nccTable.iRGB[index][0]) << 18;
|
||||
packedvalue |= ((FxU32) info->table.nccTable.iRGB[index][1]) << 9;
|
||||
packedvalue |= ((FxU32) info->table.nccTable.iRGB[index][2]) << 0;
|
||||
|
||||
info->table.nccTable.packed_data[index+4] = packedvalue;
|
||||
}
|
||||
|
||||
/*
|
||||
** pack the table Q entries
|
||||
*/
|
||||
for (index = 0; index < 4; index++) {
|
||||
FxU32 packedvalue;
|
||||
|
||||
packedvalue = ((FxU32) info->table.nccTable.qRGB[index][0]) << 18;
|
||||
packedvalue |= ((FxU32) info->table.nccTable.qRGB[index][1]) << 9;;
|
||||
packedvalue |= ((FxU32) info->table.nccTable.qRGB[index][2]) << 0;
|
||||
|
||||
info->table.nccTable.packed_data[index+8] = packedvalue;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** If necessary, read in the Palette
|
||||
*/
|
||||
if ((info->header.format == GR_TEXFMT_P_8) ||
|
||||
(info->header.format == GR_TEXFMT_AP_88)) {
|
||||
FxU32 i;
|
||||
for(i = 0; i < 256; i++)
|
||||
info->table.palette.data[i] = ReadDataLong(image_file);
|
||||
}
|
||||
|
||||
/*
|
||||
** Read in the image
|
||||
*/
|
||||
switch (info->header.format)
|
||||
{
|
||||
case GR_TEXFMT_INTENSITY_8:
|
||||
case GR_TEXFMT_ALPHA_8:
|
||||
case GR_TEXFMT_ALPHA_INTENSITY_44:
|
||||
case GR_TEXFMT_YIQ_422:
|
||||
case GR_TEXFMT_RGB_332:
|
||||
case GR_TEXFMT_P_8:
|
||||
Read8Bit(info->data, image_file,
|
||||
info->header.small_lod,
|
||||
info->header.large_lod,
|
||||
info->header.aspect_ratio);
|
||||
break;
|
||||
|
||||
case GR_TEXFMT_RGB_565:
|
||||
case GR_TEXFMT_ARGB_8332:
|
||||
case GR_TEXFMT_ARGB_1555:
|
||||
case GR_TEXFMT_AYIQ_8422:
|
||||
case GR_TEXFMT_ARGB_4444:
|
||||
case GR_TEXFMT_ALPHA_INTENSITY_88:
|
||||
case GR_TEXFMT_AP_88:
|
||||
Read16Bit(info->data, image_file,
|
||||
info->header.small_lod,
|
||||
info->header.large_lod,
|
||||
info->header.aspect_ratio);
|
||||
break;
|
||||
|
||||
default:
|
||||
return FXFALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
** close the file
|
||||
*/
|
||||
fclose(image_file);
|
||||
|
||||
return FXTRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
** Read8Bit
|
||||
**
|
||||
** Read in an 8-bit texture map, unpacked.
|
||||
*/
|
||||
static void
|
||||
Read8Bit(FxU8 *data, FILE *image_file,
|
||||
int small_lod, int large_lod,
|
||||
GrAspectRatio_t aspect_ratio)
|
||||
{
|
||||
int lod;
|
||||
int width, height;
|
||||
|
||||
for (lod = large_lod; lod <= small_lod; lod++) {
|
||||
width = _grMipMapHostWH[aspect_ratio][lod][0];
|
||||
height = _grMipMapHostWH[aspect_ratio][lod][1];
|
||||
|
||||
fread(data, sizeof(char), width*height, image_file);
|
||||
data += width*height;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Read16Bit
|
||||
**
|
||||
** Read in a 16-bit texture map, unpacked.
|
||||
*/
|
||||
static void Read16Bit(FxU16 *data, FILE *image_file,
|
||||
int small_lod, int large_lod,
|
||||
GrAspectRatio_t aspect_ratio)
|
||||
{
|
||||
int index;
|
||||
int lod;
|
||||
int width, height;
|
||||
|
||||
for (lod = large_lod; lod <= small_lod; lod++) {
|
||||
width = _grMipMapHostWH[aspect_ratio][lod][0];
|
||||
height = _grMipMapHostWH[aspect_ratio][lod][1];
|
||||
|
||||
for (index = 0; index < (width * height); index++) {
|
||||
*data = ReadDataShort(image_file);
|
||||
data++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** FxU16 ReadDataShort
|
||||
*/
|
||||
static FxU16 ReadDataShort(FILE *fp)
|
||||
{
|
||||
FxU16 b1 = (FxU16)getc(fp);
|
||||
FxU16 b2 = (FxU16)getc(fp);
|
||||
|
||||
#define kShiftB1 8
|
||||
#define kShiftB2 0
|
||||
|
||||
return (((b1 & 0xFF) << kShiftB1) | ((b2 & 0xFF) << kShiftB2));
|
||||
}
|
||||
|
||||
/*
|
||||
** ReadDataLong
|
||||
*/
|
||||
static FxU32 ReadDataLong(FILE *fp)
|
||||
{
|
||||
FxU32 data;
|
||||
FxU8 byte[4];
|
||||
|
||||
fread(byte, 4, 1, fp);
|
||||
data = (((FxU32) byte[0]) << 24) |
|
||||
(((FxU32) byte[1]) << 16) |
|
||||
(((FxU32) byte[2]) << 8) |
|
||||
((FxU32) byte[3]);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,170 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 17 1/05/98 6:06p Atai
|
||||
* glide extension stuff
|
||||
*
|
||||
* 16 12/15/97 5:52p Atai
|
||||
* disable obsolete glide2 api for glide3
|
||||
*
|
||||
* 15 11/18/97 4:36p Peter
|
||||
* make thing more translucent
|
||||
*
|
||||
* 14 9/15/97 7:31p Peter
|
||||
* more cmdfifo cleanup, fixed normal buffer clear, banner in the right
|
||||
* place, lfb's are on, Hmmmm.. probably more
|
||||
*
|
||||
* 13 7/26/97 3:04p Peter
|
||||
* gratuitous plug is translucent
|
||||
*
|
||||
* 12 7/08/97 2:48p Peter
|
||||
* shameless plug just uses lfb routines
|
||||
*
|
||||
* 11 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 10 5/21/97 6:05a Peter
|
||||
*
|
||||
* 9 5/02/97 2:08p Pgj
|
||||
* screen_width/height now FxU32
|
||||
*
|
||||
* 8 3/16/97 2:24a Jdt
|
||||
* Fixed bug. Didn't initialize info.
|
||||
*
|
||||
* 7 3/12/97 11:51p Jdt
|
||||
* Watcom warning.
|
||||
*
|
||||
* 6 3/12/97 4:20p Jdt
|
||||
* Fixed for VG96 and optimized SST-1
|
||||
*
|
||||
* 5 2/26/97 11:55a Jdt
|
||||
* Updated banner for new lfb api
|
||||
*
|
||||
* 4 12/23/96 1:37p Dow
|
||||
* chagnes for multiplatform glide
|
||||
**
|
||||
*/
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
#ifdef GLIDE_PLUG
|
||||
#include "banner.inc"
|
||||
#endif
|
||||
|
||||
/* display the translucent 3Dfx powerfield logo */
|
||||
void
|
||||
_grShamelessPlug(void)
|
||||
{
|
||||
#ifdef GLIDE_PLUG
|
||||
GrState state;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("_grShamelessPlug", 80);
|
||||
GDBG_INFO_MORE(gc->myLevel, "()\n");
|
||||
|
||||
grGlideGetState(&state);
|
||||
grDisableAllEffects();
|
||||
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_LOCAL_CONSTANT,
|
||||
GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_LOCAL_NONE,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE);
|
||||
grAlphaBlendFunction(GR_BLEND_SRC_ALPHA,
|
||||
GR_BLEND_ONE_MINUS_SRC_ALPHA,
|
||||
GR_BLEND_ZERO, GR_BLEND_ZERO);
|
||||
grClipWindow(0, 0,
|
||||
gc->state.screen_width - 1,
|
||||
gc->state.screen_height - 1);
|
||||
grDepthMask(FXFALSE);
|
||||
grDepthBufferFunction(GR_CMP_ALWAYS);
|
||||
grDepthBufferMode(GR_DEPTHBUFFER_DISABLE);
|
||||
|
||||
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
|
||||
_grChromaRangeExt(0x0000, 0x0000, GR_CHROMARANGE_RGB_ALL);
|
||||
#else
|
||||
grChromakeyValue(0x0000);
|
||||
#endif
|
||||
|
||||
grChromakeyMode(GR_CHROMAKEY_ENABLE);
|
||||
grLfbConstantAlpha((FxU8) 0x40);
|
||||
grLfbWriteColorFormat(GR_COLORFORMAT_ARGB);
|
||||
|
||||
#if 1
|
||||
/* NB: The banner image is actually upside down. Hence the
|
||||
* negative stride and starting address calculation.
|
||||
*/
|
||||
_grLfbWriteRegion(FXTRUE, GR_BUFFER_BACKBUFFER,
|
||||
gc->state.screen_width - (banner_width + 1),
|
||||
gc->state.screen_height - (banner_height + 1),
|
||||
GR_LFBWRITEMODE_565,
|
||||
banner_width, banner_height,
|
||||
-(banner_width << 1),
|
||||
banner_data + (banner_width * (banner_height - 1)));
|
||||
#else
|
||||
{
|
||||
const FxI32 maxY = gc->state.screen_height - (banner_height + 1);
|
||||
const FxI32 maxX = gc->state.screen_width - (banner_width + 1);
|
||||
static FxI32 y = 0;
|
||||
static FxI32 x = 0;
|
||||
static FxI32 plugDir;
|
||||
|
||||
{
|
||||
const FxI32* maxP;
|
||||
const FxI32* valP;
|
||||
|
||||
if (maxX > maxY) {
|
||||
maxP = &maxY;
|
||||
valP = &y;
|
||||
} else {
|
||||
maxP = &maxX;
|
||||
valP = &x;
|
||||
}
|
||||
|
||||
if (*valP == 0) plugDir = 1;
|
||||
else if (*valP >= *maxP) plugDir = -1;
|
||||
}
|
||||
|
||||
_grLfbWriteRegion(FXTRUE, GR_BUFFER_BACKBUFFER,
|
||||
x += plugDir,
|
||||
y += plugDir,
|
||||
GR_LFBWRITEMODE_565,
|
||||
banner_width, banner_height,
|
||||
-(banner_width << 1),
|
||||
banner_data + (banner_width * (banner_height - 1)));
|
||||
}
|
||||
#endif
|
||||
|
||||
grGlideSetState(&state);
|
||||
|
||||
GR_END();
|
||||
#endif /* GLIDE_PLUG */
|
||||
} /* _grShamelessPlug */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,281 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:10 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 28 3/14/98 1:07p Peter
|
||||
** mac port happiness
|
||||
**
|
||||
** 27 2/11/98 5:23p Peter
|
||||
** no more infinite recursion
|
||||
*
|
||||
* 26 12/18/97 2:13p Peter
|
||||
* cleaned up the error code
|
||||
*
|
||||
* 25 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 24 12/05/97 4:38p Peter
|
||||
* sli vs assertions
|
||||
*
|
||||
* 23 12/03/97 11:34a Peter
|
||||
* dos debugging
|
||||
*
|
||||
* 22 11/17/97 4:55p Peter
|
||||
* watcom warnings/chipfield stuff
|
||||
*
|
||||
* 21 11/15/97 8:55p Peter
|
||||
* Removed OutputDebugString
|
||||
*
|
||||
* 20 11/15/97 7:43p Peter
|
||||
* more comdex silliness
|
||||
*
|
||||
* 19 11/12/97 2:27p Peter
|
||||
*
|
||||
* 18 11/12/97 11:16a Peter
|
||||
* cleaned up assertions
|
||||
*
|
||||
* 17 11/04/97 5:04p Peter
|
||||
* cataclysm part deux
|
||||
*
|
||||
* 16 11/03/97 4:02p Peter
|
||||
* cataclysm fix
|
||||
*
|
||||
* 15 11/03/97 3:43p Peter
|
||||
* h3/cvg cataclysm
|
||||
*
|
||||
* 14 10/23/97 5:28p Peter
|
||||
* sli fifo thing
|
||||
*
|
||||
* 13 9/24/97 1:29p Peter
|
||||
* more assertion spewage
|
||||
*
|
||||
* 12 9/05/97 5:29p Peter
|
||||
* changes for direct hw
|
||||
*
|
||||
* 11 5/30/97 5:44p Peter
|
||||
* Version that does basic triangles/registers w/ command fifo. Does not
|
||||
* currently download textures correctly.
|
||||
*
|
||||
* 10 5/28/97 9:05a Peter
|
||||
* Merge w/ latest glide changes
|
||||
*
|
||||
* 9 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 8 5/21/97 6:05a Peter
|
||||
*
|
||||
* 7 5/20/97 9:47a Pgj
|
||||
* Use OutputDebugString for non-fatal errors under windows
|
||||
*
|
||||
* 6 5/19/97 7:35p Pgj
|
||||
* Print cogent error message if h/w not found
|
||||
*
|
||||
* 5 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
*
|
||||
* 4 12/23/96 1:37p Dow
|
||||
* chagnes for multiplatform glide
|
||||
**
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#ifdef __DOS__
|
||||
# include <malloc.h>
|
||||
#endif
|
||||
|
||||
#ifdef __WIN32__
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
void (*GrErrorCallback)( const char *string, FxBool fatal );
|
||||
|
||||
void _doGrErrorCallback( const char *name, const char *msg, FxBool fatal )
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
#if GDBG_INFO_ON
|
||||
/* Neuter any fifo checking from the failing
|
||||
* call. Otherwise entries into the shutdown
|
||||
* calls cause spurious crap.
|
||||
*/
|
||||
if (fatal) {
|
||||
GR_DCL_GC;
|
||||
|
||||
gc->checkCounter =
|
||||
gc->expected_counter = 0;
|
||||
|
||||
gc->checkCounter =
|
||||
gc->checkPtr = 0UL;
|
||||
}
|
||||
#endif /* GDBG_INFO_ON */
|
||||
|
||||
gdbg_printf("%s: %s.\n", name, msg);
|
||||
sprintf(buf,"%s: %s.\n", name, msg);
|
||||
GrErrorCallback(buf, fatal);
|
||||
|
||||
if (fatal) exit(1);
|
||||
}
|
||||
|
||||
GR_DIENTRY(grErrorSetCallback, void,
|
||||
( void (*function) ( const char *string, FxBool fatal ) ))
|
||||
{
|
||||
GDBG_INFO(80,"grErrorSetCallback(0x%x)",function);
|
||||
GrErrorCallback = function;
|
||||
}
|
||||
|
||||
#ifdef __WIN32__
|
||||
void
|
||||
_grErrorWindowsCallback( const char *s, FxBool fatal )
|
||||
{
|
||||
if ( fatal ) {
|
||||
GDBG_ERROR("glide", s);
|
||||
grGlideShutdown();
|
||||
MessageBox(NULL, s, NULL, MB_OK);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
_grErrorDefaultCallback( const char *s, FxBool fatal )
|
||||
{
|
||||
if ( fatal ) {
|
||||
GDBG_ERROR("glide",s);
|
||||
grGlideShutdown();
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_OS_MACOS)
|
||||
{
|
||||
Str255 errBuf;
|
||||
|
||||
errBuf[0] = sprintf((char*)(errBuf + 1), "%s", s);
|
||||
DebugStr(errBuf);
|
||||
}
|
||||
#endif /* (GLIDE_PLATFORM * GLIDE_OS_MACOS) */
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __DOS__
|
||||
int _guHeapCheck( void )
|
||||
{
|
||||
int i = _heapchk();
|
||||
|
||||
if ( i != _HEAPOK )
|
||||
printf( "heapchk: %d\n", i );
|
||||
|
||||
return ( i == 0 );
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
_grAssert(char *exp, char *fileName, int lineNo)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GR_DCL_HW;
|
||||
|
||||
/* No recursive re-entry thank you very much */
|
||||
{
|
||||
static FxBool inProcP = FXFALSE;
|
||||
if (inProcP) return;
|
||||
inProcP = FXTRUE;
|
||||
}
|
||||
|
||||
/* dpc - 28 may 1997 - FixMe!
|
||||
* What to do here?
|
||||
*/
|
||||
#if GLIDE_INIT_HAL
|
||||
|
||||
#else /* !GLIDE_INIT_HAL */
|
||||
/* initRestoreVideo(); */
|
||||
sst1InitShutdown(gc->base_ptr);
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
|
||||
gdbg_printf("ASSERTION FAILED:\n");
|
||||
gdbg_printf("\tExpression: %s\n", exp);
|
||||
gdbg_printf("\tFile: %s\n", fileName);
|
||||
gdbg_printf("\tLine: %d\n", lineNo);
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG) && USE_PACKET_FIFO
|
||||
/* Spew about the state of the fifo since that's what most of the
|
||||
* assertions are about anyway.
|
||||
*/
|
||||
{
|
||||
gdbg_printf("Command Fifo:\n");
|
||||
gdbg_printf("\tfifoPtr: 0x%X\n"
|
||||
"\tfifoParams: 0x%X : (0x%X : 0x%X)\n"
|
||||
"\tfifoRoom: 0x%X : (0x%X : 0x%X)\n"
|
||||
"\tfifo hw: (0x%X : 0x%X) : (0x%X : 0x%X : 0x%X)\n"
|
||||
"\tStatus: 0x%X\n",
|
||||
gc->cmdTransportInfo.fifoPtr,
|
||||
gc->cmdTransportInfo.fifoStart, gc->cmdTransportInfo.fifoEnd,
|
||||
gc->cmdTransportInfo.fifoSize,
|
||||
gc->cmdTransportInfo.fifoRoom,
|
||||
gc->cmdTransportInfo.roomToReadPtr, gc->cmdTransportInfo.roomToEnd,
|
||||
HW_FIFO_PTR(FXTRUE), gc->cmdTransportInfo.fifoRead,
|
||||
GR_GET(hw->cmdFifoDepth), GR_GET(hw->cmdFifoHoles), GR_GET(hw->cmdFifoBase),
|
||||
GR_GET(hw->status));
|
||||
|
||||
#if !GLIDE_INIT_HAL
|
||||
if (gc->scanline_interleaved) {
|
||||
SstRegs* slaveHw = (SstRegs*)gc->slave_ptr;
|
||||
slaveHw = slaveHw; // FIXME: Below might not exist. *sigh*
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel, "\tsli: 0x%X : (0x%X : 0x%X : 0x%X)\n",
|
||||
HW_FIFO_PTR(FXFALSE),
|
||||
GR_GET(slaveHw->cmdFifoDepth),
|
||||
GR_GET(slaveHw->cmdFifoHoles),
|
||||
GR_GET(slaveHw->status));
|
||||
}
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
|
||||
#if GLIDE_USE_SHADOW_FIFO
|
||||
if (gc->cmdTransportInfo.fifoShadowBase != NULL) {
|
||||
const FxU32* fifoPtr = gc->cmdTransportInfo.fifoShadowBase;
|
||||
|
||||
GDBG_PRINTF("Shadow Fifo: 0x%X\n", gc->cmdTransportInfo.fifoShadowPtr);
|
||||
|
||||
#if 0
|
||||
while(fifoPtr != gc->cmdTransportInfo.fifoShadowPtr) GDBG_PRINTF("0x%X\n", *fifoPtr++);
|
||||
GDBG_PRINTF("\n");
|
||||
|
||||
GDBG_PRINTF("Up to fifo wrap: \n");
|
||||
while(fifoPtr < gc->cmdTransportInfo.fifoShadowBase + (kDebugFifoSize >> 2))
|
||||
GDBG_PRINTF("0x%X\n", *fifoPtr++);
|
||||
#endif
|
||||
|
||||
free(gc->cmdTransportInfo.fifoShadowBase);
|
||||
}
|
||||
#endif /* GLIDE_USE_SHADOW_FIFO */
|
||||
}
|
||||
#endif /* (GLIDE_PLATFORM & GLIDE_HW_CVG) && USE_PACKET_FIFO */
|
||||
|
||||
gdbg_printf("ABNORMAL TERMINATION\n");
|
||||
|
||||
exit(-1);
|
||||
|
||||
} /* _grAssert */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,78 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.2.1 2004/12/12 15:29:44 koolsmoky
|
||||
** cosmetics
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:10 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
*/
|
||||
|
||||
#define OFFICIAL 1
|
||||
#define FINAL 1
|
||||
|
||||
#include <fxver.h>
|
||||
#include "rcver.h"
|
||||
//#include "fxbldno.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
#ifndef GLIDE3
|
||||
#define VERSIONNAME "glide2x.dll\0"
|
||||
#else
|
||||
#define VERSIONNAME "glide3x.dll\0"
|
||||
#endif
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
|
||||
PRODUCTVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
|
||||
FILEFLAGSMASK 0x0030003FL
|
||||
FILEFLAGS (VER_PRIVATEBUILD|VER_PRERELEASE|VER_DEBUG)
|
||||
|
||||
FILEOS VOS_DOS_WINDOWS32
|
||||
FILETYPE VFT_DRV
|
||||
FILESUBTYPE VFT2_DRV_INSTALLABLE
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "3Dfx Interactive, Inc.\0"
|
||||
VALUE "FileDescription", "3Dfx Interactive, Inc. Glide DLL\0"
|
||||
VALUE "FileVersion", VERSIONSTR
|
||||
VALUE "InternalName", VERSIONNAME
|
||||
VALUE "LegalCopyright", "Copyright \251 3Dfx Interactive, Inc. 2004\0"
|
||||
VALUE "OriginalFilename", VERSIONNAME
|
||||
VALUE "ProductName", PRODNAME
|
||||
VALUE "ProductVersion", VERSIONSTR
|
||||
VALUE "Graphics Subsystem", HWSTR
|
||||
VALUE "Contact", "The Glide Open Source Project http://glide.sourceforge.net/"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
/* the following line should be extended for localized versions */
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
@@ -1,131 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 10 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 9 11/04/97 4:00p Dow
|
||||
* Banshee Mods
|
||||
*
|
||||
* 8 8/18/97 3:52p Peter
|
||||
* pre-hw arrival fixes/cleanup
|
||||
*
|
||||
* 7 6/02/97 4:09p Peter
|
||||
* Compile w/ gcc for Dural
|
||||
*
|
||||
* 6 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 5 5/21/97 6:05a Peter
|
||||
*/
|
||||
#ifndef __GLIDESYS_H__
|
||||
#define __GLIDESYS_H__
|
||||
|
||||
/*
|
||||
n** -----------------------------------------------------------------------
|
||||
** COMPILER/ENVIRONMENT CONFIGURATION
|
||||
** -----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* Endianness is stored in bits [30:31] */
|
||||
#define GLIDE_ENDIAN_SHIFT 30
|
||||
#define GLIDE_ENDIAN_LITTLE (0x1 << GLIDE_ENDIAN_SHIFT)
|
||||
#define GLIDE_ENDIAN_BIG (0x2 << GLIDE_ENDIAN_SHIFT)
|
||||
|
||||
/* OS is stored in bits [0:6] */
|
||||
#define GLIDE_OS_SHIFT 0
|
||||
#define GLIDE_OS_UNIX 0x1
|
||||
#define GLIDE_OS_DOS32 0x2
|
||||
#define GLIDE_OS_WIN32 0x4
|
||||
#define GLIDE_OS_MACOS 0x8
|
||||
#define GLIDE_OS_OS2 0x10
|
||||
#define GLIDE_OS_OTHER 0x40 /* For Proprietary Arcade HW */
|
||||
|
||||
#define GLIDE_SST_SHIFT 7
|
||||
#define GLIDE_SST_HW (0x2 << GLIDE_SST_SHIFT)
|
||||
|
||||
/* Hardware Type is stored in bits [9:13] */
|
||||
#define GLIDE_HW_SHIFT 9
|
||||
#define GLIDE_HW_SST1 (0x1 << GLIDE_HW_SHIFT)
|
||||
#define GLIDE_HW_SST96 (0x2 << GLIDE_HW_SHIFT)
|
||||
#define GLIDE_HW_H3 (0x4 << GLIDE_HW_SHIFT)
|
||||
#define GLIDE_HW_CVG (0x10 << GLIDE_HW_SHIFT)
|
||||
|
||||
/*
|
||||
** Make sure we handle all instances of WIN32
|
||||
*/
|
||||
#ifndef __WIN32__
|
||||
# if defined (_WIN32) || defined (WIN32) || defined(__NT__)
|
||||
# define __WIN32__
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* We need two checks on the OS: one for endian, the other for OS */
|
||||
/* Check for endianness */
|
||||
#if defined(__IRIX__) || defined(__sparc__) || defined(MACOS)
|
||||
# define GLIDE_ENDIAN GLIDE_ENDIAN_BIG
|
||||
#else
|
||||
# define GLIDE_ENDIAN GLIDE_ENDIAN_LITTLE
|
||||
#endif
|
||||
|
||||
/* Check for OS */
|
||||
#if defined(__IRIX__) || defined(__sparc__) || defined(__linux__)
|
||||
# define GLIDE_OS GLIDE_OS_UNIX
|
||||
#elif defined(__DOS__)
|
||||
# define GLIDE_OS GLIDE_OS_DOS32
|
||||
#elif defined(__WIN32__)
|
||||
# define GLIDE_OS GLIDE_OS_WIN32
|
||||
#elif defined(macintosh)
|
||||
# define GLIDE_OS GLIDE_OS_MACOS
|
||||
#else
|
||||
#error "Unknown OS"
|
||||
#endif
|
||||
|
||||
#define GLIDE_SST GLIDE_SST_HW
|
||||
|
||||
/* Check for type of hardware */
|
||||
#ifdef SST96
|
||||
# define GLIDE_HW GLIDE_HW_SST96
|
||||
#elif defined(H3)
|
||||
# define GLIDE_HW GLIDE_HW_H3
|
||||
#elif defined(CVG)
|
||||
# define GLIDE_HW GLIDE_HW_CVG
|
||||
#else /* Default to SST1 */
|
||||
# define GLIDE_HW GLIDE_HW_SST1
|
||||
#endif
|
||||
|
||||
|
||||
#define GLIDE_PLATFORM (GLIDE_ENDIAN | GLIDE_OS | GLIDE_SST | GLIDE_HW)
|
||||
|
||||
/*
|
||||
** Control the number of TMUs
|
||||
*/
|
||||
#ifndef GLIDE_NUM_TMU
|
||||
# define GLIDE_NUM_TMU 2
|
||||
#endif
|
||||
|
||||
|
||||
#if ((GLIDE_NUM_TMU < 0) && (GLIDE_NUM_TMU > 3))
|
||||
# error "GLIDE_NUM_TMU set to an invalid value"
|
||||
#endif
|
||||
|
||||
#endif /* __GLIDESYS_H__ */
|
||||
@@ -1,186 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 11 1/07/98 11:18a Atai
|
||||
* remove GrMipMapInfo and GrGC.mm_table in glide3
|
||||
*
|
||||
* 10 1/06/98 6:47p Atai
|
||||
* undo grSplash and remove gu routines
|
||||
*
|
||||
* 9 1/05/98 6:04p Atai
|
||||
* move 3df gu related data structure from glide.h to glideutl.h
|
||||
*
|
||||
* 8 12/18/97 2:13p Peter
|
||||
* fogTable cataclysm
|
||||
*
|
||||
* 7 12/15/97 5:52p Atai
|
||||
* disable obsolete glide2 api for glide3
|
||||
*
|
||||
* 6 8/14/97 5:32p Pgj
|
||||
* remove dead code per GMT
|
||||
*
|
||||
* 5 6/12/97 5:19p Pgj
|
||||
* Fix bug 578
|
||||
*
|
||||
* 4 3/05/97 9:36p Jdt
|
||||
* Removed guFbWriteRegion added guEncodeRLE16
|
||||
*
|
||||
* 3 1/16/97 3:45p Dow
|
||||
* Embedded fn protos in ifndef FX_GLIDE_NO_FUNC_PROTO
|
||||
*/
|
||||
|
||||
/* Glide Utility routines */
|
||||
|
||||
#ifndef __GLIDEUTL_H__
|
||||
#define __GLIDEUTL_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(GLIDE3) && defined(GLIDE3_ALPHA)
|
||||
/*
|
||||
** 3DF texture file structs
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FxU32 width, height;
|
||||
int small_lod, large_lod;
|
||||
GrAspectRatio_t aspect_ratio;
|
||||
GrTextureFormat_t format;
|
||||
} Gu3dfHeader;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FxU8 yRGB[16];
|
||||
FxI16 iRGB[4][3];
|
||||
FxI16 qRGB[4][3];
|
||||
FxU32 packed_data[12];
|
||||
} GuNccTable;
|
||||
|
||||
typedef struct {
|
||||
FxU32 data[256];
|
||||
} GuTexPalette;
|
||||
|
||||
typedef union {
|
||||
GuNccTable nccTable;
|
||||
GuTexPalette palette;
|
||||
} GuTexTable;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Gu3dfHeader header;
|
||||
GuTexTable table;
|
||||
void *data;
|
||||
FxU32 mem_required; /* memory required for mip map in bytes. */
|
||||
} Gu3dfInfo;
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef FX_GLIDE_NO_FUNC_PROTO
|
||||
/*
|
||||
** rendering functions
|
||||
*/
|
||||
|
||||
#ifndef GLIDE3_ALPHA
|
||||
FX_ENTRY void FX_CALL
|
||||
guAADrawTriangleWithClip( const GrVertex *a, const GrVertex
|
||||
*b, const GrVertex *c);
|
||||
|
||||
FX_ENTRY void FX_CALL
|
||||
guDrawTriangleWithClip(
|
||||
const GrVertex *a,
|
||||
const GrVertex *b,
|
||||
const GrVertex *c
|
||||
);
|
||||
|
||||
FX_ENTRY void FX_CALL
|
||||
guDrawPolygonVertexListWithClip( int nverts, const GrVertex vlist[] );
|
||||
|
||||
/*
|
||||
** hi-level rendering utility functions
|
||||
*/
|
||||
FX_ENTRY void FX_CALL
|
||||
guAlphaSource( GrAlphaSource_t mode );
|
||||
|
||||
FX_ENTRY void FX_CALL
|
||||
guColorCombineFunction( GrColorCombineFnc_t fnc );
|
||||
|
||||
FX_ENTRY int FX_CALL
|
||||
guEncodeRLE16( void *dst,
|
||||
void *src,
|
||||
FxU32 width,
|
||||
FxU32 height );
|
||||
|
||||
FX_ENTRY FxU16 * FX_CALL
|
||||
guTexCreateColorMipMap( void );
|
||||
#endif /* !GLIDE3_ALPHA */
|
||||
|
||||
#ifdef GLIDE3
|
||||
FX_ENTRY void FX_CALL
|
||||
guGammaCorrectionRGB( FxFloat red, FxFloat green, FxFloat blue );
|
||||
#endif
|
||||
|
||||
/*
|
||||
** fog stuff
|
||||
*/
|
||||
FX_ENTRY float FX_CALL
|
||||
guFogTableIndexToW( int i );
|
||||
|
||||
FX_ENTRY void FX_CALL
|
||||
guFogGenerateExp( GrFog_t fogtable[], float density );
|
||||
|
||||
FX_ENTRY void FX_CALL
|
||||
guFogGenerateExp2( GrFog_t fogtable[], float density );
|
||||
|
||||
FX_ENTRY void FX_CALL
|
||||
guFogGenerateLinear(GrFog_t fogtable[],
|
||||
float nearZ, float farZ );
|
||||
|
||||
/*
|
||||
** endian stuff
|
||||
*/
|
||||
#ifndef GLIDE3_ALPHA
|
||||
FX_ENTRY FxU32 FX_CALL
|
||||
guEndianSwapWords( FxU32 value );
|
||||
|
||||
FX_ENTRY FxU16 FX_CALL
|
||||
guEndianSwapBytes( FxU16 value );
|
||||
#endif /* !GLIDE3_ALPHA */
|
||||
|
||||
/*
|
||||
** hi-level texture manipulation tools.
|
||||
*/
|
||||
FX_ENTRY FxBool FX_CALL
|
||||
gu3dfGetInfo( const char *filename, Gu3dfInfo *info );
|
||||
|
||||
FX_ENTRY FxBool FX_CALL
|
||||
gu3dfLoad( const char *filename, Gu3dfInfo *data );
|
||||
|
||||
#endif /* FX_GLIDE_NO_FUNC_PROTO */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __GLIDEUTL_H__ */
|
||||
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 6 8/30/97 5:59p Tarolli
|
||||
* cleanups
|
||||
*
|
||||
* 5 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 4 5/21/97 6:05a Peter
|
||||
*
|
||||
* 3 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
**
|
||||
*/
|
||||
#include <string.h>
|
||||
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
GR_DIENTRY(guMovieStart, void, ( void ))
|
||||
{
|
||||
GrErrorCallback( "guMovieStart: unsupported", FXFALSE );
|
||||
}
|
||||
|
||||
GR_DIENTRY(guMovieStop, void, ( void ))
|
||||
{
|
||||
GrErrorCallback( "guMovieStop: unsupported", FXFALSE );
|
||||
}
|
||||
|
||||
GR_DIENTRY(guMovieSetName, void, ( const char *name ))
|
||||
{
|
||||
GrErrorCallback( "guMovieSetName: unsupported", FXFALSE );
|
||||
}
|
||||
@@ -1,832 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.2.7 2005/04/25 23:58:41 koolsmoky
|
||||
** Fix _texDownloadProcs comma separator.
|
||||
** Thanks to Ozkan Sezer <sezeroz@gmail.com>.
|
||||
**
|
||||
** Revision 1.1.1.1.2.6 2005/01/22 14:52:02 koolsmoky
|
||||
** enabled packed argb for cmd packet type 3
|
||||
**
|
||||
** Revision 1.1.1.1.2.5 2005/01/13 16:09:05 koolsmoky
|
||||
** Restict calls to pciOpen() pciClose() when compiled with DIRECTX option. this fixes problems with the win32 miniport opened in exclusive mode.
|
||||
**
|
||||
** Revision 1.1.1.1.2.4 2005/01/02 04:15:53 koolsmoky
|
||||
** disabled mtrr's on sli slave devices
|
||||
**
|
||||
** Revision 1.1.1.1.2.3 2004/12/27 20:46:37 koolsmoky
|
||||
** added dll entry point to call grGlideShutdown when a process is detached
|
||||
**
|
||||
** Revision 1.1.1.1.2.2 2004/12/23 20:45:56 koolsmoky
|
||||
** converted to nasm syntax
|
||||
** added x86 asm, 3dnow! triangle and mmx, 3dnow! texture download optimizations
|
||||
**
|
||||
** Revision 1.1.1.1.2.1 2004/12/12 15:27:47 koolsmoky
|
||||
** changes to support new cpuid
|
||||
** set default to disable alpha dither subtraction
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:10 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 110 6/30/98 6:08p Jeske
|
||||
** fixed bug where we tried to setup MTRRs on old (<p6) systems which
|
||||
** didn't have them.
|
||||
**
|
||||
** 109 5/21/98 5:52p Peter
|
||||
** mismatched pairs
|
||||
**
|
||||
** 108 5/20/98 3:51p Peter
|
||||
** no fifo glide
|
||||
**
|
||||
** 107 5/18/98 12:15p Peter
|
||||
** better point code
|
||||
**
|
||||
** 106 4/21/98 5:53p Peter
|
||||
** slidetect vs hw pointers
|
||||
**
|
||||
** 105 4/08/98 3:52p Peter
|
||||
** point coordinate truncation
|
||||
**
|
||||
** 104 4/06/98 9:55a Peter
|
||||
** sli slave detection for oem dll
|
||||
**
|
||||
** 103 3/17/98 6:50p Peter
|
||||
** sli paired vs active
|
||||
**
|
||||
** 102 3/17/98 3:00p Peter
|
||||
** removed unused stats
|
||||
**
|
||||
** 101 3/13/98 5:08p Peter
|
||||
** doh, got it backwards
|
||||
**
|
||||
** 100 3/13/98 3:39p Peter
|
||||
** voodoo1.5 silliness
|
||||
**
|
||||
** 99 2/20/98 9:05a Peter
|
||||
** removed remnants of comdex grot
|
||||
**
|
||||
** 98 2/11/98 5:25p Peter
|
||||
** detection dialog fixes
|
||||
**
|
||||
** 97 1/30/98 4:51p Peter
|
||||
** fixed sli-detect for multiple pairs
|
||||
**
|
||||
** 96 1/30/98 4:27p Peter
|
||||
** no uswc for sli slave
|
||||
**
|
||||
** 95 1/24/98 12:29p Peter
|
||||
** more caching fun
|
||||
**
|
||||
** 94 1/20/98 11:03a Peter
|
||||
** env var to force triple buffering
|
||||
*
|
||||
* 93 1/16/98 5:41p Peter
|
||||
* fixed sense of lod_dither
|
||||
*
|
||||
* 92 1/14/98 10:22a Peter
|
||||
* no more hacks
|
||||
*
|
||||
* 91 1/08/98 7:09p Peter
|
||||
* real hw stuff modulo makefile change
|
||||
*
|
||||
* 90 1/07/98 11:18a Atai
|
||||
* remove GrMipMapInfo and GrGC.mm_table in glide3
|
||||
*
|
||||
* 89 1/07/98 10:22a Peter
|
||||
* lod dithering env var
|
||||
*
|
||||
* 88 12/17/97 10:08a Peter
|
||||
* fast system comdex twiddling
|
||||
*
|
||||
* 87 12/09/97 4:20p Peter
|
||||
* 0x100 fbiRev ofset for v2
|
||||
*
|
||||
* 86 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 85 12/05/97 4:26p Peter
|
||||
* watcom warnings
|
||||
*
|
||||
* 84 12/03/97 2:36p Peter
|
||||
* upped comdex reset defaults
|
||||
*
|
||||
* 83 12/02/97 9:48a Dow
|
||||
* Removed some spurious code I inadvertantly added.
|
||||
*
|
||||
* 82 11/21/97 6:24p Dow
|
||||
* Banshee Lying about being Rush stuf
|
||||
*
|
||||
* 81 11/21/97 11:19a Dow
|
||||
* Made Banshee report Voodoo2
|
||||
*
|
||||
* 80 11/20/97 6:39p Peter
|
||||
* fixed direct_exec w/ csim
|
||||
*
|
||||
* 79 11/19/97 2:49p Peter
|
||||
* env vars in registry for win32
|
||||
*
|
||||
* 78 11/17/97 4:55p Peter
|
||||
* watcom warnings/chipfield stuff
|
||||
*
|
||||
* 77 11/15/97 7:43p Peter
|
||||
* more comdex silliness
|
||||
*
|
||||
* 76 11/14/97 11:10p Peter
|
||||
* open vs hw init confusion
|
||||
*
|
||||
* 75 11/14/97 5:02p Peter
|
||||
* more comdex stuff
|
||||
*
|
||||
* 74 11/14/97 12:09a Peter
|
||||
* comdex thing and some other stuff
|
||||
*
|
||||
* 73 11/12/97 9:54p Peter
|
||||
* fixed all the muckage from new config
|
||||
*
|
||||
* 72 11/12/97 9:37p Dow
|
||||
* Textures on Banshee half work
|
||||
*
|
||||
* 71 11/12/97 9:22a Dow
|
||||
* h3 mods
|
||||
*
|
||||
* 70 11/08/97 3:34p Peter
|
||||
* fixed stupid gdbg_info crasher
|
||||
*
|
||||
* 69 11/04/97 4:00p Dow
|
||||
* Banshee Mods
|
||||
*
|
||||
* 68 11/03/97 3:43p Peter
|
||||
* h3/cvg cataclysm
|
||||
*
|
||||
* 67 11/01/97 12:11p Pgj
|
||||
* glide.dll ---> glide2x.dll
|
||||
*
|
||||
* 66 10/31/97 8:53a Peter
|
||||
* last lying change, really
|
||||
*
|
||||
* 65 10/30/97 3:42p Peter
|
||||
* protected the last bit of nonsense
|
||||
*
|
||||
* 64 10/30/97 3:37p Peter
|
||||
* spoof sst1
|
||||
*
|
||||
* 63 10/29/97 2:45p Peter
|
||||
* C version of Taco's packing code
|
||||
*
|
||||
* 62 10/23/97 5:28p Peter
|
||||
* sli fifo thing
|
||||
*
|
||||
* 61 9/15/97 7:31p Peter
|
||||
* more cmdfifo cleanup, fixed normal buffer clear, banner in the right
|
||||
* place, lfb's are on, Hmmmm.. probably more
|
||||
*
|
||||
* 60 9/10/97 10:13p Peter
|
||||
* fifo logic from GaryT, non-normalized fp first cut
|
||||
*
|
||||
* 59 9/05/97 5:29p Peter
|
||||
* changes for direct hw
|
||||
*
|
||||
* 58 9/01/97 3:18p Peter
|
||||
* correct integer rounding for pts
|
||||
*
|
||||
* 57 8/30/97 5:59p Tarolli
|
||||
* init and hal fixups
|
||||
*
|
||||
* 56 8/30/97 1:19p Peter
|
||||
* first cut at using blit to clear, more to come to do inner rects
|
||||
*
|
||||
* 55 8/18/97 3:52p Peter
|
||||
* pre-hw arrival fixes/cleanup
|
||||
*
|
||||
* 54 7/30/97 2:42p Peter
|
||||
* shared and sanitized
|
||||
*
|
||||
* 53 7/28/97 2:41p Peter
|
||||
* turned sli code back on for cvg, but waiting for hal
|
||||
*
|
||||
* 52 7/25/97 11:40a Peter
|
||||
* removed dHalf, change field name to match real use for cvg
|
||||
*
|
||||
* 51 7/08/97 2:47p Peter
|
||||
* fixed merge stupidity from last checkin
|
||||
*
|
||||
* 50 7/02/97 12:28p Peter
|
||||
* removed spurious NOP, tex dl
|
||||
*
|
||||
* 49 6/24/97 4:02p Peter
|
||||
* proper cmd fifo placement
|
||||
*
|
||||
* 48 6/23/97 4:46p Peter
|
||||
* fixed my ,uckage
|
||||
* 47 6/23/97 4:43p Peter
|
||||
* cleaned up #defines etc for a nicer tree
|
||||
**
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
#if GLIDE_DISPATCH_SETUP
|
||||
/* Collection of all of the known procs for a given system */
|
||||
#if GLIDE_PACKED_RGB
|
||||
static GrTriSetupProc _triSetupProcs[][3][2] =
|
||||
#else /* !GLIDE_PACKED_RGB */
|
||||
static GrTriSetupProc _triSetupProcs[][1][2] =
|
||||
#endif /* !GLIDE_PACKED_RGB */
|
||||
{
|
||||
/* Default Procs */
|
||||
{
|
||||
{_trisetup, _trisetup_cull}
|
||||
#if GLIDE_PACKED_RGB
|
||||
,{_trisetup_rgb, _trisetup_cull_rgb},
|
||||
{_trisetup_argb, _trisetup_cull_argb}
|
||||
#endif /* GLIDE_PACKED_RGB */
|
||||
},
|
||||
#if GL_AMD3D
|
||||
/* 3DNow!(tm) Procs */
|
||||
{
|
||||
{_trisetup_3DNow, _trisetup_cull_3DNow}
|
||||
#if GLIDE_PACKED_RGB
|
||||
,{_trisetup_rgb_3DNow, _trisetup_cull_rgb_3DNow},
|
||||
{_trisetup_argb_3DNow, _trisetup_cull_argb_3DNow}
|
||||
#endif /* GLIDE_PACKED_RGB */
|
||||
},
|
||||
#endif /* GL_AMD3D */
|
||||
};
|
||||
#endif /* GLIDE_DISPATCH_SETUP */
|
||||
|
||||
#if GLIDE_DISPATCH_DOWNLOAD
|
||||
static GrTexDownloadProc _texDownloadProcs[][2][4] =
|
||||
{
|
||||
/* Default Procs */
|
||||
{
|
||||
{
|
||||
_grTexDownload_Default_8_1,
|
||||
_grTexDownload_Default_8_2,
|
||||
_grTexDownload_Default_8_4,
|
||||
_grTexDownload_Default_8_WideS
|
||||
},
|
||||
{
|
||||
_grTexDownload_Default_16_1,
|
||||
_grTexDownload_Default_16_2,
|
||||
_grTexDownload_Default_16_WideS,
|
||||
_grTexDownload_Default_16_WideS
|
||||
}
|
||||
},
|
||||
#if GL_AMD3D
|
||||
{
|
||||
{
|
||||
_grTexDownload_Default_8_1,
|
||||
_grTexDownload_Default_8_2,
|
||||
_grTexDownload_Default_8_4,
|
||||
_grTexDownload_3DNow_MMX,
|
||||
},
|
||||
{
|
||||
_grTexDownload_Default_16_1,
|
||||
_grTexDownload_Default_16_2,
|
||||
_grTexDownload_3DNow_MMX,
|
||||
_grTexDownload_3DNow_MMX,
|
||||
}
|
||||
},
|
||||
#endif /* GL_AMD3D */
|
||||
#if GL_MMX
|
||||
{
|
||||
{
|
||||
_grTexDownload_Default_8_1,
|
||||
_grTexDownload_Default_8_2,
|
||||
_grTexDownload_Default_8_4,
|
||||
_grTexDownload_MMX,
|
||||
},
|
||||
{
|
||||
_grTexDownload_Default_16_1,
|
||||
_grTexDownload_Default_16_2,
|
||||
_grTexDownload_MMX,
|
||||
_grTexDownload_MMX,
|
||||
}
|
||||
},
|
||||
#endif /* GL_MMX */
|
||||
};
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
BOOL WINAPI
|
||||
DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
|
||||
{
|
||||
switch( ul_reason_for_call ) {
|
||||
case DLL_PROCESS_DETACH:
|
||||
GDBG_INFO(80, "DllMain: DLL_PROCESS_DETACH\n");
|
||||
grGlideShutdown();
|
||||
pciClose();
|
||||
break;
|
||||
case DLL_PROCESS_ATTACH:
|
||||
if (!pciOpen()) {
|
||||
GDBG_INFO(80, "pci bus could not be opened\n");
|
||||
return FALSE;
|
||||
}
|
||||
GDBG_INFO(80, "DllMain: DLL_PROCESS_ATTACH\n");
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
GDBG_INFO(80, "DllMain: DLL_THREAD_ATTACH\n");
|
||||
break;
|
||||
case DLL_THREAD_DETACH:
|
||||
GDBG_INFO(80, "DllMain: DLL_THREAD_DETACH\n");
|
||||
break;
|
||||
default:
|
||||
GDBG_INFO(80, "DllMain: Unhandled message.\n");
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
} /* DllMain */
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: _grSstDetectResources
|
||||
Date: --
|
||||
Implementor(s): Dow, Gmt, Jdt
|
||||
Library: Glide
|
||||
Description:
|
||||
Discover devices on the PCI bus.
|
||||
Discover configuration of detected devices.
|
||||
Initialize all Glide GC's
|
||||
|
||||
Recognized devices depend upon compile time flags
|
||||
|
||||
This code should NOT initialize the hardware
|
||||
any more than is necessary for discovery of
|
||||
configuration
|
||||
|
||||
Arguments: none
|
||||
Return:
|
||||
FXTRUE - at least one device was detected
|
||||
FXFALSE - no devices were detected.
|
||||
-------------------------------------------------------------------*/
|
||||
FxBool
|
||||
_grSstDetectResources(void)
|
||||
{
|
||||
static FxBool calledP = FXFALSE;
|
||||
FxBool rv = FXFALSE;
|
||||
FxU32 ctx, device;
|
||||
|
||||
GDBG_INFO(280, "_grSstDetectResources()\n");
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG)
|
||||
{
|
||||
#if GLIDE_INIT_HAL
|
||||
HalInfo* halInfo = fxHalInit(0);
|
||||
if (halInfo == NULL) goto __errExit;
|
||||
#else /* !GLIDE_INIT_HAL */
|
||||
FxDeviceInfo dummyDevInfo;
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
|
||||
/* The first time through the init code we need to map
|
||||
* all of the boards. Future calls can just grab this
|
||||
* info out of the halInfo that we have here.
|
||||
*/
|
||||
if (!calledP) {
|
||||
FxU32 count = HAL_MAX_BOARDS;
|
||||
FxBool inSliPairP = FXFALSE;
|
||||
GrHwConfiguration* hwConfig = &_GlideRoot.hwConfig;
|
||||
|
||||
/* NB: The hw will initially return fbiRevision == 2, but
|
||||
* the init code does some more dorking w/ stuff and detects
|
||||
* if it is really a CVG and sets it to 4.
|
||||
*/
|
||||
const FxU32 hwRevNum = ((GETENV("FX_GLIDE_HW_REV") == NULL)
|
||||
? 4
|
||||
: atol(GETENV("FX_GLIDE_HW_REV")));
|
||||
|
||||
for(ctx = device = 0; device < count; device++) {
|
||||
const FxDeviceInfo* curDev = NULL;
|
||||
FxBool regInitP = FXFALSE;
|
||||
SstRegs* devRegs;
|
||||
|
||||
#if GLIDE_INIT_HAL
|
||||
devRegs = fxHalMapBoard(device);
|
||||
curDev = halInfo->boardInfo + device;
|
||||
#else /* !GLIDE_INIT_HAL */
|
||||
devRegs = (SstRegs*)sst1InitMapBoard(device);
|
||||
if (devRegs != NULL) {
|
||||
if (sst1InitGetDeviceInfo((FxU32*)devRegs, &dummyDevInfo)) {
|
||||
dummyDevInfo.virtAddr[0] = devRegs;
|
||||
curDev = &dummyDevInfo;
|
||||
}
|
||||
}
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
|
||||
if ((devRegs != NULL) &&
|
||||
(curDev != NULL) &&
|
||||
(curDev->fbiRevision >= hwRevNum)) {
|
||||
const FxU32 curSstNum = hwConfig->num_sst;
|
||||
FxU32 i;
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG)
|
||||
/* Internally we always keep the real type. */
|
||||
hwConfig->SSTs[ctx].type = GR_SSTTYPE_Voodoo2;
|
||||
#else
|
||||
#error "What do you think you're doing?"
|
||||
#endif
|
||||
|
||||
#if GLIDE_INIT_HAL
|
||||
if (!fxHalInitRegisters(curDev->virtAddr[0])) goto __errRegFailure;
|
||||
|
||||
#else /* !GLIDE_INIT_HAL */
|
||||
/* dpc - 23 jan 1998 - FixMe!
|
||||
* We set up the caching characteristics here so that we
|
||||
* mimic the actions of the nt driver, where everything is
|
||||
* happy, in win95. However, if this is the slave of an sli
|
||||
* pair then we don't want to waste mtrr's that we're never
|
||||
* really going to write to.
|
||||
*/
|
||||
if (!inSliPairP/* && (_GlideRoot.CPUType.family >= 6)*/) {
|
||||
sst1InitCaching((FxU32*)devRegs, FXTRUE);
|
||||
}
|
||||
|
||||
if (!sst1InitRegisters((FxU32*)devRegs) ||
|
||||
!sst1InitGetDeviceInfo((FxU32*)devRegs, &dummyDevInfo)) goto __errRegFailure;
|
||||
curDev = &dummyDevInfo;
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
|
||||
/* Set up pointers to the various address spaces within the hw */
|
||||
_GlideRoot.GCs[ctx].base_ptr = (FxU32*)HW_BASE_PTR(devRegs);
|
||||
_GlideRoot.GCs[ctx].reg_ptr = (FxU32*)HW_REG_PTR(devRegs);
|
||||
_GlideRoot.GCs[ctx].lfb_ptr = (FxU32*)HW_LFB_PTR(devRegs);
|
||||
_GlideRoot.GCs[ctx].tex_ptr = (FxU32*)HW_TEX_PTR(devRegs);
|
||||
|
||||
/* Video parameters */
|
||||
_GlideRoot.GCs[ctx].grSstRez = GR_RESOLUTION_NONE;
|
||||
_GlideRoot.GCs[ctx].grSstRefresh = curDev->fbiVideoRefresh;
|
||||
|
||||
/* Chip configuration */
|
||||
_GlideRoot.GCs[ctx].num_tmu = curDev->numberTmus;
|
||||
_GlideRoot.GCs[ctx].fbuf_size = hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.fbRam;
|
||||
|
||||
/* Independet board or physical sli master */
|
||||
if (!inSliPairP) {
|
||||
_GlideRoot.gcMap[curSstNum] = _GlideRoot.gcNum;
|
||||
|
||||
/* Voodoo^2 glide2x returns that it is an sst1, but the
|
||||
* revision is bumped so that developers can really tell.
|
||||
* Additionally, we now have the fun on Voodoo^1.5 which is
|
||||
* just a Voodoo^2 in a 2200 configuration.
|
||||
*/
|
||||
hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.fbiRev = (curDev->fbiRevision +
|
||||
((curDev->numberTmus == 1)
|
||||
? 0x080
|
||||
: 0x100));
|
||||
|
||||
hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.fbRam = curDev->fbiMemSize;
|
||||
hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.nTexelfx = curDev->numberTmus;
|
||||
hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.sliDetect = curDev->sliDetected;
|
||||
|
||||
for(i = 0; i < curDev->numberTmus; i++) {
|
||||
const FxU32 curTmuMemSize = curDev->tmuMemSize[i];
|
||||
|
||||
hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.tmuConfig[i].tmuRev = curDev->tmuRevision;
|
||||
hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.tmuConfig[i].tmuRam = curTmuMemSize;
|
||||
}
|
||||
|
||||
hwConfig->num_sst++;
|
||||
}
|
||||
|
||||
/* Clear the tmu state */
|
||||
for(i = 0; i < curDev->numberTmus; i++) {
|
||||
const FxU32 curTmuMemSize = curDev->tmuMemSize[i];
|
||||
|
||||
memset(&_GlideRoot.GCs[ctx].tmu_state[i], 0, sizeof(_GlideRoot.GCs[ctx].tmu_state[i]));
|
||||
_GlideRoot.GCs[ctx].tmu_state[i].total_mem = (curTmuMemSize << 20);
|
||||
|
||||
_GlideRoot.GCs[ctx].tmu_state[i].ncc_mmids[0] =
|
||||
_GlideRoot.GCs[ctx].tmu_state[i].ncc_mmids[1] = GR_NULL_MIPMAP_HANDLE;
|
||||
}
|
||||
|
||||
/* sst1GetDeviceInfo will not return any pairing information
|
||||
* until after the boards are paired w/ sst1InitSli which we
|
||||
* have not yet done. Currently we assume that the next
|
||||
* discovered board will be the slave.
|
||||
*/
|
||||
_GlideRoot.GCs[ctx].scanline_interleaved = curDev->sliDetected;
|
||||
_GlideRoot.GCs[ctx].sliPairP = curDev->sliPaired;
|
||||
_GlideRoot.GCs[ctx].slave_ptr = NULL;
|
||||
|
||||
/* Are we currenly mapping a physcial sli-slave? */
|
||||
if (curDev->sliDetected && inSliPairP) {
|
||||
_GlideRoot.GCs[ctx - 1].slave_ptr = _GlideRoot.GCs[ctx].base_ptr;
|
||||
|
||||
/* Report the minimum of the two boards' memory if they
|
||||
* are different. The hw does not care becuase it is just
|
||||
* not going to access the memory.
|
||||
*/
|
||||
{
|
||||
const FxU32 curSstNum = hwConfig->num_sst - 1;
|
||||
GrTMUConfig_t* tmuConfig = hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.tmuConfig;
|
||||
|
||||
/* Fbi memory */
|
||||
if ((FxU32)hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.fbRam != curDev->fbiMemSize) {
|
||||
hwConfig->SSTs[curSstNum].sstBoard.Voodoo2Config.fbRam = curDev->fbiMemSize;
|
||||
}
|
||||
|
||||
/* Tmu memory */
|
||||
for(i = 0; i < curDev->numberTmus; i++) {
|
||||
if ((FxU32)tmuConfig[i].tmuRam != curDev->tmuMemSize[i]) {
|
||||
tmuConfig[i].tmuRam = MIN((FxU32)tmuConfig[i].tmuRam, curDev->tmuMemSize[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* On an sli system the boards cannot be addressed
|
||||
* separately so pairing and detection are different things,
|
||||
* and we need to keep track of these paired boards as an
|
||||
* atomic unit.
|
||||
*/
|
||||
inSliPairP = (curDev->sliPaired ? !inSliPairP : FXFALSE);
|
||||
|
||||
/* This device is ready to go. */
|
||||
regInitP = FXTRUE;
|
||||
_GlideRoot.gcNum++;
|
||||
_GlideRoot.GCs[ctx].hwInitP = FXTRUE;
|
||||
|
||||
rv = FXTRUE;
|
||||
ctx++;
|
||||
|
||||
__errRegFailure:
|
||||
/* For some reason we failed to init the board that we just mapped. */
|
||||
if (!regInitP && (devRegs != NULL)) {
|
||||
#if GLIDE_INIT_HAL
|
||||
fxHalShutdown(devRegs);
|
||||
#else /* !GLIDE_INIT_HAL */
|
||||
/*if (_GlideRoot.CPUType.family >= 6) {*/
|
||||
sst1InitCaching((FxU32*)devRegs, FXFALSE);
|
||||
/*}*/
|
||||
pciUnmapPhysical((FxU32)devRegs, 0x1000000UL);
|
||||
#endif /* !GLIDE_INIT_HAL */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Done setting up. Don't do the silly mapping thing again. */
|
||||
calledP = FXTRUE;
|
||||
} else {
|
||||
/* Did we previously find boards? */
|
||||
rv = (_GlideRoot.hwConfig.num_sst != 0);
|
||||
}
|
||||
|
||||
goto __errExit; /* Keep warnings happy */
|
||||
__errExit:
|
||||
;
|
||||
}
|
||||
#else
|
||||
# error "Write code for this chip"
|
||||
#endif
|
||||
|
||||
return rv;
|
||||
} /* _grSstDetectResources */
|
||||
|
||||
|
||||
static void
|
||||
displayBoardInfo(int i, GrHwConfiguration *hwc)
|
||||
{
|
||||
if ((hwc->SSTs[i].type == GR_SSTTYPE_VOODOO) ||
|
||||
(hwc->SSTs[i].type == GR_SSTTYPE_Voodoo2)) {
|
||||
int tmuNum;
|
||||
|
||||
GDBG_INFO(80,"SST board %d: 3Dfx Voodoo%s\n",
|
||||
i, ((hwc->SSTs[i].type == GR_SSTTYPE_VOODOO) ? " Graphics" : "^2"));
|
||||
if (hwc->SSTs[i].sstBoard.VoodooConfig.sliDetect) {
|
||||
GDBG_INFO(80,"\tScanline Interleaved\n");
|
||||
}
|
||||
|
||||
GDBG_INFO(80,"\tPixelfx rev 0x%lX with %d MB Frame Buffer\n",
|
||||
hwc->SSTs[i].sstBoard.VoodooConfig.fbiRev,
|
||||
hwc->SSTs[i].sstBoard.VoodooConfig.fbRam);
|
||||
GDBG_INFO(80,"\t%d Texelfx chips:\n",
|
||||
hwc->SSTs[i].sstBoard.VoodooConfig.nTexelfx);
|
||||
for (tmuNum = 0;
|
||||
tmuNum < hwc->SSTs[i].sstBoard.VoodooConfig.nTexelfx;
|
||||
tmuNum++) {
|
||||
GDBG_INFO(80,"\t\tTexelfx %d: Rev 0x%lX, %d MB Texture\n", tmuNum,
|
||||
hwc->SSTs[i].sstBoard.VoodooConfig.tmuConfig[tmuNum].tmuRev,
|
||||
hwc->SSTs[i].sstBoard.VoodooConfig.tmuConfig[tmuNum].tmuRam);
|
||||
}
|
||||
} else if (hwc->SSTs[i].type == GR_SSTTYPE_SST96) {
|
||||
GDBG_INFO(80,"SST board %d: 3Dfx Voodoo Rush\n", i);
|
||||
GDBG_INFO(80,"\tFBI Jr. with %d MB Frame Buffer\n",
|
||||
hwc->SSTs[i].sstBoard.SST96Config.fbRam);
|
||||
GDBG_INFO(80,"\tTexelfx chips: 1\n");
|
||||
} else {
|
||||
GDBG_INFO(80,"error: SSTs %d: unknown type\n",i);
|
||||
}
|
||||
} /* displayBoardInfo */
|
||||
|
||||
#if defined(FX_DLL_ENABLE) && (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
void
|
||||
_GlideInitEnvironment(void)
|
||||
{
|
||||
#define FN_NAME "_GlideInitEnvironment"
|
||||
int i;
|
||||
|
||||
if (_GlideRoot.initialized) /* only execute once */
|
||||
return;
|
||||
GDBG_INIT(); /* init the GDEBUG libraray */
|
||||
GDBG_INFO(80,"%s()\n", FN_NAME);
|
||||
|
||||
#ifdef __WIN32__
|
||||
grErrorSetCallback(_grErrorWindowsCallback);
|
||||
#else
|
||||
grErrorSetCallback(_grErrorDefaultCallback);
|
||||
#endif /* __WIN32__ */
|
||||
|
||||
#ifdef GLIDE_DEBUG
|
||||
GDBG_INFO(0,"GLIDE DEBUG LIBRARY\n"); /* unconditional display */
|
||||
#endif
|
||||
|
||||
#if defined(FX_DLL_ENABLE) && (GLIDE_PLATFORM & GLIDE_OS_WIN32)
|
||||
{ /* GMT: display the DLL pathname for sanity checking */
|
||||
char buf[132];
|
||||
if (GetModuleFileName(GetModuleHandle("glide2x.dll"), buf, sizeof(buf))) {
|
||||
#ifdef GLIDE_DEBUG
|
||||
GDBG_INFO(0,"DLL path: %s\n",buf); /* unconditional display */
|
||||
#else
|
||||
GDBG_INFO(80,"DLL path: %s\n",buf);
|
||||
#endif
|
||||
} /* silent failure */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Get CPU Info */
|
||||
_cpuid(&_GlideRoot.CPUType);
|
||||
|
||||
/* Check for vendor specific optimization cases */
|
||||
GDBG_INFO( 0," CPU Vendor: %s\n", _GlideRoot.CPUType.v_name);
|
||||
GDBG_INFO(80," MMX Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_MMX ? 'Y' : 'N');
|
||||
GDBG_INFO(80," SSE Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_SSE ? 'Y' : 'N');
|
||||
GDBG_INFO(80," SSE2 Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_SSE2 ? 'Y' : 'N');
|
||||
GDBG_INFO(80," 3DNow Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_3DNOW ? 'Y' : 'N');
|
||||
GDBG_INFO(80," MMX+ Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_MMXPLUS ? 'Y' : 'N');
|
||||
GDBG_INFO(80,"3DNow+ Support: %c\n", _GlideRoot.CPUType.os_support&_CPU_FEATURE_3DNOWPLUS ? 'Y' : 'N');
|
||||
|
||||
/* No CPU Extensions Allowed */
|
||||
if (GETENV("FX_GLIDE_NO_CPU_EXTENSIONS"))
|
||||
{
|
||||
_GlideRoot.CPUType.feature = _GlideRoot.CPUType.os_support = 0;
|
||||
GDBG_INFO(0,"CPU Extensions disabled\n");
|
||||
}
|
||||
|
||||
#if GLIDE_DISPATCH_SETUP || GLIDE_DISPATCH_DOWNLOAD
|
||||
/* Default case */
|
||||
#if GLIDE_DISPATCH_SETUP
|
||||
_GlideRoot.deviceArchProcs.curTriProcs = _triSetupProcs + 0;
|
||||
#endif /* GLIDE_DISPATCH_SETUP */
|
||||
#if GLIDE_DISPATCH_DOWNLOAD
|
||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 0;
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
|
||||
/* Check for vendor specific optimization cases */
|
||||
#ifdef GL_MMX
|
||||
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_MMX) {
|
||||
#if GLIDE_DISPATCH_DOWNLOAD
|
||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 2;
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
}
|
||||
#endif /* GL_MMX */
|
||||
|
||||
#ifdef GL_AMD3D
|
||||
if (_GlideRoot.CPUType.os_support & _CPU_FEATURE_3DNOW) {
|
||||
#if GLIDE_DISPATCH_SETUP
|
||||
_GlideRoot.deviceArchProcs.curTriProcs = _triSetupProcs + 1;
|
||||
#endif /* GLIDE_DISPATCH_SETUP */
|
||||
#if GLIDE_DISPATCH_DOWNLOAD
|
||||
_GlideRoot.deviceArchProcs.curTexProcs = _texDownloadProcs + 1;
|
||||
#endif /* GLIDE_DISPATCH_DOWNLOAD */
|
||||
}
|
||||
#endif /* GL_AMD3D */
|
||||
|
||||
#endif /* GLIDE_DISPATCH_SETUP || GLIDE_DISPATCH_DOWNLOAD */
|
||||
|
||||
/* Check for user environment tweaks */
|
||||
{
|
||||
const char* envStr;
|
||||
|
||||
#define GLIDE_GETENV(__envVar, __defVal) \
|
||||
(((envStr = GETENV(__envVar)) == NULL) ? (__defVal) : atol(envStr))
|
||||
|
||||
_GlideRoot.environment.triBoundsCheck = (GETENV("FX_GLIDE_BOUNDS_CHECK") != NULL);
|
||||
_GlideRoot.environment.noSplash = (GETENV("FX_GLIDE_NO_SPLASH") != NULL);
|
||||
_GlideRoot.environment.shamelessPlug = (GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL);
|
||||
_GlideRoot.environment.ignoreReopen = (GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL);
|
||||
_GlideRoot.environment.texLodDither = ((GETENV("FX_GLIDE_LOD_DITHER") == NULL)
|
||||
? 0x00UL
|
||||
: SST_TLODDITHER);
|
||||
|
||||
_GlideRoot.environment.nColorBuffer = GLIDE_GETENV("FX_GLIDE_ALLOC_COLOR", -1L);
|
||||
_GlideRoot.environment.nAuxBuffer = GLIDE_GETENV("FX_GLIDE_ALLOC_AUX", -1L);
|
||||
_GlideRoot.environment.swFifoLWM = GLIDE_GETENV("FX_GLIDE_LWM", -1L);
|
||||
|
||||
_GlideRoot.environment.swapInterval = GLIDE_GETENV("FX_GLIDE_SWAPINTERVAL", -1L);
|
||||
if ((envStr != NULL) && (_GlideRoot.environment.swapInterval < 0)) {
|
||||
_GlideRoot.environment.swapInterval = 0;
|
||||
}
|
||||
|
||||
_GlideRoot.environment.snapshot = GLIDE_GETENV("FX_SNAPSHOT", 0);
|
||||
|
||||
/* set default to disable alpha dither subtraction */
|
||||
switch(GLIDE_GETENV("SSTH3_ALPHADITHERMODE", 1L)) {
|
||||
default:
|
||||
case 1: /* Or Automatic? */
|
||||
case 2:
|
||||
_GlideRoot.environment.disableDitherSub = FXTRUE;
|
||||
break;
|
||||
case 3:
|
||||
_GlideRoot.environment.disableDitherSub = FXFALSE;
|
||||
break;
|
||||
}
|
||||
GDBG_INFO(80," disableDitherSub: %d\n",_GlideRoot.environment.disableDitherSub);
|
||||
|
||||
GDBG_INFO(80," triBoundsCheck: %d\n",_GlideRoot.environment.triBoundsCheck);
|
||||
GDBG_INFO(80," swapInterval: %d\n",_GlideRoot.environment.swapInterval);
|
||||
GDBG_INFO(80," noSplash: %d\n",_GlideRoot.environment.noSplash);
|
||||
GDBG_INFO(80," shamelessPlug: %d\n",_GlideRoot.environment.shamelessPlug);
|
||||
/*GDBG_INFO(80," cpu: %d\n",_GlideRoot.CPUType);*/
|
||||
GDBG_INFO(80," snapshot: %d\n",_GlideRoot.environment.snapshot);
|
||||
GDBG_INFO(80," disableDitherSub: %d\n",_GlideRoot.environment.disableDitherSub);
|
||||
}
|
||||
|
||||
/* constant pool */
|
||||
_GlideRoot.pool.f0 = 0.0F;
|
||||
_GlideRoot.pool.fHalf= 0.5F;
|
||||
_GlideRoot.pool.f1 = 1.0F;
|
||||
_GlideRoot.pool.f255 = 255.0F;
|
||||
|
||||
#if GLIDE_PACKED_RGB
|
||||
_GlideRoot.pool.fBiasHi = (float)(0x01 << 15);
|
||||
_GlideRoot.pool.fBiasLo = (float)(0x01 << 23);
|
||||
#endif /* GLIDE_PACKED_RGB */
|
||||
|
||||
_GlideRoot.current_sst = 0; /* make sure there's a valid GC */
|
||||
_GlideRoot.curGC = &_GlideRoot.GCs[0]; /* just for 'booting' the library */
|
||||
{
|
||||
const FxBool hwDetectP = _grSstDetectResources();
|
||||
|
||||
if (!hwDetectP) {
|
||||
char s[128];
|
||||
const char* errStr = s;
|
||||
|
||||
if (pciGetErrorCode() == PCI_ERR_NOERR) {
|
||||
#ifndef __linux__
|
||||
sprintf(s, "%s: glide2x.dll expected %s, none detected\n",
|
||||
FN_NAME, GLIDE_DRIVER_NAME);
|
||||
#else
|
||||
sprintf(s, "%s: libglide2x.so expected %s, none detected\n",
|
||||
FN_NAME, GLIDE_DRIVER_NAME);
|
||||
#endif
|
||||
} else {
|
||||
errStr = pciGetErrorString();
|
||||
}
|
||||
|
||||
GrErrorCallback(errStr, FXTRUE);
|
||||
}
|
||||
|
||||
/* GMT: this isn't really necessary since GlideRoot is static */
|
||||
for (i = 0; i < _GlideRoot.hwConfig.num_sst; i++) {
|
||||
_GlideRoot.GCs[i].mm_table.free_mmid = 0;
|
||||
displayBoardInfo(i, &_GlideRoot.hwConfig);
|
||||
}
|
||||
|
||||
_grMipMapInit();
|
||||
_GlideRoot.initialized = hwDetectP; /* save this for the end */
|
||||
}
|
||||
} /* _GlideInitEnvironment */
|
||||
@@ -1,958 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:11 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 26 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
**
|
||||
** 25 2/17/98 3:21p Peter
|
||||
** no splash w/o deepth buffer
|
||||
**
|
||||
** 24 1/28/98 1:12p Peter
|
||||
** Stupid swap state form gratuitous splash screen
|
||||
*
|
||||
* 23 1/09/98 6:48p Atai
|
||||
* grTexInfo, GR_LOD_* and GR_ASPECT_*
|
||||
*
|
||||
* 21 1/06/98 6:47p Atai
|
||||
* undo grSplash and remove gu routines
|
||||
*
|
||||
* 20 12/18/97 2:13p Peter
|
||||
* fogTable cataclysm
|
||||
*
|
||||
* 19 12/15/97 5:52p Atai
|
||||
* disable obsolete glide2 api for glide3
|
||||
*
|
||||
* 18 12/09/97 10:20a Peter
|
||||
* removed extraneous cruft
|
||||
*
|
||||
* 17 11/14/97 5:03p Peter
|
||||
* picking up the torch... removed #!@#$% c++ comments
|
||||
*
|
||||
* 16 10/23/97 5:30p Peter
|
||||
* packed rgb happiness
|
||||
*
|
||||
* 15 7/31/97 11:14a Peter
|
||||
* merge w/ sst1 glide tree, hopefully
|
||||
*
|
||||
* 13 7/07/97 3:05p Dow
|
||||
* Moved fouled clears
|
||||
*
|
||||
* 12 3/18/97 9:07p Dow
|
||||
* Got rid of #$#%#$ // comments
|
||||
*
|
||||
* 11 3/16/97 12:42a Jdt
|
||||
* Removed watcom warning
|
||||
*
|
||||
* 10 3/13/97 10:53p Jdt
|
||||
* Rewrote with simple optimizations. Changed prototype for
|
||||
* multi-resolution, and running as a better shameless plug.
|
||||
*
|
||||
* 9 3/13/97 2:52a Jdt
|
||||
* Added arguments to splash.
|
||||
*
|
||||
* 8 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
*
|
||||
* 7 3/01/97 6:24p Jdt
|
||||
* Made splash force yorigin.
|
||||
*
|
||||
* 6 1/02/97 1:06p Dow
|
||||
* Fixed state bug
|
||||
*
|
||||
* 3 11/17/96 11:16p Garymct
|
||||
* Updated grSplash code to set all of the necessary state itself rather
|
||||
* than expecting the caller to do so.
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
|
||||
#include "fxglide.h"
|
||||
#include "fxinline.h"
|
||||
|
||||
/*-----------------------------
|
||||
Constants
|
||||
-----------------------------*/
|
||||
#define MAX_NUM_VERTS 2556
|
||||
|
||||
#define FADEIN_END_PERCENT (0.3f)
|
||||
#define FADEOUT_BEGIN_PERCENT (0.8f)
|
||||
|
||||
#define SPIN_FRAMES 25
|
||||
#define SPIN_START 26
|
||||
|
||||
#define NO_TABLE ((GrTexTable_t)(~0))
|
||||
|
||||
/*-----------------------------
|
||||
Macros
|
||||
-----------------------------*/
|
||||
#define SNAP_BIAS ((float)(3<<18))
|
||||
#define SNAP_COORD(X) ((X)+SNAP_BIAS)
|
||||
|
||||
/*-----------------------------
|
||||
Types
|
||||
-----------------------------*/
|
||||
typedef struct {
|
||||
float x, y, z; /* object space coordinates */
|
||||
float nx, ny, nz; /* object space vertex normal for lighting */
|
||||
float s, t; /* pre-glide-ified texture coordinates */
|
||||
} Vert;
|
||||
|
||||
typedef struct {
|
||||
int v[3]; /* vertex indices into array of vertes for face */
|
||||
int mat_index; /* material index */
|
||||
int aa_edge_flags;
|
||||
} Face;
|
||||
|
||||
typedef float Vector[3];
|
||||
typedef float Matrix[16];
|
||||
|
||||
typedef FxU32 Palette[256];
|
||||
typedef struct {
|
||||
FxU8 yRGB[16];
|
||||
FxI16 iRGB[4][3];
|
||||
FxI16 qRGB[4][3];
|
||||
FxU32 packed_data[12];
|
||||
} NCCTable;
|
||||
typedef union {
|
||||
Palette palette;
|
||||
NCCTable nccTable;
|
||||
} TextureTable;
|
||||
|
||||
/*-----------------------------
|
||||
Globals
|
||||
-----------------------------*/
|
||||
/* xScale, xOffset, yScale, yOffset */
|
||||
static float viewPort[4] = {
|
||||
480.0f, 320.0f,
|
||||
480.0f, 240.0f
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
GrTexInfo info;
|
||||
FxU32 addr;
|
||||
GrTexTable_t tableType;
|
||||
TextureTable tableData;
|
||||
} Texture;
|
||||
|
||||
static int do_phong = 0;
|
||||
static int pass;
|
||||
static int fog;
|
||||
static int useTextures;
|
||||
static Vector light = { -0.57735f, -0.57735f, -0.57735f };
|
||||
static Vector transformed_verts[MAX_NUM_VERTS];
|
||||
static Vector transformed_norms[MAX_NUM_VERTS];
|
||||
|
||||
#include "splshdat.c"
|
||||
|
||||
static Texture textImage;
|
||||
static Texture hiliteImage;
|
||||
static Texture shadowImage;
|
||||
|
||||
static FxU32 nextFreeBase;
|
||||
|
||||
/*-----------------------------
|
||||
Privates
|
||||
-----------------------------*/
|
||||
static void
|
||||
sourceTexture(Texture *texture)
|
||||
{
|
||||
static Texture *lastTexture;
|
||||
|
||||
if (texture != lastTexture && useTextures) {
|
||||
grTexSource(GR_TMU0,
|
||||
texture->addr,
|
||||
GR_MIPMAPLEVELMASK_BOTH,
|
||||
&texture->info);
|
||||
if (texture->tableType != NO_TABLE) {
|
||||
grTexDownloadTable(GR_TMU0,
|
||||
texture->tableType,
|
||||
&texture->tableData);
|
||||
}
|
||||
lastTexture = texture;
|
||||
}
|
||||
}
|
||||
|
||||
static GrTexTable_t
|
||||
texTableType(GrTextureFormat_t format)
|
||||
{
|
||||
GrTexTable_t rv = (GrTexTable_t)NO_TABLE;
|
||||
|
||||
switch(format) {
|
||||
case GR_TEXFMT_YIQ_422:
|
||||
case GR_TEXFMT_AYIQ_8422:
|
||||
rv = GR_TEXTABLE_NCC0;
|
||||
break;
|
||||
|
||||
case GR_TEXFMT_P_8:
|
||||
case GR_TEXFMT_AP_88:
|
||||
rv = GR_TEXTABLE_PALETTE;
|
||||
break;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
static void
|
||||
downloadTexture(Texture *texture, Gu3dfInfo *info)
|
||||
{
|
||||
texture->info.data = info->data;
|
||||
texture->info.smallLod = info->header.small_lod;
|
||||
texture->info.largeLod = info->header.large_lod;
|
||||
texture->info.aspectRatio = info->header.aspect_ratio;
|
||||
texture->info.format = info->header.format;
|
||||
|
||||
texture->addr = nextFreeBase;
|
||||
nextFreeBase += grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH,
|
||||
&texture->info);
|
||||
grTexDownloadMipMap(GR_TMU0,
|
||||
texture->addr,
|
||||
GR_MIPMAPLEVELMASK_BOTH,
|
||||
&texture->info);
|
||||
|
||||
texture->tableType = texTableType(info->header.format);
|
||||
switch(texture->tableType) {
|
||||
case GR_TEXTABLE_NCC0:
|
||||
case GR_TEXTABLE_NCC1:
|
||||
case GR_TEXTABLE_PALETTE:
|
||||
texture->tableData = *(TextureTable*)(&info->table);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
createTextures(void)
|
||||
{
|
||||
Gu3dfInfo *info;
|
||||
|
||||
/* Download the texture for the "3D" part of the model. */
|
||||
info = (Gu3dfInfo*)&text_3dfinfo;
|
||||
info->data = (void *)text_3dfinfo_image;
|
||||
|
||||
downloadTexture(&textImage, info);
|
||||
|
||||
/* Download the texture for the specular highlight. */
|
||||
info = (Gu3dfInfo *)&hilite_3dfinfo;
|
||||
info->data = (void *)hilite_3dfinfo_image;
|
||||
downloadTexture(&hiliteImage, info);
|
||||
|
||||
/* Download the texture for the shadow. */
|
||||
info = (Gu3dfInfo *)&shadow_3dfinfo;
|
||||
info->data = (void *)shadow_3dfinfo_image;
|
||||
downloadTexture(&shadowImage, info);
|
||||
}
|
||||
|
||||
static void
|
||||
vecMatMult(float *dstVec, float *srcVec, float *matrix)
|
||||
{
|
||||
dstVec[0] = (srcVec[0] * matrix[0] +
|
||||
srcVec[1] * matrix[4] +
|
||||
srcVec[2] * matrix[8] +
|
||||
matrix[12]);
|
||||
|
||||
dstVec[1] = (srcVec[0] * matrix[1] +
|
||||
srcVec[1] * matrix[5] +
|
||||
srcVec[2] * matrix[9] +
|
||||
matrix[13]);
|
||||
|
||||
dstVec[2] = (srcVec[0] * matrix[2] +
|
||||
srcVec[1] * matrix[6] +
|
||||
srcVec[2] * matrix[10] +
|
||||
matrix[14]);
|
||||
}
|
||||
|
||||
static void
|
||||
normMatMult(float *dstVec, float *srcVec, float *matrix)
|
||||
{
|
||||
dstVec[0] = (srcVec[0] * matrix[0] +
|
||||
srcVec[1] * matrix[4] +
|
||||
srcVec[2] * matrix[8]);
|
||||
|
||||
dstVec[1] = (srcVec[0] * matrix[1] +
|
||||
srcVec[1] * matrix[5] +
|
||||
srcVec[2] * matrix[9]);
|
||||
|
||||
dstVec[2] = (srcVec[0] * matrix[2] +
|
||||
srcVec[1] * matrix[6] +
|
||||
srcVec[2] * matrix[10]);
|
||||
}
|
||||
|
||||
static void
|
||||
xfAndProj(int frame, int obj)
|
||||
{
|
||||
int vertex;
|
||||
float *matrix;
|
||||
|
||||
matrix = &mat[frame][obj][0];
|
||||
|
||||
for(vertex = 0; vertex < num_verts[obj]; vertex++) {
|
||||
float *srcVec;
|
||||
float *dstVec;
|
||||
float oow;
|
||||
|
||||
/* transform point */
|
||||
srcVec = (float*)&(vert[obj][vertex].x);
|
||||
dstVec = (float*)transformed_verts[vertex];
|
||||
vecMatMult(dstVec, srcVec, matrix);
|
||||
|
||||
/* project point */
|
||||
oow = 1.0f / dstVec[2];
|
||||
dstVec[0] = dstVec[0] * oow * viewPort[0] + viewPort[1] + SNAP_BIAS;
|
||||
dstVec[1] = dstVec[1] * oow * viewPort[2] + viewPort[3] + SNAP_BIAS;
|
||||
|
||||
/* transform normal */
|
||||
srcVec = (float*)&(vert[obj][vertex].nx);
|
||||
dstVec = (float*)transformed_norms[vertex];
|
||||
normMatMult(dstVec, srcVec, matrix);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
setupMaterial(int material_index)
|
||||
{
|
||||
switch(material_index) {
|
||||
case 0: /* 3d */
|
||||
if(pass == 1) {
|
||||
sourceTexture(&textImage);
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_LOCAL_ITERATED,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE);
|
||||
do_phong = 1;
|
||||
} else if (pass == 0xbeef) {
|
||||
/* Pantone 320C - 3D Green */
|
||||
grConstantColorValue(0x00989100);
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_LOCAL_CONSTANT,
|
||||
GR_COMBINE_OTHER_ITERATED,
|
||||
FXFALSE);
|
||||
} else {
|
||||
sourceTexture(&hiliteImage);
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_LOCAL_NONE,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE);
|
||||
}
|
||||
break;
|
||||
case 1: /* fx */
|
||||
if (pass == 0xbeef) {
|
||||
/* Black - fx */
|
||||
grConstantColorValue(0x00);
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_LOCAL_CONSTANT,
|
||||
GR_COMBINE_OTHER_ITERATED,
|
||||
FXFALSE);
|
||||
do_phong = 1;
|
||||
} else {
|
||||
sourceTexture(&hiliteImage);
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_LOCAL_NONE,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE);
|
||||
do_phong = 1;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
grColorCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_ITERATED,
|
||||
GR_COMBINE_OTHER_NONE,
|
||||
FXFALSE);
|
||||
do_phong = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
calculateIntensity(int material_index,
|
||||
Vector intensity_factor,
|
||||
int frame)
|
||||
{
|
||||
switch(material_index) {
|
||||
case 0:
|
||||
/* 3d */
|
||||
intensity_factor[0] = 1.0f;
|
||||
intensity_factor[1] = 1.0f;
|
||||
intensity_factor[2] = 1.0f;
|
||||
break;
|
||||
case 1:
|
||||
/* fx */
|
||||
intensity_factor[0] = 0.125f;
|
||||
intensity_factor[1] = 0.125f;
|
||||
intensity_factor[2] = 0.125f;
|
||||
break;
|
||||
case 2:
|
||||
/* cyan */
|
||||
intensity_factor[0] = (10.0f / 255.0f);
|
||||
intensity_factor[1] = (75.0f / 255.0f);
|
||||
intensity_factor[2] = (120.0f / 255.0f);
|
||||
break;
|
||||
case 3:
|
||||
/* white */
|
||||
intensity_factor[0] = 1.0f;
|
||||
intensity_factor[1] = 1.0f;
|
||||
intensity_factor[2] = 1.0f;
|
||||
break;
|
||||
case 4:
|
||||
/* yellow */
|
||||
intensity_factor[0] = (248.0f / 255.0f);
|
||||
intensity_factor[1] = (204.0f / 255.0f);
|
||||
intensity_factor[2] = 0.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
drawFaces(int frame, int objnum)
|
||||
{
|
||||
int facenum;
|
||||
int material_index;
|
||||
float intensity_factor[3];
|
||||
GrVertex gvert[3];
|
||||
static int prev_mat_index = 0xffff;
|
||||
int i;
|
||||
FxBool aa_a, aa_b, aa_c;
|
||||
|
||||
for(facenum = 0; facenum < num_faces[objnum]; facenum++) {
|
||||
material_index = face[objnum][facenum].mat_index;
|
||||
if(material_index != prev_mat_index) {
|
||||
setupMaterial(material_index);
|
||||
calculateIntensity(material_index,
|
||||
intensity_factor, frame);
|
||||
prev_mat_index = material_index;
|
||||
}
|
||||
|
||||
if((material_index != 0) && (pass == 2))
|
||||
continue;
|
||||
|
||||
aa_a = aa_b = aa_c = FXFALSE;
|
||||
if(face[objnum][facenum].aa_edge_flags & 4)
|
||||
aa_a = FXTRUE;
|
||||
if(face[objnum][facenum].aa_edge_flags & 2)
|
||||
aa_b = FXTRUE;
|
||||
if(face[objnum][facenum].aa_edge_flags & 1)
|
||||
aa_c = FXTRUE;
|
||||
|
||||
for(i = 0; i < 3; i++) {
|
||||
float *transformed_vert, *transformed_norm;
|
||||
Vert *v;
|
||||
int vertnum;
|
||||
float factor;
|
||||
|
||||
vertnum = face[objnum][facenum].v[i];
|
||||
transformed_vert = transformed_verts[vertnum];
|
||||
transformed_norm = transformed_norms[vertnum];
|
||||
v = &vert[objnum][vertnum];
|
||||
|
||||
gvert[i].x = transformed_vert[0];
|
||||
gvert[i].y = transformed_vert[1];
|
||||
gvert[i].oow = 1.0f / transformed_vert[2];
|
||||
gvert[i].tmuvtx[0].oow = gvert[i].oow;
|
||||
gvert[i].tmuvtx[0].sow = v->s * gvert[i].oow;
|
||||
gvert[i].tmuvtx[0].tow = v->t * gvert[i].oow;
|
||||
|
||||
factor = ((light[0] * transformed_norm[0] +
|
||||
light[1] * transformed_norm[1] +
|
||||
light[2] * transformed_norm[2])+ 1.0f) * 127.5f;
|
||||
|
||||
gvert[i].r = factor * intensity_factor[0];
|
||||
gvert[i].g = factor * intensity_factor[1];
|
||||
gvert[i].b = factor * intensity_factor[2];
|
||||
gvert[i].a = 255.0f;
|
||||
}
|
||||
|
||||
if(pass == 2) {
|
||||
for(i = 0; i < 3; i++) {
|
||||
float *transformed_norm;
|
||||
|
||||
transformed_norm =
|
||||
transformed_norms[face[objnum][facenum].v[i]];
|
||||
|
||||
gvert[i].tmuvtx[0].sow = gvert[i].oow *
|
||||
(128.0f + transformed_norm[0] * 128.0f);
|
||||
gvert[i].tmuvtx[0].tow = gvert[i].oow *
|
||||
(128.0f + transformed_norm[1] * 128.0f);
|
||||
|
||||
gvert[i].r = intensity_factor[0] * 255.0f;
|
||||
gvert[i].g = intensity_factor[1] * 255.0f;
|
||||
gvert[i].b = intensity_factor[2] * 255.0f;
|
||||
}
|
||||
|
||||
grDrawTriangle(&gvert[0], &gvert[1], &gvert[2]);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
grAlphaBlendFunction(GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA,
|
||||
GR_BLEND_ONE, GR_BLEND_ZERO);
|
||||
/* Do this if 3D. */
|
||||
if(material_index == 0) {
|
||||
/*
|
||||
* Draw the textured 3D without specular.
|
||||
*/
|
||||
sourceTexture(&textImage);
|
||||
#if 0
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_LOCAL_ITERATED,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE);
|
||||
#endif
|
||||
grAADrawTriangle(&gvert[0], &gvert[1], &gvert[2],
|
||||
aa_a, aa_b, aa_c);
|
||||
} else if(material_index != 1) {
|
||||
/*
|
||||
* Just go ahead and draw for things that don't
|
||||
* have specular highlights.
|
||||
*/
|
||||
grAADrawTriangle(&gvert[0], &gvert[1], &gvert[2],
|
||||
aa_a, aa_b, aa_c);
|
||||
}
|
||||
|
||||
if(do_phong && (material_index != 0)) {
|
||||
/*
|
||||
* figure out texture coords in [0..255.0f] based on the normal
|
||||
* the specular highlight.
|
||||
*/
|
||||
for(i = 0; i < 3; i++) {
|
||||
float *transformed_norm;
|
||||
|
||||
transformed_norm =
|
||||
transformed_norms[face[objnum][facenum].v[i]];
|
||||
|
||||
gvert[i].tmuvtx[0].sow = gvert[i].oow *
|
||||
(128.0f + transformed_norm[0] * 128.0f);
|
||||
gvert[i].tmuvtx[0].tow = gvert[i].oow *
|
||||
(128.0f + transformed_norm[1] * 128.0f);
|
||||
|
||||
gvert[i].r = intensity_factor[0] * 255.0f;
|
||||
gvert[i].g = intensity_factor[1] * 255.0f;
|
||||
gvert[i].b = intensity_factor[2] * 255.0f;
|
||||
}
|
||||
|
||||
grAADrawTriangle(&gvert[0], &gvert[1], &gvert[2],
|
||||
aa_a, aa_b, aa_c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
intersectLineWithZPlane(Vector result, Vector p1,
|
||||
Vector p2, float z)
|
||||
{
|
||||
float t;
|
||||
|
||||
t = (z - p1[2]) / (p2[2] - p1[2]);
|
||||
result[0] = p1[0] + (p2[0] - p1[0]) * t;
|
||||
result[1] = p1[1] + (p2[1] - p1[1]) * t;
|
||||
result[2] = z;
|
||||
}
|
||||
|
||||
static float
|
||||
vectorMag(float *v)
|
||||
{
|
||||
return (float)sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
||||
}
|
||||
|
||||
static void
|
||||
drawShadow(int frame, int shadow_object_index,
|
||||
int receiver_object_index, Vector light_position)
|
||||
{
|
||||
float *shadow_object_matrix;
|
||||
float *receiver_object_matrix;
|
||||
Vector view_verts[4];
|
||||
Vector projected_view_verts[4];
|
||||
int i;
|
||||
|
||||
Vector local_verts[4] = {
|
||||
{ -280.0f, 0.0f, -160.0f },
|
||||
{ -280.0f, 0.0f, 150.0f },
|
||||
{ 280.0f, 0.0f, 150.0f },
|
||||
{ 280.0f, 0.0f, -160.0f }
|
||||
};
|
||||
|
||||
float texcoords[4][2] = {
|
||||
{ 10.5f, 127.5f },
|
||||
{ 10.5f, 0.5f },
|
||||
{ 255.0f, 0.5f },
|
||||
{ 255.0f, 127.5f }
|
||||
};
|
||||
|
||||
GrVertex gvert[4];
|
||||
GrVertex projected_gvert[4];
|
||||
GrVertex light_gvert;
|
||||
|
||||
/*
|
||||
* The point relative to the back part of the shield that
|
||||
* the shadow is going to be projected onto.
|
||||
*/
|
||||
Vector shadow_light;
|
||||
|
||||
shadow_light[0] = light_position[0];
|
||||
shadow_light[1] = light_position[1];
|
||||
shadow_light[2] = light_position[2];
|
||||
|
||||
shadow_object_matrix = &mat[frame][shadow_object_index][0];
|
||||
receiver_object_matrix = &mat[frame][receiver_object_index][0];
|
||||
|
||||
/*
|
||||
* Offset the light by the Z position of
|
||||
* the backplane that we are projected
|
||||
* onto.
|
||||
*/
|
||||
shadow_light[2] += receiver_object_matrix[14];
|
||||
|
||||
for(i = 0; i < 4; i++) {
|
||||
vecMatMult(view_verts[i], local_verts[i], shadow_object_matrix);
|
||||
|
||||
/*
|
||||
* project . . .
|
||||
*/
|
||||
gvert[i].oow = 1.0f / view_verts[i][2];
|
||||
gvert[i].x =
|
||||
view_verts[i][0] * gvert[i].oow * viewPort[0] +
|
||||
viewPort[1] + SNAP_BIAS;
|
||||
gvert[i].y =
|
||||
view_verts[i][1] * gvert[i].oow * viewPort[2] +
|
||||
viewPort[3] + SNAP_BIAS;
|
||||
|
||||
/*
|
||||
* Set up texture coordinates.
|
||||
*/
|
||||
gvert[i].tmuvtx[0].sow = texcoords[i][0] * gvert[i].oow;
|
||||
gvert[i].tmuvtx[0].tow = texcoords[i][1] * gvert[i].oow;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Intersect each line formed by the light source and a
|
||||
* particular corner of the shadow object with the
|
||||
* plane which the texture is to be projected onto.
|
||||
*/
|
||||
for(i = 0; i < 4; i++) {
|
||||
Vector tmpvect;
|
||||
float q;
|
||||
|
||||
#if GLIDE_PACKED_RGB
|
||||
/* dpc - 22 oct 1997 - FixMe!
|
||||
* These are left uninitialized, yet they are being sent to the
|
||||
* hw, probably because some other state is not being correctly
|
||||
* setup. This doesn't seem to affect the 'correctness' of the
|
||||
* splash screen so I'm not investigating it any more.
|
||||
*/
|
||||
projected_gvert[i].r =
|
||||
projected_gvert[i].g =
|
||||
projected_gvert[i].b =
|
||||
projected_gvert[i].a = 0.0f;
|
||||
#endif /* GLIDE_PACKED_RGB */
|
||||
|
||||
intersectLineWithZPlane(projected_view_verts[i],
|
||||
shadow_light,
|
||||
view_verts[i],
|
||||
receiver_object_matrix[14] - 26.0f);
|
||||
projected_gvert[i].oow = 1.0f / projected_view_verts[i][2];
|
||||
projected_gvert[i].x = (projected_view_verts[i][0] * projected_gvert[i].oow * viewPort[0] +
|
||||
viewPort[1] + SNAP_BIAS);
|
||||
projected_gvert[i].y = (projected_view_verts[i][1] * projected_gvert[i].oow * viewPort[2] +
|
||||
viewPort[3] + SNAP_BIAS);
|
||||
|
||||
tmpvect[0] = projected_view_verts[i][0] - shadow_light[0];
|
||||
tmpvect[1] = projected_view_verts[i][1] - shadow_light[1];
|
||||
tmpvect[2] = projected_view_verts[i][2] - shadow_light[2];
|
||||
q = vectorMag(tmpvect);
|
||||
|
||||
/*
|
||||
* Set up texture coordinates.
|
||||
*/
|
||||
projected_gvert[i].tmuvtx[0].oow = projected_gvert[i].oow * q;
|
||||
projected_gvert[i].tmuvtx[0].sow = texcoords[i][0] * projected_gvert[i].oow;
|
||||
projected_gvert[i].tmuvtx[0].tow = texcoords[i][1] * projected_gvert[i].oow;
|
||||
}
|
||||
|
||||
light_gvert.oow = 1.0f / shadow_light[2];
|
||||
light_gvert.x = shadow_light[0] * light_gvert.oow * viewPort[0] + viewPort[1] + SNAP_BIAS;
|
||||
light_gvert.y = shadow_light[1] * light_gvert.oow * viewPort[2] + viewPort[3] + SNAP_BIAS;
|
||||
|
||||
/*
|
||||
* Draw a segment between the light and the point which hits
|
||||
* the surface that the light is being projected onto.
|
||||
*/
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_LOCAL_NONE,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE);
|
||||
sourceTexture(&shadowImage);
|
||||
|
||||
grAlphaBlendFunction(GR_BLEND_DST_COLOR, GR_BLEND_ZERO,
|
||||
GR_BLEND_ONE, GR_BLEND_ZERO);
|
||||
|
||||
grDrawTriangle(&projected_gvert[0],
|
||||
&projected_gvert[1],
|
||||
&projected_gvert[2]);
|
||||
grDrawTriangle(&projected_gvert[0],
|
||||
&projected_gvert[2],
|
||||
&projected_gvert[3]);
|
||||
grDrawTriangle(&projected_gvert[0],
|
||||
&projected_gvert[2],
|
||||
&projected_gvert[1]);
|
||||
grDrawTriangle(&projected_gvert[0],
|
||||
&projected_gvert[3],
|
||||
&projected_gvert[2]);
|
||||
|
||||
grAlphaBlendFunction(GR_BLEND_ONE, GR_BLEND_ZERO,
|
||||
GR_BLEND_ONE, GR_BLEND_ZERO);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grSplash
|
||||
Date: 3/13
|
||||
Implementor(s): GaryMcT
|
||||
Library: Glide
|
||||
Description:
|
||||
Render the opening splash screen animation, or render
|
||||
a single frame of the splash screen.
|
||||
Arguments:
|
||||
x, y - upper left hand coord of window
|
||||
w, h - width and height of window to render
|
||||
_frame - frame number to render (~0 to render all frames)
|
||||
Return:
|
||||
none
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DIENTRY(grSplash,void,(float x,float y,float w,float h,FxU32 _frame))
|
||||
{
|
||||
GrState oldState;
|
||||
int frame;
|
||||
Vector lights[] = {
|
||||
{ 5.0f, 300.0f, -1500.0f },
|
||||
{ 5.0f, 150.0f, -1000.0f },
|
||||
{ -30.0f, 150.0f, -1000.0f },
|
||||
{ -30.0f, 100.0f, -1000.0f },
|
||||
{ 30.0f, 70.0f, -1000.0f },
|
||||
};
|
||||
GrFog_t fogTable[kInternalFogTableEntryCount];
|
||||
int fadeInFrames, fadeOutFrames;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("grSplash", 85);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%f,%f,%f,%f,%d)\n", x, y, w, h, _frame);
|
||||
|
||||
/* Check Screen Dimensions and Check Avail of Depth Buffer */
|
||||
if ((x > gc->state.screen_width) ||
|
||||
((x+w) > gc->state.screen_width) ||
|
||||
(y > gc->state.screen_height) ||
|
||||
((y+h) > gc->state.screen_height))
|
||||
return;
|
||||
|
||||
if (gc->state.screen_height == 640) {
|
||||
if (gc->fbuf_size == 1) {
|
||||
return;
|
||||
}
|
||||
} else if (gc->state.screen_width == 800) {
|
||||
if ((gc->fbuf_size == 1) ||
|
||||
(gc->fbuf_size == 2)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (gc->grAuxBuf == 0) return;
|
||||
|
||||
if (!(gc->state.fbi_config.fbzMode & SST_YORIGIN)) {
|
||||
y = ((gc->state.screen_height - 1.0f) - (h-1.0f)) - y;
|
||||
}
|
||||
|
||||
viewPort[0] = w * (480.0f / 640.0f);
|
||||
viewPort[1] = x + (w / 2.0f);
|
||||
viewPort[2] = h;
|
||||
viewPort[3] = y + (h / 2.0f);
|
||||
|
||||
grGlideGetState(&oldState);
|
||||
|
||||
grSstOrigin(GR_ORIGIN_LOWER_LEFT);
|
||||
|
||||
if (_frame == 0) {
|
||||
createTextures();
|
||||
useTextures = 1;
|
||||
} else {
|
||||
useTextures = 0;
|
||||
}
|
||||
|
||||
grAlphaTestFunction(GR_CMP_ALWAYS);
|
||||
grChromakeyMode(GR_CHROMAKEY_DISABLE);
|
||||
grConstantColorValue(0xffffffff);
|
||||
grDepthBufferMode(GR_DEPTHBUFFER_WBUFFER);
|
||||
grDepthMask(FXTRUE);
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_ITERATED,
|
||||
GR_COMBINE_OTHER_NONE,
|
||||
FXFALSE);
|
||||
grAlphaBlendFunction(GR_BLEND_ONE, GR_BLEND_ZERO,
|
||||
GR_BLEND_ONE, GR_BLEND_ZERO);
|
||||
if (useTextures)
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_NONE, GR_COMBINE_FACTOR_NONE,
|
||||
FXFALSE, FXFALSE);
|
||||
else
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_NONE, GR_COMBINE_FACTOR_NONE,
|
||||
FXTRUE, FXFALSE);
|
||||
grTexMipMapMode(GR_TMU0,
|
||||
GR_MIPMAP_NEAREST,
|
||||
FXFALSE);
|
||||
grTexFilterMode(GR_TMU0,
|
||||
GR_TEXTUREFILTER_BILINEAR,
|
||||
GR_TEXTUREFILTER_BILINEAR);
|
||||
grDepthBufferFunction(GR_CMP_LEQUAL);
|
||||
grCullMode(GR_CULL_NEGATIVE);
|
||||
/* grClipWindow((int)x, (int)y, (int)(x+w), (int)(y+h)); */
|
||||
grFogColorValue(0x0);
|
||||
|
||||
fadeInFrames = (int)(((float)total_num_frames) * FADEIN_END_PERCENT);
|
||||
fadeOutFrames = (int)(((float)total_num_frames) *
|
||||
(1.0f - FADEOUT_BEGIN_PERCENT));
|
||||
|
||||
if (_frame == 0) { /* Render Whole Animation */
|
||||
for(frame = 1; frame < total_num_frames; frame++) {
|
||||
int i;
|
||||
|
||||
/* Set Fog Value For This Frame */
|
||||
if(frame < fadeInFrames) {
|
||||
unsigned char fval = (((unsigned char)0xFF) -
|
||||
((unsigned char)(255.0f * (float)(frame + 1) / (float)fadeInFrames)));
|
||||
for(i = 0; i < kInternalFogTableEntryCount; i++) fogTable[i] = fval;
|
||||
grFogMode(GR_FOG_WITH_TABLE);
|
||||
grFogTable(fogTable);
|
||||
fog = 1;
|
||||
} else if(frame > total_num_frames-fadeOutFrames) {
|
||||
unsigned char fval = (((unsigned char)0xFF) -
|
||||
(unsigned char)(255.0f* ((float)(total_num_frames - frame))/
|
||||
((float)fadeOutFrames)));
|
||||
for(i = 0; i < kInternalFogTableEntryCount; i++)
|
||||
fogTable[i] = fval;
|
||||
grFogMode(GR_FOG_WITH_TABLE);
|
||||
grFogTable(fogTable);
|
||||
fog = 1;
|
||||
} else {
|
||||
grFogMode(GR_FOG_DISABLE);
|
||||
fog = 0;
|
||||
}
|
||||
|
||||
grBufferClear(0x00000000, 0, GR_WDEPTHVALUE_FARTHEST);
|
||||
|
||||
pass = 1;
|
||||
|
||||
/*
|
||||
* Avoid Z-aliasing between the shield and the 3dfx by
|
||||
* not writing Z for the shield.
|
||||
*/
|
||||
|
||||
grDepthMask(FXFALSE);
|
||||
/* cyan part of shield */
|
||||
xfAndProj(frame, 2);
|
||||
drawFaces(frame, 2);
|
||||
|
||||
/* yellow and white part of shield. */
|
||||
xfAndProj(frame, 0);
|
||||
drawFaces(frame, 0);
|
||||
|
||||
/*
|
||||
* Reanable writes to the depth-buffer.
|
||||
*/
|
||||
grDepthMask(FXTRUE);
|
||||
|
||||
/*
|
||||
* Draw the shadow projected from the 3Dfx logo onto
|
||||
* the rest of the powershield.
|
||||
*/
|
||||
grDepthBufferFunction(GR_CMP_ALWAYS);
|
||||
grFogMode(GR_FOG_DISABLE);
|
||||
drawShadow(frame, 1, 0, lights[0]);
|
||||
if (fog) grFogMode(GR_FOG_WITH_TABLE); /* hack around mp fog */
|
||||
grDepthBufferFunction(GR_CMP_LEQUAL);
|
||||
|
||||
/* 3Dfx logo */
|
||||
xfAndProj(frame, 1);
|
||||
drawFaces(frame, 1);
|
||||
grAlphaBlendFunction(GR_BLEND_ONE, GR_BLEND_ONE,
|
||||
GR_BLEND_ONE, GR_BLEND_ZERO);
|
||||
|
||||
pass = 2;
|
||||
drawFaces(frame, 1);
|
||||
pass = 1;
|
||||
grAlphaBlendFunction(GR_BLEND_ONE, GR_BLEND_ZERO,
|
||||
GR_BLEND_ONE, GR_BLEND_ZERO);
|
||||
|
||||
grBufferSwap(2);
|
||||
}
|
||||
} else { /* Render One Frame */
|
||||
frame = ((_frame>>1) % SPIN_FRAMES)+SPIN_START;
|
||||
|
||||
grColorMask(FXFALSE, FXFALSE);
|
||||
grBufferClear(0x00000000, 0, GR_WDEPTHVALUE_FARTHEST);
|
||||
grColorMask(FXTRUE, FXFALSE);
|
||||
|
||||
pass = 0xbeef;
|
||||
|
||||
/* 3Dfx logo */
|
||||
xfAndProj(frame, 1);
|
||||
drawFaces(frame, 1);
|
||||
}
|
||||
|
||||
/* Get rid of the remnants on teh screen just in case
|
||||
* the app (like PowerRender) doesn't do it itself yet
|
||||
* assumes that the screen is clear.
|
||||
*/
|
||||
if (frame == 0) {
|
||||
int i;
|
||||
|
||||
for(i = 0; i < gc->grColBuf; i++) {
|
||||
grBufferClear(0x00000000, 0, GR_WDEPTHVALUE_FARTHEST);
|
||||
grBufferSwap(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean up after yourself!
|
||||
*/
|
||||
grGlideSetState(&oldState);
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,241 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 4 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 3 5/21/97 6:05a Peter
|
||||
**
|
||||
*/
|
||||
#ifndef __GSSTDEF_H__
|
||||
#define __GSSTDEF_H__
|
||||
|
||||
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_CVG)
|
||||
#include <cvg.h>
|
||||
#else
|
||||
#include <sst.h>
|
||||
#endif
|
||||
|
||||
/*----------------- SST chip layout -----------------------*/
|
||||
typedef enum
|
||||
{
|
||||
SSTR_STATUS,
|
||||
SSTR_RESERVED0,
|
||||
SSTR_VAX,
|
||||
SSTR_VAY,
|
||||
SSTR_VBX,
|
||||
SSTR_VBY,
|
||||
SSTR_VCX,
|
||||
SSTR_VCY,
|
||||
#ifdef GLIDE_USE_ALT_REGMAP
|
||||
SSTR_R,
|
||||
SSTR_DRDX,
|
||||
SSTR_DRDY,
|
||||
|
||||
SSTR_G,
|
||||
SSTR_DGDX,
|
||||
SSTR_DGDY,
|
||||
|
||||
SSTR_B,
|
||||
SSTR_DBDX,
|
||||
SSTR_DBDY,
|
||||
|
||||
SSTR_Z,
|
||||
SSTR_DZDX,
|
||||
SSTR_DZDY,
|
||||
|
||||
SSTR_A,
|
||||
SSTR_DADX,
|
||||
SSTR_DADY,
|
||||
|
||||
SSTR_S,
|
||||
SSTR_DSDX,
|
||||
SSTR_DSDY,
|
||||
|
||||
SSTR_T,
|
||||
SSTR_DTDX,
|
||||
SSTR_DTDY,
|
||||
|
||||
SSTR_W,
|
||||
SSTR_DWDX,
|
||||
SSTR_DWDY,
|
||||
#else
|
||||
SSTR_R,
|
||||
SSTR_G,
|
||||
SSTR_B,
|
||||
SSTR_Z,
|
||||
SSTR_A,
|
||||
SSTR_S,
|
||||
SSTR_T,
|
||||
SSTR_W,
|
||||
|
||||
SSTR_DRDX,
|
||||
SSTR_DGDX,
|
||||
SSTR_DBDX,
|
||||
SSTR_DZDX,
|
||||
SSTR_DADX,
|
||||
SSTR_DSDX,
|
||||
SSTR_DTDX,
|
||||
SSTR_DWDX,
|
||||
|
||||
SSTR_DRDY,
|
||||
SSTR_DGDY,
|
||||
SSTR_DBDY,
|
||||
SSTR_DZDY,
|
||||
SSTR_DADY,
|
||||
SSTR_DSDY,
|
||||
SSTR_DTDY,
|
||||
SSTR_DWDY,
|
||||
#endif
|
||||
SSTR_TRIANGLECMD,
|
||||
SSTR_RESERVED1,
|
||||
|
||||
SSTR_FVAX,
|
||||
SSTR_FVAY,
|
||||
SSTR_FVBX,
|
||||
SSTR_FVBY,
|
||||
SSTR_FVCX,
|
||||
SSTR_FVCY,
|
||||
#ifdef GLIDE_USE_ALT_REGMAP
|
||||
SSTR_FR,
|
||||
SSTR_FDRDX,
|
||||
SSTR_FDRDY,
|
||||
|
||||
SSTR_FG,
|
||||
SSTR_FDGDX,
|
||||
SSTR_FDGDY,
|
||||
|
||||
SSTR_FB,
|
||||
SSTR_FDBDX,
|
||||
SSTR_FDBDY,
|
||||
|
||||
SSTR_FZ,
|
||||
SSTR_FDZDX,
|
||||
SSTR_FDZDY,
|
||||
|
||||
SSTR_FA,
|
||||
SSTR_FDADX,
|
||||
SSTR_FDADY,
|
||||
|
||||
SSTR_FS,
|
||||
SSTR_FDSDX,
|
||||
SSTR_FDSDY,
|
||||
|
||||
SSTR_FT,
|
||||
SSTR_FDTDX,
|
||||
SSTR_FDTDY,
|
||||
|
||||
SSTR_FW,
|
||||
SSTR_FDWDX,
|
||||
SSTR_FDWDY,
|
||||
#else
|
||||
SSTR_FR,
|
||||
SSTR_FG,
|
||||
SSTR_FB,
|
||||
SSTR_FZ,
|
||||
SSTR_FA,
|
||||
SSTR_FS,
|
||||
SSTR_FT,
|
||||
SSTR_FW,
|
||||
|
||||
SSTR_FDRDX,
|
||||
SSTR_FDGDX,
|
||||
SSTR_FDBDX,
|
||||
SSTR_FDZDX,
|
||||
SSTR_FDADX,
|
||||
SSTR_FDSDX,
|
||||
SSTR_FDTDX,
|
||||
SSTR_FDWDX,
|
||||
|
||||
SSTR_FDRDY,
|
||||
SSTR_FDGDY,
|
||||
SSTR_FDBDY,
|
||||
SSTR_FDZDY,
|
||||
SSTR_FDADY,
|
||||
SSTR_FDSDY,
|
||||
SSTR_FDTDY,
|
||||
SSTR_FDWDY,
|
||||
#endif
|
||||
SSTR_FTRIANGLECMD,
|
||||
SSTR_FBZCOLORPATH,
|
||||
SSTR_FOGMODE,
|
||||
SSTR_ALPHAMODE,
|
||||
SSTR_FBZMODE,
|
||||
SSTR_LFBMODE,
|
||||
SSTR_CLIPLEFTRIGHT,
|
||||
SSTR_CLIPBOTTOMTOP,
|
||||
|
||||
SSTR_NOPCMD,
|
||||
SSTR_FASTFILLCMD,
|
||||
SSTR_SWAPBUFFERCMD,
|
||||
SSTR_FOGCOLOR,
|
||||
SSTR_ZACOLOR,
|
||||
SSTR_CHROMAKEY,
|
||||
SSTR_RESERVED2,
|
||||
SSTR_RESERVED3,
|
||||
|
||||
SSTR_STIPPLE,
|
||||
SSTR_C0,
|
||||
SSTR_C1,
|
||||
|
||||
SSTR_FBIPIXELSIN,
|
||||
SSTR_FBICHROMAFAIL,
|
||||
SSTR_FBIZFUNCFAIL,
|
||||
SSTR_FBIAFUNCFAIL,
|
||||
SSTR_FBIPIXELSOUT,
|
||||
|
||||
SSTR_FOGTABLE,
|
||||
SSTR_RESERVED8 = SSTR_FOGTABLE + 32,
|
||||
|
||||
SSTR_FBIINIT4 = SSTR_RESERVED8 + 8,
|
||||
SSTR_VRETRACE,
|
||||
SSTR_BACKPORCH,
|
||||
SSTR_VIDEODIMENSIONS,
|
||||
SSTR_FBIINIT0,
|
||||
SSTR_FBIINIT1,
|
||||
SSTR_FBIINIT2,
|
||||
SSTR_FBIINIT3,
|
||||
|
||||
SSTR_HSYNC,
|
||||
SSTR_VSYNC,
|
||||
SSTR_CLUTDATA,
|
||||
SSTR_DACDATA,
|
||||
SSTR_MAX_RGB_DELTA,
|
||||
SSTR_RESERVED51,
|
||||
|
||||
SSTR_TEXTUREMODE = SSTR_RESERVED51 + 51,
|
||||
SSTR_TLOD,
|
||||
SSTR_TDETAIL,
|
||||
SSTR_TEXBASEADDR,
|
||||
SSTR_TEXBASEADDR1,
|
||||
SSTR_TEXBASEADDR2,
|
||||
SSTR_TEXBASEADDR38,
|
||||
SSTR_TEXINIT0,
|
||||
SSTR_TEXINIT1,
|
||||
|
||||
SSTR_NCCTABLE0,
|
||||
SSTR_NCCTABLE1 = SSTR_NCCTABLE0 + 12,
|
||||
SSTR_END_OF_REGISTER_SET
|
||||
} GrSstRegister;
|
||||
|
||||
#endif /* __GSSTDEF_H__ */
|
||||
@@ -1,302 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 19 12/12/97 12:43p Atai
|
||||
* move i and dateElem into the set up loop
|
||||
*
|
||||
* 17 12/08/97 10:38a Atai
|
||||
* added grDrawVertexArrayLinear()
|
||||
*
|
||||
* 16 11/21/97 6:05p Atai
|
||||
* use one datalist (tsuDataList) in glide3
|
||||
*
|
||||
* 15 11/06/97 6:10p Atai
|
||||
* update GrState size
|
||||
* rename grDrawArray to grDrawVertexArray
|
||||
* update _grDrawPoint and _grDrawVertexList
|
||||
*
|
||||
* 14 11/04/97 6:35p Atai
|
||||
* 1. sync with data structure changes
|
||||
* 2. break up aa triangle routine
|
||||
*
|
||||
* 13 11/04/97 4:57p Atai
|
||||
* use byte offset
|
||||
*
|
||||
* 12 11/03/97 3:43p Peter
|
||||
* h3/cvg cataclysm
|
||||
*
|
||||
* 11 10/17/97 2:11p Atai
|
||||
* added grContinueArray. We only support non aa mode for now.
|
||||
*
|
||||
* 10 10/16/97 1:50p Atai
|
||||
* fix drawarray bugs
|
||||
*
|
||||
* 9 10/14/97 6:16p Atai
|
||||
* reverse triangle order in _grAADrawVertexList
|
||||
*
|
||||
* 8 10/14/97 5:41p Atai
|
||||
* added _grAADrawVertexList()
|
||||
*
|
||||
* 7 10/14/97 4:57p Dow
|
||||
* Clamping
|
||||
*
|
||||
* 6 10/09/97 8:02p Dow
|
||||
* State Monster 1st Cut
|
||||
*
|
||||
* 5 10/08/97 11:32a Peter
|
||||
* pre-computed packet headers for packet 3
|
||||
*
|
||||
* 4 9/29/97 1:26p Dow
|
||||
* Fixed packed color strips/fans
|
||||
*
|
||||
* 3 9/26/97 10:24a Dow
|
||||
* Fixed state Muckage in Glide3 parameter data
|
||||
*
|
||||
* 2 9/23/97 2:35p Dow
|
||||
* One less loop
|
||||
*
|
||||
* 1 9/23/97 2:04p Dow
|
||||
* DD code for strips
|
||||
**
|
||||
*/
|
||||
#ifdef GLIDE3
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: _grDrawVertexList
|
||||
Date: 18-Sep-97
|
||||
Implementor(s): dow
|
||||
Description:
|
||||
Sends a triangle strip to CVG.
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
void FX_CSTYLE
|
||||
_grDrawVertexList(FxU32 type, FxI32 mode, FxI32 count, void *pointers)
|
||||
{
|
||||
#define FN_NAME "_grDrawVertexList"
|
||||
|
||||
/*
|
||||
** simplified code
|
||||
*/
|
||||
FxU32
|
||||
vNum = 0,
|
||||
vSize;
|
||||
float
|
||||
**lPtrs = (float **) pointers;
|
||||
FxI32 stride = mode;
|
||||
FxU32
|
||||
sCount = count, set = 0, pktype = SSTCP_PKT3_BDDDDD;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 90);
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel, "(type = 0x%x, count = %d, pointers = 0x%x)\n",
|
||||
type, count, pointers);
|
||||
|
||||
GR_FLUSH_STATE();
|
||||
|
||||
vSize = gc->state.vData.vSize;
|
||||
if (stride == 0)
|
||||
stride = gc->state.vData.vStride;
|
||||
|
||||
/* Draw the first (or possibly only) set. This is necessary because
|
||||
the packet is 3_BDDDDDD, and in the next set, the packet is
|
||||
3_DDDDDD */
|
||||
/*
|
||||
** We try to make tstrip code simple to read. We combine the original code
|
||||
** into a single loop by adding an extra packet type assignment at the end of the loop.
|
||||
** Also, the debugging code are removed temporarily.
|
||||
*/
|
||||
if (gc->state.grCoordinateSpaceArgs.coordinate_space_mode == GR_WINDOW_COORDS) {
|
||||
while (count > 0) {
|
||||
FxI32 k, vcount = count >= 15 ? 15 : count;
|
||||
GR_SET_EXPECTED_SIZE(vcount * vSize, 1);
|
||||
TRI_STRIP_BEGIN(type, vcount, vSize, pktype);
|
||||
/*
|
||||
** If we use a while loop, the compiler will increment vNum and store the value back
|
||||
** to the memory at every loop. In a for loop, vNum data are kept in a register.
|
||||
** After the loop complete, the vNum data are written back to memory.
|
||||
*/
|
||||
for (k = 0; k < vcount; k++) {
|
||||
FxU32 i, dataElem;
|
||||
float *vPtr;
|
||||
|
||||
vPtr = pointers;
|
||||
if (mode)
|
||||
vPtr = *(float **)vPtr;
|
||||
(float *)pointers += stride;
|
||||
|
||||
TRI_SETF(FARRAY(vPtr, GR_VERTEX_X_OFFSET << 2));
|
||||
dataElem = 0;
|
||||
TRI_SETF(FARRAY(vPtr, GR_VERTEX_Y_OFFSET << 2));
|
||||
i = gc->tsuDataList[dataElem];
|
||||
while (i != GR_DLIST_END) {
|
||||
TRI_SETF(FARRAY(vPtr, i));
|
||||
dataElem++;
|
||||
i = gc->tsuDataList[dataElem];
|
||||
}
|
||||
}
|
||||
TRI_END;
|
||||
GR_CHECK_SIZE();
|
||||
count -= 15;
|
||||
pktype = SSTCP_PKT3_DDDDDD;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/*
|
||||
* first cut of clip space coordinate code, no optimization.
|
||||
*/
|
||||
float oow;
|
||||
|
||||
while (count > 0) {
|
||||
FxI32 k, vcount = count >= 15 ? 15 : count;
|
||||
GR_SET_EXPECTED_SIZE(vcount * vSize, 1);
|
||||
TRI_STRIP_BEGIN(type, vcount, vSize, pktype);
|
||||
for (k = 0; k < vcount; k++) {
|
||||
float *vPtr;
|
||||
|
||||
vPtr = pointers;
|
||||
if (mode)
|
||||
vPtr = *(float **)vPtr;
|
||||
oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset);
|
||||
/* x, y */
|
||||
TRI_SETF(FARRAY(vPtr, GR_VERTEX_X_OFFSET << 2)
|
||||
*oow*gc->state.Viewport.hwidth + gc->state.Viewport.ox);
|
||||
TRI_SETF(FARRAY(vPtr, GR_VERTEX_Y_OFFSET << 2)
|
||||
*oow*gc->state.Viewport.hheight + gc->state.Viewport.oy);
|
||||
(float *)pointers += stride;
|
||||
|
||||
TRI_VP_SETFS(vPtr, oow);
|
||||
}
|
||||
TRI_END;
|
||||
GR_CHECK_SIZE();
|
||||
count -= 15;
|
||||
pktype = SSTCP_PKT3_DDDDDD;
|
||||
}
|
||||
}
|
||||
|
||||
#undef FN_NAME
|
||||
} /* _grDrawVertexList */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: _grAADrawVertexList
|
||||
Date: 14-Oct-97
|
||||
Implementor(s): atai
|
||||
Description:
|
||||
Sends an aa triangle strip/fan to CVG.
|
||||
Arguments:
|
||||
|
||||
Return:
|
||||
-------------------------------------------------------------------*/
|
||||
void FX_CSTYLE
|
||||
_grAADrawVertexList(FxU32 type, FxI32 mode, FxI32 count, void *pointers)
|
||||
{
|
||||
#define FN_NAME "_grAADrawVertexList"
|
||||
|
||||
GR_DCL_GC;
|
||||
FxU32 vNum = 0;
|
||||
FxU32 sCount = count;
|
||||
float
|
||||
**lPtrs = (float **) pointers;
|
||||
float *v[3];
|
||||
FxBool flip = FXFALSE;
|
||||
FxU32 fbzModeOld; /* Squirrel away current fbzMode */
|
||||
FxI32 stride = mode;
|
||||
|
||||
if (sCount <= 2) return;
|
||||
|
||||
_grDrawVertexList(type, mode, count, pointers);
|
||||
|
||||
fbzModeOld = gc->state.fbi_config.fbzMode;
|
||||
gc->state.fbi_config.fbzMode &= ~(SST_ZAWRMASK);
|
||||
/* gc->state.invalid |= fbzModeBIT; */
|
||||
GR_FLUSH_STATE();
|
||||
if (stride == 0)
|
||||
stride = gc->state.vData.vStride;
|
||||
|
||||
sCount-=2;
|
||||
if (type == kSetupFan) {
|
||||
v[0] = (mode == 0) ? pointers : *(float **)pointers;
|
||||
while (sCount--) {
|
||||
(float *)pointers += stride;
|
||||
if (mode) {
|
||||
v[1] = *(float **)pointers;
|
||||
v[2] = *((float **)pointers+1);
|
||||
} else {
|
||||
v[1] = pointers;
|
||||
v[2] = (float *)pointers+stride;
|
||||
}
|
||||
if (gc->state.grCoordinateSpaceArgs.coordinate_space_mode == GR_WINDOW_COORDS)
|
||||
_grAADrawTriangles(1, type, 3, v);
|
||||
else
|
||||
_grAAVpDrawTriangles(1, type, 3, v);
|
||||
}
|
||||
}
|
||||
else if (type == kSetupStrip){
|
||||
while (sCount--) {
|
||||
if (flip) {
|
||||
if (mode) {
|
||||
v[0] = *((float **)pointers+1);
|
||||
v[1] = *(float **)pointers;
|
||||
v[2] = *((float **)pointers+2);
|
||||
} else {
|
||||
v[0] = (float *)pointers+stride;
|
||||
v[1] = pointers;
|
||||
v[2] = (float *)pointers+(stride<<1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (mode) {
|
||||
v[0] = *(float **)pointers;
|
||||
v[1] = *((float **)pointers+1);
|
||||
v[2] = *((float **)pointers+2);
|
||||
} else {
|
||||
v[0] = pointers;
|
||||
v[1] = (float *)pointers+stride;
|
||||
v[2] = (float *)pointers+(stride<<1);
|
||||
}
|
||||
}
|
||||
if (gc->state.grCoordinateSpaceArgs.coordinate_space_mode == GR_WINDOW_COORDS)
|
||||
_grAADrawTriangles(1, type, 3, v);
|
||||
else
|
||||
_grAAVpDrawTriangles(1, type, 3, v);
|
||||
(float *)pointers += stride;
|
||||
flip = ~flip;
|
||||
}
|
||||
flip = ~flip;
|
||||
}
|
||||
|
||||
gc->state.fbi_config.fbzMode = fbzModeOld;
|
||||
gc->state.invalid |= fbzModeBIT;
|
||||
GR_FLUSH_STATE();
|
||||
|
||||
#undef FN_NAME
|
||||
} /* _grAADrawVertexList */
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,895 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.2.2.2 2005/01/22 14:52:02 koolsmoky
|
||||
** enabled packed argb for cmd packet type 3
|
||||
**
|
||||
** Revision 1.2.2.1 2004/12/23 20:45:56 koolsmoky
|
||||
** converted to nasm syntax
|
||||
** added x86 asm, 3dnow! triangle and mmx, 3dnow! texture download optimizations
|
||||
**
|
||||
** Revision 1.2 2000/10/03 18:28:33 mercury
|
||||
** 003-clean_up_cvg-000, cvg tree cleanup.
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:11 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 61 5/18/98 12:11p Peter
|
||||
** removed unnecesasry fencing
|
||||
**
|
||||
** 60 4/29/98 2:32p Peter
|
||||
** fixed texture palette broadcast
|
||||
**
|
||||
** 59 3/30/98 2:46p Peter
|
||||
** fixed texture download muckage
|
||||
**
|
||||
** 58 3/29/98 10:54p Jdt
|
||||
** Unset GLIDE_POINTCAST_PALETTE
|
||||
**
|
||||
** 57 2/20/98 5:31p Peter
|
||||
** crybaby glide
|
||||
**
|
||||
** 56 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
**
|
||||
** 55 2/02/98 2:14p Atai
|
||||
** fixed palette broadcasts in _grTexDownloadNccTable and
|
||||
** _grTexDownloadPalette
|
||||
*
|
||||
* 54 1/09/98 6:48p Atai
|
||||
* grTexInfo, GR_LOD_* and GR_ASPECT_*
|
||||
*
|
||||
* 53 1/08/98 7:09p Peter
|
||||
* real hw stuff modulo makefile change
|
||||
*
|
||||
* 52 1/08/98 4:58p Atai
|
||||
* tex table broadcast, grVertexLayout enable/disable, stq, and some
|
||||
* defines
|
||||
*
|
||||
* 51 1/08/98 11:06a Dow
|
||||
* Set palette downloads to broadcast.
|
||||
*
|
||||
* 50 12/11/97 4:15p Peter
|
||||
* fixed assertions
|
||||
*
|
||||
* 49 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 48 12/05/97 4:26p Peter
|
||||
* watcom warnings
|
||||
*
|
||||
* 47 12/02/97 9:48a Dow
|
||||
* Got rid of Texelfx rev 0 warning
|
||||
*
|
||||
* 46 11/21/97 1:03p Peter
|
||||
* small texture download problem
|
||||
*
|
||||
* 45 11/20/97 6:57p Dow
|
||||
* Texture Downloads for Banshee
|
||||
*
|
||||
* 44 11/18/97 4:36p Peter
|
||||
* chipfield stuff cleanup and w/ direct writes
|
||||
*
|
||||
* 43 11/17/97 4:55p Peter
|
||||
* watcom warnings/chipfield stuff
|
||||
*
|
||||
* 42 11/14/97 12:09a Peter
|
||||
* comdex thing and some other stuff
|
||||
*
|
||||
* 41 11/12/97 11:16a Peter
|
||||
* cleaned up assertions
|
||||
*
|
||||
* 40 11/05/97 1:50p Peter
|
||||
* fixed partial palette downloads
|
||||
*
|
||||
* 39 11/03/97 3:43p Peter
|
||||
* h3/cvg cataclysm
|
||||
*
|
||||
* 38 10/08/97 11:33a Peter
|
||||
* reg group for palette download
|
||||
*
|
||||
* 37 9/15/97 7:31p Peter
|
||||
* more cmdfifo cleanup, fixed normal buffer clear, banner in the right
|
||||
* place, lfb's are on, Hmmmm.. probably more
|
||||
*
|
||||
* 36 9/04/97 3:32p Peter
|
||||
* starting grouping serial reg writes
|
||||
*
|
||||
* 35 8/18/97 3:52p Peter
|
||||
* pre-hw arrival fixes/cleanup
|
||||
*
|
||||
* 34 7/26/97 5:18p Peter
|
||||
* fixed macro muckage
|
||||
*
|
||||
* 33 7/08/97 2:49p Peter
|
||||
*
|
||||
* 32 7/02/97 12:28p Peter
|
||||
* removed spurious NOP, tex dl
|
||||
*
|
||||
* 31 6/30/97 3:22p Peter
|
||||
* cmd fifo sanity
|
||||
*
|
||||
**
|
||||
*/
|
||||
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/* externals from gtex.c */
|
||||
extern FxU32 _gr_aspect_xlate_table[];
|
||||
extern FxU32 _gr_evenOdd_xlate_table[];
|
||||
extern const int _grMipMapHostWH[GR_ASPECT_1x8 + 1][GR_LOD_1 + 1][2];
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** _grTexDownloadNccTable
|
||||
**
|
||||
** Downloads an ncctable to the specified _physical_ TMU(s). This
|
||||
** function is called internally by Glide and should not be executed
|
||||
** by an application.
|
||||
*/
|
||||
GR_DDFUNC(_grTexDownloadNccTable,
|
||||
void,
|
||||
(GrChipID_t tmu, FxU32 which, const GuNccTable *table, int start, int end))
|
||||
{
|
||||
#define FN_NAME "_grTexDownloadNccTable"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME,89);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,%d, 0x%x, %d,%d)\n",tmu,which,table,start,end);
|
||||
GR_ASSERT(start==0);
|
||||
GR_ASSERT(end==11);
|
||||
|
||||
/* check for null pointer */
|
||||
if (table == NULL) return;
|
||||
|
||||
_GlideRoot.stats.palDownloads++;
|
||||
_GlideRoot.stats.palBytes += (end-start+1)<<2;
|
||||
|
||||
if (gc->tmu_state[tmu].ncc_table[which] != table) {
|
||||
SstRegs* texHW;
|
||||
int i;
|
||||
#ifdef GLIDE_POINTCAST_PALETTE
|
||||
texHW = SST_TMU(hw,tmu);
|
||||
#else
|
||||
texHW = SST_CHIP(hw,0xe);
|
||||
#endif
|
||||
|
||||
if (which == 0) {
|
||||
#ifdef GLIDE_POINTCAST_PALETTE
|
||||
REG_GROUP_BEGIN((0x02UL << tmu), nccTable0, 12, 0x0FFF);
|
||||
#else
|
||||
REG_GROUP_BEGIN(0x0EUL, nccTable0, 12, 0x0FFF);
|
||||
#endif
|
||||
for (i = 0; i < 12; i++) REG_GROUP_SET(texHW, nccTable0[i], table->packed_data[i]);
|
||||
REG_GROUP_END();
|
||||
} else {
|
||||
#ifdef GLIDE_POINTCAST_PALETTE
|
||||
REG_GROUP_BEGIN((0x02UL << tmu), nccTable1, 12, 0x0FFF);
|
||||
#else
|
||||
REG_GROUP_BEGIN(0x0EUL, nccTable1, 12, 0x0FFF);
|
||||
#endif
|
||||
for (i = 0; i < 12; i++) REG_GROUP_SET(texHW, nccTable1[i], table->packed_data[i]);
|
||||
REG_GROUP_END();
|
||||
}
|
||||
|
||||
gc->tmu_state[tmu].ncc_table[which] = table;
|
||||
}
|
||||
|
||||
GR_END();
|
||||
#undef FN_NAME
|
||||
} /* _grTexDownloadNccTable */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: _grTexDownloadPalette
|
||||
Date: 6/9
|
||||
Implementor(s): jdt
|
||||
Library: Glide
|
||||
Description:
|
||||
Private function to download a palette to the specified tmu
|
||||
Arguments:
|
||||
tmu - which tmu to download the palette to
|
||||
pal - the pallete data
|
||||
start - beginning index to download
|
||||
end - ending index to download
|
||||
Return:
|
||||
none
|
||||
-------------------------------------------------------------------*/
|
||||
GR_DDFUNC(_grTexDownloadPalette,
|
||||
void,
|
||||
(GrChipID_t tmu, GuTexPalette *pal, int start, int end))
|
||||
{
|
||||
#define FN_NAME "_grTexDownloadPalette"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 89);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,0x%x, %d,%d)\n",tmu,pal,start,end);
|
||||
|
||||
GR_CHECK_F(FN_NAME, pal == NULL, "pal invalid");
|
||||
GR_CHECK_F(FN_NAME, start < 0, "invalid start index");
|
||||
GR_CHECK_F(FN_NAME, end > 255, "invalid end index");
|
||||
|
||||
/* NOTE:
|
||||
**
|
||||
** This code broadcasts the palette because in the future, we will
|
||||
** only support one global texture palette no matter how many TMUs
|
||||
** there are. This is fallout from the fact that future hardware
|
||||
** has a unified memory architecture.
|
||||
**
|
||||
** Source licensees (meaning arcade or LBE vendors that) require the
|
||||
** one palette/tmu mode should define GLIDE_POINTCAST_PALETTE on
|
||||
** the command line for this file. Understand, however, that this
|
||||
** will not work on future hardware.
|
||||
*/
|
||||
|
||||
#ifdef GLIDE_POINTCAST_PALETTE
|
||||
/*
|
||||
** FURTHER NOTE:
|
||||
** There is a sublety (nice way of saying BUG) here.
|
||||
** If TMU0 is specified, then the palette will be broadcast to all
|
||||
** TMUS. So, if the user downloads TMU1's palette, then TMU0's
|
||||
** palette, TMU0's palette will be on *both* TMUs. This is a
|
||||
** pretty strong indicator that no one is using separate palettes
|
||||
** on different TMUs.
|
||||
*/
|
||||
hw = SST_TMU(hw,tmu);
|
||||
#else
|
||||
hw = SST_CHIP(hw,0xE);
|
||||
#endif
|
||||
|
||||
_GlideRoot.stats.palDownloads++;
|
||||
_GlideRoot.stats.palBytes += ((end - start + 1) << 2);
|
||||
|
||||
/* We divide the writes into 3 chunks trying to group things into
|
||||
* complete 8 word grouped packets to fit the nccTable palette
|
||||
* format: stuff before the 8 word alignment, aligned writes, and
|
||||
* stuff after the 8 word alignment to the end. The slop regions
|
||||
* are one packet apiece.
|
||||
*/
|
||||
{
|
||||
#ifdef GLIDE_POINTCAST_PALETTE
|
||||
const FifoChipField chipId = (FifoChipField)(0x02UL << tmu);
|
||||
#else
|
||||
const FifoChipField chipId = (FifoChipField)0x0EUL;
|
||||
#endif
|
||||
const int endSlop = (end & ~0x07);
|
||||
const int startSlop = MIN(((start + 8) & ~0x07) - 1, end);
|
||||
int i = start;
|
||||
|
||||
/* Is the start of the palette range unaligned or is the end of
|
||||
* the range less than a completely aligned range?
|
||||
*/
|
||||
if (((start & 0x07) != 0) || (end < ((start + 8) & ~0x07))) {
|
||||
const FxI32 slopCount = startSlop - start + 1;
|
||||
GR_ASSERT((slopCount > 0) && (slopCount <= 8));
|
||||
|
||||
REG_GROUP_BEGIN(chipId, nccTable0[4 + (start & 0x07)],
|
||||
slopCount, (0xFF >> (8 - slopCount)));
|
||||
while(i < start + slopCount) {
|
||||
REG_GROUP_SET(hw, nccTable0[4 + (i & 0x07)],
|
||||
(0x80000000 | ((i & 0xFE) << 23) | (pal->data[i] & 0xFFFFFF)));
|
||||
i++;
|
||||
}
|
||||
REG_GROUP_END();
|
||||
}
|
||||
|
||||
/* Do all of the aligned palette ranges. */
|
||||
while(i < endSlop) {
|
||||
const int endIndex = i + 8;
|
||||
|
||||
REG_GROUP_BEGIN(chipId, nccTable0[4], 8, 0xFF);
|
||||
while(i < endIndex) {
|
||||
REG_GROUP_SET(hw, nccTable0[4 + (i & 0x07)],
|
||||
(0x80000000 | ((i & 0xFE) << 23) | (pal->data[i] & 0xFFFFFF)));
|
||||
i++;
|
||||
}
|
||||
REG_GROUP_END();
|
||||
}
|
||||
|
||||
/* Do we have any more slop at the end of the ragne? */
|
||||
if (i <= end) {
|
||||
const FxU32 slopCount = end - endSlop + 1;
|
||||
|
||||
REG_GROUP_BEGIN(chipId, nccTable0[4],
|
||||
slopCount, (0xFF >> (8 - slopCount)));
|
||||
while(i <= end) {
|
||||
REG_GROUP_SET(hw, nccTable0[4 + (i & 0x07)],
|
||||
(0x80000000 | ((i & 0xFE) << 23) | (pal->data[i] & 0xFFFFFF)));
|
||||
i++;
|
||||
}
|
||||
REG_GROUP_END();
|
||||
}
|
||||
}
|
||||
|
||||
GR_END();
|
||||
#undef FN_NAME
|
||||
} /* _grTexDownloadPalette */
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grTexDownloadTable
|
||||
Date: 6/3
|
||||
Implementor(s): jdt, GaryMcT
|
||||
Library: glide
|
||||
Description:
|
||||
download look up table data to a tmu
|
||||
Arguments:
|
||||
tmu - which tmu
|
||||
type - what type of table to download
|
||||
One of:
|
||||
GR_TEXTABLE_NCC0
|
||||
GR_TEXTABLE_NCC1
|
||||
GR_TEXTABLE_PALETTE
|
||||
void *data - pointer to table data
|
||||
Return:
|
||||
none
|
||||
-------------------------------------------------------------------*/
|
||||
GR_ENTRY(grTexDownloadTable,
|
||||
void,
|
||||
(GrChipID_t tmu, GrTexTable_t type, void *data))
|
||||
{
|
||||
#define FN_NAME "grTexDownloadTable"
|
||||
GR_BEGIN_NOFIFOCHECK("grTexDownloadTable",89);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,%d,0x%x)\n",tmu,type,data);
|
||||
GR_CHECK_TMU(FN_NAME,tmu);
|
||||
GR_CHECK_F(FN_NAME, type > GR_TEXTABLE_PALETTE, "invalid table specified");
|
||||
GR_CHECK_F(FN_NAME, !data, "invalid data pointer");
|
||||
|
||||
if (type == GR_TEXTABLE_PALETTE) /* Need Palette Download Code */
|
||||
_grTexDownloadPalette(tmu, (GuTexPalette *)data, 0, 255);
|
||||
else { /* Type is an ncc table */
|
||||
_grTexDownloadNccTable(tmu, type, (GuNccTable*)data, 0, 11);
|
||||
/* _grTexDownloadNccTable(tmu, type, (GuNccTable*)data, 0, 11); */
|
||||
}
|
||||
GR_END();
|
||||
#undef FN_NAME
|
||||
} /* grTexDownloadTable */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: grTexDownloadMipMapLevelPartial
|
||||
Date: 6/2
|
||||
Implementor(s): GaryMcT, Jdt
|
||||
Library: glide
|
||||
Description:
|
||||
Downloads a mipmap level to the specified tmu at the given
|
||||
texture start address
|
||||
Arguments:
|
||||
tmu - which tmu
|
||||
startAddress - starting address for texture download,
|
||||
this should be some value between grTexMinAddress()
|
||||
and grTexMaxAddress()
|
||||
thisLod - lod constant that describes the mipmap level
|
||||
to be downloaded
|
||||
largeLod - largest level of detail in complete mipmap to
|
||||
be downloaded at startAddress of which level to
|
||||
be downloaded is a part
|
||||
aspectRatio - aspect ratio of this mipmap
|
||||
format - format of mipmap image data
|
||||
evenOdd - which set of mipmap levels have been downloaded for
|
||||
the selected texture
|
||||
One of:
|
||||
GR_MIPMAPLEVELMASK_EVEN
|
||||
GR_MIPMAPLEVELMASK_ODD
|
||||
GR_MIPMAPLEVELMASK_BOTH
|
||||
data - pointer to mipmap data
|
||||
Return:
|
||||
none
|
||||
-------------------------------------------------------------------*/
|
||||
|
||||
GR_ENTRY(grTexDownloadMipMapLevelPartial,
|
||||
void,
|
||||
(GrChipID_t tmu, FxU32 startAddress,
|
||||
GrLOD_t thisLod, GrLOD_t largeLod, GrAspectRatio_t aspectRatio,
|
||||
GrTextureFormat_t format, FxU32 evenOdd, void *data, int t, int max_t))
|
||||
{
|
||||
const FifoChipField chipId = (FifoChipField)(0x02UL << tmu);
|
||||
FxI32 sh;
|
||||
#if !GLIDE_DISPATCH_DOWNLOAD
|
||||
FxU32 max_s, width, tmu_baseaddress;
|
||||
#endif
|
||||
#define FN_NAME "grTexDownloadMipMapLevelPartial"
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 89);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,0x%x, %d,%d,%d, %d,%d 0x%x, %d,%d)\n",
|
||||
tmu,startAddress,thisLod,largeLod,aspectRatio,
|
||||
format,evenOdd,data,t,max_t);
|
||||
|
||||
/* Check fo silly things */
|
||||
{
|
||||
const FxU32 size = _grTexTextureMemRequired(thisLod, thisLod,
|
||||
aspectRatio, format, evenOdd);
|
||||
|
||||
GR_CHECK_TMU(FN_NAME, tmu);
|
||||
GR_CHECK_COMPATABILITY(FN_NAME,
|
||||
startAddress + size > gc->tmu_state[tmu].total_mem,
|
||||
"insufficient texture ram at startAddress");
|
||||
GR_CHECK_COMPATABILITY(FN_NAME,
|
||||
startAddress & 0x7,
|
||||
"unaligned startAddress");
|
||||
GR_CHECK_F(FN_NAME, thisLod > GR_LOD_1,
|
||||
"thisLod invalid");
|
||||
GR_CHECK_F(FN_NAME, largeLod > GR_LOD_1,
|
||||
"largeLod invalid");
|
||||
GR_CHECK_F(FN_NAME, thisLod < largeLod,
|
||||
"thisLod may not be larger than largeLod");
|
||||
GR_CHECK_F(FN_NAME, aspectRatio > GR_ASPECT_1x8 ||
|
||||
aspectRatio < GR_ASPECT_8x1,
|
||||
"aspectRatio invalid");
|
||||
GR_CHECK_F(FN_NAME, evenOdd > 0x3 || evenOdd == 0,
|
||||
"evenOdd mask invalid");
|
||||
GR_CHECK_F(FN_NAME, !data,
|
||||
"invalid data pointer");
|
||||
GR_CHECK_F(FN_NAME, max_t >= _grMipMapHostWH[aspectRatio][thisLod][1],
|
||||
"invalid end row");
|
||||
|
||||
if ((startAddress < 0x200000) && (startAddress + size > 0x200000))
|
||||
GrErrorCallback("grTexDownloadMipMapLevelPartial: mipmap level cannot span 2 Mbyte boundary",
|
||||
FXTRUE);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Skip this level entirely if not in odd/even mask
|
||||
------------------------------------------------------------*/
|
||||
if (!(evenOdd & (thisLod & 0x1 ? GR_MIPMAPLEVELMASK_ODD:GR_MIPMAPLEVELMASK_EVEN)))
|
||||
goto all_done;
|
||||
|
||||
{
|
||||
/*------------------------------------------------------------
|
||||
Compute Base Address Given Start Address Offset
|
||||
------------------------------------------------------------*/
|
||||
const FxU32 baseAddress = _grTexCalcBaseAddress(startAddress,
|
||||
largeLod,
|
||||
aspectRatio,
|
||||
format,
|
||||
evenOdd) >> 3;
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Compute pertinant contents of tLOD and texMode registers
|
||||
------------------------------------------------------------*/
|
||||
FxU32 tLod = SST_TLOD_MINMAX_INT(largeLod, GR_LOD_1);
|
||||
FxU32 texMode = format << SST_TFORMAT_SHIFT;
|
||||
|
||||
tLod |= _gr_evenOdd_xlate_table[evenOdd];
|
||||
tLod |= _gr_aspect_xlate_table[aspectRatio];
|
||||
|
||||
if (gc->state.tmu_config[tmu].textureMode & SST_SEQ_8_DOWNLD) {
|
||||
sh = 2;
|
||||
texMode |= SST_SEQ_8_DOWNLD;
|
||||
} else {
|
||||
sh = 3;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Update TLOD, texMode, baseAddress
|
||||
------------------------------------------------------------*/
|
||||
hw = SST_TMU(hw,tmu);
|
||||
REG_GROUP_BEGIN(chipId, textureMode, 3, 0x0B);
|
||||
{
|
||||
REG_GROUP_SET(hw, textureMode, texMode);
|
||||
REG_GROUP_SET(hw, tLOD, tLod);
|
||||
REG_GROUP_SET(hw, texBaseAddr, baseAddress);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
}
|
||||
|
||||
#if GLIDE_DISPATCH_DOWNLOAD
|
||||
/* Do the download */
|
||||
{
|
||||
const FxU32
|
||||
width = _grMipMapHostWH[aspectRatio][thisLod][0],
|
||||
formatSel = (format >= GR_TEXFMT_16BIT),
|
||||
tmuBaseAddr = ((FxU32)gc->tex_ptr +
|
||||
(((FxU32)tmu) << 21UL) +
|
||||
(((FxU32)thisLod) << 17UL));
|
||||
FxU32
|
||||
widthSel = (width >> 0x01UL),
|
||||
max_s = width >> (formatSel
|
||||
? 1 /* 16-bit texture */
|
||||
: 2); /* 8-bit texture */
|
||||
|
||||
if (max_s <= 0) max_s = 1;
|
||||
if (widthSel > 2) widthSel = 3;
|
||||
|
||||
_GlideRoot.stats.texBytes += max_s * (max_t - t + 1) * 4;
|
||||
|
||||
if ((sh == 3) && !formatSel && (width > 4)) {
|
||||
/* 8-bit >4xN texture with Old revision TMUs (GR_SSTTYPE_VOODOO) */
|
||||
const FxU8* src8 = (const FxU8*)data;
|
||||
/* Compute Physical Write Pointer */
|
||||
const FxU32
|
||||
tmu_baseaddress = (FxU32)gc->tex_ptr +
|
||||
(((FxU32)tmu) << 21) + (((FxU32)thisLod) << 17);
|
||||
|
||||
for (; t <= max_t; t++) {
|
||||
FxU32
|
||||
s,
|
||||
tex_address = tmu_baseaddress + TEX_ROW_ADDR_INCR(t);
|
||||
|
||||
LINEAR_WRITE_BEGIN(max_s, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
for (s = 0; s < max_s; s+=2) {
|
||||
const FxU32 t0 = *(const FxU32*)(src8 );
|
||||
const FxU32 t1 = *(const FxU32*)(src8 + sizeof(FxU32));
|
||||
|
||||
LINEAR_WRITE_SET_8(tex_address , t0);
|
||||
LINEAR_WRITE_SET_8(tex_address + sizeof(FxU32), t1);
|
||||
|
||||
tex_address += 16;
|
||||
src8 += (sizeof(FxU32) << 1);
|
||||
}
|
||||
LINEAR_WRITE_END();
|
||||
}
|
||||
} else {
|
||||
/* GR_SSTTYPE_Voodoo2 all go through here */
|
||||
(*((*_GlideRoot.deviceArchProcs.curTexProcs)[formatSel][widthSel]))(gc,
|
||||
tmuBaseAddr,
|
||||
max_s, t, max_t,
|
||||
data);
|
||||
}
|
||||
}
|
||||
#else
|
||||
/*------------------------------------------------------------
|
||||
Determine max_s
|
||||
------------------------------------------------------------*/
|
||||
width = _grMipMapHostWH[aspectRatio][thisLod][0];
|
||||
max_s = width >> ((format < GR_TEXFMT_16BIT)
|
||||
? 2 /* 8-bit texture */
|
||||
: 1); /* 16-bit texture */
|
||||
if (max_s <= 0) max_s = 1;
|
||||
|
||||
_GlideRoot.stats.texBytes += max_s * (max_t - t + 1) * 4;
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Compute Physical Write Pointer
|
||||
------------------------------------------------------------*/
|
||||
tmu_baseaddress = (FxU32)gc->tex_ptr;
|
||||
tmu_baseaddress += (((FxU32)tmu) << 21) + (((FxU32)thisLod) << 17);
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Handle 8-bit Textures
|
||||
------------------------------------------------------------*/
|
||||
if (format < GR_TEXFMT_16BIT) { /* 8 bit textures */
|
||||
/* Hoisted initialization */
|
||||
FxU32 tex_address = tmu_baseaddress + TEX_ROW_ADDR_INCR(t);
|
||||
const FxU8* src8 = (const FxU8*)data;
|
||||
|
||||
switch(width) {
|
||||
case 1:
|
||||
for (; t <= max_t; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_8(tex_address, (const FxU32)*(const FxU8*)src8);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src8 += width;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
for (; t <= max_t; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_8(tex_address, (const FxU32)*(const FxU16*)src8);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src8 += width;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
for (; t <= max_t; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_8(tex_address, *(const FxU32*)src8);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src8 += width;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
break;
|
||||
|
||||
default: { /* >4xN texture */
|
||||
const FxU32 texAddrInc = ((sh == 3)
|
||||
? 16 /* Old TMUs */
|
||||
: 8);/* New TMUs */
|
||||
|
||||
for (; t <= max_t; t++) {
|
||||
FxU32 s;
|
||||
|
||||
tex_address = tmu_baseaddress + TEX_ROW_ADDR_INCR(t);
|
||||
|
||||
LINEAR_WRITE_BEGIN(max_s, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
for (s = 0; s < max_s; s+=2) {
|
||||
const FxU32 t0 = *(const FxU32*)(src8 );
|
||||
const FxU32 t1 = *(const FxU32*)(src8 + sizeof(FxU32));
|
||||
|
||||
LINEAR_WRITE_SET_8(tex_address , t0);
|
||||
LINEAR_WRITE_SET_8(tex_address + sizeof(FxU32), t1);
|
||||
|
||||
tex_address += texAddrInc;
|
||||
src8 += (sizeof(FxU32) << 1);
|
||||
}
|
||||
LINEAR_WRITE_END();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else { /* 16-bit Textures */
|
||||
/* Hoisted initialization */
|
||||
FxU32 tex_address = tmu_baseaddress + TEX_ROW_ADDR_INCR(t);
|
||||
const FxU16* src16 = (const FxU16*)data;
|
||||
|
||||
/* Cases 1, 2 don't need inner loops for s */
|
||||
switch(width) {
|
||||
case 1:
|
||||
for (; t <= max_t; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_16(tex_address, (const FxU32)*(const FxU16*)src16);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src16 += width;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
for (; t <= max_t; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_16(tex_address, *(const FxU32*)src16);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src16 += width;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
for (; t <= max_t; t++) {
|
||||
FxU32 s;
|
||||
|
||||
tex_address = tmu_baseaddress + TEX_ROW_ADDR_INCR(t);
|
||||
|
||||
/* Loop unrolled to process 2 dwords per iteration */
|
||||
LINEAR_WRITE_BEGIN(max_s, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
for (s = 0; s < max_s; s += 2) {
|
||||
const FxU32 t0 = *(const FxU32*)(src16 );
|
||||
const FxU32 t1 = *(const FxU32*)(src16 + 2);
|
||||
|
||||
GDBG_INFO(195, "s = %d, t= %d, address = 0x%x\n",
|
||||
s, t, (FxU32) tex_address - (FxU32) gc->tex_ptr + 0x200000);
|
||||
LINEAR_WRITE_SET_16(tex_address , t0);
|
||||
LINEAR_WRITE_SET_16(tex_address + 4, t1);
|
||||
|
||||
tex_address += 8;
|
||||
src16 += 4;
|
||||
}
|
||||
|
||||
LINEAR_WRITE_END();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Restore TLOD, texMode, baseAddress
|
||||
------------------------------------------------------------*/
|
||||
REG_GROUP_BEGIN(chipId, textureMode, 3, 0x0B);
|
||||
{
|
||||
REG_GROUP_SET(hw, textureMode, gc->state.tmu_config[tmu].textureMode);
|
||||
REG_GROUP_SET(hw, tLOD, gc->state.tmu_config[tmu].tLOD);
|
||||
REG_GROUP_SET(hw, texBaseAddr, gc->state.tmu_config[tmu].texBaseAddr);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
all_done:
|
||||
_GlideRoot.stats.texDownloads++;
|
||||
#undef FN_NAME
|
||||
} /* grTexDownloadMipmapLevelPartial */
|
||||
|
||||
/*
|
||||
Let me take this opportunity to register my formal opposition to
|
||||
this function. Either we do this or we don't. Let's not hack like
|
||||
this.
|
||||
|
||||
CHD
|
||||
*/
|
||||
|
||||
GR_ENTRY(ConvertAndDownloadRle,
|
||||
void,
|
||||
(GrChipID_t tmu, FxU32 startAddress,
|
||||
GrLOD_t thisLod, GrLOD_t largeLod, GrAspectRatio_t aspectRatio,
|
||||
GrTextureFormat_t format, FxU32 evenOdd,
|
||||
FxU8 *bm_data, long bm_h,
|
||||
FxU32 u0, FxU32 v0,
|
||||
FxU32 width, FxU32 height, FxU32 dest_width, FxU32 dest_height, FxU16 *tlut))
|
||||
{
|
||||
const FifoChipField chipId = (FifoChipField)(0x02UL << tmu);
|
||||
FxI32 sh;
|
||||
FxU32 max_s,s,t,max_t,tex_address, tmu_baseaddress;
|
||||
FxU32 tLod, texMode, baseAddress,size;
|
||||
FxU32 offset,expected_size;
|
||||
unsigned long i;
|
||||
FxU16 *src;
|
||||
extern FxU16 rle_line[256]; /* diTex.c */
|
||||
extern FxU16 *rle_line_end; /* ditex.c */
|
||||
#define FN_NAME "ConvertAndDownloadRLE"
|
||||
GR_BEGIN_NOFIFOCHECK(FN_NAME, 89);
|
||||
|
||||
/* make sure even number */
|
||||
width&=0xFFFFFFFE;
|
||||
|
||||
max_s=width>>1;
|
||||
max_t=height;
|
||||
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d,0x%x, %d,%d,%d, %d,%d 0x%x, %d)\n",
|
||||
tmu,startAddress,thisLod,largeLod,aspectRatio,
|
||||
format,evenOdd,bm_data,max_t);
|
||||
|
||||
size = _grTexTextureMemRequired(thisLod, thisLod, aspectRatio, format, evenOdd);
|
||||
GR_CHECK_TMU(FN_NAME, tmu);
|
||||
GR_CHECK_F(FN_NAME, startAddress + size > gc->tmu_state[tmu].total_mem,
|
||||
"insufficient texture ram at startAddress");
|
||||
GR_CHECK_F(FN_NAME, startAddress & 0x7, "unaligned startAddress");
|
||||
GR_CHECK_F(FN_NAME, thisLod > GR_LOD_1, "thisLod invalid");
|
||||
GR_CHECK_F(FN_NAME, largeLod > GR_LOD_1, "largeLod invalid");
|
||||
GR_CHECK_F(FN_NAME, thisLod < largeLod, "thisLod may not be larger than largeLod");
|
||||
GR_CHECK_F(FN_NAME, aspectRatio > GR_ASPECT_1x8 ||
|
||||
aspectRatio < GR_ASPECT_8x1,
|
||||
"aspectRatio invalid");
|
||||
GR_CHECK_F(FN_NAME, evenOdd > 0x3 || evenOdd == 0, "evenOdd mask invalid");
|
||||
GR_CHECK_F(FN_NAME, !bm_data, "invalid data pointer");
|
||||
GR_CHECK_F(FN_NAME, (dest_height-1) >= (FxU32)_grMipMapHostWH[aspectRatio][thisLod][1],
|
||||
"invalid end row");
|
||||
|
||||
if ((startAddress < 0x200000) && (startAddress + size > 0x200000))
|
||||
GrErrorCallback("grTexDownloadMipMapLevelPartial: mipmap level cannot span 2 Mbyte boundary",
|
||||
FXTRUE);
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Skip this level entirely if not in odd/even mask
|
||||
------------------------------------------------------------*/
|
||||
if (!(evenOdd & (thisLod & 0x1 ? GR_MIPMAPLEVELMASK_ODD:GR_MIPMAPLEVELMASK_EVEN)))
|
||||
goto all_done;
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Compute Base Address Given Start Address Offset
|
||||
------------------------------------------------------------*/
|
||||
baseAddress = _grTexCalcBaseAddress(startAddress,
|
||||
largeLod,
|
||||
aspectRatio,
|
||||
format,
|
||||
evenOdd);
|
||||
baseAddress >>= 3;
|
||||
#if H3
|
||||
baseAddress = ((baseAddress << 3) & ~0x0F);
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Compute Physical Write Pointer
|
||||
------------------------------------------------------------*/
|
||||
tmu_baseaddress = (FxU32)gc->tex_ptr;
|
||||
tmu_baseaddress += (((FxU32)tmu)<<21) + (((FxU32)thisLod)<<17);
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Compute pertinant contents of tLOD and texMode registers
|
||||
------------------------------------------------------------*/
|
||||
tLod = SST_TLOD_MINMAX_INT(largeLod, GR_LOD_1);
|
||||
tLod |= _gr_evenOdd_xlate_table[evenOdd];
|
||||
tLod |= _gr_aspect_xlate_table[aspectRatio];
|
||||
texMode = format << SST_TFORMAT_SHIFT;
|
||||
if (gc->state.tmu_config[tmu].textureMode & SST_SEQ_8_DOWNLD) {
|
||||
sh = 2;
|
||||
texMode |= SST_SEQ_8_DOWNLD;
|
||||
} else {
|
||||
sh = 3;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Update TLOD, texMode, baseAddress
|
||||
------------------------------------------------------------*/
|
||||
hw = SST_TMU(hw,tmu);
|
||||
REG_GROUP_BEGIN(chipId, textureMode, 3, 0x0B);
|
||||
{
|
||||
REG_GROUP_SET(hw, textureMode, texMode);
|
||||
REG_GROUP_SET(hw, tLOD, tLod);
|
||||
REG_GROUP_SET(hw, texBaseAddr, baseAddress);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
_GlideRoot.stats.texBytes += dest_width * (dest_height) * 2;
|
||||
|
||||
/* here I can do my writes and conversion and I will be so happy */
|
||||
offset=4+bm_h;
|
||||
for (i=0; i<v0; i++)
|
||||
offset += bm_data[4+i];
|
||||
|
||||
max_s=dest_width>>1;
|
||||
expected_size=max_s*5;
|
||||
|
||||
rle_line_end=rle_line+width+u0;
|
||||
for(t=0;t<max_t;t++) {
|
||||
tex_address = tmu_baseaddress + TEX_ROW_ADDR_INCR(t);
|
||||
src = rle_line + u0;
|
||||
|
||||
rle_decode_line_asm(tlut,&bm_data[offset],rle_line);
|
||||
|
||||
LINEAR_WRITE_BEGIN(max_s, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
for(s = 0; s < max_s; s++) {
|
||||
LINEAR_WRITE_SET(tex_address + (s << 2), *(FxU32 *) src);
|
||||
src += 2;
|
||||
}
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
offset+=bm_data[4+i++];
|
||||
}
|
||||
|
||||
if (dest_height>height) {
|
||||
tex_address = tmu_baseaddress + TEX_ROW_ADDR_INCR(t);
|
||||
src=rle_line+u0;
|
||||
|
||||
LINEAR_WRITE_BEGIN(max_s, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
for(s = 0; s < max_s; s++) {
|
||||
LINEAR_WRITE_SET(tex_address + (s << 2), *(FxU32 *) src);
|
||||
src += 2;
|
||||
}
|
||||
LINEAR_WRITE_END();
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------
|
||||
Restore TLOD, texMode, baseAddress
|
||||
------------------------------------------------------------*/
|
||||
REG_GROUP_BEGIN(chipId, textureMode, 3, 0x0B);
|
||||
{
|
||||
REG_GROUP_SET(hw, textureMode, gc->state.tmu_config[tmu].textureMode);
|
||||
REG_GROUP_SET(hw, tLOD, gc->state.tmu_config[tmu].tLOD);
|
||||
REG_GROUP_SET(hw, texBaseAddr, gc->state.tmu_config[tmu].texBaseAddr);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
all_done:
|
||||
_GlideRoot.stats.texDownloads++;
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,449 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 14 12/18/97 2:13p Peter
|
||||
* fogTable cataclysm
|
||||
*
|
||||
* 13 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 12 5/21/97 6:05a Peter
|
||||
*
|
||||
* 11 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
*
|
||||
* 10 3/05/97 9:36p Jdt
|
||||
* Added guEncodeRLE16
|
||||
*
|
||||
* 9 12/23/96 1:37p Dow
|
||||
* chagnes for multiplatform glide
|
||||
**
|
||||
*/
|
||||
|
||||
#include <3dfx.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
#if ( (GLIDE_PLATFORM & GLIDE_SST_HW) && (GLIDE_PLATFORM & GLIDE_HW_SST1) )
|
||||
#include <sst1init.h>
|
||||
#endif
|
||||
|
||||
#include "fxinline.h"
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guAlphaSource
|
||||
*/
|
||||
GR_DIENTRY(guAlphaSource, void, ( GrAlphaSource_t mode ))
|
||||
{
|
||||
GDBG_INFO(99,"guAlphaSource(%d)\n",mode);
|
||||
switch ( mode ) {
|
||||
case GR_ALPHASOURCE_CC_ALPHA:
|
||||
grAlphaCombine( GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_CONSTANT,
|
||||
GR_COMBINE_OTHER_NONE,
|
||||
FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_ALPHASOURCE_ITERATED_ALPHA:
|
||||
grAlphaCombine( GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_ITERATED,
|
||||
GR_COMBINE_OTHER_NONE,
|
||||
FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_ALPHASOURCE_TEXTURE_ALPHA:
|
||||
grAlphaCombine( GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_LOCAL_NONE,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_ALPHA:
|
||||
grAlphaCombine( GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_LOCAL_ITERATED,
|
||||
GR_COMBINE_OTHER_TEXTURE,
|
||||
FXFALSE );
|
||||
break;
|
||||
|
||||
default:
|
||||
GR_CHECK_F("grAlphaSource", 1, "unknown alpha source mode");
|
||||
break;
|
||||
}
|
||||
|
||||
/* xxx not needed at the moment, should update grFogxxx
|
||||
_grVerifyNeedForITAlpha();
|
||||
*/
|
||||
} /* guAlphaSource */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guColorCombineFunction
|
||||
*/
|
||||
GR_DIENTRY(guColorCombineFunction, void, ( GrColorCombineFnc_t fnc ))
|
||||
{
|
||||
GDBG_INFO(99,"guColorCombineFunction(%d)\n",fnc);
|
||||
|
||||
/* gross hack to get ITRGB_DELTA0 modes working */
|
||||
_grColorCombineDelta0Mode( FXFALSE );
|
||||
|
||||
switch ( fnc )
|
||||
{
|
||||
case GR_COLORCOMBINE_ZERO:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE, GR_COMBINE_LOCAL_NONE, GR_COMBINE_OTHER_NONE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_CCRGB:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OTHER_NONE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_ITRGB_DELTA0:
|
||||
_grColorCombineDelta0Mode( FXTRUE );
|
||||
/* FALL THRU */
|
||||
case GR_COLORCOMBINE_ITRGB:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_NONE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_DECAL_TEXTURE:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_ONE, GR_COMBINE_LOCAL_NONE, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_LOCAL, GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0:
|
||||
_grColorCombineDelta0Mode( FXTRUE );
|
||||
/* FALL THRU */
|
||||
case GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_LOCAL, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA, GR_COMBINE_FACTOR_LOCAL, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER, GR_COMBINE_FACTOR_LOCAL_ALPHA, GR_COMBINE_LOCAL_NONE, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, GR_COMBINE_FACTOR_LOCAL_ALPHA, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_TEXTURE_ADD_ITRGB:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, GR_COMBINE_FACTOR_ONE, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_TEXTURE_SUB_ITRGB:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL, GR_COMBINE_FACTOR_ONE, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_TEXTURE_ALPHA, GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OTHER_ITERATED, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_DIFF_SPEC_A:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL, GR_COMBINE_FACTOR_LOCAL_ALPHA, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_DIFF_SPEC_B:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA, GR_COMBINE_FACTOR_LOCAL, GR_COMBINE_LOCAL_ITERATED, GR_COMBINE_OTHER_TEXTURE, FXFALSE );
|
||||
break;
|
||||
|
||||
case GR_COLORCOMBINE_ONE:
|
||||
grColorCombine( GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE, GR_COMBINE_LOCAL_NONE, GR_COMBINE_OTHER_NONE, FXTRUE );
|
||||
break;
|
||||
|
||||
default:
|
||||
GR_CHECK_F("grColorCombineFunction", 1, "unsupported color combine function");
|
||||
break;
|
||||
}
|
||||
} /* guColorCombineFunction */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guEndianSwapWords
|
||||
*/
|
||||
GR_DIENTRY(guEndianSwapWords, FxU32, ( FxU32 value ))
|
||||
{
|
||||
return ( ( value & 0xFFFF0000 ) >> 16 ) | ( value << 16 );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guEndianSwapBytes
|
||||
*/
|
||||
GR_DIENTRY(guEndianSwapBytes, FxU16, ( FxU16 value ))
|
||||
{
|
||||
return ( ( value & 0xFF00 ) >> 8 ) | ( value << 8 );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guFogTableIndexToW
|
||||
*/
|
||||
GR_DIENTRY(guFogTableIndexToW, float, ( int i ))
|
||||
{
|
||||
return (float)pow(2.0,3.0+(double)(i>>2)) / (8-(i&3));
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guFogGenerateExp
|
||||
*/
|
||||
GR_DIENTRY(guFogGenerateExp, void,
|
||||
( GrFog_t fogtable[], float density ))
|
||||
{
|
||||
int i;
|
||||
float f;
|
||||
float scale;
|
||||
float dp;
|
||||
|
||||
GDBG_INFO(99,"guFogGenerateExp(0x%x,%g)\n",fogtable,density);
|
||||
dp = density * guFogTableIndexToW( kInternalFogTableEntryCount - 1 );
|
||||
scale = 1.0F / ( 1.0F - ( float ) exp( -dp ) );
|
||||
|
||||
for ( i = 0; i < kInternalFogTableEntryCount; i++ ) {
|
||||
dp = density * guFogTableIndexToW( i );
|
||||
f = ( 1.0F - ( float ) exp( -dp ) ) * scale;
|
||||
|
||||
if ( f > 1.0F )
|
||||
f = 1.0F;
|
||||
else if ( f < 0.0F )
|
||||
f = 0.0F;
|
||||
|
||||
f *= 255.0F;
|
||||
fogtable[i] = ( GrFog_t ) f;
|
||||
}
|
||||
} /* guFogGenerateExp */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guFogGenerateExp2
|
||||
*/
|
||||
GR_DIENTRY(guFogGenerateExp2, void,
|
||||
( GrFog_t fogtable[], float density ))
|
||||
{
|
||||
int i;
|
||||
float f;
|
||||
float scale;
|
||||
float dp;
|
||||
|
||||
GDBG_INFO(99,"guFogGenerateExp2(0x%x,%g)\n",fogtable,density);
|
||||
dp = density * guFogTableIndexToW( kInternalFogTableEntryCount - 1 );
|
||||
scale = 1.0F / ( 1.0F - ( float ) exp( -( dp * dp ) ) );
|
||||
|
||||
for ( i = 0; i < kInternalFogTableEntryCount; i++ ) {
|
||||
dp = density * guFogTableIndexToW( i );
|
||||
f = ( 1.0F - ( float ) exp( -( dp * dp ) ) ) * scale;
|
||||
|
||||
if ( f > 1.0F )
|
||||
f = 1.0F;
|
||||
else if ( f < 0.0F )
|
||||
f = 0.0F;
|
||||
|
||||
f *= 255.0F;
|
||||
fogtable[i] = ( GrFog_t ) f;
|
||||
}
|
||||
} /* guFogGenerateExp2 */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guFogGenerateLinear
|
||||
*/
|
||||
GR_DIENTRY(guFogGenerateLinear, void,
|
||||
( GrFog_t fogtable[kInternalFogTableEntryCount],
|
||||
float nearZ, float farZ ))
|
||||
{
|
||||
int i;
|
||||
float world_w;
|
||||
float f;
|
||||
|
||||
GDBG_INFO(99,"guFogGenerateLinear(0x%x,%g,%g)\n",fogtable,nearZ,farZ);
|
||||
for ( i = 0; i < kInternalFogTableEntryCount; i++ ) {
|
||||
world_w = guFogTableIndexToW( i );
|
||||
if ( world_w > 65535.0F )
|
||||
world_w = 65535.0F;
|
||||
|
||||
f = ( world_w - nearZ ) / ( farZ - nearZ );
|
||||
if ( f > 1.0F )
|
||||
f = 1.0F;
|
||||
else if ( f < 0.0F )
|
||||
f = 0.0F;
|
||||
f *= 255.0F;
|
||||
fogtable[i] = ( GrFog_t ) f;
|
||||
}
|
||||
} /* guFogGenerateLinear */
|
||||
|
||||
/*
|
||||
** setlevel
|
||||
*/
|
||||
static void
|
||||
setlevel( FxU16 *data, FxU16 color, int width, int height )
|
||||
{
|
||||
int s, t;
|
||||
|
||||
for ( t = 0; t < height; t++ )
|
||||
{
|
||||
for ( s = 0; s < width; s++ )
|
||||
{
|
||||
*data = color;
|
||||
data++;
|
||||
}
|
||||
}
|
||||
} /* setlevel */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexCreateColorMipMap
|
||||
*/
|
||||
GR_DIENTRY(guTexCreateColorMipMap, FxU16 *, ( void ))
|
||||
{
|
||||
FxU32 memrequired;
|
||||
FxU16 *data;
|
||||
FxU16 *start;
|
||||
|
||||
GDBG_INFO(99,"guTexCreateColorMipMap()\n");
|
||||
memrequired = 2 * ( 256 * 256 + 128 * 128 + 64 * 64 + 32 * 32 + 16 * 16 + 8 * 8 + 4 * 4 + 2 * 2 + 1 * 1 );
|
||||
start = data = malloc( memrequired );
|
||||
if ( !data )
|
||||
return 0;
|
||||
|
||||
setlevel( data, 0xF800, 256, 256 );
|
||||
setlevel( data += 256*256, 0x07e0, 128, 128 );
|
||||
setlevel( data += 128*128, 0x001F, 64, 64 );
|
||||
setlevel( data += 64*64, 0xFFFF, 32, 32);
|
||||
setlevel( data += 32*32, 0x0000, 16, 16 );
|
||||
setlevel( data += 16*16, 0xF800, 8, 8);
|
||||
setlevel( data += 8*8, 0x07e0, 4, 4 );
|
||||
setlevel( data += 4*4, 0x001f, 2, 2 );
|
||||
setlevel( data += 2*2, 0xFFFF, 1, 1 );
|
||||
|
||||
return start;
|
||||
} /* guTexCreateColoMipMap */
|
||||
|
||||
/* GMT: this code used to be in the code above but I removed it for
|
||||
readability, the first section was case(1) the second section
|
||||
was a replacement for the simple 32-bit copy loop
|
||||
*/
|
||||
#if 0
|
||||
|
||||
/* GMT: from what I can tell its not bad to perform unaligned DWORD
|
||||
loads on a P5, so we use the case 2) all the time
|
||||
in fact, its twice as fast as doing aligned short copies
|
||||
*/
|
||||
if ((dstX ^ (((FxU32)src)>>1)) & 1) {
|
||||
/* case 1) a simple 16-bit copy loop */
|
||||
for (x=0; x < w; x++) {
|
||||
GR_SET16(lfbPtr[x], ((FxU16 *)src)[x]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* GMT: I tried to unroll the loop but for some reason the
|
||||
code scheduling was such that it was slower
|
||||
I think it had to do with the way the 2 mov instructions paired
|
||||
Perhaps they were unaligned in the cache?
|
||||
*/
|
||||
FxU32 a,b;
|
||||
FxU32 *s = (FxU32 *)src;
|
||||
FxU32 *d = lfbPtr;
|
||||
|
||||
while (d < &lfbPtr[w-1]) {
|
||||
a = s[0];
|
||||
b = s[1];
|
||||
GR_SET(d[0], a);
|
||||
GR_SET(d[1], b);
|
||||
s += 2;
|
||||
d += 2;
|
||||
}
|
||||
if (w & 1) {
|
||||
GR_SET(d[0], s[0]);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
Function: guEncodeRle
|
||||
Date: 3/5/96
|
||||
Implementor(s): jdt
|
||||
Library: Glide Utilities
|
||||
Description:
|
||||
Encode an RGB565 image into RLE16 format
|
||||
Arguments:
|
||||
dst - destination rle image data ( NULL for bytecount only )
|
||||
src - source rgb565 image data
|
||||
width - width of source data
|
||||
height - height of source data
|
||||
Return:
|
||||
number of bytes in encoded rle image
|
||||
-------------------------------------------------------------------*/
|
||||
GR_ENTRY( guEncodeRLE16, int, ( void *dst, void *src, FxU32 width, FxU32 height ))
|
||||
{
|
||||
int byteCount = 0;
|
||||
int sourceImageSizeInWords;
|
||||
FxU16 *srcPixels;
|
||||
FxU32 *dstPixels;
|
||||
|
||||
sourceImageSizeInWords = width * height;
|
||||
|
||||
srcPixels = src;
|
||||
|
||||
if ( dst ) {
|
||||
dstPixels = dst;
|
||||
while( sourceImageSizeInWords-- ) {
|
||||
short length = 1;
|
||||
short color = *srcPixels;
|
||||
int lookAhead = 1;
|
||||
|
||||
while( (sourceImageSizeInWords-length)&&
|
||||
(color == srcPixels[lookAhead]) ) {
|
||||
length++;
|
||||
lookAhead++;
|
||||
}
|
||||
|
||||
*dstPixels = ((((FxU32)length)<<16) | ((FxU32)color));
|
||||
dstPixels++;
|
||||
|
||||
byteCount+=4;
|
||||
|
||||
srcPixels+=length;
|
||||
sourceImageSizeInWords-=length;
|
||||
}
|
||||
} else {
|
||||
while( sourceImageSizeInWords-- ) {
|
||||
short length = 1;
|
||||
short color = *srcPixels;
|
||||
int lookAhead = 1;
|
||||
|
||||
while( (sourceImageSizeInWords-length)&&
|
||||
(color == srcPixels[lookAhead]) ) {
|
||||
length++;
|
||||
lookAhead++;
|
||||
}
|
||||
|
||||
byteCount+=4;
|
||||
srcPixels+=length;
|
||||
sourceImageSizeInWords-=length;
|
||||
}
|
||||
}
|
||||
return byteCount;
|
||||
}
|
||||
@@ -1,450 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.2.1 2005/01/22 14:52:02 koolsmoky
|
||||
** enabled packed argb for cmd packet type 3
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:11 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
*
|
||||
* 12 12/15/97 5:52p Atai
|
||||
* disable obsolete glide2 api for glide3
|
||||
*
|
||||
* 11 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 10 12/08/97 12:06p Atai
|
||||
* change prototype for grDrawPoint, grDrawLine, grDrawTriangel
|
||||
*
|
||||
* 9 8/18/97 3:52p Peter
|
||||
* pre-hw arrival fixes/cleanup
|
||||
*
|
||||
* 8 7/31/97 11:14a Peter
|
||||
* merge w/ sst1 glide tree, hopefully
|
||||
*
|
||||
* 5 6/27/97 4:16p Atai
|
||||
* fixed guDrawTriangleWithClip bug (#484) by removing +1.0F and -1.0F in
|
||||
* intersectTop(), intersectBottom(), intersectLeft(), and
|
||||
* intersectRight() routine
|
||||
*
|
||||
* 4 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
**
|
||||
*/
|
||||
|
||||
#include <3dfx.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/* Moved per GMT cleanup */
|
||||
#define GU_PRIM_MAX_VERTICES 100
|
||||
|
||||
static void
|
||||
calcParams(const GrVertex *a, const GrVertex *b, GrVertex *isect, float d)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
if (gc->state.paramIndex & STATE_REQUIRES_IT_DRGB) {
|
||||
isect->r = a->r + d * ( b->r - a->r );
|
||||
isect->g = a->g + d * ( b->g - a->g );
|
||||
isect->b = a->b + d * ( b->b - a->b );
|
||||
}
|
||||
|
||||
if (gc->state.paramIndex & STATE_REQUIRES_IT_ALPHA) {
|
||||
isect->a = a->a + d * ( b->a - a->a );
|
||||
}
|
||||
|
||||
if (gc->state.paramIndex & STATE_REQUIRES_OOZ) {
|
||||
isect->ooz = a->ooz + d * ( b->ooz - a->ooz );
|
||||
}
|
||||
|
||||
if (gc->state.paramIndex & STATE_REQUIRES_OOW_FBI) {
|
||||
isect->oow = a->oow + d * ( b->oow - a->oow);
|
||||
}
|
||||
|
||||
if (gc->state.paramIndex & STATE_REQUIRES_ST_TMU0) {
|
||||
isect->tmuvtx[0].oow =
|
||||
a->tmuvtx[0].oow + d * ( b->tmuvtx[0].oow - a->tmuvtx[0].oow );
|
||||
isect->tmuvtx[0].sow =
|
||||
a->tmuvtx[0].sow + d * ( b->tmuvtx[0].sow - a->tmuvtx[0].sow );
|
||||
isect->tmuvtx[0].tow =
|
||||
a->tmuvtx[0].tow + d * ( b->tmuvtx[0].tow - a->tmuvtx[0].tow );
|
||||
}
|
||||
|
||||
if (gc->state.paramIndex & STATE_REQUIRES_ST_TMU1) {
|
||||
isect->tmuvtx[1].oow =
|
||||
a->tmuvtx[1].oow + d * ( b->tmuvtx[1].oow - a->tmuvtx[1].oow );
|
||||
isect->tmuvtx[1].sow =
|
||||
a->tmuvtx[1].sow + d * ( b->tmuvtx[1].sow - a->tmuvtx[1].sow );
|
||||
isect->tmuvtx[1].tow =
|
||||
a->tmuvtx[1].tow + d * ( b->tmuvtx[1].tow - a->tmuvtx[1].tow );
|
||||
}
|
||||
|
||||
#if (GLIDE_NUM_TMU > 2)
|
||||
if (gc->state.paramIndex & STATE_REQUIRES_ST_TMU2) {
|
||||
isect->tmuvtx[2].oow =
|
||||
a->tmuvtx[2].oow + d * ( b->tmuvtx[2].oow - a->tmuvtx[2].oow );
|
||||
isect->tmuvtx[2].sow =
|
||||
a->tmuvtx[2].sow + d * ( b->tmuvtx[2].sow - a->tmuvtx[2].sow );
|
||||
isect->tmuvtx[2].tow =
|
||||
a->tmuvtx[2].tow + d * ( b->tmuvtx[2].tow - a->tmuvtx[2].tow );
|
||||
}
|
||||
#endif
|
||||
|
||||
} /* calcParams */
|
||||
|
||||
static void
|
||||
intersectTop( const GrVertex *a, const GrVertex *b, GrVertex *intersect )
|
||||
{
|
||||
GR_DCL_GC;
|
||||
float
|
||||
d = ( gc->state.clipwindowf_ymin - a->y ) / ( b->y - a->y );
|
||||
|
||||
intersect->x = a->x + d * ( b->x - a->x );
|
||||
intersect->y = gc->state.clipwindowf_ymin;
|
||||
|
||||
calcParams(a, b, intersect, d);
|
||||
|
||||
} /* intersectTop */
|
||||
|
||||
static void
|
||||
intersectBottom( const GrVertex *a, const GrVertex *b, GrVertex *intersect )
|
||||
{
|
||||
GR_DCL_GC;
|
||||
float
|
||||
d = ( gc->state.clipwindowf_ymax - a->y ) / ( b->y - a->y );
|
||||
|
||||
intersect->x = a->x + d * ( b->x - a->x );
|
||||
intersect->y = gc->state.clipwindowf_ymax;
|
||||
|
||||
calcParams(a, b, intersect, d);
|
||||
|
||||
} /* intersectBottom */
|
||||
|
||||
static void
|
||||
intersectRight( const GrVertex *a, const GrVertex *b, GrVertex *intersect )
|
||||
{
|
||||
GR_DCL_GC;
|
||||
float
|
||||
d = ( gc->state.clipwindowf_xmax - a->x ) / ( b->x - a->x );
|
||||
|
||||
intersect->x = gc->state.clipwindowf_xmax;
|
||||
intersect->y = a->y + d * ( b->y - a->y );
|
||||
|
||||
calcParams(a, b, intersect, d);
|
||||
|
||||
} /* intersectRight */
|
||||
|
||||
static void
|
||||
intersectLeft( const GrVertex *a, const GrVertex *b, GrVertex *intersect )
|
||||
{
|
||||
GR_DCL_GC;
|
||||
float
|
||||
d = ( gc->state.clipwindowf_xmin - a->x ) / ( b->x - a->x );
|
||||
|
||||
intersect->x = gc->state.clipwindowf_xmin;
|
||||
intersect->y = a->y + d * ( b->y - a->y );
|
||||
|
||||
calcParams(a, b, intersect, d);
|
||||
|
||||
} /* intersectLeft */
|
||||
|
||||
static FxBool
|
||||
aboveYMin(const GrVertex *p)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
return (( p->y > gc->state.clipwindowf_ymin ) ? FXTRUE : FXFALSE);
|
||||
} /* aboveYMin */
|
||||
|
||||
|
||||
static FxBool
|
||||
belowYMax(const GrVertex *p)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
return (( p->y < gc->state.clipwindowf_ymax ) ? FXTRUE : FXFALSE);
|
||||
} /* belowYMax */
|
||||
|
||||
static FxBool
|
||||
aboveXMin(const GrVertex *p)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
return (( p->x > gc->state.clipwindowf_xmin ) ? FXTRUE : FXFALSE );
|
||||
} /* aboveXMin */
|
||||
|
||||
static FxBool
|
||||
belowXMax(const GrVertex *p)
|
||||
{
|
||||
GR_DCL_GC;
|
||||
return (( p->x < gc->state.clipwindowf_xmax ) ? FXTRUE : FXFALSE );
|
||||
} /* belowXMax */
|
||||
|
||||
/*
|
||||
** shClipPolygon
|
||||
*/
|
||||
static void
|
||||
shClipPolygon(
|
||||
const GrVertex invertexarray[],
|
||||
GrVertex outvertexarray[],
|
||||
int inlength, int *outlength,
|
||||
FxBool (*inside)(const GrVertex *p),
|
||||
void (*intersect)(
|
||||
const GrVertex *a,
|
||||
const GrVertex *b,
|
||||
GrVertex *intersect )
|
||||
)
|
||||
{
|
||||
GrVertex
|
||||
s, p /*, intersection */;
|
||||
int
|
||||
j;
|
||||
|
||||
*outlength = 0;
|
||||
|
||||
s = invertexarray[inlength-1];
|
||||
for ( j = 0; j < inlength; j++ ) {
|
||||
p = invertexarray[j];
|
||||
if ( inside( &p ) ) {
|
||||
if ( inside( &s ) ) {
|
||||
outvertexarray[*outlength] = p;
|
||||
(*outlength)++;
|
||||
}else {
|
||||
#if 0
|
||||
intersect( &s, &p, &intersection );
|
||||
outvertexarray[*outlength] = intersection;
|
||||
#else
|
||||
intersect( &s, &p, &outvertexarray[*outlength] );
|
||||
#endif
|
||||
(*outlength)++;
|
||||
outvertexarray[*outlength] = p;
|
||||
(*outlength)++;
|
||||
}
|
||||
} else {
|
||||
if ( inside( &s ) ) {
|
||||
#if 0
|
||||
intersect( &s, &p, &intersection );
|
||||
outvertexarray[*outlength] = intersection;
|
||||
#else
|
||||
intersect( &s, &p, &outvertexarray[*outlength] );
|
||||
#endif
|
||||
(*outlength)++;
|
||||
}
|
||||
}
|
||||
s = p;
|
||||
}
|
||||
} /* shClipPolygon */
|
||||
|
||||
#ifndef GLIDE3_ALPHA
|
||||
/*---------------------------------------------------------------------------
|
||||
** guDrawTriangleWithClip
|
||||
**
|
||||
** NOTE: This routine snaps vertices by adding a large number then
|
||||
** subtracting that same number again. In order for this to work
|
||||
** you MUST set up the FPU to work in single precision mode. Code
|
||||
** to perform this is listed in the Appendix to the Glide Programmer's
|
||||
** Guide.
|
||||
*/
|
||||
static const float vertex_snap_constant = ( float ) ( 1L << 19 );
|
||||
|
||||
GR_DIENTRY(guDrawTriangleWithClip, void,
|
||||
(const GrVertex *a, const GrVertex *b, const GrVertex *c ))
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GrVertex
|
||||
output_array[8],
|
||||
output_array2[8],
|
||||
input_array[3];
|
||||
int
|
||||
i,
|
||||
outlength;
|
||||
|
||||
GDBG_INFO_MORE(99,"guDrawTriangleWithClip(0x%x,0x%x,0x%x)\n",a,b,c);
|
||||
|
||||
/*
|
||||
** perform trivial accept
|
||||
*/
|
||||
if (
|
||||
( a->x >= gc->state.clipwindowf_xmin) &&
|
||||
( a->x < gc->state.clipwindowf_xmax ) &&
|
||||
( a->y >= gc->state.clipwindowf_ymin ) &&
|
||||
( a->y < gc->state.clipwindowf_ymax ) &&
|
||||
( b->x >= gc->state.clipwindowf_xmin ) &&
|
||||
( b->x < gc->state.clipwindowf_xmax ) &&
|
||||
( b->y >= gc->state.clipwindowf_ymin ) &&
|
||||
( b->y < gc->state.clipwindowf_ymax ) &&
|
||||
( c->x >= gc->state.clipwindowf_xmin ) &&
|
||||
( c->x < gc->state.clipwindowf_xmax ) &&
|
||||
( c->y >= gc->state.clipwindowf_ymin ) &&
|
||||
( c->y < gc->state.clipwindowf_ymax )
|
||||
)
|
||||
{
|
||||
#ifdef GLIDE3
|
||||
grDrawTriangle( (void *)a, (void *)b, (void *)c );
|
||||
#else
|
||||
grDrawTriangle( a, b, c );
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
** go ahead and clip and render
|
||||
*/
|
||||
input_array[0] = *a;
|
||||
input_array[1] = *b;
|
||||
input_array[2] = *c;
|
||||
|
||||
shClipPolygon( input_array, output_array, 3, &outlength, belowXMax, intersectRight );
|
||||
shClipPolygon( output_array, output_array2, outlength, &outlength, belowYMax, intersectBottom );
|
||||
shClipPolygon( output_array2, output_array, outlength, &outlength, aboveXMin, intersectLeft );
|
||||
shClipPolygon( output_array, output_array2, outlength, &outlength, aboveYMin, intersectTop );
|
||||
|
||||
/*
|
||||
** snap vertices then decompose the n-gon into triangles
|
||||
*/
|
||||
#if defined ( __WATCOMC__ ) || defined ( __MSC__ ) || defined(__DJGPP__) || \
|
||||
defined(__GNUC__) || defined(__MWERKS__)
|
||||
for ( i = 0; i < outlength; i++ ) {
|
||||
output_array2[i].x += vertex_snap_constant;
|
||||
output_array2[i].x -= vertex_snap_constant;
|
||||
output_array2[i].y += vertex_snap_constant;
|
||||
output_array2[i].y -= vertex_snap_constant;
|
||||
}
|
||||
#else
|
||||
# error VERTEX SNAPPING MUST BE IMPLEMENTED FOR THIS COMPILER
|
||||
#endif
|
||||
grDrawPolygonVertexList( outlength, output_array2 );
|
||||
} /* guDrawTriangleWithClip */
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guAADrawTriangleWithClip
|
||||
*/
|
||||
GR_DIENTRY(guAADrawTriangleWithClip, void,
|
||||
(const GrVertex *a, const GrVertex *b, const GrVertex *c ))
|
||||
{
|
||||
GR_DCL_GC;
|
||||
GrVertex
|
||||
output_array[8],
|
||||
output_array2[8],
|
||||
input_array[3];
|
||||
int
|
||||
i,
|
||||
ilist[10],
|
||||
outlength;
|
||||
|
||||
GDBG_INFO_MORE(99,"guAADrawTriangleWithClip(0x%x,0x%x,0x%x)\n",a,b,c);
|
||||
|
||||
/*
|
||||
** perform trivial accept
|
||||
*/
|
||||
if (
|
||||
( a->x >= gc->state.clipwindowf_xmin) &&
|
||||
( a->x < gc->state.clipwindowf_xmax ) &&
|
||||
( a->y >= gc->state.clipwindowf_ymin ) &&
|
||||
( a->y < gc->state.clipwindowf_ymax ) &&
|
||||
( b->x >= gc->state.clipwindowf_xmin ) &&
|
||||
( b->x < gc->state.clipwindowf_xmax ) &&
|
||||
( b->y >= gc->state.clipwindowf_ymin ) &&
|
||||
( b->y < gc->state.clipwindowf_ymax ) &&
|
||||
( c->x >= gc->state.clipwindowf_xmin ) &&
|
||||
( c->x < gc->state.clipwindowf_xmax ) &&
|
||||
( c->y >= gc->state.clipwindowf_ymin ) &&
|
||||
( c->y < gc->state.clipwindowf_ymax )
|
||||
)
|
||||
{
|
||||
grAADrawTriangle( a, b, c, FXTRUE, FXTRUE, FXTRUE );
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
** go ahead and clip and render
|
||||
*/
|
||||
input_array[0] = *a;
|
||||
input_array[1] = *b;
|
||||
input_array[2] = *c;
|
||||
|
||||
shClipPolygon( input_array, output_array, 3, &outlength, belowXMax, intersectRight );
|
||||
shClipPolygon( output_array, output_array2, outlength, &outlength, belowYMax, intersectBottom );
|
||||
shClipPolygon( output_array2, output_array, outlength, &outlength, aboveXMin, intersectLeft );
|
||||
shClipPolygon( output_array, output_array2, outlength, &outlength, aboveYMin, intersectTop );
|
||||
|
||||
/*
|
||||
** snap vertices then decompose the n-gon into triangles
|
||||
*/
|
||||
#if defined(__WATCOMC__) || defined(__MSC__) || defined (__DJGPP__) || \
|
||||
defined(__GNUC__) || defined(__MWERKS__)
|
||||
for ( i = 0; i < outlength; i++ ) {
|
||||
output_array2[i].x += vertex_snap_constant;
|
||||
output_array2[i].x -= vertex_snap_constant;
|
||||
output_array2[i].y += vertex_snap_constant;
|
||||
output_array2[i].y -= vertex_snap_constant;
|
||||
ilist[i] = i;
|
||||
}
|
||||
|
||||
ilist[outlength] = 0;
|
||||
#else
|
||||
# error VERTEX SNAPPING MUST BE IMPLEMENTED FOR THIS COMPILER
|
||||
#endif
|
||||
grAADrawPolygon( outlength, ilist, output_array2 );
|
||||
} /* guAADrawTriangleWithClip */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guDrawPolygonVertexListWithClip
|
||||
*/
|
||||
GR_DIENTRY(guDrawPolygonVertexListWithClip, void,
|
||||
( int nverts, const GrVertex vlist[] ))
|
||||
{
|
||||
GrVertex
|
||||
output_array[GU_PRIM_MAX_VERTICES+8],
|
||||
output_array2[GU_PRIM_MAX_VERTICES+8];
|
||||
int
|
||||
i,
|
||||
outlength;
|
||||
|
||||
GDBG_INFO_MORE(99,"guDrawPolygonVertexListWithClip(%d,0x%x)\n",nverts,vlist);
|
||||
/*
|
||||
** go ahead and clip and render
|
||||
*/
|
||||
shClipPolygon( vlist, output_array, nverts, &outlength, belowXMax, intersectRight );
|
||||
shClipPolygon( output_array, output_array2, outlength, &outlength, belowYMax, intersectBottom );
|
||||
shClipPolygon( output_array2, output_array, outlength, &outlength, aboveXMin, intersectLeft );
|
||||
shClipPolygon( output_array, output_array2, outlength, &outlength, aboveYMin, intersectTop );
|
||||
|
||||
/*
|
||||
** snap vertices then decompose the n-gon into triangles
|
||||
*/
|
||||
#if defined(__WATCOMC__) || defined(__MSC__) || defined(__DJGPP__) || \
|
||||
defined(__GNUC__) || defined(__MWERKS__)
|
||||
for ( i = 0; i < outlength; i++ ) {
|
||||
output_array2[i].x += vertex_snap_constant;
|
||||
output_array2[i].x -= vertex_snap_constant;
|
||||
output_array2[i].y += vertex_snap_constant;
|
||||
output_array2[i].y -= vertex_snap_constant;
|
||||
}
|
||||
#else
|
||||
# error VERTEX SNAPPING MUST BE IMPLEMENTED FOR THIS COMPILER
|
||||
#endif
|
||||
grDrawPolygonVertexList( outlength, output_array2 );
|
||||
} /* guDrawPolygonVertexListWithClip */
|
||||
|
||||
#endif /* !GLIDE3_ALPHA */
|
||||
@@ -1,105 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
*
|
||||
* 10 12/09/97 12:20p Peter
|
||||
* mac glide port
|
||||
*
|
||||
* 9 11/12/97 5:12p Pgj
|
||||
* stubs for evil guFb{Read|Write}Region() calls
|
||||
*
|
||||
* 8 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 7 5/21/97 6:05a Peter
|
||||
*
|
||||
* 6 3/09/97 10:31a Dow
|
||||
* Added GR_DIENTRY for di glide functions
|
||||
*
|
||||
* 5 12/23/96 1:37p Dow
|
||||
* chagnes for multiplatform glide
|
||||
**
|
||||
*/
|
||||
|
||||
/* Implements multipass drawing */
|
||||
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
#include "gump.h"
|
||||
|
||||
/* CHD BUG this belongs in fxglide.h */
|
||||
void FX_CSTYLE
|
||||
_gumpTexCombineFunction( int virtual_tmu );
|
||||
|
||||
GrMPState _gumpState;
|
||||
|
||||
GR_DIENTRY(guMPInit, void, ( void ))
|
||||
{
|
||||
int i;
|
||||
|
||||
GDBG_INFO(98,"guMPInit()\n");
|
||||
for (i = 0; i < GLIDE_NUM_VIRTUAL_TMU; i += 1)
|
||||
{
|
||||
_gumpState.mmid[i] = (GrMipMapId_t) GR_NULL_MIPMAP_HANDLE;
|
||||
}
|
||||
_gumpState.tc_fnc = GR_MPTEXTURECOMBINE_ADD;
|
||||
}
|
||||
|
||||
GR_DIENTRY(guMPTexCombineFunction, void,
|
||||
( GrMPTextureCombineFnc_t tc_fnc ))
|
||||
{
|
||||
GDBG_INFO(98,"guMPTexCombineFunction(%d)\n",tc_fnc);
|
||||
_gumpState.tc_fnc = tc_fnc;
|
||||
}
|
||||
|
||||
GR_DIENTRY(guMPTexSource, void,
|
||||
( GrChipID_t virtual_tmu, GrMipMapId_t mmid ))
|
||||
{
|
||||
GR_DCL_GC;
|
||||
FXUNUSED( gc );
|
||||
GDBG_INFO(98,"guMPTexSource(%d,%d)\n",virtual_tmu,mmid);
|
||||
GR_CHECK_TMU("guMPTexSource",virtual_tmu);
|
||||
_gumpState.mmid[virtual_tmu] = mmid;
|
||||
}
|
||||
|
||||
extern FX_ENTRY void FX_CALL
|
||||
guFbReadRegion( const int srcX, const int srcY, const int w, const int h, const void *dst, const int strideInBytes );
|
||||
|
||||
extern FX_ENTRY void FX_CALL
|
||||
guFbWriteRegion( const int dstX, const int dstY, const int w, const int h, const void *src, const int strideInBytes);
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guFbReadRegion XXX obsolete
|
||||
*/
|
||||
GR_ENTRY(guFbReadRegion, void, ( const int srcX, const int srcY, const int w, const int h, const void *dst, const int strideInBytes ) )
|
||||
{
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guFbWriteRegion XXX obsolete
|
||||
*/
|
||||
GR_ENTRY(guFbWriteRegion, void, ( const int dstX, const int dstY, const int w, const int h, const void *src, const int strideInBytes))
|
||||
{
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
**
|
||||
*/
|
||||
|
||||
/* Multipass drawing */
|
||||
|
||||
#ifndef __GUMP_H__
|
||||
#define __GUMP_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define GLIDE_NUM_VIRTUAL_TMU 2 /* Number of virtual TMUs */
|
||||
|
||||
typedef FxU32 GrMPTextureCombineFnc_t;
|
||||
#define GR_MPTEXTURECOMBINE_ADD 0x0 /* */
|
||||
#define GR_MPTEXTURECOMBINE_MULTIPLY 0x1 /* */
|
||||
#define GR_MPTEXTURECOMBINE_DETAIL0 0x2 /* */
|
||||
#define GR_MPTEXTURECOMBINE_DETAIL1 0x3 /* */
|
||||
#define GR_MPTEXTURECOMBINE_TRILINEAR0 0x4 /* */
|
||||
#define GR_MPTEXTURECOMBINE_TRILINEAR1 0x5 /* */
|
||||
#define GR_MPTEXTURECOMBINE_SUBTRACT 0x6 /* */
|
||||
|
||||
typedef struct {
|
||||
GrMipMapId_t mmid[GLIDE_NUM_VIRTUAL_TMU];
|
||||
GrMPTextureCombineFnc_t tc_fnc;
|
||||
} GrMPState;
|
||||
|
||||
FX_ENTRY void FX_CALL guMPInit( void );
|
||||
FX_ENTRY void FX_CALL guMPTexCombineFunction( GrMPTextureCombineFnc_t tc );
|
||||
FX_ENTRY void FX_CALL guMPTexSource( GrChipID_t virtual_tmu, GrMipMapId_t mmid );
|
||||
FX_ENTRY void FX_CALL guMPDrawTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __GUMP_H__ */
|
||||
@@ -1,211 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
**
|
||||
** 22 2/20/98 5:31p Peter
|
||||
** crybaby glide
|
||||
**
|
||||
** 21 2/20/98 11:00a Peter
|
||||
** removed glide3 from glid2 tree
|
||||
*
|
||||
* 20 1/07/98 10:22a Peter
|
||||
* lod dithering env var
|
||||
*
|
||||
* 19 1/06/98 6:47p Atai
|
||||
* undo grSplash and remove gu routines
|
||||
*
|
||||
* 18 12/17/97 4:45p Peter
|
||||
* groundwork for CrybabyGlide
|
||||
*
|
||||
* 17 12/02/97 9:49a Dow
|
||||
* rid the world of the "Setting the same state twice" message
|
||||
*
|
||||
* 16 11/20/97 6:59p Dow
|
||||
* Fixed baseAddress for Banshee (the Devil's Own Test still uses guTex
|
||||
* Stuff).
|
||||
*
|
||||
* 15 11/18/97 4:36p Peter
|
||||
* chipfield stuff cleanup and w/ direct writes
|
||||
*
|
||||
* 14 11/17/97 4:55p Peter
|
||||
* watcom warnings/chipfield stuff
|
||||
*
|
||||
* 13 11/03/97 3:43p Peter
|
||||
* h3/cvg cataclysm
|
||||
*
|
||||
* 12 9/15/97 7:31p Peter
|
||||
* more cmdfifo cleanup, fixed normal buffer clear, banner in the right
|
||||
* place, lfb's are on, Hmmmm.. probably more
|
||||
*
|
||||
* 11 9/04/97 3:32p Peter
|
||||
* starting grouping serial reg writes
|
||||
*
|
||||
* 10 6/06/97 10:47a Peter
|
||||
* texture downloading, fixed 640x480 dimension, changed cvg dep to be the
|
||||
* same as sst1
|
||||
*
|
||||
* 9 5/27/97 1:16p Peter
|
||||
* Basic cvg, w/o cmd fifo stuff.
|
||||
*
|
||||
* 8 5/21/97 6:05a Peter
|
||||
*
|
||||
* 7 3/04/97 9:08p Dow
|
||||
*
|
||||
* 6 12/23/96 1:37p Dow
|
||||
* chagnes for multiplatform glide
|
||||
*
|
||||
* 5 11/18/96 9:14a Sellers
|
||||
* added checking for crossing of 2 MByte texture boundry
|
||||
**
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
/* externals from gtex.c and gtexdl.c */
|
||||
extern FxU32 _grMipMapHostSize[][16];
|
||||
extern FxU32 _gr_aspect_index_table[];
|
||||
extern FxU32 _gr_aspect_xlate_table[];
|
||||
extern FxU32 _gr_evenOdd_xlate_table[];
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
** guTexSource
|
||||
*/
|
||||
|
||||
GR_ENTRY(guTexSource, void, (GrMipMapId_t mmid))
|
||||
{
|
||||
#define FN_NAME "guTexSource"
|
||||
FxU32 texMode, tLod;
|
||||
FxU32 oldtexMode;
|
||||
FxU32 baseAddress;
|
||||
int tmu;
|
||||
const GrMipMapInfo *mminfo;
|
||||
|
||||
GR_BEGIN_NOFIFOCHECK("guTexSource",99);
|
||||
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",mmid);
|
||||
|
||||
/* Make sure that mmid is not NULL */
|
||||
if (mmid == GR_NULL_MIPMAP_HANDLE) return;
|
||||
|
||||
/* get a pointer to the relevant GrMipMapInfo struct */
|
||||
mminfo = &gc->mm_table.data[mmid];
|
||||
tmu = mminfo->tmu;
|
||||
|
||||
GR_CHECK_TMU(FN_NAME, tmu);
|
||||
|
||||
gc->state.current_mm[tmu] = mmid;
|
||||
|
||||
/* Set up new glide state for this mmid */
|
||||
gc->state.tmu_config[tmu].mmMode = mminfo->mipmap_mode;
|
||||
gc->state.tmu_config[tmu].smallLod = mminfo->lod_min;
|
||||
gc->state.tmu_config[tmu].largeLod = mminfo->lod_max;
|
||||
gc->state.tmu_config[tmu].evenOdd = mminfo->odd_even_mask;
|
||||
gc->state.tmu_config[tmu].nccTable = 0;
|
||||
|
||||
/* Set up base address, texMode, and tLod registers */
|
||||
#if (GLIDE_PLATFORM & GLIDE_HW_H3)
|
||||
baseAddress = mminfo->tmu_base_address + 0x200000;
|
||||
#else
|
||||
baseAddress = mminfo->tmu_base_address >> 3;
|
||||
#endif
|
||||
texMode = mminfo->tTextureMode;
|
||||
tLod = mminfo->tLOD;
|
||||
|
||||
oldtexMode = gc->state.tmu_config[tmu].textureMode;
|
||||
oldtexMode &= ~(SST_TFORMAT | SST_TCLAMPT |
|
||||
SST_TCLAMPS | SST_TNCCSELECT |
|
||||
SST_TLODDITHER | SST_TCLAMPW |
|
||||
SST_TMAGFILTER | SST_TMINFILTER |
|
||||
SST_TRILINEAR);
|
||||
texMode |= oldtexMode;
|
||||
if (!gc->state.allowLODdither) texMode &= ~SST_TLODDITHER;
|
||||
|
||||
/* Download the NCC table, if needed. */
|
||||
if ((mminfo->format == GR_TEXFMT_YIQ_422) ||
|
||||
(mminfo->format == GR_TEXFMT_AYIQ_8422)) {
|
||||
int table; /* ncc table we'll use */
|
||||
|
||||
/* See if it's already down there */
|
||||
if (gc->tmu_state[tmu].ncc_mmids[0] == mmid) {
|
||||
/* Table 0 has what we need, so make it current */
|
||||
table = 0;
|
||||
} else if (gc->tmu_state[tmu].ncc_mmids[1] == mmid) {
|
||||
/* Table 1 has what we need, so make it current */
|
||||
table = 1;
|
||||
} else {
|
||||
/*
|
||||
** it's not down there, so we need to pick the table and
|
||||
** download it
|
||||
*/
|
||||
/* Which table should we use? */
|
||||
table = gc->tmu_state[tmu].next_ncc_table;
|
||||
|
||||
/* Download NCC table */
|
||||
_grTexDownloadNccTable(tmu, table, &mminfo->ncc_table, 0, 11);
|
||||
|
||||
/* Set the mmid so we known it's down there */
|
||||
gc->tmu_state[tmu].ncc_mmids[table] = mmid;
|
||||
|
||||
/* Set the state to know which table was the LRA */
|
||||
gc->tmu_state[tmu].next_ncc_table = (table == 0 ? 1 : 0);
|
||||
} /* we had to download it */
|
||||
|
||||
/*
|
||||
** Setting the TNCCSelect bit to 0 selects table 0, setting it to 1
|
||||
** selects table 1
|
||||
*/
|
||||
if (table == 0)
|
||||
texMode &= ~(SST_TNCCSELECT);
|
||||
else
|
||||
texMode |= SST_TNCCSELECT;
|
||||
} /* if it's an NCC texture */
|
||||
|
||||
/* Force LOD dithering if the user asked for it.
|
||||
*
|
||||
* NB: There is a performance hit for this, but it does
|
||||
* look better.
|
||||
*/
|
||||
texMode |= _GlideRoot.environment.texLodDither;
|
||||
|
||||
/* Write relevant registers out to hardware */
|
||||
hw = SST_TMU(hw, tmu);
|
||||
REG_GROUP_BEGIN((0x02UL << tmu), textureMode, 3, 0x0B);
|
||||
{
|
||||
REG_GROUP_SET(hw, textureMode, texMode);
|
||||
REG_GROUP_SET(hw, tLOD, tLod);
|
||||
REG_GROUP_SET(hw, texBaseAddr, baseAddress);
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
/* update shadows */
|
||||
gc->state.tmu_config[tmu].texBaseAddr = baseAddress;
|
||||
gc->state.tmu_config[tmu].textureMode = texMode;
|
||||
gc->state.tmu_config[tmu].tLOD = tLod;
|
||||
|
||||
GR_END();
|
||||
#undef FN_NAME
|
||||
} /* guTexSource */
|
||||
|
||||
|
||||
@@ -1,590 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1.2.1 2005/01/22 14:52:02 koolsmoky
|
||||
** enabled packed argb for cmd packet type 3
|
||||
**
|
||||
** Revision 1.1.1.1 1999/12/07 21:49:11 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 61 3/17/98 3:00p Peter
|
||||
** removed vertex sorting
|
||||
*
|
||||
* 60 12/01/97 6:13p Peter
|
||||
* non-packet3 tsu triangles ooz vs z
|
||||
*
|
||||
* 59 11/21/97 3:20p Peter
|
||||
* direct writes tsu registers
|
||||
*
|
||||
* 58 11/18/97 4:36p Peter
|
||||
* chipfield stuff cleanup and w/ direct writes
|
||||
*
|
||||
* 57 11/17/97 4:55p Peter
|
||||
* watcom warnings/chipfield stuff
|
||||
*
|
||||
* 56 11/12/97 9:54p Peter
|
||||
* fixed all the muckage from new config
|
||||
*
|
||||
* 55 11/03/97 4:38p Peter
|
||||
* yapc fix
|
||||
*
|
||||
* 54 11/01/97 10:01a Peter
|
||||
* tri dispatch stuff
|
||||
*
|
||||
* 53 10/29/97 2:45p Peter
|
||||
* C version of Taco's packing code
|
||||
*
|
||||
* 52 10/27/97 5:59p Peter
|
||||
* removed some debugging code
|
||||
*
|
||||
* 51 10/21/97 3:22p Peter
|
||||
* hand pack rgb
|
||||
*
|
||||
* 50 10/19/97 12:51p Peter
|
||||
* no tsu happiness
|
||||
*
|
||||
* 49 10/19/97 10:59a Peter
|
||||
* fixed p1 tsu writes
|
||||
*
|
||||
* 48 10/17/97 3:15p Peter
|
||||
* removed unused addr field from datalist
|
||||
*
|
||||
* 47 10/17/97 10:15a Peter
|
||||
* packed rgb state cleanup
|
||||
*
|
||||
* 46 10/16/97 5:33p Peter
|
||||
* argb != rgba
|
||||
*
|
||||
* 45 10/16/97 3:40p Peter
|
||||
* packed rgb
|
||||
*
|
||||
* 44 10/16/97 10:31a Peter
|
||||
* fixed hoopti tsu-subtractor unsorted
|
||||
*
|
||||
* 43 10/15/97 5:53p Peter
|
||||
* hoopti tri compare code
|
||||
*
|
||||
* 42 10/10/97 4:33p Peter
|
||||
* non-packet3 tsu triangles
|
||||
*
|
||||
* 41 10/08/97 5:19p Peter
|
||||
* optinally clamp only texture params
|
||||
*
|
||||
* 40 10/08/97 11:32a Peter
|
||||
* pre-computed packet headers for packet 3
|
||||
*
|
||||
* 39 9/20/97 4:42p Peter
|
||||
* tri_setf fixup/big fifo
|
||||
*
|
||||
* 38 9/16/97 2:50p Peter
|
||||
* fixed watcom unhappiness w/ static initializers
|
||||
*
|
||||
* 37 9/15/97 7:31p Peter
|
||||
* more cmdfifo cleanup, fixed normal buffer clear, banner in the right
|
||||
* place, lfb's are on, Hmmmm.. probably more
|
||||
*
|
||||
* 36 9/10/97 10:13p Peter
|
||||
* fifo logic from GaryT, non-normalized fp first cut
|
||||
*
|
||||
* 35 9/03/97 2:11p Peter
|
||||
* start gdbg_info cleanup, fixed zero area no-tsu triangle muckage
|
||||
*
|
||||
* 34 9/01/97 3:19p Peter
|
||||
* no-tsu w from vertex not tmuvtx
|
||||
*
|
||||
* 33 8/31/97 4:06p Peter
|
||||
* no tsu fix
|
||||
*
|
||||
* 32 8/31/97 12:04p Peter
|
||||
* hacked no-tsu code
|
||||
*
|
||||
* 31 7/25/97 11:40a Peter
|
||||
* removed dHalf, change field name to match real use for cvg
|
||||
*
|
||||
* 30 6/30/97 3:22p Peter
|
||||
* cmd fifo sanity
|
||||
*
|
||||
* 29 6/24/97 4:02p Peter
|
||||
* proper cmd fifo placement
|
||||
*
|
||||
* 28 6/23/97 4:43p Peter
|
||||
* cleaned up #defines etc for a nicer tree
|
||||
**
|
||||
*/
|
||||
|
||||
#include <3dfx.h>
|
||||
#include <glidesys.h>
|
||||
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
#ifdef GDBG_INFO_ON
|
||||
/* Some debugging information */
|
||||
static char *indexNames[] = {
|
||||
"GR_VERTEX_X_OFFSET", /* 0 */
|
||||
"GR_VERTEX_Y_OFFSET", /* 1 */
|
||||
"GR_VERTEX_Z_OFFSET", /* 2 */
|
||||
"GR_VERTEX_R_OFFSET", /* 3 */
|
||||
"GR_VERTEX_G_OFFSET", /* 4 */
|
||||
"GR_VERTEX_B_OFFSET", /* 5 */
|
||||
"GR_VERTEX_OOZ_OFFSET", /* 6 */
|
||||
"GR_VERTEX_A_OFFSET", /* 7 */
|
||||
"GR_VERTEX_OOW_OFFSET", /* 8 */
|
||||
"GR_VERTEX_SOW_TMU0_OFFSET", /* 9 */
|
||||
"GR_VERTEX_TOW_TMU0_OFFSET", /* 10 */
|
||||
"GR_VERTEX_OOW_TMU0_OFFSET", /* 11 */
|
||||
"GR_VERTEX_SOW_TMU1_OFFSET", /* 12 */
|
||||
"GR_VERTEX_TOW_TMU1_OFFSET", /* 13 */
|
||||
"GR_VERTEX_OOW_TMU1_OFFSET" /* 14 */
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
** _trisetup_nogradients
|
||||
**
|
||||
** This routine does all the setup needed for drawing a triangle. It
|
||||
** is intended to be an exact specification for the mechanisim used
|
||||
** to pass vertices to the assembly language triangle setup code, and
|
||||
** as such has no optimizations at all. Whenever a 'shortcut'
|
||||
** routine to draw triangles (such as for antialiasing, fast lines,
|
||||
** fast spans, polygons, etc) is needed, this code should be used as
|
||||
** the starting point.
|
||||
**
|
||||
*/
|
||||
GR_DDFUNC(_trisetup_nogradients,
|
||||
FxI32,
|
||||
(const GrVertex *va, const GrVertex *vb, const GrVertex *vc))
|
||||
{
|
||||
#define FN_NAME "_trisetup_nogradients"
|
||||
GR_DCL_GC;
|
||||
|
||||
_GlideRoot.stats.trisProcessed++;
|
||||
|
||||
#if GLIDE_TRI_CULLING
|
||||
{
|
||||
const float *fa = &va->x;
|
||||
const float *fb = &vb->x;
|
||||
const float *fc = &vc->x;
|
||||
float dxAB, dxBC, dyAB, dyBC;
|
||||
|
||||
/* Compute Area */
|
||||
dxAB = fa[GR_VERTEX_X_OFFSET] - fb[GR_VERTEX_X_OFFSET];
|
||||
dxBC = fb[GR_VERTEX_X_OFFSET] - fc[GR_VERTEX_X_OFFSET];
|
||||
|
||||
dyAB = fa[GR_VERTEX_Y_OFFSET] - fb[GR_VERTEX_Y_OFFSET];
|
||||
dyBC = fb[GR_VERTEX_Y_OFFSET] - fc[GR_VERTEX_Y_OFFSET];
|
||||
|
||||
/* Stash the area in the float pool for easy access */
|
||||
_GlideRoot.pool.ftemp1 = dxAB * dyBC - dxBC * dyAB;
|
||||
|
||||
#define FloatVal(__f) (((__f) < 786432.875) ? (__f) : ((__f) - 786432.875))
|
||||
{
|
||||
const FxI32 j = *(FxI32*)&_GlideRoot.pool.ftemp1;
|
||||
const FxU32 culltest = (gc->state.cull_mode << 31UL);
|
||||
|
||||
/* Zero-area triangles are BAD!! */
|
||||
if ((j & 0x7FFFFFFF) == 0) {
|
||||
GDBG_INFO(291, FN_NAME": Culling (%g %g) (%g %g) (%g %g) : (%g : 0x%X : 0x%X)\n",
|
||||
FloatVal(fa[0]), FloatVal(fa[1]),
|
||||
FloatVal(fb[0]), FloatVal(fb[1]),
|
||||
FloatVal(fc[0]), FloatVal(fc[1]),
|
||||
_GlideRoot.pool.ftemp1, gc->state.cull_mode, culltest);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Backface culling, use sign bit as test */
|
||||
if ((gc->state.cull_mode != GR_CULL_DISABLE) && (((FxI32)(j ^ culltest)) >= 0)) {
|
||||
GDBG_INFO(291, FN_NAME": Culling (%g %g) (%g %g) (%g %g) : (%g : 0x%X : 0x%X)\n",
|
||||
FloatVal(fa[0]), FloatVal(fa[1]),
|
||||
FloatVal(fb[0]), FloatVal(fb[1]),
|
||||
FloatVal(fc[0]), FloatVal(fc[1]),
|
||||
_GlideRoot.pool.ftemp1, gc->state.cull_mode, culltest);
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* GLIDE_TRI_CULLING */
|
||||
|
||||
/* Stuff for using hw tsu */
|
||||
#if GLIDE_HW_TRI_SETUP
|
||||
{
|
||||
const float* vectorArray[3];
|
||||
|
||||
/* Load up the real vertices */
|
||||
vectorArray[0] = &va->x;
|
||||
vectorArray[1] = &vb->x;
|
||||
vectorArray[2] = &vc->x;
|
||||
|
||||
#if GLIDE_PACKET3_TRI_SETUP
|
||||
GR_SET_EXPECTED_SIZE(_GlideRoot.curTriSize, 1);
|
||||
TRI_BEGIN();
|
||||
{
|
||||
int vectorIndex;
|
||||
|
||||
for(vectorIndex = 0; vectorIndex < sizeof(vectorArray) / sizeof(float*); vectorIndex++) {
|
||||
const float* const vector = vectorArray[vectorIndex];
|
||||
|
||||
/* Triangle vertex coordinages (x, y) */
|
||||
TRI_SETF(vector[GR_VERTEX_X_OFFSET]);
|
||||
TRI_SETF(vector[GR_VERTEX_Y_OFFSET]);
|
||||
|
||||
/* Other triangle parameters */
|
||||
{
|
||||
const int* dataList = gc->tsuDataList;
|
||||
|
||||
#if GLIDE_PACKED_RGB
|
||||
if ((gc->cmdTransportInfo.paramMask & SSTCP_PKT3_PACKEDCOLOR) != 0)
|
||||
{
|
||||
FxBool doColorP = FXFALSE;
|
||||
FxU32 packedColor = 0x00;
|
||||
|
||||
if (*dataList == (GR_VERTEX_R_OFFSET << 2)) {
|
||||
packedColor = (RGBA_COMP_CLAMP(FARRAY(vector, (GR_VERTEX_B_OFFSET << 2)), B) |
|
||||
RGBA_COMP_CLAMP(FARRAY(vector, (GR_VERTEX_G_OFFSET << 2)), G) |
|
||||
RGBA_COMP_CLAMP(FARRAY(vector, (GR_VERTEX_R_OFFSET << 2)), R));
|
||||
dataList++;
|
||||
doColorP = FXTRUE;
|
||||
}
|
||||
|
||||
if (*dataList == (GR_VERTEX_A_OFFSET << 2)) {
|
||||
packedColor |= RGBA_COMP_CLAMP(FARRAY(vector, (GR_VERTEX_A_OFFSET << 2)), A);
|
||||
dataList++;
|
||||
doColorP = FXTRUE;
|
||||
}
|
||||
|
||||
if (doColorP) TRI_SET(packedColor);
|
||||
}
|
||||
#endif /* GLIDE_PACKED_RGB */
|
||||
|
||||
#if GLIDE_FP_CLAMP_TEX
|
||||
while(*dataList != 0) {
|
||||
TRI_SETF(FARRAY(vector, *dataList));
|
||||
dataList++;
|
||||
}
|
||||
|
||||
dataList++;
|
||||
#endif /* GLIDE_FP_CLAMP_TEX */
|
||||
|
||||
while(*dataList != 0) {
|
||||
TRI_SETF_CLAMP(FARRAY(vector, *dataList));
|
||||
dataList++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
TRI_END;
|
||||
GR_CHECK_SIZE();
|
||||
#else /* !GLIDE_PACKET3_TRI_SETUP */
|
||||
{
|
||||
GR_DCL_HW;
|
||||
int vectorIndex;
|
||||
FxU32 sMode = (gc->cmdTransportInfo.paramMask >> SSTCP_PKT3_PMASK_SHIFT);
|
||||
FxU32 paramMask = (sMode & 0xFF);
|
||||
FxU32 paramCount;
|
||||
|
||||
/* Convert packet 3 paramMask into sMode format */
|
||||
sMode = (paramMask | ((sMode & 0xF000) << 4));
|
||||
|
||||
{
|
||||
const FxBool hasColor = ((sMode & 0x01) != 0);
|
||||
const FxBool hasAlpha = ((sMode & 0x02) != 0);
|
||||
const FxBool hasZ = ((sMode & 0x04) != 0);
|
||||
const FxBool hasWb = ((sMode & 0x08) != 0);
|
||||
const FxBool hasW0 = ((sMode & 0x10) != 0);
|
||||
const FxBool hasST0 = ((sMode & 0x20) != 0);
|
||||
const FxBool hasW1 = ((sMode & 0x40) != 0);
|
||||
const FxBool hasST1 = ((sMode & 0x80) != 0);
|
||||
|
||||
/* We always send vertex XY */
|
||||
paramCount = 2;
|
||||
paramMask = 0x03;
|
||||
|
||||
/* Build parameter data for reg group packet */
|
||||
#if GLIDE_PACKED_RGB
|
||||
if (hasColor || hasAlpha) {
|
||||
paramCount += 1;
|
||||
paramMask |= 0x04;
|
||||
}
|
||||
#else /* !GLIDE_PACKED_RGB */
|
||||
if (hasColor) {
|
||||
paramCount += 3;
|
||||
paramMask |= 0x38;
|
||||
}
|
||||
if (hasAlpha) {
|
||||
paramCount += 1;
|
||||
paramMask |= 0x40;
|
||||
}
|
||||
#endif /* !GLIDE_PACKED_RGB */
|
||||
|
||||
if (hasZ) {
|
||||
paramCount += 1;
|
||||
paramMask |= 0x80;
|
||||
}
|
||||
if (hasWb) {
|
||||
paramCount += 1;
|
||||
paramMask |= 0x100;
|
||||
}
|
||||
if (hasW0) {
|
||||
paramCount += 1;
|
||||
paramMask |= 0x200;
|
||||
}
|
||||
if (hasST0) {
|
||||
paramCount += 2;
|
||||
paramMask |= 0xC00;
|
||||
}
|
||||
if (hasW1) {
|
||||
paramCount += 1;
|
||||
paramMask |= 0x1000;
|
||||
}
|
||||
if (hasST1) {
|
||||
paramCount += 2;
|
||||
paramMask |= 0x6000;
|
||||
}
|
||||
|
||||
/* Set mode once for teh whole triangle */
|
||||
GR_SET_EXPECTED_SIZE(sizeof(FxU32), 1);
|
||||
GR_SET(BROADCAST_ID, hw, sSetupMode, sMode);
|
||||
GR_CHECK_SIZE();
|
||||
|
||||
for(vectorIndex = 0; vectorIndex < sizeof(vectorArray) / sizeof(float*); vectorIndex++) {
|
||||
const GrVertex* curVertex = (const GrVertex*)vectorArray[vectorIndex];
|
||||
|
||||
REG_GROUP_BEGIN(BROADCAST_ID, sVx, paramCount, paramMask);
|
||||
{
|
||||
REG_GROUP_SETF(hw, sVx, curVertex->x);
|
||||
REG_GROUP_SETF(hw, sVy, curVertex->y);
|
||||
|
||||
#if GLIDE_PACKED_RGB
|
||||
if (hasColor || hasAlpha) {
|
||||
FxU32 packedVal = 0x00;
|
||||
|
||||
if (hasColor) packedVal = ((RGBA_COMP_CLAMP(curVertex->b, B) << 0UL) |
|
||||
(RGBA_COMP_CLAMP(curVertex->g, G) << 8UL) |
|
||||
(RGBA_COMP_CLAMP(curVertex->r, R) << 16UL));
|
||||
if (hasAlpha) packedVal |= (RGBA_COMP_CLAMP(curVertex->a, A) << 24UL);
|
||||
|
||||
REG_GROUP_SET(hw, sARGB, packedVal);
|
||||
}
|
||||
#else /* !GLIDE_PACKED_RGB */
|
||||
if (hasColor) {
|
||||
REG_GROUP_SETF(hw, sRed, curVertex->r);
|
||||
REG_GROUP_SETF(hw, sGreen, curVertex->g);
|
||||
REG_GROUP_SETF(hw, sBlue, curVertex->b);
|
||||
}
|
||||
if (hasAlpha) REG_GROUP_SETF(hw, sAlpha, curVertex->a);
|
||||
#endif /* !GLIDE_PACKED_RGB */
|
||||
|
||||
if (hasZ) REG_GROUP_SETF(hw, sVz, curVertex->ooz);
|
||||
if (hasWb) REG_GROUP_SETF(hw, sOowfbi, curVertex->oow);
|
||||
|
||||
/* TMU0 */
|
||||
if (hasW0) REG_GROUP_SETF(hw, sOow0, curVertex->tmuvtx[0].oow);
|
||||
if (hasST0) {
|
||||
REG_GROUP_SETF(hw, sSow0, curVertex->tmuvtx[0].sow);
|
||||
REG_GROUP_SETF(hw, sTow0, curVertex->tmuvtx[0].tow);
|
||||
}
|
||||
|
||||
/* TMU1 */
|
||||
if (hasW1) REG_GROUP_SETF(hw, sOow1, curVertex->tmuvtx[1].oow);
|
||||
if (hasST1) {
|
||||
REG_GROUP_SETF(hw, sSow1, curVertex->tmuvtx[1].sow);
|
||||
REG_GROUP_SETF(hw, sTow1, curVertex->tmuvtx[1].tow);
|
||||
}
|
||||
}
|
||||
REG_GROUP_END();
|
||||
|
||||
GR_SET_EXPECTED_SIZE(sizeof(FxU32), 1);
|
||||
if (vectorIndex == 0) {
|
||||
GR_SET(BROADCAST_ID, hw, sBeginTriCMD, 0);
|
||||
} else {
|
||||
GR_SET(BROADCAST_ID, hw, sDrawTriCMD, 0);
|
||||
}
|
||||
GR_CHECK_SIZE();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* !GLIDE_PACKET3_TRI_SETUP */
|
||||
|
||||
goto __triDrawn;
|
||||
}
|
||||
#endif /* GLIDE_HW_TRI_SETUP */
|
||||
|
||||
#if !GLIDE_HW_TRI_SETUP
|
||||
#if !defined(GLIDE_TRI_CULLING) || !GLIDE_TRI_CULLING
|
||||
#error "GLIDE_TRI_CULLING must be enabled to sort vertices"
|
||||
#endif
|
||||
|
||||
{
|
||||
GR_DCL_HW;
|
||||
|
||||
TRI_NO_TSU_BEGIN(FXTRUE);
|
||||
{
|
||||
const float ooa = _GlideRoot.pool.f1 / _GlideRoot.pool.ftemp1;
|
||||
volatile FxU32* hwAddr = &hw->FvA.x;
|
||||
|
||||
/* Divide the deltas by the area for gradient calculation. */
|
||||
dxBC *= ooa;
|
||||
dyAB *= ooa;
|
||||
dxAB *= ooa;
|
||||
dyBC *= ooa;
|
||||
|
||||
GDBG_INFO(85, FN_NAME": No-TSU Triangle area: (%g %g) : (%g %g %g %g)\n",
|
||||
_GlideRoot.pool.ftemp1, ooa,
|
||||
dxAB, dxBC, dyAB, dyBC);
|
||||
|
||||
/* write out X & Y for vertex A */
|
||||
TRI_NO_TSU_SETF(hwAddr++, fa[GR_VERTEX_X_OFFSET]);
|
||||
TRI_NO_TSU_SETF(hwAddr++, fa[GR_VERTEX_Y_OFFSET]);
|
||||
|
||||
/* write out X & Y for vertex B */
|
||||
TRI_NO_TSU_SETF(hwAddr++, fb[GR_VERTEX_X_OFFSET]);
|
||||
TRI_NO_TSU_SETF(hwAddr++, fb[GR_VERTEX_Y_OFFSET]);
|
||||
|
||||
/* write out X & Y for vertex C */
|
||||
TRI_NO_TSU_SETF(hwAddr++, fc[GR_VERTEX_X_OFFSET]);
|
||||
TRI_NO_TSU_SETF(hwAddr++, fc[GR_VERTEX_Y_OFFSET]);
|
||||
|
||||
/* Send down the starting parameter values, these come from
|
||||
* the sorted vertex A.
|
||||
*/
|
||||
{
|
||||
int i = GR_VERTEX_R_OFFSET;
|
||||
|
||||
while(i < GR_VERTEX_OOW_OFFSET) {
|
||||
TRI_NO_TSU_SETF(hwAddr++, fa[i++]);
|
||||
}
|
||||
|
||||
/* Skip fbi oow */
|
||||
i++;
|
||||
|
||||
/* FixMe? We currently only do one tmu. */
|
||||
while(i < GR_VERTEX_OOW_TMU0_OFFSET) {
|
||||
TRI_NO_TSU_SETF(hwAddr++, fa[i]);
|
||||
i++;
|
||||
}
|
||||
|
||||
TRI_NO_TSU_SETF(hwAddr++, fa[GR_VERTEX_OOW_OFFSET]);
|
||||
}
|
||||
|
||||
/* Send the x gradients */
|
||||
{
|
||||
int i = GR_VERTEX_R_OFFSET;
|
||||
|
||||
while(i < GR_VERTEX_OOW_OFFSET) {
|
||||
const float curGrad = (((fa[i] - fb[i]) * dyBC) -
|
||||
((fb[i] - fc[i]) * dyAB));
|
||||
|
||||
GDBG_INFO(285, FN_NAME": Gradient 0x%X : %g %g %g : %g\n",
|
||||
((FxU32)hwAddr - (FxU32)hw) >> 2,
|
||||
fa[i], fb[i], fc[i], curGrad);
|
||||
|
||||
TRI_NO_TSU_SETF(hwAddr++, curGrad);
|
||||
i++;
|
||||
}
|
||||
|
||||
/* Skip fbi oow */
|
||||
i++;
|
||||
|
||||
/* FixMe? We currently only do one tmu. */
|
||||
while(i < GR_VERTEX_OOW_TMU0_OFFSET) {
|
||||
const float curGrad = (((fa[i] - fb[i]) * dyBC) -
|
||||
((fb[i] - fc[i]) * dyAB));
|
||||
|
||||
GDBG_INFO(285, FN_NAME": Gradient 0x%X : %g %g %g : %g\n",
|
||||
((FxU32)hwAddr - (FxU32)hw) >> 2,
|
||||
fa[i], fb[i], fc[i], curGrad);
|
||||
|
||||
TRI_NO_TSU_SETF(hwAddr++, curGrad);
|
||||
i++;
|
||||
}
|
||||
|
||||
{
|
||||
const float curGrad = (((fa[GR_VERTEX_OOW_OFFSET] - fb[GR_VERTEX_OOW_OFFSET]) * dyBC) -
|
||||
((fb[GR_VERTEX_OOW_OFFSET] - fc[GR_VERTEX_OOW_OFFSET]) * dyAB));
|
||||
|
||||
TRI_NO_TSU_SETF(hwAddr++, curGrad);
|
||||
}
|
||||
}
|
||||
|
||||
/* Send the y gradients */
|
||||
{
|
||||
int i = GR_VERTEX_R_OFFSET;
|
||||
|
||||
while(i < GR_VERTEX_OOW_OFFSET) {
|
||||
const float curGrad = (((fb[i] - fc[i]) * dxAB) -
|
||||
((fa[i] - fb[i]) * dxBC));
|
||||
|
||||
GDBG_INFO(285, FN_NAME": Gradient 0x%X : %g %g %g : %g\n",
|
||||
((FxU32)hwAddr - (FxU32)hw) >> 2,
|
||||
fa[i], fb[i], fc[i], curGrad);
|
||||
|
||||
TRI_NO_TSU_SETF(hwAddr++, curGrad);
|
||||
i++;
|
||||
}
|
||||
|
||||
/* Skip fbi oow */
|
||||
i++;
|
||||
|
||||
/* FixMe? We currently only do one tmu. */
|
||||
while(i < GR_VERTEX_OOW_TMU0_OFFSET) {
|
||||
const float curGrad = (((fb[i] - fc[i]) * dxAB) -
|
||||
((fa[i] - fb[i]) * dxBC));
|
||||
|
||||
GDBG_INFO(285, FN_NAME": Gradient 0x%X : %g %g %g : %g\n",
|
||||
((FxU32)hwAddr - (FxU32)hw) >> 2,
|
||||
fa[i], fb[i], fc[i], curGrad);
|
||||
|
||||
TRI_NO_TSU_SETF(hwAddr++, curGrad);
|
||||
i++;
|
||||
}
|
||||
|
||||
{
|
||||
const float curGrad = (((fb[GR_VERTEX_OOW_OFFSET] - fc[GR_VERTEX_OOW_OFFSET]) * dxAB) -
|
||||
((fa[GR_VERTEX_OOW_OFFSET] - fb[GR_VERTEX_OOW_OFFSET]) * dxBC));
|
||||
|
||||
TRI_NO_TSU_SETF(hwAddr++, curGrad);
|
||||
}
|
||||
}
|
||||
|
||||
/* Draw the triangle by writing the area to the triangleCMD register */
|
||||
TRI_NO_TSU_SETF(hwAddr, _GlideRoot.pool.ftemp1);
|
||||
_GlideRoot.stats.trisDrawn++;
|
||||
}
|
||||
TRI_NO_TSU_END();
|
||||
}
|
||||
|
||||
goto __triDrawn;
|
||||
#endif /* !GLIDE_HW_TRI_SETUP */
|
||||
|
||||
__triDrawn:
|
||||
/* If we made it this far then we drew the triangle */
|
||||
_GlideRoot.stats.trisDrawn++;
|
||||
GR_CHECK_SIZE();
|
||||
|
||||
return 1;
|
||||
|
||||
#undef FN_NAME
|
||||
} /* _trisetup_nogradients */
|
||||
@@ -1,314 +0,0 @@
|
||||
#
|
||||
# THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
# PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
# TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
# INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
# DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
# THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
# FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
#
|
||||
# USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
# RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
# TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
# AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
# SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
# THE UNITED STATES.
|
||||
#
|
||||
# COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
|
||||
TAG_REGEXP = $(BUILD_ROOT)\$(FX_GLIDE_HW)\glide\src\glide.rx
|
||||
|
||||
# Compile for specific hardware
|
||||
!if "$(FX_GLIDE_HW)" == "cvg"
|
||||
FX_GLIDE_REAL_HW= 1
|
||||
|
||||
!if "$(FX_GLIDE_CTRISETUP)" == ""
|
||||
FX_GLIDE_CTRISETUP = 0
|
||||
!endif
|
||||
|
||||
HWSPEC = fifo.c
|
||||
LCDEFS = $(LCDEFS) -DCVG \
|
||||
-DGLIDE_CHIP_BROADCAST=1 -DGLIDE_DEFAULT_GAMMA=1.3f
|
||||
LCDEFS = $(LCDEFS) \
|
||||
-DGLIDE_BLIT_CLEAR=1 \
|
||||
!else if "$(FX_GLIDE_HW)" == "h3"
|
||||
FX_GLIDE_REAL_HW= 1
|
||||
FX_GLIDE_NO_FIFO= 1
|
||||
FX_GLIDE_CTRISETUP = 1
|
||||
HWSPEC = fifo.c
|
||||
LCDEFS = $(LCDEFS) -DH3 \
|
||||
-DGLIDE_HW_TRI_SETUP=1 -DGLIDE_PACKET3_TRI_SETUP=0
|
||||
!else
|
||||
!error "FX_GLIDE_HW == unknown value (h3|cvg)"
|
||||
!endif
|
||||
|
||||
|
||||
!if "$(FX_GLIDE_VTUNE)"!=""
|
||||
OTSOPTS = /Zi
|
||||
LLDOPTS = /DEBUG
|
||||
!endif
|
||||
|
||||
!if "$(DEBUG)" == "1"
|
||||
DBGOPTS = -DGLIDE_DEBUG -DGDBG_INFO_ON
|
||||
GLIDE_SANITY_ALL = 1
|
||||
!endif
|
||||
|
||||
!if "$(FX_COMPILER)" == "MICROSOFT"
|
||||
DBGOPTS = $(DBGOPTS) /WX
|
||||
!endif
|
||||
|
||||
!if "$(FX_GLIDE_HW)" == ""
|
||||
!error "FX_GLIDE_HW not defined"
|
||||
!endif
|
||||
|
||||
# Display Options
|
||||
DSPOPTS =
|
||||
SUBLIBRARIES =
|
||||
!if ("$(HAL_HW)" != "")
|
||||
DSPOPTS = $(DSPOPTS) -DHAL_HW=1
|
||||
SUBLIBRARIES = $(SUBLIBRARIES) $(BUILD_ROOT)\$(FX_GLIDE_HW)\lib\sst1init.lib
|
||||
!endif
|
||||
!if !defined(DSPOPTS)
|
||||
!error "Unknown HAL_* configuration"
|
||||
!endif
|
||||
|
||||
# GLIDE_HW_TRI_SETUP: Use the hw TSU for triangle rendering.
|
||||
!if "$(FX_GLIDE_SW_SETUP)" == "1"
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_HW_TRI_SETUP=0 -DGLIDE_TRI_CULLING=1
|
||||
FX_GLIDE_CTRISETUP = 1
|
||||
!else # HW Setup
|
||||
# Do culling test in sw for independent triangles
|
||||
CULL_MODE = -DGLIDE_TRI_CULLING=0
|
||||
!if "$(FX_GLIDE_HW_CULL)" != "1"
|
||||
CULL_MODE = -DGLIDE_TRI_CULLING=1
|
||||
!endif
|
||||
DSPOPTS = $(DSPOPTS) $(CULL_MODE)
|
||||
|
||||
# Send a single DWORD ARGB rather than 4 fp values, at
|
||||
# the cost of doing the conversion.
|
||||
!if "$(FX_GLIDE_PACK_RGB)" == "1"
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_PACKED_RGB=1
|
||||
!endif
|
||||
|
||||
!endif # HW Tri Setup
|
||||
|
||||
!if "$(FX_GLIDE_NO_FIFO)" != "1"
|
||||
FIFODEFS = -DUSE_PACKET_FIFO=1 \
|
||||
-DGLIDE_HW_TRI_SETUP=1 -DGLIDE_PACKET3_TRI_SETUP=1 \
|
||||
|
||||
!if "$(FX_GLIDE_DEBUG_FIFO)" == "1"
|
||||
# GLIDE_USE_DEBUG_FIFO: Run w/ the small fifo to cause me/glide more stress
|
||||
# FIFO_ASSERT_FULL: Check hw depth/fifo a lot (slow)
|
||||
LCDEFS = $(LCDEFS) \
|
||||
-DGLIDE_USE_DEBUG_FIFO=1 -DFIFO_ASSERT_FULL=1 \
|
||||
-DASSERT_FAULT=0 #-DGLIDE_SANITY_SIZE=1
|
||||
!endif # FX_GLIDE_DEBUG_FIFO
|
||||
!else # FX_GLIDE_NO_FIFO == 1
|
||||
FX_GLIDE_CTRISETUP = 1
|
||||
FIFODEFS = -DGLIDE_HW_TRI_SETUP=1
|
||||
!endif
|
||||
|
||||
# Optimization Options
|
||||
# This is for turning on and off algorithmic optimizations,
|
||||
# not flags to the C compiler. Usually this involves
|
||||
# enabling/disabling assembly language code, but it can also
|
||||
# change the way C code works, or how C code generates data to be
|
||||
# used by various pieces of code.
|
||||
# Usually these are set with environment variables or arguments to
|
||||
# nmake.
|
||||
#
|
||||
|
||||
# Turn on/off assembly language trisetup code.
|
||||
# (C on is Assembly off) (A ssembly T ri S etup OPTS)
|
||||
!if "$(FX_GLIDE_CTRISETUP)" == "1"
|
||||
ASMTRISETUP =
|
||||
ATSOPTS = -DGLIDE_USE_C_TRISETUP
|
||||
CFILES = gxdraw.c
|
||||
!else
|
||||
ASMTRISETUP = xdraw2.asm
|
||||
DSPOPTS = $(DSPOPTS) -DGLIDE_DISPATCH_SETUP=1 -DGLIDE_PACKED_RGB=0
|
||||
!endif
|
||||
|
||||
OPTOPTS = $(GRMOPTS) $(OTSOPTS) $(ATSOPTS)
|
||||
|
||||
# local defines, begin with basics and then add on
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_LIB
|
||||
|
||||
!if "$(FX_GLIDE_CRYBABY)" == "1"
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_CHECK_COMPATABILITY=1
|
||||
!endif
|
||||
|
||||
# Turn Off/On compilation of shameless plug
|
||||
!if "$(FX_GLIDE_NO_PLUG)" == "1"
|
||||
!else
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_PLUG
|
||||
!endif
|
||||
|
||||
# Turn Off/On splash screen
|
||||
!if "$(FX_GLIDE_NO_SPLASH)" == "1"
|
||||
!else
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_SPLASH
|
||||
!endif
|
||||
|
||||
!if "$(FX_PCI_TARGET)" == "NT"
|
||||
LCDEFS = $(LCDEFS) -DNT_BUILD
|
||||
!endif
|
||||
|
||||
#Glide 3 Stuff, for migration all
|
||||
!if "$(FX_GLIDE3)" != ""
|
||||
LCDEFS = $(LCDEFS) -DGLIDE3
|
||||
GLIDE3FILES = gstrip.c distrip.c distate.c diget.c
|
||||
!endif
|
||||
|
||||
#Glide 3. remove migration stuff
|
||||
!if "$(FX_GLIDE3_ALPHA)" != ""
|
||||
LCDEFS = $(LCDEFS) -DGLIDE3_ALPHA
|
||||
GLIDE3FILES = gstrip.c distrip.c distate.c diget.c
|
||||
!endif
|
||||
|
||||
!if defined(GLIDE_SANITY_ALL) || defined(GLIDE_SANITY_SIZE)
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_SANITY_SIZE
|
||||
!endif
|
||||
!if defined(GLIDE_SANITY_ALL) || defined(GLIDE_SANITY_ASSERT)
|
||||
LCDEFS = $(LCDEFS) -DGLIDE_SANITY_ASSERT
|
||||
!endif
|
||||
|
||||
# Local Defs, Includes, and Options (C)
|
||||
LCINCS = $(LCINCS) -I$(BUILD_ROOT)\$(FX_GLIDE_HW)\include
|
||||
LCOPTS = $(DBGOPTS) $(DSPOPTS) $(OPTOPTS)
|
||||
|
||||
# Local Defs, Includes, and Options (ASM)
|
||||
LADEFS = $(LADEFS) $(ASM_REGMAP_DEFS)
|
||||
LAINCS = -I$(BUILD_ROOT)\$(FX_GLIDE_HW)\include
|
||||
LAOPTS = $(DBGOPTS) $(DSPOPTS) $(OPTOPTS) /Fl /Sa
|
||||
|
||||
AFILES = $(ASMTRISETUP) cpudtect.asm
|
||||
|
||||
# sources
|
||||
HEADERS = glide.h gump.h glidesys.h glideutl.h
|
||||
PRIVATE_HEADERS = fxglide.h gsstdef.h fxinline.h
|
||||
|
||||
INSTALL_DESTINATION = $(BUILD_ROOT)\$(FX_GLIDE_HW)
|
||||
|
||||
CFILES = $(CFILES) gsplash.c g3df.c gu.c guclip.c gpci.c gump.c\
|
||||
diglide.c disst.c ditex.c gbanner.c gerror.c\
|
||||
gmovie.c digutex.c ddgump.c gaa.c gdraw.c\
|
||||
gglide.c glfb.c gsst.c gtex.c gtexdl.c\
|
||||
gutex.c $(HWSPEC) $(GLIDE3FILES)
|
||||
|
||||
OFILES = $(CFILES:.c=.obj)
|
||||
|
||||
OTHER_CFILES = fxgasm.c fxbldno.c fxinline.h
|
||||
|
||||
CODFILES = $(CFILES:.c=.cod)
|
||||
|
||||
# targets
|
||||
LDIRT = fxgasm.obj fxgasm.exe fxgasm.h fxinline.h fxbldno.obj fxbldno.exe fxbldno.h
|
||||
|
||||
!if "$(FX_GLIDE3)" == "1"
|
||||
LIBRARIES = glide3x.lib
|
||||
!else
|
||||
LIBRARIES = glide2x.lib
|
||||
!endif
|
||||
RCFILE = glide.rc
|
||||
|
||||
# Make a static link library for things like the diags.
|
||||
!if "$(FX_DLL_BUILD)" == "1"
|
||||
FX_DLL_LIBRARY = 1
|
||||
!else
|
||||
LCDEFS = $(LCDEFS) -DFX_STATIC_BUILD
|
||||
!endif
|
||||
|
||||
|
||||
LCDEFS = $(LCDEFS) $(FIFODEFS)
|
||||
|
||||
!include $(BUILD_ROOT)\swlibs/include/nmake/3dfx.mak
|
||||
|
||||
codfiles: $(CODFILES)
|
||||
xdraw2.obj : xdraw2.asm xdraw2.inc fxgasm.h fxinline.h
|
||||
|
||||
ctags: $(CFILES)
|
||||
ctags $(CFILES)
|
||||
|
||||
gbanner.obj : banner.inc
|
||||
gsplash.obj : splshdat.c
|
||||
|
||||
!if "$(FX_TARGET)" == "WIN32"
|
||||
!if "$(FX_DLL_BUILD)" != ""
|
||||
glide2x.dll:
|
||||
del fxbldno.h
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!if "$(FX_TARGET)" == "DOS"
|
||||
!if "$(FX_DLL_BUILD)" != ""
|
||||
|
||||
glimport.obj: glimport.asm
|
||||
|
||||
IMPORT_DEPS = $(BUILD_ROOT)\swlibs\lib\dllload.lib \
|
||||
$(DLLLOADS) glimport.obj
|
||||
|
||||
glide2x.lib: $(IMPORT_DEPS)
|
||||
if exist glide2x.lib del glide2x.lib
|
||||
wlib glide2x.lib +$(BUILD_ROOT)\swlibs\lib\dllload.lib +glimport.obj
|
||||
!if "$(FX_WATCOM_REG_CALL)" != "1"
|
||||
wlib glide2x.lib +$(BUILD_ROOT)\swlibs\lib\dllloads.obj
|
||||
!endif
|
||||
if exist $(BUILD_ROOT)\$(FX_GLIDE_HW)\lib\glide2x.lib attrib -r $(BUILD_ROOT)\$(FX_GLIDE_HW)\lib\glide2x.lib
|
||||
if exist $(BUILD_ROOT)\$(FX_GLIDE_HW)\lib\glide2x.lib del $(BUILD_ROOT)\$(FX_GLIDE_HW)\lib\glide2x.lib
|
||||
xcopy /d /k /r /i /s /q glide2x.lib $(BUILD_ROOT)\$(FX_GLIDE_HW)\lib
|
||||
attrib +r $(BUILD_ROOT)\$(FX_GLIDE_HW)\lib\glide2x.lib
|
||||
|
||||
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!if "$(FX_COMPILER)" == "WATCOM"
|
||||
#------------------------------------------------------------
|
||||
# special rul for makeing glideapi.obj under WATCOM
|
||||
#
|
||||
|
||||
glideapi.obj : glideapi.c
|
||||
set $(CC_ENV_VAR)=-d2 $(GCFLAGS) $(LCFLAGS) $(VCFLAGS)
|
||||
$(CC) glideapi.c
|
||||
!endif
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# special rules for making FXGASM.H
|
||||
#
|
||||
fxgasm.exe: fxgasm.c $(HEADERS) gsstdef.h fxglide.h Makefile
|
||||
!if "$(FX_COMPILER)" == "MICROSOFT"
|
||||
$(CC) -o $@ fxgasm.c $(GCDEFS) $(LCDEFS) $(VCDEFS) $(LCOPTS) \
|
||||
-I$(BUILD_ROOT)\$(FX_GLIDE_HW)\include -I$(BUILD_ROOT)\swlibs\include $(LDFLAGS)
|
||||
!else if "$(FX_COMPILER)" == "WATCOM"
|
||||
set WCC386=$(CFLAGS)
|
||||
wcl386 fxgasm.c
|
||||
!endif
|
||||
fxgasm.h: fxgasm.exe
|
||||
fxgasm -hex > fxgasm.h
|
||||
fxinline.h: fxgasm.exe
|
||||
fxgasm -inline > fxinline.h
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# special rules for making FXBLDNO.H
|
||||
#
|
||||
|
||||
fxbldno.exe: fxbldno.c $(HEADERS) $(PRIVATE_HEADERS)
|
||||
!if "$(FX_COMPILER)" == "MICROSOFT"
|
||||
$(CC) -o $@ fxbldno.c $(GCDEFS) $(LCDEFS) $(VCDEFS) $(LCOPTS) $(LDFLAGS)
|
||||
!else if "$(FX_COMPILER)" == "WATCOM"
|
||||
set WCC386=$(CFLAGS)
|
||||
wcl386 fxbldno.c
|
||||
!endif
|
||||
|
||||
fxbldno.h: fxbldno.exe
|
||||
fxbldno > fxbldno.h
|
||||
|
||||
glide.res: rcver.h fxbldno.h
|
||||
gglide.obj: rcver.h
|
||||
|
||||
!if "$(FX_GLIDE_CTRISETUP)" != "1"
|
||||
gdraw.obj: fxinline.h
|
||||
!endif
|
||||
|
||||
@@ -1,335 +0,0 @@
|
||||
# Linux makefile for Glide2/CVG
|
||||
# This makefile MUST be processed by GNU make!!!
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (c) 2004 - Daniel Borca
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
#
|
||||
# Copyright (c) 2004 - Hiroshi Morii
|
||||
# Email : koolsmoky@users.sourceforge.net
|
||||
# Web : http://www.3dfxzone.it/koolsmoky
|
||||
#
|
||||
# Copyright (c) 2006 - Guillem Jover <guillem@hadrons.org>
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# Available options:
|
||||
#
|
||||
# Environment variables:
|
||||
# FX_GLIDE_HW build for the given ASIC (cvg).
|
||||
# default = cvg
|
||||
# CPU optimize for the given processor.
|
||||
# default = 6 (PentiumPro)
|
||||
# DEBUG=1 disable optimizations and build for debug.
|
||||
# default = no
|
||||
# USE_X86=1 use assembler triangle specializations; req by CVG
|
||||
# default = yes
|
||||
# USE_3DNOW=1 allow 3DNow! specializations. However, the true CPU
|
||||
# capabilities are still checked at run-time to avoid
|
||||
# crashes.
|
||||
# default = no
|
||||
# USE_MMX=1 allow MMX specializations.
|
||||
# default = no
|
||||
# FXOEM2X=1 build fxoem2x.so
|
||||
# default = no
|
||||
#
|
||||
# Targets:
|
||||
# all: build everything
|
||||
# glide2x: build Glide2x lib
|
||||
# clean: remove object files
|
||||
# realclean: remove all generated files
|
||||
#
|
||||
|
||||
|
||||
|
||||
.PHONY: all glide2x clean realclean
|
||||
.INTERMEDIATE: fxgasm
|
||||
.SUFFIXES: .lo
|
||||
|
||||
export PATH := $(PATH):.
|
||||
|
||||
###############################################################################
|
||||
# general defines (user settable?)
|
||||
###############################################################################
|
||||
|
||||
GLIDE_VERSION_MAJOR = 2
|
||||
GLIDE_VERSION_MINOR = 53
|
||||
|
||||
GLIDE_LIB = libglide.a
|
||||
GLIDE_SO = libglide.so
|
||||
GLIDE_SONAME = $(GLIDE_SO).$(GLIDE_VERSION_MAJOR)
|
||||
GLIDE_SHARED = $(GLIDE_SONAME).$(GLIDE_VERSION_MINOR)
|
||||
|
||||
FX_GLIDE_HW ?= cvg
|
||||
FX_GLIDE_SW = ../../../swlibs
|
||||
GLIDE_LIBDIR = ../../lib
|
||||
|
||||
###############################################################################
|
||||
# tools
|
||||
###############################################################################
|
||||
|
||||
CC = gcc
|
||||
AS = nasm
|
||||
AR = ar
|
||||
|
||||
CP = cp
|
||||
|
||||
###############################################################################
|
||||
# defines
|
||||
###############################################################################
|
||||
|
||||
# platform
|
||||
CDEFS = -DINIT_LINUX -D__3Dfx_PCI_CFG__
|
||||
LDLIBS = -lm
|
||||
|
||||
# general
|
||||
CDEFS += -DGLIDE_HW_TRI_SETUP=1 -DGLIDE_PACKED_RGB=0 -DGLIDE_TRI_CULLING=1 -DGLIDE_DEFAULT_GAMMA=1.3f -DGLIDE_LIB=1
|
||||
#CDEFS += -DGLIDE3 -DGLIDE3_ALPHA -DGLIDE3_SCALER
|
||||
|
||||
# special sli buffer clears
|
||||
CDEFS += -DGLIDE_BLIT_CLEAR=1
|
||||
|
||||
# workaround for CVGs with broken tsus which cannot send commands to multiple
|
||||
# tmus using chipfield. chipfield will always be set to 0xf
|
||||
CDEFS += -DGLIDE_CHIP_BROADCAST=1
|
||||
|
||||
# subsystem
|
||||
CDEFS += -DCVG
|
||||
|
||||
# debug
|
||||
ifdef DEBUG
|
||||
CDEFS += -DGDBG_INFO_ON -DGLIDE_DEBUG -DGLIDE_SANITY_ASSERT -DGLIDE_SANITY_SIZE
|
||||
endif
|
||||
|
||||
override USE_FIFO = 1
|
||||
#override USE_X86 = 1
|
||||
|
||||
ifeq ($(USE_X86),1)
|
||||
CDEFS += -DGLIDE_DISPATCH_SETUP=1 -DGLIDE_DISPATCH_DOWNLOAD=1
|
||||
override USE_FIFO = 1
|
||||
CDEFS += -DHAVE_XDRAWTRI_ASM=1
|
||||
override USE_DRAWTRI_ASM = 1
|
||||
else
|
||||
CDEFS += -DGLIDE_USE_C_TRISETUP=1
|
||||
endif
|
||||
|
||||
# fifo
|
||||
ifeq ($(USE_FIFO),1)
|
||||
CDEFS += -DUSE_PACKET_FIFO=1 -DGLIDE_PACKET3_TRI_SETUP=1
|
||||
endif
|
||||
|
||||
# other
|
||||
CDEFS += -DGLIDE_PLUG -DGLIDE_SPLASH
|
||||
|
||||
###############################################################################
|
||||
# flags
|
||||
###############################################################################
|
||||
|
||||
# librarian
|
||||
ARFLAGS = rus
|
||||
|
||||
# assembler
|
||||
ASFLAGS = -O6 -felf -D__linux__
|
||||
ASFLAGS += $(CDEFS)
|
||||
|
||||
# compiler
|
||||
CFLAGS = -Wall -W
|
||||
CFLAGS += -I. -I../../incsrc -I../../init
|
||||
CFLAGS += -I$(FX_GLIDE_SW)/fxmisc -I$(FX_GLIDE_SW)/newpci/pcilib -I$(FX_GLIDE_SW)/fxmemmap
|
||||
CFLAGS += $(CDEFS)
|
||||
|
||||
# cpu optimized triangle
|
||||
ifeq ($(USE_MMX),1)
|
||||
CFLAGS += -DGL_MMX
|
||||
override USE_X86 = 1
|
||||
endif
|
||||
|
||||
ifeq ($(USE_3DNOW),1)
|
||||
CFLAGS += -DGL_AMD3D
|
||||
override USE_X86 = 1
|
||||
endif
|
||||
|
||||
ifeq ($(USE_X86),1)
|
||||
CFLAGS += -DGL_X86 -DBIG_OPT
|
||||
OPTFLAGS ?= -O6 -march=pentium2 -mtune=pentium3 -fomit-frame-pointer -funroll-loops \
|
||||
-fexpensive-optimizations -ffast-math -Wno-unused
|
||||
else
|
||||
CFLAGS += -DGLIDE_USE_C_TRISETUP
|
||||
OPTFLAGS ?= -O6 -march=pentium2 -mtune=pentium3 -ffast-math -Wno-unused
|
||||
endif
|
||||
|
||||
# optflags
|
||||
CFLAGS += $(OPTFLAGS)
|
||||
|
||||
###############################################################################
|
||||
# objects
|
||||
###############################################################################
|
||||
|
||||
GLIDE_OBJECTS = \
|
||||
fifo.o \
|
||||
gsplash.o \
|
||||
g3df.o \
|
||||
gu.o \
|
||||
guclip.o \
|
||||
gpci.o \
|
||||
gump.o \
|
||||
diglide.o \
|
||||
disst.o \
|
||||
ditex.o \
|
||||
gbanner.o \
|
||||
gerror.o \
|
||||
gmovie.o \
|
||||
digutex.o \
|
||||
ddgump.o \
|
||||
gaa.o \
|
||||
gdraw.o \
|
||||
gglide.o \
|
||||
glfb.o \
|
||||
gsst.o \
|
||||
gtex.o \
|
||||
gtexdl.o \
|
||||
gutex.o \
|
||||
cpuid.o \
|
||||
fpu.o \
|
||||
xtexdl_def.o
|
||||
|
||||
ifeq ($(USE_DRAWTRI_ASM),1)
|
||||
GLIDE_OBJECTS += xdrawtri.o
|
||||
endif
|
||||
ifeq ($(USE_X86),1)
|
||||
GLIDE_OBJECTS += \
|
||||
xdraw2_def.o
|
||||
ifeq ($(USE_MMX),1)
|
||||
GLIDE_OBJECTS += \
|
||||
xtexdl_mmx.o
|
||||
endif
|
||||
ifeq ($(USE_3DNOW),1)
|
||||
GLIDE_OBJECTS += \
|
||||
xdraw2_3dnow.o \
|
||||
xtexdl_3dnow.o
|
||||
endif
|
||||
else
|
||||
GLIDE_OBJECTS += \
|
||||
gxdraw.o
|
||||
endif
|
||||
|
||||
GLIDE_OBJECTS += \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxpci.o \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxlinux.o \
|
||||
$(FX_GLIDE_SW)/newpci/pcilib/fxmsr.o \
|
||||
../../init/canopus.o \
|
||||
../../init/dac.o \
|
||||
../../init/gamma.o \
|
||||
../../init/gdebug.o \
|
||||
../../init/info.o \
|
||||
../../init/parse.o \
|
||||
../../init/print.o \
|
||||
../../init/sli.o \
|
||||
../../init/sst1init.o \
|
||||
../../init/util.o \
|
||||
../../init/video.o
|
||||
|
||||
# FIXME: needed for now to match the old library signature, should be checked
|
||||
# if it's really needed.
|
||||
GLIDE_OBJECTS += \
|
||||
$(FX_GLIDE_SW)/fxmisc/fxos.o \
|
||||
$(FX_GLIDE_SW)/fxmisc/fximg.o
|
||||
|
||||
###############################################################################
|
||||
# rules
|
||||
###############################################################################
|
||||
|
||||
.c.o:
|
||||
$(CC) -o $@ $(CFLAGS) -c $<
|
||||
.c.lo:
|
||||
$(CC) -o $@ $(CFLAGS) -DPIC -fPIC -c $<
|
||||
|
||||
###############################################################################
|
||||
# main
|
||||
###############################################################################
|
||||
all: glide2x fxoem2x
|
||||
|
||||
glide2x: $(GLIDE_LIBDIR)/$(GLIDE_LIB) $(GLIDE_LIBDIR)/$(GLIDE_SO)
|
||||
|
||||
$(GLIDE_LIBDIR)/$(GLIDE_LIB): $(GLIDE_OBJECTS)
|
||||
$(AR) $(ARFLAGS) $@ $^
|
||||
|
||||
$(GLIDE_LIBDIR)/$(GLIDE_SO): $(GLIDE_LIBDIR)/$(GLIDE_SHARED)
|
||||
ln -fs $(GLIDE_SHARED) $(GLIDE_LIBDIR)/$(GLIDE_SO)
|
||||
|
||||
$(GLIDE_LIBDIR)/$(GLIDE_SHARED): $(GLIDE_OBJECTS:.o=.lo)
|
||||
$(CC) -o $@ -shared -Wl,-soname,$(GLIDE_SONAME) $^ $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
ifeq ($(FXOEM2X),1)
|
||||
$(GLIDE_LIBDIR)/libfxoem2x.so: ../oem/oeminit.o
|
||||
# $(LD) -o $@ $(LDFLAGS) ../oem/oeminit.o $(LDLIBS)
|
||||
else
|
||||
$(GLIDE_LIBDIR)/libfxoem2x.so:
|
||||
# $(warning FxOem2x not enabled... Skipping libfxoem2x.so)
|
||||
endif
|
||||
|
||||
fxoem2x: $(GLIDE_LIBDIR)/libfxoem2x.so
|
||||
|
||||
###############################################################################
|
||||
# rules(2)
|
||||
###############################################################################
|
||||
|
||||
#cpuid.o: cpudtect.asm
|
||||
# $(AS) -o $@ $(ASFLAGS) $<
|
||||
xdraw2_def.o: xdraw2.asm
|
||||
$(AS) -o $@ $(ASFLAGS) $<
|
||||
xtexdl_def.o: xtexdl.c
|
||||
$(CC) -o $@ $(CFLAGS) -c $<
|
||||
xtexdl_mmx.o: xtexdl.asm
|
||||
$(AS) -o $@ $(ASFLAGS) -DGL_MMX=1 $<
|
||||
xdraw2_3dnow.o: xdraw2.asm
|
||||
$(AS) -o $@ $(ASFLAGS) -DGL_AMD3D=1 $<
|
||||
xtexdl_3dnow.o: xtexdl.asm
|
||||
$(AS) -o $@ $(ASFLAGS) -DGL_AMD3D=1 $<
|
||||
xdrawtri.o: xdrawtri.asm
|
||||
$(AS) -o $@ $(ASFLAGS) $<
|
||||
|
||||
#cpuid.lo: cpuid.o
|
||||
# $(CP) $< $@
|
||||
xdraw2_def.lo: xdraw2_def.o
|
||||
$(CP) $< $@
|
||||
xtexdl_def.lo: xtexdl_def.o
|
||||
$(CP) $< $@
|
||||
xtexdl_mmx.lo: xtexdl_mmx.o
|
||||
$(CP) $< $@
|
||||
xdraw2_3dnow.lo: xdraw2_3dnow.o
|
||||
$(CP) $< $@
|
||||
xtexdl_3dnow.lo: xtexdl_3dnow.o
|
||||
$(CP) $< $@
|
||||
xdrawtri.lo: xdrawtri.o
|
||||
$(CP) $< $@
|
||||
|
||||
$(GLIDE_OBJECTS): fxinline.h fxgasm.h
|
||||
|
||||
fxinline.h: fxgasm
|
||||
./$< -inline > $@
|
||||
|
||||
fxgasm.h: fxgasm
|
||||
./$< -hex > $@
|
||||
|
||||
fxgasm: fxgasm.c
|
||||
$(CC) -o $@ $(CFLAGS) $<
|
||||
|
||||
###############################################################################
|
||||
# clean, realclean
|
||||
###############################################################################
|
||||
|
||||
clean:
|
||||
-$(RM) *.o *.lo
|
||||
-$(RM) ../../init/*.o ../../init/*.lo
|
||||
-$(RM) $(FX_GLIDE_SW)/newpci/pcilib/*.o $(FX_GLIDE_SW)/newpci/pcilib/*.lo
|
||||
-$(RM) fxinline.h
|
||||
-$(RM) fxgasm.h
|
||||
|
||||
realclean: clean
|
||||
-$(RM) $(GLIDE_LIBDIR)/$(GLIDE_LIB)
|
||||
-$(RM) $(GLIDE_LIBDIR)/$(GLIDE_SHARED)
|
||||
-$(RM) $(GLIDE_LIBDIR)/$(GLIDE_SO)
|
||||
@@ -1,34 +0,0 @@
|
||||
|
||||
/*#include "fxbldno.h"*/
|
||||
|
||||
#define MANVERSION 2
|
||||
#define MANREVISION 56
|
||||
|
||||
#define BUILD_NUMBER 40405
|
||||
|
||||
#ifndef GLIDE3
|
||||
#define VERSIONSTR "2.56\0"
|
||||
#else
|
||||
#define VERSIONSTR "3.0\0"
|
||||
#endif
|
||||
|
||||
#if defined(CVG) || defined(VOODOO2)
|
||||
# define HWSTR " Voodoo(tm)\0" /* [koolsmoky] NB do not change. Required
|
||||
* by Metabyte WickedGL to detect V2.
|
||||
*/
|
||||
# ifdef NT_BUILD
|
||||
# define PRODNAME "Glide(tm) for Voodoo^2\251 and Windows\256 NT\0"
|
||||
# else
|
||||
# define PRODNAME "Glide(tm) for Voodoo^2\251 and Windows\256 95/98\0"
|
||||
# endif /* NT_BUILD */
|
||||
#elif defined(H3)
|
||||
# define HWSTR " Banshee(tm)\0"
|
||||
# ifdef NT_BUILD
|
||||
# define PRODNAME "Glide(tm) for Banshee\251 and Windows\256 NT\0"
|
||||
# else
|
||||
# define PRODNAME "Glide(tm) for Banshee\251 and Windows\256 95/98\0"
|
||||
# endif /* NT_BUILD */
|
||||
#else
|
||||
# define PRODNAME "Something really, really important\0"
|
||||
# define HWSTR "Unknown Chip\0"
|
||||
#endif
|
||||
@@ -1,41 +0,0 @@
|
||||
GDEBUG levels:
|
||||
|
||||
Level Description
|
||||
----- ------------------------------------------------
|
||||
80 init routines
|
||||
81 gu3df*
|
||||
82 grLfb*
|
||||
83 grSst*
|
||||
84 grSstStatus, grSstIsBusy, grSstVideoLine
|
||||
85 gr* misc state routines
|
||||
86 grBuffer*
|
||||
87 grDisableAllEffects, grGlide?etState
|
||||
88 grTex* attribute routines
|
||||
89 grTex* download routines
|
||||
90 grDrawPoint
|
||||
91 grDrawLine
|
||||
92 grDrawTriangle
|
||||
93 grDrawPolygon*
|
||||
94 grDrawAAPoint
|
||||
95 grDrawAALine
|
||||
96 grDrawAATriangle
|
||||
97 grDrawAAPolygon*
|
||||
98 guMP* routines
|
||||
99 gu* misc. routines
|
||||
280 internal init routines
|
||||
281 routine exit traces
|
||||
282 dataList values
|
||||
|
||||
GLIDE_PLATFORM:
|
||||
|
||||
GLIDE_HARDWARE:
|
||||
Defined if GLIDE should use the actual SST hardware.
|
||||
|
||||
GLIDE_HW_*:
|
||||
GLIDE_HW_SST1:
|
||||
This macro is for compiling
|
||||
GLIDE_HW_SST96:
|
||||
This macro is for compiling Glide for SST96
|
||||
GLIDE_HW_H3:
|
||||
This macro is for compiling Glide for H3
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,259 +0,0 @@
|
||||
## THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
## PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
## TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
## INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
## DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
## THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
## EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
## FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
##
|
||||
## USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
## RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
## TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
## AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
## SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
## THE UNITED STATES.
|
||||
##
|
||||
## COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
##
|
||||
## $Header$
|
||||
## $Revision$
|
||||
## $Log$
|
||||
## Revision 1.2 1999/12/11 00:42:21 joseph
|
||||
## Changed \(.data) to .section .data to fix build errors with binutils 2.9.5.
|
||||
##
|
||||
## Revision 1.1.1.1 1999/12/07 21:49:13 joseph
|
||||
## Initial checkin into SourceForge.
|
||||
##
|
||||
##
|
||||
##
|
||||
## 7 5/18/98 12:16p Peter
|
||||
## culling enabling
|
||||
#
|
||||
# 6 1/15/98 1:12p Peter
|
||||
# dispatch w/o packing
|
||||
#
|
||||
# 5 11/06/97 3:47p Peter
|
||||
#
|
||||
# 4 11/04/97 5:04p Peter
|
||||
# cataclysm part deux
|
||||
#
|
||||
# 3 11/01/97 10:01a Peter
|
||||
# tri dispatch stuff
|
||||
#
|
||||
# 2 10/30/97 6:53p Peter
|
||||
# first real cut at tri asm
|
||||
#
|
||||
# 1 10/30/97 4:29p Peter
|
||||
# asm tri code
|
||||
#
|
||||
# 2 7/07/97 2:14p Jdt
|
||||
# assembly now on par with C code.
|
||||
#
|
||||
# 1 7/07/97 8:37a Jdt
|
||||
# B4 Chip field fix.
|
||||
##
|
||||
|
||||
.file "xdraw2.s"
|
||||
#OPTION OLDSTRUCTS
|
||||
# 586P
|
||||
|
||||
# This was xdraw2.s but I renamed it for now to work with the shared
|
||||
# swlibs. It hasn't changed to the format used in the .S files for
|
||||
# the Voodoo3 Glide soruces.
|
||||
|
||||
# some useful floating load and store macros <ala gmt>
|
||||
#flds TEXTEQU <fld DWORD PTR>
|
||||
#fsubs TEXTEQU <fsub DWORD PTR>
|
||||
#fmuls TEXTEQU <fmul DWORD PTR>
|
||||
|
||||
.align 4
|
||||
.section .data
|
||||
One .DATA 0x03f800000
|
||||
Area .DATA 0
|
||||
dxAB .DATA 0
|
||||
dxBC .DATA 0
|
||||
dyAB .DATA 0
|
||||
dyBC .DATA 0
|
||||
culltest .DATA 0
|
||||
|
||||
## Extra junk to pad out to the next cache line.
|
||||
bias0 .DATA 0
|
||||
pad1 .DATA 0
|
||||
pad2 .DATA 0
|
||||
pad3 .DATA 0
|
||||
pad4 .DATA 0
|
||||
pad5 .DATA 0
|
||||
pad6 .DATA 0
|
||||
pad7 .DATA 0
|
||||
bias1 .DATA 0
|
||||
|
||||
# _DATA ENDS
|
||||
|
||||
# Ugly, but seems to workaround the problem with locally defined
|
||||
# data segment globals not getting relocated properly when using
|
||||
# djgpp.
|
||||
|
||||
zArea .EQU One+0x04
|
||||
zdxAB .EQU One+0x08
|
||||
zdxBC .EQU One+0x0c
|
||||
zdyAB .EQU One+0x10
|
||||
zdyBC .EQU One+0x14
|
||||
zculltest .EQU One+0x18
|
||||
|
||||
### Definitions of cvg regs and glide root structures.
|
||||
.INCLUDE "fxgasm.h"
|
||||
|
||||
## enables/disables trisProcessed and trisDrawn counters
|
||||
STATS .ASSIGNA 1
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# Arguments : STKOFF = 16 from 4 pushes
|
||||
#.AIF \&GLIDE_DEBUG EQ 1
|
||||
#STKOFF .EQU 20
|
||||
#.AELSE
|
||||
STKOFF .EQU 16
|
||||
#.AENDI
|
||||
_va$ .EQU 4 + STKOFF
|
||||
_vb$ .EQU 8 + STKOFF
|
||||
_vc$ .EQU 12 + STKOFF
|
||||
|
||||
X .EQU 0
|
||||
Y .EQU 4
|
||||
# edx is used as index, loading from *src
|
||||
gc .REG (%esi) # points to graphics context
|
||||
|
||||
.text
|
||||
|
||||
.align 4
|
||||
.globl _trisetup_cull
|
||||
.type _trisetup_cull, @function
|
||||
_trisetup_cull:
|
||||
# .code
|
||||
|
||||
.MACRO SYMNAME prefix
|
||||
.LCULL\prefix:
|
||||
.ENDM
|
||||
|
||||
.MACRO SYMNAMEOP op prefix
|
||||
\op .LCULL\prefix
|
||||
.ENDM
|
||||
|
||||
GLIDE_CULLING .ASSIGNA 1
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
.INCLUDE "xdraw2.inc.S"
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
.L_end_trisetup_cull:
|
||||
.size _trisetup_cull,.L_end_trisetup_cull-_trisetup_cull
|
||||
|
||||
.MACRO SYMNAME prefix
|
||||
.LNOCULL\prefix:
|
||||
.ENDM
|
||||
|
||||
.MACRO SYMNAMEOP op prefix
|
||||
\op .LNOCULL\prefix
|
||||
.ENDM
|
||||
.AIF \&GLIDE_PACKED_RGB EQ 1
|
||||
.align 4
|
||||
.globl _trisetup_cull_rgb
|
||||
.type _trisetup_cull_rgb, @function
|
||||
_trisetup_cull_rgb:
|
||||
# .code
|
||||
|
||||
GLIDE_CULLING .ASSIGNA 1
|
||||
GLIDE_PACK_RGB .ASSIGNA 1
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
.INCLUDE "xdraw2.inc.S"
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
.L_end_trisetup_cull_rgb:
|
||||
.size _trisetup_cull_rgb,.L_end_trisetup_cull_rgb-_trisetup_cull_rgb
|
||||
|
||||
.align 4
|
||||
.globl _trisetup_cull_argb
|
||||
.type _trisetup_cull_argb, @function
|
||||
_trisetup_cull_argb:
|
||||
# .code
|
||||
|
||||
GLIDE_CULLING .ASSIGNA 1
|
||||
GLIDE_PACK_RGB .ASSIGNA 1
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 1
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
.INCLUDE "xdraw2.inc.S"
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
.L_end_trisetup_cull_argb:
|
||||
.size _trisetup_cull_argb,.L_end_trisetup_cull_argb-_trisetup_cull_argb
|
||||
|
||||
.AENDI
|
||||
.align 4
|
||||
.global _trisetup
|
||||
.type _trisetup, @function
|
||||
_trisetup:
|
||||
# .code
|
||||
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
.INCLUDE "xdraw2.inc.S"
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
.L_end_trisetup:
|
||||
.size _trisetup,.L_end_trisetup-_trisetup
|
||||
|
||||
.AIF \&GLIDE_PACKED_RGB EQ 1
|
||||
.align 4
|
||||
.globl _trisetup_rgb
|
||||
.type _trisetup_rgb, @function
|
||||
_trisetup_rgb:
|
||||
# .code
|
||||
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 1
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
.INCLUDE "xdraw2.inc.S"
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
.L_end_trisetup_rgb:
|
||||
.size _trisetup_rgb,.L_end_trisetup_rgb-_trisetup_rgb
|
||||
|
||||
.align 4
|
||||
.globl _trisetup_argb
|
||||
.type _trisetup_argb, @function
|
||||
_trisetup_argb:
|
||||
# .code
|
||||
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 1
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 1
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
INCLUDE xdraw2.inc
|
||||
GLIDE_GENERIC_SETUP .ASSIGNA 0
|
||||
GLIDE_PACK_ALPHA .ASSIGNA 0
|
||||
GLIDE_PACK_RGB .ASSIGNA 0
|
||||
GLIDE_CULLING .ASSIGNA 0
|
||||
.L_end_trisetup_argb:
|
||||
.size _trisetup_argb,.L_end_trisetup_argb-_trisetup_argb
|
||||
.AENDI
|
||||
|
||||
#_TEXT ENDS
|
||||
.END
|
||||
|
||||
|
||||
|
||||
@@ -1,225 +0,0 @@
|
||||
;; THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
;; PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
;; TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
;; INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
;; DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
;; THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
;; EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
;; FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
;;
|
||||
;; USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
;; RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
;; TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
;; AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
;; SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
;; THE UNITED STATES.
|
||||
;;
|
||||
;; COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
;;
|
||||
;; $Header$
|
||||
;; $Revision$
|
||||
;; $Log$
|
||||
;; Revision 1.1.1.1.2.3 2005/01/22 14:52:02 koolsmoky
|
||||
;; enabled packed argb for cmd packet type 3
|
||||
;;
|
||||
;; Revision 1.1.1.1.2.2 2005/01/13 16:11:39 koolsmoky
|
||||
;; prepare for packed rgb
|
||||
;;
|
||||
;; Revision 1.1.1.1.2.1 2004/12/23 20:45:56 koolsmoky
|
||||
;; converted to nasm syntax
|
||||
;; added x86 asm, 3dnow! triangle and mmx, 3dnow! texture download optimizations
|
||||
;;
|
||||
;; Revision 1.1.1.1 1999/12/07 21:49:13 joseph
|
||||
;; Initial checkin into SourceForge.
|
||||
;;
|
||||
;;
|
||||
;; 7 5/18/98 12:16p Peter
|
||||
;; culling enabling
|
||||
;
|
||||
; 6 1/15/98 1:12p Peter
|
||||
; dispatch w/o packing
|
||||
;
|
||||
; 5 11/06/97 3:47p Peter
|
||||
;
|
||||
; 4 11/04/97 5:04p Peter
|
||||
; cataclysm part deux
|
||||
;
|
||||
; 3 11/01/97 10:01a Peter
|
||||
; tri dispatch stuff
|
||||
;
|
||||
; 2 10/30/97 6:53p Peter
|
||||
; first real cut at tri asm
|
||||
;
|
||||
; 1 10/30/97 4:29p Peter
|
||||
; asm tri code
|
||||
;
|
||||
; 2 7/07/97 2:14p Jdt
|
||||
; assembly now on par with C code.
|
||||
;
|
||||
; 1 7/07/97 8:37a Jdt
|
||||
; B4 Chip field fix.
|
||||
;;
|
||||
|
||||
%include "xos.inc"
|
||||
|
||||
;;; Definitions of cvg regs and glide root structures.
|
||||
%include "fxgasm.h"
|
||||
|
||||
extrn _GlideRoot
|
||||
extrn _FifoMakeRoom, 12
|
||||
|
||||
%MACRO GR_FIFO_WRITE 3
|
||||
mov [%1 + %2], %3
|
||||
%ENDMACRO ; GR_FIFO_WRITE
|
||||
|
||||
%MACRO WRITE_MM1_FIFO_ALIGNED 0
|
||||
%ifdef GL_AMD3D
|
||||
movq [fifo], mm1 ; store current param | previous param
|
||||
%else
|
||||
;;
|
||||
%endif
|
||||
%ENDMACRO ; WRITE_MM1_FIFO_ALIGNED
|
||||
|
||||
%MACRO WRITE_MM1LOW_FIFO 0
|
||||
%ifdef GL_AMD3D
|
||||
movd [fifo], mm1 ; store current param | previous param
|
||||
%else
|
||||
;;
|
||||
%endif
|
||||
%ENDMACRO ; WRITE_MM1LOW_FIFO
|
||||
|
||||
segment DATA
|
||||
One DD 1.0
|
||||
Area DD 0
|
||||
%IF GLIDE_PACKED_RGB
|
||||
bias0 DD 0
|
||||
bias1 DD 0
|
||||
%ENDIF
|
||||
|
||||
segment CONST
|
||||
$T2003 DD 12288.0
|
||||
$T2005 DD 1.0
|
||||
$T2006 DD 256.0
|
||||
|
||||
;;; Arguments (STKOFF = 16 from 4 pushes)
|
||||
STKOFF equ 16
|
||||
_va$ equ 4 + STKOFF
|
||||
_vb$ equ 8 + STKOFF
|
||||
_vc$ equ 12 + STKOFF
|
||||
|
||||
;; coordinate offsets into vertex.
|
||||
;; NB: These are constants and are not
|
||||
;; user settable like the rest of the
|
||||
;; parameter offset. Weird.
|
||||
X equ 0
|
||||
Y equ 4
|
||||
|
||||
%MACRO PROC_TYPE 1
|
||||
%ifdef GL_AMD3D
|
||||
proc %1_3DNow, 12
|
||||
%else
|
||||
proc %1, 12
|
||||
%endif
|
||||
%ENDMACRO ; PROC_TYPE
|
||||
|
||||
;; enables/disables trisProcessed and trisDrawn counters
|
||||
%define STATS 1
|
||||
|
||||
segment TEXT
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE _trisetup_cull
|
||||
|
||||
%define GLIDE_CULLING 1
|
||||
%define GLIDE_PACK_RGB 0
|
||||
%define GLIDE_PACK_ALPHA 0
|
||||
%define GLIDE_GENERIC_SETUP 0
|
||||
%INCLUDE "xdraw2.inc"
|
||||
%undef GLIDE_GENERIC_SETUP
|
||||
%undef GLIDE_PACK_ALPHA
|
||||
%undef GLIDE_PACK_RGB
|
||||
%undef GLIDE_CULLING
|
||||
|
||||
endp
|
||||
|
||||
%IF GLIDE_PACKED_RGB
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE _trisetup_cull_rgb
|
||||
|
||||
%define GLIDE_CULLING 1
|
||||
%define GLIDE_PACK_RGB 1
|
||||
%define GLIDE_PACK_ALPHA 0
|
||||
%define GLIDE_GENERIC_SETUP 0
|
||||
%INCLUDE "xdraw2.inc"
|
||||
%undef GLIDE_GENERIC_SETUP
|
||||
%undef GLIDE_PACK_ALPHA
|
||||
%undef GLIDE_PACK_RGB
|
||||
%undef GLIDE_CULLING
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE _trisetup_cull_argb
|
||||
|
||||
%define GLIDE_CULLING 1
|
||||
%define GLIDE_PACK_RGB 1
|
||||
%define GLIDE_PACK_ALPHA 1
|
||||
%define GLIDE_GENERIC_SETUP 0
|
||||
%INCLUDE "xdraw2.inc"
|
||||
%undef GLIDE_GENERIC_SETUP
|
||||
%undef GLIDE_PACK_ALPHA
|
||||
%undef GLIDE_PACK_RGB
|
||||
%undef GLIDE_CULLING
|
||||
|
||||
endp
|
||||
%ENDIF ; GLIDE_PACKED_RGB
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE _trisetup
|
||||
|
||||
%define GLIDE_CULLING 0
|
||||
%define GLIDE_PACK_RGB 0
|
||||
%define GLIDE_PACK_ALPHA 0
|
||||
%define GLIDE_GENERIC_SETUP 0
|
||||
%INCLUDE "xdraw2.inc"
|
||||
%undef GLIDE_GENERIC_SETUP
|
||||
%undef GLIDE_PACK_ALPHA
|
||||
%undef GLIDE_PACK_RGB
|
||||
%undef GLIDE_CULLING
|
||||
|
||||
endp
|
||||
|
||||
%IF GLIDE_PACKED_RGB
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE _trisetup_rgb
|
||||
|
||||
%define GLIDE_CULLING 0
|
||||
%define GLIDE_PACK_RGB 1
|
||||
%define GLIDE_PACK_ALPHA 0
|
||||
%define GLIDE_GENERIC_SETUP 0
|
||||
%INCLUDE "xdraw2.inc"
|
||||
%undef GLIDE_GENERIC_SETUP
|
||||
%undef GLIDE_PACK_ALPHA
|
||||
%undef GLIDE_PACK_RGB
|
||||
%undef GLIDE_CULLING
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE _trisetup_argb
|
||||
|
||||
%define GLIDE_CULLING 0
|
||||
%define GLIDE_PACK_RGB 1
|
||||
%define GLIDE_PACK_ALPHA 1
|
||||
%define GLIDE_GENERIC_SETUP 0
|
||||
%INCLUDE "xdraw2.inc"
|
||||
%undef GLIDE_GENERIC_SETUP
|
||||
%undef GLIDE_PACK_ALPHA
|
||||
%undef GLIDE_PACK_RGB
|
||||
%undef GLIDE_CULLING
|
||||
|
||||
endp
|
||||
|
||||
%ENDIF ; GLIDE_PACKED_RGB
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,315 +0,0 @@
|
||||
## -*-asm-*-
|
||||
## THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
## PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
## TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
## INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
## DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
## THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
## EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
## FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
##
|
||||
## USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
## RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
## TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
## AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
## SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
## THE UNITED STATES.
|
||||
##
|
||||
## COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
##
|
||||
## $Header$
|
||||
## $Revision$
|
||||
## $Log$
|
||||
## Revision 1.1.1.1 1999/12/07 21:49:13 joseph
|
||||
## Initial checkin into SourceForge.
|
||||
##
|
||||
#
|
||||
# 2 10/30/97 6:53p Peter
|
||||
# first real cut at tri asm
|
||||
#
|
||||
# 1 10/30/97 4:29p Peter
|
||||
# asm tri code
|
||||
#
|
||||
# 2 7/07/97 2:14p Jdt
|
||||
# assembly now on par with C code.
|
||||
#
|
||||
# 1 7/07/97 8:37a Jdt
|
||||
# B4 Chip field fix.
|
||||
##
|
||||
|
||||
.file "xdraw2.inc.s"
|
||||
#.586P
|
||||
|
||||
#EXTRN _GlideRoot:DWORD
|
||||
#EXTRN _FifoMakeRoom:NEAR
|
||||
|
||||
# Ugly, but seems to workaround the problem with locally defined
|
||||
# data segment globals not getting relocated properly when using
|
||||
# djgpp.
|
||||
|
||||
#zArea .EQU One+4
|
||||
#zdxAB .EQU One+8
|
||||
#zdxBC .EQU One+12
|
||||
#zdyAB .EQU One+16
|
||||
#zdyBC .EQU One+20
|
||||
#zculltest .EQU One+24
|
||||
|
||||
gc .REG (%esi) # points to graphics context
|
||||
|
||||
## Prologue stuff
|
||||
push %esi
|
||||
push %edi
|
||||
|
||||
push %ebx
|
||||
push %ebp
|
||||
|
||||
mov (_GlideRoot + curGC), gc ## GR_DCL_GC
|
||||
|
||||
.align 4
|
||||
.AIF \&GLIDE_CULLING EQ 1
|
||||
fa .REG (%eax) # vtx a from caller
|
||||
fb .REG (%ebx) # vtx b from caller
|
||||
fc .REG (%ecx) # vtx c from caller
|
||||
|
||||
cull .REG (%edx)
|
||||
intArea .REG (%ebp) # temp Y storage
|
||||
|
||||
## Pre-load the current culling mode before all of the
|
||||
## floating point area stuff.
|
||||
mov cull_mode(gc), cull
|
||||
mov _va$(%esp), fa
|
||||
|
||||
mov _vb$(%esp), fb
|
||||
mov _vc$(%esp), fc
|
||||
|
||||
shl $31, cull
|
||||
|
||||
SYMNAME Area_Computation
|
||||
# 47-3
|
||||
# jmp ret_pop0f
|
||||
flds X(fa) # xa
|
||||
fsubs X(fb) # dxAB
|
||||
flds X(fb) # | xb
|
||||
fsubs X(fc) # | dxBC
|
||||
flds Y(fb) # | | yb
|
||||
fsubs Y(fc) # | | dyBC
|
||||
flds Y(fa) # | | | ya
|
||||
fsubs Y(fb) # | | | dyAB
|
||||
fld %st(3) # | | | | dxAB
|
||||
fmul %st(2), %st # | | | | t0 t0=dxAB*dyBC
|
||||
fld %st(3) # | | | | | dxBC
|
||||
fmul %st(2), %st # | | | | | t1 t1=dxBC*dyAB
|
||||
fsubrp %st, %st(1) # | | | | area
|
||||
fsts zArea # | | | | area
|
||||
|
||||
## Pop temp things from the sw culling off the fp stack
|
||||
fstp %st # 4
|
||||
fstp %st # 3
|
||||
fstp %st # 2
|
||||
fstp %st # 1
|
||||
fstp %st # 0
|
||||
|
||||
mov zArea, intArea # j = *(long *)&area
|
||||
xor %eax, %eax # Clear the returnv value (0 == culled)
|
||||
|
||||
# Zero Area Triangle Check
|
||||
and $0x7fffffff, intArea # if ((j & 0x7FFFFFFF) == 0)
|
||||
SYMNAMEOP jz, __triDone
|
||||
|
||||
## Triangle area check vs culling mode
|
||||
mov zArea, intArea
|
||||
xor cull, intArea
|
||||
|
||||
SYMNAMEOP jge, __triDone
|
||||
|
||||
.AENDI
|
||||
.align 4
|
||||
## Check to make sure that we have enough room for
|
||||
## the complete triangle packet.
|
||||
mov (_GlideRoot + curTriSize), %eax
|
||||
mov fifoRoom(gc), %ebx
|
||||
|
||||
add $4, %eax
|
||||
cmp %eax, %ebx
|
||||
|
||||
SYMNAMEOP jge, __triBegin
|
||||
|
||||
push $0
|
||||
push $0
|
||||
|
||||
push %eax
|
||||
call _FifoMakeRoom
|
||||
|
||||
add $12, %esp
|
||||
|
||||
## Send triangle parameters
|
||||
|
||||
dlp .REG (%ebx) # points to dataList structure
|
||||
fifo .REG (%ebp) # points to next entry in fifo
|
||||
vertex .REG (%edx) # the current vertex
|
||||
vOffset .REG (%ecx) # Current vertex offset
|
||||
|
||||
packCol .REG (%edi)
|
||||
tempVal .REG (%edi)
|
||||
|
||||
.MACRO GR_FIFO_WRITE __addr __offset __data
|
||||
mov \__data, \__offset(\__addr)
|
||||
.ENDM # GR_FIFO_WRITE
|
||||
|
||||
.align 4
|
||||
SYMNAME __triBegin
|
||||
mov fifoPtr(gc), fifo # Fetch Fifo Ptr
|
||||
mov $4, vOffset # Starting vertex
|
||||
|
||||
mov triPacketHdr(gc), %eax # Packet 3 header
|
||||
nop
|
||||
|
||||
# Write packet header to fifo
|
||||
GR_FIFO_WRITE fifo, 0, %eax
|
||||
add $4, fifo # Advance fifo for hdr & x/y coordinate
|
||||
|
||||
.align 4
|
||||
SYMNAME __vertexStart
|
||||
mov STKOFF(%esp,vOffset), vertex # Current vertex
|
||||
add $8, fifo
|
||||
|
||||
nop # Avoid p5 agi w/ load of vertex ptr
|
||||
nop
|
||||
|
||||
movl X(vertex), %eax # X
|
||||
lea tsuDataList(gc), dlp # Reset the dataList
|
||||
# PCI write X
|
||||
GR_FIFO_WRITE fifo, -8, %eax
|
||||
movl Y(vertex), %eax # Y
|
||||
|
||||
xor packCol, packCol # Clear packed color
|
||||
# PCI write Y
|
||||
GR_FIFO_WRITE fifo, -4, %eax
|
||||
|
||||
.AIF \&GLIDE_PACK_RGB EQ 1
|
||||
fldl b(vertex) # B
|
||||
faddl (_GlideRoot + fBiasLo) # BC GC
|
||||
|
||||
fldl g(vertex) # G B
|
||||
faddl (_GlideRoot + fBiasHi) # GC B
|
||||
|
||||
fldl r(vertex) # R GC BC
|
||||
faddl (_GlideRoot + fBiasHi) # RC GC BC
|
||||
|
||||
fxch %st(2) # BC GC RC
|
||||
fstpl bias0 # GC RC
|
||||
|
||||
fstpl bias1 # RC
|
||||
movl bias0, packCol # B + bias
|
||||
|
||||
fstpl bias0
|
||||
movl bias1, %eax # G + bias
|
||||
|
||||
.AIF \&GLIDE_PACK_ALPHA EQ 1
|
||||
fldl a(vertex)
|
||||
faddl (_GlideRoot + fBiasHi)
|
||||
|
||||
and $0x00FF, packCol # B color component
|
||||
and $0x0000FF00, %eax # G component << 8
|
||||
|
||||
add $8, dlp # Packed RGB + A dataList entry
|
||||
nop
|
||||
|
||||
or %eax, packCol # 0000GGBB
|
||||
nop
|
||||
|
||||
fstpl bias1
|
||||
movl bias0, %eax # R + bias
|
||||
|
||||
movl bias1, %esi # A + bias
|
||||
and $0x0000FF00, %eax # R component << 8
|
||||
|
||||
and $0x0FFFFFF00, %esi # A component << 8
|
||||
shl $8, eax # R << 16
|
||||
|
||||
or %eax, packCol # 00RRGGBB
|
||||
shl $16, %esi # A << 16
|
||||
|
||||
or %esi, packCol # AARRGGBB
|
||||
nop
|
||||
.AELSE # !GLIDE_PACK_ALPHA
|
||||
and $0x00FF, packCol # B color component
|
||||
and $0x0000FF00, %eax # G component << 8
|
||||
|
||||
add $4, dlp # Next dataList item
|
||||
or %eax, packCol
|
||||
|
||||
movl bias0, %eax # R + bias
|
||||
and $0x0000FF00, %eax # R component << 8
|
||||
|
||||
shl $8, eax # R << 16
|
||||
or %eax, packCol # 00RRGGBB
|
||||
.AENDI # !GLIDE_PACK_ALPHA
|
||||
|
||||
# PCI write packed color value
|
||||
GR_FIFO_WRITE fifo, 0, packCol
|
||||
add $4, fifo
|
||||
.AENDI # GLIDE_PACK_RGB
|
||||
|
||||
SYMNAME __doParams
|
||||
movl (dlp), %eax # Get first offset from the data list
|
||||
add $4, dlp # dlp++
|
||||
|
||||
cmp $0, %eax # Are we done?
|
||||
SYMNAMEOP je, __nextVertex
|
||||
|
||||
## Not using align directive here because it sometimes
|
||||
## introduces an agi for the eax use below.
|
||||
nop
|
||||
nop
|
||||
SYMNAME __paramLoop
|
||||
movl (%eax, vertex), tempVal
|
||||
add $4, fifo
|
||||
|
||||
movl (dlp), %eax
|
||||
add $4, dlp
|
||||
|
||||
cmp $0, %eax
|
||||
GR_FIFO_WRITE fifo, -4, tempVal
|
||||
|
||||
SYMNAMEOP jne, __paramLoop
|
||||
|
||||
.align 4
|
||||
SYMNAME __nextVertex
|
||||
## On to the next vertex
|
||||
add $4, vOffset
|
||||
mov (_GlideRoot + curGC), gc # Reload gc incase we trashed it as a temp
|
||||
|
||||
cmp $16, vOffset # Offset of one past last vertex?
|
||||
|
||||
SYMNAMEOP jne, __vertexStart
|
||||
|
||||
## Update gc->fifoPtr and gc->fifoRoom
|
||||
mov fifo, %eax
|
||||
mov fifoPtr(gc), %ebx
|
||||
|
||||
mov fifo, fifoPtr(gc)
|
||||
sub %ebx, %eax
|
||||
|
||||
mov (_GlideRoot + trisDrawn), %ebx
|
||||
sub %eax, fifoRoom(gc)
|
||||
|
||||
add $1, %ebx
|
||||
mov %ebx, (_GlideRoot + trisDrawn)
|
||||
|
||||
## return 1 (triangle drawn)
|
||||
mov $1, %eax
|
||||
|
||||
SYMNAME __triDone
|
||||
## Restore trashed registers
|
||||
mov (_GlideRoot + trisProcessed), %esi
|
||||
pop %ebp
|
||||
|
||||
add $1, %esi
|
||||
pop %ebx
|
||||
|
||||
pop %edi
|
||||
mov %esi, (_GlideRoot + trisProcessed)
|
||||
|
||||
pop %esi
|
||||
ret
|
||||
@@ -1,46 +0,0 @@
|
||||
;; THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
;; PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
;; TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
;; INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
;; DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
;; THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
;; EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
;; FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
;;
|
||||
;; USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
;; RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
;; TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
;; AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
;; SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
;; THE UNITED STATES.
|
||||
;;
|
||||
;; COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
|
||||
;; Adapted from gdraw.c:grDrawTriangle() for nasm
|
||||
|
||||
%include "xos.inc"
|
||||
|
||||
%include "fxgasm.h"
|
||||
|
||||
extrn _GlideRoot
|
||||
|
||||
segment SEG_TEXT
|
||||
|
||||
align 16
|
||||
proc grDrawTriangle, 12
|
||||
|
||||
;;mov edx, dword [_GlideRoot+curGC]
|
||||
;;mov eax, dword [edx+kTriProcOffset]
|
||||
mov eax, dword [_GlideRoot+curGC]
|
||||
jmp [eax + kTriProcOffset]
|
||||
endp
|
||||
align 16
|
||||
|
||||
%if XOS == XOS_WIN32
|
||||
%ifdef __MINGW32__
|
||||
; GNU LD fails with '_' prefix
|
||||
export grDrawTriangle@12
|
||||
%else
|
||||
export _grDrawTriangle@12
|
||||
%endif
|
||||
%endif ; _WIN32
|
||||
@@ -1,161 +0,0 @@
|
||||
;
|
||||
; compulsory header for glide3/xdraw* assembly specializations (NASM)
|
||||
;
|
||||
; $Header$
|
||||
; $Log$
|
||||
; Revision 1.1.2.3 2004/10/04 08:57:52 dborca
|
||||
; supporting DOS/OpenWatcom in Assembly files
|
||||
;
|
||||
;
|
||||
; Revision 1.1.2.1 2003/06/07 09:53:25 dborca
|
||||
; initial checkin for NASM sources
|
||||
;
|
||||
|
||||
;---------------------------------------
|
||||
; platform defines
|
||||
;---------------------------------------
|
||||
%define XOS_DJGPP 1
|
||||
%define XOS_LINUX 2
|
||||
%define XOS_WIN32 4
|
||||
%define XOS_WATCD 8
|
||||
|
||||
%define STDCALL 0
|
||||
%define ELFTYPE 0
|
||||
|
||||
;---------------------------------------
|
||||
; pick up the right OS
|
||||
;---------------------------------------
|
||||
%ifdef __DJGPP__
|
||||
%define XOS XOS_DJGPP
|
||||
%elifdef __linux__
|
||||
%define XOS XOS_LINUX
|
||||
%define ELFTYPE 1
|
||||
%elifdef __WIN32__
|
||||
%define XOS XOS_WIN32
|
||||
%define STDCALL 1
|
||||
%elifdef __WATCOMD__
|
||||
%define XOS XOS_WATCD
|
||||
%define STDCALL 1
|
||||
%else
|
||||
%error Unknown OS
|
||||
%endif
|
||||
|
||||
;---------------------------------------
|
||||
; general purpose macros
|
||||
;---------------------------------------
|
||||
%macro extrn 1-2 0
|
||||
%if STDCALL && (%2 > 0)
|
||||
%define %1 %1@%2
|
||||
%endif
|
||||
extern %1
|
||||
%endmacro
|
||||
|
||||
%macro globl 1-2 0
|
||||
%if STDCALL && (%2 > 0)
|
||||
%define %1 %1@%2
|
||||
%endif
|
||||
global %1
|
||||
%endmacro
|
||||
|
||||
%macro proc 1-2 0
|
||||
%push proc
|
||||
%if STDCALL && (%2 > 0)
|
||||
%define %$ret RET %2
|
||||
%else
|
||||
%define %$ret RET
|
||||
%endif
|
||||
%if ELFTYPE
|
||||
globl %1:function, %2
|
||||
%else
|
||||
globl %1, %2
|
||||
%endif
|
||||
%1:
|
||||
%endmacro
|
||||
|
||||
%macro endp 0
|
||||
%ifnctx proc
|
||||
%error Mismatched `endp'/`proc'
|
||||
%else
|
||||
%pop
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro ret 0
|
||||
%ifnctx proc
|
||||
RET
|
||||
%else
|
||||
%$ret
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro invoke 1-*
|
||||
%rep %0 - 1
|
||||
%rotate -1
|
||||
push %1
|
||||
%endrep
|
||||
%rotate -1
|
||||
call %1
|
||||
%if (STDCALL == 0) && (%0 > 1)
|
||||
add esp, 4 * (%0 - 1)
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
;---------------------------------------
|
||||
; Windows
|
||||
;---------------------------------------
|
||||
%if XOS == XOS_WIN32
|
||||
|
||||
%define TEXT .text align=32
|
||||
%define DATA .data align=32
|
||||
%define CONST .rdata align=32
|
||||
|
||||
%macro GET_GC 0
|
||||
mov gc, [_GlideRoot + curGC]
|
||||
%endmacro
|
||||
|
||||
%endif
|
||||
|
||||
;---------------------------------------
|
||||
; DJGPP
|
||||
;---------------------------------------
|
||||
%if XOS == XOS_DJGPP
|
||||
|
||||
%define TEXT .text
|
||||
%define DATA .data
|
||||
%define CONST .rodata
|
||||
|
||||
%macro GET_GC 0
|
||||
mov gc, [_GlideRoot + curGC]
|
||||
%endmacro
|
||||
|
||||
%endif
|
||||
|
||||
;---------------------------------------
|
||||
; Linux
|
||||
;---------------------------------------
|
||||
%if XOS == XOS_LINUX
|
||||
|
||||
%define TEXT .text align=32
|
||||
%define DATA .data align=32
|
||||
%define CONST .rodata align=32
|
||||
|
||||
%macro GET_GC 0
|
||||
mov gc, [_GlideRoot + curGC]
|
||||
%endmacro
|
||||
|
||||
%endif
|
||||
|
||||
;---------------------------------------
|
||||
; WATCOM/DOS
|
||||
;---------------------------------------
|
||||
%if XOS == XOS_WATCD
|
||||
|
||||
%define TEXT _TEXT align=1 public use32 class=CODE FLAT
|
||||
%define DATA _DATA align=4 public use32 class=DATA FLAT
|
||||
%define CONST CONST2 align=4 public use32 class=DATA FLAT
|
||||
|
||||
%macro GET_GC 0
|
||||
mov gc, [_GlideRoot + curGC]
|
||||
%endmacro
|
||||
|
||||
%endif
|
||||
@@ -1,333 +0,0 @@
|
||||
;; THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
;; PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
;; TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
;; INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
;; DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
;; THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
;; EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
;; FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
;;
|
||||
;; USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
;; RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
;; TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
;; AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
;; SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
;; THE UNITED STATES.
|
||||
;;
|
||||
;; COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
;;
|
||||
;; $Header$
|
||||
;; $Revision$
|
||||
;; $Log$
|
||||
;; Revision 1.1.2.2 2005/04/23 18:36:36 koolsmoky
|
||||
;; fixed 3dnow! and mmx optimizations
|
||||
;;
|
||||
;; Revision 1.1.2.1 2004/12/23 20:45:56 koolsmoky
|
||||
;; converted to nasm syntax
|
||||
;; added x86 asm, 3dnow! triangle and mmx, 3dnow! texture download optimizations
|
||||
;;
|
||||
;; Revision 1.1.1.1.8.1 2003/11/03 13:34:30 dborca
|
||||
;; Voodoo2 happiness (DJGPP & Linux)
|
||||
;;
|
||||
;; Revision 1.1.8.7 2003/09/12 05:08:35 koolsmoky
|
||||
;; preparing for graphic context checks
|
||||
;;
|
||||
;; Revision 1.1.8.6 2003/07/07 23:29:06 koolsmoky
|
||||
;; cleaned logs
|
||||
;;
|
||||
;;
|
||||
;; Revision 1.1 2000/06/15 00:27:43 joseph
|
||||
;; Initial checkin into SourceForge.
|
||||
;;
|
||||
;; 10 8/17/99 6:35p Atai
|
||||
;; fixed amd debug mode
|
||||
;;
|
||||
;; 9 4/08/99 1:22p Atai
|
||||
;; added contect check for _grTexDownload_3DNow_MMX
|
||||
;;
|
||||
;; 8 3/19/99 11:26a Peter
|
||||
;; expose direct fifo for gl
|
||||
;;
|
||||
;; 7 2/02/99 4:36p Peter
|
||||
;; download through lfb rather than texture port
|
||||
;;
|
||||
;; 6 12/17/98 2:36p Atai
|
||||
;; check in Norbert's fix for texture download width correction
|
||||
;;
|
||||
;; 5 12/07/98 11:33a Peter
|
||||
;; norbert's re-fixes of my merge
|
||||
;;
|
||||
;; 4 11/02/98 5:34p Atai
|
||||
;; merge direct i/o code
|
||||
;;
|
||||
;; 3 10/20/98 5:34p Atai
|
||||
;; added #ifdefs for hwc
|
||||
;;
|
||||
;; 2 10/14/98 12:05p Peter
|
||||
;; fixed my effed up assumption about non-volatile regs
|
||||
;;
|
||||
;; 1 10/09/98 6:48p Peter
|
||||
;; 3DNow!(tm) version of wide texture downloads
|
||||
;;
|
||||
;; 3 10/07/98 9:43p Peter
|
||||
;; triangle procs for 3DNow!(tm)
|
||||
;;
|
||||
;; 2 10/05/98 7:43p Peter
|
||||
;; 3DNow!(tm) happiness everywhere
|
||||
;;
|
||||
;; 1 10/05/98 6:01p Peter
|
||||
;; mmx stuff for 3DNow!(tm) capable processors
|
||||
;;
|
||||
|
||||
%include "xos.inc"
|
||||
|
||||
extrn _FifoMakeRoom, 12
|
||||
|
||||
%MACRO _grCommandTransportMakeRoom 3
|
||||
push %3
|
||||
push %2
|
||||
push %1
|
||||
call _FifoMakeRoom
|
||||
add esp, 12
|
||||
%ENDMACRO ; _grCommandTransportMakeRoom
|
||||
|
||||
;;; Definitions of cvg regs and glide root structures.
|
||||
%INCLUDE "fxgasm.h"
|
||||
|
||||
; Arguments (STKOFF = 16 from 4 dword pushes)
|
||||
STACKOFFSET equ 16
|
||||
_gc$ equ 4 + STACKOFFSET
|
||||
_baseAddr$ equ 8 + STACKOFFSET
|
||||
_maxS$ equ 12 + STACKOFFSET
|
||||
_minT$ equ 16 + STACKOFFSET
|
||||
_maxT$ equ 20 + STACKOFFSET
|
||||
_texData$ equ 24 + STACKOFFSET
|
||||
|
||||
;; NB: The first set of registers (eax, ecx, and edx) are volatile across
|
||||
;; function calls. The remaining registers are supposedly non-volatile
|
||||
;; so they only store things that are non-volatile across the call.
|
||||
|
||||
%define fifo ebp ; fifo ptr in inner loop
|
||||
%define gc esi ; graphics context
|
||||
%define dataPtr edi ; pointer to exture data to be downloaded
|
||||
%define curT ebx ; counter for texture scan lines (t-coordinate)
|
||||
%define curS ecx ; texture s-coordinate
|
||||
%define fRoom edx ; room available in fifo (in bytes)
|
||||
|
||||
;--------------------------------------------------------------------------
|
||||
;
|
||||
; GL_AMD3D, GL_MMX
|
||||
;
|
||||
;--------------------------------------------------------------------------
|
||||
|
||||
segment TEXT
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF GL_AMD3D
|
||||
proc _grTexDownload_3DNow_MMX, 24
|
||||
%ENDIF
|
||||
%IFDEF GL_MMX
|
||||
proc _grTexDownload_MMX, 24
|
||||
%ENDIF
|
||||
|
||||
push ebx ; save caller's register variable
|
||||
mov curT, [esp + _maxT$ - 12] ; curT = maxT
|
||||
|
||||
push esi ; save caller's register variable
|
||||
mov eax, [esp + _minT$ - 8] ; minT
|
||||
|
||||
push edi ; save caller's register variable
|
||||
mov gc, [esp + _gc$ - 4] ; gc
|
||||
|
||||
push ebp ; save caller's register variable
|
||||
mov dataPtr, [esp + _texData$]; dataPtr
|
||||
|
||||
%IFDEF GLIDE_ALT_TAB
|
||||
test gc, gc
|
||||
je .dlDone
|
||||
; mov edx, [gc + windowed]
|
||||
; test edx, 1
|
||||
; jnz .pastContextTest
|
||||
mov edx, DWORD [gc+lostContext]
|
||||
mov ecx, [edx]
|
||||
test ecx, 1
|
||||
jnz .dlDone
|
||||
;.pastContextTest:
|
||||
%ENDIF
|
||||
|
||||
sub curT, eax ; curT = maxT - minT
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr
|
||||
|
||||
mov curS, [esp + _maxS$] ; curS = maxS = scanline width in DWORDs
|
||||
add curT, 1 ; curT = maxT - minT + 1
|
||||
|
||||
%IFDEF GL_AMD3D
|
||||
femms ; we'll use MMX/3DNow!, make sure FPU register cleared
|
||||
%ENDIF
|
||||
%IFDEF GL_MMX
|
||||
emms ; we'll use MMX
|
||||
%ENDIF
|
||||
|
||||
movd mm3, [esp + _baseAddr$] ; 0 | address of texture to download
|
||||
|
||||
add curS, curS ;
|
||||
add curS, curS ; scan line width (in bytes)
|
||||
mov eax, [esp + _minT$] ; 0 | minT
|
||||
|
||||
mov [esp + _maxS$], curS ; save scan line width (in bytes)
|
||||
mov edx, curS ;
|
||||
|
||||
add edx, edx ; packetHdr<21:3> = maxS = scanline width in DWORDs
|
||||
|
||||
or edx, 0xc0000005 ; packetHdr<31:30> = texture port
|
||||
; packetHdr<21:3> = maxS
|
||||
; packetHdr<2:0> = packetType 5
|
||||
|
||||
movd mm1, edx ; 0 | packetHdr
|
||||
movd mm2, eax ; 0 | minT
|
||||
psllq mm2, 9 ; 0 | TEX_ROW_ADDR_INCR(minT) = minT << 9
|
||||
|
||||
paddd mm3, mm2 ; 0 | texAddr = texBaseAddr + TEX_ROW_ADDR_INCR(minT)
|
||||
movd mm2, [gc + tex_ptr] ; 0 | gc->tex_ptr
|
||||
psubd mm3, mm2 ; 0 | texAddr - gc->tex_ptr
|
||||
mov eax, 0x200 ; TEX_ROW_ADDR_INCR(1) = 1 << 9
|
||||
movd mm2, eax ; 0 | TEX_ROW_ADDR_INCR(1)
|
||||
psllq mm2, 32 ; TEX_ROW_ADDR_INCR(1) | 0
|
||||
|
||||
mov fRoom, [gc + fifoRoom] ; get available fifoRoom (in bytes)
|
||||
punpckldq mm1, mm3 ; hdr2 = texAddr - gc->tex_ptr | hdr1 = packetHdr
|
||||
|
||||
;; ebx = curT, edi = dataPtr, esi = gc, ebp = fifo, ecx = curS = maxS
|
||||
;; edx = fifoRoom, mm1 = texAddr-gc->tex_ptr|packetHdr, mm2 = TEX_ROW_ADDR_INCR(1)|0
|
||||
|
||||
test fifo, 4 ; is fifo QWORD aligned ?
|
||||
jz .startDownload ; yup, start texture download
|
||||
|
||||
cmp fRoom, 4 ; enough room for NULL packet in fifo?
|
||||
jge .mmxAlignFifo ; yes, write NULL packet to align fifo
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
_grCommandTransportMakeRoom 4, 0, __LINE__; make fifo room
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr modified by _grCommandTransportMakeRoom, reload
|
||||
|
||||
mov fRoom, [gc + fifoRoom] ; fifoRoom modified by _grCommandTransportMakeRoom, reload
|
||||
mov curS, [esp + _maxS$] ; reload maxS (destroyed by call to _grCommandTransportMakeRoom)
|
||||
|
||||
test fifo, 4 ; new fifoPtr QWORD aligned ?
|
||||
jz .startDownload ; yup, start texture download
|
||||
|
||||
.mmxAlignFifo:
|
||||
|
||||
mov DWORD [fifo], 0 ; write NULL packet
|
||||
sub fRoom, 4 ; fifoRoom -= 4
|
||||
|
||||
mov [gc + fifoRoom], fRoom ; store new fifoRoom
|
||||
add fifo, 4 ; fifoPtr += 4
|
||||
|
||||
%IFDEF GLIDE_DEBUG
|
||||
mov [gc + checkPtr], fifo ; checkPtr
|
||||
%ENDIF
|
||||
|
||||
mov [gc + fifoPtr], fifo ; store new fifoPtr
|
||||
jmp .startDownload ; fifo aligned, download texture now
|
||||
|
||||
ALIGN 32
|
||||
|
||||
;; ebx = curT, edi = dataPtr, esi = gc, ebp = fifo, ecx = maxS = curS
|
||||
;; edx=fifoRoom, mm1 = texAddr-gc->tex_ptr|packetHdr, mm2 = TEX_ROW_ADDR_INCR(1)|0
|
||||
|
||||
.loopT:
|
||||
|
||||
%IFDEF GLIDE_DEBUG
|
||||
|
||||
;; Make sure that we have a QWORD aligned fifoPtr; force GP if not aligned
|
||||
|
||||
test fifo, 4 ; is fifoPtr QWORD aligned ?
|
||||
jz .alignmentOK ; yup, continue
|
||||
|
||||
xor eax, eax ; create 0
|
||||
mov [eax], eax ; move to DS:[0] forces GP
|
||||
.alignmentOK:
|
||||
%ENDIF ; GLIDE_DEBUG
|
||||
|
||||
;; Compute packet header words
|
||||
;; hdr1: downloadSpace[31:30] numWords[21:3] packetType[2:0]
|
||||
;; hdr2: download address[29:0]
|
||||
|
||||
movq [fifo], mm1 ; store hdr2 | hdr1
|
||||
add fifo, 8 ; increment fifo ptr (hdr1 + hdr2)
|
||||
|
||||
;; S coordinate inner loop unrolled for 8 texels a write
|
||||
|
||||
.loopS:
|
||||
|
||||
movq mm0, [dataPtr] ; load 64 bit data (8 texels)
|
||||
add fifo, 8 ; pre-increment fifoPtr += 2 * sizeof(FxU32)
|
||||
|
||||
add dataPtr, 8 ; dataPtr += 2 * sizeof(FxU32)
|
||||
sub curS, 8 ; curS -= 2 * sizeof(FxU32)
|
||||
|
||||
movq [fifo - 8], mm0 ; *fifoPtr = texelData[64 bits]
|
||||
jnz .loopS ; loop while curS > 0
|
||||
|
||||
mov ecx, [gc + fifoPtr] ; old fifo ptr
|
||||
nop ; filler
|
||||
|
||||
mov eax, fifo ; new fifo ptr
|
||||
mov [gc + fifoPtr], fifo ; save new fifo ptr
|
||||
|
||||
%IFDEF GLIDE_DEBUG
|
||||
mov [gc + checkPtr], fifo ; checkPtr
|
||||
%ENDIF
|
||||
|
||||
sub eax, ecx ; new fifo ptr - old fifo ptr = fifo space used up
|
||||
mov curS, [esp + _maxS$] ; curS = maxS = width of scanline (bytes)
|
||||
|
||||
sub fRoom, eax ; new fifo space available = old fifo space available - fifo space used up = new fifo space available
|
||||
sub curT, 1 ; curT--
|
||||
|
||||
mov [gc + fifoRoom], fRoom ; save new fifo space available
|
||||
jz .dlDone ; loop while curT > 0
|
||||
|
||||
;; Check for room to write the next texture scanline
|
||||
|
||||
;; ebx = curT, edi = dataPtr, esi = gc, ebp = fifo
|
||||
;; edx = fifoRoom, mm1 = texAddr|packetHdr, mm2 = TEX_ROW_ADDR_INCR(1)|0
|
||||
|
||||
paddd mm1, mm2 ; texAddr+=TEX_ROW_ADDR_INCR(1) | packetHdr
|
||||
mov esp, esp ; filler
|
||||
.startDownload:
|
||||
lea eax, [curS+8] ; fifo space needed = scan line width + header size
|
||||
|
||||
cmp fRoom, eax ; fifo space available >= fifo space required ?
|
||||
jge .loopT ; yup, write next scan line
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
_grCommandTransportMakeRoom eax, 0, __LINE__; make fifo room (if fifoPtr QWORD aligned before
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr was modified by _grCommandTransportMakeRoom, reload
|
||||
|
||||
mov fRoom, [gc + fifoRoom] ; fifoRoom was modified by _grCommandTransportMakeRoom, reload
|
||||
mov curS, [esp + _maxS$] ; curS = maxS = width of scanline (bytes)
|
||||
jmp .loopT ; we now have enough fifo room, write next scanline
|
||||
|
||||
.dlDone:
|
||||
%IFDEF GL_AMD3D
|
||||
femms ; exit 3DNow!(tm) state
|
||||
%ENDIF
|
||||
%IFDEF GL_MMX
|
||||
emms ; exit MMX state
|
||||
%ENDIF
|
||||
|
||||
pop ebp ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
pop esi ; restore caller's register variable
|
||||
pop ebx ; restore caller's register variable
|
||||
|
||||
ret ; pop 6 DWORD parameters and return
|
||||
endp
|
||||
@@ -1,242 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
** $Header$
|
||||
** $Log$
|
||||
** Revision 1.1.1.1 1999/12/07 21:42:38 joseph
|
||||
** Initial checkin into SourceForge.
|
||||
**
|
||||
**
|
||||
** 1 10/08/98 11:30a Brent
|
||||
**
|
||||
** 2 10/05/98 7:43p Peter
|
||||
** 3DNow!(tm) happiness everywhere
|
||||
**
|
||||
** 1 10/03/98 3:37p Peter
|
||||
** Texture download vectors
|
||||
**
|
||||
*/
|
||||
|
||||
#include <3dfx.h>
|
||||
#define FX_DLL_DEFINITION
|
||||
#include <fxdll.h>
|
||||
#include <glide.h>
|
||||
#include "fxglide.h"
|
||||
|
||||
void FX_CSTYLE
|
||||
_grTexDownload_Default_8_1(struct GrGC_s* gc, const FxU32 tmuBaseAddr,
|
||||
const FxU32 maxS, const FxU32 minT, const FxU32 maxT,
|
||||
void* texData)
|
||||
{
|
||||
#define FN_NAME "_grTexDownload_Default_8_1"
|
||||
FxU32
|
||||
t = minT,
|
||||
tex_address = tmuBaseAddr + TEX_ROW_ADDR_INCR(t);
|
||||
const FxU8
|
||||
*src8 = (const FxU8*)texData;
|
||||
|
||||
for (; t <= maxT; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_8(tex_address, (const FxU32)*(const FxU8*)src8);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src8 += 1;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
void FX_CSTYLE
|
||||
_grTexDownload_Default_8_2(struct GrGC_s* gc, const FxU32 tmuBaseAddr,
|
||||
const FxU32 maxS, const FxU32 minT, const FxU32 maxT,
|
||||
void* texData)
|
||||
{
|
||||
#define FN_NAME "_grTexDownload_Default_8_2"
|
||||
FxU32
|
||||
t = minT,
|
||||
tex_address = tmuBaseAddr + TEX_ROW_ADDR_INCR(t);
|
||||
const FxU8
|
||||
*src8 = (const FxU8*)texData;
|
||||
|
||||
for (; t <= maxT; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_8(tex_address, (const FxU32)*(const FxU16*)src8);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src8 += 2;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
void FX_CSTYLE
|
||||
_grTexDownload_Default_8_4(struct GrGC_s* gc, const FxU32 tmuBaseAddr,
|
||||
const FxU32 maxS, const FxU32 minT, const FxU32 maxT,
|
||||
void* texData)
|
||||
{
|
||||
#define FN_NAME "_grTexDownload_Default_8_4"
|
||||
FxU32
|
||||
t = minT,
|
||||
tex_address = tmuBaseAddr + TEX_ROW_ADDR_INCR(t);
|
||||
const FxU8
|
||||
*src8 = (const FxU8*)texData;
|
||||
|
||||
for (; t <= maxT; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_8(tex_address, *(const FxU32*)src8);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src8 += 4;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
void FX_CSTYLE
|
||||
_grTexDownload_Default_8_WideS(struct GrGC_s* gc, const FxU32 tmuBaseAddr,
|
||||
const FxU32 maxS, const FxU32 minT, const FxU32 maxT,
|
||||
void* texData)
|
||||
{
|
||||
#define FN_NAME "_grTexDownload_Default_8_WideS"
|
||||
FxU32
|
||||
t = minT,
|
||||
tex_address;
|
||||
const FxU8
|
||||
*src8 = (const FxU8*)texData;
|
||||
|
||||
for (; t <= maxT; t++) {
|
||||
tex_address = tmuBaseAddr + TEX_ROW_ADDR_INCR(t);
|
||||
|
||||
LINEAR_WRITE_BEGIN(maxS, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
{
|
||||
FxU32 s;
|
||||
|
||||
for (s = 0; s < maxS; s += 2) {
|
||||
const FxU32 t0 = *(const FxU32*)(src8 );
|
||||
const FxU32 t1 = *(const FxU32*)(src8 + sizeof(FxU32));
|
||||
|
||||
LINEAR_WRITE_SET_8(tex_address , t0);
|
||||
LINEAR_WRITE_SET_8(tex_address + sizeof(FxU32), t1);
|
||||
|
||||
src8 += 8;
|
||||
tex_address += (sizeof(FxU32) << 1);
|
||||
}
|
||||
}
|
||||
LINEAR_WRITE_END();
|
||||
}
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
extern void FX_CSTYLE
|
||||
_grTexDownload_Default_16_1(struct GrGC_s* gc, const FxU32 tmuBaseAddr,
|
||||
const FxU32 maxS, const FxU32 minT, const FxU32 maxT,
|
||||
void* texData)
|
||||
{
|
||||
#define FN_NAME "_grTexDownload_Default_16_1"
|
||||
FxU32
|
||||
t = minT,
|
||||
tex_address = tmuBaseAddr + TEX_ROW_ADDR_INCR(t);
|
||||
const FxU16
|
||||
*src16 = (const FxU16*)texData;
|
||||
|
||||
for (; t <= maxT; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_16(tex_address, (const FxU32)*(const FxU16*)src16);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src16 += 1;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
extern void FX_CSTYLE
|
||||
_grTexDownload_Default_16_2(struct GrGC_s* gc, const FxU32 tmuBaseAddr,
|
||||
const FxU32 maxS, const FxU32 minT, const FxU32 maxT,
|
||||
void* texData)
|
||||
{
|
||||
#define FN_NAME "_grTexDownload_Default_16_2"
|
||||
FxU32
|
||||
t = minT,
|
||||
tex_address = tmuBaseAddr + TEX_ROW_ADDR_INCR(t);
|
||||
const FxU16
|
||||
*src16 = (const FxU16*)texData;
|
||||
|
||||
for (; t <= maxT; t++) {
|
||||
LINEAR_WRITE_BEGIN(1, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
LINEAR_WRITE_SET_16(tex_address, *(const FxU32*)src16);
|
||||
LINEAR_WRITE_END();
|
||||
|
||||
src16 += 2;
|
||||
tex_address += TEX_ROW_ADDR_INCR(1);
|
||||
}
|
||||
#undef FN_NAME
|
||||
}
|
||||
|
||||
extern void FX_CSTYLE
|
||||
_grTexDownload_Default_16_WideS(struct GrGC_s* gc, const FxU32 tmuBaseAddr,
|
||||
const FxU32 maxS, const FxU32 minT, const FxU32 maxT,
|
||||
void* texData)
|
||||
{
|
||||
#define FN_NAME "_grTexDownload_Default_16_WideS"
|
||||
FxU32
|
||||
t = minT,
|
||||
tex_address;
|
||||
const FxU16
|
||||
*src16 = (const FxU16*)texData;
|
||||
|
||||
for (; t <= maxT; t++) {
|
||||
tex_address = tmuBaseAddr + TEX_ROW_ADDR_INCR(t);
|
||||
|
||||
/* Loop unrolled to process 2 dwords per iteration */
|
||||
LINEAR_WRITE_BEGIN(maxS, kLinearWriteTex,
|
||||
(FxU32)tex_address - (FxU32)gc->tex_ptr,
|
||||
0x00UL, 0x00UL);
|
||||
{
|
||||
FxU32 s;
|
||||
|
||||
for (s = 0; s < maxS; s += 2) {
|
||||
const FxU32 t0 = *(const FxU32*)(src16 );
|
||||
const FxU32 t1 = *(const FxU32*)(src16 + 2);
|
||||
|
||||
GDBG_INFO(195, "s = %d, t= %d, address = 0x%x\n",
|
||||
s, t, (FxU32) tex_address - (FxU32) gc->tex_ptr + 0x200000);
|
||||
LINEAR_WRITE_SET_16(tex_address , t0);
|
||||
LINEAR_WRITE_SET_16(tex_address + 4, t1);
|
||||
|
||||
tex_address += 8;
|
||||
src16 += 4;
|
||||
}
|
||||
}
|
||||
LINEAR_WRITE_END();
|
||||
}
|
||||
#undef FN_NAME
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,65 +0,0 @@
|
||||
@echo off
|
||||
REM
|
||||
REM if FX_GLIDE_TEST_SRCIMG is not initiated, the default directory is
|
||||
REM \3dfx\devel\sst1\glide\images
|
||||
REM if FX_GLIDE_TEST_DSTIMG is not initiated, the default directory is
|
||||
REM \3dfx\devel\sst1\glide\images
|
||||
REM if FX_GLIDE_TEST_DIFFIMG is not initiated, the default directory is
|
||||
REM \3dfx\devel\sst1\glide\images
|
||||
REM
|
||||
if [%FX_GLIDE_TEST_DIFFIMG%]==[] goto Default1
|
||||
|
||||
goto Output1
|
||||
|
||||
:Default1
|
||||
set FX_GLIDE_TEST_DIFFIMG=%BUILD_ROOT_SST1%\glide\images
|
||||
|
||||
:Output1
|
||||
set ddir=%FX_GLIDE_TEST_DIFFIMG%
|
||||
|
||||
if [%FX_GLIDE_TEST_SRCIMG%]==[] goto Default2
|
||||
|
||||
goto Output2
|
||||
|
||||
:Default2
|
||||
set FX_GLIDE_TEST_SRCIMG=%BUILD_ROOT_SST1%\glide\images
|
||||
|
||||
:Output2
|
||||
set sdir=%FX_GLIDE_TEST_SRCIMG%
|
||||
|
||||
if [%FX_GLIDE_TEST_DSTIMG%]==[] goto Default3
|
||||
|
||||
goto Output3
|
||||
|
||||
:Default3
|
||||
set FX_GLIDE_TEST_DSTIMG=%BUILD_ROOT_SST1%\glide\images
|
||||
|
||||
:Output3
|
||||
set tdir=%FX_GLIDE_TEST_DSTIMG%
|
||||
|
||||
@echo on
|
||||
isub -v %sdir%\test00.vgm %tdir%\test00.tst %ddir%\test00.tga
|
||||
isub -v %sdir%\test01.vgm %tdir%\test01.tst %ddir%\test01.tga
|
||||
isub -v %sdir%\test02.vgm %tdir%\test02.tst %ddir%\test02.tga
|
||||
isub -v %sdir%\test03.vgm %tdir%\test03.tst %ddir%\test03.tga
|
||||
isub -v %sdir%\test04.vgm %tdir%\test04.tst %ddir%\test04.tga
|
||||
isub -v %sdir%\test05.vgm %tdir%\test05.tst %ddir%\test05.tga
|
||||
isub -v %sdir%\test06.vgm %tdir%\test06.tst %ddir%\test06.tga
|
||||
isub -v %sdir%\test07.vgm %tdir%\test07.tst %ddir%\test07.tga
|
||||
isub -v %sdir%\test08.vgm %tdir%\test08.tst %ddir%\test08.tga
|
||||
isub -v %sdir%\test09_0.vgm %tdir%\test09_0.tst %ddir%\test09_0.tga
|
||||
isub -v %sdir%\test09_1.vgm %tdir%\test09_1.tst %ddir%\test09_1.tga
|
||||
isub -v %sdir%\test10_0.vgm %tdir%\test10_0.tst %ddir%\test10_0.tga
|
||||
isub -v %sdir%\test10_1.vgm %tdir%\test10_1.tst %ddir%\test10_1.tga
|
||||
isub -v %sdir%\test13.vgm %tdir%\test13.tst %ddir%\test13.tga
|
||||
isub -v %sdir%\test16.vgm %tdir%\test16.tst %ddir%\test16.tga
|
||||
isub -v %sdir%\test17_0.vgm %tdir%\test17_0.tst %ddir%\test17_0.tga
|
||||
isub -v %sdir%\test17_1.vgm %tdir%\test17_1.tst %ddir%\test17_1.tga
|
||||
isub -v %sdir%\test17_2.vgm %tdir%\test17_2.tst %ddir%\test17_2.tga
|
||||
isub -v %sdir%\test17_3.vgm %tdir%\test17_3.tst %ddir%\test17_3.tga
|
||||
isub -v %sdir%\test17_4.vgm %tdir%\test17_4.tst %ddir%\test17_4.tga
|
||||
isub -v %sdir%\test18.vgm %tdir%\test18.tst %ddir%\test18.tga
|
||||
isub -v %sdir%\test19_0.vgm %tdir%\test19_0.tst %ddir%\test19_0.tga
|
||||
isub -v %sdir%\test19_1.vgm %tdir%\test19_1.tst %ddir%\test19_1.tga
|
||||
isub -v %sdir%\test19_2.vgm %tdir%\test19_2.tst %ddir%\test19_2.tga
|
||||
isub -v %sdir%\test19_3.vgm %tdir%\test19_3.tst %ddir%\test19_3.tga
|
||||
Binary file not shown.
@@ -1,441 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#ifndef __linux__
|
||||
#include <conio.h>
|
||||
#endif
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <glide.h>
|
||||
#include "tlib.h"
|
||||
|
||||
typedef struct {
|
||||
FxU32 signature;
|
||||
FxU16 width;
|
||||
FxU16 height;
|
||||
FxU8 depth;
|
||||
FxU8 type;
|
||||
void *data;
|
||||
} LFB_Img;
|
||||
|
||||
GrHwConfiguration hwconfig;
|
||||
static char version[80];
|
||||
|
||||
static const char name[] = "display";
|
||||
static const char purpose[] = "display a 16 bit frame buffer (565 format) dump out";
|
||||
static const char usage[] = "-n <frames> -r <res> -s srcimage -t testimage";
|
||||
|
||||
static const char *sourceFormatString[] = {
|
||||
"GR_LFB_SRC_FMT_565 ",
|
||||
"GR_LFB_SRC_FMT_555 ",
|
||||
"GR_LFB_SRC_FMT_1555 ",
|
||||
"INVALID FORMAT ",
|
||||
"GR_LFB_SRC_FMT_888 ",
|
||||
"GR_LFB_SRC_FMT_8888 ",
|
||||
"INVALID FORMAT ",
|
||||
"INVALID FORMAT ",
|
||||
"INVALID FORMAT ",
|
||||
"INVALID FORMAT ",
|
||||
"INVALID FORMAT ",
|
||||
"INVALID FORMAT ",
|
||||
"GR_LFB_SRC_FMT_565_DEPTH ",
|
||||
"GR_LFB_SRC_FMT_555_DEPTH ",
|
||||
"GR_LFB_SRC_FMT_1555_DEPTH",
|
||||
"GR_LFB_SRC_FMT_ZA16 "
|
||||
};
|
||||
|
||||
static void imageConvert( void *dst,
|
||||
void *src,
|
||||
GrLfbSrcFmt_t format,
|
||||
FxU32 *bpp );
|
||||
|
||||
int main( int argc, char **argv)
|
||||
{
|
||||
char match;
|
||||
char **remArgs;
|
||||
int rv;
|
||||
|
||||
GrScreenResolution_t resolution = GR_RESOLUTION_640x480;
|
||||
float scrWidth = 640.0f;
|
||||
float scrHeight = 480.0f;
|
||||
int frames = -1;
|
||||
char srcfname[80], dstfname[80];
|
||||
FILE *fp;
|
||||
void *mem;
|
||||
FxU32 filesize;
|
||||
LFB_Img src, dst, diff;
|
||||
FxBool txtdisplay = FXTRUE;
|
||||
|
||||
void *image = NULL;
|
||||
FxU32 bpp;
|
||||
|
||||
GrLfbSrcFmt_t sourceFormat;
|
||||
|
||||
static FxU32 imageWidth;
|
||||
static FxU32 imageHeight;
|
||||
|
||||
srcfname[0] = 0;
|
||||
dstfname[0] = 0;
|
||||
|
||||
/* Process Command Line Arguments */
|
||||
while( (rv = tlGetOpt( argc, argv, "nrst", &match, &remArgs )) ) {
|
||||
if ( rv == -1 ) {
|
||||
printf( "Unrecognized command line argument\n" );
|
||||
printf( "%s %s\n", name, usage );
|
||||
printf( "Available resolutions:\n%s\n",
|
||||
tlGetResolutionList() );
|
||||
exit(1);
|
||||
}
|
||||
switch( match ) {
|
||||
case 'n':
|
||||
frames = atoi( remArgs[0] );
|
||||
break;
|
||||
case 'r':
|
||||
resolution = tlGetResolutionConstant( remArgs[0],
|
||||
&scrWidth,
|
||||
&scrHeight );
|
||||
break;
|
||||
case 's':
|
||||
strcpy(srcfname, remArgs[0]);
|
||||
break;
|
||||
case 't':
|
||||
strcpy(dstfname, remArgs[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
tlSetScreen( scrWidth, scrHeight );
|
||||
|
||||
grGlideGetVersion( version );
|
||||
|
||||
printf( "%s:\n%s\n", name, purpose );
|
||||
printf( "%s\n", version );
|
||||
printf( "Resolution: %s\n", tlGetResolutionString( resolution ) );
|
||||
if ( frames == -1 ) {
|
||||
printf( "Press A Key To Begin Test.\n" );
|
||||
tlGetCH();
|
||||
}
|
||||
|
||||
/* Initialize Glide */
|
||||
grGlideInit();
|
||||
assert( grSstQueryHardware( &hwconfig ) );
|
||||
grSstSelect( 0 );
|
||||
assert( grSstWinOpen( 0,
|
||||
resolution,
|
||||
GR_REFRESH_60Hz,
|
||||
GR_COLORFORMAT_ABGR,
|
||||
GR_ORIGIN_UPPER_LEFT,
|
||||
2, 1 ) );
|
||||
|
||||
tlConSet( 0.0f, 0.0f, 1.0f, 1.0f,
|
||||
60, 30, 0xffffff );
|
||||
|
||||
/* Set up Render State - disable dithering */
|
||||
grDitherMode( GR_DITHER_DISABLE );
|
||||
|
||||
/* Load src image from disk */
|
||||
|
||||
if (srcfname[0]) {
|
||||
fp = fopen(srcfname, "rb");
|
||||
if (fp == NULL)
|
||||
srcfname[0] = 0;
|
||||
else {
|
||||
fseek(fp, 0, SEEK_END);
|
||||
filesize = ftell(fp);
|
||||
rewind(fp);
|
||||
|
||||
/* readng the LFB file header */
|
||||
fread(&src.signature, 4, 1, fp);
|
||||
if (src.signature != IMAGE_SRLE) {
|
||||
printf("%s file type incorrect\n", srcfname);
|
||||
exit(1);
|
||||
}
|
||||
fread(&src.width, 2, 1, fp);
|
||||
fread(&src.height, 2, 1, fp);
|
||||
fread(&src.depth, 1, 1, fp);
|
||||
fread(&src.type, 1, 1, fp);
|
||||
|
||||
mem = malloc(filesize-6);
|
||||
src.data = malloc(src.width*src.height*(src.depth/8));
|
||||
/* reading the LFB data */
|
||||
fread(mem, filesize-6, 1, fp);
|
||||
/* Simple16BitDecode(src.width,src.height,mem,src.data); */
|
||||
SimpleRleDecode(src.width,src.height,2,mem,src.data);
|
||||
|
||||
free(mem);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
/* Load dst image from disk */
|
||||
|
||||
if (dstfname[0]) {
|
||||
fp = fopen(dstfname, "rb");
|
||||
if (fp == NULL)
|
||||
dstfname[0] = 0;
|
||||
else {
|
||||
fseek(fp, 0, SEEK_END);
|
||||
filesize = ftell(fp);
|
||||
rewind(fp);
|
||||
|
||||
/* readng the LFB file header */
|
||||
fread(&dst.signature, 4, 1, fp);
|
||||
if (dst.signature != IMAGE_SRLE) {
|
||||
printf("%s file type incorrect\n", dstfname);
|
||||
exit(1);
|
||||
}
|
||||
fread(&dst.width, 2, 1, fp);
|
||||
fread(&dst.height, 2, 1, fp);
|
||||
fread(&dst.depth, 1, 1, fp);
|
||||
fread(&dst.type, 1, 1, fp);
|
||||
|
||||
mem = malloc(filesize-6);
|
||||
dst.data = malloc(dst.width*dst.height*(dst.depth/8));
|
||||
/* reading the LFB data */
|
||||
fread(mem, filesize-6, 1, fp);
|
||||
SimpleRleDecode(dst.width,dst.height,2,mem,dst.data);
|
||||
|
||||
free(mem);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
diff.width = 0;
|
||||
diff.height = 0;
|
||||
|
||||
if (srcfname[0] && dstfname[0]) {
|
||||
FxU32 count;
|
||||
FxU16 *srcptr, *dstptr, *difptr;
|
||||
|
||||
if ((src.width == dst.width) && (src.height == dst.height)) {
|
||||
diff.width = src.width;
|
||||
diff.height = src.height;
|
||||
diff.depth = src.depth;
|
||||
diff.data = malloc(diff.width*diff.height*(diff.depth/8));
|
||||
count = diff.width * diff.height;
|
||||
srcptr = src.data;
|
||||
dstptr = dst.data;
|
||||
difptr = diff.data;
|
||||
while (count) {
|
||||
if (*srcptr == *dstptr)
|
||||
*difptr = 0;
|
||||
else
|
||||
*difptr = *srcptr ^ *dstptr;
|
||||
srcptr++; dstptr++; difptr++;
|
||||
count--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
sourceFormat = GR_LFB_SRC_FMT_565;
|
||||
|
||||
if (srcfname[0]) {
|
||||
imageWidth = src.width;
|
||||
imageHeight = src.height;
|
||||
image = calloc( imageWidth * imageHeight, sizeof( FxU32 ) );
|
||||
imageConvert( image, src.data, sourceFormat, &bpp );
|
||||
}
|
||||
else if (dstfname[0]) {
|
||||
imageWidth = dst.width;
|
||||
imageHeight = dst.height;
|
||||
image = calloc( imageWidth * imageHeight, sizeof( FxU32 ) );
|
||||
imageConvert( image, dst.data, sourceFormat, &bpp );
|
||||
}
|
||||
if ( ( imageWidth > (FxU32)scrWidth ) ||
|
||||
( imageHeight > (FxU32)scrHeight ) )
|
||||
exit(1);
|
||||
|
||||
while( frames-- ) {
|
||||
|
||||
grBufferClear( 0x00303030, 0, 0 );
|
||||
|
||||
|
||||
grLfbWriteRegion( GR_BUFFER_BACKBUFFER,
|
||||
0, 0, sourceFormat,
|
||||
imageWidth, imageHeight, imageWidth*bpp, image );
|
||||
tlConClear();
|
||||
if (txtdisplay) {
|
||||
tlConOutput("1 - lfb source format (%s)\n",
|
||||
sourceFormatString[sourceFormat] );
|
||||
if (srcfname[0])
|
||||
tlConOutput("s - display source image\n");
|
||||
else
|
||||
tlConOutput("no source image\n");
|
||||
if (dstfname[0])
|
||||
tlConOutput("t - display test image\n");
|
||||
else
|
||||
tlConOutput("no test image\n");
|
||||
if (srcfname[0] && dstfname[0]) {
|
||||
if (diff.width > 0)
|
||||
tlConOutput("d - display differences\n");
|
||||
else
|
||||
tlConOutput("source and test image size are not the same\n");
|
||||
}
|
||||
|
||||
tlConOutput("space - turn on/off text display\n");
|
||||
|
||||
tlConOutput("any other key to quit\n\n");
|
||||
}
|
||||
|
||||
/*
|
||||
tlConOutput( "1 - lfb source format (%s)\n"
|
||||
"+/- - change width of source image copied\n"
|
||||
"s - display source image\n"
|
||||
"t - display test image\n"
|
||||
"d - display differences\n"
|
||||
"any other key to quit\n\n",
|
||||
sourceFormatString[sourceFormat] );
|
||||
*/
|
||||
|
||||
tlConRender();
|
||||
grBufferSwap( 1 );
|
||||
while( tlKbHit() ) {
|
||||
switch( tlGetCH() ) {
|
||||
case '1':
|
||||
break;
|
||||
case '+':
|
||||
break;
|
||||
case '-':
|
||||
break;
|
||||
case 's':
|
||||
if (srcfname[0]) {
|
||||
imageWidth = src.width;
|
||||
imageHeight = src.height;
|
||||
imageConvert( image, src.data, sourceFormat, &bpp );
|
||||
}
|
||||
break;
|
||||
case 't':
|
||||
if (dstfname[0]) {
|
||||
imageWidth = dst.width;
|
||||
imageHeight = dst.height;
|
||||
imageConvert( image, dst.data, sourceFormat, &bpp );
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
if (diff.width > 0)
|
||||
imageConvert( image, diff.data, sourceFormat, &bpp );
|
||||
break;
|
||||
case ' ':
|
||||
txtdisplay = !txtdisplay;
|
||||
break;
|
||||
default:
|
||||
frames = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
grGlideShutdown();
|
||||
if (srcfname[0])
|
||||
free(src.data);
|
||||
if (dstfname[0])
|
||||
free(dst.data);
|
||||
if (srcfname[0] && dstfname[0])
|
||||
free(diff.data);
|
||||
free(image);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
static void imageConvert( void *dst, void *src,
|
||||
GrLfbSrcFmt_t format, FxU32 *bpp ) {
|
||||
FxU32 x, y;
|
||||
FxU32 *longData = dst;
|
||||
FxU16 *shortData = dst;
|
||||
FxU16 *srcData = src;
|
||||
FxU32 longStride = 640;
|
||||
FxU32 shortStride = 640;
|
||||
FxU32 longColor;
|
||||
FxU16 shortColor;
|
||||
|
||||
switch( format ) {
|
||||
case GR_LFB_SRC_FMT_565:
|
||||
case GR_LFB_SRC_FMT_555:
|
||||
case GR_LFB_SRC_FMT_1555:
|
||||
*bpp = 2;
|
||||
break;
|
||||
case GR_LFB_SRC_FMT_888:
|
||||
case GR_LFB_SRC_FMT_8888:
|
||||
case GR_LFB_SRC_FMT_565_DEPTH:
|
||||
case GR_LFB_SRC_FMT_1555_DEPTH:
|
||||
case GR_LFB_SRC_FMT_555_DEPTH:
|
||||
*bpp = 4;
|
||||
break;
|
||||
}
|
||||
|
||||
for( y = 0; y < 480; y++ ) {
|
||||
for( x = 0; x < 640; x++ ) {
|
||||
switch( format ) {
|
||||
case GR_LFB_SRC_FMT_565:
|
||||
shortData[y*shortStride+x] =
|
||||
srcData[y*640+x];
|
||||
break;
|
||||
case GR_LFB_SRC_FMT_555:
|
||||
case GR_LFB_SRC_FMT_1555:
|
||||
shortColor = srcData[y*640+x];
|
||||
shortColor =
|
||||
(0x8000) | // Alpha == 1
|
||||
((shortColor >> 1) & 0x7C00) |
|
||||
((shortColor >> 1) & 0x03E0) |
|
||||
((shortColor) & 0x1f);
|
||||
shortData[y*shortStride+x] =
|
||||
shortColor;
|
||||
break;
|
||||
case GR_LFB_SRC_FMT_888:
|
||||
case GR_LFB_SRC_FMT_8888:
|
||||
longColor = srcData[y*640+x];
|
||||
longColor =
|
||||
(0xFF000000) |
|
||||
((longColor<<8)&0x00F80000) |
|
||||
((longColor<<5)&0x0000FC00) |
|
||||
((longColor<<3)&0x000000F8);
|
||||
longData[y*longStride+x] = longColor;
|
||||
break;
|
||||
case GR_LFB_SRC_FMT_565_DEPTH:
|
||||
longColor = srcData[y*640+x];
|
||||
longData[y*longStride+x] = longColor;
|
||||
break;
|
||||
case GR_LFB_SRC_FMT_1555_DEPTH:
|
||||
case GR_LFB_SRC_FMT_555_DEPTH:
|
||||
longColor = srcData[y*640+x];
|
||||
longColor =
|
||||
(0x00008000) |
|
||||
((longColor>>1) & 0x00007C00) |
|
||||
((longColor>>1) & 0x000003E0) |
|
||||
((longColor ) & 0x0000001f);
|
||||
longData[y*longStride+x] = longColor;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,200 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
*/
|
||||
|
||||
#ifndef __linux__
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#ifndef __linux__
|
||||
#include <conio.h>
|
||||
#endif
|
||||
#include <assert.h>
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include <glide.h>
|
||||
#include "tlib.h"
|
||||
|
||||
#define H3D_RED 0x000000ff
|
||||
#define H3D_GREEN 0x0000ff00
|
||||
#define H3D_YELLOW 0x0000ffff
|
||||
#define H3D_BLACK 0x00000000
|
||||
|
||||
GrHwConfiguration hwconfig;
|
||||
static char version[80];
|
||||
static int scrWidth, scrHeight, boxwidth, boxheight, origin;
|
||||
|
||||
void init(void) {
|
||||
GrState state;
|
||||
|
||||
grGlideGetState(&state);
|
||||
|
||||
grColorCombine( GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OTHER_NONE, FXFALSE );
|
||||
|
||||
grColorMask(FXTRUE,0); // make sure color buf is on
|
||||
grDepthBufferFunction( GR_CMP_ALWAYS );
|
||||
|
||||
grBufferClear( 0x00, 0, GR_ZDEPTHVALUE_FARTHEST );
|
||||
|
||||
grGlideSetState(&state);
|
||||
}
|
||||
|
||||
void drawBoxes(int w, int h, unsigned long c1, unsigned long c2) {
|
||||
GrVertex p1,p2,p3,p4;
|
||||
|
||||
p1.x = 1.f;
|
||||
p1.y = 1.f;
|
||||
p2.x = (float)w;
|
||||
p2.y = 1.f;
|
||||
p3.x = 1.f;
|
||||
p3.y = (float)h;
|
||||
p4.x = (float)w;
|
||||
p4.y = (float)h;
|
||||
grConstantColorValue( c1 );
|
||||
grDrawLine(&p1,&p2);
|
||||
grDrawLine(&p1,&p3);
|
||||
grDrawLine(&p3,&p4);
|
||||
grDrawLine(&p2,&p4);
|
||||
grDrawLine(&p1,&p4);
|
||||
grDrawLine(&p2,&p3);
|
||||
|
||||
p1.y += origin;
|
||||
p2.y += origin;
|
||||
p3.y += origin;
|
||||
p4.y += origin;
|
||||
grConstantColorValue( c2 );
|
||||
grDrawLine(&p1,&p2);
|
||||
grDrawLine(&p1,&p3);
|
||||
grDrawLine(&p3,&p4);
|
||||
grDrawLine(&p2,&p4);
|
||||
grDrawLine(&p1,&p4);
|
||||
grDrawLine(&p2,&p3);
|
||||
}
|
||||
|
||||
int main( int argc, char **argv) {
|
||||
int keepworking = 1;
|
||||
GrScreenResolution_t resolution;
|
||||
int redraw = 1;
|
||||
int redrawPattern = 0;
|
||||
int patternon = 1;
|
||||
|
||||
#ifdef H3D
|
||||
resolution = GR_RESOLUTION_640x240_AUTOFLIPPED;
|
||||
#else
|
||||
resolution = GR_RESOLUTION_640x480;
|
||||
#endif
|
||||
|
||||
/* Initialize Glide */
|
||||
grGlideInit();
|
||||
grGlideGetVersion( version );
|
||||
grSstQueryHardware( &hwconfig );
|
||||
grSstSelect( 0 );
|
||||
if ( grSstWinOpen( 0, resolution, GR_REFRESH_60Hz, GR_COLORFORMAT_ABGR, GR_ORIGIN_UPPER_LEFT, 2,1 ) ) {
|
||||
grColorCombine( GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_CONSTANT,
|
||||
GR_COMBINE_OTHER_NONE,
|
||||
FXFALSE );
|
||||
|
||||
} else {
|
||||
keepworking = 0;
|
||||
}
|
||||
grRenderBuffer( GR_BUFFER_BACKBUFFER );
|
||||
|
||||
scrWidth = grSstScreenWidth();
|
||||
scrHeight = grSstScreenHeight();
|
||||
origin = (int)scrHeight-240; // top of right eye buffer
|
||||
boxheight = (int)240;
|
||||
boxwidth = (int)scrWidth;
|
||||
|
||||
while( keepworking) {
|
||||
|
||||
while( tlKbHit() ) {
|
||||
switch( tlGetCH() ) {
|
||||
case '=' :
|
||||
case '+' :
|
||||
// move origin of 2nd page causes both box heights to resize
|
||||
if (origin < (scrHeight-1.f))
|
||||
{
|
||||
origin++;
|
||||
boxheight--;
|
||||
redraw = 1;
|
||||
}
|
||||
break;
|
||||
case '_':
|
||||
case '-' :
|
||||
if (origin > ((scrHeight/2)-1.f))
|
||||
{
|
||||
origin--;
|
||||
boxheight++;
|
||||
redraw = 1;
|
||||
}
|
||||
break;
|
||||
case '.' :
|
||||
// move origin of 2nd page causes both box heights to resize
|
||||
if (origin < (scrHeight-1.f))
|
||||
{
|
||||
origin++;
|
||||
boxheight--;
|
||||
}
|
||||
break;
|
||||
case ',' :
|
||||
if (origin > ((scrHeight/2)-1.f))
|
||||
{
|
||||
origin--;
|
||||
boxheight++;
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
patternon ^= 1;
|
||||
redrawPattern = 1;
|
||||
break;
|
||||
case 'q':
|
||||
keepworking = 0;
|
||||
break;
|
||||
case ' ':
|
||||
redraw = 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (redraw) {
|
||||
grColorMask(FXTRUE,0);
|
||||
grBufferClear( 0, 0, 0 );
|
||||
drawBoxes(boxwidth,boxheight,H3D_RED,H3D_YELLOW);
|
||||
redraw = 0;
|
||||
grBufferSwap( 1 );
|
||||
} else if (redrawPattern) {
|
||||
#ifdef H3D
|
||||
grHints(GR_HINT_H3DENABLE,patternon); // set the pattern on or off
|
||||
#endif
|
||||
redrawPattern = 0;
|
||||
}
|
||||
}
|
||||
grGlideShutdown();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@@ -1,292 +0,0 @@
|
||||
/*
|
||||
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
|
||||
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
|
||||
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
|
||||
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
|
||||
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
|
||||
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
|
||||
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
|
||||
**
|
||||
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
|
||||
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
|
||||
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
|
||||
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
|
||||
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
|
||||
** THE UNITED STATES.
|
||||
**
|
||||
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
|
||||
**
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#ifndef __linux__
|
||||
#include <conio.h>
|
||||
#endif
|
||||
#include <assert.h>
|
||||
|
||||
#include <glide.h>
|
||||
#include "tlib.h"
|
||||
|
||||
|
||||
GrHwConfiguration hwconfig;
|
||||
static char version[80];
|
||||
|
||||
static const char name[] = "test24";
|
||||
static const char purpose[] = "anti-aliased lines test";
|
||||
static const char usage[] = "-n <frames> -r <res>";
|
||||
|
||||
static int rRandom(int s, int e);
|
||||
static unsigned int iRandom (unsigned int maxr);
|
||||
|
||||
typedef enum { NORMAL, ANTIALIASED } Mode;
|
||||
|
||||
int main( int argc, char **argv) {
|
||||
char match;
|
||||
char **remArgs;
|
||||
int rv;
|
||||
|
||||
#ifdef H3D
|
||||
GrScreenResolution_t resolution = GR_RESOLUTION_640x240_AUTOFLIPPED;
|
||||
float scrWidth = 640.0f;
|
||||
float scrHeight = 240.0f;
|
||||
#else
|
||||
GrScreenResolution_t resolution = GR_RESOLUTION_640x480;
|
||||
float scrWidth = 640.0f;
|
||||
float scrHeight = 480.0f;
|
||||
#endif
|
||||
int frames = -1;
|
||||
|
||||
Mode mode;
|
||||
|
||||
int i;
|
||||
#ifdef H3D
|
||||
int eye,offset;
|
||||
#endif
|
||||
static TlVertex3D srcVerts[100];
|
||||
float angle;
|
||||
|
||||
// GrFog_t fogtable[GR_FOG_TABLE_SIZE];
|
||||
|
||||
/* Process Command Line Arguments */
|
||||
while( (rv = tlGetOpt( argc, argv, "nr", &match, &remArgs )) ) {
|
||||
if ( rv == -1 ) {
|
||||
printf( "Unrecognized command line argument\n" );
|
||||
printf( "%s %s\n", name, usage );
|
||||
printf( "Available resolutions:\n%s\n",
|
||||
tlGetResolutionList() );
|
||||
exit(1);
|
||||
}
|
||||
switch( match ) {
|
||||
case 'n':
|
||||
frames = atoi( remArgs[0] );
|
||||
break;
|
||||
case 'r':
|
||||
resolution = tlGetResolutionConstant( remArgs[0],
|
||||
&scrWidth,
|
||||
&scrHeight );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
tlSetScreen( scrWidth, scrHeight );
|
||||
|
||||
grGlideGetVersion( version );
|
||||
|
||||
printf( "%s:\n%s\n", name, purpose );
|
||||
printf( "%s\n", version );
|
||||
printf( "Resolution: %s\n", tlGetResolutionString( resolution ) );
|
||||
if ( frames == -1 ) {
|
||||
printf( "Press A Key To Begin Test.\n" );
|
||||
tlGetCH();
|
||||
}
|
||||
|
||||
/* Initialize Glide */
|
||||
grGlideInit();
|
||||
assert( grSstQueryHardware( &hwconfig ) );
|
||||
grSstSelect( 0 );
|
||||
assert( grSstWinOpen( 0,
|
||||
resolution,
|
||||
GR_REFRESH_60Hz,
|
||||
GR_COLORFORMAT_ABGR,
|
||||
GR_ORIGIN_LOWER_LEFT,
|
||||
2, 1 ) );
|
||||
|
||||
tlConSet( 0.0f, 0.0f, 1.0f, 0.5f,
|
||||
60, 15, 0xffffff );
|
||||
|
||||
/* Set up Render State - flat shading - alpha blending */
|
||||
grColorCombine( GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_CONSTANT,
|
||||
GR_COMBINE_OTHER_NONE,
|
||||
FXFALSE );
|
||||
grAlphaCombine( GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_LOCAL_ITERATED,
|
||||
GR_COMBINE_OTHER_NONE,
|
||||
FXFALSE );
|
||||
grAlphaBlendFunction( GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA,
|
||||
GR_BLEND_ZERO, GR_BLEND_ZERO );
|
||||
|
||||
/* Initialize Source 3D data - One Hundred Random Points within
|
||||
a 1x1 box */
|
||||
for( i = 0; i < 100; i++ ) {
|
||||
srcVerts[i].x = (((float)rRandom( 0, 100 )) / 100.0f ) - 0.5f;
|
||||
srcVerts[i].y = (((float)rRandom( 0, 100 )) / 100.0f ) - 0.5f;
|
||||
srcVerts[i].z = (((float)rRandom( 0, 100 )) / 100.0f ) - 0.5f;
|
||||
srcVerts[i].w = 1.0f;
|
||||
}
|
||||
|
||||
#define RED 0x000000ff
|
||||
#define BLUE 0x00ff0000
|
||||
|
||||
angle = 0.0f;
|
||||
mode = ANTIALIASED;
|
||||
|
||||
tlConOutput( "a - toggles anti-aliasing\n" );
|
||||
tlConOutput( "Press any key to quit\n\n" );
|
||||
|
||||
while( frames-- && tlOkToRender()) {
|
||||
GrVertex vtxA, vtxB;
|
||||
static TlVertex3D xfVerts[100];
|
||||
static TlVertex3D prjVerts[100];
|
||||
|
||||
// if (hwconfig.SSTs[0].type == GR_SSTTYPE_SST96) {
|
||||
tlGetDimsByConst(resolution,
|
||||
&scrWidth,
|
||||
&scrHeight );
|
||||
#ifdef H3D
|
||||
grClipWindow(0, 0, grSstScreenWidth(), grSstScreenHeight());
|
||||
#else
|
||||
grClipWindow(0, 0, (FxU32) scrWidth, (FxU32) scrHeight);
|
||||
#endif
|
||||
// }
|
||||
|
||||
grBufferClear( 0x0, 0, GR_ZDEPTHVALUE_FARTHEST );
|
||||
|
||||
/* 3D Transformations */
|
||||
angle += 1.0f;
|
||||
if ( angle > 359.0f ) angle = 0.0f;
|
||||
|
||||
tlSetMatrix( tlIdentity() );
|
||||
tlMultMatrix( tlYRotation( angle ) );
|
||||
tlMultMatrix( tlTranslation( 0.0f, 0.0f, 1.3f ) );
|
||||
|
||||
tlTransformVertices( xfVerts, srcVerts, 100 );
|
||||
tlProjectVertices( prjVerts, xfVerts, 100 );
|
||||
|
||||
grConstantColorValue( 0xffffffff );
|
||||
|
||||
switch( mode ) {
|
||||
case NORMAL:
|
||||
tlConOutput( "NORMAL LINES \r" );
|
||||
break;
|
||||
case ANTIALIASED:
|
||||
tlConOutput( "ANTIALIASED LINES \r" );
|
||||
break;
|
||||
}
|
||||
|
||||
#define SNAP_BIAS ((float)(3<<18))
|
||||
|
||||
#ifdef H3D
|
||||
for( eye = 0; eye < 2; eye++) {
|
||||
offset = (int)(eye * (grSstScreenHeight() - scrHeight)); // y offset for right eye
|
||||
grClipWindow(0, offset, (FxU32) scrWidth, (FxU32) scrHeight + offset);
|
||||
|
||||
for( i = 0; i < 100; i+=2 ) {
|
||||
vtxA.oow = 1.0f / prjVerts[i].w;
|
||||
vtxA.x = (tlScaleX( prjVerts[i].x ) + (((eye*2)-1)*(vtxA.oow-.5f)*16));
|
||||
vtxA.x += SNAP_BIAS;
|
||||
vtxA.y = tlScaleY( prjVerts[i].y ) + offset;
|
||||
vtxA.y += SNAP_BIAS;
|
||||
vtxA.a = 255.0f;
|
||||
|
||||
vtxB.oow = 1.0f / prjVerts[i+1].w;
|
||||
vtxB.x = SNAP_BIAS + (tlScaleX( prjVerts[i+1].x ) + (((eye*2)-1)*(vtxB.oow-.5f)*16));
|
||||
vtxB.y = SNAP_BIAS+tlScaleY( prjVerts[i+1].y ) + offset;
|
||||
vtxB.a = 255.0f;
|
||||
switch( mode ) {
|
||||
case NORMAL:
|
||||
grDrawLine( &vtxA, &vtxB );
|
||||
break;
|
||||
case ANTIALIASED:
|
||||
grAADrawLine( &vtxA, &vtxB );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
for( i = 0; i < 100; i+=2 ) {
|
||||
vtxA.x = SNAP_BIAS+tlScaleX( prjVerts[i].x );
|
||||
vtxA.y = SNAP_BIAS+tlScaleY( prjVerts[i].y );
|
||||
vtxA.oow = 1.0f / prjVerts[i].w;
|
||||
vtxA.a = 255.0f;
|
||||
vtxB.x = SNAP_BIAS+tlScaleX( prjVerts[i+1].x );
|
||||
vtxB.y = SNAP_BIAS+tlScaleY( prjVerts[i+1].y );
|
||||
vtxB.oow = 1.0f / prjVerts[i+1].w;
|
||||
vtxB.a = 255.0f;
|
||||
switch( mode ) {
|
||||
case NORMAL:
|
||||
grDrawLine( &vtxA, &vtxB );
|
||||
break;
|
||||
case ANTIALIASED:
|
||||
grAADrawLine( &vtxA, &vtxB );
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
grBufferSwap( 1 );
|
||||
grSstIdle();
|
||||
|
||||
while( tlKbHit() ) {
|
||||
switch( tlGetCH() ) {
|
||||
case 'a':
|
||||
case 'A':
|
||||
mode++;
|
||||
mode%=2;
|
||||
break;
|
||||
default:
|
||||
frames = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
grGlideShutdown();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static unsigned long randx = 1;
|
||||
|
||||
static unsigned int iRandom (unsigned int maxr)
|
||||
{
|
||||
unsigned int n,retval;
|
||||
|
||||
if (maxr > 0xFFFFFFF) {
|
||||
do {
|
||||
retval = iRandom(0xFFFFFFF);
|
||||
retval |= iRandom(maxr>>28)<<28;
|
||||
} while (retval > maxr);
|
||||
return retval;
|
||||
}
|
||||
for (n=1; n<32; n++)
|
||||
if (((unsigned)1 << n) > maxr) break;
|
||||
do {
|
||||
randx = randx*1103515245 + 12345;
|
||||
retval = (randx & 0x7fffffff) >> (31-n);
|
||||
} while (retval > maxr);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int rRandom(int s, int e)
|
||||
{
|
||||
return s + iRandom(e-s);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user